開発環境とテストスイートの整備
朝、Claude Codeをアップデートしようとしたら npm install -g がエラーを吐いた。ターミナルのログを読み返すと、Voltaが握っているNode.jsがv14で、npm v11と噛み合っていない。そこから始まって、ESLintの設定修正、E2Eテストの全パスまで、一日中「動くはずのものを本当に動かす」作業に費やした。
VoltaでのClaude Codeアップデート
Node.js v14問題
VoltaのデフォルトNode.jsがv14.21.2のままだった。npm install -g @anthropic-ai/claude-code を叩くとnpm v11.0.0との互換性エラーが出る。npm v11はNode.js 18以上を要求する。
volta install [email protected]
Node.js 22.22.0をインストールしたらnpmも追従し、Claude Codeのグローバルインストールが通った。
Voltaのグローバルパッケージ制約
Voltaのグローバルパッケージインストールはnpm固定で、pnpmには変更できない。プロジェクト内ではpnpmを使っていても、グローバルツールの管理はnpm経由になる。この仕様は覚えておくしかない。
Claude Codeのコンテキストウィンドウ表示
ステータスラインにコンテキストウィンドウの使用量を表示する設定を入れた。長いセッションで「あとどれくらい使えるか」が一目で分かるようになり、会話を区切るタイミングの判断がつくようになった。
前日の日記自動生成
2月20日のclaude-code-syncログ31ファイルから、4本の個別記事と1本の統合日記を自動生成した。ログ数が30を超えると手動で整理する気力が湧かないので、日記生成コマンドが威力を発揮する場面だった。
eurekapu-nuxt4 テストスイート修正
ここからが本題。前日にデプロイまで完了していたeurekapu-nuxt4のテストを通す作業に集中した。
ESLint修正
TypeScriptパーサーが動いていなかった
ESLintを実行すると、TypeScript関連のルールが全て無視されていた。原因を追うと、typescriptパッケージ自体がインストールされていなかった。TypeScript ESLintパーサーは typescript パッケージを内部で参照するため、なくても起動はするがパースが機能しない。
pnpm add -D typescript
これでTypeScript ESLintのルールが動き始め、今度は実コードのリントエラーが出てきた。
実コードのリントエラー修正
any型の使用箇所とno-empty(空のcatchブロック)が複数見つかった。型を明示的に付け直し、空catchにはコメントを追加して対処した。
E2Eテスト修正
アクセス制御の影響
前日にサブスクリプション機能のアクセス制御を導入した結果、E2Eテストで使っていたchapter=2がロック状態になっていた。テストが「ログインしてください」画面で止まる。
chapter=1はFree枠なのでロックされない。テストのターゲットをchapter=1に変更した。
選択肢インデックスの更新
chapterを変更したことで、正解・不正解の選択肢インデックスもずれた。chapter=1の問題データを確認し、正解が何番目か、不正解が何番目かをテストコードに反映した。地味だが、ここを間違えるとテストが意味をなさなくなる。
Playwrightブラウザのインストール
CI環境やクリーンな開発環境では、Playwrightのブラウザバイナリが入っていない。npx playwright install でChromiumをインストールし、E2Eテストが実行できる状態にした。
全テストパス
最終的に全24テストがパスし、全テストスイートが合格した。Vitest単体テストとPlaywright E2Eテストの両方がグリーンになった瞬間、ターミナルに並ぶチェックマークを見て一息つけた。
pnpm installのビルドスクリプトスキップ問題
pnpm install 実行時にパッケージのビルドスクリプト(postinstall等)がスキップされる問題にも遭遇した。これはpnpmのセキュリティ設定によるもので、信頼できるパッケージのビルドを許可する設定が必要になる場合がある。
ESLint設定のignore追加
eurekapu-dashboardディレクトリをESLintのignoreに追加した。別プロジェクトのコードがリント対象に含まれてエラーが出ていたため、スコープを明確にした。
振り返り
「テストを書いたのに通らない」状態は、テストがない状態より厄介だ。赤いバツが並ぶターミナルを前に「本当に壊れているのか、テスト側が古いのか」を切り分ける時間が地味に長い。今回はアクセス制御の導入でテストデータの前提が変わっていたのが原因で、コード自体は正しく動いていた。機能を追加したら、テストの前提条件も一緒に見直す。当たり前だが、手が回らないことが多い。
VoltaのNode.jsバージョンも、放置していたツケが回ってきた形だった。グローバルツールの依存関係は普段意識しないが、いざアップデートしようとすると足元をすくわれる。定期的にバージョンを確認する習慣をつけたい。