ln-773-cors-configurator について
.NETのASP.NET CoreまたはPythonのFastAPIプロジェクトでCORSを設定するプロジェクト初期化スキルです。開発用と本番用のポリシーを分けて生成し、設定とセキュリティ規則を検証します。
主な機能
- 01.NETとPythonのスタックに対応
- 02フロントエンドのOriginと設定を検出
- 03開発用と本番用のポリシーを分離
- 04CORS設定ファイルの生成と更新
- 05構文とプリフライトの検証
活用シーン
- 01新規プロジェクトでのCORS設定
- 02本番環境で許可するOriginの制限
- 03既存のCORS設定を検出して重複を回避
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ levnikolaevich/ claude-code-skills --skill ln-773-cors-configuratorインストール後、Claude Code で/ln-773-cors-configuratorを入力して読み込まれたか確認します。
詳細
ln-773-cors-configurator
タイプ: L3 Worker カテゴリ: 7XX プロジェクトのブートストラップ
セキュリティを最優先にしたアプローチで、クロスオリジンリソース共有(CORS)ポリシーを設定します。
概要
| 項目 | 詳細 |
|---|---|
| 入力 | ln-770 の Context Store |
| 出力 | 環境固有のポリシーを含む CORS 設定 |
| スタック | .NET(ASP.NET Core CORS)、Python(FastAPI CORSMiddleware) |
フェーズ 1:コンテキストの受信
コーディネーターから Context Store を受け取ります。
必須コンテキスト:
STACK:.NET または PythonPROJECT_ROOT:プロジェクトディレクトリのパスENVIRONMENT:Development または Production
冪等性チェック:
- .NET:
AddCorsまたはUseCorsを Grep します - Python:
CORSMiddlewareを Grep します - 見つかった場合:
{ "status": "skipped" }を返します
フェーズ 2:プロジェクト構造の分析
フロントエンドの設定を判定します。
検出手順:
- 同じリポジトリ内にフロントエンドがあるか確認します(
/frontend、/client、/web) .envまたはappsettings.jsonで CORS_ORIGINS を読み取ります- 一般的なフロントエンドのポート(3000、5173、4200)を特定します
検出されたフロントエンドのオリジン:
| フレームワーク | デフォルトポート | オリジン |
|---|---|---|
| React (CRA) | 3000 | http://localhost:3000 |
| Vite | 5173 | http://localhost:5173 |
| Angular | 4200 | http://localhost:4200 |
| Next.js | 3000 | http://localhost:3000 |
フェーズ 3:判断事項
Q1:許可するオリジン
| 環境 | 方針 |
|---|---|
| Development | localhost のオリジンを許可(設定可能) |
| Production | 環境変数で明示的に指定したオリジンのみ |
セキュリティに関する警告: 認証情報とともに *(ワイルドカード)を使用しないでください。
Q2:許可するメソッド
| メソッド | デフォルト | 備考 |
|---|---|---|
| GET | ✓ はい | 読み取り操作 |
| POST | ✓ はい | 作成操作 |
| PUT | ✓ はい | 更新操作 |
| DELETE | ✓ はい | 削除操作 |
| PATCH | オプション | 部分更新 |
| OPTIONS | ✓ はい | プリフライトリクエスト(自動) |
Q3:認証情報のサポート
| シナリオ | AllowCredentials | 備考 |
|---|---|---|
| Cookie ベースの認証 | ✓ はい | Cookie に必要です |
| ヘッダー内の JWT | ✗ いいえ | 不要です |
| OAuth2 | 場合による | ドキュメントを確認してください |
警告: AllowCredentials = true の場合、オリジンに * は使用できません。
Q4:プリフライトキャッシュの期間
| 環境 | MaxAge | 理由 |
|---|---|---|
| Development | 0 | 設定変更を即座に反映 |
| Production | 86400 (24h) | プリフライトリクエストを削減 |
フェーズ 4:設定の生成
.NET の出力ファイル
| ファイル | 目的 |
|---|---|
Extensions/CorsExtensions.cs | CORS サービスの登録 |
appsettings.json (更新) | オリジン設定 |
appsettings.Development.json (更新) | 開発用オリジン |
生成手順:
- 現行の ASP.NET Core CORS API について MCP ref を使用します
- 次の内容を含む CorsExtensions を生成します:
- 開発用ポリシー(許容的)
- 本番用ポリシー(制限的)
- 環境に基づくポリシー選択
- appsettings を CORS:Origins で更新します
登録コード:
builder.Services.AddCorsPolicy(builder.Configuration);
// ...
app.UseCors(builder.Environment.IsDevelopment() ? "Development" : "Production");
Python の出力ファイル
| ファイル | 目的 |
|---|---|
middleware/cors_config.py | CORS ミドルウェア設定 |
.env (更新) | CORS_ORIGINS 変数 |
生成手順:
- FastAPI CORSMiddleware について MCP ref を使用します
- 次の内容を含む cors_config.py を生成します:
- 環境変数からのオリジン解析
- メソッドとヘッダーの設定
- 認証情報の処理
- .env を CORS_ORIGINS で更新します
登録コード:
from middleware.cors_config import configure_cors
configure_cors(app)
フェーズ 5:検証
検証手順:
-
構文チェック:
- .NET:
dotnet build --no-restore - Python:
python -m py_compile middleware/cors_config.py
- .NET:
-
CORS テスト:
# Test preflight request curl -X OPTIONS http://localhost:5000/api/test \ -H "Origin: http://localhost:3000" \ -H "Access-Control-Request-Method: POST" \ -v -
ヘッダーの確認:
Access-Control-Allow-Origin:リクエストのオリジンと一致することAccess-Control-Allow-Methods:許可するメソッドが列挙されていることAccess-Control-Allow-Credentials:有効な場合は trueAccess-Control-Max-Age:キャッシュ期間
セキュリティチェックリスト
完了前に、以下を確認してください。
- 本番環境でワイルドカードの
*オリジンを使用していない - 許可するメソッドが明示されている(本番環境で
AllowAnyMethodを使用していない) - 認証情報は必要な場合にのみ使用している
- 本番環境ではオリジンを環境変数から取得している
- 本番環境でプリフライトリクエストのキャッシュが有効になっている
コーディネーターに戻る
{
"status": "success",
"files_created": [
"Extensions/CorsExtensions.cs"
],
"packages_added": [],
"registration_code": "builder.Services.AddCorsPolicy(configuration);",
"message": "Configured CORS with Development and Production policies"
}
参考リンク
重要なルール
- 認証情報とワイルドカードの
*オリジンを併用しないでください — CORS 仕様に反するセキュリティ違反です - 本番環境のオリジンは環境変数からのみ取得してください — コードに URL をハードコードしないでください
- 開発環境と本番環境ではポリシーを分けてください — ローカルでは寛容に、本番環境では制限を厳しくします
- 冪等性を保ってください —
AddCors/UseCorsまたはCORSMiddlewareが存在する場合は、status: "skipped"を返してください - 本番環境ではプリフライトリクエストのキャッシュを有効にしてください — OPTIONS リクエストを減らすため、MaxAge を 86400(24 時間)に設定します
完了の定義
- コンテキストストアを受信している(スタック、プロジェクトルート、環境)
- フロントエンドのオリジンを検出している(ポート/フレームワークの自動検出)
- ユーザーの選択を収集している(オリジン、メソッド、認証情報、キャッシュ期間)
- 環境ごとのポリシーで CORS 設定を生成している
- セキュリティチェックリストを確認している(ワイルドカードと認証情報の併用なし、メソッドの明示、環境変数ベースのオリジン)
- 構文を検証している(
dotnet buildまたはpy_compile) - 構造化 JSON レスポンスを ln-770 コーディネーターに返している
バージョン: 2.0.0 最終更新日: 2026-01-10
コメント
Markdown 対応