nginx-c-module-design について
nginx Cモジュール作者向けの設定ディレクティブ設計ガイドです。ディレクティブの公開範囲、命名、スコープ、デフォルト値、検証、互換性を扱う46のルールを影響度順に整理しています。
主な機能
- 018カテゴリにわたる46のルール
- 02影響度順に並んだガイダンス
- 03ディレクティブの公開範囲と命名
- 04型、スコープ、デフォルト値
- 05検証と互換性に関する指針
活用シーン
- 01ディレクティブとして公開する値の選定
- 02ディレクティブ名と引数型の決定
- 03ディレクティブのスコープとデフォルト値の設定
- 04ディレクティブの廃止や改名の計画
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill nginx-c-module-designインストール後、Claude Code で/nginx-c-module-designを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
metadata.jsonassets/templates/_template.mdreferences/_sections.mdcompat-alias-old-directive.mdcompat-deprecation-warning.mdcompat-document-migration.mdcompat-multi-version-window.mddefault-generous-timeouts.mddefault-performance-optin.mddefault-platform-aware-buffers.mddefault-safety-on.mddefault-zero-config-safe.mddefault-zero-unlimited.mdexpose-configurable-vs-hardcode.mdexpose-environment-dependent.mdexpose-escape-hatch.mdexpose-feature-gate.mdexpose-path-resource.mdexpose-security-surface.mdexpose-too-many-directives.mdnaming-cross-module-consistency.mdnaming-lowercase-underscore.mdnaming-module-prefix.mdnaming-no-abbreviations.mdnaming-noun-over-verb.mdnaming-sub-prefix-groups.mdscope-avoid-if-context.mdscope-default-three-levels.mdscope-http-only-shared-resources.mdscope-location-path-operations.md詳細
nginx.org C モジュールのディレクティブ設計に関するベストプラクティス
nginx C モジュールの作成者向けの包括的なディレクティブ設計ガイドです。明確で一貫性があり、管理者にとって使いやすい設定インターフェースの作成に重点を置いています。8 つのカテゴリにわたる 46 のルールを収録し、何を公開するか、どのように命名するか、安全に進化させるにはどうすればよいかについて、影響度に応じて優先順位を付けています。
適用するタイミング
以下を判断するときに、これらのガイドラインを参照してください。
- 設定可能なディレクティブとして公開する値と、ハードコードする値を決めるとき
- 新しいディレクティブに名前を付け、引数の型を選ぶとき
- スコープ(http、server、location)を決めるとき
- デフォルト値と検証動作を設定するとき
- 実行時データ用の nginx 変数を設計するとき
- 既存のディレクティブを非推奨にしたり、名前を変更したりするとき
関連スキル
このスキルでは設計上の判断(「何を」と「なぜ」)に焦点を当てます。実装の詳細については、以下を参照してください。
- nginx-c-modules — C の実装:メモリプール、リクエストのライフサイクル、設定の解析、ハンドラー、フィルター
- nginx-c-perf — パフォーマンス:バッファー、接続、ロック、キャッシュ、タイムアウト
- nginx-c-debug — デバッグ:クラッシュの診断、GDB、トレース、サニタイザー
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | 公開するかどうかの判断 | 重大 | expose- |
| 2 | 命名規則 | 重大 | naming- |
| 3 | ディレクティブの型 | 高 | type- |
| 4 | スコープ設計 | 高 | scope- |
| 5 | デフォルト値 | 中〜高 | default- |
| 6 | 検証とエラーメッセージ | 中 | valid- |
| 7 | 変数設計 | 中 | var- |
| 8 | 進化と互換性 | 低〜中 | compat- |
クイックリファレンス
1. 公開するかどうかの判断(重大)
expose-configurable-vs-hardcode- 設定可能な値とハードコードする値を判断するためのフレームワークexpose-escape-hatch- ハードコードされたデフォルト値を回避できる手段を用意するexpose-feature-gate- オプションの動作には機能ゲートを使用するexpose-too-many-directives- 過剰な設定を避けるexpose-path-resource- 外部リソースのパスは常に公開するexpose-security-surface- 公開するすべてのディレクティブについてセキュリティ上の影響を監査するexpose-environment-dependent- デプロイ環境によって異なる値を公開する
2. 命名規則(重大)
naming-module-prefix- すべてのディレクティブで一貫したモジュールプレフィックスを使用するnaming-sub-prefix-groups- サブプレフィックスを使って関連するディレクティブをグループ化するnaming-noun-over-verb- ディレクティブ名には動詞句より名詞句を優先するnaming-no-abbreviations- ディレクティブ名に独自の略語を使わないnaming-cross-module-consistency- 類似するディレクティブでは Nginx コアのサフィックスパターンに合わせるnaming-lowercase-underscore- 小文字とアンダースコアのみを使用する
3. ディレクティブの型(高)
type-flag-for-toggles- 二値の切り替えには NGX_CONF_FLAG を使用するtype-enum-over-string- 既知の値の集合には列挙型スロットを使用するtype-time-size-units- 時間やサイズの値には時間・サイズ用スロット関数を使用するtype-take-n-fixed-args- 固定の引数数には TAKE1/TAKE2/TAKE12 を使用するtype-one-more-lists- 可変長の値リストには 1MORE を使用するtype-avoid-block- 機能にブロックディレクティブを使用しないtype-custom-handler-complex- 複雑なディレクティブの解析にはカスタムハンドラーを使用する
4. スコープ設計(高)
scope-default-three-levels- デフォルトで http + server + location スコープを使用するscope-http-only-shared-resources- 共有リソースのディレクティブを http レベルのみに制限するscope-server-connection-level- 接続レベルの設定には http + server スコープを使用するscope-avoid-if-context- 十分にテストされていない限り、if コンテキストをサポートしないscope-location-path-operations- パスルーティングのディレクティブを location コンテキストに制限する
5. デフォルト値(中〜高)
default-zero-config-safe- ゼロ設定でも安全な動作になるようにするdefault-performance-optin- パフォーマンス機能はオプトイン方式にするdefault-safety-on- セキュリティ設定は制限的な値をデフォルトにするdefault-generous-timeouts- タイムアウトには余裕のある値をデフォルトにするdefault-zero-unlimited- 数値制限では、ゼロを無制限または無効の意味で使用するdefault-platform-aware-buffers- プラットフォームを考慮したバッファサイズのデフォルト値を使用する
6. 検証とエラーメッセージ(中)
valid-parse-time-check- 設定の解析時にすべてのディレクティブ値を検証するvalid-show-invalid-value- エラーメッセージに無効な値を含めるvalid-suggest-range- エラーメッセージに有効な範囲または形式を含めるvalid-conflict-detection- マージ時に競合するディレクティブを検出するvalid-actionable-guidance- エラーメッセージに実行可能なガイダンスを示す
7. 変数設計(中)
var-runtime-data-only- リクエストごとの実行時データのみを変数として公開するvar-naming-convention- モジュールのプレフィックスと説明的なサフィックスを使って変数に名前を付けるvar-dynamic-prefix- キーと値のデータには動的なプレフィックス変数を使用するvar-lazy-evaluation- コストの高い変数には遅延評価を活用するvar-in-directive-values- リクエストごとに値を変える必要がある場合にのみ、ディレクティブ値での変数の使用をサポートするvar-read-only-diagnostics- 可観測性のため、読み取り専用の診断変数を公開する
8. 進化と互換性(低〜中)
compat-deprecation-warning- 削除前に非推奨のディレクティブに関する警告をログに記録するcompat-alias-old-directive- 古いディレクティブ名をエイリアスとして維持するcompat-multi-version-window- 複数バージョンにわたる非推奨期間を設けるcompat-document-migration- 古いディレクティブと新しいディレクティブの両方のドキュメントに移行方法を記載する
使用方法
詳しい説明やコード例については、個別のリファレンスファイルをお読みください。
- セクションの定義 - カテゴリー構成と影響レベル
- ルールのテンプレート - 新しいルールを追加するためのテンプレート
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルール用のテンプレート |
| metadata.json | バージョンとリファレンス情報 |
コメント
Markdown 対応