その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

テストにコケる度にシーザーが死ぬ仕組みを作りました

タイトルは釣りです。

App::WithSound をリリース致しました。
https://github.com/moznion/App--WithSound
https://metacpan.org/module/MOZNION/App-WithSound-v1.0.2/with-sound

(2013.03.06 追記)
App::WithSound はv1.1.0 にバージョンアップしました。
コマンドの成功・失敗時だけでなく、コマンドの実行中にも音声を再生出来るようになっています。
https://metacpan.org/module/MOZNION/App-WithSound-v1.1.0/with-sound
(追記ここまで)

App::WithSound?

コマンドが成功するか失敗するかによって、その結果に対応した音声が流れるアプリケーションです。

まず、このモジュールはmpg123 かmpg321 かafplay が予めインストールされていることを要求するので、
これらをインストールしましょう。(afplay はMac OS X をご利用の方だと最初から入っているので楽ちんですね)

で、App::WithSound をcpan とかcpanm とかでガツン!(或いはゴリッ!)とインストールしてから、
  $ with-sound cmd
みたいな感じでコマンドを叩くと使えます。

なぜこんなものを!!!

「テストのモチベーションを損なわないように」という目的で (当初は) 開発していました。

テストを書くことは重要というかもはや必須ですが、それによって得られるのはプロジェクト全体の利益であって、
テストを書いた個人に「嬉しさ」や「喜び」みたいなものが直接的にフィードバックされるケースはそれほど多くないように感じます。
(テストがある事による恩恵は確かにあるのだけれど、なんだかそれが実感できないワ、みたいな。まあ、なくなってから気づくんですけど *1 )

人間は結構単純なので褒められればやる気が持続するし、褒められなければやる気はどんどん損なわれていくと思っていて、
「テストが通れば褒められて、テストがコケたら励まされる仕組みがあれば神じゃない?」
的な事をid:nkgt_chkonkさんが言い出して、「こりゃー面白そうだなー」ということで実装したのがコレです。
(本当はApp::WithSound の前にApp::Prove::WithSound という子もいたんですけど、App::WithSound に取って代わられました)

ここらへんの経緯は以下をご参照下さい。
テストに通ったら伊藤かな恵さんに褒められる環境を作って捗る話 - life.should be_happy # => 1 examples, ? failures
Hachioji.pm #26 に参加して参りました - その手の平は尻もつかめるさ

テストがコケる度にシーザーが死ぬ

例えば、
  $ with-sound prove
みたいにしてやるとprove が普通に走ります。
この場合はテストが通ったら成功時の音声が、コケたら失敗時の音声が流れます。

こんな感じ↓

テストがコケるとシーザーが死んでジョセフが悲しむ!!!
どうです、もうこれ以上テストをコケさせる訳にはいかないという「覚悟」が出来てくるでしょう!!!

その他の使い方

with-sound は汎用的なので、もちろん
  $ with-sound rspec
みたいなコマンドも実行可能ですのでRSpec-er のこわ〜い人達も満足! って感じですね。

あと、
  $ with-sound ls
とか
  $ with-sound whoami
とかやると、常に音に溢れる充実した生活を送れるので大変良いのでは無いでしょうか。
NO MUSIC, NO LIFE *2

あ、これ僕一人でつくったんじゃないです

App::WithSound はid:nkgt_chkonk さんと共同で作りました。

いや、共同で作ったっていうか、僕がテキトーに書き散らかしたコードをid:nkgt_chkonk さんが良い感じに設計しなおして
再実装してくれたので、あれ、それ最早「僕が作った」って言えないんじゃね? みたいな感じの共同作業でした。
僕はその間「精神的お茶くみ」と称してテストコードとかをちまちま書いてたんですけど、終盤になってくるとテストケースすら
id:nkgt_chkonk さんが書き始めたので、「@moznion とは一体なんだったのか」って感じが否めないですね! *3
本当にありがとうございます!

また、id:syohex さんには色々とpull-request を送っていただいて、非常に助かりました。
大変有益なpull-request でした。勉強になりましたし、お陰でApp::WithSound も良い感じになりました。
この場を借りて感謝いたします。


それでは、App::WithSound で優雅なテストライフをお楽しみください!!!!!!
(僕はalias prove='with-sound prove'にしました!!!!)

*1:Just like a 人生

*2:S**ks!!

*3:僕、Test::MockObject::Extends とか知らなかったし……