WHAT'S NEW?
Loading...

Yii 1.1 | composerとphpcs

composer(コンポーザ)というのは指揮者のことだ。何故かIT業界では、すでに存在する意味を持つ単語を節操もなくそのまま使うケースが多い。はっきりいって検索でどっちがヒットするのか不明な場合が多いし、迷惑だと思う。

だからcomposerって名前とか、日常でも使う単語をそのまま使ってるプロダクトはあんまり好きじゃない。

とは言え、好きじゃないのはネーミングだけで、機能は好きな場合が多い。

composerはphp専用のパッケージ管理ツールだ。もともとSymphonyという大げさで仰々しいPHPフレームワークについていたおまけ要素だったらしいが、便利なので独立したらしい。

映画で言うスピンアウト的なプロダクトだね。うん。そして案外簡単に設定できる。

指揮者を使う

さて、Yiiのインストールされたディレクトリを見てみると、composer.jsonというファイルがある。そしてvendorというディレクトリがある。

composerをインストールした後、必要になるファイルと自動生成されるディレクトリが最初から用意されているということだ。

と、文章で説明してもしょうがないので、まずはサーバにcomposerを入れていただきたい。入れ方は簡単で、cUrlで拾ってくればいい。はやりのインストール方法だ。

ちなみにcUrlは『しーゆーあーるえる』と発音している。なぜカールと言わないかというと、Curlという言語があるからだ。

あとは明治のカールが食べたくなるし、KITTのライバルの名前がカール(KARR)だった気がするのも、エアウルフよりナイトライダー派だった俺の小さなレーゾンデートルなのかもしれない。



閑話休題。

インストールコマンドは以下になる。無心で入れておこう。
$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer

いちいち『composer.phar』とタイプしたくないし、どのディレクトリからでも使いたいので、このようにsudoでパスの通った場所にリネームしがてら移動させておくと便利だ。

指揮者に指示を出す

composerはプロジェクト単位で必要なライブラリを入れておくようなものなので、composerを使って入れるパッケージをいちいちパスの通った場所、/usr/local/binなんかに入れなくてもよい。たいていのプロジェクトは経験則的に、気づかぬ内にバージョン依存してるものだし。

というわけで、早速行ってみよう。

まずはYiiをインストールした場所にあるcomposer.jsonを見てみると、なにやら色々と書かれているが、全部無視していい。


一番下が以下になるように階層を追記しておこう。
"require": {
        "php": ">=5.1.0",
        "phpunit/phpunit": "3.7.*@dev",
        "phpunit/phpunit-mock-objects": "2.3.*@dev",
        "phpunit/phpunit-story": "dev-master",
        "phpunit/phpunit-skeleton-generator": "2.0.*@dev",
        "phpunit/dbunit": "1.3.*@dev",
        "phpunit/php-code-coverage": "3.0.*@dev",
        "phpunit/php-timer": "dev-master",
        "phpunit/php-invoker": "dev-master",
        "mockery/mockery": "dev-master@dev",
        "hamcrest/hamcrest-php": "dev-master",
        "squizlabs/php_codesniffer": "1.5.3",
        "ardem/yii-coding-standard": "dev-master"
    }
※2014.07.24 hamcrestとmockeryを追加
さて、これはなにをやっているのか、というのを説明するよ。

composerはphp専用のパッケージ管理ツールなので、phpにまつわるパッケージ化されたライブラリをここでバージョンとともに指定し、composerに対してインストールせよ、と命令すると、このパッケージと同じ状態をまるごと構築してくれる。

ただ、一度入れてしまったものをもう一度入れようとすると怒られるので、そういう場合はアップデートさせる。

たいていphpはすでに入っているだろうから、アップデートさせてみよう。上記の設定をcomposer.jsonに追記した後で、以下のコマンドで各種パッケージをインストールしよう。
$ composer update
phpunitなどで結構時間がかかるかもしれない。ヘタすると20分位。気長にまとう。
たまにタイムアウトしてしまうこともあるけど、そういう時はバージョンを変えて再度チャレンジすると、意外にすんなり入ったりするので覚えておくと良いだろう。

これでvendorディレクトリの中に各種パッケージが揃ったはずだ。

コードスニッファ

はて、コードスニッファとはなんだろうか。
これはつまり、指定されたフォーマットでソースコードが書かれているのかどうかをチェックしてくれるツールということになる。

例えばPEAR形式でコーディングすると決めたのであれば、ソースコードはPEAR形式に沿って書かれているのかチェックする必要があるという話し。

そしてそのコードスニッファのコマンド名は、phpcsだ。このphpcsを入れると予めいろいろなフォーマットが含まれているんだけど、Yiiのフォーマットは入ってない。

先ほどのcomposer.jsonの一番最後に書いてあるとおり、そのためにYiiのコードフォーマットを別途インストールしているので、これをphpcsのフォーマットのある場所に移動ないしはコピー、またはシンボリックリンクを張っておこうじゃないか。

移動
$ mv vendor/ardem/yii-coding-standard/Yii vendor/squizlabs/php_codesniffer/CodeSniffer/Standards
コピー
$ cp vendor/ardem/yii-coding-standard/Yii vendor/squizlabs/php_codesniffer/CodeSniffer/Standards
シンボリックリンク
$ ln -s vendor/ardem/yii-coding-standard/Yii vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/Yii

シンボリックリンクしておくのが良いかな。俺はコピーしたけど、まぁ好きにするのが良いよ。寝覚め良い方法で頼む。


さて、早速phpcsを試してみようじゃないか。phpcsのあとにファイル名を与えるだけでOKだ。

$ vendor/bin/phpcs testdrive/protexted/config/main.php
大量のエラーがでたかもしれない。


理由は簡単で、phpcsはフォーマットを指定しなかった場合、PEAR形式になるからだ。PEAR形式とYii形式はかなり違いがある。

せっかくYiiのフォーマットをインストールしたのだから、Yiiのフォーマットでチェックしようじゃないか。オプションを付けて再度実行してみよう。
vendor/bin/phpcs --standard=Yii testdrive/protected/config/main.php

どうだろうか、なにも表示されなかったのではないだろうか。なにも表示されなかったということは、Yiiフォーマットとして正しいということだ。
試しにmain.phpを少しいじってみよう。タブをスペース4文字にしてみるなど。
その後同じくYiiでチェックしてみると、こうなる。


このように、9行目にスペースでインデントされた行があるけど、Yiiではタブ文字でインデントするんだぜ!!と教えてくれる。細かいやつだ。

詳しくオプションを調べてみたかったら適当にググると良いよ。その際はphpcs、CodeSnifferなどをキーワードにするのが良いかも。

というわけで、これからこのphpcsをつかってYii書式のチェックをしつつ、仕様にはそれほど関係ないことでも業務で関係あるなら覚えておこう、的な意識で進めていこうと思う。

次回はラクダと蛇の話しでもしようと思う。