SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
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すればいいってもんでもない。
ご清聴ありがとうございました

Contenu connexe

Tendances

ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう増田 亨
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方増田 亨
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るGo Miyasaka
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで増田 亨
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発慎一 古賀
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツpospome
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~Yuki Hirano
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす増田 亨
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについてkumake
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 

Tendances (20)

ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 

Similaire à 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耕二 阿部
 

Similaire à 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
 

Dernier

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Dernier (8)

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

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