pre-commitで`php -l`をする

commit前にlintを動かしたいと思ったので、その設定方法を調べた。php -lphp --syntax-checkは同じ。

git管理ディレクトリである.gitの中にあるhooksディレクトリにサンプルがあるので、それを参考にして以下のようなファイルを作成した。

#!/bin/sh

# 変更/追加したファイルの一覧を取得する
files=$(git diff --cached --name-only --diff-filter=AM)
# 取得したファイル一覧をリストとしてphpのlintを実行する
php_extension=php
end_flag=0
for file in $files; do
  extension=${file##*.} # 拡張子(.を除く)を取り出すために前方最長一致で変数展開する
  if [ ${extension} = ${php_extension} ]; then # 拡張子がphpの時のみ構文チェックを行う
    php --syntax-check $file
    command_result=${?} # $?は別のコマンドを実行すると置き換わるので変数に格納して繰り返し参照できるようにする
    if [ ${command_result} != 0 ]; then
      if [ ${end_flag} = 0 ]; then
        end_flag=${command_result}
      fi
    fi
  fi
done
if [ ${end_flag} = 0 ]; then
  echo 'syntax ok'
  exit 0
else
  echo 'syntax error. commit abort'
  exit 1
fi

これを.git/hooks/pre-commitとして保存すれば、commit前にこのスクリプトが実行される。

注意として、このスクリプト自体をgitで管理することはできない。そのため、他の開発者にも使用してもらいたい場合は別のディレクトリで管理しておいてそちらを参照する設定にするか、開発環境をセットアップする際にhooksへコピーするようなスクリプトを別途用意しておかなければならない。

それとエラーが起きたファイルを修正したらgit addを忘れないように。stagingされていないので、他のファイルだけcommitされてしまう。

C97お品書き

C97の参加日と頒布物の案内です。

12/31 火曜日

4日目 西 P-46a

  • 書名:ITエンジニアVTuberの用語解説 プログラミング編
  • 頒布価格:500円

ITエンジニアとしての要素を持つVTuberの動画/配信をピックアップし、それに登場したIT用語を解説する本です。 当日はよろしくお願いします。

C96お疲れ様でした

こっちでは全然宣伝してなかったので事後報告です。

C96で「アッサムが学ぶCommon Lisp」と銘打った本を頒布しました。 1部300円でした。

既刊も2種類持って行きました。どちらも100円でした。

いや、正直更新頻度あげたい欲求はありますが、ここに書くネタよりQiitaに書くネタの方が見つかってしまうのですよね。 Qiitaにも書いてませんけど。

Common Lispをちょっとやってみたりしているのですが、上達途中の思考を残すためにここを更新するのは結構ありかもと思っています。

C94お疲れ様でした

いや本当に疲れました……。一般でも参加しましたが、始発で行くのは体が許してくれませんね。辛い。

弊サークルの本を手に取ってくださった方、ありがとうございます。

今後はこのブログもまともに稼働させようと思っておりますので、こちらもご贔屓にしていただければ幸いです。

C94頒布情報

無事印刷も終わったので新刊でます。

C942日目、土曜日 東E-08a 十文字情報技術研究所での頒布です。 頒布内容は以下の通りになります。

  • アッサムが教えるpuppeteer 300円

また、友人のサークルと合体での参加となります。

取り急ぎご報告まで。