ただのにっき
2012-02-18(土) [長年日記]
■ T-POINTを取得するスクリプトをGistから移動
かれこれ2年も前に書いたT-POINTを取得するスクリプト、さくらのレンタルサーバ上のcronで毎朝動かしていて、調子のいいときはちゃんとKayac経由で毎朝Gmailにメッセージが飛んきてるんだけど、なければないで困らないこともあり、何かトラブルがあって届かなくなっても気づかないんだな、これが。今日も、poppenさんがパッチを送ってくれてはじめて「そういえば最近見なかったなぁ」と気がつくしまつ。
で、ちゃんと継続的に使ってくれてメンテもできる人がいるならいっしょにやりやすくすればよかろう。スクレイピングのスクリプトは継続的にメンテできないとすぐに陳腐化するからな。ということで、他のポイントサービスのデータも合わせてスクレイピングできるように元のGistからpoints-scraperリポジトリに移動、ついでにGem化した:
% gem install points-scraper
まだpoints-tpointスクリプトしかないけど、たぶん今後、楽天やANA用のをpoppenさんが実装してくれるはず(笑)。なお、自前の環境(さくらのレンタルサーバ)では、どうしたことかOpenSSL::SSL::SSLErrorが出て動かないのであった。あそこはFreeBSDなのでよくわからん。Herokuに移植するかなぁ。
それにしても、こうしてGistから正式なプロジェクトに昇格させたい場面でいい感じに引っ越せるようにならんかな、GitHubは。というか本当に断片的なもの以外は最初からプロジェクト化しておけってことだよなぁ。
■ Bundlerを使ったGem作成メモ (自分用)
↑のgemを作るにあたって、(ほんの数カ月前にやったにもかかわらず)またgemの作り方をググって、「ああ、そういえばそうだった」みたいなことをやって馬鹿馬鹿しいので自分用にメモっておく。とにかくgemの作り方はここ数年でさまざまなツールが出ては消えていき、はっきりいってホビープログラマとしてはいちいち追いかけてなんていられない状況だったのだけど、最近はBundler一択っぽいのでこれでしばらく固定でいいやもうという感じ。
テンプレートの作成
Gitのリポジトリ作成からgemspecファイルの生成まで、ひととおりのテンプレートを作ってくれるbundle gemコマンドを使う:
% bundle gem hoge create hoge/Gemfile create hoge/Rakefile create hoge/.gitignore create hoge/hoge.gemspec create hoge/lib/hoge.rb create hoge/lib/hoge/version.rb Initializating git repo in /home/sho/src/hoge % cd hoge
もし既存のリポジトリを使う場合は……上で生成されたファイルをコピればいいのかな。ところで.gitignoreに「Gemfile.lock」が含まれている(つまりリポジトリには含めない)んだけど、これをリポジトリに含める場合と含めない場合の判断基準がよくわからん。tDiaryは含めてるようだが。
version.rb、gemspecなどの書き換え
ライブラリの場合はもう、libの下に必要なファイルが生成されているので、好きなように書き換えればよろしい。重要なのはlib/hoge/version.rbで、この中身がgemのバージョンになるので、アップデートのたびに適切なバージョン番号に書き換える:
% cat lib/hoge/version.rb module Hoge VERSION = "0.0.1" end
なお、コマンドの場合はbinの下に入れるが、それがそのまま実行されるわけではなく、gem installするとそのファイルへのruby的なラッパーが生成される点に注意が必要。つまり、バイナリのコマンドやシェルスクリプトを入れてもうまく実行されない。
それから*.gemspecを書き換え。最低限「TODO」と書かれているところは要修正。あと、同時にインストールさせたい依存gemなんかもs.add_runtime_dependencyを使って指定しておく。依存gemはGemfileに書くのも忘れずに。
あとはテストも書くといいですね(棒)。
gitへコミット
必要なものが揃ったら、commitできる:
% git commit -a -m 'first commit.' [master (root-commit) 8a106b1] first commit. 6 files changed, 41 insertions(+), 0 deletions(-) create mode 100644 .gitignore create mode 100644 Gemfile create mode 100644 Rakefile create mode 100644 hoge.gemspec create mode 100644 lib/hoge.rb create mode 100644 lib/hoge/version.rb
また、Bundlerがリモートリポジトリの扱いもうまくやってくれるので、GitHub上にリモートリポジトリも追加しておくべきである:
% git remote add origin git@github.com:tdtds/hoge.git
gemのビルド、インストール、リリース
BundlerがRakefileを生成してくれているので、それを使えばgemのビルド、インストール、リリースまでが行える。まずはビルド:
% rake build hoge 0.0.1 built to pkg/hoge-0.0.1.gem
それからインストール:
% rake install hoge 0.0.1 built to pkg/hoge-0.0.1.gem hoge (0.0.1) installed
ちゃんとインストールできて使えるかどうか確認したら、リリース:
% rake release : :
バージョン番号でタグを打ち、リモートリポジトリへpushをし、rubygems.orgへの公開まで一気にやってくれる(ので、利用する側はもう「gem install hoge」を実行するだけで良い)。以降、メンテのたびにversion.rbを書き換え、rake releaseをすれば更新作業はおわりである。楽チンになったもんだねぇ。