コンテンツにスキップ

Spectral リンティングルール

本プロジェクトでは、OAS3 リンティングに Spectral を使用しており、CI/外部ツール用とパイプラインのカスタムロジック用を分離した二段構成のアーキテクチャを採用しています。

GitHub Super-Linter およびその他の外部 CI ツールで使用されます。spectral:oas(組み込みの OAS ルールセット)を継承します。カスタム関数は含まれていません。これにより、spectral/functions/ ディレクトリにアクセスせずに Spectral を実行するツールとの互換性が保たれます。

extends:
- "spectral:oas"
rules:
path-params: "off"
operation-tags: warn
oas3-api-servers: warn
info-contact: warn
oas3-unused-component: warn
operation-operationId-unique: error
oas3-valid-schema-example: error
no-script-tags-in-markdown: warn
operation-description: info
info-description: info

spectral-pipeline.yaml — パイプライン設定

Section titled “spectral-pipeline.yaml — パイプライン設定”

scripts/spectral_lint.py(discover モードと gate モードの両方)で使用されます。ベース設定を継承し、カスタム f5-path-params 関数を追加します:

extends:
- "./.spectral.yaml"
functionsDir: "./spectral/functions"
functions:
- f5-path-params
rules:
f5-path-params:
description: "Path parameters must be declared and used"
message: "{{error}}"
severity: error
given: "$.paths[*]"
then:
function: f5-path-params

path-params が無効化されている理由

Section titled “path-params が無効化されている理由”

Spectral の組み込み path-params ルールは、{metadata.namespace}{metadata.name} のようなドット付きパラメータ名を使用する F5 XC API を誤って検出します。組み込みルールはパラメータ名のドットを解析できないため、未宣言として報告してしまいます。

カスタム f5-path-params 関数(spectral/functions/f5-path-params.js)は、{placeholder} の完全な内容を宣言されたパラメータ名と照合することで、ドット付き名前を正しく処理します。パスレベルとオペレーションレベルの両方のパラメータを確認し、双方向でエラーを報告します:

  • URL パス内のプレースホルダーに対応するパラメータ宣言がない場合
  • 宣言されたパスパラメータが URL パス内に存在しない場合

これらのルールは、違反が検出された際にリコンサイラーによって自動修正されます。各修正の詳細については 適用される修正 を参照してください。

ルール重大度修正メソッド説明
oas3-api-serverswarn_add_servers仕様に servers ブロックが必要
info-contactwarn_add_contactinfocontact を含める必要がある
operation-tagswarn_add_tagsすべてのオペレーションに少なくとも1つのタグが必要
oas3-unused-componentwarn_remove_unused_component未参照のコンポーネントスキーマがないこと
operation-operationId-uniqueerror_deduplicate_operation_idすべての operationId が一意でなければならない
oas3-valid-schema-exampleerror_fix_schema_exampleexamples/defaults がスキーマと一致する必要がある
no-script-tags-in-markdownwarn_strip_script_tagsdescription に <script> タグがないこと
f5-path-paramserrorパスパラメータが宣言され使用されている必要がある

これらのルールは、意味のある自動修正ができないため info 重大度にダウングレードされています:

ルール重大度説明
operation-descriptioninfoオペレーションには description があるべき
info-descriptioninfoAPI info には description があるべき

Spectral アダプター(scripts/spectral_lint.py)は2つのモードで動作します:

Discover モード(リコンサイル前)

Section titled “Discover モード(リコンサイル前)”
Terminal window
make spectral-lint
# Equivalent to: python -m scripts.spectral_lint --mode discover

specs/original/ をスキャンし、reports/spectral_report.json を出力します。リコンサイラーはこのレポートをバリデーションレポートとともに消費します。

Terminal window
make spectral-gate
# Equivalent to: python -m scripts.spectral_lint --mode gate

release/specs/ をスキャンし、reports/spectral_gate_report.json を出力します。違反が設定されたしきい値を超えた場合、終了コード 1 を返します。

Spectral の違反は3つのサブタイプを持つ Discrepancy オブジェクトに変換されます:

Spectral ルールカテゴリDiscrepancyTypeルール例
必須要素の欠如SPECTRAL_MISSINGoas3-api-serversinfo-contactoperation-tags
既存要素の不正SPECTRAL_INVALIDoas3-valid-schema-exampleno-script-tags-in-markdown
デッドコードSPECTRAL_UNUSEDoas3-unused-component