SlideShare a Scribd company logo
1 of 27
Download to read offline
DI(依存性注入)について
伊藤 結
ところで、DIと聞いて
  ピンとくる方はいますか?
DI(依存性注入)とは
なるほど。わからん。
依存性の注入(英: Dependency injection)とは、コンポーネント間の依存関係をプロ
グラムのソースコードから 排除し、外部の設定ファイルなどで注入できるようにするソ
フトウェアパターンである。英語の頭文字からDIと略される。
wikipediaより
https://ja.wikipedia.org/wiki/依存性の注入
DI(依存性注入)とは
依存性の注入(英: Dependency injection)とは、コンポーネント間の依存関係をプロ
グラムのソースコードから 排除し、外部の設定ファイルなどで注入できるようにするソ
フトウェアパターンである。英語の頭文字からDIと略される。
wikipediaより
https://ja.wikipedia.org/wiki/依存性の注入
言葉の意味から考えてみよう!
依存性ってなに?
public class Siphon implements BrewingMethod {
@Override
public String brew() {
return "サイフォンでいれたコーヒー ";
}
}
public class CoffeeShop {
public String brewCoffee() {
BrewingMethod siphone = new Siphone();
return siphone.brew() + "が出来上がりました [_]P";
}
}
public class CoffeeShopApp {
public static void main(String... args) {
CoffeeShop coffeeShop = new CoffeeShopApp();
System.out.println(coffeeShop.brewCoffee());
}
}
public class Siphon implements BrewingMethod {
@Override
public String brew() {
return "サイフォンでいれたコーヒー ";
}
}
public class CoffeeShop {
public String brewCoffee() {
BrewingMethod siphone = new Siphone();
return siphone.brew() + "が出来上がりました [_]P";
}
}
public class CoffeeShopApp {
public static void main(String... args) {
CoffeeShop coffeeShop = new CoffeeShopApp();
System.out.println(coffeeShop.brewCoffee());
}
}
プログラムの実行クラス
BrewingMethod(抽出方法)
の実装クラス
クラスAからクラスBを直接インスタンス化している時、
クラスAはクラスBがないと動きません。
このような状態は
クラスAとクラスBが依存関係にある、
クラスAはクラスBに依存しているといえます。
今回の例でいうと、
 CfeeShopAppとCoffeeShop
 CoffeeShopとSiphone
の間で依存関係があるということになります
注入ってなに?
実際のコードで説明します
DIコンテナを使って、
  実際にDIをやってみよう!
DIコンテナとは
● すごく簡単に言うと、「XXにこのクラスのオブジェクトを注入してね」
という設定を書いておくとDI(依存性の注入)を実行するよくんのこと。
今回はJava向けのDaggerというDIコンテナを使います。
@Module(injects = CoffeeShopApp.class)
public class BrewingMethodModule {
@Provides
public BrewingMethod provideBrewingMethod() {
return new Siphon();
}
}
public class CoffeeShop {
// Siphonオブジェクトが注入される
@Inject BrewingMethod brewingMethod;
....
}
public class CoffeeShopApp {
  //兄弟クラスがないので設定なしでCoffeeShopオブジェクトが注入される
@Inject CoffeeShop coffeeShop;
public void run() {
System.out.println(coffeeShop.brewCoffee());
}
public static void main(String... args) {
    // Daggerのオブジェクト生成(設定を読み込んで、各オブジェクトが注入されたCoffeeShopAppオブジェクトを生成)
ObjectGraph objectGraph = ObjectGraph.create(new BrewingMethodModule());
CoffeeShopApp coffeeShopApp = objectGraph.get(CoffeeShopApp.class);
coffeeShopApp.run();
}
@Module(injects = CoffeeShopApp.class)
public class BrewingMethodModule {
@Provides
public BrewingMethod provideBrewingMethod() {
return new Siphon();
}
}
public class CoffeeShop {
// Siphonオブジェクトが注入される
@Inject BrewingMethod brewingMethod;
....
}
public class CoffeeShopApp {
  //兄弟クラスがないので設定なしでCoffeeShopオブジェクトが注入される
@Inject CoffeeShop coffeeShop;
public void run() {
System.out.println(coffeeShop.brewCoffee());
}
public static void main(String... args) {
    // Daggerのオブジェクト生成(設定を読み込んで、各オブジェクトが注入されたCoffeeShopAppオブジェクトを生成)
ObjectGraph objectGraph = ObjectGraph.create(new BrewingMethodModule());
CoffeeShopApp coffeeShopApp = objectGraph.get(CoffeeShopApp.class);
coffeeShopApp.run();
}
@Moduleで注入先クラスを指定
@Providesを付与したメソッドで、注入するオ
ブジェクトを生成する処理を記述。
Daggerライブラリのオブジェクト生成処理
(BrewingMethodModuleの設定を読み込
んで、CoffeeShopAppオブジェクトを生
成)。
@Injectが付与されている
CofeeShopApp#cofeeShop,
CofeeShop#resingMethod
にオブジェクトが注入された状態の
CoffeeShopAppオブジェクトが生成されま
す。
Daggerが依存性が注入されたオブジェクトを生成することで、
CofeeShopAppから直接インスタンス化する記述をなくすことができ、
以下のモジュール間の依存関係を外部に逃がすことができました。
 CofeeShop ー Siphon
 CoffeeShopApp ー CofeeShop
で、DI使うと
   なにがよくなるの?
DIを使う場合の利点
● モジュール間の依存関係を弱めることができる(保守性が高まる)
● 単体テストが楽になる
(Aモジュールが完成する前にBモジュールをテストできる、外から特定のモジュールをモック
に差し替えることができる)
実際やってみて、特にテストコードを書くとき、Mockオブ
ジェクトに差し替えてテストながせるのが心地よかったで
す。
public class CoffeeShopTest {
@Inject CoffeeShop coffeeShop;
@Inject BrewingMethod brewingMethod;
@Before
public void setUp() {
ObjectGraph.create(new TestModule()).inject(this);
}
@Module(includes = BrewingMethodModule.class,
injects = CoffeeShopTest.class,
overrides = true)
static class TestModule {
@Provides
@Singleton
public BrewingMethod provideBrewingMethod() {
return Mockito.mock(BrewingMethod.class);
}
}
@Test
public void testBrewCoffee() {
Mockito.when(brewingMethod.brew()).thenReturn("テストコーヒー");
String result = coffeeShop.brewCoffee();
Mockito.verify(brewingMethod, Mockito.times(1)).brew();
assertThat(result, is("テストコーヒーが出来上がりました [_]P"));
}
DIを利用したテストコードの一例
CoffeShopのテストコードです。
BrewingMethodクラスのオブジェクトは
モックに置き換えてテストを実行してい
ます。
CoffeeShopから
BrewingMethod#brewメソッドが1回呼
ばれていること、
CoffeeShop#brewCoffeeメソッドの結
果が正しいこと
を確認するテストコードです。
public class CoffeeShopTest {
@Inject CoffeeShop coffeeShop;
@Inject BrewingMethod brewingMethod;
@Before
public void setUp() {
ObjectGraph.create(new TestModule()).inject(this);
}
@Module(includes = BrewingMethodModule.class,
injects = CoffeeShopTest.class,
overrides = true)
static class TestModule {
@Provides
@Singleton
public BrewingMethod provideBrewingMethod() {
return Mockito.mock(BrewingMethod.class);
}
}
@Test
public void testBrewCoffee() {
Mockito.when(brewingMethod.brew()).thenReturn("テストコーヒー");
String result = coffeeShop.brewCoffee();
Mockito.verify(brewingMethod, Mockito.times(1)).brew();
assertThat(result, is("テストコーヒーが出来上がりました [_]P"));
}
BrewingMethodModuleを、BrewingMethod
のモックを返却するように上書きしている。
public class CoffeeShopTest {
@Inject CoffeeShop coffeeShop;
@Inject BrewingMethod brewingMethod;
@Before
public void setUp() {
ObjectGraph.create(new TestModule()).inject(this);
}
@Module(includes = BrewingMethodModule.class,
injects = CoffeeShopTest.class,
overrides = true)
static class TestModule {
@Provides
@Singleton
public BrewingMethod provideBrewingMethod() {
return Mockito.mock(BrewingMethod.class);
}
}
@Test
public void testBrewCoffee() {
Mockito.when(brewingMethod.brew()).thenReturn("テストコーヒー");
String result = coffeeShop.brewCoffee();
Mockito.verify(brewingMethod, Mockito.times(1)).brew();
assertThat(result, is("テストコーヒーが出来上がりました [_]P"));
}
本クラスへの依存性注入の実行
CoffeeShop#brewingMethod、
brewingMethodへ
BrewingMethodのMockを注入する。
(TestModule#provideBrewingMethodに
Singletonアノテーションを付与しているので
すべて同じオブジェクトが注入される)。
注入した、モックオブジェクトの振る舞
いを設定して、テストを実行。
※BrewingMethod#brew()が呼ばれ
た際に”テストコーヒー”が返却されるよ
う設定。
DIコンテナって
他にはどんなのがあるの?
代表的なDIコンテナ
● Spring Framework
● JavaEE (CDI)
● Seasar2
● Zend Framework 2
● Dagger
● Dagger2
● Proton
● RoboGuice
なんかJavaばっかりじゃね?
言語とDIコンテナ
● Javaなどの静的言語では色々と種類があるが、
RubyやPythonなどの動的言語ではあまり使われていない(と思う)。
私は一時DIについて関心を持って、いろいろ調べてみたし、 自分でDIコンテナ
を実装してみたりもした。 でも、RubyでならDIコンテナがわずか20行で記述で
きる上、 よく考えてみたら、その20行も、なくてもほぼ同じことが簡単に実現で
きることに気がついた時、 DIってのは硬直した言語のための技術なんだと気
がついた。
Matzにっき より
http://www.rubyist.net/~matz/20091003.html
どんな所でDIを使うべき?
DIの使いどころ
● (当たり前ですが) DIを前提にしたフレームワークを使用するとき。
● Javaを使用しており、テスト駆動開発(TDD)とかテストコードを書くことが前提のプロジェクト。
● 実装があるモジュールに依存してるが、そのモジュールは未完成、でも単体テストを始めない
といけないんだよ〜みたいなことになりそうなとき。
採用したときのコスト(学習コストなど)に比べて、モ
ジュール間の依存関係を弱めることが重要な時に使用
するべき。
何でもかんでもDIすればいいってもんでもない。
ご清聴ありがとうございました

More Related Content

What's hot

マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018Yusuke Suzuki
 
Iocコンテナについて
IocコンテナについてIocコンテナについて
IocコンテナについてAkio Terayama
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
決済サービスのSpring Bootのバージョンを2系に上げた話
決済サービスのSpring Bootのバージョンを2系に上げた話決済サービスのSpring Bootのバージョンを2系に上げた話
決済サービスのSpring Bootのバージョンを2系に上げた話Ryosuke Uchitate
 
オープンソースのAPIゲートウェイ Kong ご紹介
オープンソースのAPIゲートウェイ Kong ご紹介 オープンソースのAPIゲートウェイ Kong ご紹介
オープンソースのAPIゲートウェイ Kong ご紹介 briscola-tokyo
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャーssuser070fa9
 
今さら聞けないDiとspring
今さら聞けないDiとspring今さら聞けないDiとspring
今さら聞けないDiとspring土岐 孝平
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツpospome
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールdcubeio
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
Data Factoryの勘所・大事なところ
Data Factoryの勘所・大事なところData Factoryの勘所・大事なところ
Data Factoryの勘所・大事なところTsubasa Yoshino
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugMasatoshi Tada
 
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いたAkihiro Kuwano
 
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介がっつりMongoDB事例紹介
がっつりMongoDB事例紹介Tetsutaro Watanabe
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) Hironobu Isoda
 
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsiderMoq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider貴志 上坂
 

What's hot (20)

マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
 
Iocコンテナについて
IocコンテナについてIocコンテナについて
Iocコンテナについて
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
決済サービスのSpring Bootのバージョンを2系に上げた話
決済サービスのSpring Bootのバージョンを2系に上げた話決済サービスのSpring Bootのバージョンを2系に上げた話
決済サービスのSpring Bootのバージョンを2系に上げた話
 
Serverless時代のJavaについて
Serverless時代のJavaについてServerless時代のJavaについて
Serverless時代のJavaについて
 
オープンソースのAPIゲートウェイ Kong ご紹介
オープンソースのAPIゲートウェイ Kong ご紹介 オープンソースのAPIゲートウェイ Kong ご紹介
オープンソースのAPIゲートウェイ Kong ご紹介
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
 
今さら聞けないDiとspring
今さら聞けないDiとspring今さら聞けないDiとspring
今さら聞けないDiとspring
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
Data Factoryの勘所・大事なところ
Data Factoryの勘所・大事なところData Factoryの勘所・大事なところ
Data Factoryの勘所・大事なところ
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
 
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた
 
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介がっつりMongoDB事例紹介
がっつりMongoDB事例紹介
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsiderMoq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
 
Rest ful api設計入門
Rest ful api設計入門Rest ful api設計入門
Rest ful api設計入門
 

Similar to DI(依存性注入)について

はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniterYuya Matsushima
 
Javaデザインパターン入門【第2回】
Javaデザインパターン入門【第2回】Javaデザインパターン入門【第2回】
Javaデザインパターン入門【第2回】Yukiko Kato
 
WordPressプラグイン作成入門
WordPressプラグイン作成入門WordPressプラグイン作成入門
WordPressプラグイン作成入門Yuji Nojima
 
TestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテストTestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテストYoichiro Sakurai
 
[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見Yosuke HASEGAWA
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法Naruto TAKAHASHI
 
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
CodeIgniter 〜 2008年大躍進のPHPフレームワークCodeIgniter 〜 2008年大躍進のPHPフレームワーク
CodeIgniter 〜 2008年大躍進のPHPフレームワークkenjis
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略cch-robo
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーAyumu Kawaguchi
 
Djangoによるスマホアプリバックエンドの実装
Djangoによるスマホアプリバックエンドの実装Djangoによるスマホアプリバックエンドの実装
Djangoによるスマホアプリバックエンドの実装Nakazawa Yuichi
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Daisuke Hiraoka
 
つ部 Android Studio 勉強会 12/7
つ部 Android Studio 勉強会 12/7つ部 Android Studio 勉強会 12/7
つ部 Android Studio 勉強会 12/7Hikaru Wada
 
Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門晃 遠山
 
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf耕二 阿部
 

Similar to DI(依存性注入)について (20)

AndroidでDIxAOP
AndroidでDIxAOPAndroidでDIxAOP
AndroidでDIxAOP
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 
Javaデザインパターン入門【第2回】
Javaデザインパターン入門【第2回】Javaデザインパターン入門【第2回】
Javaデザインパターン入門【第2回】
 
WordPressプラグイン作成入門
WordPressプラグイン作成入門WordPressプラグイン作成入門
WordPressプラグイン作成入門
 
TestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテストTestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテスト
 
[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
 
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
CodeIgniter 〜 2008年大躍進のPHPフレームワークCodeIgniter 〜 2008年大躍進のPHPフレームワーク
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
 
Scoop!
Scoop!Scoop!
Scoop!
 
Firefoxosハンズオン
FirefoxosハンズオンFirefoxosハンズオン
Firefoxosハンズオン
 
How To Drink Wsgi
How To Drink WsgiHow To Drink Wsgi
How To Drink Wsgi
 
Djangoによるスマホアプリバックエンドの実装
Djangoによるスマホアプリバックエンドの実装Djangoによるスマホアプリバックエンドの実装
Djangoによるスマホアプリバックエンドの実装
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
つ部 Android Studio 勉強会 12/7
つ部 Android Studio 勉強会 12/7つ部 Android Studio 勉強会 12/7
つ部 Android Studio 勉強会 12/7
 
Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門
 
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
 

Recently uploaded

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Recently uploaded (10)

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

DI(依存性注入)について