OUIを検索するFuelPHP用のパッケージを作ったよってことで、、、誰得なんでしょうか?
何が出来るかというと、IEEE-SA - Registration Authority OUI Public Listingで 公開されているOUI(Organizationally Unique Identifier)のリストを使いOUIから組織名の取得、あるいは、その逆を行います。
ソース→sharkpp/fuel-ouisearch - GitHub Travis CI→fuel-ouisearch
まあ、誰得かは置いておいて、今回は、
- 単体テストを実装
- プラグインでタスクを実装
- プラグインでマイグレーションを実装
- Travis CI使ってみたよ
の、4本です。
パッケージは誰得だとしても、その過程は有用だ!と信じたい、、、、
単体テストを実装
今回のパッケージはサンプル作るのもあれなのでテストで代用って側面もありテスト書きながら実装していきました。
テストカバレッジレポートとか見ながら作るとなんだか楽しいです。
参考ページ
XDebugがないとテストカバレッジレポートが作成できない
あ、テストカバレッジレポートを出力するにはXDebugが必要っぽいです。 インストールされていなかったので "The Xdebug extension is not loaded. No code coverage will be generated." って怒られちゃいました。
テストカバレッジレポートをHTMLで出力する場合はファイルパスの指定ではなくディレクトリの指定になります。
php oil t --coverage-html=coverage
見たいな感じ。 HTML出力のみディレクトリ指定なので間違えないようにしませう。
プラグインでタスクを実装
これは、そんなに大変ではなかった、というか、以前に同じようなことをしていて簡単だった。
しいて言えば、最初はORMパッケージを使う実装にしていて色々やっていたけど、 よく考えると他のパッケージに依存するほどでもないのでそのあたりをばっさり削除して作り直しています。
より詳しく書くと、ORMで設定からテーブル名を指定しようとしていたけど、設定をテーブル名に反映するタイミングが 最初は見つからず右往左往していたけど、結局はClasses - General - FuelPHP Documentationに書いてあった。
@sharkpp 必要としているタイミングはクラスのロード時ですか?であるなら、_init()が呼ばれます。fuelphp.com/docs/general/c…
— Shintaro Ikezakiさん (@hackoh) 2013年3月9日
プラグインでマイグレーションを実装
これが以外と難儀だった。 ソースを追うと、パッケージやモジュールに対してもマイグレーション処理が 動作するっぽかったので意気揚々と実装していったのだけれども、、、
設定をしないと動作しない
パッケージを app/config/config.php の always_load.packages に登録する必要はもちろんあるのだけれど、それだけではだめでした。 package_paths に PKGPATH を追加しないとやっぱり動作しない。 これはなんかバグくさい気がする。
コマンド打っても反応しない
php oil r migrate
と単純にコマンドを打っても反応しない! で、ソースを追っていったら、何もしないとパッケージなどはマイグレーションの対象外になる模様。 なので、
php oil r migrate --all
などとやるのが正解。
Travis CI 使ってみたよ
簡単、CIサービス Travis CI を使ってみました。
参考ページ
- madroom project: FuelPHPのユニットテストをTravis CIで実行してみる
- madroom project: FuelPHPのマイグレーションをTravis CIで実行する
- laravel-oneauth/.travis.yml at master - codenitive/laravel-oneauth - GitHub
- fuelphp/.travis.yml at develop - fuelphp/fuelphp - GitHub
ドキュメントに嘘付かれた(´・ω・`)
Build Lifecycleは間違っているっぽいです。 before_install の後で clone したディレクトリに移動するって書いてありますが、cloneした直後に移動していました。 途中で仕様が変わったんでしょうか?
なんだかんだで出来た
@sharkpp パッケージテスト用のFuelPHPプロジェクトをGitHubに用意。パッケージはサブモジュールで管理。とかは比較的簡単かもしれませんね。そのパッケージプロジェクトへのpushではtravis ciが走らない。1プロジェクトで複数パッケージを管理。になりますけど。
— mamorさん (@madmamor) 2013年3月10日
という、アイデアを頂きつつ、やっぱり単体でテストできるのがかっこいいので頑張りました。
最終的に完成した .travis.yml は、fuel-ouisearch/.travis.yml at master - sharkpp/fuel-ouisearch - GitHub です。 中身はたいしたことをやっていなくて
- git clone で FuelPHP を取得
- packages にリンクを張る
- 設定を上書き
- MySQLにデーターベースを作成(user:root pass:なし)
- テスト実行
ってことをつらつらと書いているだけです。
とりあえず、Travis CI のテンプレが出来たのはいい感じです。