狠狠撸

狠狠撸Share a Scribd company logo
PHPアプリの品質を(ある程度) ?
保つために出来る事
?~組織編?~
PHP ?カンファレンス ?2017 ?
2017/10/08 ?
株式会社? サイバード ?
三浦? 克浩
?自?己紹介
? 名前:三浦 ?克浩 ?
? Twitter ?ID:@MiuraKatsu ?
? 仕事:恋愛ゲーム ?
? 好きなフレームワーク:
Laravel、Sails.js ?
? 浦和レッズ:
?女性向け恋爱ノベルゲーム
? シリーズ? 通算14タイトル ?
? 海外展開? 5カ国? 6タイトル ?
? シリーズ以外? 4タイトル ?
? 展開プラットフォーム? 14プラットフォーム
?女性向け恋爱ノベルゲーム
前提
? 新規開発じゃなくて、既存運?用の話 ?
? ソシャゲ運?用=毎?月なんかしらイベントがある ?
? サーバサイド(PHP)の話中?心 ?
? コードをどう変えるか?じゃなくて変えるため
に何をしたのか?
? タイトル毎に運?用チー
ム ?
? それぞれチームリーダ
とメンバー ?
? 1チーム3?~6?人 ?
? 海外は別チームの場合
も
全体で50?~80?人のエンジニア
神クラス
ハイクラス
新卒 ?
PHP3ヶ?月?目
PHPerにも神はいる
品質をよくするには?
? 神がコードを書けば品質が良くなる
? 神がコードレビューをすれば品質が良くなる
? 神だけがコードを書けば品質が良くなる
? 神がコードを書いた部分だけ品質が良くなる
? 神がすべてのコードレビューをすれば品質が
良くなる
「神頼み」
そ
れ
で
も
神
な
ら
し
て
く
れ
る
神
な
ら
な
ん
と
か
突然の退職
新規?大型タイトル開発に引
き抜かれる
「神は死んだ!」
「神頼み」からの脱却
仕組み化
何をしたか?
? 横断チームの新設 ?
? 開発運?用サイクルの改善 ?
? 品質評価軸の可視化 ?
? 専?門チームの組成
? 特定タイトルにつかない
横断チーム
横断チームの役割
? 共通系システムの維持メンテ ?
? 各チーム間の交流のHub ?
? ?日々のカイゼンだけではできないことをする
何をしたか?
? 横断チームの新設 ?
? 開発運?用サイクルの改善 ?
? 品質評価軸の可視化 ?
? 専?門チームの組成
Development ?
-‐?? VCS(Git)によるソース管理 ?
Deploy ?
-‐?? ??自動デプロイ
Service ?Monitoring ?
-‐?? ステータス監視 ?
開発運?用サイクルの改善
横断チームが仕組み導?入
Development ?
-‐?? VCS(Git)によるソース管理 ?
-‐?? Pull ?Request ?運?用 ?
Code ?Check ?
 ?-‐?? ?コードレビュー ?
 ?-‐?? ?コーディング規約 ?
Deploy ?
-‐?? ??自動デプロイ
Service ?Monitoring ?
-‐?? ステータス監視 ?
-‐?? パフォーマンス監視 ?
開発運?用サイクルの改善
Development ?
-‐?? VCS(Git)によるソース管理 ?
-‐?? Pull ?Request ?運?用 ?
Code ?Check ?
 ?-‐?? ?コードレビュー ?
 ?-‐?? ?コーディング規約 ?
Test ?
-‐?? Syntax ?チェック ?
-‐?? ユニットテスト ?
-‐?? 継続的インテグレーション
Deploy ?
-‐?? ??自動デプロイ
Service ?Monitoring ?
-‐?? ステータス監視 ?
-‐?? パフォーマンス監視 ?
開発運?用サイクルの改善
ユニットテストよりCIが先
Development ?
-‐?? VCS(Git)によるソース管理 ?
-‐?? Pull ?Request ?運?用 ?
Code ?Check ?
 ?-‐?? ?コードレビュー ?
 ?-‐?? ?コーディング規約 ?
 ?-‐?? ?静的解析
Test ?
-‐?? Syntax ?チェック ?
-‐?? ユニットテスト ?
-‐?? 継続的インテグレーション
Deploy ?
-‐?? ??自動デプロイ
Service ?Monitoring ?
-‐?? ステータス監視 ?
-‐?? パフォーマンス監視 ?
-‐?? プロファイリング
開発運?用サイクルの改善
?運?用チームで取り組みづらい事を横断チームが
仕組み化??自動化 ?
??自動化できたところに乗っかってもらう ?
? →導?入コストを下げる ?
?横断チームが作ることで標準化される ?
?あるんだから使ってよね、というプレッシャー ?
開発運?用サイクルの改善
GitHubでソース管理する ?
→PullReq運?用ができる ?
→→PullReqがくるからコードレビューする ?
?自動デプロイする ?
→デプロイの前にCIが回せる ?
→→CIが回るからユニットテスト書く
開発運?用サイクルの改善
? 仕組みを?入れることで?行動が変わる
巻き込み?方
ユニットテスト ?
回したいんです
?工数が余計
にかかるからダ
メ
巻き込み?方
振り返り/KPT
バックログ/タスク化
バグチケットヒヤリ?ハット
何が防げるかを理解してもらう
巻き込み?方
障害発?生! 再発防?止策
障害報告書 ここに盛り込む
ピンチをチャンスに!
何をしたか?
? 横断チームの新設 ?
? 開発運?用サイクルの改善 ?
? 品質評価軸の可視化 ?
? 専?門チームの組成
品質を定義する
? サービス的な品質:レスポンスが早い。サーバ
負荷が軽い。 ?
? コード的な品質:静的解析のスコアが?高い。テ
ストカバレッジが?高い。
数値化できるものを計測する
品質評価軸の可視化
? 評価軸をチーム(タイトル)毎に可視化して公開 ?
? 静的解析スコア/テストカバレッジ/スロークエリー
発?生数/レスポンスタイム/etc ?
? ?自チームの数字が?見えるようになる: ?
? →?自分事になる ?
? 他チームの数字が?見えるようになる: ?
? →勝?手に競い合う
サービス的な評価軸計測
? Zabbix? :統合監視ツール。計測値の可視化 ?
? NewRelic:SaaS型パフォーマンス監視(有料) ?
? Monyog:MySQLモニタリングツール(有料)
パフォーマンス監視&プロファイリング
コード的な評価軸計測
? Scrutinizer:静的解析SaaS(有料) ?
? SonarQube:静的解析ツール ?
? Coveralls:カバレッジレポート(有料)
単純に?高ければ?高評価でもない ?
古いタイトルには負の遺産も多い ?
変化を?見ている
可視化
? Zabbix/NewRelic:時系列でグラフ表?示 ?
? Chatwork:Alert/CI結果を通知 ?
? Wiki:バッチリスト。こんなやつ→
何をしたか?
? 横断チームの新設 ?
? 開発運?用サイクルの改善 ?
? 品質評価軸の可視化 ?
? 専?門チームの組成
優先度
? レスポンスが早くなると、売上は上がる ?
? スコアが上がっても、売上は上がらない
まずはサービス品質の改善から
サービス的な改善
とにかくボトルネックを潰す ?
DBボトルネックが6割強 ?
スロークエリーの撲滅
? インフラチーム ?
? インフラチーム内に顿叠础
SQL道場
? 毎週DBAによるSQL指導 ?
? 今週発?生したスロークエリー数の報告 ?
? 今週発?生したイケてないクエリーについての
指導
ORMの功罪
? PHPerにはSQLが分からぬ ?
? かならずDB操作をしなければならぬ ?
? 功:PHPerでもDB操作ができる! ?
? 罪:どんなクエリが吐かれるか、吐いてみない
と分からない
DBAとの対話
? DBAはクエリーしか?見ない ?
? プログラムの内容は知らない ?
? ゲーム仕様も知らない ?
? 開発者の?言い訳に同情しない
インフラ担当との対話
? インフラはサーバ負荷しか?見ない ?
? 負荷理由(exイベント開始)を知らない ?
? サーバ増はコスト増 ?
? 開発者の?言い訳に同情しない
道場開設当初
こんなクソクエリー書いたのは誰だ!
インスタンスタイプ上げると ?
毎時xx円コストが上がるんだよ!
なんで?日またぎのバッチと ?
イベントフィーバー被せるんだよ!
オンプレだからサーバ増やせないっ
て?言っただろ!
スロークエリー数:閾値10s超で数百件
ボコボコにされるPHPer
現在(開設から2年)
スロークエリー数:閾値0.5sで数件まで削減
PKでしか検索かけてないのにスロークエリーにな
るということはDiskアクセス発?生してませんか
キャッシュ周りのパラメータを?見直して
みましょう
現在のままのサーバスペックでは、次回イベント
時の負荷に耐えられないかもしれません。
新しいサーバで、負荷テストして?見ましょう
改善?方法はひとつじゃない
? クエリーを修正する ?
? プログラムを修正する ?
? サーバをスケールアウト/スケールアップする ?
? RDBからKVSに切替える ?
? ゲーム仕様を変更する
いろんな?人を巻き込む
ステークホルダー/専?門家じゃないと ?
解決できない事もある
まとめ
? 運?用だからカイゼンできる ?
? 仕組みを変えると?行動が変わる ?
? 「推測するな。計測せよ」 ?
? ?見える化?大事 ?
? 開発者以外を巻き込む
新規開発も既存運?用も ?
エンジニア募集中
ご清聴ありがとうございました。

More Related Content

PHPアプリの品質を(ある程度)保つために出来る事 ?組織編?