GEMINI.md指示書 × Gemini CLI × Playwrightで作るリダイレクトチェッカー
Gemini CLIにPlaywrightを使ったリダイレクトチェッカーを生成させるために作成したGEMINI.mdの指示書記録です。
実装コードではなくGEMINI.mdにどんな指示を書き、どのような流れで完成させたかをまとめています。
事前準備
- GEMINI.md:実装に必要な指示をまとめる
- CSVデータ:リダイレクト元とリダイレクト先のURL一覧
- .env:リダイレクト元ドメインとリダイレクト先ドメインの設定
- 要件整理:
- 一度にテスト可能な実行ファイル
- 成功・失敗をログとして出力
- ドメインが変わっても使い回し可能
期待する成果物
- 一気にテストできる実行ファイル
- 成功・失敗のログ
- ドメインが変わっても使いまわし可能
試した流れ
- Gemini CLIにGEMINI.mdを読み込ませ、実装を依頼
- 出来上がったコードをテスト実行
- わざと失敗するデータを入れて再実行
- 失敗が検出されなかったため、失敗時の処理を追加指示
- 再テストし、失敗も正しく判定されることを確認
- 追加・変更した内容をGEMINI.mdに反映するよう指示
- 完成
GEMINI.md
# Basic rule
- デフォルトの言語を日本語とする。
# 301リダイレクトチェッカー
## 1. プロジェクト概要
このプロジェクトは、`list/redirect.csv` に定義されたURLリストに基づき、Webサイトの301リダイレクトが正しく設定されているかを自動で検証します。
Playwrightを利用して実際にブラウザで各URLにアクセスし、リダイレクト先が期待通りであるかを確認します。
## 2. 必要な設定
テストを実行する前に、以下の2つのファイルを設定する必要があります。
### a. `.env` ファイル (環境変数)
リダイレクト元とリダイレクト先のドメインを指定します。このファイルが存在しない場合、またはドメインが設定されていない場合は、テストは実行されません。
**例:**
```
SOURCE_DOMAIN=https://example.com
TARGET_DOMAIN=https://new-example.com
```
### b. `list/redirect.csv` ファイル (チェック対象リスト)
チェックしたいURLのパスをCSV形式で記述します。
- **1列目:** リダイレクト元のパス
- **2列目:** 期待されるリダイレクト先のパス
**例:**
```csv
/old-page-1,/new-page-1/
/old-page-2,/new-page-2/
```
## 3. 実行方法
プロジェクトのルートディレクトリで以下のコマンドを実行すると、リダイレクトチェックが開始されます。
```bash
node check-redirects.js
```
## 4. 処理の流れ
1. `npm install` で `playwright` と `dotenv` パッケージをインストールします。(初回のみ)
2. `.env` ファイルから `SOURCE_DOMAIN` と `TARGET_DOMAIN` を読み込みます。
3. `list/redirect.csv` からリダイレクトのリストを1行ずつ読み取ります。
4. 各行について、以下の処理を順に実行します。
- **リダイレクト元URL:** `${SOURCE_DOMAIN}` + `(CSVの1列目のパス)`
- **期待されるリダイレクト先URL:** `${TARGET_DOMAIN}` + `(CSVの2列目のパス)`
5. Playwrightを使い、ヘッドレスブラウザでリダイレクト元URLにアクセスします。
6. 実際に遷移した先のURLと、期待されるリダイレクト先URLを比較し、成否を判定します。
## 5. 結果の確認
実行結果は、コンソールに出力されると同時に `result.txt` ファイルに保存されます。
- **[成功]**: リダイレクトが期待通りに機能した場合。
- **[失敗]**: リダイレクト先が期待と異なった場合。
- **[エラー]**: URLへのアクセス中に問題が発生した場合。
### 停止条件
テスト中に **3件連続で** `[失敗]` または `[エラー]` が発生した場合、サーバー側の設定に問題がある可能性が高いと判断し、テストは自動的に中断されます。まとめ
- GEMINI.mdに要件をまとめておくと、再生成や修正時に同じ指示を使い回せる
- 成功例だけでなく、失敗例を含めた検証が品質向上に役立つ
- 指示書と修正履歴を残しておくと、次回同様の実装をするときに時間短縮できる