LoginSignup
29
32

More than 5 years have passed since last update.

PHPで誰でもすぐに始められる小さなCI

Posted at

タイトルはPHPに絞ってますが、他の言語でも同じようなことは出来ると思います。

前提

  • インターネットに接続できること
  • Gitを使っていること
  • shellがちょっと分かること

CI環境を準備するのは大変

何を目的としているかわからないメソッドに対してテストを書いたり、
CIサーバー(サービス)を導入するために偉い人を説得したり、CIは始めることが一番大変なのではと思います。

手元にあるものだけで手っ取り早くCIしたいですよね?

Gitのpre-commmitを利用しましょう

Gitを利用していればcommitしない人なんていませんね。
commitするたびにツールが走ればいいんです。
gitのpre-commitにチェックツールを走らせるように書いておくだけ、
物凄くお手軽にCI環境が構築できますね!

pre-commitで使えるツール

色々使えるツールがあります。

php -l

これはインターネットに繋がっていなくてもPHPが利用できれば使えますね。
PHPのシンタックスエラーを見つけてくれます。
白い画面になるのを防げる優れものです。

phpmd

良くないコードを見つけて起こってくれるツールです。
使い方やインストールについては以下投稿を見ましょう。

PHPの静的コード解析ツール『PHPMD』を使ってみた。

php-cs-fixer

特定のコーディング規約にコードをフォーマットしてくれるツールです。
細かい設定書こうとすると難易度上がります。

PHP-CS-Fixer

security-checker

composerでインストールしたライブラリに脆弱性が出ていないかチェックしてくれるツールです。
コードの静的解析を行うのではなく、特定の脆弱性の報告されたライブラリを利用していないかどうかをチェックしてくれます。

security-checker

pre-commitのサンプル

以下のサンプルはphp -lphpmdをコミット時に変更したPHPファイルに対して走らせるものです。
問題が一つでも見つかるとコミットさせてもらえません。

pre-commit
#!/bin/sh

if git rev-parse --verify HEAD >/dev/null 2>&1
then
    against=HEAD
else
    against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi

exec 1>&2

EXIT_CODE=0

error_check() {
  if [ $1 -gt 0 ]; then
    EXIT_CODE=$1
  fi
}

cecho () {
    str=$1
    color=$2
    echo "\033[0;${color}m${str}\033[0;39m"
}

cecho '##########################' 32
cecho '# Checking PHP syntax... #' 32
cecho '##########################' 32
echo ''

for CHECK_FILE in `git diff-index --name-status ${against} -- | grep -E '^[AUM].*\.php$' | cut -c3-`; do
  php -l ${CHECK_FILE}
  error_check $?
done

echo ''

cecho '################' 32
cecho '# Run phpmd... #' 32
cecho '################' 32

for CHECK_FILE in `git diff-index --name-status ${against} -- | grep -E '^[AUM].*\.php$' | cut -c3-`; do
  vendor/bin/phpmd ${CHECK_FILE} text codesize,design,naming,unusedcode
  error_check $?
done

if [ ${EXIT_CODE} -gt 0 ]; then
  cecho 'Commit Failed...' 31
else
  cecho 'Pre commit check all green!!' 32
fi

echo ''
exit ${EXIT_CODE}

下記画像はシンタックスエラーがあった場合の画面。

スクリーンショット 2015-03-05 14.27.02.png

まずは小さいことから始めましょう!

小さな改善の積み重ねが大きな改善になるのです。

29
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
32