GitHub Desktopでコミットできない。〜Argument list too long〜


どんな問題

開発中のアプリで、bundle install実行後、GitHub Desktop上でコミットをプッシュしようとしたところ、次のようなエラーが発生。

エラー文を見てみると、

Commit failed -exit code 1 recerved with output: 'User/~~~

Argument list too long'

と表示されています。

注目するのは「Argment list too logn」の部分です。これは「コマンドへ渡す引数の数が多すぎです」という意味です。(ファイルが7000個以上もコミット対象に上がっている・・・)

ここでコミットしようとしているファイルをよく見てみると、

✅ Gemfile
✅ Gemfile.lock
✅ vendor/bundle/ruby/2.6.0/bin/byebug
✅ vendor/bundle/ruby/2.6.0/bin/coderay
✅ vendor/bundle/ruby/2.6.0/bin/geocode
✅ vendor/bundle/ruby/2.6.0/bin/kisten


こんな感じで、bundle installでインストールしたgemがvendorディレクトリ内に保存されていることがわかります。

前提条件

macOS 10.15.4
ruby 2.6.5

発生した経緯

前回のbundle install時に

% bundle install --path vendor/bundle

こちらのコマンドを入力してしまっていたことが原因で、venderディレクトリ内のbundleディレクトリにgem関係が格納されてしまったから、だと思われます。

対処

①vendorのbundleディレクトリを手動で削除する。

bundle install --path vendor/bundleを実行後、vendorディレクトリ内にbundleディレクトリが作成されるので、それを手動で削除します。

この、「bundle/ruby/2.6.0」指定して、まるっと削除します。

削除後はこんな感じになります。

②BUNDLE_PATHを修正する(削除する)

bundle install --path vendor/bundlekコマンド入力後、
下の画像の通り、.bundleディレクトリのconfigファイルにvendorへのBUNDLE_PATHに書き換えられてしまいます。

こちらのBUNDLE_PATH: "vendor: 'vendor/bundle"をまるっと削除します。
削除後は下のようになります。

③vendorを.gitignore内に記述し、bundleをvenderに入れないように設定する。

最後に、今後vendorのbundle内にファイルを入れないように、.gitignoreファイル内に以下の記述を追加します。

.gitignoreファイル
vendor/bundle

この記述を行い、vendor/bundleをコミット対象から除外するように設定します。

④改めてbundle installを行う

最後に、改めてbundle installを行ってみます。

ターミナル
% bundle install

実行後GitHub Desktopを再度確認すると、

vendor/bundle内のファイルがコミット対象から外れ、コミットエラーが解消されます。

最後に

今回のエラーの発端は bundle install時に --path vendor/bundle とpathを指定してしまっていたことです。
pathの指定をすべきか?orしなくても良いか?という議論はあるみたいですが、基本的に指定しなくても問題ないみたいです。(特定の条件の場合は問題が生じるためpathを指定しないといけない場合もあるみたいです。)

こちらの記事が参考になります。

(Qiita)bundle install時に--path vendor/bundleを付ける必要性は本当にあるのか、もう一度よく考えてみよう
https://qiita.com/jnchito/items/99b1dbea1767a5095d85#201967%E8%BF%BD%E8%A8%98-%E9%80%86%E3%81%ABpath%E3%82%92%E4%BB%98%E3%81%91%E3%81%AA%E3%81%84%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%A3%E3%81%A6%E4%BD%95%E3%81%8B%E3%81%82%E3%82%8B%E3%81%AE

以上、最後まで見ていただきありがとうございました。(間違い等ございましたらご指摘いただけますと助かります!)

参考文献
https://teratail.com/questions/283421
https://techacademy.jp/magazine/10179