[PHP]安定したシステム運用を目指して取り組んだこと

  • 11
    いいね
  • 0
    コメント

はじめに

トラブルが多く、そのせいで定時で帰れない。
そんな経験から我々のチームはPHP7へのverup対応を機に

  • 安定したシステム運用
  • 保守しやすいコード

を目指して少しずつレガシー体制からの脱却を試みています。
私やチームが取り組んでいることをざっくりと共有したいと思います。
結構一般的なものしか書いていないかもですが、
もしどなたかのお役に立てれば幸いです。

スタイルガイドをPSRに変更

スタイルガイドをPSRに変更しました。
以前はpearでしたが、今はPSRがスタンダードなのでPSRを導入しました。

スタイルガイドを守る仕組みを作る

昔からスタイルガイドがあるにはあったのですが、機械的にチェック、修正する仕組みがありませんでした。
そこで、PHP_CodeSnifferを導入しました。
有名なので説明は不要だと思いますが簡単に説明すると、
phpcs : 定義したスタイルガイドに違反していないかチェックする
phpcbf : コードを定義したスタイルガイドになるように整形する
今は、この2つのスクリプトのおかげでコードがだいぶ綺麗です。

型を意識

PHP7になり指定できるタイプヒンティングが増えました。またPHP7から戻り値の型を宣言できるようになりました。
なので必ず明記するようにしました。

function sample(array $list): array
{
    ...
}

これによって変数でも配列でもOKみたいな気持ちが悪いインターフェースが少しなくなりました。

機械的にソースコードの潜在的な問題点をチェック

  • 未使用の変数の検出
  • 変数の長さのチェック
  • 1クラスにおけるステップ数が長すぎないか etc

などをざっと確認してる静的コード解析ツールPHPMD - PHP Mess Detectorを導入しました。
ステップ数が改善され処理の全体像が把握しやすくなったように思います。

デグレを防ぐテストコード

以前は恥ずかしながらテストコードを作成する文化がありませんでした。
なのでPHPUnitでテストするようにしました。
デグレも気が付くこともできるようになりました。
何より前よりもメソッドのin/outのことを意識してコードを書くようになりました。

ブラウザのテストも自動化

Seleniumも導入してみました。
これを導入してよかった点は自動でテストしてくれるという点と、
管理者専用画面からの本番環境へのデータ登録処理もこれを使って自動化することができた点ですね。
時間の節約とミスを減らすことができました。

1リクエストあたりメモリ使用情報をログに出力

ある日メモリ不足でバッチが落ちたという経験はないでしょうか?
我々も年に数回そのようなトラブルを経験していました。
メモリ使用情報を下記のようなフォーマットでログに出力するようにし、70%を超えるとメールを送信し検知しやすくしました。
yyyy/mm/dd hh:mi:ss [モジュール名:アクション名] memory usage メモリ使用率(%) (使用 / memory_limitの設定値)
日々のメモリ使用量の変化も確認できるので、危険水域に達する前に対策をうつことができます。

1リクエストあたりのレスポンスタイムをログに出力

データ量の増加に伴いレスポンスがだんだん遅くなるということはありますよね。
yyyy/mm/dd hh:mi:ss [モジュール名:アクション名] 0.01(sec)
これもメモリと一緒でこんな感じで出力し日々確認しておけば、危険水域に達する前に対策をうつことができます。

log情報を視覚化する

  • メモリ
  • レスポンスタイム

これ以外にもアクセス数など様々な情報をせっかくlogにはくようにしたので
splunkで視覚化させました。

[個人的な取り組み] ブログの記事は必ず検証する

インターネットの記事にはこれっていつ書かれたものなの?
というものがたくさん存在します。その情報を鵜呑みにせず常にPHPマニュアルや各フレームワークのマニュアルを確認するようにしています。

[個人的な取り組み] 情報を常にキャッチアップする

  • RSSやSNSを活用する

私はfeedlyにPHPのマニュアルを登録したりしてPHPのVerup情報等をチェックしています。
またtwitterなどで質の高いPHP情報をつぶやいている人をフォローしています。

気軽に読めるクイックリファレンス。
時代遅れの情報がウェブ上にあふれているが、
このサイトは更新され続けており現時点でのベストプラクティスだと執筆者が考えていることがまとめられている。

おわりに

もしPHPでこのサイトおすすめとか、こういう取り組みしているよとかあればぜひ共有していただければと思います。