原文(日本語訳)
VSCode: 過去の会話リスト読み込み時にスピナーを追加しました
原文(英語)
VSCode: Added spinner when loading past conversations list
概要
VS Code 版 Claude Code において、過去の会話履歴リストを読み込む際にスピナー(読み込みインジケータ)が表示されるようになりました。これにより、特に多数の会話履歴がある場合のユーザー体験が向上し、読み込み中であることが明確になります。
背景:読み込みフィードバックの重要性
v2.1.31 以前の問題:
問題:
- 会話履歴リストを開いても何も表示されない
- 読み込み中かフリーズしているか判別できない
- 多数の会話がある場合、数秒間何も反応がない
ユーザーの困惑:
「動いているの?」
「クリックが効いていない?」
「もう一度クリックすべき?」v2.1.32 以降の改善:
改善:
✓ スピナーが表示され、読み込み中であることが明確
✓ 進行状況のフィードバックがある
✓ ユーザーは安心して待てる基本的な使い方
会話履歴リストを開く
VS Code で Claude Code パネルを開く
↓
パネル上部のドロップダウンをクリック
↓
スピナーが表示される(読み込み中)
↓
会話リストが表示されるまたは、コマンドパレットから:
Cmd+Shift+P (macOS) / Ctrl+Shift+P (Windows/Linux)
> Claude Code: Show Past Conversations
↓
スピナー表示
↓
会話リスト表示実践例
少数の会話履歴
会話数: 10-20 件程度
読み込み時間: < 1 秒
スピナー表示: ほぼ瞬時に会話リストが表示される中程度の会話履歴
会話数: 50-100 件程度
読み込み時間: 1-3 秒
スピナー表示: 明確に表示され、進行状況がわかる
UI 表示例:
┌─────────────────────────────────┐
│ Past Conversations │
├─────────────────────────────────┤
│ 🔄 Loading conversations... │
│ │
└─────────────────────────────────┘多数の会話履歴
会話数: 200+ 件
読み込み時間: 3-10 秒
スピナー表示: 継続的に表示、ユーザーは待機中を認識
以前の問題(v2.1.31):
- 無反応に見える
- ユーザーがフリーズと勘違い
- 複数回クリックして状況悪化
v2.1.32 の改善:
✓ スピナーで読み込み中を明示
✓ ユーザーは安心して待機
✓ 不要な操作を防止スピナーの表示シーン
初回起動時
VS Code を開く
↓
Claude Code 拡張機能を初めて使用
↓
会話履歴を開く
↓
スピナー表示「Indexing conversations...」リモート会話の同期
OAuth 認証済みユーザー:
- claude.ai の会話履歴も取得
- ローカルとリモートの会話を統合
- スピナー表示「Syncing remote conversations...」フィルタリング時
会話リスト内で検索:
1. 検索ボックスにキーワード入力
2. スピナー表示(フィルタリング中)
3. 結果表示
例:
検索: "API implementation"
↓ スピナー表示
結果: 15 件の会話がマッチUI の詳細
スピナーの種類
状態によって異なるメッセージ:
1. 初期読み込み:
🔄 "Loading conversations..."
2. リモート同期:
🔄 "Syncing with claude.ai..."
3. インデックス作成:
🔄 "Indexing conversation history..."
4. フィルタリング:
🔄 "Searching conversations..."読み込み完了後の表示
┌─────────────────────────────────────┐
│ Past Conversations 🔍 │
├─────────────────────────────────────┤
│ Today │
│ ├─ Fix authentication bug 10:30 │
│ └─ Add new dashboard feature 09:15 │
│ │
│ Yesterday │
│ ├─ Database migration 16:45 │
│ └─ Code review session 14:20 │
│ │
│ Last 7 days │
│ ├─ Refactor user service Feb 4 │
│ ├─ Update dependencies Feb 3 │
│ └─ Design system improvements Feb 2 │
└─────────────────────────────────────┘パフォーマンス最適化
段階的読み込み
最適化戦略:
1. 最近の会話を優先的に読み込み(最初の 20 件)
2. スピナー表示中にバックグラウンドで残りを読み込み
3. スクロール時に追加の会話を遅延読み込みキャッシュの活用
2 回目以降の表示:
- 既にキャッシュされた会話は即座に表示
- 新しい会話のみスピナーで読み込み
- より高速な体験関連する改善履歴
v2.1.32 での関連改善:
✓ スピナーアニメーションの追加
✓ 読み込み状態の明確化
✓ ユーザーフィードバックの向上過去のバージョンでの関連改善:
v2.1.31: セッションリジューム時の読み込みインジケータ追加
v2.1.14: 読み込みインジケータの改善
v2.0.72: 会話履歴へのローディング表示追加注意点
- 初回起動時: 多数の会話がある場合、初回のインデックス作成に時間がかかることがあります
- ネットワーク接続: OAuth ユーザーの場合、リモート会話の同期には安定したネットワーク接続が必要です
- VS Code のパフォーマンス: VS Code 自体が重い場合、スピナー表示も遅延する可能性があります
- 拡張機能の競合: 他の拡張機能との競合により、表示が遅れることがあります
- タイムアウト: 非常に長時間読み込まれない場合はエラーメッセージが表示されます
- キャンセル: Esc キーで読み込みをキャンセルできます
トラブルシューティング
スピナーが永続的に表示される
症状: スピナーが消えず、会話リストが表示されない
原因と対処:
1. 会話履歴ファイルの破損
→ ~/.claude/sessions/ の内容を確認
2. VS Code の問題
→ VS Code を再起動
3. 拡張機能のバグ
→ 拡張機能を再インストール会話履歴が表示されない
bash
# ログファイルを確認
cat ~/.claude/logs/latest.log | grep -i "conversation"
# セッションディレクトリを確認
ls -la ~/.claude/sessions/
# VS Code 開発者ツールでエラーを確認
# Help > Toggle Developer Tools
# Console タブでエラーメッセージを確認読み込みが遅い場合
対処方法:
1. 古い会話を削除:
~/.claude/sessions/ から不要なファイルを削除
2. インデックスを再構築:
VS Code を再起動
3. キャッシュをクリア:
Cmd+Shift+P > Developer: Reload Window
4. 会話数を確認:
ls ~/.claude/sessions/ | wc -l
# 200+ の場合は整理を検討リモート会話が同期されない
OAuth 認証の確認:
1. ログイン状態を確認
Cmd+Shift+P > Claude Code: Login
2. ネットワーク接続を確認
curl -I https://api.anthropic.com
3. トークンを更新
Cmd+Shift+P > Claude Code: Logout
再度ログインVS Code 固有の設定
スピナーの無効化(非推奨)
json
// settings.json
{
"claudeCode.showLoadingSpinner": true, // デフォルト
"claudeCode.conversationListPageSize": 20,
"claudeCode.enableIncrementalLoading": true
}読み込みタイムアウトの調整
json
// settings.json
{
"claudeCode.conversationLoadTimeout": 30000, // ミリ秒
"claudeCode.enableConversationCache": true
}パフォーマンス測定
javascript
// 開発者コンソールでパフォーマンスを測定
performance.mark('conversation-load-start');
// 会話リストを開く
performance.mark('conversation-load-end');
performance.measure(
'conversation-load',
'conversation-load-start',
'conversation-load-end'
);
console.log(performance.getEntriesByName('conversation-load'));