\積極的に技術発信を行なっております/
▽ Twitter/COLOPL_Tech https://twitter.com/colopl_tech
▽ connpassページ http://colopl.connpass.com
▽ COLOPL Tech Blog http://blog.colopl.dev
長期運用を支えるPlatform Engineering工藤 剛
View Slide
22017 年新卒として入社、運用タイトルのサーバーエンジニアを経てSRE チームを経て PE (Platform Engineering) チームへ主にミドルウェアの更新対応やアプリケーションの保守性向上などに取り組んでいるPHP が結構好き氏名 :部署名 :自己紹介工藤 剛技術基盤本部 第 3 バックエンドエンジニア部サーバー基盤グループ SREチーム PE チーム
3今日話す内容
PlatformEngineeringとは4
わからん5
6ChatGPT に聞いてみた
7長いので要約してもらった> 開発者が効率的に働ける環境を提供するエンジニアリングこれだ!
抱えている課題の整理8
● 速度と質のバランスがとても難しい○ 理想はもちろんテストコードがしっかりと書かれていること○ 猛烈な PDCA サイクルが求められる■ "試してみないとわからない" ことがとにかく多い!● 度重なるスクラップアンドビルド...○ テストを書いてもいつの間にか負債になる悪循環...● 速度を優先したばかりに保守性が低下していく悪循環○ 新機能の開発にかかる工数が膨大化○ 修正が意図しない箇所に影響○ 後に保守する人がつらい思いをすることに9課題1: ゲームアプリケーションであるということ
● サポート対象バージョンに追従する難しさ○ 特に PHP は破壊的変更が多い○ 前述の通り、テストも完全にカバーできているとは言い切れない○ "次の次" に非推奨になるコードが新たに書かれることもある...● "お行儀の悪いコード" への対応がままならない○ "今は動くが、将来的に非推奨になるようなコード" がレビューをすり抜けてしまう■ "${variableName}" 等● 荒ぶる E_DEPRECATED○ 一人ですべてのコードをレビューするわけにもいかない10課題2: ミドルウェア更新への追従
● "暗黙の約束" がどんどん増えていく○ 例: 引数に string 以外を渡しちゃダメだから "(string) 123" でキャストしてね○ 気付きようもないので新規にアサインされた人が罠を踏んでしまう● プロジェクトによって異なるお作法が生まれてしまう○ プロジェクト間のコンテキストスイッチが大変■ array vs Collection■ JSON vs YAML■ Tab vs Space■ CSV vs TSV11課題3: 運用でカバーしてほしくない
昨今の PHP には強力な静的解析ツールが揃っている● PHPStan https://phpstan.org/● Psalm https://psalm.dev/また、静的解析結果を元にコードを自動修正 (リファクタ) するツールもある● Rector https://getrector.org/● PHP-CS-Fixer https://cs.symfony.com/これらの活用を自ら推進・普及していくでも、そもそも静的解析って何?12静的解析
13ChatGPT (GPT-4) くんが説く静的解析の魅力
"社内のサーバーエンジニアの共通認識" をPHPStan のルールにして共有例:● mt_srand / mt_rand 関数の使用を検出○ なぜダメなのか: https://zenn.dev/zeriyoshi/articles/abd808d1c6d31b● 浮動小数点数丸め誤差の起きる数値演算を検出● etc...14PHPStan の活用
警告だけじゃなくて修正も自動でやりたい15
Rector の活用方法がわかってるなら修正まで自動でやっちゃえば良いhttps://github.com/colopl/php-colopl_bc/blob/main/tests/Rector/Equal/EqualToBCMigrateRector/Fixture/basic_replace_operator.php.inc16
新たな問題17
18静的解析が重すぎる
レベル (スペック) を上げて物理で殴る19
● 消費リソース的にローカルで実行しておくのは困難○ GitLab CI を用いて実行することに■ キャッシュが適切に利用できないので強いインスタンスで対応■ インスタンススペックでゴリ押し20CI パイプラインの整備
それでも無理な非互換が...21
colopl_bc Extensionhttps://github.com/colopl/php-colopl_bcどうしても対応できない PHP の非互換に対応するための PHP Extension詳細は COLOPL Tech Blog にて近日中に書きます22
● 保守性向上には静的解析が有用○ 必要であればルールを自作しイレギュラーの発生を抑制● 継続的インテグレーションは大切○ 性善説に基づく "ローカルで実行" は現実的ではない● いざとなったら低レイヤーで対応○ 自分たちの使っている技術スタックを深く理解しておく23まとめ