Submit Search
Upload
Iocコンテナについて
•
3 likes
•
8,113 views
A
Akio Terayama
Follow
laravelのiocコンテナについて
Read less
Read more
Technology
Report
Share
Report
Share
1 of 39
Download now
Download to read offline
Recommended
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~
株式会社MonotaRO Tech Team
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
Kenjiro Kubota
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
日本マイクロソフト株式会社
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Recommended
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~
株式会社MonotaRO Tech Team
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
Kenjiro Kubota
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
日本マイクロソフト株式会社
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Unicode文字列処理
Unicode文字列処理
信之 岩永
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
Hiroyuki Ito
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
SEGADevTech
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
Reimi Kuramochi Chiba
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
増田 亨
継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える
Atsushi Nakamura
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
More Related Content
What's hot
Unicode文字列処理
Unicode文字列処理
信之 岩永
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
Hiroyuki Ito
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
SEGADevTech
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
Reimi Kuramochi Chiba
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
増田 亨
継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える
Atsushi Nakamura
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
What's hot
(20)
Unicode文字列処理
Unicode文字列処理
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
Recently uploaded
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
Recently uploaded
(8)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
Iocコンテナについて
1.
IoCコンテナについて
2.
プロフィール 氏名:寺山 昭夫 twitter: trtraki
3.
アジェンダ 1. そもそもIoCって何? 2. IoCコンテナって何? 3.
実際何が嬉しいのか? 4. IoCコンテナの実例 5. Facadesを適応してみよう!
4.
1. そもそもIoCって何? Inversion of
Controlの略称で、制御の反転 と言う意味。
5.
どういうこと? 抽象化原則の一種で、手続き型プログラミン グと比較したとき、システムの制御の流れが 逆転しているソフトウェアアーキテクチャ設 計を表している。 参考:wikipediaより抜粋 http://ja.wikipedia.org/wiki/%E5%88%B6%E5%BE%A1%E3%81%AE%E5%8F%8D%E8%BB%A2
6.
だから、どういうこと?
7.
ClassAControllerと言うクラスは、 処理を行う際は、ClassBをnewしている。 処理の流れ的にはClassAController→ClassB と言う流れになっている。 これをClassB→ClassAControllerと言うよう な流れに変える事を、IoC(制御の反転)と呼 ぶ。
8.
イメージ図 ClassAController ClassB
9.
イメージ図 ClassAController ClassB ClassB
10.
2. IoCコンテナって何? IoCをあるオブジェクト(コンテナ)にまとめた もの。 実際にController側で使用する場合は、コン テナから取得する。 ※Laravel5ではサービスコンテナに名前が変 わっています。
11.
IoCコンテナ イメージ図 ClassAController ClassB ClassC IoCコンテナ ClassB
12.
3. 実際何が嬉しいのか ある一定の単位コード毎にソースを分離する 事が出来る。(ソースが綺麗になる!) 単体テストと相性抜群!
13.
4. IoCコンテナの実例 •サービスプロバイダーでインスタンス作成 •Controllerで依存性を注入
14.
これから説明する内容は↓の実例はこちら https://github.com/trtraki/ioc
15.
サービスプロバイダーでインスタンス作成 • app/Providers/TestServiceProvider.php public function
register() { $this->app->bind('Testinterface', function($app) { return new Test($app['Test']); }); } • config/app.php 'AppProvidersTestServiceProvider' ※Laravel5のドキュメント例になります。他の記述の仕方もあります。
16.
Controllerで依存性を注入 • app/Http/Controllers/WelcomeController.php protected $test; ! public
function __construct(Test $test) { $this -> test = $test; } public function index() { $this -> test ->addition($x, $y); }
17.
これだけすっきりしました https://github.com/trtraki/ioc/blob/master/ app/Http/Controllers/WelcomeController.php
18.
テストも書きやすくなりました。 https://github.com/trtraki/ioc/blob/master/ tests/service/CalculationTest.php
19.
IoCコンテナを使う事で、小さい単位でコー ドがまとまるようになりました。
20.
しかし
21.
まだControllerにユニットテストが導入され ていない状態です。
22.
現状でも、Controllerのユニットテストを導入 出来ますが、楽に実装する仕組みがあります。
23.
Facadesです!
24.
5. Facadesを適応してみよう!
25.
そもそもFacadesとは? •IoCコンテナに登録されているクラスの メソッドを、staticメソッドとして呼び 出せるようにする機構。
26.
適応して嬉しい事は? •簡単にmockと置き換える事が出来 る。
27.
Facadesの実例 • Facades継承したクラスを作成す る。 ※IoCコンテナを導入している事が前提です。 ! • 別名の設定をする。
28.
Facadesの実例 • Facades継承したクラスを作成す る。 ※IoCコンテナを導入している事が前提です。 ! • 別名の設定をする。
29.
Facades継承したクラスを作成する。 • app/Facades/TestFacade.php <?php namespace
AppFacades; use IlluminateSupportFacadesFacade; ! class TestFacade extends Facade { protected static function getFacadeAccessor() { return Testinterface'; } }
30.
別名の設定をする。 • config/app.php ! 'TestFacade' =>
'AppFacadesTestFacade', !
31.
そうすると ! $this -> test
-> addition($x, $y); ! ! TestFacade:: addition($x, $y); ! • app/Http/Controllers/WelcomeController.php ↓
32.
Facadesをmockに置き換える • mockeryをインストール ! • mockeryを使用するようにテスト を書く
33.
mockeryをインストール • composer.json ! "mockery/mockery": "
0.8" ! • 【php ./composer.phar update】でイン ストール
34.
mockeryを使用するようにテストを書く • tests/service/CalculationTest.php /** * *
@expectedException ErrorException * */ public function testControllerMock() { TestFacade::shouldReceive('addition') ->once() ->with(2,3) ->andThrow(); WelcomeController::index(); } !
35.
これで外部ロジック部分を、簡単に置 き換える事が可能になりました! ! 必要な部分を好きにテスト出来るよう になりました!
36.
まとめ • IoCコンテナはユニットテストとの 相性が抜群! • 更に、Facadesも適応するとユニッ トテストを書くのが簡単に!
37.
参考図書 http://www.amazon.co.jp/Laravel%E3%82%A8%E3%82%AD %E3%82%B9%E3%83%91%E3%83%BC%E3%83%88%E9%A4%8A %E6%88%90%E8%AA%AD%E6%9C%AC- %E3%83%A2%E3%83%80%E3%83%B3%E3%81%AA%E9%96%8B %E7%99%BA%E3%82%92%E5%AE%9F%E7%8F%BE %E3%81%99%E3%82%8BPHP%E3%83%95%E3%83%AC %E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF %EF%BC%81-Software-Design-plus/dp/4774173134
38.
では、皆さん良いIoCコンテナライフを!
39.
ご清聴ありがとうございました!
Download now