Windows PowerShell 雑感 [PowerShell]
「Windows PowerShell 宣言!」 [1] という本を買った。ざっと読んだりして感想。
1. コマンド名表記の慣習はなんか変
例えばエイリアスを取得するためのコマンドはカノニカルには Get-Alias と書く。こんな書き方他の言語ではあまり見たことない。キャメルにするならハイフンいらないしハイフン挟むならキャメルいらないと思う。幸い PowerShell では大文字小文字は区別されないので get-alias とも書ける。こうしたい。
2. プロバイダという概念の導入
UNIX なんかでは「ファイルではないようなものもファイル扱いする」という形である種の抽象化を行っていて、それはかなり成功している。PowerShell では「ドライブではないようなものもドライブ扱いする」というアイデアを持ち込んでいて、そのドライブのようなものがプロバイダと呼ばれる。Cドライブは C: で、環境変数へのアクセスを提供するプロバイダは Env: で、エイリアスの一覧は Alias: で、といった感じ。
PS C:\Documents and Settings\ether> cd env: PS Env:\> dir path Name Value ---- ----- Path C:\SMLSharp\bin;C:\Tcl\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:... PS Env:\>
これはなかなか面白くて成功しそうなアプローチだと思う。MS-DOS 時代からの名残の厄介者だった「ドライブレター」という存在に新たな意味を与えているところがポイントだと思うけど、これは良いことなのか悪いことなのかよくわからない。独自のプロバイダを作ることも可能なのかな。
3. 構文の飛躍
普通にシェルとして使う分には「スペース区切りで最初がコマンドで後が引数」というシェルらしい構文に見えるのだが .NET ライブラリを使うようなスクリプトになるとコードが普通のオブジェクト指向言語っぽい構文で満たされるようになって、とても同じ延長線上にあるような言語には見えなくなる。
コマンドラインヒストリの最初の5行を表示:
history | select -first 5
ウェブサイトの内容を取得:
$url = "http://www.google.com"
$client = new-object net.webclient
$client.downloadfile($url, "google.html")
構文解析のされかたについていまいち直感が沸かない。いろいろ試してみないと。
4. 多言語連携が面白そう
「Windows PowerShell 宣言!」という本は IronPython との連携とか C# や VB との連携とか WSH との連携とかをかなり取り上げているのが面白い。PowerShell から VisualBasic のコードをオンザフライでコンパイルして実行するとか、へ~、と思った(これは PowerShell というより .NET として提供している機能なのかもしれないけど)。 .NET は言語混ぜ合わせてごちゃごちゃ遊びたい人には垂涎の環境なのかもしれないとか思えてきた。
今後の目標: いろいろいじって遊びたい
[1] http://www.sbcr.jp/books/products/detail.asp?sku=4797340273
コメント 0