キモブロ

Please spy check please, Fucking retard

イマドキのgemのつくりかた

なんかマジで簡単になった。最近ライブラリ作りまくってるのでその全体的な手順をメモ。
Ruby1.9の前提で書きますが、1.8でも出来るかもですね。Rubygemsの認証周りについては記載してませんが、画面に表示される英文読んでたら楽ショーで出来る思います

gemのひな形を作る

まずローカルにリポジトリを作ります。これはbundle gemコマンドを使います

$ bundle gem your_project
      create  your_project/Gemfile
      create  your_project/Rakefile
      create  your_project/LICENSE
      create  your_project/README.md
      create  your_project/.gitignore
      create  your_project/your_project.gemspec
      create  your_project/lib/your_project.rb
      create  your_project/lib/your_project/version.rb
Initializating git repo in /home/kimoto/projects/your_project

必要なファイルが生成されました。

gemのメタ情報を編集する

次はyour_project.gemspecを編集し、gemのsummaryとかdescriptionをちゃんと書きます。

なおユーザー側でrequire 'your_project'したときは、./lib/your_project.rb が読み込まれるのでそれを想定してこのコードを書く感じです

コミットする

実はyour_projectディレクトリはgitのリポジトリになってます。なのでgitコマンドで変更をコミットしたりファイルを追加したり出来ます。

後述するgemをビルドする仕組みはこのコミット済みなgitで管理されたファイルリストをもとにパッケージ化してくれるので、ちゃんとここで変更をコミットしておかないと駄目です。

gemをビルドする

カレントディレクトリにRakefileがあるのでこれを使います。使えるコマンドリストはrake -Tでわかります。やってみましょう

$ rake -T
rake build    # Build retry-handler-0.2.gem into the pkg directory
rake install  # Build and install retry-handler-0.2.gem into system gems
rake release  # Create tag v0.2 and build and push retry-handler-0.2.gem to...

3つありますね。

  • rake buildがgemのbuildをし、pkg/your_project.version.gem を生成します
  • rake installが生成された、pkg/your_project.version.gem をローカルにインストールします
  • rake releaseはpkg/your_project.version.gemã‚’rubygemsにpushしつつ、このgitリポジトリを現在のversionでタグ付けしつつpushしてくれます、これがヤバい便利。(便利さについては後述)

ソースコードのpush先を追加する

どこでもいいですがとりあえずgithubにいって新規リポジトリを作成してきてください。
そんでもって、その作成したリポジトリの、[email protected]:kimoto/your_project.git ←こんな感じのURIを調べてきてください

gitでpush先を追加するにはgit remoteコマンドを使います

$ git remote add origin [email protected]:kimoto/your_project.git

簡単ですね。ちゃんと追加されてるかどうかは git remote -vで確認できます

$ git remote -v
origin	[email protected]:kimoto/your_project.git (fetch)
origin	[email protected]:kimoto/your_project.git (push)

gemをpushする

実際にpushします。gitのpush はgit pushで良いのですが、それすらも内部的に行ってくれるrake releaseというのをします。rake releaseがしてくれることは

これが一つのアトミックな操作として行えるのが便利です。ソースコードでのタグとrubygems上でのgemのバージョンを簡単に一致させることができますね。


おわり。だいぶ楽でjewelerを使っていた頃が懐かしい。