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
74
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
680
プロダクトの正しい「やめ方」/ How to make decision to stop developing product
ohageeq
1
390
Other Decks in Technology
See All in Technology
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
アクセスキーが漏れた日にやるべきこと- 無効化の先にある本当の対応
kazzpapa3
0
360
dbt と Snowflake と tag
kevinrobot34
2
290
Claude Teamプランの コスト最適化を考える
rfdnxbro
0
800
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
20k
AI駆動開発を組織で促すために
lycorptech_jp
PRO
7
8.7k
OpenID for Verifiable Credentials 実装から見えた相互運用性確保までの道のり(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
360
OAuth SPIFFE Client Authentication(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
340
わたしが知り合いゼロの勉強会に 行けるようになるまで
r5ni4
2
830
Oracle AI Databaseデータベース・サービス: BaseDB/ExaDB-Dの可用性
oracle4engineer
PRO
1
960
みてねにおけるAI-DLC導入活動とAIドリブン開発の現在地/JAWS-UG AI-DLC #2
isaoshimizu
2
270
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
460
Featured
See All Featured
Chasing Engaging Ingredients in Design
codingconduct
0
290
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
310
First, design no harm
axbom
PRO
2
1.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
670
Everyday Curiosity
cassininazir
0
300
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
360
Producing Creativity
orderedlist
PRO
348
40k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
How to Talk to Developers About Accessibility
jct
2
530
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.