ServiceProvider, ServiceContainer入門
なぜサービスコンテナは難しいか
- 複数の技術の組み合わせだから
- サービスコンテナ
- 自動注入
- サービス
- DI
- インターフェース
- 今回は後ろの2つにフォーカス
DIについて
- 例: SendGridに関する捜査を行うサービスクラス(コンポーネント)
- 統計の都合上、ユーザと管理者でAPIキーを分けることになった
- ※「SendGrid」とは
- クラウドベースのメール配信サービス
- APIで送るとメールを投げてくれる
- 例ではAPIキーをコンストラクタにべた書き→分けたい
- クラスを複数作る?
- どんどん増えるのか?
- セッターメソッドを作る?
- インスタンスの状態を管理する必要がある
- どちらも難あり
- クラスを複数作る?
DIとは?
- インスタンスの生成に必要な設定をコンストラクタの引数で渡す
- 外から渡すので指定を変更できる
- 構造も柔軟に対応できる
サービスコンテナ・サービスプロバイダ
- メール関連の処理は色々なところで使われる
- 毎回サービスを生成する?
- サービスを毎回作りたくない
- サービスコンテナ
- サービスを毎回作りたくない
- DIを使うと
new
の回数が増える- サービスの生成方法も一括して管理したい
- サービスプロバイダ
- サービスの生成方法も一括して管理したい
サービスコンテナとは?
- サービスをまとめて管理するツール
- イメージはサービスを値に入れる「グローバルな連想配列」
- Laravelの
app
はサービスコンテナを指すresolve
メソッドでサービスをコンテナから取得できる- (サービスコンテナにキーとサービスを登録するのに使うのが
bind
か)
サービスプロバイダとは?
- サービスコンテナのデータ登録方法
- アプリの一番最初に呼び出される
register
を使って登録
まとめ
- 色々な技術を使っているから難しそうに見える
- 分解していくと見える
- DI
- サービスコンテナ・サービスプロバイダ
その他
- サービスプロバイダは
app/config/app.php
のproviders
に登録する必要がある
所感
Laravelのコアな機能であるサービスコンテナとサービスプロバイダについてざっくりと概略を掴むことができました。laravelでパッケージ開発
パッケージ開発の仕組み
- Laravel Package
- サービスプロバイダがGithub等で公開
- composer経由でインストール可
ライブラリ開発だけではないパッケージ開発
- サービスプロバイダ起点
- DIやモジュール登録だけではなく、
artisan
やmigration
の登録もOK - クラスは
autoload
。autoload
とサービスプロバイダで読み込む
- DIやモジュール登録だけではなく、
migration
登録は他の手法もあるが、5.7からはスライドで紹介している方法が使われているとのこと。
サービスプロバイダはAuto Discoveryという名前通り自動的に探す機能があるので、app/config/app.php
に書かなくても使えるライブラリも最近は増えてきた
Type Path
- 分割したモジュールをcomposerに依存関係として登録する
- ローカルのモジュールを使える
composer.json
のrequire
に記述(子)- 親は
repository
の中に'type': 'path'
として記述すると読み込ませられる- 名前空間を登録しなくてもモジュールが使える
- 依存関係も含めて管理できる
- composerでappの外のコードを有効化できる
- appをスリムに
- 全体のコードの見通しを良くする
- appでしかできないこと(根幹的な設定など)もあるが、それはそれで専念できる
まとめ
- 日々、抽象化の挑戦を
- よく使うコードの再利用性を高める
- より柔軟でより高度な開発
所感
appディレクトリの中に色々詰め込むものだと思っていたため、appの外にモジュールとして摘出できるということに驚きました。 Laravelの柔軟性の高さの一部を垣間見た気がしました。エキテンとLaravelと私
全体の所感
- モノリシックでレガシーなシステムマジヤバイ(
- ガルガンチュアンギガンテスモンスター的なナニカ(
- 勢いが凄く、内容も濃くて非常に面白かった(他人ごとならば
PHPテストワークショップ
PHP Test Workshop – Speaker Deck参考
全体の内容・所感
LaravelというよりはPHPの単体(ユニット)テストについて、PHPUnitを使用した場合の環境構築から使用方法、実際のユースケースに似せての課題に取り組むという、テスト初心者のためのワークショップでした。 単体テストはいつかやろうと思ったままなかなか導入できずに1~2年が過ぎていたので、ようやく手を付けることができて手ごたえを感じました。 個人的なバックグラウンドとしては、Abu al-HaulでDiet CakeというMVC型のフレームワークを経験し、それ以前から単体テストのやり方を調査する中で機能ごとに分離するように気を付けていました。 それらを含めて、単体テストの書き方や、テスト導入のために気を付けることなど、漸く繋がってきた気がしました。個人的にはこのワークショップに参加できただけでもかなり収穫だったと思います。LT
今だからこそ作る、Laravelで「アクセスカウンター」
今だからこそ作る、Laravelで「アクセスカウンター」- アクセスカウンタをまったく知らない方は聴衆の中には見受けられなかっ
- とはいえ、「まったく知らない人」と質問が出るくらいには古き時代の風物詩的なものになったことに改めて時間の流れを痛感
- 現在のやり方でやるとわりと案外手ごわい
- 機能を列挙すると確かにれっきとしたWebアプリですし……
LaravelとVue.jsに出会った私がレガシーな管理サイトを半SPAにするまでの歩み
- 1つのjQueryファイルでゴリゴリやってるアプリケーションをどうにかVueでメンテナンス性を上げる
- 社内にnode.jsやnpmといった「異世界の摩訶不思議な技術を使う文化がなかった」
- 所感: わかりみが深すぎる
- 社内にnode.jsやnpmといった「異世界の摩訶不思議な技術を使う文化がなかった」
- Vuetifyの採用
- 確かに今ならばVuetifyかな、と個人的にも感じた
- 新しい技術を取り入れるのに重要なことは「周囲とコミュニケーションを取って課題を共有すること」
- 所感: それができるならば……と遠い目
未経験者研修で社内研修用システムをざっくり作った話
- どうして脱落するか
- 派遣元と派遣先(学習者)のギャップ
- 「要求下限」の高さ
- 「論理的思考」の壁
- 「興味関心」の差
- 研修における不一致
- 研修に使用した技術
- AWS: 場所を選ばない
- Docker: 環境の不一致を解消
- Gitリポジトリで共有
- 所感: 論理的思考の壁など、大学や専門学校で基礎を学んだ人とまったくの未経験者の壁については個人的に思うところもあり、難しいと感じた
Laravel Telescopeにアプリのモニタリングをお任せしてみた
- 要件: Laravel5.7以上、PHP7.1以上
~bash composer php artisan telescope #インストール migration #専用テーブル~- 公式が出しているデバッグGUIツール
- パフォーマンスも確認できる
Laravel Zeroで楽して情報収集する?
- コンソールアプリケーション
- 非公式、LaravelのCLIのみを出したような感じらしい
- ブラウザを動かせるのでスクレイピングやちょっとした作業の自動化に使えそう
Lighthouseを使った認証必須のGraphQL API
- Lighthouse
- LaravelからGraphQLエンドポイントを提供するライブラリ
- GraphQLを使っていることがある人はちらほら、知っている人は半分くらいいそう
- Lighthouseでの認証
- 認証はほぼ必須では?
- ディレクティブに
@middleware
→Laravelのmiddlewareをそのまま使える - usersテーブルに
api_token
列が必要
Laravelで始めるテスト生活
- 機能テスト
- 仕様通りに動くかをテスト(単体の上)
- Laravelは機能テストAPIが充実
- 5.4以降はDusk使った方が良い(5.3までとパッケージが変わってた)
Laravelの公式には載っていないBuilderの使い方
- LaravelにはEloquentとQueryのBuilderの2つのBuilderクラスがある
- 継承されてない
- eloquentにないメソッドはQueryに譲渡されている
LaravelSparkでサービス開発に注力する
- Laravel開発者が作成したLaravelの Web App Template
- 認証・パスワード再設定などの機能や画面を内報している
- $99~
- サービス開発に注力できる
電撃!Laravelクイズ
kebab_case
は内部的にsnake_case
を呼んでる(第二引数がデリミタ指定できる)- 所感: 初心者にとっては全体的に難しかった
懇親会
懇親会はPHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応 | 竹澤 有貴, 栗生 和明, 新原 雅司, 大村 創太郎, 丸山 弘詩 |本 | 通販 | Amazonの著者トークがあったり、LTがカオス(特にLaravel3.0をPHP7環境で動かすというものと、PHPでJavaを動かすというもの)で楽しく、面白かったです。全体の所感
いかんせんLaravel初心者なので多くの事項を取りこぼしたような気がするのですが、それでも- サービスプロバイダの概念の理解
- 機能ごとにappディレクトリ外に出すという考え方
- PHPUnitを使った単体テストのやり方・テストコードの書き方
- デバッグにLaravel Telescopeが非常に便利そう
航空障害灯良いですよね。都会の冷淡無機質な感じが。