🖥
Ruby — 自作 gem の実行コマンドを作る手順
$ bundle gem yourgem
で作成したディレクトリ内で作業する前提。
$ cd /path/to/yourgem
exe ディレクトリに Ruby ファイルを作って実行権限をつける
$ mkdir exe
$ touch exe/yourgem
$ chmod +x exe/yourgem
実行ファイルを置く場所は gemspec
の指定に準じる。
spec.bindir = "exe"
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
Rubyファイルの中身
バイナリではなくRubyスクリプトをコマンド化させる。
/path/to/yourgem/exe/yourgem
#!/usr/bin/env ruby
require 'yourgem'
puts Yourgem.to_s
「ユーザーの環境にRubyが入ってなかったらどうするの?」という考えが0.1秒頭をよぎったが、
gem
使うユーザーは全員Rubyインストールしてるよね。
なのでRubyスクリプトがコマンドで何の問題もないのだ。
gemをビルド
gem 専用の rake タスクで build する。
$ bundle exec rake build
yourgem 0.1.0 built to pkg/yourgem-0.1.0.gem.
ビルドした gem をインストール
gem の素の環境にインストールする。
$ gem install pkg/yourgem-0.1.0.gem
( bundle exec rake install
では素のコマンドは入らない様子 )
ビルドなしで直接実行する場合
bundle exec ruby exe/yourgem
実行可能なコマンドが爆誕
当たり前だが gem のディレクトリにいるかどうかなど関係ない。
$ yourgem
Yourgem
ここらへんに入っていたりする。
$ which yourgem
/Users/yuma/.rbenv/shims/s2m
環境
- gem 2.7.6
- Bundler version 1.16.2
- ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]
あわせて読みたいと思う魔法をあなたにかけました
- はじめての Ruby gem 作成が死ぬほど簡単で笑えた件 (失敗談もあるよ) - Qiita
- rubyプロジェクトのbin/console, bin/setup はバイナリじゃなくスクリプトだった - Qiita
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2018-07-19
Discussion