route-tester について
route-testerは、your projectの開発者向けに、CookieベースのJWT認証を使うルートテスト方法をまとめたガイドです。自動テストスクリプト、手動のcurl、開発・テスト環境限定のモック認証を説明します。
主な機能
- 01スクリプトで認証ルートをテスト
- 02curlで認証リクエストを手動送信
- 03開発・テスト環境で認証をモック
- 04GET、更新系リクエスト、ファイルアップロードをテスト
- 05一般的なHTTPエラーを調査
活用シーン
- 01新規・変更したAPIルートを検証
- 02401や403の認証エラーを調査
- 03ワークフローAPIのリクエストと応答を確認
- 04ルートテスト後にデータベース変更を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jackspace/ claudeskillz --skill route-testerインストール後、Claude Code で/route-testerを入力して読み込まれたか確認します。
同梱ファイルSKILL.json
詳細
your project Route Tester Skill
目的
このスキルでは、Cookie ベースの JWT 認証を使用して your project の認証済みルートをテストするためのパターンを紹介します。
このスキルを使用する場面
- 新しい API エンドポイントのテスト
- 変更後のルート機能の検証
- 認証に関する問題のデバッグ
- POST/PUT/DELETE 操作のテスト
- リクエスト/レスポンスデータの検証
your project の認証の概要
your project では、次を使用します。
- SSO 用の Keycloak(レルム:yourRealm)
- Cookie ベースの JWT トークン(Bearer ヘッダーではありません)
- Cookie 名:
refresh_token - JWT の署名:
config.iniのシークレットを使用
テスト方法
方法 1:test-auth-route.js(推奨)
test-auth-route.js スクリプトが、認証に関する複雑な処理をすべて自動で行います。
場所:/root/git/your project_pre/scripts/test-auth-route.js
基本的な GET リクエスト
node scripts/test-auth-route.js http://localhost:3000/blog-api/api/endpoint
JSON データを含む POST リクエスト
node scripts/test-auth-route.js \
http://localhost:3000/blog-api/777/submit \
POST \
'{"responses":{"4577":"13295"},"submissionID":5,"stepInstanceId":"11"}'
スクリプトの処理内容
- Keycloak からリフレッシュトークンを取得します
- ユーザー名:
testuser - パスワード:
testpassword
- ユーザー名:
config.iniの JWT シークレットを使ってトークンに署名します- Cookie ヘッダーを作成します:
refresh_token=<signed-token> - 認証済みリクエストを送信します
- 手動で再現するための正確な curl コマンドを表示します
スクリプトの出力
スクリプトは次の内容を出力します。
- リクエストの詳細
- レスポンスのステータスと本文
- 手動で再現するための curl コマンド
注:スクリプトの出力は詳細です。出力の中から実際のレスポンスを確認してください。
方法 2:トークンを使った手動の curl
test-auth-route.js の出力にある curl コマンドを使用します。
# The script outputs something like:
# 💡 To test manually with curl:
# curl -b "refresh_token=eyJhbGci..." http://localhost:3000/blog-api/api/endpoint
# Copy and modify that curl command:
curl -X POST http://localhost:3000/blog-api/777/submit \
-H "Content-Type: application/json" \
-b "refresh_token=<COPY_TOKEN_FROM_SCRIPT_OUTPUT>" \
-d '{"your": "data"}'
方法 3:モック認証(開発時のみ・最も簡単)
開発時は、モック認証を使用して Keycloak を完全にバイパスできます。
セットアップ
# Add to service .env file (e.g., blog-api/.env)
MOCK_AUTH=true
MOCK_USER_ID=test-user
MOCK_USER_ROLES=admin,operations
使用方法
curl -H "X-Mock-Auth: true" \
-H "X-Mock-User: test-user" \
-H "X-Mock-Roles: admin,operations" \
http://localhost:3002/api/protected
モック認証の要件
モック認証が機能するのは、次の条件を満たす場合のみです。
NODE_ENVがdevelopmentまたはtestであるmockAuthミドルウェアがルートに追加されている- セキュリティ機能により、本番環境では決して機能しない
よくあるテストパターン
フォーム送信のテスト
node scripts/test-auth-route.js \
http://localhost:3000/blog-api/777/submit \
POST \
'{"responses":{"4577":"13295"},"submissionID":5,"stepInstanceId":"11"}'
ワークフロー開始のテスト
node scripts/test-auth-route.js \
http://localhost:3002/api/workflow/start \
POST \
'{"workflowCode":"DHS_CLOSEOUT","entityType":"Submission","entityID":123}'
ワークフローステップ完了のテスト
node scripts/test-auth-route.js \
http://localhost:3002/api/workflow/step/complete \
POST \
'{"stepInstanceID":789,"answers":{"decision":"approved","comments":"Looks good"}}'
クエリパラメーターを指定した GET のテスト
node scripts/test-auth-route.js \
"http://localhost:3002/api/workflows?status=active&limit=10"
ファイルアップロードのテスト
# Get token from test-auth-route.js first, then:
curl -X POST http://localhost:5000/upload \
-H "Content-Type: multipart/form-data" \
-b "refresh_token=<TOKEN>" \
-F "file=@/path/to/file.pdf" \
-F "metadata={\"description\":\"Test file\"}"
ハードコードされたテスト用認証情報
test-auth-route.js スクリプトでは、次の認証情報を使用します。
- ユーザー名:
testuser - パスワード:
testpassword - Keycloak URL:
config.iniから取得(通常はhttp://localhost:8081) - レルム:
yourRealm - クライアント ID:
config.iniから取得
サービスポート
| サービス | ポート | ベース URL |
|---|---|---|
| Users | 3000 | http://localhost:3000 |
| Projects | 3001 | http://localhost:3001 |
| Form | 3002 | http://localhost:3002 |
| 3003 | http://localhost:3003 | |
| Uploads | 5000 | http://localhost:5000 |
ルートプレフィックス
各サービスの /src/app.ts でルートプレフィックスを確認します。
// Example from blog-api/src/app.ts
app.use('/blog-api/api', formRoutes); // Prefix: /blog-api/api
app.use('/api/workflow', workflowRoutes); // Prefix: /api/workflow
完全なルート = ベース URL + プレフィックス + ルートパス
例:
- ベース:
http://localhost:3002 - プレフィックス:
/form - ルート:
/777/submit - 完全な URL:
http://localhost:3000/blog-api/777/submit
テストチェックリスト
ルートをテストする前に、次を確認してください。
- サービス(form、email、users など)を特定する
- 正しいポートを確認する
-
app.tsのルートプレフィックスを確認する - 完全な URL を組み立てる
- リクエスト本文を用意する(POST/PUT の場合)
- 認証方法を確認する
- テストを実行する
- レスポンスのステータスとデータを確認する
- 該当する場合はデータベースの変更を確認する
データベースの変更を確認する
データを変更するルートをテストした後は、次を確認します。
# SECURITY WARNING: Never pass passwords directly in command line
# Use secure prompting instead:
# Option 1: Use password prompt (recommended)
docker exec -it local-mysql mysql -u root -p blog_dev
# Option 2: Use environment variable from secure source
export MYSQL_PWD=$(read -s -p "Enter MySQL root password: " && echo "$REPLY")
docker exec -i -e MYSQL_PWD=$MYSQL_PWD local-mysql mysql -u root blog_dev
unset MYSQL_PWD
# After connecting, check specific table:
mysql> SELECT * FROM WorkflowInstance WHERE id = 123;
mysql> SELECT * FROM WorkflowStepInstance WHERE instanceId = 123;
mysql> SELECT * FROM WorkflowNotification WHERE recipientUserId = 'user-123';
失敗したテストのデバッグ
401 Unauthorized
考えられる原因:
- トークンの有効期限切れ(test-auth-route.js で再生成してください)
- Cookie の形式が正しくない
- JWT シークレットが一致しない
- Keycloak が起動していない
解決方法:
# Check Keycloak is running
docker ps | grep keycloak
# Regenerate token
node scripts/test-auth-route.js http://localhost:3002/api/health
# Verify config.ini has correct jwtSecret
403 Forbidden
考えられる原因:
- ユーザーに必要なロールがない
- リソースの権限が正しくない
- ルートに特定の権限が必要
解決方法:
# Use mock auth with admin role
curl -H "X-Mock-Auth: true" \
-H "X-Mock-User: test-admin" \
-H "X-Mock-Roles: admin" \
http://localhost:3002/api/protected
404 Not Found
考えられる原因:
- URL が正しくない
- ルートプレフィックスが不足している
- ルートが登録されていない
解決策:
app.tsでルートプレフィックスを確認する- ルートの登録を確認する
- サービスが実行中であることを確認する(
pm2 list)
500 Internal Server Error
考えられる原因:
- データベース接続の問題
- 必須フィールドの不足
- バリデーションエラー
- アプリケーションエラー
解決策:
- サービスのログを確認する(
pm2 logs <service>) - Sentry でエラーの詳細を確認する
- リクエストボディが想定されたスキーマと一致していることを確認する
- データベースの接続性を確認する
auth-route-tester エージェントの使用
変更後にルートを包括的にテストするには:
- 影響を受けるルートを特定する
- ルート情報を収集する:
- 完全なルートパス(プレフィックスを含む)
- 想定される POST データ
- 確認するテーブル
- auth-route-tester エージェントを呼び出す
エージェントは以下を実行します:
- 適切な認証を使用してルートをテストする
- データベースの変更を確認する
- レスポンス形式を確認する
- 問題があれば報告する
テストシナリオの例
新しいルートを作成した後
# 1. Test with valid data
node scripts/test-auth-route.js \
http://localhost:3002/api/my-new-route \
POST \
'{"field1":"value1","field2":"value2"}'
# 2. Verify database
docker exec -i local-mysql mysql -u root -ppassword1 blog_dev \
-e "SELECT * FROM MyTable ORDER BY createdAt DESC LIMIT 1;"
# 3. Test with invalid data
node scripts/test-auth-route.js \
http://localhost:3002/api/my-new-route \
POST \
'{"field1":"invalid"}'
# 4. Test without authentication
curl http://localhost:3002/api/my-new-route
# Should return 401
ルートを変更した後
# 1. Test existing functionality still works
node scripts/test-auth-route.js \
http://localhost:3002/api/existing-route \
POST \
'{"existing":"data"}'
# 2. Test new functionality
node scripts/test-auth-route.js \
http://localhost:3002/api/existing-route \
POST \
'{"new":"field","existing":"data"}'
# 3. Verify backward compatibility
# Test with old request format (if applicable)
設定ファイル
config.ini(各サービス)
[keycloak]
url = http://localhost:8081
realm = yourRealm
clientId = app-client
[jwt]
jwtSecret = your-jwt-secret-here
.env(各サービス)
NODE_ENV=development
MOCK_AUTH=true # Optional: Enable mock auth
MOCK_USER_ID=test-user # Optional: Default mock user
MOCK_USER_ROLES=admin # Optional: Default mock roles
主要なファイル
/root/git/your project_pre/scripts/test-auth-route.js- メインのテストスクリプト/blog-api/src/app.ts- フォームサービスのルート/notifications/src/app.ts- メールサービスのルート/auth/src/app.ts- ユーザーサービスのルート/config.ini- サービスの設定/.env- 環境変数
関連するスキル
- database-verification を使用してデータベースの変更を確認する
- error-tracking を使用してキャプチャされたエラーを確認する
- workflow-builder を使用してワークフローのルートをテストする
- notification-sender を使用して送信された通知を確認する