設定値の優先順位を解決
設定の不具合は、実際にはどの値が優先されるのかという単純に見えて難しい疑問から始まることがよくあります。この機能は、アプリケーションの既定値、設定ファイル、環境変数、コマンドラインフラグから与えられた値を比較し、お客様が指定した優先順位を適用します。有効な値と、その値を提供したソースの両方を返すため、判断内容を簡単に確認、テスト、文書化できます。省略されたソースと、意図的に指定された空文字列を区別し、一般的な上書き動作を正確に表現します。
無料で実行
処理はブラウザ内で完結します。ファイルは送信されません。無料でご利用いただけます。
未指定の意味を保ったまま値を記述します
ソースの値は、values オブジェクトに正規名の default、config_file、environment_variable、cli_flag を使って入力します。プロパティが存在しない場合、そのソースは設定値を提供していないことを意味します。この区別は重要です。空文字列が意図的な上書きになる場合があるためです。たとえば、CLI オプションによって、ファイル内のプレフィックスを意図的に消去することがあります。そのため、リゾルバーは存在する空文字列を実際の値として扱い、黙って読み飛ばしません。指定する値はすべて文字列でなければなりません。これは環境変数やコマンドラインパーサーから得られる一般的な未加工形式に対応し、ゼロ、偽、文字列の間で予想外の型変換が起きるのを防ぎます。設定名も指定できます。設定名は選択結果を変えず、複数の設定を評価するときにログやテストデータを理解しやすくするため、結果にそのまま含まれます。未知のソース名は、入力ミスを発見できるよう拒否されます。4 つのプロパティがすべて存在しない場合は、既定値がない場合も含めて解決に失敗します。
優先順位を明示して適用します
precedence 配列には、4 つのソースを優先度の高い順から低い順に並べます。一般的な順序は CLI フラグ、環境変数、設定ファイル、既定値ですが、アプリケーションやデプロイ環境によって規則が異なるため、このリゾルバーはその慣例を仮定しません。指定順に名前を調べ、values オブジェクトにプロパティが存在する最初のソースを選択します。返されるソースによってその値が選ばれた理由を確認でき、返される優先順位配列によって判断に使われたポリシーも保存できます。各ソースを 1 回ずつ必須にすることで、ポリシーの完全性と監査可能性を確保します。名前の重複、未知の名前、不足したソース、余分な項目がある場合は、曖昧な部分結果ではなく入力エラーを返します。これは、文書、フレームワーク移行、テストマトリックスから優先規則を扱う場合に役立ちます。送信した順序そのものが規則全体であり、隠れた既定動作と組み合わせるヒントではありません。型変換、補間、ファイルアクセス、環境参照、コマンド解析は行いません。同じ入力はブラウザー、CI、API のいずれでも常に同じ出力になります。
テスト、診断、文書で結果を活用します
レスポンスには effective_value、source、評価した優先順位が含まれます。設定名を指定した場合は、その名前も含まれます。この簡潔な構造は単体テストに適しています。ローダーが確認した未加工値をまとめ、想定するポリシーを送信し、選択された値とその出所の両方が期待どおりか検証できます。運用時の診断にも便利です。アプリケーションの起動処理全体を再現しなくても、タイムアウト値が管理対象のファイルではなく環境変数に由来することをサポートツールで示せます。文書作成チームは、階層化された設定例を実行可能なデモにできます。リゾルバーはホストプロセスの環境を読み取らず、設定ファイルを開かず、CLI 構文も解釈しません。入力の収集と秘密情報を送信するかどうかの判断は呼び出し側の責任です。優先順位だけを試す場合は、安全な代替値をご利用ください。各リクエストは 1 件の設定を解決し、API では $0.002 です。ティア A のブラウザー版も同じ純粋なロジックを使用します。ネットワーク、乱数、時刻、可変状態を使わないため、同じ JSON の結果は安定し、比較やキャッシュも容易です。
活用例
デプロイ時の上書きを確認します
CLI フラグまたは環境変数が、設定ファイルに保存された値より優先されるか確認します。
設定ローダーのテストを作成します
有効な値と、その値を提供したソースの両方を検証する明確なテストデータを生成します。
予想外の実行時設定を説明します
ファイルや稼働中の環境を参照せず、収集済みの入力から優先順位の判断を再現します。
よくある質問
最も優先度が高いソースはどれですか?
優先順位配列の先頭にあるソースです。リクエストごとにお客様が完全な順序を定義します。
空文字列も値として扱われますか?
はい。空文字列のプロパティが存在すれば指定済みの値です。プロパティの省略は、ソースが何も提供していないことを意味します。
優先順位配列にはすべてのソースが必要ですか?
はい。default、config_file、environment_variable、cli_flag をそれぞれ正確に 1 回ずつ含める必要があります。
どのソースにも値がない場合はどうなりますか?
無効な入力としてエラーを返します。default プロパティがない場合に代替値を自動生成することはありません。
ファイルやプロセス環境を読み取りますか?
いいえ。リクエストに含まれる値だけを評価し、ネットワークやシステムにはアクセスしません。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/config-precedence-resolve \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"values":{"default":"development","config_file":"staging","environment_variable":"production"},"precedence":["cli_flag","environment_variable","config_file","default"]}'const res = await fetch("https://api.kit.forhosting.com/dev/config-precedence-resolve", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"values": {
"default": "development",
"config_file": "staging",
"environment_variable": "production"
},
"precedence": [
"cli_flag",
"environment_variable",
"config_file",
"default"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/config-precedence-resolve",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"values": {
"default": "development",
"config_file": "staging",
"environment_variable": "production"
},
"precedence": [
"cli_flag",
"environment_variable",
"config_file",
"default"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/config-precedence-resolve", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"values":{"default":"development","config_file":"staging","environment_variable":"production"},"precedence":["cli_flag","environment_variable","config_file","default"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"values":{"default":"development","config_file":"staging","environment_variable":"production"},"precedence":["cli_flag","environment_variable","config_file","default"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/config-precedence-resolve", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"values": {
"default": "development",
"config_file": "staging",
"environment_variable": "production"
},
"precedence": [
"cli_flag",
"environment_variable",
"config_file",
"default"
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.config_precedence_resolve",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |