はじめに
本記事は、読みやすさ・一貫性・保守性を重視した PowerShell のスタイルガイドです。クリーンでメンテナンスしやすいスクリプトを書くためのベストプラクティスを紹介します。本ガイドは PowerShell Practice and Style Guide に基づいています。
コードのレイアウトとフォーマット
レイアウトの一貫性を保つ
インデント、行の長さ、大文字小文字のルールを統一し、可読性を向上させましょう。
大文字小文字の規則
- 公開識別子には PascalCase を使用。
- 言語キーワードには 小文字(lowercase) を使用。
- コメントベースのヘルプには 大文字(UPPERCASE) を使用。
function Write-Host {
[CmdletBinding()]
param(
[psobject]$Object,
[switch]$NoNewline
)
}
One True Brace Style (OTBS)
開きブレースは行末、閉じブレースは新しい行に配置します。
if ($value -gt 0) {
"Positive"
} else {
"Non-Positive"
}
CmdletBinding とブロック順序
関数は [CmdletBinding()]
で開始し、param()
, begin
, process
, end
の順で記述します。
[CmdletBinding()]
param ()
process { }
end { }
インデント
インデントはスペース4つを使用します。
foreach ($item in $list) {
Do-Something -Param $item
}
最大行長
1行は115文字以内に収め、スプラッティングや括弧で改行を工夫しましょう。
$Params = @{
Name = "Explorer"
Verbose = $true
}
Get-Process @Params
空行とホワイトスペース
- 関数の前後に2行の空行を入れる。
- 行末のスペースは禁止。
- 演算子やパラメータの前後にスペースを入れる。
$Value = 5 + 3
セミコロンを避ける
行末のセミコロンは不要です。
$Options = @{
Margin = 2
Padding = 2
}
関数
基本的な関数
return
を使わず、オブジェクトを直接出力する。- 関数名とパラメータの間にスペースを入れる。
function MyFunction ($param1, $param2) {
...
}
高度な関数
- 名前は
<動詞>-<名詞>
形式にする。 - 常に
[CmdletBinding()]
を使用。 process {}
ブロック内でオブジェクトを返す。OutputType
を指定する。
function Get-Example {
[CmdletBinding()]
[OutputType([psobject])]
param (
[int]$Id
)
process {
New-Object -TypeName psobject -Property @{ ID = $Id }
}
}
ドキュメントとコメント
コメントの基本
- コメントは常に最新に保つ。
- 英語で簡潔に理由を書く。
# UIの重なりを避けるためマージンを調整
$Margin = $Margin + 2
ブロックコメント
長いコメントは <# ... #>
を使用。
<#
.SYNOPSIS
ブロックコメントの例
#>
インラインコメント
インラインコメントは整列させる。
$Options = @{
Margin = 2 # UI調整
Padding = 2 # テキスト周りの余白
}
コメントベースのヘルプ
スクリプトには必ずヘルプを記載する。
function Get-Example {
<#
.SYNOPSIS
データ取得例
.EXAMPLE
Get-Example
#>
}
可読性向上のポイント
コードのインデント
構造内で適切にインデントする。
foreach ($item in $items) {
Process-Item $item
}
バッククォートを避ける
改行にはスプラッティングを活用する。
$Params = @{
Class = "Win32_LogicalDisk"
Filter = "DriveType=3"
}
Get-WmiObject @Params
命名規則
コマンド名・パラメータ名は省略しない
エイリアスは避け、正式名称を使用する。
Get-Process -Name Explorer
パスは明示的に記述する
相対パスではなく $PSScriptRoot
を使う。
Get-Content "$PSScriptRoot\README.md"
~ の使用を避ける
ホームディレクトリは ${Env:UserProfile}
を使用。
cd ${Env:UserProfile}
結論
このスタイルガイドに従うことで、PowerShellスクリプトの可読性と保守性が向上し、チームでの共同作業がスムーズになります。
詳細は PowerShell Practice and Style Guide を参照してください。