Hatena::ブログ(Diary)

¬¬日常日記 RSSフィード

2007年08月20日

rubyforgeがとても便利

ruby-tumblrで初めてrubyforgeを使ってみたわけですが、そのあまりの便利さに吃驚ですよ。今更ですか?ひょっとして、もう皆さん当然使っているわけなんですか?まぁ私は流行は遅れて乗るタイプだから、今更かも知れないrubyforgeの便利さと使い方をまとめておこうと思います。書いておかないと忘れちゃうしね。

なお、今回私がrubyforgeを使うにあたって参考にしたのは以下の記事です。

これは非常によくまとまっていますので、読めば大抵のことはうまく行きます。よって私が書くべきことはほとんどありませんから、ポイントと諸注意だけをまとめておきます。

rubyforgeに登録したらまずやること

rubyforgeへの登録方法は上記記事を参考にして下さい。登録が完了したら、まずやる事が二つあります。

プロジェクトの申請から承認までは半日くらいかかりました。申請時には英語で説明を書かなきゃいけないわけですが、短いのを適当に書くだけなので大丈夫です。深刻に考えないで一行だけ書いておきましょう。プロジェクトが却下されることがあるのかはよく分からないのですが、まぁまず無さそうな雰囲気なので単語をそれっぽく適当に並べるだけでもなんとかなるんじゃないかと思います。

また、忘れてならないのはsshパブリックキーをさっさとアップロードしておくことです。画面右上の My Account をクリックすると、「マイページ」なるところにジャンプしますから、その下方 Shell Account Information の [Edit Keys] をおもむろにクリックして下さい。ここにパブリックキーをコピーしておきましょう(コピーする時に変な改行とかいれちゃダメですよ)。処理に多少時間がかかるみたいだから、とっととこの作業は完了させておくべきです。

なにはともあれnewgem

では次にnewgemです、newgemは必須と言って過言ではないので是非使いましょう。名前だけ見るとgemを作ってくれるだけのように思えるかも知れませんが、これを入れると自動的にrubyforgeが便利に使える環境が整うため、gem作成以外にも大活躍なのです。

なお、newgemはコードを書く前に使っておきましょう。私は書いた後に存在を知ったのでとても苦労しました。私同様に後から知ってしまったかわいそうな人は、仕方ないので一度ダミーをnewgemしてから、コピーと手修正で環境を整えるしかないと思います。

newgemの使い方は最初に挙げた記事を参照して下さい。使い方はとても簡単ですが、生成されたひな形を修正するのはそれなりに面倒です。試行錯誤しながらやってみればよろしいのではないでしょうか。

rubyforgeコマンドを忘れないで!

newgemを入れるとrubyforgeライブラリもついてきます。これを使うための設定ファイルを用意しなければならないので、これを忘れないように。

  • rubyforge setup で設定ファイルのひな形を作成
  • 設定ファイルを編集
  • rubyforge config でプロジェクトIDを取得しておく

特に最後の rubyforge config は忘れやすいので注意しておいて下さい(これをやっておかないとリリース時に project id がないからダメというエラーが出ます)。ただしこれはプロジェクトが承認されてからでないと意味がありません。

svnサーバへの接続方法

プロジェクトページの下の方に「SCMリポジトリ」というのがありますから、それをクリックすれば分かります。パスはどこなの?とか悩む前に一度確認しておいて下さい。

リリースまでの一連の流れ

eto.com/d:RubyGemsパッケージを作るに必要なことは全て書いてあります。先にこれを読み込んで全体像を理解しておくことをオススメします。注意という程ではありませんが、rake release する時には必ず VERSION を指定しなければなりません。

ウェブサイトの構築

rake website すると、非常にそれっぽいのがアップロードされますので、わざわざ自分で文章を書いたりデザインしたりする必要はほとんどありません。ただし内容を変えたい場合には website/index.txt を編集します(website/index.txt からフィルタ scripts/txt2html を通して website/index.html が生成されます)。このファイルは textile 記法ですので、慣れていない方はまずもって勉強しておいて下さい。まぁtextileははてな記法と違って非常に簡単ですから、知らなくてもなんとなく書くだけうまくいくと思います。

まぁ英語で書くわけですが、間違ってたら誰か指摘してくれるんじゃないのかなぁ、なんて期待しながら適当にでっちあげておけば良いのではないでしょうか。

感想

そんなわけですから、gemの作成、リリース、ウェブサイトの構築まで全てが自動化されています。これならかなり気軽に使えるのではないでしょうか。特に、ライブラリを作った上にウェブサイトの面倒まで見てらんない! という方は、是非とも website/index.txt で楽しちゃいましょう。

ruby-tumblrをつくりました

Tumblr派のみなさんこんにちは。

今日はたんぶら部に加入申請致しました。はてなの仕組みが分かっていないのでたんぶら部がなになのか良く分からないのですが、よろしくお願いします。

さて本題です。ruby-tumblrをつくりました(プロジェクトページ)。versionが0.0.1ですから出来立てホヤホヤです、テストもろくにしていませんので誰かダメなところをみつけて直してやって下さいませ。ご協力お願いします。またご意見などありましたら、是非コメントもしくはメール下さいませ。

インストールの仕方

sudo gem install ruby-tumblr

して下さい。tzinfoライブラリも必要ですが、gemなのできっと一緒にインストールしてくれるのだろうと思います。

出来ること

  • read
  • write
  • backup

read

tumblr API を使ってポストを読み込みます。具体的には以下みたいな感じになります。

require "tumblr" 

Tumblr::API.read("tumblr.dynamic-semantics.com") do |pager|
  data = pager.page(0)
  p data.tumblelog
  data.posts.each do |post|
    p post
  end
end

変数postはTumblr::Data::PostのサブクラスであるTumblr::Data::RegularとかTumblr::Data::Photoのオブジェクトになります。

write

同様にtumblr APIを使ってポストを投げます。具体的には以下みたいな。

require "tumblr" 

Tumblr::API.write($email, $password) do
  regular("test body", "test title")
  quote("test quote", "test source")
  link("http://tumblr.dynamic-semantics.com", "test link")
end

Tumblr::API.write にブロックを与えるとその中で regular やら quote やらのポスト系の関数が使えるようになります。これでポストしまくりじゃないですか?

backup

tumblrって何で儲けているのか分からないので、ちょっと不安です。そろそろバックアップをとりたくなってきました。以下のようにします。

require "tumblr"

Tumblr::API.read("tumblr.dynamic-semantics.com") do |pager|
  data = Tumblr::Data.new
  0.upto(pager.last_page) do |n|
    puts "get #{n}/#{pager.last_page}"
    data << pager.page(n)
  end
  data.save("backup.xml")
end

いずれもう少しまともにしますが、とりあえずこれで画像以外のバックアップはとれます。なお tumblr API でreadした時に返ってくるものに近いフォーマットで保存しますが、あくまでもそのままではないのでご注意下さい。多少手を加えています。またフォーマットはしばらく落ち着くまでコロコロ変えてしまうと思います。

感想

rubyforge便利ですね、gemってこんなに簡単に作れたんですね。これはもうrubyforge使わないと損な感じ?

ところで私はこれまで一度もconversation型でポストしたことがないので扱いが不安です。ほとんど使っている人をみないのですが、もし使っている方がおられましたら是非ともテストをよろしくお願い致します。

ちなみにこのライブラリを作った理由は、rubyforgeで"tumblr"を検索したらプロジェクトが二つみつかったけど、どちらもやる気がなさそうだったからです。せっかく作ったのでとりあえず @nifty Timeline あたりにポスト数を記録して遊んでみたいと思います。