環境変数 JULIA_REVISE_POLL=1
を設定しよう
結論としては、環境変数を設定すれば終わりなのですがなぜこれが必要なのかを簡単に説明しようと思います。
Reviseの動作モード
Reviseはコードファイルが変更されたことを検知し、自動で再読み込みしてくれますが、その動作には以下の2つのモードがあります。
受動的監視 (passive)
- 通常は、ファイルシステムが提供する「変更通知」をReviseが受け取って、更新を検知します。
- MacやLinuxなどでローカルディスクが対象の場合は、この仕組みで問題なく動作します。
能動的監視 (active; polling)
- 受動的監視に対応していないファイルシステム(NFSなど)では、Reviseが一定時間ごとに自分でファイルをチェックしに行きます。
- このチェック動作を「ポーリング(polling)」と呼びます。
NFS (Network File System) とは?
NFS (Network File System) は、ネットワーク越しにファイルを共有する仕組みです。
- ローカルディスクにあるデータを、別のコンピュータからあたかも自分の手元のディスクのように操作できるようにします。
- 大学や企業の研究室などのサーバ環境で、ユーザが同じファイルを扱えるようにするためにしばしば利用されます。
- 一方、ネットワーク越しにデータを扱うため、ローカル環境と同じようにはファイル変更通知の仕組みが動作しない場合があります。
なぜNFSでは受動的監視が使えないのか?
NFSなどの一部ネットワークファイルシステムでは、ファイルの変更が起きても、ローカルディスクのようにOSへ「変更通知」が正しく送られない場合があります。Reviseは通常このファイル変更イベントをフックして動作していますが、イベントが届かなければ更新を検知できません。そのためNFSの場合は、Reviseが自力でファイルの更新時刻やハッシュ値を定期的にチェックする「ポーリング」が必要になります。
ポーリングを有効にする方法
NFS上のコードをReviseで監視する際は、ポーリングを有効にすることで問題を回避します。
-
環境変数「JULIA_REVISE_POLL」を"1"に設定する。
例えばbashであれば:
export JULIA_REVISE_POLL=1 -
その後、Juliaを起動し、Reviseをロードしていつも通り開発を進めるだけです。
注意点
- ポーリングを有効にすると、Reviseは一定間隔で複数のファイルをチェックするため、CPU負荷が高くなる可能性があります。
- ローカル環境(Mac/Linux/Windowsなど)で通常のファイルシステムを使う場合は、原則この設定は不要です(受動的監視で問題ありません)。
- 異なるサーバー・複数人で同じファイルを扱うような環境でNFSマウントされている場合には、この設定をすることでReviseが正しくコード更新を検知できるようになります。