SlideShare a Scribd company logo
1 of 97
Download to read offline
PHP版レガシーコード改善に 
役立つ新パターン 
ヤフー株式会社 
佐藤祐司 
2014/9/27 レガシーコード改善勉強会 #wewlc_jp
自己紹介 
佐藤 祐司 
• 2010年新卒入社 
• Webエンジニア 
• PHP 
@kuidaoring
今日話すこと 
• 私の業務とレガシーコード 
• パターンの紹介 
• これで幸せになれるのか
今日話すこと 
• 私の業務とレガシーコード 
• パターンの紹介 → 本日のメイン 
• これで幸せになれるのか
今日話すこと 
• レガシーコード改善の具体的な 
リファクタリングの具体的な方法 
• 今あるコードを何とかテストで保護して、 
自分が手を加える部分のテストを 
書けるようにしたい
今日話すこと 
• レガシーコード改善の具体的な 
リファクタリングの具体的な方法 
• 今あるコードを何とかテストで保護して、 
自分が手を加える部分のテストを 
書けるようにしたい
私の業務とレガシーコード
サービス 
サービス規模 
• 58.3億PV / 月 
• 1.4億UB / 月 
出典:Yahoo! JAPAN 媒体資料 2014年6月改訂版 (PDF) 
http://i.yimg.jp/images/marketing/portal/paper/media_sheet_open.pdf
サービス 
トップページを作る部署の中の一つ 
PJメンバー約40名 
• 開発約20名 
PCスマホアプリ… 
ここ
業務とレガシーコード 
こんなことありませんか? 
• 少ない自動テスト 
• リリース当時の開発メンバーはゼロ 
• どんどん開発メンバーが増える 
どうしてこんなふうになったのか
新規リリース時 
まずはローンチを目指す 
• ローンチ、リリース優先 
• ヒットするかはわからない 
ローンチだ!
リリース後 
サービスの成長を目指す 
• 機能を増やす 
• メンバーも少しづつ増える 
機能追加だ!
ある程度成熟して振り返ると 
• メンバーの入れ替わり 
• 歴史的経緯によるコード 
• 場当たり的な修正 
とりあえず 
直しました…! 
今⽇日からよろしく 
お願いします!
業務とレガシーコード 
• その時の判断が間違いだったかは 
わからない 
• 優先順位の話 
• ただしずっとそのままでいい 
というわけではない
業務とレガシーコード 
過去には一部似た状況になったが、 
• 有志による改善活動 
• 社内でもノウハウがたまってきた
ユニットテスト拡充 CI整備
開発フロー整備
業務とレガシーコード 
どうしたか 
• レガシーコードを地道に改善 
• レガシーコードを作りにくくする 
仕組みや体制を整備 
地道に少しづつ改善を進めた
パターンの紹介
パターンの紹介 
• レガシーコード改善の具体的な 
リファクタリングの具体的な方法 
• 今あるコードを何とかテストで保護して、 
自分が手を加える部分のテストを 
書けるようにしたい
PHPって 
• Webに特化 
• 置けば動く 
• HTMLに埋め込める 
• テンプレートエンジン 
• 標準関数が豊富
PHPにおけるレガシーコード 
• 環境に依存 
• 構造を持たない 
• スーパーグローバル変数 
• $_GET, $_POST, $_SESSION など 
• 不用意なexit
PHPにおけるレガシーコード 
サンプルコードを用いて説明 
• adminユーザと一般ユーザで見せる 
メニューを変更する
どう対応するのか 
1. テストを書けるようにする 
2. テストで保護する 
3. リファクタリング 
4. テスト、リファクタリングを繰り返す
どう対応するのか 
1. テストを書けるようにする 
2. テストで保護する 
3. リファクタリング 
4. テスト、リファクタリングを繰り返す
なにが問題になるか 
• DBに接続する 
• exitでスクリプトが終了 
• getパラメータが必要 
• ビューとロジックの混在
DBに接続
exitで終了
スーパーグローバル 
変数を参照して 
パラメータ取得
ビューとロジックが 
混在
どうにかしてテストを 
書けるようにするためのパターン
• 関数オーバーライド 
• ラップ関数
関数オーバーライド
関数オーバーライド 
• 名前空間を使って組み込み関数などを 
上書き 
• 実際には上書きしてない 
• 元ネタ 
PHPでネイティブ関数を含むコードのテスタビリティを上げる2つの方法 
- 絶品ゆどうふのタレ 
http://yudoufu.hatenablog.jp/entry/20110808/1312828535 
• 名前空間が接合部になる
関数オーバーライド 
index.php func() 
外部 
リソース 
プロダクトコード
関数オーバーライド 
index.php func() 
外部 
リソース 
プロダクトコード 
func() 
テストコード
接合部 
接合部とは、その場所を直接変更しなくて 
も、プログラムの振る舞いを変えることの 
出来る場所である 
レガシーコード改善ガイドより
コンストラクタで 
渡すオブジェクトによって 
振る舞いを変更できる
名前空間 
PHP5.3から導入 
PHP: 名前空間 ‒ Manual 
http://php.net/manual/ja/language.namespaces.php 
他の言語のパッケージやモジュールに相当
名前空間 
名前空間の影響を受けるもの 
• class 
• interface 
• trait(5.4以降) 
• 関数 
• 定数(const)
定義
参照
名前空間 
• 名前空間の中であれば、 
組み込み関数やグローバルな関数と 
同じ名前の関数を定義できる 
• 同じ名前空間内であれば、 
名前空間の指定を省略できる
組み込み関数と同じ 
名前で定義できる
名前空間内の関数が 
呼ばれる
関数オーバーライド 
どういう時に有効か 
• 上書きしたい対象が関数でしか 
用意されていない 
外部の影響を受ける組み込み関数を 
そのまま使っている場合など
ラップ関数
ラップ関数 
変数の参照などを直接行うのではなく 
関数を経由して行うようにする
どう対応するのか
なにが問題になるか 
• DBに接続する 
• exitでスクリプトが終了 
• getパラメータが必要 
• ビューとロジックの混在
どう対応するのか 
1. テストを書けるようにする 
• 環境の分離 
• スーパーグローバル変数の間接参照 
• exitの検討 
2. テストで保護する 
3. リファクタリング 
4. テスト、リファクタリングを繰り返す
どう対応するのか 
1. テストを書けるようにする 
• 環境の分離 
• スーパーグローバル変数の間接参照 
• exitの検討 
2. テストで保護する 
3. リファクタリング 
4. テスト、リファクタリングを繰り返す
環境の分離 
テスト実行時にもDBに接続しにいってしま 
う 
• DBに接続する関数をなんとかしたい 
• 関数オーバーライドを使う
環境の分離 
1. テスト対象のスクリプトに 
名前空間の定義を追加 
2. テストコードでテスト対象と 
同じ名前で名前空間の定義を追加 
3. 上書きしたい関数と同じ名前の 
関数をテストコードで定義
環境の分離 
1. テスト対象のスクリプトに 
名前空間の定義を追加 
2. テストコードでテスト対象と 
同じ名前で名前空間の定義を追加 
3. 上書きしたい関数と同じ名前の 
関数をテストコードで定義
環境の分離 
1. テスト対象のスクリプトに 
名前空間の定義を追加 
2. テストコードでテスト対象と 
同じ名前で名前空間の定義を追加 
3. 上書きしたい関数と同じ名前の 
関数をテストコードで定義
すでに他の名前空間が 
あればその下に追加
環境の分離 
1. テスト対象のスクリプトに 
名前空間の定義を追加 
2. テストコードでテスト対象と 
同じ名前で名前空間の定義を追加 
3. 上書きしたい関数と同じ名前の 
関数をテストコードで定義
関数オーバーライド 
プロダクトコード 
index.php db_get_user() 
DB
関数オーバーライド 
プロダクトコード 
index.php 
テストコード 
db_get_user() DB 
db_get_user()
注意 
名前空間を定義することで 
関数が呼び出せなくなる場合がある
名前空間の定義を 
追加
参照できなくなる
名前空間の影響 
どうするか 
• 関数を名前空間の外に再定義
どう対応するのか 
1. テストを書けるようにする 
• 環境の分離 
• スーパーグローバル変数の間接参照 
• exit, dieの検討 
2. テストで保護する 
3. リファクタリング 
4. テスト、リファクタリングを繰り返す
スーパーグローバル変数 
変数なので代入して書き換えが可能 
• 他のテストケースに影響してしまう 
• 変数を直接参照しなければいい 
• ラップ関数を使う
どう対応するのか 
1. テストを書けるようにする 
• 環境の分離 
• スーパーグローバル変数の参照 
• exitの検討 
2. テストで保護する 
3. リファクタリング 
4. テスト、リファクタリングを繰り返す
exitの検討 
exitのなにが問題になるか 
• スクリプトを終了 
PHPUnit自体も終了する 
• exitは関数ではない
実行されない
exit、dieの必要性の検討 
成功・失敗も 
わからず終了
exitの検討 
exitは言語構造、予約語 
• 名前空間内でも「exit」という 
名前の関数を定義できない 
• 「関数オーバーライド」が使えない
exitの検討 
どうするか 
• returnの代わりに使ってませんか 
• returnに変える 
• exitする部分をラップ関数にする 
• その後に関数オーバーライドを使う
どう対応するのか 
1. テストを書けるようにする 
2. テストで保護する 
3. リファクタリング 
4. テスト、リファクタリングを繰り返す
テスト 
• ビューとロジックが混ざっているので 
ロジックのみの検証はおそらく不可能 
• 条件によって変わるビューを検証する 
• assertRegex, assertContains 
• HTMLであればassertTagなど
どう対応するのか 
1. テストを書けるようにする 
2. テストで保護する 
3. リファクタリング 
4. テスト、リファクタリングを繰り返す
リファクタリング 
まずはベタなものを適切な単位に分離 
• ファイルを分離 
• 関数に分離 
• クラスに分離
課題 
globalが邪魔をする 
• グローバル変数ではなくなる 
ことによってうまく動作しなくなる 
• 「コンパイラまかせ」が使えないので 
動かすまでわからない
課題 
• 関数内でグローバル変数を参照している 
部分を引数に置き換えるように 
リファクタリングする 
• 地道に。。。 
• 参考 
テスト不能な PHP コードをリファクタリングするための戦略 
http:/www.ibm.com/developerworks/jp/opensource/library/os-refactoringphp/
これで幸せになれるのか
これで幸せになれるのか 
これだけで根本解決はできない 
• とりあえずテストは書けるようになった 
• 適用できるケースは 
それほど多くない(かも) 
• 今回は「今」できること
レガシー 
小改善 テストで 
保護 
リファクタ 
リング 
イケてる
これで幸せになれるのか 
全体を考えて設計の変更などを 
行う必要がある 
• フラットなPHPからフレームワークへ 
• 地道にテストコードを増やしていく 
継続的な改善が必要
ありがとうございました

More Related Content

What's hot

9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
Hack言語に賭けたチームの話
Hack言語に賭けたチームの話Hack言語に賭けたチームの話
Hack言語に賭けたチームの話Yuji Otani
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
2015 03 26 社内勉強会_オープンソースソフトウェアライセンスについて
2015 03 26 社内勉強会_オープンソースソフトウェアライセンスについて2015 03 26 社内勉強会_オープンソースソフトウェアライセンスについて
2015 03 26 社内勉強会_オープンソースソフトウェアライセンスについてNatsuki Yamanaka
 
DS-LiteをFreeBSDで使う
DS-LiteをFreeBSDで使うDS-LiteをFreeBSDで使う
DS-LiteをFreeBSDで使うSatoshi Togawa
 
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでDockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでRyo Nakamaru
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
PHPの今とこれから2023
PHPの今とこれから2023PHPの今とこれから2023
PHPの今とこれから2023Rui Hirokawa
 
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)NTT DATA Technology & Innovation
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までMasahito Zembutsu
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMPYusuke Kagata
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Shin Ohno
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方do_aki
 
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則20160526 依存関係逆転の原則
20160526 依存関係逆転の原則bonjin6770 Kurosawa
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門Hiroshi Tokumaru
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxpsMITSUNARI Shigeo
 
Kubernetes ネットワーキングのすべて
Kubernetes ネットワーキングのすべてKubernetes ネットワーキングのすべて
Kubernetes ネットワーキングのすべてLINE Corporation
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 

What's hot (20)

9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
Hack言語に賭けたチームの話
Hack言語に賭けたチームの話Hack言語に賭けたチームの話
Hack言語に賭けたチームの話
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
2015 03 26 社内勉強会_オープンソースソフトウェアライセンスについて
2015 03 26 社内勉強会_オープンソースソフトウェアライセンスについて2015 03 26 社内勉強会_オープンソースソフトウェアライセンスについて
2015 03 26 社内勉強会_オープンソースソフトウェアライセンスについて
 
DS-LiteをFreeBSDで使う
DS-LiteをFreeBSDで使うDS-LiteをFreeBSDで使う
DS-LiteをFreeBSDで使う
 
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでDockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
PHPの今とこれから2023
PHPの今とこれから2023PHPの今とこれから2023
PHPの今とこれから2023
 
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
 
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 
Kubernetes ネットワーキングのすべて
Kubernetes ネットワーキングのすべてKubernetes ネットワーキングのすべて
Kubernetes ネットワーキングのすべて
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 

Similar to PHP版レガシーコード改善に役立つ新パターン #wewlc_jp

Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例健一 辰濱
 
WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?Shinichi Nishikawa
 
2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリング2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリングkeki3
 
4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座Shinichi Nishikawa
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjHisateru Tanaka
 
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話Kentarou Takeda
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門Sho A
 
Php development efficiency improvement
Php development efficiency improvementPhp development efficiency improvement
Php development efficiency improvement伸幸 茂木
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会Yuji Otani
 
第10回rest勉強会 リファクタリング(サーバ編)編
第10回rest勉強会 リファクタリング(サーバ編)編第10回rest勉強会 リファクタリング(サーバ編)編
第10回rest勉強会 リファクタリング(サーバ編)編ksimoji
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniterYuya Matsushima
 
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~Rakuten Group, Inc.
 
Weeklycms20120218
Weeklycms20120218Weeklycms20120218
Weeklycms20120218Yoshi Sakai
 
Phjosh(仮)プロジェクト
Phjosh(仮)プロジェクトPhjosh(仮)プロジェクト
Phjosh(仮)プロジェクトMoriyoshi Koizumi
 
PHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxPHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxHideo Kashioka
 

Similar to PHP版レガシーコード改善に役立つ新パターン #wewlc_jp (20)

Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例
 
WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?
 
2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリング2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリング
 
4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
 
第1回python勉強会
第1回python勉強会第1回python勉強会
第1回python勉強会
 
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門
 
Php development efficiency improvement
Php development efficiency improvementPhp development efficiency improvement
Php development efficiency improvement
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会
 
第10回rest勉強会 リファクタリング(サーバ編)編
第10回rest勉強会 リファクタリング(サーバ編)編第10回rest勉強会 リファクタリング(サーバ編)編
第10回rest勉強会 リファクタリング(サーバ編)編
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
 
Weeklycms20120218
Weeklycms20120218Weeklycms20120218
Weeklycms20120218
 
Phjosh(仮)プロジェクト
Phjosh(仮)プロジェクトPhjosh(仮)プロジェクト
Phjosh(仮)プロジェクト
 
PHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxPHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptx
 
Phpcon2001 in tokyo
Phpcon2001 in tokyoPhpcon2001 in tokyo
Phpcon2001 in tokyo
 
Chef
ChefChef
Chef
 
Ppl
PplPpl
Ppl
 

More from Yahoo!デベロッパーネットワーク

ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかYahoo!デベロッパーネットワーク
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2Yahoo!デベロッパーネットワーク
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcYahoo!デベロッパーネットワーク
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo!デベロッパーネットワーク
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcYahoo!デベロッパーネットワーク
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtcYahoo!デベロッパーネットワーク
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcYahoo!デベロッパーネットワーク
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcYahoo!デベロッパーネットワーク
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcYahoo!デベロッパーネットワーク
 

More from Yahoo!デベロッパーネットワーク (20)

ゼロから始める転移学習
ゼロから始める転移学習ゼロから始める転移学習
ゼロから始める転移学習
 
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
 
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
 
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッションオンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッション
 
LakeTahoe
LakeTahoeLakeTahoe
LakeTahoe
 
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
 
Persistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability FeaturePersistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability Feature
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
 
eコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtceコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtc
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
 
ビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtcビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtc
 
サイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtcサイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtc
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
 
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtcYahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
 
「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
 

PHP版レガシーコード改善に役立つ新パターン #wewlc_jp