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
PHPで品質と生産性向上を目指すやり方 / Improve quality and prod...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Shigeru Chiba
September 19, 2024
Technology
67
0
Share
PHPで品質と生産性向上を目指すやり方 / Improve quality and productivity with PHP
メタップスホールディングス主催
第三木曜LT会#9
にて登壇した内容です
Shigeru Chiba
September 19, 2024
More Decks by Shigeru Chiba
See All by Shigeru Chiba
エンジニア採用ノウハウ0から継続的な採用に至るまで / Try recruiting engineers
ohageeq
0
630
プロダクトの正しい「やめ方」/ How to make decision to stop developing product
ohageeq
1
360
Other Decks in Technology
See All in Technology
分断された OT と IT を繋ぐ架け橋 -Kubernetes が切り拓く 産業用組み込み製品の現在地 -
yudaiono
1
120
Claude Code で使える DuckDB Skills を試してみた / DuckDB Skills and Claude Code
masahirokawahara
1
560
"スキルファースト"で作る、AIの自走環境
subroh0508
0
550
データモデリング通り #5オンライン勉強会: AIに『ビジネスの文脈』を教え込むデータモデリング
datayokocho
0
280
全社統制を維持しながら現場負担をどう減らすか〜プラットフォームチームとセキュリティチームで進めたSecurity Hub活用によるAWS統制の見直し〜/secjaws-security-hub-custom-insights
mhrtech
1
540
「背中を見て育て」からの卒業 〜専門技術としてのテスト設計を軸に、品質保証のバトンを繋ぐ〜 #genda_tech_talk
nihonbuson
PRO
3
1.5k
Gaussian Splattingの実用化 - 映像制作への展開
gpuunite_official
0
200
セキュリティ対策、何からはじめる? CloudNative環境の脅威モデリングと リスク評価実践入門 #cloudnativekaigi
varu3
5
970
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.4k
AI対話分析の夢と、汚いデータの現実 Looker / Dataplex / Dataform で実現する品質ファーストな基盤設計
waiwai2111
0
590
クラウドネイティブ DB はいかにして制約を 克服したか? 〜進化歴史から紐解く、スケーラブルアーキテクチャ設計指針〜
hacomono
PRO
6
1k
ECSのTerraformモジュールにコントリビュートした話
harukasakihara
0
210
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Are puppies a ranking factor?
jonoalderson
1
3.4k
How to build a perfect <img>
jonoalderson
1
5.5k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
290
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
200
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Practical Orchestrator
shlominoach
191
11k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
180
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.4k
Transcript
© HataLuck and Person Inc. © HataLuck and Person Inc.
PHPで品質と生産性向上を 目指すやり方 第3木曜LT会 #9 2024.09.19 千葉 茂 / @ohageeq
© HataLuck and Person Inc. 千葉 茂 / @ohageeq 執行役員 CTO
自己紹介 ▪ 技術: Kotlin, Go, AWS 💕 ▪ 好きなおはぎ: 今西軒(京都) ▪ 経歴: 2012年 サイバーエージェント入社 2022年 現職、業務委託入社 2023年 正社員入社 2024年 執行役員CTO就任
© HataLuck and Person Inc. 会社紹介 株式会社HataLuck and Person MISSION:
「はたらく」を楽しく VALUE: 「働きがい」を科学する シフトワーカーの潜在能力を 解放する 染谷 剛史 設立 代表者 2017年1月 事業内容 リテールテック事業 はたらきがいテック事業 主要株主
© HataLuck and Person Inc. 事業内容 シフトワーカーの労働生産性を高める機能を ALL in ONEで提供
© HataLuck and Person Inc. アジェンダ ▪ 背景: 開発の状況 ▪
品質および生産性向上のための取り組み PHPで品質と生産性向上を目指すやり方
© HataLuck and Person Inc. 背景: 開発の状況
© HataLuck and Person Inc. プロダクト変遷と現在 背景: 開発の状況 2018 2019
2020 2021 2022 2023 2024 マネージドサービス (Firebase) 主体に開発 外注/業務委託中心に PHPベースで開発 現はたLuck 正式リリース シフト機能 開発着手 プロパー不在 新基盤 開発開始 新基盤 開発停止 FS脱却 プロジェクト 新権限の 開発 シフト機能 1stリリース • 基盤をゼロから作った人が20年時点で既にいない状況 • マルチプロダクト戦略、MVP→PMF移行期で当時の意思決定 で技術スタックが増えてしまっている
© HataLuck and Person Inc. 当時の技術スタック 背景: 開発の状況 Infra Server
MobileApp Tools Front ML/ DataPipline
© HataLuck and Person Inc. 改善前の開発状況 1. 大小含めて毎日バグ対応をしている 2. 緊急性が高いバグ以外のデプロイは2週間に1回
3. 古いバージョンの言語が使われているままである 4. プロジェクト間で利用言語が統一されていないことで、 業務ロジック共通化ができない 背景: 開発の状況
© HataLuck and Person Inc. 自身の開発歴 3年 背景: 開発の状況 10年
5.x? 5.x? 1年未満 動的型付け言語は経験がほとんどない 品質をあげることはできるのだろうか...
© HataLuck and Person Inc. 型付けが強い言語にフルリプレイスしよう! 全ての実装コードにテストを書いてから機能開発だ! とはならない
© HataLuck and Person Inc. 開発生産性指標を目安にする Four keysでELITEを目指す! 背景: 開発の状況
https://cloud.google.com/blog/ja/products/gcp/using-the-four-keys-to-measure-your-devops-performance
© HataLuck and Person Inc. なぜFour Keysを指標とするか ▪ 失敗の変更率を下げる -
1ヶ月にかけるバグ対応を極力ゼロにする - %が上がった場合に機能開発を止める判断軸になる ▪ デプロイ頻度を向上する - 2週間に1回ビッグバンデプロイがバグを仕込んでしまう 原因の1つ - 小さく失敗して積み上げられるバグの数を減らす ▪ リードタイムを短くする - 1つのPRの変更量を少ないとバグが気づくことができる - 後方互換があれば即座にmainブランチにマージしデプロイ される 背景: 開発の状況
© HataLuck and Person Inc. 品質および生産性向上のための取り組み
© HataLuck and Person Inc. PHPのバージョンを上げる ▪ 型の表現や厳密さが向上した - type
hintingが使える - Union型により型があいまいな箇所を型宣言できる - null safeが扱えるようになる 丸々1ヶ月リグレッションチェック→外部QA会社に依頼 大きな障害はなくバージョンアップ完了 生産性向上のための取り組み 変更前 変更後 PHP 7.3 PHP 8.2 Laravel 7 Laravel 9
© HataLuck and Person Inc. 失敗の変更率を下げる① Phpmetricsでコード品質を図る 生産性向上のための取り組み ▪ 保守容易性指数
= MI (Maintainability Index Metrics) ▪ 循環複雑度 = CCN (Cyclomatic complexity Number) 基準値より低いコードをCIで検知可能に 上記のような低品質なコードに対して ➔ テストコードの必須化 ➔ 開発者での確認手順の厳格化 ➔ リファクタリング工数を計画に盛り込む 指標を下回る = 変更による 障害が起きやすい!
© HataLuck and Person Inc. MI, CCNの指標 失敗の変更率を下げる① クラス数合計 数千クラス
変更不可能 2% 注力機能 0.7% 変更困難 注力機能 5% 10% メンテナンス不可能、テストが困難 MI <= 20以下 CCN >= 40以上
© HataLuck and Person Inc. 失敗の変更率を下げる② コード規約・静的解析 生産性向上のための取り組み 動的型付けを静的型付けとして扱えるように ▪
PHPStan + LaraStan ▪ php-cs-fixer 型の厳格検査を必須化しエディタやCIで見落とさない ➔ 新規コードは必須 ➔ 既存コードは修正できる範囲で対応する
© HataLuck and Person Inc. デプロイ頻度を向上する、リードタイムを短くする 生産性向上のための取り組み ▪ 些細な変更でも後方互換があるものは毎日デプロイする (休日前、休日を除く)
- 失敗の変更率を下げる取り組みがある前提で活きている ▪ レビュー負荷を下げる - design doc等でモデリングや設計意図がわかるようにする phpunit-snapshot-assertions ▪ リグレッションチェックを行えるようになる ▪ 手を加えたところはテストコードを追加することで後退を 検知する
© HataLuck and Person Inc. 今後取り入れていきたいこと ▪ Feature Flags -
リードタイムや復旧時間を短くできる - 開発者の成果 = 本番デプロイと顧客提供 = 機能リリース を分けることができる ▪ オブザーバビリティ監視 - Datadog等で全てのレイヤーでのリクエストを追えるよう にする - APIの呼び出し元、先の障害点の分析力が上がり将来課題 になる点を見通しが立てられる 生産性向上のための取り組み
© HataLuck and Person Inc. © HataLuck and Person Inc.