@vividmuimui
2017/10/05 社内LT
このスライドは、基本的にはこの発表をなぞっています
http://rubykaigi.org/2017/presentations/0xColby.html
youtube:
https://www.youtube.com/watch?v=sZX7SK3hxk4
speakerdeck:
https://speakerdeck.com/colby/what-weve-been-up-to-with-bundler
rfc#6:
https://github.com/bundler/rfcs/pull/6
skip
$ bundle add rspec
# Gemfile
# Added at 2017-10-04 00:17:42 +0900 by vividmuimui:
gem "rspec", "~> 3.6"
以下のようにオプションも指定できる
$ bundle add rails --version "~> 5.0.0" --source "https://gems.example.com" --group "development"
botとかなら使いみちあるかも?
module MyBundlerPlugin
class Plugin < Bundler::Plugin::API
command "new-command"
def exec(command, args)
puts "Hello World"
end
end
end
$ bundle new-command
Hello World!
という感じで、新しいコマンドを用意できる
ほかにも、以下のようにも出来たりするみたい
Bundler::Plugin::API.hook "before-install-all" do |deps|
puts "Installing #{deps.map(&:name).join(', ')} 👍!"
end
$ bundle install
Installing rack 👍!
Using bundler 1.15.4
...
...
作成したpluginのinstallは以下の感じ
$ bundle plugin install my-bundler-plugin
# Gemfile
plugin 'my-bundler-plugin'
まだまだ、plugins
に関してはまだまだ機能もdocumentもbugfixも足りてないらしい
bundle show
bundle viz
bundle console
--with --without --path --system
bundle package
いくつかかいつまんで紹介
skip
gem "rack", github: "user/repo"
gem "rack", bitbuket: "user/repo"
といったshortcut
がなくなり、以下の書き方をするようになる
gem "gem1", source: "https://mygemserver.private"
gem "gem2", git: "https://github.com/user/repo.git"
gem "gem3", path: "path/to/gem"
ただ、今まで書いていたようにgit_source
を書いておけばgithub: "user/repo"
も書ける
git_source(:github) do |repo_name|
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
"https://github.com/#{repo_name}.git"
end
gem "rack", github: "user/repo"
現状のbundle show
は機能がたくさんあり複雑
bundle info
bundle list
の2つのコマンドに分割
pluginとして切り出される
$ bunldle plugin install bundle-viz
skip
オプション引数を自動で記録する処理がなくなる
たとえば、今は以下のコマンドを実行すると、今は自動でconfigファイルにpath=foo
を記録されるが、されなくなる
$ bundle install --path foo
毎回常にoptionを指定するか、以下のようにconfigを明示的に設定する必要がある
$ bundle config path foo
bundle install
での上記optionを削除
代わりにbundle config
を使う
bundle package
からbundle cache
に変更
Removingに比べて少ない
複数アプリケーションで同じgemを使っていたり、
複数rubyバージョンで同じgemを使っているときにinstallが高速化される
難しくてよくわかんなかった><
今はbundle install
が実行されるが、usageが表示されるようになる
今は、
$ bundle update
で全gemのupdateが走るが、明示的に指定する必要がある
$ bundle update <gem-name>
$ bundle update --all
のどちらかになる
下位互換はないので注意する必要がある
bundler2
でbundle install
したらbundler1
では動かない
なので、チームメンバーの足並み合わせて、せーのであげる必要がある
(複数プロジェクトを担当していて、同じrubyバージョンを使っている場合は、プロジェクトをまたいでも足並み揃える必要があるかも?)
bundler2
でbundle init
した時に生成されるファイルはgems.rb
になる
Gemfile
,
Gemfile.lock
は普通に使える
gems.rb
とGemfile
が両方存在していたときは、gems.rb
が優先される
どのbundlerのバージョンが入るかはhsbtさんと相談と言っていたように聞こえた
でも、2系になりそうな雰囲気だった(曖昧)
rubyのリリースのように毎年年末あたりにメジャーリリースが行うようになる
rubyのサポートのバージョンを変えたり、古い機能を削除したりなど
rfc#6 見てて気になったやつ
bundle install
した時のデフォルトのインストール先が./.bundle
以下になる