gotagota日記

「面白きことは良きことなり」

rubygemを作る

256インターンの課題で 「rubygemを作る」 なるものが。
作るっても知識ほぼ0だったもんで中身ほぼコピペですが、とりあえずrubygemsにアップロードして なんとか公開までこぎつけました。 詳しい説明は参照URLをみていただくとして、今回は実際に行った手順をば。

bundler をインストール

bundlerという最強のバージョン管理システム(?) をインストールしてませんで、まずはそこからです。

橋本商会 » Ruby書くならBundler使え

手順
  1. rubygem をアップデートする
    $ gem update --system

  2. bundler をインストール
    $ gem install bundler
    現段階(2014/4/1)でインストールできたのは Bundler version 1.6.0 でした。

これでbundlerのインストールが完了。

事前準備

こっからrubygemを作っていきますが、その前に事前準備がちょこっと必要。

Bundler で gem を作り RubyGems で公開する方法 - 君の瞳はまるでルビー - Ruby 関連まとめサイト

手順
  1. githubにユーザーを登録していない人はアカウントを作る

  2. Rubygemsにユーザー登録していない人はアカウントを作り、API key の設定をする

    1. ログイン(Sign up)し、画面上部のユーザ名からプロフィールページに移動する
    2. Edit Profileをクリックし、下部に表示されている curl コマンドを使って設定を行う

rubygem を作る

いよいよ作り始めます。
今回は参照URLに倣い gotatestlorem というダミーテキストを生成するgemを例で作っていくことにします。

ASCIIcasts - “Episode 245 - Bundlerでgemを作る”

手順

1. 任意の作業ディレクトリに移動し、gemの元を作る

今回はデスクトップ上で実行しました。

$ bundle gem gotatestlorem
      create  gotatestlorem/Gemfile  
      create  gotatestlorem/Rakefile
      create  gotatestlorem/LICENSE.txt  
      create  gotatestlorem/README.md  
      create  gotatestlorem/.gitignore
      create  gotatestlorem/gotatestlorem.gemspec  
      create  gotatestlorem/lib/gotatestlorem.rb
      create  gotatestlorem/lib/gotatestlorem/version.rb
Initializing git repo in /Users/Username/Desktop/gotatestlorem

2. gotatestlorem.gemspec ファイルをいじる

デフォルトだとこんな感じ。

# coding: utf-8  
lib = File.expand_path('../lib', __FILE__)  
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)  
require 'gotatestlorem/version'  
  
Gem::Specification.new do |spec|  
  spec.name          = "gotatestlorem"  
  spec.version       = Gotatestlorem::VERSION  
  spec.authors       = ["<gotagotagoat>"]  
  spec.email         = ["<gotagotagoat@gmail.com>"]  
  spec.summary       = %q{TODO: Write a short summary. Required.}  
  spec.description   = %q{TODO: Write a longer description. Optional.}  
  spec.homepage      = ""  
  spec.license       = "MIT"  
  
  spec.files         = `git ls-files -z`.split("\x0")  
  spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }  
  spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})  
  spec.require_paths = ["lib"]  
  
  spec.add_development_dependency "bundler", "~> 1.6"  
  spec.add_development_dependency "rake"  
end  

この TODO って書かれてる部分をいい感じに修正。

# coding: utf-8  
lib = File.expand_path('../lib', __FILE__)  
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)  
require 'gotatestlorem/version'  
  
Gem::Specification.new do |spec|  
  spec.name          = "gotatestlorem"  
  spec.version       = Gotatestlorem::VERSION  
  spec.authors       = ["<gotagotagoat>"]  
  spec.email         = ["<gotagotagoat@gmail.com>"]  
  spec.summary       = %q{Lorem ipsum generator [test program]}  
  spec.description   = %q{test program to practice making gem}  
  spec.homepage      = ""  
  spec.license       = "MIT"  
  
  spec.files         = `git ls-files -z`.split("\x0")  
  spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }  
  spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})  
  spec.require_paths = ["lib"]  
  
  spec.add_development_dependency "bundler", "~> 1.6"  
  spec.add_development_dependency "rake", '~> 0'  
end  

こんな感じ。
まあ適当。

3. 作成された lib ディレクトリにある、gotatestlorem.rb に実際のコードを入力する

module Lorem    
  def self.ipsum    
    "Lorem ipsum dolor sit amet, consectetur adipisicing ...."    
  end    
end   

これがダミーテキストを生成してくれるコード。

4. 手順1.で作成されたディレクトリ上でgem buildコマンドを実行し .gemファイルを生成する

$ gem build gotatestlorem.gemspec  
WARNING:  no homepage specified  
WARNING:  See http://guides.rubygems.org/specification-reference/ for help  
  Successfully built RubyGem  
  Name: gotatestlorem  
  Version: 0.0.1  
  File: gotatestlorem-0.0.1.gem  

何やら色々警告されてますが問題なさそうなのでそのままいきます。
ディレクトリの中に gotatestlorem-0.0.1.gem なるファイルが生成されました。

5. 手順1.で作成されたディレクトリの中身をgitのリモートリポジトリに送る

Githubを利用します。
事前にGithub上でリポジトリを作っておいてください。
今回はgotatestloremという名前で作成しました。
念のため一回git initで初期化してから始めます。(<-これやらないとうまくいかなかった・・・orz )

$ git init  
$ git add .  
$ git commit -m "first commit"  
$ git remote add origin git@github.com:gotagotagoat/gotatestlorem.git  
$ git push -u origin master  

6. Rubygems.org にアップロードし公開する

$ gem push gotatestlorem-0.0.1.gem  
Pushing gem to https://rubygems.org...  
Successfully registered gem: gotatestlorem (0.0.1)  

成功しやした。

7. 本当にアップロードされてるか確認する

$ gem search -r gotatestlorem
これで出てきたら本当に成功です。

おわり

細々とした設定はいろいろあるにはあるけれど、今回は省略。
思い出しながら書いてるのでどこか間違ってるかもしれませんが。。。