2008 05 20
■ github に gem を公開する
最近一部で話題沸騰の github。github は Rails で作られたアプリケーションでは、自分が知りうる限り一番の完成度と使いやすさを誇るんじゃないか、と思っています。
ソースコードツリーの見やすさ、(g)zipでくれ機能、各種 git の情報へのアクセスしやすさ、最初に git レポジトリを作ったとき表示されるチュートリアルと云った基本的なことはもちろんですが、オープンソースプロジェクト・コミュニティを加速させるであろう、分散レポジトリを利用した様々な機能がすばらしいですね。
誰かが公開してるレポジトリを fork ボタン一つで自分のレポジトリにクローンし、いろいろ変更を加え、大本に取り込んで欲しいなぁ、と思ったら pull request。大本のコミッタは気に入れば pull で取り込めばよいし、もし気に入らなかったとしても、変更者がそのフォークしたレポジトリを削除しない限り、完全なソースが存在し続けます。それを気に入った第三者はそちらを使うのもよし、参考にするもよし。
また git のフック機能を利用した数々の機能。たとえば edit 画面からコミット時、指定した URL に JSON のデータを送るPost-Receive Hooks機能(Web Hooksと呼ばれてるらしいです。先ほど知りました)。
そして Rubyist にはうれしい、gem を自動でサーバサイドで作成してリリースしてくれる機能があったりします。
この機能は最近の rubygems に実装された、大本のソースURLを追加できる機能を利用しています。
$ sudo gem install rubygems-update $ sudo gem update --system $ gem sources -a http://gems.github.com
することにより、github をソース元に追加できます。rubyforge では結構アップロードが面倒でしたが、github では .gemspec ファイルを用意して、master に push するだけで gem が自動で作られ、公開されるのです。
というわけで、これは相当面白いので実際に rascut を gems.github.com に公開してみました。その手順メモを。
github でプロジェクトを作る
ふつうに作ります。rascut という名前で作ったので、ユーザ名/rascut な名前空間が割り当てられます。
rubyforge の svn から取り込む
git-svn を使えば svn からのコンバートもばっちりです。
git-svn clone svn+ssh://secondlife@rubyforge.org/var/svn/hotchpotch/rascut/trunk rascut_svn
push する
チュートリアルに沿って、適当なファイルを作り最初のコミット、push を行います。
# 思い出して書いてるのでひょっとしたらうまくいかないかも… mkdir rascut cd rascut git init touch .gitignore git add .gitignore git commit -m 'first commit' git remote add origin git@github.com:hotchpotch/rascut.git git push origin master
その後 pull して svn な git を取り込み、push します。
git pull ../rascut_svn git push
これで github に公開されました。
edit で RubyGem のチェックボックスにチェックを入れる
gemspec ファイルを作る
hoe や cutagem の 0.0.8 >= ( いまは http://github.com/hotchpotch/cutagem/ にしかありませんが、そのうち id:cho45 が取り込んでくれるはず…) を使うと、 rake debug_gem で .gemspec ファイルを作ることができます。Gem::Specification#to_ruby というメソッドがあるので、自分で gem を作っている人は、puts spec.to_ruby での出力を取り込むだけで OK です。
$ rake --silent debug_gem > rascut.gemspec $ git add rascut.gemspec $ gem build rascut.gemspec # build できるかチェック $ git push
完了!
これでちょっと待つと、gems.github.com からインストールされるようになるはずです。
require 'open-uri' require 'rubygems' gem_list = Marshal.load(open('http://gems.github.com/Marshal.4.8').read) gem_list.extend Enumerable p gem_list.map{|l| l.first}.grep(/rascut/)
で、表示されれば完了です。後は
$ sudo gem install hotchpotch-rascut
と ユーザ名-プロジェクト名 でうまくインストールされるはずです。
github + rubygems が熱い
というわけで、自動で master だけ簡単に gem 化することができますね。いろんな俺俺 fork gem が乱立しそうな気もしなくはないですが、分散レポジトリ+OSSならではということで。
ちなみに本題とは関係ありませんが、現在はてなのレポジトリの大半は git に移行しました。svn から git に移行することで結構メリット・デメリットが見えた気がします。まだ一部試行錯誤してたりするので、まとまったらどこかで公開したいですね。
2008 05 12
■昔話
昔話でもしようか。
自分は6年前はプログラミングが全くできなかった。プログラム書ける人は一部の天才だと思っていた。プログラミングができないことに劣等感を覚えた自分は、Linux が使えると格好いいんじゃと思い、Debian で自宅サーバを構築し、アンテナ*1や tDiary で日記サイトを運営したり始めた。
そんなとき、id:antipop と出会った*2。島に住んで、特にITもなにも関係ない仕事をしていた彼が、全く知識が無いところから勉強し Linux で自宅サーバを動かし、php + postgres で blog っぽいシステムを日々バージョンアップさせ、Button Maker for Japanese などのツールを作っていくのを blog 経由でリアルタイムで見ていて、プログラミングもやれば誰でもできるんじゃないかと感じ、自分の日記ツールが tDiary ということもあって、Ruby を勉強し、初めてプログラミングしてできた物が tDiary のプラグインであった。これが自分とプログラミングとの初めての出会いであった。
その後 blog 経由でいろいろ話すうちに、IRC 立ち上げようぜーといって id:antipop が #順列都市を開設し、そこでいろいろ教えてもらって、フルスクラッチから書いた初めての web アプリケーション*3、rsstimesを作ってみたのだった。ちなみに公開当初は XSS バリバリといった酷い物であった…。そんな感じで徐々に Web アプリケーションを作れるようになり、プログラミングが楽しくなっていった。
そして今から約三年半前、Web 上で変なことやってる人集めて面白い IRC 始めようぜ、と id:antipop と始めたとあるチャンネル。当初は自分と antipop だけだったのだが、「頭おかしすぎるこの人!!!」*4と二人で盛り上がって勢いでメール*5を送って最初に invite したのが、当時ミラーマンwiki等を作っていた、まだ無名だった id:mala であった。ちなみにメールを送った15分後には join してきて、どんだけ暇なんだろうと思ったりもした。ほとんど JavaScript が分からなかった自分は、mala にいろいろなテクニックを教わり、 JavaScript を覚えることができた。その後 JavaScript で MTBlogTimes を実装 してた id:motemen を誘ったり、当時どこの技術カンファレンスの打ち上げに行っても居た id:nagayama などを誘ったりして、現在はチャンネルは10人ちょっと。
そんな感じで2005年から盛り上がっていたメンバーが次々とはてなに入ってきて何か運命めいた物を感じる。三年前には antipop/nagayama/mala/motemen と出会っていたけど、一緒の会社で働くなんて想像すらしていなかった。これからもっとより良い、面白いサービスを作っていきたい、盛り上げていきたいなー、と改めて思った。