Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
2nd life
[go: Go Back, main page]

2nd life

2008 05 20

githubgem を公開する

最近一部で話題沸騰の githubgithubRails で作られたアプリケーションでは、自分が知りうる限り一番の完成度と使いやすさを誇るんじゃないか、と思っています。

ソースコードツリーの見やすさ、(g)zipでくれ機能、各種 git情報へのアクセスしやすさ、最初に git レポジトリを作ったとき表示されるチュートリアルと云った基本的なことはもちろんですが、オープンソースプロジェクトコミュニティを加速させるであろう、分散レポジトリを利用した様々な機能がすばらしいですね。

誰かが公開してるレポジトリを fork ボタン一つで自分のレポジトリクローンし、いろいろ変更を加え、大本に取り込んで欲しいなぁ、と思ったら pull request。大本のコミッタは気に入れば pull で取り込めばよいし、もし気に入らなかったとしても、変更者がそのフォークしたレポジトリを削除しない限り、完全なソース存在し続けます。それを気に入った第三者はそちらを使うのもよし、参考にするもよし。

また git のフック機能を利用した数々の機能。たとえば edit 画面からコミット時、指定した URLJSONデータを送る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名前空間が割り当てられます。

rubyforgesvn から取り込む

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 して svngit を取り込み、push します。

git pull ../rascut_svn
git push

これで github に公開されました。

edit で RubyGem のチェックボックスにチェックを入れる

Web インターフェイスから行います。

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自宅サーバを構築し、アンテナ*1tDiary日記サイトを運営したり始めた。

そんなとき、id:antipop と出会った*2。島に住んで、特にITもなにも関係ない仕事をしていた彼が、全く知識が無いところから勉強Linux自宅サーバを動かし、php + postgres で blog っぽいシステムを日々バージョンアップさせ、Button Maker for Japanese などのツールを作っていくのを blog 経由でリアルタイムで見ていて、プログラミングもやれば誰でもできるんじゃないかと感じ、自分の日記ツールが tDiary ということもあって、Ruby勉強し、初めてプログラミングしてできた物が tDiaryプラグインであった。これが自分とプログラミングとの初めての出会いであった。

その後 blog 経由でいろいろ話すうちに、IRC 立ち上げようぜーといって id:antipop#順列都市を開設し、そこでいろいろ教えてもらって、フルスクラッチから書いた初めての web アプリケーション*3rsstimesを作ってみたのだった。ちなみに公開当初は 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 と出会っていたけど、一緒の会社で働くなんて想像すらしていなかった。これからもっとより良い、面白いサービスを作っていきたい、盛り上げていきたいなー、と改めて思った。

*1なつみかん

*2:ツキニイチドノハツジョウキというサイトで antipop を紹介しており、そこ経由で知り合った

*3:といってもキャッシュを持ってるただの CGI

*4Ajax という単語が登場する一年上前に、すでに Ajaxアプリケーションを作って Ajax インターフェイスの便利さを考察していた

*5:しかも timpo@ma.la という大変恥ずかしいアドレス

プログラミングRuby 第2版 言語編
Ruby を始めようと思う人から玄人まで身近に置いておきたい一冊
Ruby on Rails入門―優しいRailsの育て方
Rails 入門書の決定版!あのくまくまーの独特な解説ですんなり読める!