node_modulesまでDockerでマウントしないほうがいいかもという話
Photo by Clément Hélardot on Unsplash
どうもみなさんこんにちは。株式会社イプシロンソフトウェアで代表をやっております、渡部です。私はメインのマシンではWindowsを使っておりまして(macOSもLinuxも触りますが)、開発はWindows環境で行うことが多いです。まだまだ現役でコードを書いておりますので、現場の人にとって働きやすい環境が整っているかと思います(きっと)。弊社ではご一緒に働いてくれる仲間を探しておりますので、もしご興味ある方がおられましたら下のリンクから話を聞きに来ていただければ喜びます。
WindowsでDockerを使うとディスク関連でトラブることが多い
WindowsでDockerを使って開発を行っているとディスク関連でトラブることがよく起こります。
- WindowsのDocker環境でnpm install実行時にエラーが出た場合の対処法メモ
- npm installでi/o error【Windows, Docker, Webpack】
- [Docker-Toolbox]npm install, yarn installに失敗する
- I/o error on mounted directory
手元で開発するときは開発中のディレクトリそのものをそのままマウントして手元のファイルと同期しながら開発していくことが(私の場合は)多いです。こうすると開発用コンテナの中のファイルをいじったらそのまま手元のファイルに変更が伝播することになるのでコミット漏れなどの問題が起きにくくなります。
ただ、npmやyarnを実行したときに出力されるnode_modulesディレクトリもマウントされているディレクトリの下にできてしまうことになります。WindowsのDockerで開発用ディレクトリをマウントしたままnpm installだとかを行ってnode_modulesに入れようとするとトラブルが起こってしまうことがあります。どういう感じでエラーが出てくるかはそのときどきですがこんな感じです。
An unexpected error occurred: "EIO: i/o error, copyfile '/usr/local/share/.cache/yarn/v6/npm-bootstrap-icons-1.10.5-5a1bbb1bb2212397d416587db1d422cc9501847c-integrity/node_modules/bootstrap-icons/icons/7-square-fill.svg' -> '/app/node_modules/bootstrap-icons/icons/7-square-fill.svg'".
node_modulesのマウントを外せばいいじゃない
今回は、あくまでも目的が開発したファイルのコミット漏れを防ぐという意図がありました。そのためにマウントしているディレクトリ配下にnode_modulesが出来てしまい、node_modulesのためにトラブルが頻発しているようであれば、node_modulesのディレクトリだけをマウントから外せばいいかなと思っていろいろ調べてみたらまさにドンピシャの記事がいくつかありました。
私のケースではこれらの内容を参考にしたところエラーも解消され問題もなくなりました。コードとしてはStack Overflowのものと似せた感じで書いています。
用法用量は守ってください
今回のわたしのケースではnode_modulesを外すことで特に開発的には問題なくなりました。ただ、環境によってはnode_modulesを本体のマウントから外してしまうとエディタの補完が効かなくなってしまったりとか副作用も起こってしまうかもしれません。理解した上でやるべきかやらないべきかご判断いただければと思います。