SlideShare uma empresa Scribd logo
1 de 48
Baixar para ler offline
Laravel
×
レイヤードアーキテクチャ
を実践して得られた知見と反省
Japan PHP Conference 2018
@okashoi WILLGATE, Inc.
岡田 正平(おかだ しょうへい)@okashoi
• 株式会社ウィルゲート
• PHP, Laravel, Vue.js
• Golang はじめました
2
自己紹介
Slides:
Services Tech Blog Events
ブログやってます!イベントやってます!
「ウィルゲート テックブログ」で検索!
4
今年の phpcon のテーマ = “GROWTH”
今日の目標:私たちの失敗を共有すること
• 人や組織は「失敗」によって成長する
• 成功には再現性はないが、失敗には再現性がある
➢ 私が携わった 2 つのプロジェクトについて
具体的な事例、特に失敗を共有し
皆さんの糧にしてもらいたい
5
今年の phpcon のテーマ = “GROWTH”
今回は「具体的にどのような実装になるか」
という話(※)はほとんど出てきません
※またどこか別の機会を得て話したい
• 背景
• Laravel とレイヤードアーキテクチャの親和性
• 失敗したこと
• おわりに
7
目次
• 背景
• Laravel とレイヤードアーキテクチャの親和性
• 失敗したこと
• おわりに
8
目次
プロジェクト A
• 2018 年 4 月~
• Laravel で HTML を render して返す
典型的な web アプリケーション
• PL + 実装者 2 名 +
プロジェクト B
• 2018 年 6 月~
• SPA(API を Laravel で実装)
• PM + フロント 3 名 + サーバサイド 4 名 +
9
2 つのプロジェクト
• いずれも実装者のほとんどが Laravel 未経験
• なぜ Laravel?
• 技術のキャッチアップのため
• チーム横断人材の育成のため
• の役割はアプリケーションアーキテクト
• 別チームで Laravel をメインで使っていたので
白羽の矢が立った
10
2 つのプロジェクト
※ 2018 年 3 月ごろ
「チームはわざわざ『Laravel に切り替える』
というコストを払っている……」
11
自分が提供できる価値を考える
※ 2018 年 3 月ごろ
「Laravel をただの MVC フレームワークとして
使うのでは得られるものが少ないのでは?」
12
自分が提供できる価値を考える
かくして、チームを巻き込んだ
レイヤードアーキテクチャへの
試行錯誤の旅が始まった
• 背景
• Laravel とレイヤードアーキテクチャの親和性
• 失敗したこと
• おわりに
14
目次
• ディレクトリ構成を自由に設定できる
• DI のための仕組みが充実
• Eloquent ORM などの豊富で強力な機能
15
Laravel の特徴
• ディレクトリ構成を自由に設定できる
• DI のための仕組みが充実
• Eloquent ORM などの豊富で強力な機能
16
Laravel の特徴
→レイヤードアーキテクチャと相性がいい
→どこまでその機能を活用するか悩ましい
• もとから Laravel に存在している
概念は該当する層の中に移動
• 依存性の逆転を発生させる際に
DI の仕組みを活用
17
自由なディレクトリ構成と DI の仕組み
• もとから Laravel に存在している
概念は該当する層の中に移動
• 依存性の逆転を発生させる際に
DI の仕組みを活用
18
自由なディレクトリ構成と DI の仕組み
Application
Infrastructure
Domain
処理の流れ 依存の方向
出典: DDDパターンを活用したLaravelアプリケーション開発
/ddd-with-laravel
https://speakerdeck.com/shin1x1/ddd-with-laravel
(めちゃくちゃ参考にしました 感謝 )
19
参考にさせていただいたもの
• 背景
• Laravel とレイヤードアーキテクチャの親和性
• 失敗したこと
• おわりに
20
目次
失敗 1
Value Object
が形骸化した
本来の意図
値の振る舞いや制約をオブジェクトで表現する
• 例)「価格」 Value Object
• マイナス値を取らない
• 消費税込みの金額を算出できる など
実際に起きたこと
全カラムと 1 対 1 のクラスを作ることが目的に
➢ ロジックの無いクラスが大量生産される
22
Value Object の形骸化
<?php
namespace App¥Domain¥Models¥News;
/**
* Class Title
*/
class Title
{
/**
* @var string
*/
private $value;
/**
* @param string $value
*/
public function __construct(string $value)
{
$this->value = $value;
}
/**
* @return string
*/
public function value(): string
{
return $this->value;
}
}
このようなクラスが
DB のカラムの数だけ
作成された
どうすればよかったか?
• Value Object に「どんなメリットがあるか」
をベースにしてメンバーの認識すり合わせる
• 振る舞いや制約がない値は Value Object にしない
• 自由入力形式のテキストや bool 値など
24
Value Object の形骸化
失敗 2
Domain 層に
整形処理を書いた
json API の実装において Entity や Value Object に
を実装
26
整形処理の実装箇所
class User implements ¥JsonSerializable
{
// 略
public function jsonSerialize(): array
{
return [
'id' => $this->id,
'mail_address' => $this->mailAddress,
'profile' => [
'last_name' => $this->lastName,
'first_name' => $this->firstName,
'user_name' => $this->userName,
'sex' => $this->sex,
],
];
}
}
{
"id": 1,
"mail_address": "john@example.org",
"profile": {
"last_name": "Doe",
"first_name": "John",
"user_name": "johndoe",
"sex": "male"
}
}
jsonSerialize()
Controller が薄く、はじめは良い実装に見えた
27
整形処理の実装箇所
class UserController extends Controller
{
public function detail(User $user)
{
return response(['user' => $user]);
}
public function create(CreateRequest $request, UserRepository $userRepository)
{
$user = $userRepository->create($request->validated());
return response(['user' => $user], 201);
}
public function update(User $user, UpdateRequest $request, UserRepository $userRepository)
{
$user = $userRepository->update($user->id(), $request->validated());
return response(['user' => $user], 200);
}
}
• 一方で「ユーザ一覧 API」では
次のようなレスポンス欲しくなった
• 対応するために Entity に という
プロパティをもたせて条件分岐させるようにした
➢ ドメインの関心ごと以外が混ざってしまった
28
整形処理の実装箇所
{
"users": [
{"id": 1, "user_name": "jonedoe"},
{"id": 2, "user_name": "janedoe"},
// ...
]
}
$requestType
どうすればよかったか? その 1
• そもそも整形処理(レスポンス形式)自体が
ドメインの関心ごとではない
➢ Application 層に整形を担う
Presenter のようなクラスを設置する
• 「Controller を薄くすること」を目的にしない
• あくまで 1 つの指標に過ぎない
29
整形処理の実装箇所
どうすればよかったか? その 2
• CQRS を適用する
• 副作用のある Command と
副作用のない Query で役割を分割する
➢ 「一覧取得」は Query で行い
Entity を経由せずに、連想配列の形で扱ってしまう
30
整形処理の実装箇所
失敗? 3
作るシステムの
規模を考慮しなかった
プロジェクト A の場合
• 最初のリリースまでに 3 ヶ月程度
• リリース後に大きな追加開発はしない想定
• 一般に公開はしないクローズドなシステム
➢ システムの規模に対してクラスの種類が多く
機能実装のオーバーヘッドが大きくなっていたの
ではないか?
32
規模に見合ったアーキテクチャか?
33
規模に見合ったアーキテクチャか?
MVC レイヤードアーキテクチャ
• routing
• Controller (Request)
• Model (ORM)
• View
• routing
• Controller (Request)
• Use Case
• Entity
• Value Object
• Domain Service
• Repository (Interface)
• Repository (Implementation)
• ORM
• View
MVC と比較して考慮するべき概念は増える
レイヤードアーキテクチャのメリット(私的解釈)
• MVC をもう少し詳細に分割・責務を明確化
(”Model” が指すものは人によってまちまち)
➢ コードの可読性が保たれる中長期的なメリット
• 「依存性の逆転」を活用して
ドメイン知識を何にも依存させない(保護する)
➢ 複雑な問題を扱うシステムほどその効果が大きい
34
規模に見合ったアーキテクチャか?
どうすればよかったか?
• 複雑でないシステムなら MVC でも充分
• レイヤードアーキテクチャに出てくる概念の
一部だけを適用するのも良い
• 一方で、この挑戦によって得られた知見が
たくさんあった事実も軽視できない
➢ これらを踏まえて、ステークホルダーの合意を
取ったうえで採用するのならば問題はない
(今回は合意を取っていた)
35
規模に見合ったアーキテクチャか?
失敗? 4
ドメインモデリングと
設計が分かれていた
• いずれも実装者のほとんどが Laravel 未経験
• なぜ Laravel?
• 技術のキャッチアップのため
• チーム横断人材の育成のため
• の役割はアプリケーションアーキテクト
• 別チームで Laravel をメインで使っていたので
白羽の矢が立った
37
再掲:2 つのプロジェクト
• 別チームからの兼任なので
サービスや業務フローへの理解が浅い状態
• アプリケーションアーキテクトとしての参加で
要件定義には参加していない
• 一度要件に落とされたものをベースに設計
➢ 伝言ゲーム形式になって
本質を突いた設計になっているかがわからない
38
モデリングと設計の分離
どうすればよかったか?
• レイヤードアーキテクチャの恩恵を
存分に受けたければドメイン知識の理解は必須
• 理解が深い者が設計を行う
• 設計者が理解を深める
• ただし、実装パターンとして適用するだけでも
受けられる恩恵はあるので無意味とはいえない
• テストコードが書きやすい
• プルリクの粒度が小さくなった? など
39
モデリングと設計の分離
• 背景
• Laravel とレイヤードアーキテクチャの親和性
• 失敗したこと
• おわりに
40
目次
レイヤードアーキテクチャの採用は正解だったのか?
41
おわりに
レイヤードアーキテクチャの採用は正解だったのか?
(現時点では)正直わからない......
➢ その設計が「良かった」かどうかは
数年後になって初めて判断できるようになる
42
おわりに
「設計として」正解かどうかはわからない
だけど
取り組んだことそれ自体は
正解にすることができる
(やったからには、何が何でも正解にしたい)
43
おわりに
• メンバーに Laravel の知識や
レイヤードアーキテクチャの概念を伝搬する
• 試行錯誤の過程で生まれたドキュメント等を
組織の資産にする
• (失敗)事例は外に向けてアウトプットする
➢ 自分/組織/社会の成長の糧にする
44
やったからには余すこと無く価値に変える
• メンバーに Laravel の知識や
レイヤードアーキテクチャの概念を伝搬する
• 試行錯誤の過程で生まれたドキュメント等を
組織の資産にする
• (失敗)事例は外に向けてアウトプットする
➢ 自分/組織/社会の成長の糧にする
45
やったからには余すこと無く価値に変える
今日、この場でお話ししているのも
「取り組んだことそれ自体」を正解にするため
46
さて、今年の phpcon のテーマは?
47
さて、今年の phpcon のテーマは?
挑戦して
その結果を発信して
みんなで”成長”しましょう
来年の phpcon で
お待ちしています!

Mais conteúdo relacionado

Mais procurados

オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫Yuta Imai
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話Takuto Wada
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニックinfinite_loop
 
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜Takahiro Inoue
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐりKazuyuki TAKASE
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)NTT DATA Technology & Innovation
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来についてshinjiigarashi
 
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolangFINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolangYoshiki Shibukawa
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
Go言語によるwebアプリの作り方
Go言語によるwebアプリの作り方Go言語によるwebアプリの作り方
Go言語によるwebアプリの作り方Yasutaka Kawamoto
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeNA
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見るbacklogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見るTakeru Maehara
 

Mais procurados (20)

オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
実践 NestJS
実践 NestJS実践 NestJS
実践 NestJS
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
 
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
 
GraphQL入門 (AWS AppSync)
GraphQL入門 (AWS AppSync)GraphQL入門 (AWS AppSync)
GraphQL入門 (AWS AppSync)
 
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolangFINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Go言語によるwebアプリの作り方
Go言語によるwebアプリの作り方Go言語によるwebアプリの作り方
Go言語によるwebアプリの作り方
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見るbacklogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
 
KeycloakでAPI認可に入門する
KeycloakでAPI認可に入門するKeycloakでAPI認可に入門する
KeycloakでAPI認可に入門する
 

Semelhante a Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered architecture

Ecmascript2015とその周辺について
Ecmascript2015とその周辺についてEcmascript2015とその周辺について
Ecmascript2015とその周辺について豊明 尾古
 
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクトアシアル株式会社
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
私とOSS活動とPerl
私とOSS活動とPerl私とOSS活動とPerl
私とOSS活動とPerlShunsuke Maeda
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for JavaTakuya Tsuchida
 
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピングpi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピングkunihikokaneko1
 
ウェブから情報をあつめる
ウェブから情報をあつめるウェブから情報をあつめる
ウェブから情報をあつめるShuhei Iitsuka
 
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー<第1回>Laravelハンズオンセミナー
<第1回>LaravelハンズオンセミナーTatsuyoshi Mashiko
 
20110714 j queryベーシック
20110714 j queryベーシック20110714 j queryベーシック
20110714 j queryベーシック良太 増子
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittrkenjis
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio CodeAkira Inoue
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門spring_raining
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門Sho A
 
Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks Hiroshi Ito
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!Shohei Okada
 
LaravelでAPI定義を管理する
LaravelでAPI定義を管理するLaravelでAPI定義を管理する
LaravelでAPI定義を管理するKenjiro Kubota
 
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Takashi EGAWA
 

Semelhante a Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered architecture (20)

Ecmascript2015とその周辺について
Ecmascript2015とその周辺についてEcmascript2015とその周辺について
Ecmascript2015とその周辺について
 
Visualforce + jQuery
Visualforce + jQueryVisualforce + jQuery
Visualforce + jQuery
 
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
私とOSS活動とPerl
私とOSS活動とPerl私とOSS活動とPerl
私とOSS活動とPerl
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for Java
 
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピングpi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
 
ウェブから情報をあつめる
ウェブから情報をあつめるウェブから情報をあつめる
ウェブから情報をあつめる
 
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー
 
20110714 j queryベーシック
20110714 j queryベーシック20110714 j queryベーシック
20110714 j queryベーシック
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittr
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio Code
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門
 
Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
 
Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
 
LaravelでAPI定義を管理する
LaravelでAPI定義を管理するLaravelでAPI定義を管理する
LaravelでAPI定義を管理する
 
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010
 

Mais de Shohei Okada

「登壇しているひとは偉い」という話
「登壇しているひとは偉い」という話「登壇しているひとは偉い」という話
「登壇しているひとは偉い」という話Shohei Okada
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようShohei Okada
 
PHP 8.0 の新記法を試してみよう!
PHP 8.0 の新記法を試してみよう!PHP 8.0 の新記法を試してみよう!
PHP 8.0 の新記法を試してみよう!Shohei Okada
 
自分たちのコードを Composer パッケージに分割して開発する
自分たちのコードを Composer パッケージに分割して開発する自分たちのコードを Composer パッケージに分割して開発する
自分たちのコードを Composer パッケージに分割して開発するShohei Okada
 
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumai
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumaiクリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumai
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumaiShohei Okada
 
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawaクリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawaShohei Okada
 
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondo
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondoクリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondo
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondoShohei Okada
 
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfukLaravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfukShohei Okada
 
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyoエラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyoShohei Okada
 
スペシャリストとして組織をつくる、というキャリア
スペシャリストとして組織をつくる、というキャリアスペシャリストとして組織をつくる、というキャリア
スペシャリストとして組織をつくる、というキャリアShohei Okada
 
PHP でも活用できる Makefile
PHP でも活用できる MakefilePHP でも活用できる Makefile
PHP でも活用できる MakefileShohei Okada
 
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよはじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよShohei Okada
 
働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソードShohei Okada
 
Laravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するならLaravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するならShohei Okada
 
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミLaravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミShohei Okada
 
Laravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのかLaravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのかShohei Okada
 
2017 年度を振り返って ~アウトプット編~
2017 年度を振り返って ~アウトプット編~2017 年度を振り返って ~アウトプット編~
2017 年度を振り返って ~アウトプット編~Shohei Okada
 
Laravel × レイヤードアーキテクチャをやってみている話
Laravel × レイヤードアーキテクチャをやってみている話Laravel × レイヤードアーキテクチャをやってみている話
Laravel × レイヤードアーキテクチャをやってみている話Shohei Okada
 
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみたLaravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみたShohei Okada
 
チームで「きちんと」Laravel を使っていくための取り組み
チームで「きちんと」Laravel を使っていくための取り組みチームで「きちんと」Laravel を使っていくための取り組み
チームで「きちんと」Laravel を使っていくための取り組みShohei Okada
 

Mais de Shohei Okada (20)

「登壇しているひとは偉い」という話
「登壇しているひとは偉い」という話「登壇しているひとは偉い」という話
「登壇しているひとは偉い」という話
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
 
PHP 8.0 の新記法を試してみよう!
PHP 8.0 の新記法を試してみよう!PHP 8.0 の新記法を試してみよう!
PHP 8.0 の新記法を試してみよう!
 
自分たちのコードを Composer パッケージに分割して開発する
自分たちのコードを Composer パッケージに分割して開発する自分たちのコードを Composer パッケージに分割して開発する
自分たちのコードを Composer パッケージに分割して開発する
 
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumai
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumaiクリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumai
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumai
 
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawaクリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
 
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondo
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondoクリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondo
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondo
 
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfukLaravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
 
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyoエラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
 
スペシャリストとして組織をつくる、というキャリア
スペシャリストとして組織をつくる、というキャリアスペシャリストとして組織をつくる、というキャリア
スペシャリストとして組織をつくる、というキャリア
 
PHP でも活用できる Makefile
PHP でも活用できる MakefilePHP でも活用できる Makefile
PHP でも活用できる Makefile
 
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよはじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
 
働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード
 
Laravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するならLaravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するなら
 
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミLaravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミ
 
Laravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのかLaravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのか
 
2017 年度を振り返って ~アウトプット編~
2017 年度を振り返って ~アウトプット編~2017 年度を振り返って ~アウトプット編~
2017 年度を振り返って ~アウトプット編~
 
Laravel × レイヤードアーキテクチャをやってみている話
Laravel × レイヤードアーキテクチャをやってみている話Laravel × レイヤードアーキテクチャをやってみている話
Laravel × レイヤードアーキテクチャをやってみている話
 
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみたLaravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
 
チームで「きちんと」Laravel を使っていくための取り組み
チームで「きちんと」Laravel を使っていくための取り組みチームで「きちんと」Laravel を使っていくための取り組み
チームで「きちんと」Laravel を使っていくための取り組み
 

Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered architecture