2 JET監査フレームワークの構成

デフォルトのOracle JAF構成の基本設定の一部を変更して、アプリケーションの監査を設定できます。

Oracle JAF構成について

Oracle JET Audit Framework (JAF)は、JETアプリケーションの「コマンド・プロンプト」ウィンドウでJAF初期化コマンドojaf --initを呼び出したときにJETツールによって作成される構成ファイルに依存します。

初めてOracle JAFを初期化する際に作成したoraclejafconfig.jsonファイルでは、JETアプリケーション監査の様々な要素を制御するために使用できるプロパティが定義されています。たとえば、JAF監査を構成することで、次を実行できます。

  • JETバージョンに固有の監査ルールを使用する際に、JETバージョンを指定します。デフォルトでは、これは監査対象のアプリケーションのJETバージョンとして構成されます。

  • アプリケーションのディレクトリやファイル・タイプを除外する際に、ファイル・セットを指定します。デフォルトでは、これは監査対象のアプリケーションのすべてのファイルが含まれるように構成されます。

  • ユーザーが定義し、配布用のJAFルール・パックとしてまとめられたカスタム監査ルールを呼び出します。

  • 監査で特定の監査ルールの実行を抑制したり、特定の重大度レベルのルールのみに監査を限定します。

  • Oracle JET Webコンポーネントのメタデータを組み込んで、アプリケーションのカスタム・コンポーネントのHTMLファイルを監査します。

  • JavaScript/TypeScriptソース・コードを制御して、ソース・ファイルに埋め込んだJAFコメントに基づいた監査を行います。

  • 監査の出力を使用して、監査メッセージのプレゼンテーションのカスタマイズや監査メッセージの抑止を行います。

oraclejafconfig.jsonファイル構成設定のプロパティは、ユーザーが指定できます。これを行うことで、監査を微調整して、目的のソースのみの監査結果に絞り込むことができます。特定のランタイム基準またはプロジェクトに対して、複数の構成ファイルを作成できます。構成ファイルはJSON形式ですが、JavaScriptスタイルのコメントをドキュメント化の目的で使用できます。使用する構成ファイルをコマンドラインで指定できます。

「コマンド・プロンプト」ウィンドウから監査を実行するたびに、監査を開始したディレクトリで、Oracle JAFがJAF構成ファイルoraclejafconfig.jsonを探します。そこで構成ファイルが見つからない場合、JAFは、現在のディレクトリで見つかったHTMLファイルのみを処理します。その場合、デフォルトのJAF構成設定が監査に使用されます。

Oracle JAF構成ファイルのプロパティについて

Oracle JET Audit Framework (JAF)構成ファイルは、JAF監査の実行時の動作を定義するプロパティを含むJSON形式のドキュメントです。

最初にJAFを初期化する際に作成したoraclejafconfig.jsonファイルには、JETアプリケーション監査の様々な要素を制御するために使用できるプロパティが含まれています。このファイルでは、次のプロパティを定義できます。

構成プロパティ 説明
rulePacks 省略可能。監査に含めるユーザー定義ルールのセットを指定します。このプロパティには、カスタム・ルール・パックを構成するルールのzipファイルまたはフォルダを指定します。例は、「カスタム・ルール・パックによる監査」を参照してください。
builtinJetRules 省略可能。デフォルトはtrueです。falseの場合、接頭辞JETが付いた内部ルール・セット内のすべての組込みJETルールが無効になります。これは便利なプロパティで、カスタム・ルール・パック内のユーザー定義ルールのみを実行する場合に、すべてのJETルールを指定してから、個別に無効にする必要がなくなります。例は、「カスタム・ルール・パックによる監査」を参照してください。
builtinJetWcRules 省略可能。デフォルトはfalseです。trueの場合、カスタムWebコンポーネント作成者による監査用の接頭辞JETWCが付いた内部ルール・セット内のすべての組込みルールが有効になります。これは、すべてのJET Webコンポーネント・ルールを指定し、それらを個別に有効にする必要がなくなるため、便利なプロパティです。例は、カスタムのJET Webコンポーネント・プロジェクトの監査に関する項を参照してください。
ruleMods 省略可能。ルールを有効/無効にします。また、内部rulePack JETの組込みJETルールなど、任意のrulePack内のルールのオプションをオーバーライドまたは定義することもできます。ルールは、enable/disableプロパティを使用してを有効または無効にすることができます。その値はルール名またはグループ名です。オーバーライド・オプションは、構成プロパティrulePacksのサブプロパティprefixでグループ化されます。各エントリは名前/値ペアです。プロパティ名はルール名であり、プロパティ値オブジェクトによってルールのオプションが指定されます。JAF構成プロパティ「rulePacks」を参照してください。例は、「監査ルールの実行時プロパティの構成」を参照してください。プロパティ$requiredtrueに設定されているルールは、構成プロパティを介して無効にすることはできません。
severity 省略可能。ルールの重大度レベルを指定して、問題を制限します。省略した場合、デフォルトはallです(検出されたすべての問題がレポートされます)。指定できるデフォルトの重大度レベルは、(優先度が高い順に) blockercriticalmajorminorinfoです。(構成プロパティsevMapを使用してこれらが再定義された場合は、再定義された重大度もここで使用できます。)例は、「監査ルールの重大度レベルの制限」を参照してください。
sevMap 省略可能。ルール・パックから監査ルール・メッセージの重大度レベルを再割当てできるようにします。また、デフォルト以外のセキュリティ・レベル識別子が優先される場合は、Oracle JAFで使用される一連の重大度レベルの再定義にも使用できます。例は、「監査ルールの重大度レベルの変更」を参照してください。
groups 省略可能。アクティブなルール・セットの構成に使用される1つ以上のグループを指定します。省略した場合、デフォルトはallです。このプロパティが使用される場合、そこで定義されたルール・グループのみがアクティブになります。このプロパティは、JAF構成プロパティruleNamesと相互に排他的であることに注意してください。例は、「特定のルールによる監査」を参照してください。
defGroups 省略可能。カスタム・グループを定義して、JAF構成プロパティgroups定義で使用できるようにします。例は、「特定のルールによる監査」を参照してください。
ruleNames 省略可能。アクティブなルール・セットを構成する特定のルールおよびオプションでルール・グループを指定します。このプロパティは、JAF構成プロパティgroupsと相互に排他的です。このプロパティが使用される場合、そこで定義されたルールまたはルール・グループのみがアクティブになります。例は、「特定のルールによる監査」を参照してください。
base 省略可能。JAF構成ファイルで検出されるすべての相対ファイル・パスの解決に使用されるベース・ディレクトリを指定します。省略した場合、構成ファイルの場所が使用されます。マクロ$ jafcwdを使用できます。この値は監査が呼び出されるディレクトリです。詳細は、「監査のプロジェクト範囲の構成」を参照してください。
files 省略可能。監査対象の入力ファイル・セットの判別に使用されるディレクトリ・パス、ファイル・パスまたはURLの配列を指定します。ファイル・パスにグロブを指定できます。いずれかのファイル・パスが相対の場合は、JAF構成プロパティbaseで指定される場所に対して相対的であると見なされます。プラットフォームに関係なく、ファイル・パスの指定にスラッシュが使用されている場合があることに注意してください(Microsoft Windowsでは、バックスラッシュを2つ続けて使用しないことにより、ファイル・パスがさらに読みやすくなります)。JAF構成プロパティ「exclude」も参照してください。詳細は、「監査のプロジェクト範囲の構成」を参照してください。
exclude 省略可能。監査から除外する必要があるファイル・パスの配列を指定します。グロブを指定できます。いずれかのファイル・パスが相対の場合は、JAF構成プロパティbaseに対して相対的であると見なされます。プラットフォームに関係なく、ファイル・パスの指定にスラッシュが使用されている場合があることに注意してください(Microsoft Windowsでは、バックスラッシュを2つ続けて使用しないことにより、ファイル・パスがさらに読みやすくなります)。詳細は、「監査のプロジェクト範囲の構成」を参照してください。
jetPagesOnly 省略可能。trueの場合、このプロパティにより、ページにJETカスタム要素が含まれない場合にHTMLファイルの監査が抑止されます。デフォルトはfalseです。例は、「Oracle JETコンポーネントを含むHTMLファイルのみの監査」を参照してください。
theme

省略可能。Oracleテーマ(redwoodaltastableまたはnoneのいずれか)を指定します。このプロパティを省略すると、redwoodがデフォルトとみなされます。StableRedwoodと同義として扱われます。

テーマ設定は、テーマに依存するルールに影響します。特に、属性label-edgeには、指定しない場合、テーマに依存するデフォルト値があります。<oj-input-*><oj-select-*>および<oj-combobox-*>の各要素でのこの属性の詳細は、JET APIを参照してください。

format 省略可能。生成される監査出力のタイプを指定します。標準のレポート・スタイル・テキスト出力の場合はprose、フラット化テキスト・スタイルの場合はline、またはJSON出力形式の場合はjsonを指定できます。指定しない場合、デフォルト出力はproseスタイルです。例は、「監査メッセージのデフォルト形式の切替え」を参照してください。
proseFormat 省略可能。formatproseを指定した場合、このプロパティにより、表示される問題のカスタム・プレゼンテーション形式(テンプレート)が定義されます。任意の順序で指定できるテンプレート・トークンのリストを使用できます。例は、「監査メッセージのプレゼンテーションのカスタマイズ」を参照してください。
lineFormat 省略可能。JAF構成プロパティformatlineを指定した場合は、このプロパティにより、表示される問題のカスタム・プレゼンテーション形式(テンプレート)が定義されます。任意の順序で指定できるテンプレート・トークンのリストを使用できます。このプロパティは、Microsoft Visual Codeターミナル・ウィンドウでの使用時に出力を再構成するのに便利です。例は、「監査メッセージのプレゼンテーションのカスタマイズ」を参照してください。
outPath 省略可能。監査出力(proseまたはJSONのいずれかが指定)が書き込まれるファイル・パスを指定します。ファイル・パスが相対の場合は、JAF構成プロパティbaseで指定される場所に対して相対的であると見なされます。省略した場合、出力はstdoutに書き込まれます。例は、「JSON形式での監査メッセージの出力」を参照してください。
tabs 省略可能。監査中に見つかった行/列の問題をレポートするときに使用されるタブ設定を指定します。省略した場合、各タブ文字はデフォルトでは4個のスペースに相当します。例は、「行と列の問題のレポートに使用されるタブ値の調整」を参照してください。
messages 省略可能。どのメッセージをレポートするかを制御します。拒否するメッセージIDを指定することも、受け入れるIDのみを指定することもできます。例は、「監査メッセージの抑止」を参照してください。
markupOptions 省略可能。このプロパティを使用して、マークアップ・ファイルにあるリンクのレポートを変更できます。trueが指定されている(またはオプションが省略されている)場合、ojafはリンクとしてマークアップされていないURLのようなテキストを探します。これは、コンプライアンスのために.mdテキストを分析する場合に便利です。foo.htmlfoo.inなどのテキストはリンクとみなされ、ルールでリンクの有効性を検査するため、誤検出が生成される可能性があります。falseを指定した場合、マークアップ構文を使用して正式に宣言されていないリンクはリンクとして報告されません。
typescript 省略可能。TSXファイルの監査を有効にするには、このプロパティをtrueに設定する必要があります。そうしない場合、ファイルはスキップされます。詳細は、「VComponentsを含むJET Webコンポーネント・プロジェクトの監査」を参照してください。
addFileList 省略可能。trueに設定し、JAF構成プロパティformatjsonに設定すると、このプロパティにより、監査ファイル・セットがJSON出力の追加のfilesetセクションに(ファイルのフルパス文字列の配列として)表示されます。これを使用すると監査されたファイル・セット全体にアクセスできるため、監査の出力JSONからカスタム・レポートを作成するときに役立ちます。例は、「JSON形式での監査メッセージの出力」を参照してください。
title 省略可能。監査レポートのタイトルのカスタマイズに使用される1つ以上の文字列を指定します。文字列は、監査がprose形式で実行されるときに表示されます。または、JSON形式の監査でJSON出力に挿入されます。マクロを使用してOracle JETバージョンや日時などの値をタイトル文字列に挿入することができます。例は、「監査レポートのタイトルの書式設定」を参照してください。
jetVer 省略可能。監査対象のOracle JETバージョンを指定します。完全または部分的なセマンティック・バージョン(semver)を、"8.2.0" (引用符で囲まれた文字列) のように、"[x [.y[. z]]"という形式で指定できます。例は、「JETおよびECMAスクリプトの特定バージョンによる監査」を参照してください。
components 省略可能。ユーザー定義のOracle JET Webコンポーネントのcomponent.jsonファイルのメタデータが含まれるフォルダへのパスを指定します。これによって、ルールでWebコンポーネント・メタデータを検査してカスタム要素属性を検証できるようになります。(これはユーザー定義のWebコンポーネント専用です。Oracle JET HTMLコア・コンポーネントには使用できません。)例は、「カスタムのJET Webコンポーネントの使用方法の監査」を参照してください。
componentOptions 省略可能。関連プロパティcomponentsおよびcomponentUrlsの制御オプションを指定します。どちらのプロパティも指定されていない場合、componentOptionsは無視されます。これを使用して、JAFによってcomponent.jsonファイルから抽出されるメタデータ・スキーマのアプリケーションを無効にしたり、Webコンポーネントを検証できます。これは、スキーマ・パスでコンポーネント・メタデータの問題が特定された場合に、JAF-INITメッセージが表示されないようにするのに便利です。例は、「カスタムのJET Webコンポーネントの使用方法の監査」を参照してください。
nameSpaces 省略可能。JAFがユーザー定義のカスタムWebコンポーネントを正常に監査できるように、ユーザー定義されている、Oracleによって割り当てられていないネームスペースのリストを指定します。例は、「カスタムのJET Webコンポーネントの使用方法の監査」を参照してください。
stylesets 省略可能。有効なユーザー定義Webコンポーネントのスタイル名の許可リストを指定します。これにより、Oracle JAFでは、HTMLおよびCSSの無効なスタイル名をレポートし、それらのスタイルを有効なJETコア・スタイルと区別できます。例は、「CSSスタイルとWebコンポーネント・スタイルの監査」を参照してください。
comments 省略可能。trueの場合、このプロパティにより、ソース・コードのレベルで監査範囲を制限する際に、JavaScriptでJAFコメント・コマンドを使用してコメントを付けることができます。デフォルト値はfalseです。例は、「ファイングレイン監査制御のためのソース・コードのコメント化」を参照してください。
followLinks 省略可能。trueの場合、外部のスタイルシートとJavaScriptファイルを参照するHTMLの<link>要素および<script>要素をたどって、それらのファイルが監査されます。外部リンクのファイルが監査されないようにするには、falseを指定します。指定しない場合のデフォルト値はtrueです。例は、「リンクされたコンテンツの監査の抑止」を参照してください。
ecmaVer 省略可能。JavaScript監査用のECMAスクリプトのバージョンを指定します。5678910または11 (引用符なしの数字)または対応するESバージョン年(201520162017など)を指定できます。ESバージョン11 (2020)のサポートにはJAFバージョン2.9.20以降が必要です。省略すると、Oracle JAFバージョン2.9.48時点のデフォルトはESバージョン11 (2020)になり、Oracle JAFバージョン2.9.11以降のデフォルトはESバージョン10 (2019)になります。例は、「JETおよびECMAスクリプトの特定バージョンによる監査」を参照してください。
tempDir 省略可能。Oracle JAFで内部作業フォルダ(jaftmp@)を作成するディレクトリのファイル・パスを指定します。中間ディレクトリは、必要に応じて作成されます。省略した場合、デフォルト値は現在の作業ディレクトリになります。これを使用できるのは、ファイル作成の権限制限のためにデフォルト値が使用できない場合です。パスは絶対パスにすることも相対パスにすることもできます。相対の場合、パスは現在の作業ディレクトリに対して相対的であると見なされます
ruleDescriptions 省略可能。このプロパティには、noneallshortまたはlongを指定できます。これによって、出力JSONにdescriptionsセクションが追加されます。このプロパティが適用されるのは、JSON出力形式を指定した場合のみです(JAF構成プロパティ"format" : "json"を使用)。例は、「JSON形式での監査メッセージの出力」を参照してください。
userDefs

省略可能。起動されるルールに対してcontext.userDefsに渡されるユーザー定義プロパティ(通常はオブジェクト)を指定します。(このプロパティは検査されず、監査でも使用されません。)

userDefsプロパティは、特定の単純なケースのみに制限するようにしてください。一般に、また複数のJET以外のルールパックを使用する場合は特に、ランタイム・データをルールパック拡張で保持する必要があります(「監査ライフサイクルを使用したカスタム・ルールの実装」startupRPおよびclosedownRPを参照)。

options 省略可能。その他の実行時オプションを定義します。このプロパティを使用すると、コマンドライン・インタフェースを使用して監査を実行する際にコマンドラインを簡潔にすることができます。例は、「事前定義済実行時オプションによるアプリケーションの監査」を参照してください。
extends 省略可能。プロパティが継承される構成ファイルを指定します。パスが相対パスの場合は、baseプロパティまたはパスが指定されている構成ファイルの場所を介して解決されます。構成では、JAF標準プロファイルを拡張することもできます。このリストは、コマンドojaf -profを使用して表示できます。例については、「構成の継承の指定」を参照してください。
extendOptions 省略可能。extendsプロパティで指定された構成から継承しない1つ以上のプロパティを指定します。例については、「構成の継承の指定」を参照してください。
@include() 省略可能。このディレクティブを使用すると、構成ファイルに別のファイルのテキストを含めることができます。これが役立つのは、監査対象のアプリケーション・ファイル・セットが非常に大きい場合です。監査パラメータとファイル・リストを分離できます。このディレクティブに指定したテキスト・ファイルのパスは、構成のディレクティブ行に組み込まれます。組み込まれるファイルでも@include()を使用できます。例は、「CSSスタイルとWebコンポーネント・スタイルの監査」を参照してください。

監査のプロジェクト範囲の構成

Oracle JAF構成のオプションのプロパティfilesexcludesを使用して、監査対象のファイル・セットに基づいて監査範囲を限定します。これらのプロパティを省略した場合、デフォルトのファイル・セットはJETアプリケーションの構成に基づき、デフォルトではルート・ディレクトリのすべてのHTMLファイルが含まれます。

filesプロパティには、JAFツールが監査対象の入力ファイル・セットを決定するために使用するディレクトリ・パス、ファイル・パスまたはURLの配列を指定します。excludesプロパティには、監査から除外するファイル・パスの配列を指定します。次に基本的なサンプルを示します。
/*  Comments are supported  */
{
   "files" : [ <path>/*.html, <path_to_specific_file>, ...]  // comments are supported
}
グロブをファイル・パス内に指定することができ、ワイルドカード文字を使用したファイルパスの展開と照合が有効になります。たとえば、次のサンプルのglob照合では、パス階層のそのレベルにある任意の数のディレクトリと任意の数のサブディレクトリが照合されます。
{
   "files" : ["D:/apps/components/public_html/js/views/**/*.html"]
}
filesプロパティとexcludesプロパティの両方で相対パスを使用できます。相対パスは、baseプロパティ(定義されている場合)または構成ファイルの場所(baseプロパティが定義されない場合)に対して相対的です。baseプロパティそのものが相対パスである場合、構成ファイルの場所に対して相対的と見なされます。
{ 
   "base"    :  ["./some/filepath"],
   "files"   :  ["./html/*.html"],
   "exclude" :  ["./html/*test[1-9].html"],
 ...
}
このサンプルでは、files宣言がbaseプロパティに対して相対的です。ここでは、baseプロパティそのものも相対的に宣言されているため、baseは構成ファイルの場所に対して相対的と見なされます。baseを省略すると、files宣言は構成ファイルの場所に対して相対的と見なされます。

最上位のbaseプロパティもマクロ値$jafcwdを使用して指定できます。このマクロは、監査が呼び出されたディレクトリの値を取ります。

アプリケーション・パスに基づいて監査範囲を指定するには:
  1. 組み込むリストとして範囲を設定するには、filesプロパティを編集します。
    "files" : [
               "./pages/html/*.html",
               "./mobile/html/*.html",
               "./pages/static/**",
               "http://server:1234/test/app.html
             ]

    Windowsユーザーは、バックスラッシュをエスケープ(バックスラッシュを2つ指定)せずにすむように、ファイルの区切りとしてスラッシュを使用することをお薦めします。グロブ照合では、ワイルドカード*、**、?および[]を使用できます。

    ノート:

    JAF構成のfilesプロパティとexcludesプロパティで複雑なグロブの指定を使用するときは、監査対象のファイルを確認できると便利です。JAFでは、構成で選択された監査ルールを実際には呼び出さずに、ドライランを実行できる機能があります。コマンドラインでフラグ--dryrunを指定します。これによって、構成ファイルにエラーが含まれないことが確認され、監査対象のファイルのファイル・パスのみが表示されるため、出力全体を調べる必要がなくなります。

  2. ベース・フォルダを基準として、組み込むリストとして範囲を設定するには、filesプロパティを編集します。
    "files" : [
                "someFilePath",
                "someFilePath2",
                {
                  "base" : "D:/git/trunk/built/apps/components/public_html/demo",
                  "files" : [
                              "**/recipe.html",
                              "/**/description.html",
                              "/**/customHeader.html",
                              "demo-dataVisualizations-filtering_element.html",
                              "demo-dataVisualizations-highlighting_element.html",
                              "demo-accordion-basicAccordion.html",
                              "demo-accordion-events.html",
                              "demo-accordion-multiExpandAccordion.html",
                              . . .
                           ]
                },
    
    ... // multiple file objects can be specified
    
              ]

    長いファイル・パスを多数指定する必要がある場合は、この代替形式を使用すると利便性が高く、わかりやすく指定できます。これによって、単純な文字列ファイル・パスのかわりにオブジェクト定義を使用できるようになり、オブジェクトに定義されるファイル・セットと組み合せて使用するためのベース・フォルダが定義されます。

  3. 除外するリストとして範囲を設定するには、filesプロパティとexcludesプロパティを編集します。
    {
       "files" :    [
                      "D:/git/trunk/built/apps/components/public_html/js/views/**/*.html",
                      ... 
                    ],
       "excludes" : [
                      "D:/git/trunk/built/apps/components/public_html/js/views/**/Test[1-9].html",
                      ...
                    ]
    }

    場合によっては、特に複雑な正規表現を含まない一般的なグロブを使用して、例外を除外するほうが便利です。これは、サンプルで示すようにexcludesプロパティを使用して実現できます。

    ノート:

    監査する必要がないファイルの指定によって擬陽性の問題が発生することがJAFによって報告されています。たとえば、angularファイル・スニペットが、JETのカスタムWebコンポーネントの属性の式構文によって解釈される場合があります。ファイル・セットは、特定の監査のニーズを満たすように調整する必要があります。一般的に、プリプロセッサで実行する必要のあるファイルがある場合、そのようなRawファイルを監査用に送信しないでください。JAF構成によって生成される実際の実行時ファイル・セットを確認するには、--dryrunコマンドライン・フラグを使用できます。

構成の継承の指定

extends構成プロパティを使用して、親構成が子構成からプロパティおよびプロパティ値を継承できるようにし、extendOptionsプロパティを使用して継承中に実行されるアクションを定義します。

異なる監査要件を持つ組織で複数の構成を維持する必要がある場合、構成のいくつかの側面が共通しており、繰返しが必要な場合があります。重複および関連する同期の問題を回避するために、JAFでは、ある構成が別の構成からプロパティまたはプロパティ値を継承できる階層構造を使用できます。これは、extendsプロパティを使用して実行されます。

Primary config_1
         -------------- 
         {    "extends" : "/path/to/config_2.json"
               . . . 
         }

         Child config_2
          -------------
          {    "extends" : "/path/to/config_3.json"
                . . . 
          }

          Child config_3
          -------------
          {    . . .   // no "extends" 
          }

前述の例では、最終的なアクティブ構成はプライマリ構成config_1の変更済みコピーであり、子構成とプライマリ構成のマージの結果です。マージの順序は最後の子config_3から始まり、config_1まで上に移動します。順序は次のとおりです:

  1. config_3は子構成であるため、直接の親config_2にマージされます。
  2. このマージの結果は、直接の親config_1 (プライマリ構成)への子構成になり、config_1にマージされます。
  3. 更新されたconfig_1のコピーが、監査の最終的なアクティブ構成になります。

循環参照は許可されておらず、コマンドojafによって検出されて監査が終了します。

構成で相対ファイル参照が使用されている場合は、直接の親とのマージ中に解決されます。この解決は、標準のJAFの文書化された順序で行われます:

  1. baseプロパティが宣言されていない場合、相対パスは、それを含む構成ファイルの場所に対して相対的とみなされます。
  2. baseプロパティが宣言されている場合、相対パスはbaseプロパティ・パスに対する相対パスとみなされます。
  3. baseプロパティ自体が相対の場合、baseプロパティは、格納されている構成ファイルの場所に対して相対的とみなされます。

2つの構成がマージされる場合、親プロパティが子プロパティよりも優先されるか、子プロパティ値が親プロパティにマージされます。

  1. 子プロパティが親構成に存在しない場合は、オプションのプロパティextendOptionsによってオーバーライドされないかぎり、プロパティが親に直接転送されます。
  2. 親プロパティが存在するが、子プロパティをマージできないか、単一の値(severitythemejetverなど)である場合、親プロパティが優先されます。
  3. 継承マージ中、子のbaseおよびextendsプロパティは親に継承されません。
  4. プロパティが継承可能とみなされる場合、実行されるアクションは特定のプロパティによって異なります。次の例に示すように、Config2Config1を拡張すると仮定すると、optionsプロパティの結果は直接マージになります:
Active (final) Config    <---     Config2              <---        Config1
---------------------             ------------------               --------------------

"options" : {                      options" : {                      "options" : {
              "msgid" : true,                   "msgid" : true,                    "msgid" : true,
              "color" : false,                  "color" : false                    "color" : true,
              "verbose" : true                                                     "verbose" : true
            }                                }                                 }

オプションで、継承中に実行されるアクションはプロパティextendOptionsで制御できます。このプロパティは親構成についてのみ調べられ、継承されることはありません。extendOptionsは、参照する直接の子の各プロパティに適用されるアクションを宣言します。

"extendOptions" : { 
  <property>  :  "ignore" ,
   . . .
}

子構成で宣言されたプロパティは、親構成に伝播されないようにすることができます。たとえば、親構成で、子の構成プロパティruleDescriptionsを無視するように指定できます。

"extendOptions" : { 
  "ruleDescriptions"  :  "ignore" ,
   . . .
}

構成プロパティfilesexcludeは、監査されるファイルセットの範囲を定義します。次の表に示すように、これらのプロパティは継承可能で、デフォルトでマージされます(extendOptionsで拒否されない場合)。これらの2つのプロパティで実行されるアクションは次のとおりです:

  1. 親と子のfilesおよびexcludeプロパティの相対パスが調べられ、解決されます。
  2. filesプロパティにfilesまたはbaseオブジェクトが含まれている場合、それらは展開および解決されます。
  3. その結果、フラット化/解決された配列(重複は除去される)がマージされ、結果はそれらの和集合です。

コマンドライン・フラグ-dac(アクティブ構成の表示)を使用して、実際に監査ライフサイクルを実行せずに継承の結果を評価します。

組込みの標準プロファイルからの継承は、構成の設定中にextendsプロパティを使用するときに使用できます。JAFには、標準のルール・セットを有効/無効にしたり、場合によってはエラーの重大度を上げるために、標準プロファイルが用意されています。使用可能なプロファイルは、-profコマンド・オプションを使用して表示できます(「コマンドラインを使用したアプリケーションの監査」を参照)。

$ ojaf -prof

--- JAF Profiles ---
* best-practice
   JAF Standard profile configuration enforcing best practice for JET Application Development.
* redwood-strict (extends 'best-practice')
   JAF Standard profile configuration for strict audit checking of Redwood applications.

これらのプロファイルのいずれかを独自の構成のベースとして使用するには、extendsオプションを使用しますが、特定の構成JSONファイルへのパスではなく、必要なプロファイルの名前を指定します。

{
  "extends": {"profile":"redwood-strict"}
  "jetVer": "11.0.0",
  "ecmaVer":"2019",
  "base": "$jafcwd",
  "files": [
     "./src/**/*.html",
     "./src/**/*.js",
     "./src/**/*.css",
     "./src/**/component.json"
  ],
  ...
}

たとえば、前述のプロファイルredwood-strictの場合、RedwoodアプリケーションはAltaテーマを使用すべきではないため、ルールoj-html-alta-deprecatedの重要度はblockerにアップグレードされます。特定のプロファイルを表示するには、ojaf -prof <profile name> (ojaf -prof best-practiceなど)を使用します。有効になっているすべてのルールとその重大度を表示するには、-dacコマンド・オプションを使用して、評価された最終的なアクティブ構成を表示します。

監査ルールの実行時プロパティの構成

Oracle JAF構成のプロパティruleModsを使用して、監査ルールの監査動作を変更します。

個々の監査ルールの監査動作は、ruleModsプロパティを使用して、ルールの有効化/無効化、およびルールが属するルール・パックで定義された監査オプションのオーバーライドまたは定義を行うことで、カスタマイズすることができます。定義するruleModsプロパティの各エントリは名前/値ペアです。プロパティ名はルール名で、プロパティ値オブジェクトによってルールのオプションが指定されます。オーバーライド・オプションは、rulePacksプロパティprefix(次の例ではABCD)によってグループ化されます。組込みJETルール・パック(デフォルトで有効)の場合、ルール・パック接頭辞JETを指定します。
"ruleMods" : {
 "ABCD": {
  "my-rule" : {"pageType": "index", "companyCode": "acd", // user rule with arbitrary runtime properties
               "isMulti": true, . . .}
          }
}
定義するルール名/値は、それぞれのルール・パックでルールに定義されたプロパティとマージされ、実行時ルールの動作をオーバーライドします。任意のルール・オプションを設定できます。詳細は、「監査でのカスタム監査ルールの参照」を参照してください
個々のルールでカスタマイズできるプロパティを次の表に示します。
ルールのプロパティ 説明
enabled 監査ルールを有効または無効にします。デフォルトでは、すべてのルールが有効です。後述の例を参照してください。
severity 監査ルールの重大度レベルを分類します。監査をルールの重大度レベルで制限する場合、レベルをinfominormajorcritical (デフォルト)、blockerに変更できます。これらの重大度レベルは、組織での必要に応じて、ユーザー定義の重大度レベルに置き換えることができます。「監査ルールの重大度レベルの変更」も参照してください。
status 開発ステータスを監査ルールに関連付けます。ステータスは、productionalphabetaまたはdeprecatedに変更できます。
filetype

監査ルールが呼び出されるファイル・タイプを指定します。ファイル・タイプは、htmlcssまたはその両方、あるいはjsjsonまたはその両方に変更できます。たとえば:

"filetype : "html"

または

"filetype" : ["html", "css"]

filetypeプロパティは、startup/closedownフェーズに対して宣言されたフック・ルールでは無視されます。これらはファイルに関連しないためです。

group 監査ルールが割り当てられるグループ(1つまたは複数)を指定します。監査をルール・グループで制限する場合、ルール・グループを変更できます。たとえば:

"group" : "jet-html"

または

"group" : [ "jet-html", "jet-aria"]

「特定のルールによる監査」も参照してください。
jetver 監査対象のOracle JETリリース・バージョンを指定します。ルールの呼び出しに必要なJETリリース・バージョンを変更できます。形式は、npmなどのプログラムで使用されているセマンティック・バージョニングをサポートしています。たとえば:
"jetver" : ">=7.1.0"
または
"jetver" : "~7.1.0"
このプロパティおよびセマンティック・バージョニングの詳細は、「JETおよびECMAスクリプトの特定バージョンによる監査」を参照してください。
issueTag

適用先のルールが監査の問題を発生させるたびに出力JSONに渡される文字列またはカスタムproseFormat/lineFormatを定義します。

この文字列は、任意のルールパックおよびルールに適用できます。これはJAFによって検査されず、たとえば、コロンで区切ったkey:valueのペアの形式にできます。適用先のルールが起動されると、issueTagプロパティが出力に渡されます。JSON形式の出力の場合はIssueプロパティissueTagとして表示され、API/AMDモードではIssueオブジェクトに同様に表示されます。CLIのデフォルト出力の場合、構成プロパティproseFormatまたはlineFormatを介してカスタム形式が定義されていないかぎり、issueTag文字列は表示されません。この場合、issueTag文字列は置換%symbol %itagとして使用できます。

. . .
   "format": "prose",
   "proseFormat": "%itag",
. . .
  "ruleMods": {
      "JET": {
         "oj-ts-noconsole": {
            "issueTag": "Do not include console statements"
         }
      }
. . .
ルールは、enable/disableプロパティを使用して有効または無効にできます。
"ruleMods" : {
              "enable" :   [ "rulename1", "rulename2, "groupname1"],  // can specify rule names and group names
              "disable" :  [ "rulename3", "rulename4, "groupname2" ]
}

グループ名はルールのセットを表すため、ルール名に加えてグループ名も宣言できます。

enableプロパティとdisableプロパティの両方が宣言されている場合は、まずenableセットが処理され、次にdisableセットが処理されます。競合が見つかった場合、通知メッセージが生成され、実行は中止されます。

ルール・オプションを設定するには:

構成可能なルールは、起動時にルール・オプションを検査し、それに応じて自身を構成します。oraclejafconfig.jsonファイルのruleModsプロパティを編集して、これらのルールのルール・オプション(重大度レベルや有効ステータスなど)を再定義します。各ルール・オプション・エントリは名前/値ペアです。プロパティ名はルール名であり、プロパティ値オブジェクトによってルールのオプションが指定されます。たとえば、severityサブプロパティとenabledサブプロパティに目的の値を設定するには:

"ruleMods" : {
               "JET" : {
                         "oj-html-ojattr" : {"severity": "critical"},
                         "oj-html-lib" : {"enabled": "false"}
                       }
             }

この例は、任意のルール・オプションを設定できることを示しています。ここでは、組込みルールoj-html-ojattrが重大度レベルcriticalでオーバーライドされ、ルールoj-html-libが無効化されています。ただし、これらの特定のオプションは、構成プロパティsevMapおよびruleMods enable/disableを使用して設定することをお薦めします。