bundle execとはなんなのか
プログラミングを本格的にスタートして5ヶ月目に入りましたさかもとです。
今回はbundle execを使用する意味が曖昧だったのでアウトプットしていこうと思います。
今回のエラー
The `rubocop' command exists in these Ruby versions:
2.6.3
2.6.4
rubocopを導入しファイルを生成するためにgithubを参照しながらgemを入れbundleし、rubocop --auto-gen-configをターミナルで打ったところ上記エラーが発生しました。
思考
初めて見るものだったのでとりあえずエラーメッセージを見てみるとどうもこのrubyのバージョンでこのコマンドは使えません。下記環境でなら使えます。という風に読み取りました。
今回の私の環境はruby 2.6.5だったので環境にあってないのだと考えます。
そこで調べていると環境変数を変えるなどの記事は見受けられますが以前入れた時のことを思い出すとbundle execを使用したなと思い調べた。
bundleって?
プロジェクトの中でgemのバージョンを管理します。
ツールの名前としてはbundler、コマンドはbundle.
bundle execとは
gem file内で指定されている全てのgemを実行可能にし、そのコマンドの利用も実行可能にします。
bundle execの有無で何が違うの?
有
現在開発を行っているプロジェクト内でコマンドを実行する。
gemfileに応じたバージョンを実行するためにrails〜のようなコマンド以外は基本的にbundle execを使用
無
rbenvで指定したrubyのバージョンに応じたシステム共通のコマンドが実行される。仮にシステム共通のものがなかった場合rails〜は使用されない。
解決
結論からいくと
bundle exec rubocop --auto-gen-config
こちらで無事作成されました。
rubocop特有のコマンドだったためgemでインストールした場合、gemfileのバージョンに応じて使用しなくてならなかった。システム共通のライブラリの保存場所を環境下にしてコマンドが実行されてしまっていたのでは。
というのが現段階の私の考えです。
正直曖昧な部分も多いので今後、追記していこうと思います。
参考文献
bundle exec | Bundler日本語ドキュメント | Ruby STUDIO
【Rails】結局bundlerって何?bundlerの仕組みを図解形 | Pikawaka - ピカ1わかりやすいプログラミング用語サイト
rbenv環境で特定バージョンのコマンドを実行する(特にrubocop) - None is None is None