SlideShare a Scribd company logo
1 of 48
Download to read offline
CakePHP + PHPUnitによる
実践的ユニットテスト
2013/07/06 ゆるかわPHP#2
若松 慶信(@yshnb)
自己紹介
• 若松慶信
• 1987/8/1生
• 所属:ヴォラーレ株式会社 Webエンジニア
CakPHP
CakePHP
• 学習コスト低
• 設置が簡単
• ActiveRecordが使い易い
• 情報が豊富
典型的なWebサービスの開発が容易
フレームワークの動向
Google Web検索の人気度
(日本、2012/07 ~ 2013/06)
CakePHP > その他
ちなみに世界では
Google Web検索の人気度
(すべての国、2012/07 ~ 2013/06)
CakePHPでのテスト
CakePHP1.x → SimpleTest
CakePHP2 → PHPUnit
PHPUnit
• xUnit系テスティングフレームワーク
– 最新はPHPUnit3.8
• コマンドラインから実行可能
– JenkinsなどCIツールと併用しやすい
ユニットテストの基本の話
テストの目的
• なぜテストするか?を考える
– バグを発見する
– 仕様通りの動作をするか検証する
テストの方針
• ユニットテストで守るべきルールは?
– コードカバレッジ100%?
– 同値分割・境界値分析で全パターンを網羅?
– あらゆる例外ケースの網羅?
テストの方針
• ユニットテストで守るべきルールは?
– コードカバレッジ100%?
– 同値分割・境界値分析で全パターンを網羅?
– あらゆる例外ケースの網羅?
(実践的)テストの方針
誰でも実践できる・変更に強い
「誰でも実践できる」とは?
• 高度なテスト・複雑なテスト
– 書いた人に依存しやすい
– プロダクトコードの変更時、
テストコードが無視されてしまう
できるだけ誰にでも分かる形で書く
変更への強さ
コードの変更 バグの発見
厳密なテスト 変更に弱い より多くのバグを発見できる
寛容なテスト 変更に強い 発見できるバグは限られる
テストの厳密性と発見できるバグの関係
具体例:アサートの使い分け
$actual = $this->Sample->getSomething();
$this->assertInternalType("array", $something);
$this->assertEquals($expected, $something);
寛容なアサート:戻り値の型チェックのみ
厳密なアサート:等価かどうかのチェック
実行
Q. 寛容なテストは意味があるか?
• 意外とこれで発見できるバグも多い
– もちろん寛容のレベルはケースバイケース
• テストは銀の弾丸ではない
– あくまでバグ発見手段の1つにすぎない
– 完璧主義に陥ってはいけない
CakePHP流テストの話
CakePHP流のテストの話
• MVC(Model2)フレームワーク
– 重いModel + 軽いController + α
– テスト対象の主役はModel
• オブジェクト間の依存
– 副作用をもつものもある
• 戻り値のチェックのみで十分なのは
副作用がない場合のみ
メソッドの副作用
public function url2link($url = null) {
return empty($url) ? $url : "<a href="{$url}">{$url}</a>";
}
副作用のないコードの例
副作用のあるコードの例
public function createHoge($data) {
$this->create();
return $this->save($data);
}
メソッドの実行は外部に影響しない
メソッドの実行が外部に影響する
副作用のテスト方法
• 2つのアプローチ
• 状態中心テスト
• 相互作用中心テスト
状態中心テスト
テストケース
テスト対象
オブジェク
ト
副作用実行
参照・検証
実行対象によって変化した状態を検証
相互作用中心テスト
テストケース
テスト対象
オブジェク
ト
(モック)
副作用実行
検証
モックの準備(エクスペクテーション設定)
実行対象が外部に与えようとする変化を検証
どちらのアプローチを使うか?
• Model (Component)
→ 状態中心テスト
• Controller (Behavior, Shell)
→ 相互作用中心テスト
1つの考え方
あくまで一例。例えば
Model間の依存が多い場合は、相互作用中心のテスト
というアプローチも全然あり
テストの流れ
• 事前準備
– テストに使うデータの生成など
• 実行
– テスト対象のメソッド実行
• 検証
– メソッド実行結果の検証(アサート)
• 後処理
– 使用したオブジェクトの破棄
Modelのテスト
• 事前準備
– データの準備はテストに含めておき
Fixtureには依存させない
• 検証
– 戻り値の検証
– 変更された状態の検証
– チェック目的が明確に分かるように
– アサートは必要に応じ別メソッドを用意
Modelのテスト例
// 事前準備(検証データの挿入)
$this->Hoge->save($this->sampleData);
// 実行
$data = $this->Hoge->getTableData();
// 検証
$this->assertIntenralType(‘array’, $data);
$this->assertDataFormat($data);
Controllerのテスト
• 厳密なユニットテストではない
• 相互作用中心のテスト
– Model, Componentなどをモックで扱い
相互作用を検証する
Controllerのテスト
• 事前準備
– Controller内のオブジェクトをモック化
• ControlllerTestCase::generate
– モックへエクスペクテーション設定
• 実行
– エクスペクテーションの検証
• 検証
– set内の値の検証など
Controllerのテスト例
// 事前準備
$this->Hoges = $this->generates(“Hoges”);
// 実行
$this->testAction(“/test/”);
// 検証
$this->assertArrayHasKey(“hoge”, $this->vars);
その他Tips
• dataProviderによる類似ケース管理
• プライベートメソッドのテスト
• モック使用時のアンチパターン
dataProviderでの類似ケース管理
• 渡すパラメータだけを変更して
実行過程を管理
• どんなケースに有効か?
– 同値分割・境界値分析で
パラメータ組み合わせを変えたケース
– バリデーションのテストケース
dataProviderでの類似ケース管理
public function dp_sample() {
$cases[] = array(1); // Case1
$cases[] = array(-1); // Case2
return $cases;
}
/**
* @test
* @dataProvider dp_sample
*/
public function dp_sample($arg) {
// …
}
プライベートメソッドのテスト
※ただし単体でテストせずに済む方法を探すほうが望ましい
• 別クラスのオブジェクトにして処理を委譲
• 呼び出し元の状態中心テストでカバー
• あきらめる
プライベートメソッドはテストケースから直接実行できない
→ どのように実行するか?
プライベートメソッドのテスト
// 事前準備
$__privateMethod = new ReflectionMethod(‘Subject’, ‘__privateMethod’);
$__privateMethod->setAccessible(true); // アクセス権限をpublicに変更
// 実行
$__privateMethod->invoke($this->Subject, null);
// 検証
// …
① ReflectionMethodを使ってアクセス権限書き換え
プライベートメソッドのテスト
Closure::bind(function() {
// 事前準備
$Subject = ClassRegistry::init(“Subject”);
// 実行
$Subject->doSomething();
// 検証
…
}, $this, “Subject”)->__invoke();
② Closure::bind() を利用して実行スコープを変更
モック使用時のアンチパターン
public function register() {
App::uses("File", "Utility");
$file = new File("/path/to/file");
if ($file->open()) {
// …
}
}
例えばプロダクトコードでの場当たり的オブジェクト生成
• あれ、テストのときもFile動いちゃうじゃんw
• モックへの差し替えが難しい
→ テストが難しくなる
→ テストを書かない・書いても複雑なテストに
public function startup() {
App::uses("File", "Utility");
$this->File = new File("/path/to/file");
}
public function register() {
if ($this->File->open()) {
$filetext = $this->File->read();
}
}
アンチパターンへの対処
• オブジェクトを委譲しておくことで対処
• しかし本質的に重要なのはテストの声を聞くこと
テストの書きづらさ=プロダクトコードの問題
ツールの簡単な紹介
Jenkins
Jenkins
Jenkinsでできること
• 出来ること一例
– テストの実行
– 各種レポーティング
– 静的解析ツールとの併用
• Mess Detector
• Code Sniffer
• Copy Paste Detecor
– ドキュメントの生成
Phing
こんなツールですよ
要はPHP版 Ant
※めんどくさくなってきたからこれだけ
ご清聴ありがとうございました

More Related Content

What's hot

phpspecで始めるBDD
phpspecで始めるBDDphpspecで始めるBDD
phpspecで始めるBDDYuuki Takezawa
 
PHP x AWS でスケーラブルなシステムをつくろう
PHP x AWS でスケーラブルなシステムをつくろうPHP x AWS でスケーラブルなシステムをつくろう
PHP x AWS でスケーラブルなシステムをつくろうTaiji INOUE
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSDrupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSTomoki Hasegawa
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツールtotty jp
 
php-timecopを実戦投入してみた
php-timecopを実戦投入してみたphp-timecopを実戦投入してみた
php-timecopを実戦投入してみたYoshio Hanawa
 
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月suno88
 
NetBeansではじめる FuelPHP
NetBeansではじめる FuelPHPNetBeansではじめる FuelPHP
NetBeansではじめる FuelPHPJunichi Yamamoto
 
テストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテストテストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテストOhishi Mikage
 
Laravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作るLaravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作るinfinite_loop
 
あるあるLT〜サーバーサイドエンジニア〜 Vol.3
あるあるLT〜サーバーサイドエンジニア〜 Vol.3あるあるLT〜サーバーサイドエンジニア〜 Vol.3
あるあるLT〜サーバーサイドエンジニア〜 Vol.3Keiichi Hagiwara
 
8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室Yusuke Ando
 
PHPエクステンションの開発tips
PHPエクステンションの開発tipsPHPエクステンションの開発tips
PHPエクステンションの開発tipsYoshio Hanawa
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件y-uti
 
Eggplant Functional - Lesson 9 (Japanese slides)
Eggplant Functional - Lesson 9 (Japanese slides)Eggplant Functional - Lesson 9 (Japanese slides)
Eggplant Functional - Lesson 9 (Japanese slides)Eggplant
 
CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012ichikaway
 

What's hot (20)

phpspecで始めるBDD
phpspecで始めるBDDphpspecで始めるBDD
phpspecで始めるBDD
 
PHP x AWS でスケーラブルなシステムをつくろう
PHP x AWS でスケーラブルなシステムをつくろうPHP x AWS でスケーラブルなシステムをつくろう
PHP x AWS でスケーラブルなシステムをつくろう
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSDrupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
 
Php非同期の技法
Php非同期の技法Php非同期の技法
Php非同期の技法
 
php-timecopを実戦投入してみた
php-timecopを実戦投入してみたphp-timecopを実戦投入してみた
php-timecopを実戦投入してみた
 
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
 
Laravel5.1 Release
Laravel5.1 ReleaseLaravel5.1 Release
Laravel5.1 Release
 
NetBeansではじめる FuelPHP
NetBeansではじめる FuelPHPNetBeansではじめる FuelPHP
NetBeansではじめる FuelPHP
 
Jenkins tips 20161014
Jenkins tips 20161014Jenkins tips 20161014
Jenkins tips 20161014
 
テストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテストテストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテスト
 
Laravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作るLaravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作る
 
あるあるLT〜サーバーサイドエンジニア〜 Vol.3
あるあるLT〜サーバーサイドエンジニア〜 Vol.3あるあるLT〜サーバーサイドエンジニア〜 Vol.3
あるあるLT〜サーバーサイドエンジニア〜 Vol.3
 
8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室
 
PHP agile test tips
PHP agile test tipsPHP agile test tips
PHP agile test tips
 
PHPエクステンションの開発tips
PHPエクステンションの開発tipsPHPエクステンションの開発tips
PHPエクステンションの開発tips
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件
 
Eggplant Functional - Lesson 9 (Japanese slides)
Eggplant Functional - Lesson 9 (Japanese slides)Eggplant Functional - Lesson 9 (Japanese slides)
Eggplant Functional - Lesson 9 (Japanese slides)
 
CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012
 

Similar to Cake php + php unitによる実践的ユニットテスト

JenkinsとSeleniumの活用事例
JenkinsとSeleniumの活用事例JenkinsとSeleniumの活用事例
JenkinsとSeleniumの活用事例Takeshi Kondo
 
Intellij idea for php
Intellij idea for phpIntellij idea for php
Intellij idea for phpKazuhiko Uno
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験AdvancedTechNight
 
Deep learning reading club @ nimiri for SWEST
Deep learning reading club @ nimiri for SWESTDeep learning reading club @ nimiri for SWEST
Deep learning reading club @ nimiri for SWESTKiyoshi Ogawa
 
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストTsutomu Chikuba
 
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみましたYahoo!デベロッパーネットワーク
 
Jenkins + awsで並列テスト
Jenkins + awsで並列テストJenkins + awsで並列テスト
Jenkins + awsで並列テストYamamoto Kazuhisa
 
WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側Yusuke Naka
 
CakePHP PHP Framework
CakePHP PHP FrameworkCakePHP PHP Framework
CakePHP PHP Frameworkryota ichie
 
Development and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and mafDevelopment and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and mafKenta Oono
 
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12Ryuji Yamashita
 
ETWest2009講演資料「TestLinkでアジャイルにテストする」
ETWest2009講演資料「TestLinkでアジャイルにテストする」ETWest2009講演資料「TestLinkでアジャイルにテストする」
ETWest2009講演資料「TestLinkでアジャイルにテストする」akipii ogaoga
 
2014年のChefとInfrastructure as code
2014年のChefとInfrastructure as code2014年のChefとInfrastructure as code
2014年のChefとInfrastructure as codeYukihiko SAWANOBORI
 
Eclipse xtext 紹介
Eclipse xtext 紹介Eclipse xtext 紹介
Eclipse xtext 紹介Akira Tanaka
 
DevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニックDevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニックYusuke Ando
 

Similar to Cake php + php unitによる実践的ユニットテスト (20)

JenkinsとSeleniumの活用事例
JenkinsとSeleniumの活用事例JenkinsとSeleniumの活用事例
JenkinsとSeleniumの活用事例
 
Intellij idea for php
Intellij idea for phpIntellij idea for php
Intellij idea for php
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
 
実"戦"CakePHP Plugin
実"戦"CakePHP Plugin実"戦"CakePHP Plugin
実"戦"CakePHP Plugin
 
Deep learning reading club @ nimiri for SWEST
Deep learning reading club @ nimiri for SWESTDeep learning reading club @ nimiri for SWEST
Deep learning reading club @ nimiri for SWEST
 
CakePHPとYii_エンジニア勉強会20130820
CakePHPとYii_エンジニア勉強会20130820CakePHPとYii_エンジニア勉強会20130820
CakePHPとYii_エンジニア勉強会20130820
 
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテスト
 
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
 
Jenkins + awsで並列テスト
Jenkins + awsで並列テストJenkins + awsで並列テスト
Jenkins + awsで並列テスト
 
WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側
 
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
 
CakePHP PHP Framework
CakePHP PHP FrameworkCakePHP PHP Framework
CakePHP PHP Framework
 
Development and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and mafDevelopment and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and maf
 
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
 
ETWest2009講演資料「TestLinkでアジャイルにテストする」
ETWest2009講演資料「TestLinkでアジャイルにテストする」ETWest2009講演資料「TestLinkでアジャイルにテストする」
ETWest2009講演資料「TestLinkでアジャイルにテストする」
 
2014年のChefとInfrastructure as code
2014年のChefとInfrastructure as code2014年のChefとInfrastructure as code
2014年のChefとInfrastructure as code
 
Eclipse xtext 紹介
Eclipse xtext 紹介Eclipse xtext 紹介
Eclipse xtext 紹介
 
Gws in fukuoka
Gws in fukuokaGws in fukuoka
Gws in fukuoka
 
DevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニックDevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニック
 
恋するJenkins
恋するJenkins恋するJenkins
恋するJenkins
 

Recently uploaded

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
業務で生成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...博三 太田
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Recently uploaded (8)

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
業務で生成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...
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

Cake php + php unitによる実践的ユニットテスト