SlideShare une entreprise Scribd logo
1  sur  45
Télécharger pour lire hors ligne
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割強  
スロークエリーの撲滅
• インフラチーム  
• インフラチーム内にDBA
SQL道場
• 毎週DBAによるSQL指導  
• 今週発⽣生したスロークエリー数の報告  
• 今週発⽣生したイケてないクエリーについての
指導
ORMの功罪
• PHPerにはSQLが分からぬ  
• かならずDB操作をしなければならぬ  
• 功:PHPerでもDB操作ができる!  
• 罪:どんなクエリが吐かれるか、吐いてみない
と分からない
DBAとの対話
• DBAはクエリーしか⾒見ない  
• プログラムの内容は知らない  
• ゲーム仕様も知らない  
• 開発者の⾔言い訳に同情しない
インフラ担当との対話
• インフラはサーバ負荷しか⾒見ない  
• 負荷理由(exイベント開始)を知らない  
• サーバ増はコスト増  
• 開発者の⾔言い訳に同情しない
道場開設当初
こんなクソクエリー書いたのは誰だ!
インスタンスタイプ上げると  
毎時xx円コストが上がるんだよ!
なんで⽇日またぎのバッチと  
イベントフィーバー被せるんだよ!
オンプレだからサーバ増やせないっ
て⾔言っただろ!
スロークエリー数:閾値10s超で数百件
ボコボコにされるPHPer
現在(開設から2年)
スロークエリー数:閾値0.5sで数件まで削減
PKでしか検索かけてないのにスロークエリーにな
るということはDiskアクセス発⽣生してませんか
キャッシュ周りのパラメータを⾒見直して
みましょう
現在のままのサーバスペックでは、次回イベント
時の負荷に耐えられないかもしれません。
新しいサーバで、負荷テストして⾒見ましょう
改善⽅方法はひとつじゃない
• クエリーを修正する  
• プログラムを修正する  
• サーバをスケールアウト/スケールアップする  
• RDBからKVSに切替える  
• ゲーム仕様を変更する
いろんな⼈人を巻き込む
ステークホルダー/専⾨門家じゃないと  
解決できない事もある
まとめ
• 運⽤用だからカイゼンできる  
• 仕組みを変えると⾏行動が変わる  
• 「推測するな。計測せよ」  
• ⾒見える化⼤大事  
• 開発者以外を巻き込む
新規開発も既存運⽤用も  
エンジニア募集中
ご清聴ありがとうございました。

Contenu connexe

Tendances

テスト実行速度を改善してお金をかけずに開発スピードを爆速にする
テスト実行速度を改善してお金をかけずに開発スピードを爆速にするテスト実行速度を改善してお金をかけずに開発スピードを爆速にする
テスト実行速度を改善してお金をかけずに開発スピードを爆速にする
77web
 

Tendances (20)

NuxtJS + SSRで作ったGREE Tech Conference 2020
NuxtJS + SSRで作ったGREE Tech Conference 2020NuxtJS + SSRで作ったGREE Tech Conference 2020
NuxtJS + SSRで作ったGREE Tech Conference 2020
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
Djangoのススメ
DjangoのススメDjangoのススメ
Djangoのススメ
 
5年しかもたない最高のシステムとの向き合い方
5年しかもたない最高のシステムとの向き合い方5年しかもたない最高のシステムとの向き合い方
5年しかもたない最高のシステムとの向き合い方
 
ネイティブゲーム開発におけるこれからの品質保証
ネイティブゲーム開発におけるこれからの品質保証ネイティブゲーム開発におけるこれからの品質保証
ネイティブゲーム開発におけるこれからの品質保証
 
1年くらいScalaプロジェクトに関わった結果 #ichigayageek
1年くらいScalaプロジェクトに関わった結果 #ichigayageek1年くらいScalaプロジェクトに関わった結果 #ichigayageek
1年くらいScalaプロジェクトに関わった結果 #ichigayageek
 
比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)
 
テスト実行速度を改善してお金をかけずに開発スピードを爆速にする
テスト実行速度を改善してお金をかけずに開発スピードを爆速にするテスト実行速度を改善してお金をかけずに開発スピードを爆速にする
テスト実行速度を改善してお金をかけずに開発スピードを爆速にする
 
インフラ部門で働くCプログラマの話
インフラ部門で働くCプログラマの話インフラ部門で働くCプログラマの話
インフラ部門で働くCプログラマの話
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
 
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
 
オブラブ冬合宿以降にやったことのふりかえり
オブラブ冬合宿以降にやったことのふりかえりオブラブ冬合宿以降にやったことのふりかえり
オブラブ冬合宿以降にやったことのふりかえり
 
決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu
 
実践DevOps!SonicGarden流Herokuガチ運用術!SonicGarden Study #09
実践DevOps!SonicGarden流Herokuガチ運用術!SonicGarden Study #09実践DevOps!SonicGarden流Herokuガチ運用術!SonicGarden Study #09
実践DevOps!SonicGarden流Herokuガチ運用術!SonicGarden Study #09
 
20140131 万葉帰社日発表 チーム積み重ね 公開版
20140131 万葉帰社日発表 チーム積み重ね 公開版20140131 万葉帰社日発表 チーム積み重ね 公開版
20140131 万葉帰社日発表 チーム積み重ね 公開版
 
我が家のフロントエンド開発事情
我が家のフロントエンド開発事情我が家のフロントエンド開発事情
我が家のフロントエンド開発事情
 
リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方
 
子ども向けプログラミング道場を運営してみたお話し〜CoderDojo長岡京と、時々、EC2〜
子ども向けプログラミング道場を運営してみたお話し〜CoderDojo長岡京と、時々、EC2〜子ども向けプログラミング道場を運営してみたお話し〜CoderDojo長岡京と、時々、EC2〜
子ども向けプログラミング道場を運営してみたお話し〜CoderDojo長岡京と、時々、EC2〜
 
5分で詰め込む フロントエンド最適化
5分で詰め込む フロントエンド最適化5分で詰め込む フロントエンド最適化
5分で詰め込む フロントエンド最適化
 
サービスのスケール化のための検索システム改善
サービスのスケール化のための検索システム改善サービスのスケール化のための検索システム改善
サービスのスケール化のための検索システム改善
 

En vedette

Phpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうPhpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろう
Syouta Tada
 

En vedette (20)

PHP拡張をPECLに登録してわかったこと
PHP拡張をPECLに登録してわかったことPHP拡張をPECLに登録してわかったこと
PHP拡張をPECLに登録してわかったこと
 
OPcache の最適化器の今
OPcache の最適化器の今OPcache の最適化器の今
OPcache の最適化器の今
 
PHPとシグナル、その裏側
PHPとシグナル、その裏側PHPとシグナル、その裏側
PHPとシグナル、その裏側
 
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
 
片手間MySQLチューニング戦略
片手間MySQLチューニング戦略片手間MySQLチューニング戦略
片手間MySQLチューニング戦略
 
アプリチームを支えるSlack bot
アプリチームを支えるSlack botアプリチームを支えるSlack bot
アプリチームを支えるSlack bot
 
20151205フルスクラッチcms作成のノウハウ With Laravel
20151205フルスクラッチcms作成のノウハウ With Laravel20151205フルスクラッチcms作成のノウハウ With Laravel
20151205フルスクラッチcms作成のノウハウ With Laravel
 
Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみた
 
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイントカスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
 
デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3
 
わかってるフレームワーク Laravel
わかってるフレームワーク Laravelわかってるフレームワーク Laravel
わかってるフレームワーク Laravel
 
3 tips of Laravel
3 tips of Laravel3 tips of Laravel
3 tips of Laravel
 
Phpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうPhpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろう
 
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付きデザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード  +  現場エンジニアのコメント付き
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
 
Laravel LT
Laravel LTLaravel LT
Laravel LT
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
 
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 PHPでPostgreSQLとPGroongaを使って高速日本語全文検索! PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 
JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebase
 
Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリ
Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリFirebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリ
Firebaseで驚くほど簡単に作れるリアルタイムイベントドリブンアプリ
 
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
 

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

20130302 わんくま勉強会大阪 tfsを使ってみよう
20130302 わんくま勉強会大阪 tfsを使ってみよう20130302 わんくま勉強会大阪 tfsを使ってみよう
20130302 わんくま勉強会大阪 tfsを使ってみよう
Takuya Kawabe
 

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

三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
 
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PostgreSQLではじめるOSS開発@OSC 2014 HiroshimaPostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
 
アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱
 
勉強会:設定管理について
勉強会:設定管理について勉強会:設定管理について
勉強会:設定管理について
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
Chainerで学ぶdeep learning
Chainerで学ぶdeep learningChainerで学ぶdeep learning
Chainerで学ぶdeep learning
 
TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前に
 
Heroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーションHeroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーション
 
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
 
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
 
Ph perがawsと出会ってdev opsを目指した話
Ph perがawsと出会ってdev opsを目指した話Ph perがawsと出会ってdev opsを目指した話
Ph perがawsと出会ってdev opsを目指した話
 
[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1
 
20130302 わんくま勉強会大阪 tfsを使ってみよう
20130302 わんくま勉強会大阪 tfsを使ってみよう20130302 わんくま勉強会大阪 tfsを使ってみよう
20130302 わんくま勉強会大阪 tfsを使ってみよう
 
ペアプロはリモートでもできる!
ペアプロはリモートでもできる!ペアプロはリモートでもできる!
ペアプロはリモートでもできる!
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 

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