@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/powershell-psscriptanalyzer-ci/#article>
    schema:about <https://comcomponent.com/knowledge/psscriptanalyzer/>, <https://comcomponent.com/knowledge/github-actions/> ;
    schema:mentions <https://comcomponent.com/knowledge/invoke-scriptanalyzer/>, <https://comcomponent.com/knowledge/psscriptanalyzer-settings/>, <https://comcomponent.com/knowledge/suppressmessageattribute/>, <https://comcomponent.com/knowledge/invoke-formatter/>, <https://comcomponent.com/knowledge/vscode-powershell-extension/>, <https://comcomponent.com/knowledge/pester/>, <https://comcomponent.com/knowledge/psavoidusingplaintextforpassword/>, <https://comcomponent.com/knowledge/psusedeclaredvarsmorethanassignments/>, <https://comcomponent.com/knowledge/psavoidusingconverttosecurestringwithplaintext/>, <https://comcomponent.com/knowledge/psavoidusingusernameandpasswordparams/>, <https://comcomponent.com/knowledge/psscriptanalyzer-staged-adoption/>, <https://comcomponent.com/knowledge/changed-file-only-analysis/>, <https://comcomponent.com/knowledge/github-actions-fetch-depth-zero/>, <https://comcomponent.com/knowledge/github-base-ref/>, <https://comcomponent.com/knowledge/psscriptanalyzer-mustfix-rules/> .

<https://comcomponent.com/knowledge/psscriptanalyzer/> a skos:Concept ;
    skos:prefLabel "PSScriptAnalyzer"@ja ;
    skos:definition "PowerShellスクリプトを静的解析するMicrosoft公式のツール。"@ja ;
    ks:uses <https://comcomponent.com/knowledge/invoke-scriptanalyzer/> ;
    ks:uses <https://comcomponent.com/knowledge/suppressmessageattribute/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/psscriptanalyzer-settings/> ;
    ks:uses <https://comcomponent.com/knowledge/psavoidusingplaintextforpassword/> ;
    ks:uses <https://comcomponent.com/knowledge/psusedeclaredvarsmorethanassignments/> ;
    ks:shouldPrecede <https://comcomponent.com/knowledge/pester/> ;
    ks:uses <https://comcomponent.com/knowledge/psavoidusingconverttosecurestringwithplaintext/> ;
    ks:uses <https://comcomponent.com/knowledge/psavoidusingusernameandpasswordparams/> .

<https://comcomponent.com/knowledge/github-actions/> a skos:Concept ;
    skos:prefLabel "GitHub Actions"@ja ;
    skos:definition "GitHubが提供する、リポジトリのイベントをトリガーにワークフローを実行するCI/CDサービス。"@ja ;
    skos:altLabel "GitHub Actions workflow" .

<https://comcomponent.com/knowledge/invoke-scriptanalyzer/> a skos:Concept ;
    skos:prefLabel "Invoke-ScriptAnalyzer"@ja ;
    skos:definition "PSScriptAnalyzerのルールに基づいてスクリプトやモジュールを解析するコマンドレット。"@ja ;
    skos:altLabel "-Path" ;
    skos:altLabel "-Recurse" ;
    skos:altLabel "-Settings" ;
    skos:altLabel "-Fix" ;
    skos:broader <https://comcomponent.com/knowledge/psscriptanalyzer/> ;
    ks:uses <https://comcomponent.com/knowledge/invoke-formatter/> .

<https://comcomponent.com/knowledge/suppressmessageattribute/> a skos:Concept ;
    skos:prefLabel "SuppressMessageAttribute"@ja ;
    skos:definition "特定の関数やスクリプトに対してPSScriptAnalyzerの指摘を個別に抑止する属性。Justification引数に理由を書くことが求められる。"@ja ;
    skos:altLabel "Justification" ;
    skos:broader <https://comcomponent.com/knowledge/psscriptanalyzer/> .

<https://comcomponent.com/knowledge/psscriptanalyzer-settings/> a skos:Concept ;
    skos:prefLabel "PSScriptAnalyzerSettings.psd1"@ja ;
    skos:definition "Severity・IncludeRules・ExcludeRules・Rulesなどを記述し、開発者とCIが同じ基準で解析するための設定ファイル。"@ja ;
    skos:altLabel "Severity" ;
    skos:altLabel "IncludeRules" ;
    skos:altLabel "ExcludeRules" ;
    skos:broader <https://comcomponent.com/knowledge/psscriptanalyzer/> .

<https://comcomponent.com/knowledge/vscode-powershell-extension/> a skos:Concept ;
    skos:prefLabel "VS CodeのPowerShell拡張機能"@ja ;
    skos:definition "Visual Studio Code上でPowerShellの編集・デバッグを支援する拡張機能。PSScriptAnalyzerを内蔵し、編集中にその場で警告を表示する。"@ja ;
    skos:altLabel "PowerShell extension for VS Code" ;
    ks:uses <https://comcomponent.com/knowledge/psscriptanalyzer/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/psscriptanalyzer-settings/> .

<https://comcomponent.com/knowledge/psavoidusingplaintextforpassword/> a skos:Concept ;
    skos:prefLabel "PSAvoidUsingPlainTextForPassword"@ja ;
    skos:definition "パラメーターで平文パスワードを受け取っていないかを検出するPSScriptAnalyzerのルール。重大度はWarning。"@ja ;
    skos:broader <https://comcomponent.com/knowledge/psscriptanalyzer/> .

<https://comcomponent.com/knowledge/psusedeclaredvarsmorethanassignments/> a skos:Concept ;
    skos:prefLabel "PSUseDeclaredVarsMoreThanAssignments"@ja ;
    skos:definition "代入されたが一度も参照されていない変数を検出するPSScriptAnalyzerのルール。変数名のタイプミスを実バグとして拾える。"@ja ;
    skos:broader <https://comcomponent.com/knowledge/psscriptanalyzer/> .

<https://comcomponent.com/knowledge/invoke-formatter/> a skos:Concept ;
    skos:prefLabel "Invoke-Formatter"@ja ;
    skos:definition "設定ファイルのルールに基づいてPowerShellスクリプトのテキストを整形するコマンドレット。"@ja ;
    skos:broader <https://comcomponent.com/knowledge/psscriptanalyzer/> .

<https://comcomponent.com/knowledge/pester/> a skos:Concept ;
    skos:prefLabel "Pester"@ja ;
    skos:definition "PowerShellスクリプトの自動テストを書くためのテストフレームワーク。"@ja .

<https://comcomponent.com/knowledge/psscriptanalyzer-staged-adoption/> a skos:Concept ;
    skos:prefLabel "PSScriptAnalyzerの段階導入"@ja ;
    skos:definition "重大度Errorをゼロにする第1段階、変更ファイルのみを厳格に解析する第2段階、除外ルールを徐々に外す第3段階という順で既存資産へ静的解析を導入していく進め方。"@ja ;
    ks:requires <https://comcomponent.com/knowledge/psscriptanalyzer/> ;
    ks:requires <https://comcomponent.com/knowledge/changed-file-only-analysis/> .

<https://comcomponent.com/knowledge/changed-file-only-analysis/> a skos:Concept ;
    skos:prefLabel "変更ファイルのみを対象にした差分解析"@ja ;
    skos:definition "ベースブランチとの差分を取り、変更されたps1/psm1/psd1ファイルだけをPSScriptAnalyzerの解析対象にすることで、既存の負債を残したまま新しい問題の増加だけを止める手法。"@ja ;
    skos:altLabel "git diff" ;
    skos:altLabel "第2段階"@ja ;
    ks:uses <https://comcomponent.com/knowledge/invoke-scriptanalyzer/> .

<https://comcomponent.com/knowledge/github-actions-fetch-depth-zero/> a skos:Concept ;
    skos:prefLabel "actions/checkoutのfetch-depth: 0"@ja ;
    skos:definition "GitHub Actionsのactions/checkoutで履歴全体を取得する指定。差分チェックでベースブランチとの比較を行うために必要になる。"@ja ;
    skos:altLabel "fetch-depth" .

<https://comcomponent.com/knowledge/github-base-ref/> a skos:Concept ;
    skos:prefLabel "GITHUB_BASE_REF"@ja ;
    skos:definition "pull_requestイベントでPRのターゲットブランチ名が入るGitHub Actionsの既定環境変数。push時は空になる。"@ja .

<https://comcomponent.com/knowledge/psavoidusingconverttosecurestringwithplaintext/> a skos:Concept ;
    skos:prefLabel "PSAvoidUsingConvertToSecureStringWithPlainText"@ja ;
    skos:definition "平文の文字列からSecureStringを生成していないかを検出するPSScriptAnalyzerのルール。重大度はError。"@ja ;
    skos:broader <https://comcomponent.com/knowledge/psscriptanalyzer/> .

<https://comcomponent.com/knowledge/psavoidusingusernameandpasswordparams/> a skos:Concept ;
    skos:prefLabel "PSAvoidUsingUsernameAndPasswordParams"@ja ;
    skos:definition "ユーザー名とパスワードを別々のパラメーターで受け取っていないかを検出するPSScriptAnalyzerのルール。重大度はError。"@ja ;
    skos:broader <https://comcomponent.com/knowledge/psscriptanalyzer/> .

<https://comcomponent.com/knowledge/psscriptanalyzer-mustfix-rules/> a skos:Concept ;
    skos:prefLabel "重大度に関係なく落とすルールの明示リスト"@ja ;
    skos:definition "重大度がWarningでも資格情報関連など常に失敗条件へ含めたいPSScriptAnalyzerのルール名を、CIの判定コードに明示的に列挙したもの。"@ja ;
    skos:altLabel "$mustFix" ;
    ks:requires <https://comcomponent.com/knowledge/psavoidusingplaintextforpassword/> ;
    ks:requires <https://comcomponent.com/knowledge/psavoidusingconverttosecurestringwithplaintext/> ;
    ks:requires <https://comcomponent.com/knowledge/psavoidusingusernameandpasswordparams/> .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/psscriptanalyzer/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/invoke-scriptanalyzer/> ;
    schema:description "PSScriptAnalyzerはInvoke-ScriptAnalyzerコマンドレットでスクリプトやモジュールを解析する"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/psscriptanalyzer/overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/psscriptanalyzer/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/suppressmessageattribute/> ;
    schema:description "PSScriptAnalyzerはSuppressMessageAttributeによる指摘の個別抑止を提供する"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/psscriptanalyzer/using-scriptanalyzer#suppressing-rules> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/psscriptanalyzer/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/psscriptanalyzer-settings/> ;
    schema:description "PSScriptAnalyzerの解析対象ルールと重大度はPSScriptAnalyzerSettings.psd1で構成できる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/psscriptanalyzer/using-scriptanalyzer> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/vscode-powershell-extension/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/psscriptanalyzer/> ;
    schema:description "VS CodeのPowerShell拡張機能はPSScriptAnalyzerを内蔵し、編集中にその場で警告を表示する"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/scripting/dev-cross-plat/vscode/using-vscode> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/vscode-powershell-extension/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/psscriptanalyzer-settings/> ;
    schema:description "VS Code拡張機能の設定powershell.scriptAnalysis.settingsPathの既定値がPSScriptAnalyzerSettings.psd1のため、この名前でリポジトリ直下に置くと編集中の警告とCIの判定基準がそろう"@ja ;
    ks:evidence <https://github.com/PowerShell/vscode-powershell/blob/main/package.json> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/github-actions/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/invoke-scriptanalyzer/> ;
    schema:description "本記事が組み立てるPSScriptAnalyzerのCIワークフローでは、GitHub Actionsのワークフローはステップの中でInvoke-ScriptAnalyzerを呼び出して解析を実行する"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/psscriptanalyzer/overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/psscriptanalyzer/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/psavoidusingplaintextforpassword/> ;
    schema:description "PSScriptAnalyzerは平文パスワード検出ルールPSAvoidUsingPlainTextForPasswordを組み込みルールとして持つ"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/psscriptanalyzer/rules/avoidusingplaintextforpassword> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/psscriptanalyzer/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/psusedeclaredvarsmorethanassignments/> ;
    schema:description "PSScriptAnalyzerは未使用変数検出ルールPSUseDeclaredVarsMoreThanAssignmentsを持ち、変数名のタイプミスという実バグを拾える"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/psscriptanalyzer/rules/readme> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/invoke-scriptanalyzer/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/invoke-formatter/> ;
    schema:description "Invoke-ScriptAnalyzerの-Fixによる自動修正のうち、整形の処理はInvoke-Formatterが担う"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/psscriptanalyzer/invoke-formatter> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/psscriptanalyzer/> ;
    rdf:predicate ks:shouldPrecede ;
    rdf:object <https://comcomponent.com/knowledge/pester/> ;
    schema:description "テストコードを書かずに初日から効果が出るPSScriptAnalyzerを、テストを書く作業が必要なPesterより先に導入するのが実務的だとされる"@ja ;
    ks:evidence <https://pester.dev/docs/quick-start> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/psscriptanalyzer-staged-adoption/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/psscriptanalyzer/> ;
    schema:description "段階導入はPSScriptAnalyzerによる解析の実行を前提とする"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/psscriptanalyzer/overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/psscriptanalyzer-staged-adoption/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/changed-file-only-analysis/> ;
    schema:description "段階導入の第2段階は、変更ファイルのみを厳格に解析する差分チェックを前提とする"@ja ;
    ks:evidence <https://git-scm.com/docs/git-diff> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/changed-file-only-analysis/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/github-actions-fetch-depth-zero/> ;
    schema:description "GitHub Actionsで差分解析を行う場合、ベースブランチとの比較に履歴が必要なため、actions/checkoutでfetch-depth: 0を指定するか、ベースブランチを明示的にfetchすることを前提とする。GitHub Actions以外の実行環境や手元での差分解析には当てはまらない"@ja ;
    ks:evidence <https://github.com/actions/checkout> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/changed-file-only-analysis/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/github-base-ref/> ;
    schema:description "GitHub Actionsで差分解析を行う場合、比較先をmainに固定せずPRのターゲットブランチを使うため、GITHUB_BASE_REFの参照を前提とする。GitHub Actions以外の実行環境ではこの変数は存在しない"@ja ;
    ks:evidence <https://docs.github.com/actions/reference/variables-reference#default-environment-variables> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/changed-file-only-analysis/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/github-actions/> ;
    schema:description "本記事が想定するCI環境では、変更ファイルのみの差分解析はGitHub Actionsのワークフローの中で実行される"@ja ;
    ks:evidence <https://docs.github.com/actions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/changed-file-only-analysis/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/invoke-scriptanalyzer/> ;
    schema:description "差分解析は取得した変更ファイルを1つずつInvoke-ScriptAnalyzerに渡して結果を集約する"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/psscriptanalyzer/overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/psscriptanalyzer/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/psavoidusingconverttosecurestringwithplaintext/> ;
    schema:description "PSScriptAnalyzerは平文からSecureStringを生成する行為を検出するPSAvoidUsingConvertToSecureStringWithPlainTextを持つ"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/psscriptanalyzer/rules/avoidusingconverttosecurestringwithplaintext> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/psscriptanalyzer/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/psavoidusingusernameandpasswordparams/> ;
    schema:description "PSScriptAnalyzerはユーザー名とパスワードを別パラメーターで受け取る設計を検出するPSAvoidUsingUsernameAndPasswordParamsを持つ"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/psscriptanalyzer/rules/readme> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/psscriptanalyzer-mustfix-rules/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/psavoidusingplaintextforpassword/> ;
    schema:description "重大度に関係なく落とすルール名の明示リストには、重大度Warningでも見逃せないPSAvoidUsingPlainTextForPasswordが含まれる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/psscriptanalyzer/rules/avoidusingplaintextforpassword> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/psscriptanalyzer-mustfix-rules/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/psavoidusingconverttosecurestringwithplaintext/> ;
    schema:description "重大度に関係なく落とすルール名の明示リストには、PSAvoidUsingConvertToSecureStringWithPlainTextが含まれる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/psscriptanalyzer/rules/avoidusingconverttosecurestringwithplaintext> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/psscriptanalyzer-mustfix-rules/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/psavoidusingusernameandpasswordparams/> ;
    schema:description "重大度に関係なく落とすルール名の明示リストには、PSAvoidUsingUsernameAndPasswordParamsが含まれる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/psscriptanalyzer/rules/readme> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/github-actions/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/psscriptanalyzer-mustfix-rules/> ;
    schema:description "本記事が組み立てるCIワークフローでは、失敗条件は重大度Errorに加え、この明示リストのルールに一致した指摘も含める"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/psscriptanalyzer/rules/avoidusingplaintextforpassword> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .
