前回は、TSVファイルをCSVファイルへ変換してからcsv2barchart.ps1を呼び出すというラッパスクリプト「tsv2barchart.ps1」を作成した。解説は大枠の考え方に留めて、tsv2barchart.ps1の内容については触れなかった。今回は、作成したラッパスクリプトについて説明する。
→連載「PowerShell Core入門 - 基本コマンドの使い方」の過去回はこちらを参照。
前回作成したラッパスクリプト
まず、前回作成したラッパスクリプト「tsv2barchart.ps1」は次の通りだ。
#!/usr/bin/env pwsh
#========================================================================
# 引数を処理
# -TSVFile パス グラフのTSVデータファイルパス
# -PNGFile パス 生成するPNG画像のファイルパス
# -OutFile パス 中間生成されるHTMLファイルパス
# -GraphTitle タイトル グラフのタイトル
# -Width 幅 生成するPNG画像の幅
# -Height 高さ 生成するPNG画像の高さ
#========================================================================
Param(
[Parameter(Mandatory=$true)][String]$TSVFile,
[String]$PNGFile = (Get-Location).ToString() + '\out.png',
[String]$OutFile = (Get-Location).ToString() + '\out.html',
[String]$GraphTitle = 'グラフ',
[Int]$Width = 2000,
[Int]$Height = 1200
)
#========================================================================
# TSVファイルからCSVファイルを生成
#========================================================================
$CSVFile = $TSVFile + ".csv"
Import-Csv -Path $TSVFile -Delimiter `t | Export-Csv -Path $CSVFile
#========================================================================
# csv2barchart.ps1を使ってグラフを生成
#========================================================================
csv2barchart.ps1 `
-CSVFile $CSVFile `
-PNGFile $PNGFile `
-GraphTitle $GraphTitle `
-Width $Width `
-Height $Height
#========================================================================
# 作業用の作成したCSVファイルを削除
#========================================================================
Remove-Item $CSVFile
短いスクリプトだが、PowerShellの便利な機能がギュッと凝縮している。覚えておくと便利なので、頭の片隅に入れておき、折りに触れ参考にしていただきたい。
tsv2barchart.ps1の内容を読む - パラメータ
PowerShellスクリプトで特に便利で強力なのがparam()だ。この機能は引数を定義するものだが、PowerShellはparam()の定義に従ってパラメータを処理し、入力補完のデータとしても利用してくれる。引数定義、デフォルト値、必須パラメータ指定、位置引数、キーワード引数などが使え、指定しない場合には可変長引数を使うことができる。
param()は、内容を記述していくことで引数を整理する用途でも使うことができる。コーディングしながら引数を整理することができるわけだ。記述方法がよく考えられており、シームレスにPowerShellスクリプトの書き方になじんでいる。
似たような機能はPythonやJavaScript、C#などにもある。比較的新しいプログラミング言語が備えていることが多い機能の一つだ。
今回は、tsv2barchart.ps1で次のようなparam()を書いている。
Param(
[Parameter(Mandatory=$true)][String]$TSVFile,
[String]$PNGFile = (Get-Location).ToString() + '\out.png',
[String]$OutFile = (Get-Location).ToString() + '\out.html',
[String]$GraphTitle = 'グラフ',
[Int]$Width = 2000,
[Int]$Height = 1200
)
この指定は、次のような内容になる。
パラメータ | 指定 | デフォルト値 | 内容 |
---|---|---|---|
-TSVFile | パス | 指定必須 | グラフのTSVデータファイルパス |
-PNGFile | パス | out.png | 生成するPNG画像のファイルパス |
-OutFile | パス | out.html | 中間生成されるHTMLファイルパス |
-GraphTitle | タイトル | グラフ | グラフのタイトル |
-Width | 幅 | 2000 | 生成するPNG画像の幅 |
-Height | 高さ | 1200 | 生成するPNG画像の高さ |
param()は、「パラメータ名と変数名が同一」という特徴があり、指定の必須・任意、デフォルト値、位置パラメータなどを指定できる。引数の指定を行う機能だが、PowerShellスクリプトで使用する変数をまとめるためにも使えるわけだ。ここで定義しておくとパラメータ経由で変数を変更することもでき、何かと便利だ。