Atomで気に入っている機能(パッケージ)の一つが、atom-beautifyです。
コードを勢いでテキトーに書いても、Beautifyするときれいに整形されるという地味にモチベーションがアップする良い機能ではあるのですが、PowerShellには対応していません。
atom-beautifyのGithubでissueを読んでいると、やはり同じようにPowerShellスクリプトもBeautifyしたいよ、と思っている人はけっこう居るようで、PowerShell-Beautifierを作っている人を見つけました(Great Job!)。
GitHub: DTW-DanWard/PowerShell-Beautifier
早速使ってみたのでここでメモしておきます。
インストール
インストール方法はいくつかあるようですが、おそらくギャラリーからインストールしてしまうのが一番簡単です。
1 2 3 4 5 | PS > Install-Module -Name PowerShell-Beautifier 信頼されていないリポジトリ 信頼されていないリポジトリからモジュールをインストールしようとしています。このリポジトリを信頼する場合は、Set-PSRepository コマンドレットを実行して、リポジトリの InstallationPolicy の値を変更してください。'PSGallery'からモジュールをインストールしますか? [Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): y |
使ってみる
下記のようにインポートしろとも書いてありますが、試した環境では不要でした。
1 | Import-Module PowerShell-Beautifier.psd1 |
GighubのREADMEにも書いてある使い方の例はこんな感じ。
1 2 3 4 5 6 7 | Edit-DTWBeautifyScript C:\temp\MyFile.ps1 # 結果を別ファイルに保存 Edit-DTWBeautifyScript -SourcePath C:\temp\MyFile.ps1 -DestinationPath c:\temp\MyFile_AFTER.ps1 # 標準出力のみ Edit-DTWBeautifyScript C:\temp\MyFile.ps1 -StandardOutput |
ついでに「(サブディレクトリ含む)カレントディレクトリ以下のスクリプトをBeautifyする例」をバッチファイルにしてみました。なお、別記事の方法を使うとどこからでも実行できるコマンドを作れます。
1 2 | @echo off powershell -c "Get-ChildItem -Path . -Include *.ps1,*.psm1 -Recurse | Edit-DTWBeautifyScript" |
テスト
試しにごちゃっとしたスクリプトを書いてみました。PowerShellはインデント不要かつデフォルトで大文字・小文字を無視するので、一応こんなんでもちゃんと動きます。
1 2 3 4 5 6 7 8 9 10 | function test_func( $arg1 ) { $obj=get-wmiobject -class Win32_NetworkAdapterConfiguration foreach($item in $obj){ if($item.IPAddress -ne $NULL ){ write-HOST $arg1 ": " $item.Description -foregroundcolor Yellow; } } } test_func "sample" |
結果はこんな感じ。ちゃんとインデントされてますし、PowerShellらしいキャメルケースに整形されていますね。試した限りでは全角文字列が入ったものもちゃんと整形されました。
1 2 3 4 5 6 7 8 9 10 | function test_func ($arg1) { $obj = Get-WmiObject -Class Win32_NetworkAdapterConfiguration foreach ($item in $obj) { if ($item.IPAddress -ne $NULL) { Write-Host $arg1 ": " $item.Description -ForegroundColor Yellow; } } } test_func "sample" |
ちなみに、そもそも明らかに文法を間違っているスクリプトはエラーになります。
エラーメッセージの中で解釈できなかったところを教えてくれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | PS > Edit-DTWBeautifyScript sample.ps1 Invoke-TokenizeSourceScriptContent : An error occurred; is there invalid PowerShell or some formatting / syntax issue in the script? See error record below. 発生場所 C:\Program Files\WindowsPowerShell\Modules\PowerShell-Beautifier\1.2.3\src\DTW.PS.Beautifier.Main.psm1:1304 文字:5 + Invoke-TokenizeSourceScriptContent -EV Err + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Invoke-TokenizeSourceScriptContent Invoke-TokenizeSourceScriptContent : 'else' キーワードの後にステートメント ブロックが存在しません。 Content: , line: 27 , column: 8 発生場所 C:\Program Files\WindowsPowerShell\Modules\PowerShell-Beautifier\1.2.3\src\DTW.PS.Beautifier.Main.psm1:1304 文字:5 + Invoke-TokenizeSourceScriptContent -EV Err + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Invoke-TokenizeSourceScriptContent |