PowerShellでなんか書くとどんどん一行が長くなって右へ突き抜けていく。必須パラメータを2つ3つ書いただけで軽く120文字突破してウガーである。
目が滑るし直しづらいし3日後見たとき発狂するので、見通しを良くしたい。
この記事で使うために書いたコード自体の参考元はこちらの記事。
Elasticsearchのバックアップ方法について解説します。(スナップショット、リストア)
何のコードか
Elasticsearchのバックアップ設定のため、まずバックアップ先を指定する手順。APIへJSONを投げ設定する。
いろんな書き方
ワンライナー
ワンライナーだとこんなの。読みづらいですね。コピペもコピペ改変もしづらい。
# スナップショットリポジトリ登録
Invoke-RestMethod -Method Post -ContentType "application/json" -Uri "http://localhost:9200/_snapshot/my_backup" -Body '{"type":"fs","settings":{"location":"my_backup_location","compress":"true"}}'
ヒアドキュメント
Bodyパラメータ(JSON)をヒアドキュメントにする。Curlでよく書くやつと似た感じになる。
後から見たり変えたりするのは主にBodyで、Method・ContentTypeを変えることはあんまないだろうから、簡単なのはこの書き方。ワンライナーと記述順変わらないからわかりやすいし。
# スナップショットリポジトリ登録
Invoke-RestMethod -Method Post -ContentType "application/json" -Uri "http://localhost:9200/_snapshot/my_backup" -Body @'
{
"type": "fs",
"settings": {
"location": "my_backup_location",
"compress": "true"
}
}
'@
スプラッティング
スプラッティング(Splatting)による書き方。
パラメータを連想配列にしてコマンドレットに渡す。
詳細については MS docs の about_Splatting を読め。
一番好きな書き方はこれ。
# スナップショットリポジトリ登録
$Json = @'
{
"type": "fs",
"settings": {
"location": "my_backup_location",
"compress": "true"
}
}
'@
$Api = "http://localhost:9200/_snapshot/my_backup"
$Param = @{
Method = "Post"
ContentType = "application/json"
Uri = $Api
Body = $Json
}
Invoke-RestMethod @Param
この書き方の欠点は、エディタの支援を受けづらいこと。最初からこれで書こうとするとPowerShell ISE も VSCode も支援してくれない(できない)。書いてからスプラッティングに変える手間がかかってしまう。あれこれ模索する段階ではやらず、形になってから(後々メンテする自分のために)形を変えるようにしている。
また、記述がデータやパラメータから始まるので、一見したときどこから何が始まっているのかわかりづらいことも欠点。適切にコメントをつけて1年後に読む自分に親切にしたい。
改行文字 ` を使う
使える箇所と使えない箇所のルールがよくわからない。不可解なことが多いので使わないことにしている。