2011-12-02(金) [長年日記]
■ Herokuにkindlegenコマンドを入れるgemを作った(こんどは成功)
昨日作ったgemはけっきょくHerokuでは役に立たなかったんだけど、makeされたあとの作業ファイルまでは消されないようなので、そこに残ったkindlegenを使えばなんとかなりそうである。
というわけで、module Kindlegenにモジュールファンクションを定義して、環境にかかわらず使えるようにしてみた:
どっちみちRubyスクリプトの中から使うのが目的なんだから、これでいいのだ:
require 'kindlegen' Kindlegen.run( 'sample.opf', '-o sample.mobi' )
よし、これで野望にまた一歩。
2011-12-01(木) [長年日記]
■ Herokuにkindlegenコマンドを入れるgemを作った(けど失敗)
たとえばHerokuでKindle向けにドキュメント配信をするようなサービスを動かすとして、ネックになるのが.mobiファイルの生成をどうするかである。考えつく方法として、
- Calibreが抱えているライブラリを持ってくる
- メールでPersonal Documentsに送信してうまく変換されることを祈る
- なんとかしてkindlegenコマンドをインストールする
Calibreのmobi変換はかなり優秀なので、これが一番スマートだとは思うけど、たしかPythonなので最後の手段。Personal Documentsの変換は品質に問題があるのでできれば避けたい。ということで、Herokuにkindlegenコマンドをインストールするという方向を探ってみることに。
Herokuへ何かをインストールする方法は、「git push」か「bundle install」しかない(たぶん)。しかしGitHubにリポジトリを公開することを考えると、そこにAmazonの所有物であるkindlegenを含めることはできないので、「git push」はいきなり除外。いちおうサービスの起動直後にtarballをダウンロードして展開することでkindlegenコマンドを取り出すという技もあるし、やってみたらできたのだけど(そういうことを狙ったと思われるコードはGitHubでも見つけられる)、配置先がtmpdirにならざるを得ないのでちょっとなー、という感じ。
ということで、gemを作ってその中でなんとかという方法が残った(前置きが長い)。
で、gemの作り方を調べて、拡張ライブラリを作る過程でなんとかつっこめそうだとわかり、適当なMakefileを吐き出すextconf.rbを書いてみたのがこれ:
これでインストールがこんな感じで簡単になった:
% gem install kindlegen
もちろんGemfileに書いておけばbundlerが入れてくれるようになるので、Herokuでも動くはず!
……と思ってやってみたらダメ。いや、少なくともgitの出力を見ている限りではインストールは成功しているようだ。しかし、サービスの中からkindlegenコマンドを起動してみると見つからないという。「heroku run console」でherokuに入り、binの下を探してみるとない。えっ、なんで!?
で、いろいろ調べてみると、インストール直後にbinの下から一部のコマンド(bundleとか)を除いて削除するプロセスが走っているようだとわかる。ついでにconsoleからファイルを作っても、logoutのタイミングで消される。ぬー、やるなHeroku(笑)。
ちょっと別の方法を探さないとなー。いちおうmobiファイルを生成するrubyなライブラリもあるみたいだから、ちょっとためしてみるか。ちなみにkindlegen gemは、Heroku抜きにしてもそれなりに便利なので個人的にはいいもの作った気分ではある。tarballでしか配布されていないツールをインストールする方法としてアリだね、これは。
2011-11-30(水) [長年日記]
■ Webで日記をつけはじめて今日で12年
ついにひとまわりしたぞ。
日記をつけ始めた当初は「Linuxデスクトップ導入の作業メモ」だったんだけど、あまりの完成度の低さに途中でめげて、けっきょくWindowsに戻ったままなんだよな。もちろん開発用に常時VMwareでサーバモードのDebianが動いているわけだけど。
Ubuntuの登場以来、Linuxデスクトップも急速に進化したようだし、またLinuxに戻ってもいいかもね。実際、Ubuntuで日常生活を送っている人も多いし、WindowsもVMwareで動かせばいい時代だし。
……とか言ってたら、今はLinux Mintなんだって*1。UbuntuがDebianの派生で、MintはUbuntsuの派生なのか。なんだかややこしいなぁ。そうだ思い出した、ディストロ追いかけるのが疲れるんだよね、Linux界隈は。まぁ覚悟を決めてどこかと心中すればいいわけだけど。
(とか言いつつ、やっぱり「そんな時間ねぇ」という理由でWindowsを使い続ける可能性が90%くらい。Windows8も楽しみだし)
*1 「そんなことはない」という声もあり。 http://gihyo.jp/admin/clip/01/linux_dt/201111/29
◆ yoosee [Debian sid と心中するのがいいですよ :)]
◆ ただただし [それは文字通りの意味で心中になりがちだからイヤ(笑)。]