PowerShell スタイルガイド

はじめに

本記事は、読みやすさ・一貫性・保守性を重視した 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 を参照してください。

タイトルとURLをコピーしました