3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Linux のシェルスクリプト習得者が PowerShell を触ろうとしたとき、コマンドレットやパラメータの名前が長すぎてカルチャーショックを受ける、という話をよく耳にします。確かに、 PowerShell の考え(厳密には、デフォルトの静的解析ツールである PSScriptAnalyzer の初期設定値)としては、そういった名前を省略しないことによって可読性を上げるのを重視している傾向があります。

ただ、私個人が勝手に思っていることですが、省略非推奨はあくまで ps1 ファイルでスクリプトを書くときの話であって、ターミナルで打ち込む時にも、同じようにフルスペルで書く必要はないと思っています。

そういう背景があって、この記事では PowerShell の省略記法をもうちょっと世に広めることで、 PowerShell への嫌悪感を少なくできればな、という気持ちで書きました。

むしろ嫌悪感が増えてしまう可能性は否定できない

1. エイリアス

PowerShell では、よく使用されるコマンドレットに対して短い別名(エイリアス)が用意されています。

1-1. *-Object コマンドレット

-Object で終わるコマンドレットは -Object を省略したエイリアスが利用可能です。
また、 Where-ObjectForEarch-Object についてはそれぞれ記号版のエイリアスもついています。

# Where-Object (別名: where, ?)
1..10 | where { $_ % 2 -eq 0 }
#=> 2
#=> 4
#=> 6
#=> 8
#=> 10

1..10 | ? { $_ % 2 -eq 0 }
#=> (同上)

# ForEach-Object (別名: foreach, %)
1..5 | foreach { $_ * 2 }
#=> 2
#=> 4
#=> 6
#=> 8
#=> 10

1..5 | % { $_ * 2 }
#=> (同上)

# Group-Object (別名: group)
@(
    [PSCustomObject]@{ Name = "リンゴ"; Color = "赤" }
    [PSCustomObject]@{ Name = "トマト"; Color = "赤" }
    [PSCustomObject]@{ Name = "バナナ"; Color = "黄" }
    [PSCustomObject]@{ Name = "みかん"; Color = "橙" }
    [PSCustomObject]@{ Name = "にんじん"; Color = "橙" }
) | group Color
#=> Count Name                      Group
#=> ----- ----                      -----
#=>     1 黄                        {@{Name=バナナ; Color=黄}}
#=>     2 赤                        {@{Name=リンゴ; Color=赤}, @{Name=トマト; Color=赤}}
#=>     2 橙                        {@{Name=みかん; Color=橙}, @{Name=にんじん; Color=橙}}

# Measure-Object (別名: measure)
1..100 | measure -Average -Sum -Maximum -Minimum -StandardDeviation
#=> Count             : 100
#=> Average           : 50.5
#=> Sum               : 5050
#=> Maximum           : 100
#=> Minimum           : 1
#=> StandardDeviation : 29.011491975882
#=> Property          :

# Select-Object (別名: select)
"one", "two", "three", "four", "five" | select -First 3
#=> one
#=> two
#=> three

# Sort-Object (別名: sort)
"zebra", "cat", "dog", "elephant" | sort
#=> cat
#=> dog
#=> elephant
#=> zebra

# Tee-Object (別名: tee)
"Hello, World!" | tee -FilePath 'test.txt'
#=> Hello, World!
Get-Content .\test.txt
#=> Hello, World!

1-2. Linux ライクなエイリアス

Linux ユーザーのために、馴染みのあるコマンドもエイリアスとして提供されています。

ls    # Get-ChildItem のエイリアス
cat   # Get-Content のエイリアス
cd    # Set-Location のエイリアス
pwd   # Get-Location のエイリアス
rm    # Remove-Item のエイリアス
cp    # Copy-Item のエイリアス
mv    # Move-Item のエイリアス

1-3. 他のエイリアスの確認方法

エイリアスの確認は以下のコマンドで行えます。

# すべてのエイリアスを表示
Get-Alias

# 特定のエイリアスの詳細を確認
Get-Alias -Name ls

# コマンドレットに対するエイリアスを確認
Get-Alias -Definition Get-ChildItem

2. Get-* コマンドレット

Get- から始まるコマンドレットは、Get- を省略することができます:

Get-Location    # 完全な形
location        # Get- の省略

Get-Process     # 完全な形
process         # Get- の省略

また、これはエイリアスではなく、 PowerShell がコマンドレットや関数の名前解決をする仕組みによるものなので、ユーザが定義した関数でも同じように省略ができます。

function Get-Hoge {
    return "HogeHoge"
}

hoge
#=> HogeHoge

3. パラメータの省略

パラメータ名は、一意に識別できる最小の文字数まで省略することができます。

Get-Date -Year 2023
#=> 2023年12月15日 15:46:29

Get-Date -y 2023
#=> 2023年12月15日 15:47:03

# -m の場合、 -Month なのか -Minute なのか区別がつかないため、 -mo まで指定する必要がある。
Get-Date -mo 11
#=> 2024年11月15日 15:47:39

4. return の省略

Script ブロック内では、最後の式の評価結果が自動的に返されるため、return キーワードを省略できます。

function Get-Greeting($Name) {
    return "こんにちは、$Name さん"    # return を使用
}

function Get-Greeting($Name) {
    "こんにちは、$Name さん"           # return を省略
}

# どちらも同じ結果
Get-Greeting -Name '名無し'

ちなみに、2つこういう文を書くと、戻り値の型は配列になります。

function Get-DoubleGreeting($Name) {
    "こんにちは、$Name さん"
    "さようなら、$Name さん"
}

Get-DoubleGreeting -Name '名無し'
#=> こんにちは、名無し さん
#=> さようなら、名無し さん

(Get-DoubleGreeting -Name '名無し').GetType().Name
#=> Object[]

また、関数でサンプルコードを書いていますが、関数の仕様というより、Script ブロックの仕様のため、 ForEach-Object などで指定するスクリプトブロックも同様です。

5. 数値型アクセラレータ

型変換時には、より短い形式の型アクセラレータを使用できます。

# 長い形式
[System.Int32]$number = 42
[System.Double]$pi = 3.14

# 短い形式(型アクセラレータ)
[int]$number = 42
[double]$pi = 3.14

# よく使用される型アクセラレータ
[int]      # 32ビット整数
[long]     # 64ビット整数
[string]   # 文字列
[bool]     # 真偽値
[decimal]  # 10進数
[float]    # 単精度浮動小数点

他の型アクセラレータについては公式ドキュメントをご参照ください。

数値型アクセラレータ - learn.microsoft.com

また、既出ですが、[pscustomobject] も HashTable から変換する際によく使用します。
これは、 System.Management.Automation.PSObject の型アクセラレータになります。

# HashTable
@{ Name = "リンゴ"; Color = "赤" }
#=> Name                           Value
#=> ----                           -----
#=> Color                          赤
#=> Name                           リンゴ

# pscustomobject に変換
[pscustomobject]@{ Name = "リンゴ"; Color = "赤" }
#=> Name   Color
#=> ----   -----
#=> リンゴ 赤

# 型アクセラレータを使用しない版
New-Object System.Management.Automation.PSObject `
    -Property @{ Name = "リンゴ"; Color = "赤" }
#=> (同上)

6. 型サフィックス

数値リテラルには型を示すサフィックスを付けることができ、明示的な型変換を省略できます。

# メモリサイズの指定
$size = 4kb      # 4 キビバイト (4 * 1024)
$large = 2gb     # 2 ギビバイト (2 * 1024^3)

# 整数型の指定
$byte = 255y     # 符号付きバイト
$uint = 42u      # 符号なし整数
$long = 9999l    # long型
$ulong = 9999ul  # 符号なしlong型

# BigInteger
$big = 123456789n  # BigInteger型

他の型サフィックスについては公式ドキュメントをご参照ください。

整数リテラル - learn.microsoft.com

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?