SlideShare una empresa de Scribd logo
1 de 47
設計と実装で
抑えておきたい
サービスクラスと例外
UUUM株式会社 佐藤琢哉(nazo)
UUUMについて
• YouTuberであれこれする会社
• HIKAKIN・はじめしゃちょー・フィッシャー
ズ…
• 自社チャンネルも多数
会場提供
DCI Toyko #1
エンジニア採用してま
す
• エンジニアいるんですよ
• クリエイター向けサービス、一般向けサービス
、ゲーム、データ解析などなど…
• 詳細はuuum.co.jpで
本スライドの内容について
• プログラムを書く上で抑えておきたい点
• サービスクラスって何?必要なの?
• DDDの話ではなく、なぜ「サービスクラス」
というものが存在するのか、という話
• 例外の書き方って?
今時の設計って?
• DDDとかDCIとかオニオンアーキテクチャとか
クリーンアーキテクチャとかMVVMとかSOLID
原則とかなんとか…
• 覚えきれない!
• 自分は覚えれたとしてもチーム全員が覚える
まで待つ?無理じゃない?
• 設計力だけでなく設計思想にも個人差がある
• 設計に正解はない
• とはいえチーム開発ではある程度同程度の品質
にしたいし、コードレビューでケンカするよう
な状況になってはいけない
• ここだけ抑えておくというところを決める
ここだけ抑える
• サービスクラスの作り方
• 例外設計
• テストは書く!
お詫び
• 以下の内容は、各種書籍やインターネット上の
文献を元に、独自解釈を加えたものです
• 断言しているような箇所がいくつかありますが
、あくまで「私なりの定義」であり、一般的に
こうだ!というものではありません
• 他所で似たような話をしても通じない・解釈が
違う可能性があります
サービスクラス
サービスクラスとは?
• ビジネスロジック(ドメインロジック)を書く
場所の集合体
• クラスじゃなくてもいい(言語による)
MVCの何が足りない?
• MVCはシステム的な観点で役割を分解したもの
• 処理(M)・出力(V)・フロー(C)
• 本来の意味ではモデルとサービスは同等
モデルではだめなのか
?
• 現代ではなぜかモデルがテーブルと1:1だったり
、そもそもテーブルの1レコードを表すようにな
ってしまった
• それにしても役割が多すぎる
モデルを更に分解する
• Entity
• ドメインモデル層のオブジェクト
• 誤解前提で言えば1レコード
• Repository
• Entityの倉庫
• 誤解前提で言えばSQL
• Service
• ビジネスロジック
• 他にもある
Railsで考える
• Entity : Modelオブジェクト
• Repository : Modelのクラスメソッド(特に
scope)
• Service : どこ?
(Railsの)モデルクラスにサ
ービスを書いたら駄目なのか
?
• テーブルはあくまで集合を表すもの
• ロジックは業務であり、業務は集合ではない
• テーブル名と業務名が同じとしても、そこは明
確に分けたほうがいい
• まあでも面倒だったら書いてもいいんじゃな
い(適当)
そもそもビジネスロジックっ
て何?
• ドメインロジック(違いあるの?)
• 実際に(そのシステムで)行われる業務をコー
ドに落とし込んだもの
• 「責任範囲」という単位で分割される
責任範囲
• その業務はどこまでの内容に対して責任を持っ
ているか
• その業務が責任を持っていない範囲はどこか
• なるべく1業務の責任範囲は最小にする
業務
• なるべく現実の業務を「そのまま」コードに落と
す
• 「人事部」には「人材を探す業務」や「人員を
異動させる業務」とかがあって…みたいな
• 「人事部」がサービスクラスで、様々な細かい
業務がメソッド
• 日本語で考えて設計する
なんかそのビジネスロジック
とかがわかんないんだけど…
• こればかりは案件次第なのでトレーニングが必
要
• 基本は「システム的でないもの」
• システム的なものって?
• リクエストから来たものをどうするとか
• 認証がどうとか
• ビューに渡すための整形とか
今までのコントローラーの中
身をサービスに移せばいいの
?
• 全然違う
• よくある間違い
• サービスクラス内に `execute` みたいなメソッ
ドが1しかないやつ
• コントローラーに書く必要があるものはコント
ローラーに書いて良い
• 前述の「システム的なもの」
• そこの共通化はサービスの責務ではない
コントローラーには処理の流
れを書く
• リクエストからフォームを作って
• フォームで入力値を検証して
• 入力値が問題なければビジネスロジックで処理
して
• 処理結果をビューに渡す
サービスクラスにはビジネス
ロジックのみを書く
• インフラ固有のコードはビジネスロジックでは
ない
• 入出力のためのコードはビジネスロジックでは
ない
メール送信とか外部API呼び出
しとか
• それらは別クラスに分類
• ビジネスロジック内でそれらを直接書いてはい
けない
• 依存するものであればDIで依存関係を明確にす
る
• 依存しなくてもいいのであればコントローラー
などでそれぞれ別に扱う
データと業務は違う
• 「注文」テーブルと「注文」業務
• たまたま同じ名前なだけ
• データは自ら処理しない
• 「注文明細」テーブルがあっても「注文明細」
業務はない
コントローラーを全部サービ
スにすればいいの?
• 違うよ全然違うよ
• サービスはビジネスロジックだけを書く場所だ
よ
• サービスが全てではないよ
Dependency Injection
• サービスAはサービスBに依存する
• サービスAはインフラCに依存する
• 事前に定義することで依存関係を明確にする
• 外部ライブラリなどの依存関係の差し替え
• 依存部分をモック化することによってテストを明
確にする
DIとテスト
• DIはテストのためにあると言っても過言ではな
い
• そのテストはどのビジネスロジックを対象とし
たものか
• 他のビジネスロジックのテストを混ぜてはいけ
ない
テストが書きやすい設計
• テスト対象が複雑であればあるほどテストしに
くい
• 常に「このコードはテストが書きやすいか」を
意識する
役割を混ぜない
• サービスクラスにしてもDIにしてもテストにし
ても、「役割を明確にする」ということが全て
• 違う役割のものは違う箇所に
• 役割=ドメイン 役割を基準に考える=ドメイ
ン駆動設計…?
• 本資料はDDDの解説ではありません
役割を最小にする
• 1つのメソッドは1つの役割のみにする
• あれもしてこれもして…みたいなのは作らない
• 作るなら「それだけに専念する」
• それを呼び出すことによって起こることを明確
にする
まとめ
• 「モデル」と呼ばれているものは役割(責務)
が多すぎるので分解する
• サービスクラスはそのための手法の一つ
• 1メソッドでの役割は1つに絞る
• 少ない役割に対してテストを書く
例外とエラー処理
例外
• いわゆる try catch
ダメ
try {
…
} catch (Exception $e) {
…
}
例外とは?
• 「例外」
• 本来ありえない状態
本来ありえない状態
• いかなるユーザーの操作でも起こらない状態
• ユーザーの操作によって起こる状態は正常系
• 「正常に」エラーを返す
本来ありえない状態
• DBなどへの接続エラー
• 本来その状態では起こり得ないデータの状態
• 通常の方法では入力できないものを入力したと
か
例外とバリデーション
• 入力に対する検証=バリデーション
• それだけではないが
• バリデーション違反は、適切な違反理由をユーザーに返却
する
• 処理が続行不可能になる=例外
• 例外の場合は、ユーザーに詳細内容を伝える必要はない
• あっても問い合わせコードみたいなのとか
例外とcatch
• 続行不可能なんだから基本的にはcatchしてはい
けない
• そのまま静かに終了するのが良い
catchしてもいい場合
• 特定のライブラリの範囲内では続行不能だが
、それを取り扱うアプリケーション的には続
行可能な場合
• 特定ドメインでは続行不可能だが、ドメイ
ンの外では続行可能
catchするからには責任を持つ
• 例外を握りつぶす=本来ありえない状態を無視
する
• 危険な状態を見過ごす可能性が高い
• 本当に握りつぶして良いか、エラーログはどう
扱えばいいのか
全catchがダメな理由
• 何の例外がそこで出るのか全て把握しているか
?
• それを全部握りつぶして良いのか把握している
のか?
DBロールバックと例外
• ロールバックしたいから全部の例外を取りたい
• それ本当に必要?
• セッションが終了してしまえば勝手にロールバ
ックされる
• 終了で自動切断の仕組みを作っておく
ログと例外
• ログを取りたいから全てcatchしたい
• それも本当に必要?
• 例外をcatchしない場合に外側で勝手にログを吐
くようにすればいい
例外と責務
• 共通的な例外処理は各個別処理でやることでは
ない
• 共通のことは共通の部分に任せる
• 個別処理は個別処理に集中する
まとめ
• 例外を取る必要があるのか考える
• 例外を取った場合は取った例外の種類全てに責
任を持って対応する

Más contenido relacionado

La actualidad más candente

イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)Yoshitaka Kawashima
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)Mikiya Okuno
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する増田 亨
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門増田 亨
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring増田 亨
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと増田 亨
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し増田 亨
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
TRICK 2022 Results
TRICK 2022 ResultsTRICK 2022 Results
TRICK 2022 Resultsmametter
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースHajime Yanagawa
 

La actualidad más candente (20)

イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
TRICK 2022 Results
TRICK 2022 ResultsTRICK 2022 Results
TRICK 2022 Results
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 

Similar a 設計と実装で 抑えておきたい サービスクラスと例外

Uno Platform か Blazor
Uno Platform か BlazorUno Platform か Blazor
Uno Platform か BlazorHiroyuki Mori
 
第7回SIA研究会(例会)プレゼン資料 油野様
第7回SIA研究会(例会)プレゼン資料 油野様第7回SIA研究会(例会)プレゼン資料 油野様
第7回SIA研究会(例会)プレゼン資料 油野様Tae Yoshida
 
ロボコンの為のFusion360講座 vol1.モデリング編
ロボコンの為のFusion360講座 vol1.モデリング編ロボコンの為のFusion360講座 vol1.モデリング編
ロボコンの為のFusion360講座 vol1.モデリング編Ryo Takahashi
 
UXデザイン✕アジャイル✕受託開発
UXデザイン✕アジャイル✕受託開発UXデザイン✕アジャイル✕受託開発
UXデザイン✕アジャイル✕受託開発Takuya Kitamura
 
ドメイン駆動設計再入門
ドメイン駆動設計再入門ドメイン駆動設計再入門
ドメイン駆動設計再入門Yukei Wachi
 
altJSの選び方
altJSの選び方altJSの選び方
altJSの選び方terurou
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけらAtsushi Nakamura
 
UXMILKallnight_システム開発でデザイナーは何をすればいい?
UXMILKallnight_システム開発でデザイナーは何をすればいい?UXMILKallnight_システム開発でデザイナーは何をすればいい?
UXMILKallnight_システム開発でデザイナーは何をすればいい?Takami Yusuke
 
SIerで幸せな技術キャリアを築くために
SIerで幸せな技術キャリアを築くためにSIerで幸せな技術キャリアを築くために
SIerで幸せな技術キャリアを築くためにTakanari Konishi
 
開発者のためのUIデザイン入門
開発者のためのUIデザイン入門開発者のためのUIデザイン入門
開発者のためのUIデザイン入門Hiroyuki Mori
 
ゲームの裏側を支える人たちの裏側
ゲームの裏側を支える人たちの裏側ゲームの裏側を支える人たちの裏側
ゲームの裏側を支える人たちの裏側Riou Tomita
 
分かりやすく、使いやすいデザインを生み出す工夫 先生:池田 拓司
分かりやすく、使いやすいデザインを生み出す工夫 先生:池田 拓司分かりやすく、使いやすいデザインを生み出す工夫 先生:池田 拓司
分かりやすく、使いやすいデザインを生み出す工夫 先生:池田 拓司schoowebcampus
 
みくみくまうすについて&Unity で使えるコーディングノウハウ
みくみくまうすについて&Unity で使えるコーディングノウハウみくみくまうすについて&Unity で使えるコーディングノウハウ
みくみくまうすについて&Unity で使えるコーディングノウハウtorisoup
 
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」Hiroyuki Ohnaka
 
観たいセッションがかぶった!なんて心配ご無用。今年は、興味の赴くままにあれもこれも♪
観たいセッションがかぶった!なんて心配ご無用。今年は、興味の赴くままにあれもこれも♪観たいセッションがかぶった!なんて心配ご無用。今年は、興味の赴くままにあれもこれも♪
観たいセッションがかぶった!なんて心配ご無用。今年は、興味の赴くままにあれもこれも♪Kazumi IWANAGA
 
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩みドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩みhaljik Seiji
 

Similar a 設計と実装で 抑えておきたい サービスクラスと例外 (20)

Uno Platform か Blazor
Uno Platform か BlazorUno Platform か Blazor
Uno Platform か Blazor
 
第7回SIA研究会(例会)プレゼン資料 油野様
第7回SIA研究会(例会)プレゼン資料 油野様第7回SIA研究会(例会)プレゼン資料 油野様
第7回SIA研究会(例会)プレゼン資料 油野様
 
ロボコンの為のFusion360講座 vol1.モデリング編
ロボコンの為のFusion360講座 vol1.モデリング編ロボコンの為のFusion360講座 vol1.モデリング編
ロボコンの為のFusion360講座 vol1.モデリング編
 
UXデザイン✕アジャイル✕受託開発
UXデザイン✕アジャイル✕受託開発UXデザイン✕アジャイル✕受託開発
UXデザイン✕アジャイル✕受託開発
 
ドメイン駆動設計再入門
ドメイン駆動設計再入門ドメイン駆動設計再入門
ドメイン駆動設計再入門
 
altJSの選び方
altJSの選び方altJSの選び方
altJSの選び方
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
 
UXMILKallnight_システム開発でデザイナーは何をすればいい?
UXMILKallnight_システム開発でデザイナーは何をすればいい?UXMILKallnight_システム開発でデザイナーは何をすればいい?
UXMILKallnight_システム開発でデザイナーは何をすればいい?
 
SIerで幸せな技術キャリアを築くために
SIerで幸せな技術キャリアを築くためにSIerで幸せな技術キャリアを築くために
SIerで幸せな技術キャリアを築くために
 
開発者のためのUIデザイン入門
開発者のためのUIデザイン入門開発者のためのUIデザイン入門
開発者のためのUIデザイン入門
 
ゲームの裏側を支える人たちの裏側
ゲームの裏側を支える人たちの裏側ゲームの裏側を支える人たちの裏側
ゲームの裏側を支える人たちの裏側
 
分かりやすく、使いやすいデザインを生み出す工夫 先生:池田 拓司
分かりやすく、使いやすいデザインを生み出す工夫 先生:池田 拓司分かりやすく、使いやすいデザインを生み出す工夫 先生:池田 拓司
分かりやすく、使いやすいデザインを生み出す工夫 先生:池田 拓司
 
Saleshub 20220302
Saleshub 20220302Saleshub 20220302
Saleshub 20220302
 
Jaws ug yokoyama-16
Jaws ug yokoyama-16Jaws ug yokoyama-16
Jaws ug yokoyama-16
 
15 c5 dad
15 c5 dad15 c5 dad
15 c5 dad
 
みくみくまうすについて&Unity で使えるコーディングノウハウ
みくみくまうすについて&Unity で使えるコーディングノウハウみくみくまうすについて&Unity で使えるコーディングノウハウ
みくみくまうすについて&Unity で使えるコーディングノウハウ
 
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
 
観たいセッションがかぶった!なんて心配ご無用。今年は、興味の赴くままにあれもこれも♪
観たいセッションがかぶった!なんて心配ご無用。今年は、興味の赴くままにあれもこれも♪観たいセッションがかぶった!なんて心配ご無用。今年は、興味の赴くままにあれもこれも♪
観たいセッションがかぶった!なんて心配ご無用。今年は、興味の赴くままにあれもこれも♪
 
Kwc uxjam160831
Kwc uxjam160831Kwc uxjam160831
Kwc uxjam160831
 
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩みドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
 

Más de Takuya Sato

レガシープロダクトを改善していくための戦い方
レガシープロダクトを改善していくための戦い方レガシープロダクトを改善していくための戦い方
レガシープロダクトを改善していくための戦い方Takuya Sato
 
本番環境で使いたいPHP
本番環境で使いたいPHP本番環境で使いたいPHP
本番環境で使いたいPHPTakuya Sato
 
徹底攻略!PHP5.4
徹底攻略!PHP5.4徹底攻略!PHP5.4
徹底攻略!PHP5.4Takuya Sato
 
ここがすごい! なぞとPHP5.3
ここがすごい! なぞとPHP5.3ここがすごい! なぞとPHP5.3
ここがすごい! なぞとPHP5.3Takuya Sato
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワークTakuya Sato
 
Redmineで始めるチケット駆動開発
Redmineで始めるチケット駆動開発Redmineで始めるチケット駆動開発
Redmineで始めるチケット駆動開発Takuya Sato
 
フレームワーク使おうぜ!
フレームワーク使おうぜ!フレームワーク使おうぜ!
フレームワーク使おうぜ!Takuya Sato
 
本当は怖いPHP
本当は怖いPHP本当は怖いPHP
本当は怖いPHPTakuya Sato
 
PHPとMongoDBで学ぶ次世代データストア
PHPとMongoDBで学ぶ次世代データストアPHPとMongoDBで学ぶ次世代データストア
PHPとMongoDBで学ぶ次世代データストアTakuya Sato
 
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考えるPHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考えるTakuya Sato
 

Más de Takuya Sato (12)

レガシープロダクトを改善していくための戦い方
レガシープロダクトを改善していくための戦い方レガシープロダクトを改善していくための戦い方
レガシープロダクトを改善していくための戦い方
 
Vue.js入門
Vue.js入門Vue.js入門
Vue.js入門
 
本番環境で使いたいPHP
本番環境で使いたいPHP本番環境で使いたいPHP
本番環境で使いたいPHP
 
徹底攻略!PHP5.4
徹底攻略!PHP5.4徹底攻略!PHP5.4
徹底攻略!PHP5.4
 
Silex入門
Silex入門Silex入門
Silex入門
 
ここがすごい! なぞとPHP5.3
ここがすごい! なぞとPHP5.3ここがすごい! なぞとPHP5.3
ここがすごい! なぞとPHP5.3
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワーク
 
Redmineで始めるチケット駆動開発
Redmineで始めるチケット駆動開発Redmineで始めるチケット駆動開発
Redmineで始めるチケット駆動開発
 
フレームワーク使おうぜ!
フレームワーク使おうぜ!フレームワーク使おうぜ!
フレームワーク使おうぜ!
 
本当は怖いPHP
本当は怖いPHP本当は怖いPHP
本当は怖いPHP
 
PHPとMongoDBで学ぶ次世代データストア
PHPとMongoDBで学ぶ次世代データストアPHPとMongoDBで学ぶ次世代データストア
PHPとMongoDBで学ぶ次世代データストア
 
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考えるPHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考える
 

設計と実装で 抑えておきたい サービスクラスと例外