0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rails × Electron モノレポでやらかした node_modules の事故と教訓

Last updated at Posted at 2025-06-21

こんにちはエンジニア薬剤師の和(かず)です。

最近、Rails プロジェクトに Electron や Next.js を統合してモノレポ運用を始めたところ、思わぬ落とし穴にハマりました。

駆け出しすぎるミスに自身で驚愕しました。

経緯とハマりポイント

Electron / Next.js のようなフロントエンド中心のフレームワークと Rails を monorepo 構成で統合する際、node_modules/ の扱いに注意が必要です。

筆者は GitHub の 1ファイル100MB制限 を知らず、Electron の node_modules/ をまるごと commit & push してしまい、push エラーに…。

remote: error: File node_modules/xxxxx is 161.15 MB; this exceeds GitHub's file size limit of 100.00 MB

最終的には git filter-repo を使って履歴から除去したり、git cloneして新たにディレクトリ作成したりと、なんとか復旧しました。

Railsで node_modules/ が .gitignore に無い理由は?

Next.js などでは初期状態で .gitignorenode_modules/ が含まれていますが、Rails ではそうではありません。

ここで疑問がわきました。
「最近は Rails でも Stimulus や Turbo を使って JS も書くのに、なんで標準で gitignore に設定されてないの?」

調べてみたところ、Rails側の思想が見えてきました。

RailsのJS管理戦略は複数存在する

Railsではプロジェクトによって JS をどう扱うかが異なります。

ライブラリ 概要 node_modules/ 必要か
importmap-rails CDNやローカルからESMで読み込み ❌ 不要
jsbundling-rails (esbuild/webpack等) npm経由でJS管理・ビルド ✅ 必要
Propshaft 静的アセット配信 ⚠️ 使い方次第
hotwired/stimulus, turbo-rails Importmap or npm経由で導入可能 構成依存

※ 上記はGPTにまとめてもらいました。こういうまとめ資料作りにの時ほんと助かる...

つまり、「JSをどう扱うかはプロジェクト次第」 という思想が前提にあり、Rails本体は.gitignorenode_modules/ を強制していない、というのが理由のようです。
まぁよく考えたらそうなのですが..

それでも .gitignore に含めた方がいい理由

とはいえ、以下の理由から 最初から
.gitignore/node_modules を含めておくのが安全 です:

  • 後から esbuild や webpack へ移行する可能性がある
  • node_modules/ は非常に重く、誤って push すると復旧が面倒
  • Electron や Next.js を統合する際には必須で .gitignore 対象
  • GitHub は 1ファイルあたり 100MB 上限。CI/CD にも影響

結論と運用上のベストプラクティス

個人的見解はこんな感じです。

パターン .gitignore/node_modules を追加すべき?
Rails 単体で importmap を使うだけ ❌ 必須ではないが、追加しても問題なし
今後 esbuild などを使うかも ✅ 最初から含めておくと安全
モノレポ構成(Electron / Next.js 同梱) ✅ 必須。全体の .gitignore に記載を推奨

最後に: GitHubの制限と git filter-repo の活用

今回の経験を通じて、以下の2点も強く意識するようになりました。

node_moduleをgit管理しない理由

もっというと、yarn.lock とかでバージョンをきちんと管理して、そのバージョンを yarnpkg.com 等で管理してくれているので git のような VCS でさらに管理する必要が無いからというのが根本としてありそうですね。

まとめ

モノレポ構成で Rails とフロントエンドを組み合わせる際は .gitignore の設定を慎重に行うことが重要です。

特に node_modules/ の扱いは、小さな見落としが後々のトラブルにつながるため、チームでルールを定めて運用するのが良さそうですね。

また、個人開発なのでいろんな方のご意見いただきたいなと思いました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?