読者です 読者をやめる 読者になる 読者になる

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

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

Acme::Suspender を支える技術

タイトルは釣りです。

YAPC::Asia Tokyo 2012 の二日目LT でお披露目した、Acme::Suspender というモジュール(?) が
なにゆえ産み落とされたのかという経緯と、その進化の推移について書きます。

僕がやったLT については、
http://yapcasia.org/2012/talk/show/7bfe4042-0aec-11e2-a7a5-001636ebe579
をご参照いただければと思います。

経緯(だいたいこんな感じ)

神はおっしゃった。
「サスペンダーあれ」
そうしてAcme::Suspender が出来た。

経緯(くわしい)

忘れもしない2012年8月23日。僕はまだ21歳でした。
YAPC::Asia Tokyo 2012 のイベントレポーターの打ち合わせのために、
市ヶ谷の技術評論社さんに出かけた時のことです。
打ち合わせ後の懇親会で、イベントレポーターの皆さんは言いました。
「dankogai さんといえばサスペンダーだよね」
「サスペンダー引っ張りたい」
「でも現実世界で引っ張るのは……」
「だったらソフトウェア的に引っ張れば良いんじゃ」
「でも、ただ引っ張るのもつまらないよね」
「それなら、github のpull-request の数が増えれば増えるほどサスペンダーが伸びれば良いんだ!」
「それだ!!! つくろう!!!」
どこぞの妖精さんみたいですね
その3日後に原型が出来上がりました。

Acme::Suspender の原型

原型なんて捨てちゃった……と思ったら、ご丁寧にも僕のgist に上がってました。

gitPullSuspender_proto

改めて見ると大変簡単なプログラムですね。
WebService::Simple でクエリを投げて、その結果を使ってpull-request の数を取得していますね。
(後述しますが、この方法には問題があるのでそのうち直します)
(あと、ココに書いたように、LWP::Protocol::https を入れておく必要があります)

あと、このプロトタイプは画像関連の処理を一切していません。pull-req の数に応じてメッセージを返すだけです。
理由は簡単。まだこの時点ではあの画像はこの世に無かったからです。

なお、この数日後にあの画像が出来上がります。

Acme::Suspender の起こり

このプロトタイプを@ytnobody さんに投げたところ、カッチョイイ感じになって返ってきました。
ソースコードはgithub に転がってます。

ytnobody/Acme--Suspender · GitHub

すげークール! カッチョイイ!!
Class::Accessor::Fast とか、Furl とか使ってるし!!
しかもテストスクリプトとかもあるし! すげー!

で、画像追加したり、マイナーなバグフィックス等を経てYAPC::Asia Tokyo 2012 でのお披露目と相成ったわけです。

Acme::Suspender の問題点

  1. pull-request の数が31個以上あっても、内部的に30個として扱われてしまう
  2. フロントエンドが貧弱すぎる
  3. Acme::Suspender って名前だけど、そもそもこれモジュールじゃないよね

1.pull-request の数が31個以上あっても、内部的に30個として扱われてしまう
なんか、クエリを投げる先を間違えているのかもしれない。30個を超えてpull-request の情報を取得できないので。

2.フロントエンドが貧弱すぎる
バックエンド (Suspender.pm) は割としっかりしています。(それもそのはず、@ytnobody さん が作った部分だし)
一方で、フロントエンド(sample.cgi, あとSuspender.pm の画像出力の部分)があまりに貧弱ゥ!
「2012年にもしっかりとcgi の息吹は根付いているぞぉー!」と言えば聞こえは良いですが、ハッキリ言ってショボいです。
もうちっとイケてる感じに直したい……

3.Acme::Suspender って名前だけど、そもそもこれモジュールじゃないよね
当初は普通のAcme モジュールになる予定だったんですが、図らずもアプリケーションっぽくなってしまいました。
LT の後に、「"Acme::App::Github::Suspender" とかが妥当なんじゃない?」みたいな事を言われたので、
名前空間の改善も考慮せねば……

イラストを描いてくれた人の紹介

正式に許可が下りたので紹介します。
このモジュール用にdankogai さんのイラストを描いてくれたのは、僕の友人の@armaments 君です。
大変感謝! ありがとう!!

そんなこんなで

Acme::Suspender を支える技術でした。書籍化のお誘い、お待ちしております。
「ここ、こうしたら良いんじゃね?」というpull-request もお待ちしております。


追記

近いうちに、dankogai さんの画像がカラー化したりしなかったりするらしいです。
ゆるくお待ち下さい!