事象
RailsチュートリアルでHerokuへpushすると、Failed to install gems via Bundler.というエラーが表示され、push出来ない。
原因
pushする前にbundle installを実行していなかったため。
対応
bundle installを実行後、必要なGemがインストールされpush出来る。
なぜbundle installが必要か
bundle installはそのアプリに必要なGemをインストールするため。
bundle installは以下の役割をする。
- Gemfileに書かれたGemをインストールする。
- インストールしたGemに加え、依存関係にあるGemとGemごとのバージョンをGemfile.lockに記載する。
なぜGemfile.lockが必要なのか
複数人で開発する際に、インストールするGemとバージョンを揃えるため。
- Gemfile...そのアプリに必要なGemが記載されたファイル
- Gemfile.lock...Gemfileに記載されたGemに加え、依存関係にあるGemとバージョンが記載されたファイル
Gemは他のGemと結びついていることが多いため、依存関係にあるGemもインストールする必要がある。
bundle installを実行すると依存関係にあるGemを自動でインストールしてくれる。
インストールしたGemとそのバージョンをGemfile.lockに記載することで、他の開発者はbundle installするとGemfile.lockに記載された指定されたバージョンのGemをインストールできる。