2016年9月28日水曜日

独自 Gem の作成方法

概要

かなり既出な情報ですが、Ruby のライブラリ gem を作成する方法をまとめました
とりあえずローカルでインストールするところまでとなります

環境

  • Mac OS X 10.11.6
  • Ruby 2.2.3p173
  • Gem 2.4.5.1
  • Budler 1.11.2
  • Rake 11.2.2

手順

fstlib という gem を作成していきます
今回は bundler と rake を使って作成していくので事前に作成しておいてください

雛形の作成

  • bundle gem fstlib

一番初めだけ「テストの方式」「公開時のライセンス形態」「コード規約を含めるか」を聞かれます
基本は全部デフォルトのままで OK です
問題なく作成できれば以下のファイル群が作成されます

Creating gem 'fstlib'...
MIT License enabled in config
Code of conduct enabled in config
      create  fstlib/Gemfile
      create  fstlib/.gitignore
      create  fstlib/lib/fstlib.rb
      create  fstlib/lib/fstlib/version.rb
      create  fstlib/fstlib.gemspec
      create  fstlib/Rakefile
      create  fstlib/README.md
      create  fstlib/bin/console
      create  fstlib/bin/setup
      create  fstlib/LICENSE.txt
      create  fstlib/CODE_OF_CONDUCT.md

続いてメタ情報を修正していきます

  • cd fstlib
  • vim fstlib.gemspec

TODO となっている箇所を修正します

spec.authors       = ["hawksnowlog"]
spec.email         = ["hawksnowlog@gmail.com"]
spec.homepage      = "http://hawksnowlog.blogspot.com/"

...

spec.summary       = %q{This gem is a test.}
spec.description   = %q{This gem is a test.}

allowed_push_host の設定の部分は https://rubygems.org/ 以外で gem を公開するときに設定が必要になるので、不要な場合は行を削除してください

# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
# delete this section to allow pushing this gem to any host.
if spec.respond_to?(:metadata)
  spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
else
  raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
end

最低限の設定は以上で OK です

ライブラリの作成

では、実際に独自のライブラリを作成していきましょう

  • vim lib/fstlib.rb
require "fstlib/version"

module Fstlib
  def self.hello
    "Hello in Fstlib"
  end
end

「Hello in Fstlib」と表示するだけの hello という関数を定義しました

irb で動作確認

gem ファイルにする前に一旦 irb コマンドで動作確認できます

  • bundle exec irb
irb(main):001:0> require 'fstlib'
=> true
irb(main):002:0> Fstlib.hello
=> "Hello in Fstlib"

こんな感じになれば問題ないので gem の形にしていきます

ビルド

  • rake build
  • ls pkg/
fstlib-0.1.0.gem

rake -T でタスクの一覧を確認することができます
pkg 配下に gem が作成されれば OK です

インストール

ビルドして作成できた gem ファイルをローカルからインストールします

  • gem install -l pkg/fstlib-0.1.0.gem
Successfully installed fstlib-0.1.0
Parsing documentation for fstlib-0.1.0
Installing ri documentation for fstlib-0.1.0
Done installing documentation for fstlib after 0 seconds
1 gem installed
  • gem list | grep fstlib
fstlib (0.1.0)

こんな感じでインストールすることができます

動作確認

  • irb
irb(main):001:0> require 'fstlib'
=> true
irb(main):002:0> Fstlib.hello
=> "Hello in Fstlib"

今度は bundler 経由で irb を実行しないでも require することができるようになりました

Tips

バージョンアップする

  • vim lib/fstlib/version.rb
module Fstlib
  VERSION = "0.1.1"
end

で再度ビルドすれば「fstlib-0.1.1.gem」というファイルが作成されます

依存ライブラリを定義する

  • vim fstlib.gemspec
spec.add_runtime_dependency 'sinatra'

と 1 行追加しましょう
すると lib/fstlib/version.rb の中で require "sinatra" できるようになります

最後に

ローカルで gem を作成してインストールする方法を紹介しました
次回はアカウントを作成して rubygems で公開するところまでやってみたいと思います

参考サイト

0 件のコメント:

コメントを投稿