2014-11-14(金) [長年日記]
■ Rubyのバージョンアップで自作のgemが壊れたと思ったらAmazonのせいだった
昨日のRubyWorld Conferenceのあとでruby 2.1.5がリリースされたと聞いたので、朝起きてさっそくアップデートしようかと思った矢先、kindlegen gemのissueに立て続けにコメントが。おーのー、なんか非互換踏んだか?*1
まさに2.1.5のリリースと同じタイミングだから、まちがいなくrubyの非互換だろうと思って見始めたけどよくわからん。そうこうするうち@hsbt(Ruby Prize 2014受賞おめでとう!)から以前のrubyでも発生するからrubygemsのせいじゃないの、とか言われる。んなばかな、先月2.1.4でちゃんとテストが通ることを確認したばかりだよ。
とはいえたしかに指摘のとおりなのでrubyとrubugemsのバージョンを変えながら動かしてみたら、なんとどの組み合わせでも発生する。わけがわからなくなっていたら、こんどは@miyagawaに「元のzipの構成が変わってる」という指摘を受けて、調べてみたら本当にそうだったので脱力。
つまり、Amazonが配布しているkindlegenコマンドのtarball / zipファイルが、従来は中にアーカイブと同名のサブディレクトリが掘ってあったのに、いま配布されているのはそれがない。同じアーカイブ名なのに最近のは構造が違っているという。中のファイルのタイムスタンプから類推するに、1週間くらい前かなぁ。rubyのリリースとタイミングが合っただけで、発覚するのは時間の問題だったと。しかしAmazonさん、これはちょっとマジでひどくないか?
今回の教訓があるとすれば、先入観は捨ててエラーメッセージをちゃんと読めだな(←ようするにどうみても自分が悪いのである)。
しっかしこのkindlegen gem、もちろん自分で使う範囲で実用的には作ったもののだいぶ適当なのもたしかだから、海外では電子書籍販売サイトでガチでビジネスに使ってる人がいてビビる。今回issueで報告してきたのもみんな外国の人だしなぁ。怖い怖い。
*1 Ruby言語的にはおかしなことはしてないけど、拡張ライブラリを作る仕組みを使って変なことをしている自覚はある。