SlideShare a Scribd company logo
1 of 89
Download to read offline
レガシーな
Webアプリケーションと
向き合う
⼤改修!PHPレガシーコードビフォーアフター
2019.11.30
Yuta Ohashi
22
⽬次
• レガシーなWebアプリケーションとは?
• レガシーコードへのアプローチ⽅法
• コードのレガシーさの計測
• 計測できるレガシーさ
• 計測できないレガシーさ
• コードをさわらずになんとかする
• まとめ
blue_goheimochi
⼤橋 佑太
株式会社オウケイウェイヴ
PHP(Laravel), Javascript(Vue.js/Nuxt.js),
Laravel JP Conference 2020,
PHPerKaigi 2020,
サッカー, フットサル, 浜松まつり,
ポケカ, さわやかのげんこつハンバーグ
おおはし ゆうた
レガシーな
Webアプリケーションとは?
55
レガシーなWebアプリケーションとは?
• 古い
• テストコードがない
• テストが書けない(書くのが難しい)
• アプリケーション⾃体が⼤きい
• 初期のコードを書いた⼈がもういない
• etc... etc ... etc ...
保守または拡張が困難な
既存のプロジェクトなら、
なんでも「レガシー」(legacy)と
呼ぶことにしている
単にコードベースだけではなく、
プロジェクト全体であることに
注意していただきたい
99
レガシーなWebアプリケーションとは?
• レガシーコード
• レガシー基盤
• レガシーカルチャー
1010
レガシーなWebアプリケーションとは?
• レガシーコード
• テストされていない∕テストできないコード
• 柔軟性のないコード
• 技術的負債を抱え込んでいるコード
• レガシー基盤
• レガシーカルチャー
1111
レガシーなWebアプリケーションとは?
• レガシーコード
• テストされていない∕テストできないコード
• 柔軟性のないコード
• 技術的負債を抱え込んでいるコード
• レガシー基盤
• 開発環境、過去の依存関係、複数の異なる環境
• レガシーカルチャー
1212
レガシーなWebアプリケーションとは?
• レガシーコード
• テストされていない∕テストできないコード
• 柔軟性のないコード
• 技術的負債を抱え込んでいるコード
• レガシー基盤
• 開発環境、過去の依存関係、複数の異なる環境
• レガシーカルチャー
• 変化が怖い、知識の孤⽴
1313
レガシーなWebアプリケーションとは?
• レガシーコード
• テストされていない∕テストできないコード
• 柔軟性のないコード
• 技術的負債を抱え込んでいるコード
レガシーコードへのアプローチ⽅法
1515
レガシーコードへのアプローチ⽅法
• リファクタリング
• リアーキテクティング
• ビッグ‧リライト
1616
レガシーコードへのアプローチ⽅法
• リファクタリング
• メソッド‧クラスレベルでコードを変更
• リアーキテクティング
• ビッグ‧リライト
1717
レガシーコードへのアプローチ⽅法
• リファクタリング
• メソッド‧クラスレベルでコードを変更
• リアーキテクティング
• モジュール‧コンポーネントレベルでコードを変更
• ビッグ‧リライト
1818
レガシーコードへのアプローチ⽅法
• リファクタリング
• メソッド‧クラスレベルでコードを変更
• リアーキテクティング
• モジュール‧コンポーネントレベルでコードを変更
• ビッグ‧リライト
• ≒(⾔語の置き換えなども含む)リプレイス
1919
レガシーコードへのアプローチ⽅法
• リファクタリング
• メソッド‧クラスレベルでコードを変更
• 計測できるレガシーをリファクタリングする
• リアーキテクティング
• モジュール‧コンポーネントレベルでコードを変更
• 計測できないレガシーをリファクタリングする
• ビッグ‧リライト
• ≒(⾔語の置き換えなども含む)リプレイス
2020
レガシーコードへのアプローチ⽅法
• リファクタリング
• メソッド‧クラスレベルでコードを変更
• 計測できるレガシーをリファクタリングする
• リアーキテクティング
• モジュール‧コンポーネントレベルでコードを変更
• 計測できないレガシーをリファクタリングする
• ビッグ‧リライト
• ≒(⾔語の置き換えなども含む)リプレイス
というような、
3つの観点に置き換えて考えています
コードのレガシーさの計測
2222
コードのレガシーさの計測
• 計測できるレガシーさ
• 計測できないレガシーさ
2323
計測できるレガシーさ
• コードはどれくらい⼤きいか?(phplocなど)
• 重複コードはあるか?(phpcpdなど)
• コーディング規約が守られているか?(phpcsなど)
• 循環的複雑度は?(phpmd, lizardなど)
• コードにエラーはないか?(PHPStan, Phan, PHPUnitなど)
• アプリケーションに脆弱性はないか?(VAddyなど)
2424
計測できるレガシーさ
• コードはどれくらい⼤きいか?(phplocなど)
• 重複コードはあるか?(phpcpdなど)
• コーディング規約が守られているか?(phpcsなど)
• 循環的複雑度は?(phpmd, lizardなど)
• コードにエラーはないか?(PHPStan, Phan, PHPUnitなど)
• アプリケーションに脆弱性はないか?(VAddyなど)
コードを解析するためのツールは⾊々ある
(できることがかぶっているツールもあるので、⽬的にあったものを使う)
2525
計測できないレガシーさ
• なんかここはあやしい‧‧‧
• 不吉なにおいがする‧‧‧
• // ここのコードは変更しないこと
• ここは〇〇パターンを使ったらキレイで柔軟な
コードになるよ
• こいつはエンティティでこいつはバリューオ…
知識や経験が活きてくるであろう領域
2626
計測できないレガシーさ
• なんかここはあやしい‧‧‧
• 不吉なにおいがする‧‧‧
• // ここのコードは変更しないこと
• ここは〇〇パターンを使ったらキレイで柔軟な
コードになるよ
• こいつはエンティティでこいつはバリューオ…
知識や経験が活きてくるであろう領域知識や経験が活きてくる(であろう)領域
OOP, デザインパターン, 設計原則, 独⽴コアレイヤパターン, レイヤ化, DDD etc...
2727
コードのレガシーさの計測
• 計測できるレガシーさ
• 計測できないレガシーさ
2828
コードのレガシーさの計測
• 計測できるレガシーさ
こちらをもう少し掘り下げます
2929
計測対象のWebアプリケーション
3030
• PHPバージョン: PHP7.2
• フレームワーク: CakePHP 3.5
• ローカル環境: Docker / Docker Compose
• テスト: PHPUnit, Cypress(E2Eテスト)
• バージョン管理: Git
forteeのレガシーさは?
3131
• PHPバージョン: PHP7.2
• フレームワーク: CakePHP 3.5
• ローカル環境: Docker / Docker Compose
• テスト: PHPUnit, Cypress(E2Eテスト)
• バージョン管理: Git
forteeのレガシーさは?
‧‧‧昨⽇書いたコードが
レガシーに感じるときもありすよね!?
エンジニアたるもの昨⽇より今⽇、今⽇より明⽇、明⽇より明後⽇、常に前に進む気持ちが⼤事!
いつでも新しいことにチャレンジできる気持ちでありたい!
3232
対象のWebアプリケーション2
3333
• PHPバージョン: PHP 4.3.11
• フレームワーク: なし
• ローカル環境: XAMPP
• テスト: なし
• バージョン管理: SVN
Web App 2のレガシーさは?
3434
計測できるレガシーさ
• コードはどれくらい⼤きいか?(phplocなど)
• 重複コードはあるか?(phpcpdなど)
• コーディング規約が守られているか?(phpcsなど)
• 循環的複雑度は?(phpmd, lizardなど)
• コードにエラーはないか?(PHPStan, Phan, PHPUnitなど)
• アプリケーションに脆弱性はないか?(VAddyなど)
3535
計測できるレガシーさ
• コードはどれくらい⼤きいか?(phplocなど)
• 重複コードはあるか?(phpcpdなど)
• コーディング規約が守られているか?(phpcsなど)
• 循環的複雑度は?(phpmd, lizardなど)
• コードにエラーはないか?(PHPStan, Phan, PHPUnitなど)
• アプリケーションに脆弱性はないか?(VAddyなど)
3636
• sebastianbergmann/phpcpd
• Copy/Paste Detector (CPD) for PHP code.
• コピペコードを検出してくれる
• Don’t Repeat Yourselfとはよく⾔われるが‧‧
• コピペコードが必ず悪ではないので、検出された対象の
コードは⽬視で確認してみましょう
重複コードはあるか?
3737
重複コードはあるか?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer phpcpd src
phpcpd 4.1.0 by Sebastian Bergmann.
Found 14 clones with 548 duplicated lines in 24 files:
- /app/src/Model/Table/ConferencePagesTable.php:51-105 (54 lines)
/app/src/Model/Table/PagesTable.php:44-98
~~~~~~~~~~~
- /app/src/Controller/ConferenceAttendeeTypesController.php:104-131 (27 lines)
/app/src/Controller/ConferenceAttendeeTypesController.php:143-170
~~~~~~~~~~~
- /app/src/Classes/ForteeUtil.php:73-109 (36 lines)
/app/src/Classes/ImageFetcher.php:277-313
~~~~~~~~~~~
1.08% duplicated lines out of 50840 total lines of code.
Average size of duplication is 39 lines, largest clone has 54 of lines
fortee
forteeのチェック結果
3838
重複コードはあるか?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer phpcpd src
phpcpd 4.1.0 by Sebastian Bergmann.
Found 14 clones with 548 duplicated lines in 24 files:
- /app/src/Model/Table/ConferencePagesTable.php:51-105 (54 lines)
/app/src/Model/Table/PagesTable.php:44-98
~~~~~~~~~~~
- /app/src/Controller/ConferenceAttendeeTypesController.php:104-131 (27 lines)
/app/src/Controller/ConferenceAttendeeTypesController.php:143-170
~~~~~~~~~~~
- /app/src/Classes/ForteeUtil.php:73-109 (36 lines)
/app/src/Classes/ImageFetcher.php:277-313
~~~~~~~~~~~
1.08% duplicated lines out of 50840 total lines of code.
Average size of duplication is 39 lines, largest clone has 54 of lines
fortee
コード解析するためのツールを
詰め込んだコンテナ
3939
重複コードはあるか?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer phpcpd src
phpcpd 4.1.0 by Sebastian Bergmann.
Found 14 clones with 548 duplicated lines in 24 files:
- /app/src/Model/Table/ConferencePagesTable.php:51-105 (54 lines)
/app/src/Model/Table/PagesTable.php:44-98
~~~~~~~~~~~
- /app/src/Controller/ConferenceAttendeeTypesController.php:104-131 (27 lines)
/app/src/Controller/ConferenceAttendeeTypesController.php:143-170
~~~~~~~~~~~
- /app/src/Classes/ForteeUtil.php:73-109 (36 lines)
/app/src/Classes/ImageFetcher.php:277-313
~~~~~~~~~~~
1.08% duplicated lines out of 50840 total lines of code.
Average size of duplication is 39 lines, largest clone has 54 of lines
fortee
14個の重複コードを検出。24ファイル、合計548⾏が対象
4040
重複コードはあるか?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer phpcpd src
phpcpd 4.1.0 by Sebastian Bergmann.
Found 14 clones with 548 duplicated lines in 24 files:
- /app/src/Model/Table/ConferencePagesTable.php:51-105 (54 lines)
/app/src/Model/Table/PagesTable.php:44-98
~~~~~~~~~~~
- /app/src/Controller/ConferenceAttendeeTypesController.php:104-131 (27 lines)
/app/src/Controller/ConferenceAttendeeTypesController.php:143-170
~~~~~~~~~~~
- /app/src/Classes/ForteeUtil.php:73-109 (36 lines)
/app/src/Classes/ImageFetcher.php:277-313
~~~~~~~~~~~
1.08% duplicated lines out of 50840 total lines of code.
Average size of duplication is 39 lines, largest clone has 54 of lines
fortee
テーブルオブジェクトなので
ある程度はしょうがないかな
4141
重複コードはあるか?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer phpcpd src
phpcpd 4.1.0 by Sebastian Bergmann.
Found 14 clones with 548 duplicated lines in 24 files:
- /app/src/Model/Table/ConferencePagesTable.php:51-105 (54 lines)
/app/src/Model/Table/PagesTable.php:44-98
~~~~~~~~~~~
- /app/src/Controller/ConferenceAttendeeTypesController.php:104-131 (27 lines)
/app/src/Controller/ConferenceAttendeeTypesController.php:143-170
~~~~~~~~~~~
- /app/src/Classes/ForteeUtil.php:73-109 (36 lines)
/app/src/Classes/ImageFetcher.php:277-313
~~~~~~~~~~~
1.08% duplicated lines out of 50840 total lines of code.
Average size of duplication is 39 lines, largest clone has 54 of lines
fortee
同じコントローラーの中に
27⾏の重複があるだと!?
4242
重複コードはあるか?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer phpcpd src
phpcpd 4.1.0 by Sebastian Bergmann.
Found 14 clones with 548 duplicated lines in 24 files:
- /app/src/Model/Table/ConferencePagesTable.php:51-105 (54 lines)
/app/src/Model/Table/PagesTable.php:44-98
~~~~~~~~~~~
- /app/src/Controller/ConferenceAttendeeTypesController.php:104-131 (27 lines)
/app/src/Controller/ConferenceAttendeeTypesController.php:143-170
~~~~~~~~~~~
- /app/src/Classes/ForteeUtil.php:73-109 (36 lines)
/app/src/Classes/ImageFetcher.php:277-313
~~~~~~~~~~~
1.08% duplicated lines out of 50840 total lines of code.
Average size of duplication is 39 lines, largest clone has 54 of lines
fortee
こちらは違うファイルで36⾏の重複が!
4343
重複コードはあるか?
ForteeUtill.php
こちらは違うファイルで36⾏の重複が!
ImageFetcher.php
4444
重複コードはあるか?
ForteeUtill.php
こちらは違うファイルで36⾏の重複が!
ImageFetcher.php
画像を正⽅形にトリミングする処理
まとめられそう!
4545
重複コードはあるか?
ForteeUtill.php
こちらは違うファイルで36⾏の重複が!
ImageFetcher.php
画像を正⽅形にトリミングする処理
まとめられそう!
4646
重複コードはあるか?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer phpcpd src
phpcpd 4.1.0 by Sebastian Bergmann.
Found 14 clones with 548 duplicated lines in 24 files:
- /app/src/Model/Table/ConferencePagesTable.php:51-105 (54 lines)
/app/src/Model/Table/PagesTable.php:44-98
~~~~~~~~~~~
- /app/src/Controller/ConferenceAttendeeTypesController.php:104-131 (27 lines)
/app/src/Controller/ConferenceAttendeeTypesController.php:143-170
~~~~~~~~~~~
- /app/src/Classes/ForteeUtil.php:73-109 (36 lines)
/app/src/Classes/ImageFetcher.php:277-313
~~~~~~~~~~~
1.08% duplicated lines out of 50840 total lines of code.
Average size of duplication is 39 lines, largest clone has 54 of lines
fortee
50,840⾏の中、重複があったコードは1.08%
重複コードの平均⾏数は39⾏で、最⼤54⾏が重複している
4747
重複コードはあるか?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer phpcpd .
phpcpd 4.1.0 by Sebastian Bergmann.
Found 184 clones with 9893 duplicated lines in 142 files:
- /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:166-524 (358 lines)
/app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:170-528
~~~~~~~~~~
- /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:321-561 (240 lines)
/app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:334-574
~~~~~~~~~~~
- /app/xxxxxx/controllers/xxxxxx.php:909-1084 (175 lines)
/app/xxxxxx/controllers/xxxxxx.php:1247-1422
~~~~~~~~~~
8.41% duplicated lines out of 112932 total lines of code.
Average size of duplication is 54 lines, largest clone has 358 of lines
Web App 2
Web App 2のチェック結果
4848
重複コードはあるか?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer phpcpd .
phpcpd 4.1.0 by Sebastian Bergmann.
Found 184 clones with 9893 duplicated lines in 142 files:
- /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:166-524 (358 lines)
/app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:170-528
~~~~~~~~~~
- /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:321-561 (240 lines)
/app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:334-574
~~~~~~~~~~~
- /app/xxxxxx/controllers/xxxxxx.php:909-1084 (175 lines)
/app/xxxxxx/controllers/xxxxxx.php:1247-1422
~~~~~~~~~~
8.41% duplicated lines out of 112932 total lines of code.
Average size of duplication is 54 lines, largest clone has 358 of lines
Web App 2
184個の重複コードを検出。142ファイル、合計9,893⾏が対象
4949
重複コードはあるか?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer phpcpd .
phpcpd 4.1.0 by Sebastian Bergmann.
Found 184 clones with 9893 duplicated lines in 142 files:
- /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:166-524 (358 lines)
/app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:170-528
~~~~~~~~~~
- /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:321-561 (240 lines)
/app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:334-574
~~~~~~~~~~~
- /app/xxxxxx/controllers/xxxxxx.php:909-1084 (175 lines)
/app/xxxxxx/controllers/xxxxxx.php:1247-1422
~~~~~~~~~~
8.41% duplicated lines out of 112932 total lines of code.
Average size of duplication is 54 lines, largest clone has 358 of lines
Web App 2
Viewのファイルなんかも
重複に引っかかってはいるが‧‧‧
5050
重複コードはあるか?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer phpcpd .
phpcpd 4.1.0 by Sebastian Bergmann.
Found 184 clones with 9893 duplicated lines in 142 files:
- /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:166-524 (358 lines)
/app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:170-528
~~~~~~~~~~
- /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:321-561 (240 lines)
/app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:334-574
~~~~~~~~~~~
- /app/xxxxxx/controllers/xxxxxx.php:909-1084 (175 lines)
/app/xxxxxx/controllers/xxxxxx.php:1247-1422
~~~~~~~~~~
8.41% duplicated lines out of 112932 total lines of code.
Average size of duplication is 54 lines, largest clone has 358 of lines
Web App 2
Fatかつ重複したコントローラ‧‧‧
5151
重複コードはあるか?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer phpcpd .
phpcpd 4.1.0 by Sebastian Bergmann.
Found 184 clones with 9893 duplicated lines in 142 files:
- /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:166-524 (358 lines)
/app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:170-528
~~~~~~~~~~
- /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:321-561 (240 lines)
/app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:334-574
~~~~~~~~~~~
- /app/xxxxxx/controllers/xxxxxx.php:909-1084 (175 lines)
/app/xxxxxx/controllers/xxxxxx.php:1247-1422
~~~~~~~~~~
8.41% duplicated lines out of 112932 total lines of code.
Average size of duplication is 54 lines, largest clone has 358 of lines
Web App 2
112,932⾏の中、重複があったコードは8.41%
重複コードの平均⾏数は54⾏で、最⼤358⾏が重複している
5252
重複コードはあるか?
fortee Web App 2
総コード⾏数 50,840 112,932
重複コード率 1.08% 8.41%
重複コード⾏数 548 9,893
重複コードの個数 14 184
重複コードが含まれる
ファイル数
24 142
5353
terryyin/lizard
• Lizard is an extensible Cyclomatic Complexity
Analyzer for many programming languages
• PHP以外の⾔語も解析できるPythonのツール
• 循環的複雑度を計測できる
• 循環的複雑度
• if/else, for, switchなどの数を計測
• コードがどれだけ複雑か?の指標
循環的複雑度は?
5454
循環的複雑度は?
循環的複雑度 複雑さの状態 バグ混⼊確率
10以下 ⾮常に良い構造 25%
30以上 構造的なリスクあり 40%
50以上 テスト不可能 70%
75以上 いかなる変更も誤修正を⽣む 98%
5555
循環的複雑度は?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer lizard src/ -s
cyclomatic_complexity
=========================================================================================
!!!! Warnings (cyclomatic_complexity > 15 or length > 1000 or parameter_count > 100) !!!!
================================================
NLOC CCN token PARAM length location
------------------------------------------------
162 28 1001 3 187 importAttendee@298-
484@src/Classes/TicketVendors/EventbriteCore.php
116 27 1001 1 148 importPop3@66-213@src/Classes/PopAccountCore.php
159 21 1174 0 185 form@199-383@src/Controller/SpeakerProposalsController.php
89 21 587 0 116 twitter@197-312@src/Controller/AvatarsApiController.php
376 20 2689 0 454 main@54-507@src/Shell/DataMigrationShell.php
101 19 829 0 135 createArchive@71-205@src/Classes/AttendeeCore.php
73 19 498 0 93 upload@43-135@src/Controller/AvatarsApiController.php
49 18 412 1 65 _parse@83-147@src/Classes/OpenGraph.php
74 18 707 1 112 importPop3@43-154@src/Classes/SponsorsLib.php
78 18 540 5 88 linkButton@55-142@src/View/Helper/FaHelper.php
76 17 487 2 80 repairText@246-
325@src/Controller/ReceivedEmailsController.php
==========================================================================================
Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt
------------------------------------------------------------------------------------------
33248 16.3 2.3 104.2 1743 11 0.01 0.05
fortee
forteeのチェック結果
5656
循環的複雑度は?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer lizard src/ -s
cyclomatic_complexity
=========================================================================================
!!!! Warnings (cyclomatic_complexity > 15 or length > 1000 or parameter_count > 100) !!!!
================================================
NLOC CCN token PARAM length location
------------------------------------------------
162 28 1001 3 187 importAttendee@298-
484@src/Classes/TicketVendors/EventbriteCore.php
116 27 1001 1 148 importPop3@66-213@src/Classes/PopAccountCore.php
159 21 1174 0 185 form@199-383@src/Controller/SpeakerProposalsController.php
89 21 587 0 116 twitter@197-312@src/Controller/AvatarsApiController.php
376 20 2689 0 454 main@54-507@src/Shell/DataMigrationShell.php
101 19 829 0 135 createArchive@71-205@src/Classes/AttendeeCore.php
73 19 498 0 93 upload@43-135@src/Controller/AvatarsApiController.php
49 18 412 1 65 _parse@83-147@src/Classes/OpenGraph.php
74 18 707 1 112 importPop3@43-154@src/Classes/SponsorsLib.php
78 18 540 5 88 linkButton@55-142@src/View/Helper/FaHelper.php
76 17 487 2 80 repairText@246-
325@src/Controller/ReceivedEmailsController.php
==========================================================================================
Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt
------------------------------------------------------------------------------------------
33248 16.3 2.3 104.2 1743 11 0.01 0.05
fortee
循環的複雑度の値が⼤きい順でソート条件を指定している
5757
循環的複雑度は?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer lizard src/ -s
cyclomatic_complexity
=========================================================================================
!!!! Warnings (cyclomatic_complexity > 15 or length > 1000 or parameter_count > 100) !!!!
================================================
NLOC CCN token PARAM length location
------------------------------------------------
162 28 1001 3 187 importAttendee@298-
484@src/Classes/TicketVendors/EventbriteCore.php
116 27 1001 1 148 importPop3@66-213@src/Classes/PopAccountCore.php
159 21 1174 0 185 form@199-383@src/Controller/SpeakerProposalsController.php
89 21 587 0 116 twitter@197-312@src/Controller/AvatarsApiController.php
376 20 2689 0 454 main@54-507@src/Shell/DataMigrationShell.php
101 19 829 0 135 createArchive@71-205@src/Classes/AttendeeCore.php
73 19 498 0 93 upload@43-135@src/Controller/AvatarsApiController.php
49 18 412 1 65 _parse@83-147@src/Classes/OpenGraph.php
74 18 707 1 112 importPop3@43-154@src/Classes/SponsorsLib.php
78 18 540 5 88 linkButton@55-142@src/View/Helper/FaHelper.php
76 17 487 2 80 repairText@246-
325@src/Controller/ReceivedEmailsController.php
==========================================================================================
Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt
------------------------------------------------------------------------------------------
33248 16.3 2.3 104.2 1743 11 0.01 0.05
fortee
CCN = Cyclomatic Complexity Number = 循環的複雑度
5858
循環的複雑度は?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer lizard src/ -s
cyclomatic_complexity
=========================================================================================
!!!! Warnings (cyclomatic_complexity > 15 or length > 1000 or parameter_count > 100) !!!!
================================================
NLOC CCN token PARAM length location
------------------------------------------------
162 28 1001 3 187 importAttendee@298-
484@src/Classes/TicketVendors/EventbriteCore.php
116 27 1001 1 148 importPop3@66-213@src/Classes/PopAccountCore.php
159 21 1174 0 185 form@199-383@src/Controller/SpeakerProposalsController.php
89 21 587 0 116 twitter@197-312@src/Controller/AvatarsApiController.php
376 20 2689 0 454 main@54-507@src/Shell/DataMigrationShell.php
101 19 829 0 135 createArchive@71-205@src/Classes/AttendeeCore.php
73 19 498 0 93 upload@43-135@src/Controller/AvatarsApiController.php
49 18 412 1 65 _parse@83-147@src/Classes/OpenGraph.php
74 18 707 1 112 importPop3@43-154@src/Classes/SponsorsLib.php
78 18 540 5 88 linkButton@55-142@src/View/Helper/FaHelper.php
76 17 487 2 80 repairText@246-
325@src/Controller/ReceivedEmailsController.php
==========================================================================================
Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt
------------------------------------------------------------------------------------------
33248 16.3 2.3 104.2 1743 11 0.01 0.05
fortee
循環的複雑度が30を超えるファイルはない様⼦!
5959
循環的複雑度は?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer lizard src/ -s
cyclomatic_complexity
=========================================================================================
!!!! Warnings (cyclomatic_complexity > 15 or length > 1000 or parameter_count > 100) !!!!
================================================
NLOC CCN token PARAM length location
------------------------------------------------
162 28 1001 3 187 importAttendee@298-
484@src/Classes/TicketVendors/EventbriteCore.php
116 27 1001 1 148 importPop3@66-213@src/Classes/PopAccountCore.php
159 21 1174 0 185 form@199-383@src/Controller/SpeakerProposalsController.php
89 21 587 0 116 twitter@197-312@src/Controller/AvatarsApiController.php
376 20 2689 0 454 main@54-507@src/Shell/DataMigrationShell.php
101 19 829 0 135 createArchive@71-205@src/Classes/AttendeeCore.php
73 19 498 0 93 upload@43-135@src/Controller/AvatarsApiController.php
49 18 412 1 65 _parse@83-147@src/Classes/OpenGraph.php
74 18 707 1 112 importPop3@43-154@src/Classes/SponsorsLib.php
78 18 540 5 88 linkButton@55-142@src/View/Helper/FaHelper.php
76 17 487 2 80 repairText@246-
325@src/Controller/ReceivedEmailsController.php
==========================================================================================
Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt
------------------------------------------------------------------------------------------
33248 16.3 2.3 104.2 1743 11 0.01 0.05
fortee
メソッドと⾏番号が分かる
6060
循環的複雑度は?
SpeakerProposalController.php
確かにこの辺、ネストが深そう
6161
循環的複雑度は?
SpeakerProposalController.php
200⾏くらいあるメソッドなので、
ちゃんと理解して直さねば‧‧‧という感じ‧‧‧
この辺をキレイに直すには経験‧知識も必要そう
コントローラー‧‧‧テスト‧‧‧
6262
循環的複雑度は?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer lizard . -s
cyclomatic_complexity
=========================================================================================
!!!! Warnings (cyclomatic_complexity > 15 or length > 1000 or parameter_count > 100) !!!!
================================================
NLOC CCN token PARAM length location
------------------------------------------------
247 63 2436 0 353 aaaaAction@41-393@./xxxxx/controllers/xxxxxController.php
139 41 1272 0 202 bbbbAction@625-826@./xxxxx/controllers/xxxxxController.php
124 39 1018 0 161 ccccAction@77-237@./xxxxx/controllers/xxxxxController.php
81 37 351 1 84 xxxx@840-923@./xxxx/xxxx/Controller/xxxx/Abstract.php
152 37 1086 0 197 xxxxAction@21-217@./xxxx/xxxx/xxxx/xxxxController.php
143 36 1110 0 197 xxxxAction@740-936@./xxxx/xxxx/xxxxController.php
150 35 1516 0 223 xxxxAction@33-255@./xxxx/controllers/xxxxController.php
63 34 741 1 72 xxxx@16-87@./xxxx/xxxx/xxxx/xxxx/xxxx/xxxx.php
81 34 917 0 106 aaaaAction@229-334@./yyyy/controllers/yyyyController.php
110 31 1071 0 143 xxxxAction@20-162@./xxxx/controllers/xxxxController.php
75 30 753 0 108 bbbb@79-186@./xxxx/controllers/yyyyController.php
97 29 926 0 127 ccccAction@609-735@./xxxx/controllers/yyyyController.php
==========================================================================================
Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt
------------------------------------------------------------------------------------------
33248 16.3 2.3 104.2 1743 11 0.01 0.05
Web App 2
Web App 2のチェック結果
6363
循環的複雑度は?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer lizard . -s
cyclomatic_complexity
=========================================================================================
!!!! Warnings (cyclomatic_complexity > 15 or length > 1000 or parameter_count > 100) !!!!
================================================
NLOC CCN token PARAM length location
------------------------------------------------
247 63 2436 0 353 aaaaAction@41-393@./xxxxx/controllers/zzzzController.php
139 41 1272 0 202 bbbbAction@625-826@./xxxxx/controllers/zzzzController.php
124 39 1018 0 161 ccccAction@77-237@./xxxxx/controllers/zzzzController.php
81 37 351 1 84 xxxx@840-923@./xxxx/xxxx/Controller/xxxx/Abstract.php
152 37 1086 0 197 xxxxAction@21-217@./xxxx/xxxx/xxxx/xxxxController.php
143 36 1110 0 197 xxxxAction@740-936@./xxxx/xxxx/xxxxController.php
150 35 1516 0 223 xxxxAction@33-255@./xxxx/controllers/xxxxController.php
63 34 741 1 72 xxxx@16-87@./xxxx/xxxx/xxxx/xxxx/xxxx/xxxx.php
81 34 917 0 106 aaaaAction@229-334@./yyyy/controllers/yyyyController.php
110 31 1071 0 143 xxxxAction@20-162@./xxxx/controllers/xxxxController.php
75 30 753 0 108 bbbb@79-186@./xxxx/controllers/yyyyController.php
97 29 926 0 127 ccccAction@609-735@./xxxx/controllers/yyyyController.php
==========================================================================================
Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt
------------------------------------------------------------------------------------------
33248 16.3 2.3 104.2 1743 11 0.01 0.05
Web App 2
循環的複雑度が63…
バグ混⼊確率70%以上…
6464
循環的複雑度は?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer lizard . -s
cyclomatic_complexity
=========================================================================================
!!!! Warnings (cyclomatic_complexity > 15 or length > 1000 or parameter_count > 100) !!!!
================================================
NLOC CCN token PARAM length location
------------------------------------------------
247 63 2436 0 353 aaaaAction@41-393@./xxxxx/controllers/zzzzController.php
139 41 1272 0 202 bbbbAction@625-826@./xxxxx/controllers/zzzzController.php
124 39 1018 0 161 ccccAction@77-237@./xxxxx/controllers/zzzzController.php
81 37 351 1 84 xxxx@840-923@./xxxx/xxxx/Controller/xxxx/Abstract.php
152 37 1086 0 197 xxxxAction@21-217@./xxxx/xxxx/xxxx/xxxxController.php
143 36 1110 0 197 xxxxAction@740-936@./xxxx/xxxx/xxxxController.php
150 35 1516 0 223 xxxxAction@33-255@./xxxx/controllers/xxxxController.php
63 34 741 1 72 xxxx@16-87@./xxxx/xxxx/xxxx/xxxx/xxxx/xxxx.php
81 34 917 0 106 aaaaAction@229-334@./yyyy/controllers/yyyyController.php
110 31 1071 0 143 xxxxAction@20-162@./xxxx/controllers/xxxxController.php
75 30 753 0 108 bbbb@79-186@./xxxx/controllers/yyyyController.php
97 29 926 0 127 ccccAction@609-735@./xxxx/controllers/yyyyController.php
==========================================================================================
Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt
------------------------------------------------------------------------------------------
33248 16.3 2.3 104.2 1743 11 0.01 0.05
Web App 2
メソッドごとのデータ
6565
循環的複雑度は?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer lizard . -s
cyclomatic_complexity
=========================================================================================
!!!! Warnings (cyclomatic_complexity > 15 or length > 1000 or parameter_count > 100) !!!!
================================================
NLOC CCN token PARAM length location
------------------------------------------------
247 63 2436 0 353 aaaaAction@41-393@./xxxxx/controllers/zzzzController.php
139 41 1272 0 202 bbbbAction@625-826@./xxxxx/controllers/zzzzController.php
124 39 1018 0 161 ccccAction@77-237@./xxxxx/controllers/zzzzController.php
81 37 351 1 84 xxxx@840-923@./xxxx/xxxx/Controller/xxxx/Abstract.php
152 37 1086 0 197 xxxxAction@21-217@./xxxx/xxxx/xxxx/xxxxController.php
143 36 1110 0 197 xxxxAction@740-936@./xxxx/xxxx/xxxxController.php
150 35 1516 0 223 xxxxAction@33-255@./xxxx/controllers/xxxxController.php
63 34 741 1 72 xxxx@16-87@./xxxx/xxxx/xxxx/xxxx/xxxx/xxxx.php
81 34 917 0 106 aaaaAction@229-334@./yyyy/controllers/yyyyController.php
110 31 1071 0 143 xxxxAction@20-162@./xxxx/controllers/xxxxController.php
75 30 753 0 108 bbbb@79-186@./xxxx/controllers/yyyyController.php
97 29 926 0 127 ccccAction@609-735@./xxxx/controllers/yyyyController.php
==========================================================================================
Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt
------------------------------------------------------------------------------------------
33248 16.3 2.3 104.2 1743 11 0.01 0.05
Web App 2
ほぼほぼコントローラーが占めている
ロジックがコントローラに‧‧‧
Fat‧‧‧
6666
循環的複雑度は?
% docker run --rm -v ${PWD}:/app blue-goheimochi/php-code-analyzer lizard . -s
cyclomatic_complexity
=========================================================================================
!!!! Warnings (cyclomatic_complexity > 15 or length > 1000 or parameter_count > 100) !!!!
================================================
NLOC CCN token PARAM length location
------------------------------------------------
247 63 2436 0 353 aaaaAction@41-393@./xxxxx/controllers/zzzzController.php
139 41 1272 0 202 bbbbAction@625-826@./xxxxx/controllers/zzzzController.php
124 39 1018 0 161 ccccAction@77-237@./xxxxx/controllers/zzzzController.php
81 37 351 1 84 xxxx@840-923@./xxxx/xxxx/Controller/xxxx/Abstract.php
152 37 1086 0 197 xxxxAction@21-217@./xxxx/xxxx/xxxx/xxxxController.php
143 36 1110 0 197 xxxxAction@740-936@./xxxx/xxxx/xxxxController.php
150 35 1516 0 223 xxxxAction@33-255@./xxxx/controllers/xxxxController.php
63 34 741 1 72 xxxx@16-87@./xxxx/xxxx/xxxx/xxxx/xxxx/xxxx.php
81 34 917 0 106 aaaaAction@229-334@./yyyy/controllers/yyyyController.php
110 31 1071 0 143 xxxxAction@20-162@./xxxx/controllers/xxxxController.php
75 30 753 0 108 bbbb@79-186@./xxxx/controllers/yyyyController.php
97 29 926 0 127 ccccAction@609-735@./xxxx/controllers/yyyyController.php
==========================================================================================
Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt
------------------------------------------------------------------------------------------
33248 16.3 2.3 104.2 1743 11 0.01 0.05
Web App 2
上位3つは「同じ」コントローラー‧‧‧
6767
循環的複雑度は?
fortee Web App 2
総コード⾏数
(コメントなし)
33,248 69,946
平均CCN 2.3 2.8
総メソッド数 1,743 4,518
6868
計測できるレガシーさ
• コードはどれくらい⼤きいか?(phplocなど)
• 重複コードはあるか?(phpcpdなど)
• コーディング規約が守られているか?(phpcsなど)
• 循環的複雑度は?(phpmd, lizardなど)
• コードにエラーはないか?(PHPStan, Phan, PHPUnitなど)
• アプリケーションに脆弱性はないか?(VAddyなど)
6969
計測できるレガシーさ
• コードはどれくらい⼤きいか?(phplocなど)
• 重複コードはあるか?(phpcpdなど)
• コーディング規約が守られているか?(phpcsなど)
• 循環的複雑度は?(phpmd, lizardなど)
• コードにエラーはないか?(PHPStan, Phan, PHPUnitなど)
• アプリケーションに脆弱性はないか?(VAddyなど)
計測できるレガシーさは
ツールで確認しつつ、改善の指針にできる
7070
対象のWebアプリケーション2
7171
対象のWebアプリケーション2
こいつ‧‧やばそうじゃないですか‧‧?
7272
• PHPバージョン: PHP4.3.11
• フレームワーク: なし
• ローカル環境: XAMPP
• テスト: なし
• バージョン管理: SVN
Web App 2のレガシー具合は?
リファクタ‧‧?コードに触れる‧‧‧?
ウッ‧‧‧あたまが‧‧‧
コードをさわらずになんとかする
コードをさわらずになんとかする
=
リプレイスする
7575
• レガシー過ぎて触りたくない触れない‧‧‧
• レガシーソフトウェア改善ガイド「完全な書き直し
は、ほとんど常によくないアイデア」とは⾔うが…
• でも‧‧‧ねぇ‧‧‧
• やっぱり触りたくない‧‧‧
• チームの状況など加味してよくよく考える必要はある
• よし、ビッグ‧リライトだ!
• どうやる‧‧?
コードをさわらずになんとかする
7676
• レガシー過ぎて触りたくない触れない‧‧‧
• レガシーソフトウェア改善ガイド「完全な書き直し
は、ほとんど常によくないアイデア」とは⾔うが…
• でも‧‧‧ねぇ‧‧‧
• やっぱり触りたくない‧‧‧
• チームの状況など加味してよくよく考える必要はある
• よし、ビッグ‧リライトだ!
• どうやる‧‧?
コードをさわらずになんとかする
実際に私の現場で
やろうとしているアプローチを
forteeで再現してみます
7777
コードをさわらずになんとかする
fortee
forteeがPHP4で動いているとする
7878
コードをさわらずになんとかする
fortee
ブラウザでアクセス
7979
コードをさわらずになんとかする
fortee
New fortee
(Laravel)
よし、Laravelにリプレイスだ!
8080
コードをさわらずになんとかする
fortee
New fortee
(Laravel)
プロキシを挟む
Proxy
(Nginxなど)
8181
コードをさわらずになんとかする
fortee
New fortee
(Laravel)
新しいアプリケーションにプロキシ
Proxy
(Nginxなど)
/test-conf/sponsor/brochure-request/ にアクセス
8282
コードをさわらずになんとかする
fortee
New fortee
(Laravel)
それ以外のアクセスは
すべて旧forteeにプロキシ
Proxy
(Nginxなど)
8383
コードをさわらずになんとかする
fortee
New fortee
(Laravel)
Proxy
(Nginxなど)
URIのパスごとに、
少しずつリプレイスしていく
8484
• URIのパスごとに振り分ける
• 少しずつ、新しいアプリケーションに変えていける
• forteeにあるようなE2Eのテスト(Selenium,
Cypress など)を作成して動作の担保
• ⾃動テストが絶対必要というわけではないとは思う
• データの更新などがある場合
• MySQLが発⾏するSQLなどを確認してデグレが起
こっていないことを確認する
コードをさわらずになんとかする
8585
• URIのパスごとに振り分ける
• 少しずつ、新しいアプリケーションに変えていける
• forteeにあるようなE2Eのテスト(Selenium,
Cypress など)を作成する
• ⾃動テストが絶対必要というわけではないとは思う
• データの更新などがある場合
• MySQLが発⾏するSQLなどを確認してデグレが起
こっていないことを確認する
コードをさわらずになんとかする
他にも⽅法はあると思いますが、
狭い範囲にフォーカスできる⽅法を選ぶ
まとめ
8787
まとめ
• レガシーなWebアプリケーションとは?
• レガシーコードに注⽬してアプローチの観点を考察
• 計測できるレガシーのリファクタリング
• 計測できないレガシーのリファクタリング
• リプレイス
• レガシーさが計測できる場合
• ツールで確認しながらコードを改善する
• ビッグ‧リライト(リプレイス)を選択する場合
• なるべく狭い範囲を対象に進められる⽅法を選ぶ
8888
まとめ
• レガシーなWebアプリケーションとは?
• レガシーコードに注⽬してアプローチの観点を提⽰
• 計測できるレガシーのリファクタリング
• 計測できないレガシーのリファクタリング
• リプレイス
• レガシーさが計測できる場合
• ツールで確認しながらコードを改善する
• ビッグ‧リライト(リプレイス)を選択する場合
• なるべく狭い範囲を対象に進められる⽅法を選ぶ
みなさまの現場における
レガシーなWebアプリケーションと
向き合うための⼀助となれば幸いです
8989
まとめ
• レガシーなWebアプリケーションとは?
• レガシーコードに注⽬してアプローチの観点を提⽰
• 計測できるレガシーのリファクタリング
• 計測できないレガシーのリファクタリング
• リプレイス
• レガシーさが計測できる場合
• ツールで確認しながらコードを改善する
• ビッグ‧リライト(リプレイス)を選択する場合
• なるべく狭い範囲を対象に進められる⽅法を選ぶ
ご清聴ありがとうございました!

More Related Content

What's hot

やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こうShinnosuke Tokuda
 
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDDドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD増田 亨
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方増田 亨
 
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~Yuichi Hasegawa
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Masahito Zembutsu
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
 
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SREIida Yukako
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理H2O Space. Co., Ltd.
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースHajime Yanagawa
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
Goのシンプルさについて
GoのシンプルさについてGoのシンプルさについて
Goのシンプルさについてpospome
 
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Keisuke Fukuda
 
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTipsKenjiro Kubota
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 

What's hot (20)

やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
良いコードとは
良いコードとは良いコードとは
良いコードとは
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こう
 
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDDドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
GraphQLでフロントエンドの複雑性とたたかう
GraphQLでフロントエンドの複雑性とたたかうGraphQLでフロントエンドの複雑性とたたかう
GraphQLでフロントエンドの複雑性とたたかう
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
GoでMinecraftっぽいの作る
GoでMinecraftっぽいの作るGoでMinecraftっぽいの作る
GoでMinecraftっぽいの作る
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
Goのシンプルさについて
GoのシンプルさについてGoのシンプルさについて
Goのシンプルさについて
 
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
 
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 

Similar to レガシーなWebアプリケーションと向き合う

PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るPHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るshinjiigarashi
 
PHPの今とこれから2022
PHPの今とこれから2022PHPの今とこれから2022
PHPの今とこれから2022Rui Hirokawa
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterMasanori Oobayashi
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方do_aki
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)Yoshifumi Yamaguchi
 
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)Rui Hirokawa
 
Php development efficiency improvement
Php development efficiency improvementPhp development efficiency improvement
Php development efficiency improvement伸幸 茂木
 
PHPの今とこれから2020
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020Rui Hirokawa
 
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話Kentarou Takeda
 
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~諒一 上野
 
laravel-env-checkの紹介(old)
laravel-env-checkの紹介(old)laravel-env-checkの紹介(old)
laravel-env-checkの紹介(old)Manabu Matsui
 
Laravelから学びレガシーと闘いはじめた
Laravelから学びレガシーと闘いはじめたLaravelから学びレガシーと闘いはじめた
Laravelから学びレガシーと闘いはじめたYuta Ohashi
 
Php in ruby
Php in rubyPhp in ruby
Php in rubydo_aki
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012Hiroshi Tokumaru
 
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
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjHisateru Tanaka
 
RFC: "var" Deprecation
RFC: "var" DeprecationRFC: "var" Deprecation
RFC: "var" Deprecationy-uti
 

Similar to レガシーなWebアプリケーションと向き合う (20)

PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るPHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見る
 
PHPの今とこれから2022
PHPの今とこれから2022PHPの今とこれから2022
PHPの今とこれから2022
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
筋トレ大事
筋トレ大事筋トレ大事
筋トレ大事
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
 
NanoA
NanoANanoA
NanoA
 
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
 
Php development efficiency improvement
Php development efficiency improvementPhp development efficiency improvement
Php development efficiency improvement
 
PHPの今とこれから2020
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020
 
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
 
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
 
laravel-env-checkの紹介(old)
laravel-env-checkの紹介(old)laravel-env-checkの紹介(old)
laravel-env-checkの紹介(old)
 
Laravelから学びレガシーと闘いはじめた
Laravelから学びレガシーと闘いはじめたLaravelから学びレガシーと闘いはじめた
Laravelから学びレガシーと闘いはじめた
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
 
PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5
 
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
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
 
RFC: "var" Deprecation
RFC: "var" DeprecationRFC: "var" Deprecation
RFC: "var" Deprecation
 

More from Yuta Ohashi

三項演算子を見ると「ウッ」てなる人のはなし
三項演算子を見ると「ウッ」てなる人のはなし三項演算子を見ると「ウッ」てなる人のはなし
三項演算子を見ると「ウッ」てなる人のはなしYuta Ohashi
 
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのことLaravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのことYuta Ohashi
 
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとりVue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとりYuta Ohashi
 
Laravelで式年遷宮中の現場で うまくいってること・ うまくいっていないこと
Laravelで式年遷宮中の現場でうまくいってること・うまくいっていないことLaravelで式年遷宮中の現場でうまくいってること・うまくいっていないこと
Laravelで式年遷宮中の現場で うまくいってること・ うまくいっていないことYuta Ohashi
 
GoでシュッとWebスクレイピングする
GoでシュッとWebスクレイピングするGoでシュッとWebスクレイピングする
GoでシュッとWebスクレイピングするYuta Ohashi
 
初心者がGoでCLIツール作ってみて学んだこと
初心者がGoでCLIツール作ってみて学んだこと初心者がGoでCLIツール作ってみて学んだこと
初心者がGoでCLIツール作ってみて学んだことYuta Ohashi
 
今日からGoをはじめる人に伝えたい$GOPATHではまった話
今日からGoをはじめる人に伝えたい$GOPATHではまった話今日からGoをはじめる人に伝えたい$GOPATHではまった話
今日からGoをはじめる人に伝えたい$GOPATHではまった話Yuta Ohashi
 
「Laravelから学びレガシーと闘いはじめた」のその後
「Laravelから学びレガシーと闘いはじめた」のその後「Laravelから学びレガシーと闘いはじめた」のその後
「Laravelから学びレガシーと闘いはじめた」のその後Yuta Ohashi
 
無知の表明でチームをビルドする
無知の表明でチームをビルドする無知の表明でチームをビルドする
無知の表明でチームをビルドするYuta Ohashi
 
許可を求めるな謝罪せよ?
許可を求めるな謝罪せよ?許可を求めるな謝罪せよ?
許可を求めるな謝罪せよ?Yuta Ohashi
 
2016年恥ずかしいふりかえり
2016年恥ずかしいふりかえり2016年恥ずかしいふりかえり
2016年恥ずかしいふりかえりYuta Ohashi
 
My開発環境の話
My開発環境の話My開発環境の話
My開発環境の話Yuta Ohashi
 
テストを書くのに挫折したあとやったこと
テストを書くのに挫折したあとやったことテストを書くのに挫折したあとやったこと
テストを書くのに挫折したあとやったことYuta Ohashi
 
LaravelアプリケーションをSeleniumでテストしてみた
LaravelアプリケーションをSeleniumでテストしてみたLaravelアプリケーションをSeleniumでテストしてみた
LaravelアプリケーションをSeleniumでテストしてみたYuta Ohashi
 
Dockerをすこーしさわってみる
DockerをすこーしさわってみるDockerをすこーしさわってみる
DockerをすこーしさわってみるYuta Ohashi
 
5分でなんとなーくわかるDocker
5分でなんとなーくわかるDocker5分でなんとなーくわかるDocker
5分でなんとなーくわかるDockerYuta Ohashi
 
WindowsでもVagrantとChefでLaravelのローカル環境を(自分で)つくりたい!
WindowsでもVagrantとChefでLaravelのローカル環境を(自分で)つくりたい!WindowsでもVagrantとChefでLaravelのローカル環境を(自分で)つくりたい!
WindowsでもVagrantとChefでLaravelのローカル環境を(自分で)つくりたい!Yuta Ohashi
 

More from Yuta Ohashi (17)

三項演算子を見ると「ウッ」てなる人のはなし
三項演算子を見ると「ウッ」てなる人のはなし三項演算子を見ると「ウッ」てなる人のはなし
三項演算子を見ると「ウッ」てなる人のはなし
 
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのことLaravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
 
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとりVue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
 
Laravelで式年遷宮中の現場で うまくいってること・ うまくいっていないこと
Laravelで式年遷宮中の現場でうまくいってること・うまくいっていないことLaravelで式年遷宮中の現場でうまくいってること・うまくいっていないこと
Laravelで式年遷宮中の現場で うまくいってること・ うまくいっていないこと
 
GoでシュッとWebスクレイピングする
GoでシュッとWebスクレイピングするGoでシュッとWebスクレイピングする
GoでシュッとWebスクレイピングする
 
初心者がGoでCLIツール作ってみて学んだこと
初心者がGoでCLIツール作ってみて学んだこと初心者がGoでCLIツール作ってみて学んだこと
初心者がGoでCLIツール作ってみて学んだこと
 
今日からGoをはじめる人に伝えたい$GOPATHではまった話
今日からGoをはじめる人に伝えたい$GOPATHではまった話今日からGoをはじめる人に伝えたい$GOPATHではまった話
今日からGoをはじめる人に伝えたい$GOPATHではまった話
 
「Laravelから学びレガシーと闘いはじめた」のその後
「Laravelから学びレガシーと闘いはじめた」のその後「Laravelから学びレガシーと闘いはじめた」のその後
「Laravelから学びレガシーと闘いはじめた」のその後
 
無知の表明でチームをビルドする
無知の表明でチームをビルドする無知の表明でチームをビルドする
無知の表明でチームをビルドする
 
許可を求めるな謝罪せよ?
許可を求めるな謝罪せよ?許可を求めるな謝罪せよ?
許可を求めるな謝罪せよ?
 
2016年恥ずかしいふりかえり
2016年恥ずかしいふりかえり2016年恥ずかしいふりかえり
2016年恥ずかしいふりかえり
 
My開発環境の話
My開発環境の話My開発環境の話
My開発環境の話
 
テストを書くのに挫折したあとやったこと
テストを書くのに挫折したあとやったことテストを書くのに挫折したあとやったこと
テストを書くのに挫折したあとやったこと
 
LaravelアプリケーションをSeleniumでテストしてみた
LaravelアプリケーションをSeleniumでテストしてみたLaravelアプリケーションをSeleniumでテストしてみた
LaravelアプリケーションをSeleniumでテストしてみた
 
Dockerをすこーしさわってみる
DockerをすこーしさわってみるDockerをすこーしさわってみる
Dockerをすこーしさわってみる
 
5分でなんとなーくわかるDocker
5分でなんとなーくわかるDocker5分でなんとなーくわかるDocker
5分でなんとなーくわかるDocker
 
WindowsでもVagrantとChefでLaravelのローカル環境を(自分で)つくりたい!
WindowsでもVagrantとChefでLaravelのローカル環境を(自分で)つくりたい!WindowsでもVagrantとChefでLaravelのローカル環境を(自分で)つくりたい!
WindowsでもVagrantとChefでLaravelのローカル環境を(自分で)つくりたい!
 

Recently uploaded

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
論文紹介: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
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
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
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
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.
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
論文紹介: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
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~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...博三 太田
 

Recently uploaded (12)

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
論文紹介: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
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
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」の紹介
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
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 の勉強会で発表されたものです
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
論文紹介: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
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~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...
 

レガシーなWebアプリケーションと向き合う