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
Shigeru Chiba
September 19, 2024
Technology
0
29
PHPで品質と生産性向上を目指すやり方 / Improve quality and productivity with PHP
メタップスホールディングス主催
第三木曜LT会#9
にて登壇した内容です
Shigeru Chiba
September 19, 2024
Tweet
Share
More Decks by Shigeru Chiba
See All by Shigeru Chiba
エンジニア採用ノウハウ0から継続的な採用に至るまで / Try recruiting engineers
ohageeq
0
380
プロダクトの正しい「やめ方」/ How to make decision to stop developing product
ohageeq
1
280
Other Decks in Technology
See All in Technology
N=1から解き明かすAWS ソリューションアーキテクトの魅力
kiiwami
0
130
君も受託系GISエンジニアにならないか
sudataka
2
430
Culture Deck
optfit
0
420
現場で役立つAPIデザイン
nagix
33
12k
抽象化をするということ - 具体と抽象の往復を身につける / Abstraction and concretization
soudai
16
3.9k
2024.02.19 W&B AIエージェントLT会 / AIエージェントが業務を代行するための計画と実行 / Algomatic 宮脇
smiyawaki0820
13
3.3k
リーダブルテストコード 〜メンテナンスしやすい テストコードを作成する方法を考える〜 #DevSumi #DevSumiB / Readable test code
nihonbuson
11
7.2k
スタートアップ1人目QAエンジニアが QAチームを立ち上げ、“個”からチーム、 そして“組織”に成長するまで / How to set up QA team at reiwatravel
mii3king
2
1.5k
全文検索+セマンティックランカー+LLMの自然文検索サ−ビスで得られた知見
segavvy
2
100
偶然 × 行動で人生の可能性を広げよう / Serendipity × Action: Discover Your Possibilities
ar_tama
1
1.1k
レビューを増やしつつ 高評価維持するテクニック
tsuzuki817
1
710
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
620
Featured
See All Featured
Statistics for Hackers
jakevdp
797
220k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Building an army of robots
kneath
303
45k
For a Future-Friendly Web
brad_frost
176
9.5k
Fireside Chat
paigeccino
34
3.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.5k
Optimizing for Happiness
mojombo
376
70k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.6k
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.