$ bundle gem mygem
とすると、rubygemsの雛形が作れてとても捗るのですが
実行ファイルを配置する場所が、bin から exe に変更されていました。
spec.bindir = 'exe' spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
$ bundle --version Bundler version 1.10.6 $ bundle gem mygem Creating gem 'mygem'... create mygem/Gemfile create mygem/.gitignore create mygem/lib/mygem.rb create mygem/lib/mygem/version.rb create mygem/mygem.gemspec create mygem/Rakefile create mygem/README.md create mygem/bin/console create mygem/bin/setup create mygem/.travis.yml
調べてみると
Bundler: Bundler template moves bins to exe
に記載がありました。
Bundler 1.8 から仕様が変わったようで
要は開発用の実行ファイルを置く場所を bin
にして、 公開用を exe
にしようぜということらしいです。
このconvensionは Rspec でも取り入れているようでして、上記記事はリンク切れしているので以下を覗いてみると
確かにそうなっています。
rspec-core/rspec-core.gemspec at master · rspec/rspec-core
そして
bundle gem で生成したtemplateでは、 bin以下に console と setup が生成されています。
それぞれ、中身を確認すれば一目瞭然ですが
setupは、開発に必要な環境を整える(bundle install)を実行し、
consoleは、必要なものをrequireしてirbを実行しているだけです。
ちなみに、setupに記載されている以下は
set -euo pipefail
・「 exit code が 0 じゃなきゃダメ」 ・「未知の変数があったらダメ」 ・「 pipe でつないだ時に途中の pipe で躓いてもダメ」
だそうです。pipefail 知らんかった。
シェルスクリプトマナー - きつねたぬきだし
一応
従来通り、binを使う方法も公式に記載があります。
spec.executables = "new_gem"