今職場ではPowerShellを書く機会がちょっと増えました。今までも存在自体は知っていたのですが、これが触ってみると意外と便利だったので軽くメモってみる。
ちょっとしたことを実現するにはすごく使いやすいし、Windowsなら開発環境も実行環境も1から設定する必要がない*1から良いですね。
現在日付を取る際のコード
よくありそうな「現在日付をYYYYMMDDで取ってきてよ」ってパターンを例にして考えます。
多分何かのファイル名とかに使えるようにするんじゃないですかね?(ログファイルとか)
とりあえず、変数にYYYYMMDDを格納して、変数の中身を標準出力という流れで書きます。
Windows Batchの場合
SET TODAY=%DATE:/=% echo %TODAY%
Winodowsバッチやコマンドプロンプトでなにかやろうとするのはまぁ定番ですよね。
ただし、ちょっと日付書式が分かりづらいと感じます。ググれば簡単なんですけど、自端末からググれない現場に押し込まれると…
bashの場合
#!/bin/bash today=`date '+%Y%m%d'` echo $today
こっちはまだ日付書式は分かりやすいですね。
まぁ問題はUNIX内でしか使いようがないということです。
(そんなこと言ったらPowershellもWindowsの中だけですが...)
Javaの場合
SimpleDateFormatを使用するパターンを例にします。
// Dateクラスで現在日時を取得 Date d = new Date(); // SimpleDateFormatクラスで表示形式を指定 SimpleDateFormat d1 = new SimpleDateFormat("yyyyMMdd"); String q1 = d1.format(d); System.out.println(q1);
コードが倍近く長くなってしまいました。 「ちょっとしたこと」を実現するためにJavaをガチャガチャやるのはちょっともったいない?のかも。
Powershellの場合
$today = Get-Date -Format "yyyyMMdd" Write-OutPut $today
コマンドレットも日付書式も、直感で分かりやすいですよね。 おまけに標準で入っているコンソールもIDEもコマンドレットのサジェストをしてくれます。非常にあんしんです。
Scriptの結果をファイルに書きたいんだけど?
こちらもよく聞く内容です。コマンドの結果をテキストに吐いたり(どうせExcelにペーストするんだ)、処理結果をログに吐いたりするというのはまぁどこでも使う処理ですよね。
簡単なパターン
Windows Batchの場合。
> hoge.bat > fuga.txt
bashの場合。
$ ./hoge.sh > fuga.txt
素晴らしいパターン(Powershell)
コマンドプロンプトからでも、
> powershell fuga.ps1
powershellを呼び出してからでも。
PS C:\Users\hogehoge> ./hoge.ps1 > fuga.txt
Powershellでエンコード指定して出すなんてこともできます。
パイプラインが使えるのね!おまけにOut-Fileコマンドレットの使い方も分かりやすい。
PS C:\Users\hogehoge> ./hoge.ps1 | Out-File hoge.txt -Encoding "utf8"
えげつないパターン(Java)
ファイル出力はめんどくさいから書きません(Fileクラスとか使うんだろうけど)。
下記が最速なのではないでしょうか。
java -cp %CLASSPATH% package.hoge > fuga.txt
PowerShellではまった点
- VS Codeでps1ファイルを保存したらソースが文字化けして実行エラーになった...
- 解決方法(UTF-8, BOMつきで保存するらしい): http://thinkami.hatenablog.com/entry/2016/07/08/065709
- Powershellが権限不足で実行できへんやんけ!
- デフォルトで実行できないポリシー設定になってるらしい。
- http://www.atmarkit.co.jp/ait/articles/0805/16/news139.html
まとめ
- Powershellはコマンドが直感でわかるし、環境も簡単に揃う。
- .NET Frameworkなんかも使えるらしい。
- なんだったらODBCとかも使えるぞ
- ちなみに僕はSQL*Plusの結果を標準出力させて変数格納させましたけど
- UNIXめいたパイプラインが使えるのが嬉しい
- 極力処理は標準出力させたほうがいいかも?
- Javaはもっと高機能なアプリケーションに使いましょう...
最近はPowershellをVS Codeで書き出してます。会社ではサクラエディタを魔改造。まぁまぁ便利です。