1. Qiita
  2. 投稿
  3. PHP

GrumPHPでコードの治安を守りたい

  • 12
    いいね
  • 0
    コメント

アイスタイルアドベントカレンダー13日目の記事です。
前日は@matsudasさんのプログラマーが観るべき映画7選(ただしSF)でした。

前日が@yutanakanoなら次の日何書いてもいいかなって思って油断していたら
突然@matsudasさんにトランスフォームしたので真面目に書こうと思います。

というわけで今年の9月に入社いたしました@hika_riruといいます。
好きなコールは全マシです。よろしくお願いします!

GrumPHPとは

commit前にテスト走行やlintなどのタスクを自動実行してくれるcomposerプラグインです。
皆さんおなじみのPHPUnit、PHPCS、PHPMDだけでなくPHPSpecやBehatにも対応しているため、気軽にコードの治安を維持することができます。

(品質って単語を使うとQA界隈の怖い人たちに怒られそうなのであえてふんわりした言葉を使ってます。)

使い方

1. 依存パッケージに追加

composer require --dev phpro/grumphp

2. grumphp.ymlを書く

私が普段使ってるgrumphp.ymlを置いときます。
書き方は公式のドキュメントが充実しているので割愛します。

3. git hookを追加

下記コマンドを叩くと.git/以下にpre-commitcommit-msgが追加されます。
あとはいつものようにgit commitするだけ!

./vendor/bin/grumphp git:init

4. OKなとき

おじさんのもっさりした笑顔と共にcommitされます。

allgood.PNG

5. NGなとき

怒られてcommitできません。こわい。

キャプチャ.PNG

pros

チームで同じhookを簡単にシェアできる

チームのリポジトリにgrumphp.ymlをチェックインすれば、チーム内で同じタスクを走行してからコミットできるようになるため治安のレベルを揃えやすくなります。

cons

チームでGrumPHPの導入を提案したいのは山々なのですが
下記の壁があって今のところ一人で使うにとどめています。。。

Vagrantとの連携がちょっと面倒

hooks_preset: vagrantgrumphp.ymlに記述すればgit:init時にVagrant用のhookが生成されます。
しかし、生成されるスクリプトは現在のディレクトリにVagrantfileがある前提のものなので、もし作業ディレクトリ外にあるVagrantを利用している場合にはhookを直接書き換えなくてはいけません。
このあたりもう少し個々人の環境に合わせたカスタマイズがしやすくなるといいですね。

--

長期間にわたって多くの人が開発・保守していくコードなので、
チームみんなでコツコツと(でも楽ちんに)治安改善に取り組んでいけたらいいなあと思っています。

明日は@fagaiさんの「Laravelのソースを追えるようになるにはどうしたらよいのか?」です。