[vim]vim-quickrunでPHPUnitを動かす

Written by uechoco 8月 31
[vim]vim-quickrunでPHPUnitを動かす はコメントを受け付けていません。
この記事を読む時間:5くらい

相変わらずvimネタが続きます。最近TDDの勉強を始めています。phpで勉強をしようと思っているのでPHPUnitでやろうと思います。テスト駆動サイクルを素早く回すために、vim-quickrunの導入を検討してみました。

PHPUnit環境を整える

@HIROCASTさんのPHPUnitの環境をつくろう for PHPer #tddbc in Tokyo | Act as Professional – プロとしての行為が参考になります。
シェルのコマンドラインで

  1. phpunit -v

が通れば準備完了です。私の場合は上記記事+αで動きました。go-pearでPEARをインストールしたのですが、OS内にPEARのパスが2箇所出来てしまったので、php.iniの末尾でinclude_pathを調整したら動きました。

  1. ;***** Added by go-pear
  2. include_path=".:/usr/lib/php/pear:/usr/lib/pear/share/pear"                                                                                                                                
  3. ;*****

vim-quickrunをインストールする

私のvimプラグインはvim-pathogenで管理しているので、以下のようなコマンドでインストール出来ました。

[shcode]
cd ~/.vim/bundle/
git clone https://github.com/thinca/vim-quickrun.git
[/shcode]

他にも、直接インストールする方法やvundleを使う方法などがあると思います。

PHPUnit用のvim-quickrun設定を.vimrcに記述

vim-quickrunでPHPUnitを使う設定がVimでPHPUnitをQuickRunする – アインシュタインの電話番号☎に載っています。
基本的にはこの通りに.vimrcを記述すれば動くようです。

しかし、私が試しに、HogeTest.phpというファイルをvimで開いてr(私の環境だと[バックスラッシュ+r])で実行してみたところ、PHPUnitファイルとして認識されず、phpファイルとして実行されてしまいました。上記URLにはファイル名の大文字小文字に関係なく末尾が*test.phpで終わるものをPHPUnitファイルとして認識すると書いてありましたが、私の環境では区別されているようでした。(理由はよくわかりませんww

そこで、以下のように大文字の*Test.phpもPHPUnitファイルとして認識するように.vimrcを修正しました。

  1. "----------------------------------------------------------
  2. " vim-quickrun
  3. " @see http://d.hatena.ne.jp/ruedap/20110225/vim_php_phpunit_quickrun
  4. "----------------------------------------------------------                                                                                                                                      
  5. augroup QuickRunPHPUnit
  6.   autocmd!
  7.   autocmd BufWinEnter,BufNewFile *test.php set filetype=php.unit
  8.   autocmd BufWinEnter,BufNewFile *Test.php set filetype=php.unit
  9. augroup END
  10. " 初期化
  11. let g:quickrun_config = {}
  12. " PHPUnit
  13. let g:quickrun_config['php.unit'] = {'command': 'phpunit'}

すると、先程のHogeTest.phpもPHPUnitファイルとして認識されて、quickrun実行出来るようになりました!

[vim]vim-refを入れたがLionのw3mでalcが動かないのでlynxにした

Written by uechoco 8月 30
この記事を読む時間:344くらい

Vim修行中です。php manualやalcをvim上で引けちゃうというvim-ref入れてみました。経緯を読むのがめんどくさい人は最後のまとめを見てください。

:Ref phpmanualはサクっと成功

まずはphp manualを試しました。php manualのMany html filesをDLしてローカルに展開して、g:ref_phpmanual_pathの設定でパスを通しました。w3mが必要だとかどっかに書いてあったので、brewで入れました。

[shcode]brew install w3m[/shcode]

vim上で:Ref phpmanual echoとか打てばウィンドウがスプリットしてマニュアルが出てきました。

:Ref alcはw3mがセグフォる

次にalcを試しました。こちらはphp manualとは違い、WebページにアクセスしてHTMLの内容をテキストブラウザで表示するタイプのものです。vim上で:Ref alc helloと打ってみたところ、「The body is empty」というエラーがでました。この状況をググッてもあんまり有力な情報がなかったので、vim-refのalcが呼び出しているw3mコマンド「w3m -dump http://eow.alc.co.jp/hellp/UTF-8/」をシェルで直接叩きました。すると「Segmentation Fault 11」と表示されます。セグフォ路線でググるとOS X Lion上のw3m 0.5.2でセグフォる現象の人が居ました(#30710 (w3m crashes under Lion) – MacPorts )。ちなみに、brew edit w3mでconfigureオプションが変えられるので、–enable-japanese=Uとかいくつか設定をいじってインストールし直したのですが、やっぱり駄目でした。

w3mの代わりにlynxを使う

もうちょっと調べるとvim-refはlynxなどの他のテキストブラウザも対応しているみたいでしたので、lynxをbrewでインストールしました。

[shcode]brew install lynx[/shcode]

w3mはインストールしっぱなしだったので、.vimrcの方で

  1. let g:ref_alc_cmd='lynx -dump -nonumbers %s'

というように、vim-refのalcの場合だけ明示的にコマンドを指定してlynxを使うようにしました。lynxの方はWebページの取得と表示は出来ているのですが、文字コードの関係で2バイト文字を認識出来ていないようでした。

lynxで日本語を表示する

その後、Twitter上で @_nishigori さんに相談しつつ、vim方面とlynx方面でいろいろ調べていたら、lynxに設定ファイルがあることを知りました。brewでインストールした場合は、/usr/local/Cellar/lynx/2.8.7/etc/lynx.cfgみたいなパスにあります。この中を覗いてみると、CHARACTER_SETという設定値がにっくきiso-8859-1になっているではないですか。こいつを

  1. CHARACTER_SET:utf-8

と設定してあげて:Ref alc helloをリトライしたら、無事に日本語が表示できました。

[vim]先週と今週に覚えたコマンド

Written by uechoco 8月 25
[vim]先週と今週に覚えたコマンド はコメントを受け付けていません。
この記事を読む時間:51くらい

最近vim勉強中なので、逐次報告していきます。

  • V … 行選択visualモード
  • Ctrl+v … 矩形選択visualモード
  • :sh … シェル起動
  • w … 次の単語まで移動
  • b … 前の単語まで移動
  • :sp … 画面の水平分割(horizontal SPlit?)
  • :vsp … 画面の垂直分割(Vertical SPlit?)
  • q: … コマンド履歴を見る
  • diw … ポインタ箇所の単語を削除(Delete, Inner, Word?)
  • ~ … ポインタ箇所の大文字小文字を反転
  • D … ポインタ箇所から行末までを削除
  • :![command] … シェルコマンドの実行

[Django]forms.DateFieldのinputs_formatではまった

Written by uechoco 8月 22
[Django]forms.DateFieldのinputs_formatではまった はコメントを受け付けていません。
この記事を読む時間:44くらい

Django 1.3で確認:

なんどやっても日付入力フォームのフォーマットが合わない。Formクラスの内容は以下のとおり。

[pycode]birthday = forms.DateField(input_formats=’%Y/%m/%d’)[/pycode]

いろいろとググってたら正解が見つかった

[pycode]birthday = forms.DateField(input_formats=(‘%Y/%m/%d’,))[/pycode]

どうやら”input_formats”と複数形のとおり、複数個指定できるようにタプルで渡してやる必要があったらしい。

[php]TDDBC Tokyo 1.7 for phpに参加してきた

Written by uechoco 8月 22
[php]TDDBC Tokyo 1.7 for phpに参加してきた はコメントを受け付けていません。
この記事を読む時間:248くらい

TDDBC Tokyo 1.7 for phpに参加してきました。会場は株式会社タイレルシステムズさんです。会場提供ありがとうございます。うさぎのぬいぐるみが可愛いですw→株式会社タイレルシステムズの情報だよ! | ロケタッチ

TDDBC会話には全くかかわりがなく、そもそもTDDもテストも未経験だったわけなのですが(テスト自体の意味は分かっている)、今回はSymfonyユーザー会繋がりの西川さんが主催し、西川さんの元同僚のにしごうりさんが共催し、TDDBC本家の@t_wadaさんが講演に来て、といったところで、行くしか無いと思っていました。Symfonyユーザー会の活動を通じてテストの重要性をひしひしと感じていたのでいい機会でした。

TDDの短期集中訓練(BootCamp)という位置付けて、TDDとは、TDDの本質などを聞き、ペアプログラミングの実践を行いました。複数の組が同じ課題をペアプログラミングするというのはこういう場でしか味わえない試みなのですが、ペアプロ後に何人か代表で実装手順を発表したのですが、みんなアプローチの仕方や実装の考え方が違っていて面白いなっと思いました。

ペアプロをしてみた感想としては、単純なtypoはすぐに見つけてもらえる、お互いに確認しあって進めていくので書いたコードに自信が出るなどを感じました。他の人が言っていた感想として、自分の中にあったもやもやとした設計を口を通して相手に伝えることで明確になっていくというのもありました。

TDDBCとしては言語を縛った勉強会は初めての試みだそうで、いろいろやり方を模索中らしいのですが、個人的には使い慣れたphp言語だけで話が完結しているので、テスト初心者でもphpというだけで参加しやすかったです。他の言語の人とかがいたらそれはそれで面白いかとは思ったのですが、参加しづらかっただろうなとは思います(個人的に)。

実際にTDDを体験してみて、じゃぁもう明日から業務で使えるかといったらそうではないです。入門と実践は違います。ですが@t_wadaさんの講演の最後に、応用編として現実と戦うためのリファクタリング方法を学べる書籍を紹介してもらえました。まだまだ会社にはすぐに導入できないだろうとは思っていますが、個人レベルで試行錯誤してTDDやテスト手法、CI環境などの整備方法を学んで、ノウハウがたまってきたら会社に還元して既存あるいは新規案件にテストドリブンを導入していけたらと思っています。

次はもっとコンテキストをしぼって、CakePHPやSymfony2でのTDDなどが話し合える場があるとニッチに盛り上がりそうですね!