2.2. 基本的な YAML ルールを作成する
このセクションでは、基本的な MTA YAML ルールを作成する方法を説明します。これは、すでに MTA がインストールされていることを前提としています。インストール手順は、MTA CLI ガイド を参照してください。
2.2.1. 基本的な YAML ルールのテンプレートを作成する
MTA YAML ベースのルールの基本構造は、以下のとおりです。
when(condition) message(message) tag(tags)
手順
以下のように、
/home/<USER>/
ディレクトリーに YAML ルールの基本構文を含むファイルを作成します。- category: mandatory description: | <DESCRIPTION TITLE> <DESCRIPTION TEXT> effort: <EFFORT> labels: - konveyor.io/source=<SOURCE_TECH> - konveyor.io/target=<TARGET_TECH> links: - url: <HYPERLINK> title: <HYPERLINK_TITLE> message: <MESSAGE> tag: - <TAG1> - <TAG2> ruleID: <RULE_ID> when: <CONDITIONS>
2.2.2. 基本的な YAML ルールセットのテンプレートを作成する
複数の同じようなルールをグループ化する場合は、それらのファイルをディレクトリーに配置し、そのディレクトリーのルートに ruleset.yaml
ファイルを作成することで、それらのルールセットを作成できます。このディレクトリーを、--rules
オプションを使用して MTA CLI への入力として渡すと、MTA はディレクトリー内のすべてのファイルを ruleset.yaml
ファイルで定義されたルールセットに属するものとして処理します。
2.2.3. YAML ルールを作成する
各ルールファイルには、1 つ以上の YAML ルールが含まれます。すべてのルールはメタデータ、条件、アクションで構成されています。
手順
when
条件を作成します。YAML ルールの
when
条件には、provider
、and
、or
を指定できます。provider
条件を作成するプロバイダー条件は、特定の言語プロバイダーの検索クエリーを定義し、プロバイダーの特定のケイパビリティーを呼び出すために使用されます。
条件の一般的な形式は
<provider_name>.<capability>
です。条件には、検索の詳細を指定するための内部フィールドもあります。provider
条件とその内部フィールドを作成する方法は、使用するプロバイダーと呼び出すケイパビリティーによって異なります。以下の表は、利用可能なプロバイダーとそのケイパビリティーを示しています。作成するルールの目的に合ったプロバイダーとケイパビリティーを選択してください。条件のこの部分には、条件のフィールドはまだ含まれていません。
プロバイダー 機能 説明 java
referenced
詳細な検索の場合は、オプションのコード位置を指定して、アノテーションを含むパターンの参照を検索します。
dependency
アプリケーションに指定された依存関係があるか確認します。
builtin
xml
XPath クエリーを使用して XML ファイルを検索します。
json
JSONPath クエリーを使用して JSON ファイルを検索します。
filecontent
RegEx パターンを使用して、通常のファイル内のコンテンツを検索します。
file
指定されたパターンに一致する名前を持つファイルを検索します。
hasTags
タグ付けルールを通じてアプリケーション用にタグが作成されているか確認します。
Go
referenced
パターンの参照を検索します。
dependency
アプリケーションに指定された依存関係があるか確認します。
以下の例は、
referenced
ケイパビリティーを使用するjava
プロバイダー条件を示しています。例:
when: java.referenced:
適切なフィールドを
provider
条件に追加します。以下の表は、利用可能なプロバイダー、そのケイパビリティー、フィールドをすべて示しています。選択したプロバイダーとケイパビリティーに属するフィールドを選択してください。一部のフィールドは必須であることに注意してください。
プロバイダー 機能 Field 必須 ? 説明 java
referenced
pattern
はい
RegEx パターン
location
いいえ
ソースコードの場所。サポートされているすべての検索場所のリストは、以下を参照してください。
annotated
いいえ
アノテーションとその要素 (名前と値)
dependency
name
はい
依存関係の名前
nameregex
いいえ
名前と一致する RegEx
upperbound
いいえ
一致するバージョン番号の下限
lowerbound
いいえ
一致するバージョン番号の上限
builtin
xml
xpath
はい
XPath クエリー
namespace
いいえ
クエリーの範囲を名前空間に絞るためのマップ
filepaths
いいえ
検索範囲を絞るためのオプションのファイルリスト
json
xpath
はい
XPath クエリー
filepaths
いいえ
検索範囲を絞るためのオプションのファイルリスト
filecontent
pattern
はい
コンテンツ内で一致する RegEx パターン
filePattern
いいえ
このパターンに一致する名前を持つファイル内のみを検索します。
file
pattern
はい
このパターンに一致する名前を持つファイルを検索します。
hasTags
文字列タグのインラインリストです。タグ形式の詳細は、ルールアクション の タグアクション を参照してください。
Go
referenced
pattern
はい
RegEx パターン
dependency
name
はい
依存関係の名前
nameregex
いいえ
名前と一致する RegEx
upperbound
いいえ
一致するバージョン番号の下限
lowerbound
いいえ
一致するバージョン番号の上限
次の検索場所を使用して、
java
検索の範囲を絞ることができます。- CONSTRUCTOR_CALL
- TYPE
- INHERITANCE
- METHOD_CALL
- ANNOTATION
- IMPLEMENTS_TYPE
- ENUM_CONSTANT
- RETURN_TYPE
- IMPORT
VARIABLE_DECLARATION
以下の例は、パッケージの参照を検索するルールの
when
条件を示しています。例:
when: java.referenced: location: PACKAGE pattern: org.jboss.*
AND
またはOR
条件を作成します。and
条件は、その子条件が すべて 一致する場合に一致します。次のように、and
条件を作成します。when: and: - java.dependency: name: junit.junit upperbound: 4.12.2 lowerbound: 4.4.0 - java.referenced: location: IMPORT pattern: junit.junit
or
条件は、その子条件の いずれか が一致する場合に一致します。次のように、or
条件を作成します。when: or: - java.dependency: name: junit.junit upperbound: 4.12.2 lowerbound: 4.4.0 - java.referenced: location: IMPORT pattern: junit.junit
2.2.4. カスタム YAML ルールを使用して分析を実行する
分析を実行するには、CLI で --rules
オプションを使用します。
手順
単一のルールファイル (
/home/<USER>/rule.yaml
) 内のルールを使用するには、次のコマンドを実行します。mta-cli analyze --input /home/<USER>/data/ --output /home/<USER>/output/ --rules /home/<USER>/rule.yaml
ここでは、以下のようになります。
-
/home/<USER>/data/
- ソースコードまたはバイナリーのディレクトリー。 -
/home/<USER>/output/
- レポート (HTML および YAML) のディレクトリー
-
-
複数のルールファイルを使用するには、それらのルールファイルをディレクトリーに配置し、
ruleset.yaml
ファイルを追加する必要があります。その後、ディレクトリーは ルールセット として扱われ、--rules
オプションに入力として渡すことができます。
CLI で --target
または --source
オプションを使用する場合、エンジンはそのターゲットのラベルに一致するルールのみを選択することに注意してください。そのため、ルールにターゲットラベルまたはソースラベルが追加されていることを確認する必要があります。詳細は、予約済みラベル を参照してください。