知識マップ: PowerShellスクリプトの引数設計とモジュール化 ── 「動くスクリプト」から「人に渡せるスクリプト」へ
記事「PowerShellスクリプトの引数設計とモジュール化 ── 「動くスクリプト」から「人に渡せるスクリプト」へ」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
PowerShellスクリプトを人に渡せる品質にするには、paramブロックに[CmdletBinding()]を付けて高度な関数にし、共通パラメーターを自動的に使えるようにすることが出発点になる。必須引数は[Parameter(Mandatory)]で渡し忘れによる既定値実行を防ぎ、ValidateSetなどの検証属性は形式が不正な値を実行前に弾いて途中まで実行されてから壊れる事故を防ぐ。パイプライン入力を受ける関数はValueFromPipelineとprocessブロックを組み合わせないと最後の1件しか処理されない罠があり、変更系の関数はSupportsShouldProcessで-WhatIfによる意図しない実行の防止を組み込む。複数スクリプトで使う共通処理は.psm1モジュールに切り出してExport-ModuleMemberで公開範囲を明示し、PSModulePath配下に置くと自動読み込みされ、配る段階でモジュールマニフェストを追加する。
flowchart LR
accTitle: PowerShellの引数設計とモジュール化の知識マップ
accDescr: paramブロックと[CmdletBinding()]が検証属性やパイプライン入力・SupportsShouldProcessをどう支え、共通処理を.psm1モジュール化してPSModulePathやモジュールマニフェストへ配置する流れと、各段階で防げる典型的な事故の関係を示す図
param_block["paramブロック"]
psm1_module[".psm1スクリプトモジュール"]
mandatory_parameter["[Parameter(Mandatory)]"]
validate_attributes["検証属性(ValidateSet/ValidateRange/ValidateScript等)"]
switch_parameter["[switch]パラメーター"]
pipeline_input["ValueFromPipelineとprocessブロック"]
cmdletbinding["[CmdletBinding()]属性"]
common_parameters["共通パラメーター"]
shouldprocess_whatif["SupportsShouldProcessと-WhatIf/-Confirm"]
pipeline_last_item_only_bug["最後の1件しか処理されない罠"]
dot_sourcing["ドットソース"]
psmodulepath["$env:PSModulePath(モジュールの探索パス)"]
export_modulemember["Export-ModuleMember"]
module_manifest["モジュールマニフェスト(.psd1)"]
execution_policy["PowerShell実行ポリシー"]
comment_based_help["コメントベースヘルプ"]
missing_argument_default_bug["必須引数の渡し忘れによる既定値実行"]
partial_execution_failure["途中まで実行されてから壊れる事故"]
unbound_argument_silent_ignore_bug["タイプミス引数の黙殺"]
unintended_destructive_execution["変更系処理の意図しない実行"]
mandatory_parameter -->|"前提とする"| param_block
validate_attributes -->|"前提とする"| param_block
switch_parameter -->|"前提とする"| param_block
pipeline_input -->|"前提とする"| param_block
cmdletbinding -->|"前提とする"| param_block
cmdletbinding -->|"実装を担う"| common_parameters
shouldprocess_whatif -->|"前提とする"| cmdletbinding
pipeline_input -->|"防止する"| pipeline_last_item_only_bug
dot_sourcing -->|"より先に行うべき"| psm1_module
psm1_module -->|"で構成できる"| psmodulepath
psm1_module -.->|"利用する"| export_modulemember
module_manifest -.->|"前提とする"| psm1_module
psm1_module -.->|"前提とする"| execution_policy
comment_based_help -->|"推奨される対応"| psm1_module
mandatory_parameter -->|"防止する"| missing_argument_default_bug
validate_attributes -->|"防止する"| partial_execution_failure
cmdletbinding -->|"防止する"| unbound_argument_silent_ignore_bug
shouldprocess_whatif -->|"軽減する"| unintended_destructive_execution
概念間の関係(全18件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- [Parameter(Mandatory)]はparamブロックを前提とします。
- 検証属性(ValidateSet/ValidateRange/ValidateScript等)はparamブロックを前提とします。
- [switch]パラメーターはparamブロックを前提とします。
- ValueFromPipelineとprocessブロックはparamブロックを前提とします。
- [CmdletBinding()]属性はparamブロックを前提とします。
- [CmdletBinding()]属性は共通パラメーターの実装を担います。
- SupportsShouldProcessと-WhatIf/-Confirmは[CmdletBinding()]属性を前提とします。
- ValueFromPipelineとprocessブロックは最後の1件しか処理されない罠を防ぎます。
- ドットソースは.psm1スクリプトモジュールより先に行うべきです。
- .psm1スクリプトモジュールは$env:PSModulePath(モジュールの探索パス)で構成できます。
- .psm1スクリプトモジュールはExport-ModuleMemberを利用します。
- モジュールマニフェスト(.psd1)は.psm1スクリプトモジュールを前提とします。
- .psm1スクリプトモジュールはPowerShell実行ポリシーを前提とします。
- コメントベースヘルプは.psm1スクリプトモジュールに対する本記事の推奨です。
- [Parameter(Mandatory)]は必須引数の渡し忘れによる既定値実行を防ぎます。
- 検証属性(ValidateSet/ValidateRange/ValidateScript等)は途中まで実行されてから壊れる事故を防ぎます。
- [CmdletBinding()]属性はタイプミス引数の黙殺を防ぎます。
- SupportsShouldProcessと-WhatIf/-Confirmは変更系処理の意図しない実行を軽減します。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。