2011-08-23

neocomplcache phpunit snippetつくった & TDDBC 1.7 LT内容補足

このエントリーをはてなブックマークに追加
先のエントリで書いたTDDBC 1.7 Tokyo for PHP でやらせていただいたLTですが、
実は初LTだった為何をしゃべっていたのかかなりうろ覚え状態。

と、いうわけでここで少し補足説明をかねて書こうと思います。

LTで使用したスライド



今回はTDD、とくにテストコード記述に関してフォーカスしたVimの設定や
普段TDDに絡まったVim Pluginsの紹介をしました。
そしてもうすぐ発売をされる"Vim テクニックバイブル"ですね!!

LTをやろうと思ったきっかけ

Vim普及が一番の理由ではありますが、中でもVimmerのレベル底上げが目的でした。
自分はおそらく中級者的な立ち位置にいると思いますが、
PHPerの中にはまだまだunite.vimneocomplcacheを入れてない方々が多いと日々感じることが多かったのです。
そしてVim勉強会ではunite.vim等を使っている当たり前状態であったのも格差が広がっているなと感じていました。

そこでVim テクニックバイブルでも紹介されるunite.vim, neocomplcache, vim-quickrun等を
ライブコーディング形式で紹介すればイメージもつきやすくVim Levelを向上したいと思うきっかけに
なってくれるかなと思った次第です。

ライブコーディングでやってたこと

  • あらかじめunite bookmark addで操作するディレクトリをブックマーク。
  • vimshellでちょこちょこ。
  • unite buffer でファイル選択、キーを押してsplit actionを選択。
  • neocomplcacheでphpunit用のsnippet候補選択。(assertSame()とかsnippet出力させたかな)
  • <Leader>r でvim-quickrun発動。PHPUnitの結果をquickrun bufferに出力。
  • git-vimでgvim上でgit add, git commitを実行。
  • <Plug>(neocomplcache_snippets_expand)でphpunitのsnippetを選択、edit actionで手軽にsnippetを編集。
8/23 15:15 追記: 最後の項目について。
<Plug>(neocomplcache_snippets_expand)は私はvimrcにマッピングを記述しています。
何やったかの便宜上そう記述しました。何その<Plug(ry って方はneocomplcacheのdocsを拝見あれ。
また<Tab>キー後のedit actionを選択せずとも候補一覧時にeを押すだけでedit actoin選択された状態になります。
追記の時間まで書いているのはそれらを早速Shougoさんに指摘していただけたのでw

あと自分は以前snipetにはsnipMateを使用していて
PHPUnit用のsnippetを書きつつneocomplcache同梱のsnippets completeに完全に乗り換えるいい機会だと思ったわけです。
snipMateはunite化されていないということも乗り換えるべき理由のひとつでした。

neocomplcache用のPHPUnit snippetはこちらに置いてあります。

https://github.com/nishigori/neocomplcache_phpunit_snippet

まだPHPUnit_FrameWork_Contraintクラスのメソッド等のsnippetは書けていないですが、
PHPUnit 3.5のannotations, fixtures, assertionsはあるので基本的なテストコードはsnippet利用できるはずです。




導入方法


github上fileのREADMEにも記述されていますが、
Vimにはphpunitというfiletypeは存在しません。
かと言ってphp filetypeのsnippet候補に出力されるのも冗長でしょう。
以下のコードでTest.phpで終わるファイル名はfiletype php.phpunitを定義してしまいましょう。


augroup PHPUnitFileType
  autocmd!
  autocmd BufWinEnter,BufNewFile *Test.php set filetype=php.phpunit
augroup END

ちなみにライブコーディング中でも行っていたvim-quickrunでPHPUnitを実行する方法ですが、
以下のエントリと同じ形式で行いました。

VimでPHPUnitをQuickRunする ~ アインシュタインの電話番号

Stagehand_Testrunnerでは以下が参考になります。

[PHP][Vim] Stagehand_Testrunner を quickrun する ~ Heavens hell

vim-quickrun
github

上に書かれていたfiletype定義と私のコードの違いがありますね。
set filetypeを php.unit にしているのに対し、私のは php.phpunit としています。
php. というのは php filetype を定義しており、これでfiletype PHPのsyntax等利用できます。
.以降のunitとphpunitの違いですが、unitですとftpluginで定義するファイル名や作成したsnippetファイル名をunit.vim、unit.snipにする必要があり
これは他のxUnit(PyUnit, JSUnit)用プラグインを今後使用していくことを考えるとfailtypeとして適切でないなと判断したためです。

もちろん私のサンプルコードを利用してvim-quickrunでPHPUnitを叩く場合は
適時php.unitの部分をphp.phpunitにしてください。
(もしくはphpunit.snipを改名する方法もありますww)

githubのコードでphpunit snippetのdirectoryがneocomplcacheのsnippet filesと一緒なのは
plugin managerを利用している方が楽に導入できる為です。
VimのPlugin manager? なんじゃそりゃって方はVim-users.jpの以下のエントリを参考に導入してみてください。

Hack #183: Vim日本語ドキュメントを更新しよう ~ pathogen.vimでアップデートを楽にする
Hack #215: Vundle で plugin をモダンに管理する


イベント中のペアプロ中や休憩中に色々と質問をいただき、
思った以上に皆さんVimに関心を持っていただき非常に嬉しかったです。
ライブコーディング中に「ん?今何をやったんだ?」的なセリフがあった気がしますが
是非発売されるVim テクニックバイブルを手に入れてください。
全て書籍に書いてあります!(と思います)







また、著者のひとりでありunite.vim, neocomplcacheの作者であるShougoさんがVim-users.jpに書かれている通り、
Vim テクニックバイブルは早めの購入をお薦めします。

理由は他の書籍情報と同じく、情報は常に先に進んでいくことによる書籍情報の遅れは否めないためです。
幸いにして著名なVim Pluginsはdocumentが非常に丁寧に書かれています。

Vim テクニックバイブルが発売されると、ふと生まれた疑問を作者に質問投げまくり、なんて状況がおそらく生まれるでしょう。
そのような負担を減らす為にも、利用する側はdocumentを読み解決できるところは自分で解決させていきたいですね!
LTでneocomplcacheやunite.vimの深い説明をしませんでしたが、是非documentを拝見ください。docs見るだけで驚愕モンですw

あとはLTでお話しさせていただいた通り、Vim-users.jpのHacksLingrのVim部屋を日々訪れるのも十分なVim Levelアップになると思われます。


今回紹介した人気なVim Pluginを使った操作はほんの一例です。
(ライブコーディング中ではvimshellで色々やってましたが、vimfiler使ったほうが楽であったり!とか)
紹介したPluginでもまだまだたくさんの操作ができますので、是非導入し実践してみてください。


今後の@_nishigoriのVim的活動予定
・需要があったらref.vimのphpunit manual版つくる、かも。
・何かunite化したPluginつくりたい。
・Vim テクニックバイブル著者にサインをねだる。

0 件のコメント:

コメントを投稿