レ点腫瘍学ノート

Top日記2025年12月28日

iCloud Drive内でClaude Codeが遅い問題を解決した件

&tag(AI,claudecode)

e1df54e2dc.png

Obsidian をiCloud Drive 内で運用していると、ターミナルで Claude Code を起動する度に、1分以上かかるという問題が発生していました。iCloud 外のディレクトリでは素早く起動するのに、iCloud 内では待たされる。この差が何なのか、ずっと謎でした。

試しに設定ファイルを修正してみたり、環境変数を調整してみたり。いくつか試しましたが、劇的な改善は見られませんでした。ところが、根本原因を特定して対策を実施したら、あっという間に高速化しました。その過程で分かった知見をメモしておきます。

問題の背景:iCloud Drive の特性

iCloud Drive は便利ですが、その仕組みが起動遅延の原因になっていました。iCloud Drive のファイルは、ローカルディスクにはメタデータだけが保存され、実際のファイル内容は必要になった時にダウンロードされます(オンデマンドダウンロード)。ディスク容量が節約でき、クラウドとローカルの同期が自動で行われるのは便利です。同様の仕組みはDropBoxやOneDriveやGoogle Driveにもあります

ところが、ツールがファイルシステムをスキャンする際には、このメタデータ確認や軽量ダウンロードが何度も発生します。通常のローカルディスク上のファイルなら数ミリ秒で済む操作が、iCloud Drive 経由だと遅延が重なります。Claude Code も起動時に大量のファイルスキャンを行うため、この遅延に直撃されていたわけです。

問題の原因

いくつかのディレクトリサイズを確認してみました。

`.git` フォルダ:24MB
`.obsidian` フォルダ:92MB

合計で116MB のメタデータを、Claude Code が初期化時にスキャンしていたことになります。iCloud Drive 経由でこのボリュームをアクセスするのですから、遅いわけです。

ただし、これだけが原因ではありませんでした。より直接的な原因がありました。プロジェクトの `.claude/settings.json` に書かれていた SessionStart フック です。これは以前にIDEが読み込めないエラーを解決するために組み込んでいた(Claude Codeに組み込んでもらっていた)ものです。

```
{

 "hooks": {
   "SessionStart": [
     {
       "hooks": [
         {
           "type": "command",
           "command": "claude /ide"
         }
       ]
     }
   ]
 }

}
```

セッション起動の度に、自動で `claude /ide` というコマンドが実行されていました。これ自体も処理が重く、毎回呼ばれるので起動時間に顕著に影響していたようです。

実施した対策

1. SessionStart フック削除

まずこのフックを削除しました。IDE を起動したければ、必要な時に手動で `claude /ide` を実行すればいいわけです(面倒ですが)。

```.claude/settings.json
{

 "hooks": {}

}
```

これだけで、セッション起動時の余分な処理が削除されます。

2. 高速ファイル提案スクリプト作成

Claude Code が起動時に使用するファイル提案機能も、大量のメタデータを参照しています。ここを最適化しました。

`~/.claude/fast-file-suggestion.sh` という新しいスクリプトを作成し、Obsidian キャッシュと Git メタデータを提案対象から除外するようにしました。

```bash

#!/bin/bash

# 除外パターン
exclude_patterns=(

 ".obsidian"
 ".git"
 "node_modules"
 "dist"
 "build"
 ".next"
 ".cache"

)

# exclude args を構築
exclude_args=()
for pattern in "${exclude_patterns[@]}"; do

 exclude_args+=("--exclude" "$pattern")

done

# ripgrep で高速検索
rg --files --hidden --no-ignore "${exclude_args[@]}" 2>/dev/null | \

 grep -i "$query" | \
 head -20

```

.obsidian と .git の 116MB をスキャン対象から外すことで、初期化時間が大きく短縮されます。

3. グローバル設定で自動使用

このスクリプトを、グローバルの `~/.claude/settings.json` に登録しました。

```
"fileSuggestion": {

 "type": "command",
 "command": "/Users/tgoto/.claude/fast-file-suggestion.sh"

}
```

こうすることで、すべてのプロジェクトで自動的にこの高速ファイル提案スクリプトが使用されます。

4. .gitignore 強化

Obsidian キャッシュと iCloud 同期ファイルを `.gitignore` に明示的に追加しました。

```

# iCloud sync files

.icloud

# Large cache directories that slow down Claude Code
.obsidian/

obsidian/
```

これにより、Git 関連の処理でこれらディレクトリがスキャン対象にならなくなります。

5. Git リポジトリの最適化

最後に、Git リポジトリ自体のメンテナンスを実施しました。

```bash
git gc --aggressive --prune=now
```

このコマンドにより、Git オブジェクトが最適化され、メタデータサイズが 24MB から 22MB に削減されました。2MB の削減ですが、iCloud 環境では重要です。

結果:何が変わったか

施策の実施後、Claude Code の起動時間が大幅に短縮されました。それまで 1分以上かかっていた起動が、今は数秒で完了します。体感として劇的な改善です。毎日使うツールなので、この差は大きい。

何が決め手だったかと言えば、特に SessionStart フック削除と高速ファイル提案スクリプトの組み合わせだと考えます。116MB のディレクトリスキャンを回避しつつ、セッション起動時の余分な処理も削除することで、相乗効果が生まれたのでしょう。

クラウドストレージ内での開発は、ローカルディスク上での開発とは異なる最適化が必要だということです。当たり前のように思うかもしれませんが、開発ツールのデフォルト動作は往々にしてローカル環境を前提に設計されています。iCloud Drive のオンデマンドダウンロード機能は便利ですが、ファイルシステム操作が頻繁なツール(特に検索やインデックス作成を行うツール)を使う際には、不要なスキャンを徹底的に削減する必要があります。

もう一つ重要なのは、パフォーマンス問題の原因を推測で対策するのではなく、実際にディレクトリサイズを確認したり、設定内容を精査したりして、根本原因を特定することです。表面的な設定調整より、不要な処理を削除する方が効果的でした。

他の環境でも応用可能か

このアプローチは、iCloud Drive に限った話ではありません。Dropbox や Google Drive など、他のクラウドストレージを使っている場合にも同様の遅延が生じるかもしれません。また Claude Code に限らず、VSCode や他のエディタ・開発ツールでも、同じようなスキャン遅延が起こり得ます。その場合も、除外設定やスクリプト化によって改善できる可能性があります。クラウド環境で開発するなら、ツールの動作を一度は詳しく観察してから使い始めることをお勧めします。

まとめ

iCloud Drive 内での Claude Code 起動が遅い問題は、完全に解決しました。後年に「あ、あの時はこういう工夫をしてたな」と思い出せるよう、ここに記録しておきます。

技術的な試行錯誤も大事ですが、設定ファイルを見直して不要な処理を削除する方が、往々にして効果が大きいという教訓ですね。開発環境の最適化は地味ですが、毎日の生産性に直結する重要な作業です。


この記事に対するコメント

このページには、まだコメントはありません。

お名前:

更新日:2025-12-28 閲覧数:236 views.