@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-param-module-design/#article>
    schema:about <https://comcomponent.com/knowledge/param-block/>, <https://comcomponent.com/knowledge/psm1-module/> ;
    schema:mentions <https://comcomponent.com/knowledge/cmdletbinding/>, <https://comcomponent.com/knowledge/mandatory-parameter/>, <https://comcomponent.com/knowledge/validate-attributes/>, <https://comcomponent.com/knowledge/switch-parameter/>, <https://comcomponent.com/knowledge/pipeline-input/>, <https://comcomponent.com/knowledge/comment-based-help/>, <https://comcomponent.com/knowledge/shouldprocess-whatif/>, <https://comcomponent.com/knowledge/export-modulemember/>, <https://comcomponent.com/knowledge/psmodulepath/>, <https://comcomponent.com/knowledge/module-manifest/>, <https://comcomponent.com/knowledge/dot-sourcing/>, <https://comcomponent.com/knowledge/execution-policy/>, <https://comcomponent.com/knowledge/common-parameters/>, <https://comcomponent.com/knowledge/pipeline-last-item-only-bug/>, <https://comcomponent.com/knowledge/missing-argument-default-bug/>, <https://comcomponent.com/knowledge/partial-execution-failure/>, <https://comcomponent.com/knowledge/unbound-argument-silent-ignore-bug/>, <https://comcomponent.com/knowledge/unintended-destructive-execution/> .

<https://comcomponent.com/knowledge/param-block/> a skos:Concept ;
    skos:prefLabel "paramブロック"@ja ;
    skos:definition "関数やスクリプトの引数を宣言するPowerShellの構文要素で、型・既定値・各種属性をパラメーターごとに指定できる。"@ja ;
    skos:altLabel "Param Block" .

<https://comcomponent.com/knowledge/psm1-module/> a skos:Concept ;
    skos:prefLabel ".psm1スクリプトモジュール"@ja ;
    skos:definition "関数を書いたファイルを.psm1拡張子で保存するだけで作れるPowerShellのスクリプトモジュール形式。"@ja ;
    skos:altLabel "PowerShell Script Module" ;
    ks:configuredBy <https://comcomponent.com/knowledge/psmodulepath/> .

<https://comcomponent.com/knowledge/mandatory-parameter/> a skos:Concept ;
    skos:prefLabel "[Parameter(Mandatory)]"@ja ;
    skos:definition "引数を必須にする属性で、指定し忘れた呼び出しは対話実行では入力を促され、無人実行では失敗する。"@ja ;
    skos:altLabel "必須パラメーター"@ja ;
    ks:requires <https://comcomponent.com/knowledge/param-block/> ;
    ks:prevents <https://comcomponent.com/knowledge/missing-argument-default-bug/> .

<https://comcomponent.com/knowledge/validate-attributes/> a skos:Concept ;
    skos:prefLabel "検証属性(ValidateSet/ValidateRange/ValidateScript等)"@ja ;
    skos:definition "パラメーター宣言に検証条件を持たせる一群の属性で、検証は関数本体の実行前に行われ、失敗すると関数は呼び出されない。"@ja ;
    skos:altLabel "Validation Attributes" ;
    skos:altLabel "ValidateNotNullOrEmpty" ;
    skos:altLabel "ValidatePattern" ;
    ks:requires <https://comcomponent.com/knowledge/param-block/> ;
    ks:prevents <https://comcomponent.com/knowledge/partial-execution-failure/> .

<https://comcomponent.com/knowledge/switch-parameter/> a skos:Concept ;
    skos:prefLabel "[switch]パラメーター"@ja ;
    skos:definition "指定の有無だけで$trueまたは$falseになるオン/オフ引数の宣言方法。"@ja ;
    skos:altLabel "Switch Parameter" ;
    ks:requires <https://comcomponent.com/knowledge/param-block/> .

<https://comcomponent.com/knowledge/pipeline-input/> a skos:Concept ;
    skos:prefLabel "ValueFromPipelineとprocessブロック"@ja ;
    skos:definition "パイプラインから流れてくる値を1件ずつ関数に受け取らせるための、パラメーター属性ValueFromPipelineとprocessブロックの組み合わせ。"@ja ;
    skos:altLabel "パイプライン入力"@ja ;
    ks:requires <https://comcomponent.com/knowledge/param-block/> ;
    ks:prevents <https://comcomponent.com/knowledge/pipeline-last-item-only-bug/> .

<https://comcomponent.com/knowledge/cmdletbinding/> a skos:Concept ;
    skos:prefLabel "[CmdletBinding()]属性"@ja ;
    skos:definition "関数やスクリプトに付けることで、コンパイル済みコマンドレットと同様の「高度な関数」として動作させ、共通パラメーターや$PSCmdletを自動的に使えるようにするPowerShellの属性。"@ja ;
    skos:altLabel "CmdletBindingAttribute" ;
    skos:altLabel "高度な関数"@ja ;
    ks:requires <https://comcomponent.com/knowledge/param-block/> ;
    ks:implements <https://comcomponent.com/knowledge/common-parameters/> ;
    ks:prevents <https://comcomponent.com/knowledge/unbound-argument-silent-ignore-bug/> .

<https://comcomponent.com/knowledge/common-parameters/> a skos:Concept ;
    skos:prefLabel "共通パラメーター"@ja ;
    skos:definition "[CmdletBinding()]を付けた高度な関数に自動的に追加される、-Verbose・-Debug・-WarningAction・-InformationAction・-ErrorActionなどのパラメーター群。"@ja ;
    skos:altLabel "Common Parameters" .

<https://comcomponent.com/knowledge/shouldprocess-whatif/> a skos:Concept ;
    skos:prefLabel "SupportsShouldProcessと-WhatIf/-Confirm"@ja ;
    skos:definition "[CmdletBinding(SupportsShouldProcess)]を宣言すると自動で追加される-WhatIf/-Confirmパラメーターと、$PSCmdlet.ShouldProcess()による実行可否の分岐の仕組み。"@ja ;
    skos:altLabel "ShouldProcess" ;
    skos:altLabel "WhatIf" ;
    ks:requires <https://comcomponent.com/knowledge/cmdletbinding/> ;
    ks:mitigates <https://comcomponent.com/knowledge/unintended-destructive-execution/> .

<https://comcomponent.com/knowledge/pipeline-last-item-only-bug/> a skos:Concept ;
    skos:prefLabel "最後の1件しか処理されない罠"@ja ;
    skos:definition "パイプライン入力を受ける高度な関数がbegin/process/endを1つも書かないと、本体はendブロック扱いになりパイプラインで複数件を流しても最後の1件しか処理されない典型的な事故。"@ja ;
    skos:altLabel "processブロック欠落バグ"@ja .

<https://comcomponent.com/knowledge/dot-sourcing/> a skos:Concept ;
    skos:prefLabel "ドットソース"@ja ;
    skos:definition "スクリプトのパスの前にドットと空白を付けて実行することで、そのスクリプト内で定義した関数・変数が呼び出し元のスコープにそのまま残る実行方法。"@ja ;
    skos:altLabel "Dot Sourcing" ;
    ks:shouldPrecede <https://comcomponent.com/knowledge/psm1-module/> .

<https://comcomponent.com/knowledge/psmodulepath/> a skos:Concept ;
    skos:prefLabel "$env:PSModulePath(モジュールの探索パス)"@ja ;
    skos:definition "PowerShellがモジュールを検索するフォルダーの一覧を保持する環境変数。Windows PowerShell 5.1とPowerShell 7でユーザースコープの既定パスが異なる。"@ja ;
    skos:altLabel "PSModulePath" .

<https://comcomponent.com/knowledge/export-modulemember/> a skos:Concept ;
    skos:prefLabel "Export-ModuleMember"@ja ;
    skos:definition "スクリプトモジュールから外部へ公開する関数・エイリアスを明示するコマンドレットで、未指定時は全関数とエイリアスがエクスポートされる。"@ja ;
    skos:altLabel "公開関数の明示"@ja .

<https://comcomponent.com/knowledge/module-manifest/> a skos:Concept ;
    skos:prefLabel "モジュールマニフェスト(.psd1)"@ja ;
    skos:definition "モジュールのバージョン番号・公開する関数・依存モジュール・対応するPowerShellのバージョンやエディションを宣言するファイル。New-ModuleManifestで雛形を作成する。"@ja ;
    skos:altLabel ".psd1" ;
    skos:altLabel "New-ModuleManifest" .

<https://comcomponent.com/knowledge/execution-policy/> a skos:Concept ;
    skos:prefLabel "PowerShell実行ポリシー"@ja ;
    skos:definition "PowerShellスクリプトの実行可否と署名要求を制御する設定。既定はクライアントOSでRestricted、Windows ServerとPowerShell 7ではRemoteSigned。"@ja ;
    skos:altLabel "Execution Policy" ;
    skos:altLabel "RemoteSigned" .

<https://comcomponent.com/knowledge/comment-based-help/> a skos:Concept ;
    skos:prefLabel "コメントベースヘルプ"@ja ;
    skos:definition ".SYNOPSISや.EXAMPLEなどのキーワード付きコメントを関数やスクリプトに書くことで、Get-Helpが標準コマンドレットと同じ形式でヘルプを表示する仕組み。"@ja ;
    skos:altLabel "Comment-Based Help" ;
    skos:altLabel ".SYNOPSIS/.EXAMPLE" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/psm1-module/> .

<https://comcomponent.com/knowledge/missing-argument-default-bug/> a skos:Concept ;
    skos:prefLabel "必須引数の渡し忘れによる既定値実行"@ja ;
    skos:definition "必須のはずの引数を渡し忘れたまま、チェックがないために既定値や空の状態で処理が進んでしまう事故。"@ja ;
    skos:altLabel "Mandatory未指定の事故"@ja .

<https://comcomponent.com/knowledge/partial-execution-failure/> a skos:Concept ;
    skos:prefLabel "途中まで実行されてから壊れる事故"@ja ;
    skos:definition "引数の形式チェックを関数本体のif文で行うと、チェックより前に副作用が走ってしまい、不正な値のまま処理が一部実行された状態で壊れる事故。"@ja ;
    skos:altLabel "Partial Execution Failure" .

<https://comcomponent.com/knowledge/unbound-argument-silent-ignore-bug/> a skos:Concept ;
    skos:prefLabel "タイプミス引数の黙殺"@ja ;
    skos:definition "高度な関数でない場合、未定義のパラメーター名や余分な位置引数を渡してもエラーにならず黙って無視され、既定値のまま動いてしまう事故。"@ja ;
    skos:altLabel "Unbound Argument Silent Ignore" .

<https://comcomponent.com/knowledge/unintended-destructive-execution/> a skos:Concept ;
    skos:prefLabel "変更系処理の意図しない実行"@ja ;
    skos:definition "削除・移動・設定変更などの変更系処理が、影響範囲を確認する手段がないまま意図せず実行されてしまうこと。"@ja ;
    skos:altLabel "Unintended Destructive Execution" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/mandatory-parameter/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/param-block/> ;
    schema:description "[Parameter(Mandatory)]はparamブロック内のパラメーター宣言に付与する属性である"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_functions_advanced_parameters> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/validate-attributes/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/param-block/> ;
    schema:description "ValidateSetなどの検証属性はparamブロック内のパラメーター宣言に付与する"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_functions_advanced_parameters> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/switch-parameter/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/param-block/> ;
    schema:description "[switch]パラメーターはparamブロック内で宣言する"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_functions_advanced_parameters> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/pipeline-input/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/param-block/> ;
    schema:description "ValueFromPipelineはparamブロック内のパラメーター属性として宣言する"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_functions_advanced_parameters> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cmdletbinding/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/param-block/> ;
    schema:description "[CmdletBinding()]はparamブロックの先頭に付与することで、その関数を高度な関数にする"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_functions_cmdletbindingattribute> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cmdletbinding/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/common-parameters/> ;
    schema:description "[CmdletBinding()]を付けた関数は共通パラメーターの実装を担い、-Verboseや-ErrorActionなどが自動で使えるようになる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_commonparameters> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/shouldprocess-whatif/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/cmdletbinding/> ;
    schema:description "SupportsShouldProcessは[CmdletBinding()]のオプションとして宣言し、これにより-WhatIf/-Confirmが自動追加される"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/scripting/learn/deep-dives/everything-about-shouldprocess> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/pipeline-input/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/pipeline-last-item-only-bug/> ;
    schema:description "ValueFromPipelineとprocessブロックを組み合わせて書けば、パイプラインで流した複数件のうち最後の1件しか処理されない罠を防げる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_functions_advanced_methods> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dot-sourcing/> ;
    rdf:predicate ks:shouldPrecede ;
    rdf:object <https://comcomponent.com/knowledge/psm1-module/> ;
    schema:description "1つのスクリプトを分割する程度ならドットソースで足り、2本目のスクリプトから同じ関数を使いたくなった時点でモジュール化に進むのが判断の目安である"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_scripts> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/psm1-module/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/psmodulepath/> ;
    schema:description "モジュール名と同名のフォルダーを作ってPSModulePath配下に置けば、Import-Module不要で自動読み込みされる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_psmodulepath> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/psm1-module/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/export-modulemember/> ;
    schema:description "公開する関数の範囲を明示的に絞りたい場合、Export-ModuleMemberで明示するのがベストプラクティスとされる(未指定時は全関数とエイリアスがエクスポートされる)"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/export-modulemember> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/module-manifest/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/psm1-module/> ;
    schema:description "RootModuleに.psm1スクリプトモジュールを指定する場合、モジュールマニフェストはその.psm1本体の存在を前提に作られる。RootModuleがバイナリモジュール(.dll)やマニフェストのみの場合はこの前提は当てはまらない。"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/new-modulemanifest> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/psm1-module/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/execution-policy/> ;
    schema:description "共有フォルダー配布したモジュールやスクリプトの実行は、実行ポリシー次第で拒否されることがある"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_execution_policies> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/comment-based-help/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/psm1-module/> ;
    schema:description "他人に渡す・配布するモジュールにはコメントベースヘルプを書き、Get-Helpを効かせることが本記事の推奨である"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_comment_based_help> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/mandatory-parameter/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/missing-argument-default-bug/> ;
    schema:description "[Parameter(Mandatory)]を付けると、指定し忘れた呼び出しは実行前に止まるか入力を促されるため、渡し忘れたまま既定値で動く事故を防げる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_functions_advanced_parameters> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/validate-attributes/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/partial-execution-failure/> ;
    schema:description "検証属性による形式チェックは関数本体の実行前に行われ失敗すれば本体は1行も実行されないため、途中まで実行されてから壊れる事故を防げる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_functions_advanced_parameters> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cmdletbinding/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/unbound-argument-silent-ignore-bug/> ;
    schema:description "高度な関数では未定義のパラメーター名や余分な位置引数を渡すとバインドが失敗するため、タイプミスが黙って無視される事故を防げる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_functions_cmdletbindingattribute> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/shouldprocess-whatif/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/unintended-destructive-execution/> ;
    schema:description "SupportsShouldProcessによる-WhatIf/-Confirmで実行前に影響範囲を確認できるため、変更系処理が意図せず実行されるリスクを減らせる。ただし-WhatIfの伝播は呼び出し先のコマンドまで常に保証されるわけではなく、利用者が-WhatIfを付けて確認しなければ効果を発揮しない"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/scripting/learn/deep-dives/everything-about-shouldprocess> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
