よくある質問とトラブルシューティング
🌐 翻訳と貢献: このドキュメントをあなたの言語で翻訳または改善したいですか? 翻訳ガイドライン をご覧ください。
このドキュメントでは、Fish に関するよくある質問、移行手順、トラブルシューティングをまとめています。
よくある質問 (FAQ)
1. Fish は Cargo, npm, go build などを置き換えるものですか?
いいえ。Fish はビルドオーケストレータであり、コンパイラの代替品ではありません。既存のツールチェーン (Cargo, rustc, Node.js, Go, GCC/Clang, dotnet) を連携させ、統合された依存関係グラフを解析し、密閉キャッシュ、並列スケジューリング、リモート実行によってビルドを高速化します。
2. 既存のモノレポを Fish に移行するにはどうすればよいですか?
Fish はマニフェストファイル (Cargo.toml, package.json, go.mod, pyproject.toml, CMakeLists.txt, pom.xml, *.csproj) からプロジェクトを自動検出します。
- プロジェクトのルートディレクトリに移動します。
fish buildを実行してワークスペースを自動検出させます。- (任意)ルートに
fish.tomlを作成し、パイプラインの依存関係やキャッシュパスをカスタマイズします。
3. Fish の CAS キャッシュはどのように動作しますか?
Fish は入力ファイル、ツールチェーンバージョン、環境変数に対して Blake3 フィンガープリントを計算します。タスクが成果物を生成すると、Zstandard で圧縮されてコンテンツアドレス可能ストレージ (CAS) ディレクトリ (~/.fish/cache) に保存されます。入力に変更がない場合、Fish はコンパイラを再実行することなく、Copy-on-Write エクステントやハードリンクを使用して成果物を即座に実体化します。
トラブルシューティングレシピ
問題: ターゲットが意図せず再ビルドされる
解決策:--explain フラグを使用して、ターゲットがダーティと判定された理由を確認します:
fish build --explain主な原因:
- ソースファイルが変更またはタッチされた。
- アップストリームの依存関係の出力ハッシュが変更された。
- 環境変数の違いによりキャッシュが無効化された。
問題: 並列ビルド時のメモリ (RAM) 使用量が高すぎる
解決策: 複数の大規模なクレートや C++ モジュールを同時にビルドすると、メモリ圧迫によりスワップが発生する可能性があります。--ram-limit フラグを使用するか、fish.toml で ram_limit を設定します:
fish build --ram-limit 80Fish のリソースガバナーは、メモリ使用率がしきい値を超えると自動的に並列数を抑制します。
問題: バックグラウンドデーモンのポート競合 (9527)
解決策: ポート 9527 が他のプロセスで使用されている場合は、カスタムポートを指定します:
fish daemon start --port 9588または環境変数を設定します:
export FISH_DAEMON_PORT=9588問題: Windows でのファイルロックエラー (os error 5: Access is denied)
解決策: Windows では、target/debug 内のバイナリを実行しているとファイルがロックされます。Fish を %USERPROFILE%\.cargo\bin にグローバルインストールしてください:
cargo install --path crates/fish-cli --forceその後、任意のディレクトリから fish コマンドを直接実行します。