「始めよう」というタイトルを冠していながら, まったく始められる感の無いスライドになってしまいました.
元々は PHPUnit を使ったことが無いしユニットテストとかも書いたことが無い, という人に PHPUnit に興味を持ってもらうことを目標として作っていたはずなので, それを考えると駄作もいいところ.
ターゲットを明らかに見失っている.

ですが, ここ最近ずっと感じつつも, なかなか言語化できずにいたことをアウトプットできた, という意味では多いに価値があったと思います.
42 ページ目以降の「蛇足 : オレはこう思う」が主にこのスライドで言いたかったことなんだと思います.

継続的に改善を重ねることで絶対精神にプリズムジャンプ, できるような環境を作って行きたい.

,

PHP 5.4 がめでたくリリースされましたが, 5.2 なサービスやライブラリを保守している人もまだまだいることでしょう.

移行などを考えると, とりあえずは namespace も Closure も使わずクラス名は Foo_Bar_Baz とかアンダースコアで区切る PHP 5.2 なスタイルで書きつつ, PHP 5.3 や 5.4 でも動作するようにライブラリを書く, という選択肢を取ることになりますが, 全部の環境でテストするのは面倒くさい…
というあなたのための Travis CI というサービスについては以前書きました.

Travis CI で PHP 5.4 も CI する, PHPUnit も Behat もやる

そんな Travis CI ですが, PHP 5.2 に mbstring が入っておらず, そのせいで PHP 5.2 だけテストが通らない, なんてことが起こっていました.

mb_strwidth が無くてテストがコケる

ですがそれも今は昔の話, いつの間にか mbstring 入りで PHP 5.2 環境が用意されるようになったようで, 問題無くテストが通るようになっていました.

テスト通った!

コミット識別子を見ると, どちらも同じコードに対してテストが実行されていることがわかります.

この修正は, Travis CI の PHP 対応に尽力なさっている Loïc Frering さんによるものです.
他にも PHP の新しいバージョンが出るたびに定義ファイルを用意してくれたり, 足を向けては寝られない思いです. (ちなみにフランスの方らしいです)

ところで通常 Travis CI によるビルドを実行するには GitHub に対して push する必要がありますが, 今回の場合のようにコードに変更は無いが再度実行したい, という場合は, 以下の方法でできます.

  1. GitHub のリポジトリの Admin から Service Hooks, Travis と辿る
  2. Test Hook ボタンを押す

GitHub 上の Travis CI の Service Hook 管理画面

これで push したときと同様の通知が行われ, Travis CI 上でのビルドを強制的に実行することができます.

そういうわけでまだまだ PHP 5.2 な方もどんどん Travis CI を作っていきましょう.

, ,

先週はビッグデータ時代の非ビッグデータ戦略として, MySQL でサクッと MapReduce する話を書きました.
しかしよく考えると, 非ビッグデータを前提とする以上は, やはり普通に GROUP BY とかで済ませてしまうのがよりカジュアルと言えます.

しかしそれをどう見せるか, ということを気にしだすと, これが何気にめんどくさい.
集計時にメールで報告しつつ, 管理ツールのダッシュボード的な画面でも閲覧可能にしたい, という要求はどこにでもあると思いますが, そのときどきで書いていると, クエリを書く何十倍もの時間がかかってしまったりします.

そこで, 例えば RDBMS の結果セットを与えると, それをサクッと見やすく出力してくれる Tablr というのを書きました.
The MIT License にて GitHub で公開しています.

yuya-takeyama/Tablr – GitHub

今どき PHP5.2 で書かれていますが, その辺は何となく察して下さい.
大した機能は無いですが, 個人的にはこれで日頃の問題をいくつか解決できそうなので, 明日からの仕事に使っていく予定です.

使用例

以下は二次元の配列をもとに, プレーンテキストの表を出力するスクリプトです.

ちょっと長く感じますが, require_once や表のデータの部分を除けば, 表の出力に関しては 5 行ほどしかありません.
ここではデータを直接記述していますが, 実際は RDBMS に対して SELECT クエリを発行したときの結果セット等を与えることを想定しています.

これを実行すると以下のような表が出力されます.

以下では Tablr の機能についてより詳細に紹介します.

フォーマッタ

二次元の配列をもとに, いくつかの形式に出力するためのものです.
これが Tablr を作りにあたっての一番のモチベーションとなっています.

現在利用可能なフォーマッタは以下の 2 つのみとなっています.

  • プレーンテキストフォーマッタ
  • HTML フォーマッタ

アグリゲータ

それぞれのカラムで集計を行い, テーブルのフッタにその行を追加します.
現在利用可能なアグリゲータは以下の 2 つのみとなっています.

  • 合計アグリゲータ
  • 平均アグリゲータ

とりあえず必要最低限の機能を実装した, という感じで, 作り込みはかなり甘い感じです.
使えそうな感じであれば, またさらに改善して行きたいと思います.

,