概要
かなり既出な情報ですが、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 で公開するところまでやってみたいと思います
一点はまったのですが rake build して作成される gem に含まれる対象のファイルは git commit 済みのものだけになります
返信削除なので新規にファイルを追加した場合には必ず git commit してから rake build してください
gem を作成したのに unpack すると中身にファイルがない状態になってしまいかなりハマリました、、、