Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

タイトルは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

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

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away