エンジニアを目指す日常ブログ

日々勉強したことのメモ。独学ですので間違っていたらコメント等で教えてください。

gatsby developで出たエラーの対処法

はじめに

Gatsbyを利用してWebサイトを作成していた際、gatsby developコマンドを実行時に発生したエラーの対処方法。

エラーの内容

実行したコマンド

$ gatsby develop

発生したエラー

 ERROR 

UNHANDLED REJECTION ENOSPC: System limit for number of file watchers reached, watch
'[フォルダ名省略]/gatsby-starter-blog/gatsby-config.js'



  Error: ENOSPC: System limit for number of file watchers reached, watch ''[フォルダ名省略]/gatsby-starter-blog/gatsby-confi
  g.js'
  
  - watchers:244 FSWatcher.
    node:internal/fs/watchers:244:19
  
  - node:fs:2247 Object.watch
    node:fs:2247:34
  
  - nodefs-handler.js:119 createFsWatchInstance
    [gatsby-starter-blog]/[chokidar]/lib/nodefs-handler.js:119:15
  
  - nodefs-handler.js:166 setFsWatchListener
    [gatsby-starter-blog]/[chokidar]/lib/nodefs-handler.js:166:15
  
  - nodefs-handler.js:331 NodeFsHandler._watchWithNodeFs
    [gatsby-starter-blog]/[chokidar]/lib/nodefs-handler.js:331:14
  
  - nodefs-handler.js:395 NodeFsHandler._handleFile
    [gatsby-starter-blog]/[chokidar]/lib/nodefs-handler.js:395:23
  
  - nodefs-handler.js:637 NodeFsHandler._addToNodeFs
    [gatsby-starter-blog]/[chokidar]/lib/nodefs-handler.js:637:21
  
  - index.js:451 
    [gatsby-starter-blog]/[chokidar]/index.js:451:21
  
  - async Promise.all

原因

Linuxで監視できるファイル数上限を超えているとのこと。

対処方法

案①:キャッシュを削除する

キャッシュを削除する。

$ gatsby clean

./cacheフォルダを削除する動作。

案②:ファイル数上限を上げる

以下サイトに従ってコマンドを実行。

参考資料: listen/README.md at master · guard/listen · GitHub

設定値の確認

$ cat /proc/sys/fs/inotify/max_user_watches
8192

設定値の一時的変更

$ sudo sysctl fs.inotify.max_user_watches=524288 
fs.inotify.max_user_watches = 524288
$ sudo sysctl -p

永続的にパラメータを変更(私の環境では未実施)

$ sudo sh -c "echo fs.inotify.max_user_watches=524288 >> /etc/sysctl.conf"
$ sudo sysctl -p
  • sysctlカーネルのパラメータを実行時に修正するのに用いるコマンド。
  • sysctl -p [ファイル]で指定したファイルの設定を読み込み反映する。ファイルを指定しない場合は/etc/sysctl.confが読み込まれる。永続的に変更する際は必須だが、一時的な変更の際はおそらくやらなくても良い。
  • sh -c " コマンド "シェルスクリプトを一行だけ実行したいときに使うコマンド。
  • echo [内容] >> [ファイル]は内容をファイルに追加で書き込んでいる。

参考資料: sysctl - システム管理コマンドの説明 - Linux コマンド集 一覧表

おわりに

案①では解決せず、案②で一時的に設定変更することでgatsby developを実行できた。