PowerShellはWindows環境で強力に動作するシェルスクリプト言語です。
初心者でも簡単に扱える一方、変数操作や条件分岐、ループなどプログラミングの基本を学ぶのにも最適です。
本記事では、PowerShellを使って「サイコロを振る」シンプルなスクリプトを作成しながら、基本的な構文や組み立て方を学びます。最後には演習問題も用意していますので、ぜひ挑戦してみてください。
前提条件
- Windows 10/11 がインストールされていること
- PowerShell(バージョン5.1以上)が使えること
- テキストエディタ(VS Code、メモ帳など)が使えること
サイコロとは?
サイコロは1から6までの目がランダムに出る立方体の遊具です。
プログラムで再現するには「乱数」を使って、1〜6の範囲で数値を生成します。
PowerShellでは Get-Random コマンドレットが乱数生成に便利です。
本記事では主に変数と Get-Random、Write-Host を使います。
サイコロスクリプトの作成
以下のコードをテキストエディタに貼り付け、DiceRoll.ps1 という名前で保存してください。
# DiceRoll.ps1
# PowerShellでサイコロを振るスクリプト(初級編)
param(
[int]$Rolls = 1 # 振る回数(デフォルト1回)
)
# サイコロの目を格納する配列
$resultList = @()
for ($i = 1; $i -le $Rolls; $i++) {
# 1〜6の乱数を取得
$roll = Get-Random -Minimum 1 -Maximum 7
$resultList += $roll
Write-Host "Roll #$i: $roll"
}
# 合計と平均を計算して表示
$total = ($resultList | Measure-Object -Sum).Sum
$average = [math]::Round($total / $Rolls, 2)
Write-Host "`n=== 結果 ==="
Write-Host "合計: $total"
Write-Host "平均: $average"
スクリプト解説
- param ブロック
スクリプト実行時にオプションを受け取る。ここでは $Rolls に振る回数を指定可能。 - 配列の初期化
@() で空の配列 $resultList を作成。 - for ループ
1 から $Rolls まで繰り返し、毎回 Get-Random -Minimum 1 -Maximum 7 で1〜6の乱数を生成。 - 結果の格納と表示
生成した乱数を配列に追加し、Write-Host でコンソールに出力。 - 集計
Measure-Object -Sum で合計を計算し、.NETの [math]::Round で平均を小数点以下2桁に丸めて表示。
スクリプトの実行方法
PowerShellを管理者権限で起動し、スクリプト保存先に移動して以下を実行します。
# 実行ポリシーを一時的に緩める(必要に応じて)
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
# スクリプトを1回だけ振る
.\DiceRoll.ps1
# 5回振る
.\DiceRoll.ps1 -Rolls 5
カスタマイズのアイデア
- 複数のサイコロを同時に振る:例えば2個のサイコロの合計を出すように変更。
- 出目の分布をヒストグラム表示:各目の出現回数をカウントして棒グラフ風に表示。
- GUI化:WindowsフォームやWPFを使ってボタン操作でサイコロを振る。
演習問題
- サイコロ2つを振って合計を表示
2つの乱数を生成し、その合計を「ダイス1: x, ダイス2: y, 合計: z」の形式で表示するスクリプトを作成してください。 - 出目の分布を集計
$Rolls 回振った後、1〜6のそれぞれの出現回数をカウントし、以下のように表示してください。 出目 回数 1 3 2 5 3 2 … … - ヒストグラム風表示
演習2の結果を利用し、回数分だけ“■”を並べて簡易ヒストグラムを表示するようにしてください。
解答例
演習1 解答例
param([int]$Rolls = 1)
for ($i = 1; $i -le $Rolls; $i++) {
$d1 = Get-Random -Minimum 1 -Maximum 7
$d2 = Get-Random -Minimum 1 -Maximum 7
$sum = $d1 + $d2
Write-Host "Roll #$i: ダイス1=$d1, ダイス2=$d2, 合計=$sum"
}
演習2 解答例
param([int]$Rolls = 10)
# カウント用ハッシュテーブル初期化
$countTable = @{1=0;2=0;3=0;4=0;5=0;6=0}
for ($i = 1; $i -le $Rolls; $i++) {
$roll = Get-Random -Minimum 1 -Maximum 7
$countTable[$roll]++
}
Write-Host "`n出目`t回数"
foreach ($key in 1..6) {
Write-Host "$key`t$countTable[$key]"
}
演習3 解答例
param([int]$Rolls = 20)
# カウント用ハッシュテーブル初期化
$countTable = @{1=0;2=0;3=0;4=0;5=0;6=0}
for ($i = 1; $i -le $Rolls; $i++) {
$roll = Get-Random -Minimum 1 -Maximum 7
$countTable[$roll]++
}
Write-Host "`n出目`t回数`tヒストグラム"
foreach ($key in 1..6) {
$bar = '■' * $countTable[$key]
Write-Host "$key`t$countTable[$key]`t$bar"
}
まとめ
この記事では、PowerShellの基礎を学びながらサイコロを振るスクリプトを作成しました。
変数、ループ、乱数生成、配列操作、集計など、プログラミングの基本が詰まった内容です。
演習問題にもぜひ取り組み、PowerShellの楽しさと奥深さを体感してください!