Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CakePHPのバージョンアップ戦略
Search
shiro seike
PRO
May 16, 2020
Programming
920
1
Share
CakePHPのバージョンアップ戦略
shiro seike
PRO
May 16, 2020
More Decks by shiro seike
See All by shiro seike
AWSコミュニティ活動は顧客のクラウド推進に効くのか / Do AWS community activities help customers adopt the cloud?
seike460
PRO
0
65
テレメトリーシグナルが導くパフォーマンス最適化 / Performance Optimization Driven by Telemetry Signals
seike460
PRO
2
220
AI-DLC 入門 〜AIコーディングの本質は「コード」ではなく「構造」〜 / Introduction to AI-DLC: The Essence of AI Coding Is Not “Code” but “Structure”
seike460
PRO
0
320
今さら聞けないサーバーレスのいいところ 〜運用から解放される世界を目指して〜 / The Benefits of Serverless You Might Be Too Embarrassed to Ask About Now — Aiming for a World Free from Operational Burdens
seike460
PRO
0
16
歴史から学ぶ「Why PHP?」 PHPを書く理由を改めて理解する / Learning from History: “Why PHP?” Rediscovering the Reasons for Writing PHP
seike460
PRO
0
440
Team-First Serverless Platform Engineering Approach to PHP Applications with Laravel and Bref
seike460
PRO
1
68
地方で実現!九州、福岡近郊のAWS活用事例 / Success Stories from the Regions! AWS Use Cases in Kyushu and the Fukuoka Area
seike460
PRO
0
14
なぜ適用するか、移行して理解するClean Architecture 〜構造を超えて設計を継承する〜 / Why Apply, Migrate and Understand Clean Architecture - Inherit Design Beyond Structure
seike460
PRO
3
1k
生成AIコーディングとの向き合い方、AIと共創するという考え方 / How to deal with generative AI coding and the concept of co-creating with AI
seike460
PRO
1
500
Other Decks in Programming
See All in Programming
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
570
安いハードウェアでVulkan
fadis
1
960
Make GenAI Production-Ready with Kubernetes Patterns
bibryam
0
110
今からFlash開発できるわけないじゃん、ムリムリ! (※ムリじゃなかった!?)
arkw
0
190
AI時代の脳疲弊と向き合う ~言語学としてのPHP~
sakuraikotone
1
1.9k
おれのAgentic Coding 2026/03
tsukasagr
1
140
PDI: Como Alavancar Sua Carreira e Seu Negócio
marcelgsantos
0
120
Xdebug と IDE による デバッグ実行の仕組みを見る / Exploring-How-Debugging-Works-with-Xdebug-and-an-IDE
shin1x1
0
360
アクセシビリティ試験の"その後"を仕組み化する
yuuumiravy
0
120
Symfonyの特性(設計思想)を手軽に活かす特性(trait)
ickx
0
130
実践ハーネスエンジニアリング #MOSHTech
kajitack
7
6.3k
UIの境界線をデザインする | React Tokyo #15 メイントーク
sasagar
1
280
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
The Curse of the Amulet
leimatthew05
1
11k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.6k
The SEO Collaboration Effect
kristinabergwall1
0
420
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
370
Mobile First: as difficult as doing things right
swwweet
225
10k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
160
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
120
GraphQLとの向き合い方2022年版
quramy
50
15k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
130
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
320
KATA
mclloyd
PRO
35
15k
Transcript
CakePHPのバージョンアップ戦略 【オンライン】関西PHP勉強会 2020.05.16 清家史郎 (@seike460) 1
2 アジェンダ 1. 自己紹介 2. バージョンアッププロジェクト状況 3. テストのスコープを決める 4. 非推奨を洗い出す
5. まとめ
01 自己紹介
自己紹介 清家史郎 @seike460 - 清家史郎 (@seike460) - Fusic Co., Ltd.
/ evangelist / Engineer - バックエンド寄りフルスタック ▪ PHP,Go,AWSが得意、Serverlessに興味 - 技術コミュニティに関わるのが好き - カンファレンス登壇多数 - PHPカンファレンス福岡 2020 ▪ 幻の実行委員長 - Serverless Days Fukuoka 2019 ▪ co-chair 4
02 バージョンアッププロジェクト状況
6 バージョンアッププロジェクト状況 状況 1 現職で初めて携わった受託開発プロジェクト(圧倒的エクスキューズ)
7 バージョンアッププロジェクト状況 状況 1 現職で初めて携わった受託開発プロジェクト(圧倒的エクスキューズ) 状況 2
Unitテストは途中から書き始めたので新機能部分しかない(CI環境は整備済)
8 バージョンアッププロジェクト状況 状況 1 現職で初めて携わった受託開発プロジェクト(圧倒的エクスキューズ) 状況 3
PHP, PostgreSQL, CakePHPのバージョンアップ工数は潤沢ではない 状況 2 Unitテストは途中から書き始めたので新機能部分しかない(CI環境は整備済)
バージョンアップへの課題感 - 動作保証は手動テストでカバー可能だが、毎回は辛い - 膨大かつ単純な作業ゆえ、単純なケアレスミスが不安 ➔ 最小工数のテスト記述で最低限動作を保証したい ◆ テストのスコープを絞る
➔ 非推奨を潰すことがメイン作業 ◆ 機械的な作業に落とし込む 9
10 バージョンアッププロジェクト状況 状況 1 現職で初めて携わった受託開発プロジェクト(圧倒的エクスキューズ) 状況 3
PHP, PostgreSQL, CakePHPのバージョンアップ工数は潤沢ではない 作戦 - 最小工数で広い範囲をカバーできるテストを書く - 機械的な作業に落とし込む 状況 2 Unitテストは途中から書き始めたので新機能部分しかない(CI環境は整備済)
03 テストのスコープを決める
12 テストのスコープを決める • UI ◦ 担保出来る範囲は一番広い ◦ メンテナンスコストが高い ◦ 実行時間が長い(PHPUnit+αが必要)
• Service ◦ PHPの一連の動作は担保出来る ◦ メンテナンスコストは中程度⚠ ◦ 実行時間も短め(PHPUnit内で完結) • Unit ◦ 担保出来る範囲は極小(メソッド単位) ▪ 一方で詳細まで確認可能 ◦ メンテナンスコストは非常に低い ◦ 実行時間も短い テストピラミッド 上に行くほど - 再現度は高い - 実行時間が長い - 保守、デバッグの労力増大 一般的にUnit部分を充実させる
13 テストのスコープを決める • UI ◦ Cypress or phpunit-selenium ▪ 実行時間やテストピラミッドの原則
カバレッジ率がわからない • Service ⭕ここの充実を選択 ◦ CakePHPのControllerを網羅 ▪ 広範囲のカバレッジを確保出来る • Unit ◦ CakePHPのModel等を網羅 ▪ カバレッジの確保には工数が必要 Controller網羅後 - UIは手動テストを実行 - カバレッジや優先順位を元にUnitテストも増やす ※変更し辛いタイミングなので諸刃の剣
04 非推奨を洗い出す
15 非推奨を洗い出す PHPStanで検出出来るみたいだけどコードの品質も保ちたい… • scrutinizer ◦ 静的解析を自動的に行ってくれるサービス(privateは有料) • ここに表示される「Duplication」をひたすらに消していく scrutinizer
16 grep | xargs sedで一括置換 • scrutinizerにて修正内容は確定してくるので関数を変更していきます $ grep -rl
'hoge' src | xargs sed -i -e 's/hoge/getHoge/g' • 一括変換の結果はgit diffで確認しながら意図した置換になってるかを確認 ◦ 特に get〇〇、set〇〇系の修正はミスが発生しやすいので注意 間違えていた場合は一つ一つ手作業で丁寧に変更していきます • 全てを手作業だと 気が狂いそう 効率が悪いので一斉置換を行います。 みんな大好きsedコマンドを利用します。
17 まとめ Point 1 開発工数が限られている為、テストピラミッドの原則にとらわれず テストのスコープを決めて、手動テストと組み合わせて品質を確保 Point 2
scrutinizerを利用して、修正箇所及び修正内容を確認。 一括置換を行うことにより機械的な修正 summary 「正論」だけでは戦えない状況も現実と向き合い、 現状に即した施策で少しづつ改善していく事が大事 extras fixtureをDB + Fakerで自動生成したりもしたが時間の関係で割愛 associationを参照しながらFakerでデータ保護したfixture生成Shellを書いた
ご清聴いただき ありがとうございました Thank You http://recruit.fusic.co.jp