2013年1月3日木曜日

PowerShell:Windowsでおそらく最高のシェル

Windows環境だとシェルが貧弱という問題が良く取り上げられますが,実際貧弱だと思っていました.有名どころだと
  • コマンドプロンプト
設計が古すぎて論外.互換性が優先されているせいで新しくなる気配がない
  • Cygwin
Windows環境でUnixシェルが使える.便利だけれど環境によっては動作が遅い.他のPCに安易にインストールし難い.
  • Nyaos
Windows環境でUnixライクなシェルが使える.使っている人の評判は良さそうだが汎用性がない.

そのような状況を改善するためにMicrosoftが送り込んできたのがPowerShellなのですが,これの良いところは以下の様な物が挙げられます.
  • Windowsネイティブ
  • オブジェクト指向ベース
  • スクリプト言語としては,そこそこ高機能
  • .net framework等との連携
  • Windowsの管理者タスクが可能
  • ISEという統合開発環境が使える
 実際使用してみると,さすがに最新のシェルだけあった,初期状態で出来る範囲が広く,コマンドプロンプトとは比べものにならないです.特におもしろいと感じたのは,
  • オブジェクトベースのパイプ処理
 Unixシェルだと標準入出力によるパイプ処理になるのですが,それがオブジェクトになっているため,より多くの情報を渡せます.
  • sshライクのリモート接続
WindowsでもGUIなしでリモート接続出来るようになったので,これは便利です.ただし,リモート接続先のネットワークドライブには初期状態で接続出来ないのは残念なので改善してもらいたいです.

逆にイマイチだと感じたのは以下の点です.
  • 基本のGUIはコマンドプロンプトのまま
何故GUIが刷新されなかったのかは不明ですが,コマンドプロンプトと変わらない状態です.最大化しようともウインドウ幅が固定であったり,簡単にコピー&ペーストできない仕様であったり,コピーした物の画面端で改行されてしまう問題であったりと改善要望は多かったと思うのですが,互換性を重視したと言うことなのでしょうか.これについてはckwを利用すれば回避できるので,後日書こうと思います.
  • コマンドプロンプトのコマンドは完全互換ではない
コマンドはPowershellのコマンドレットのエイリアスとして設定されているだけで完全互換ではありません.そのためコマンドのオプションを使用している場合には対応するコマンドレットのオプションを探す必要があります.完全互換だと思って使用すると痛い目に遭うので,オプションを使用する場合は,別の物だと思ってしまった方が精神的に楽かもしれません.
  •  オブジェクトベースが仇となる場合もある
基本的に内部データがオブジェクトになるため,内部でのデータ量が大きくなりがちです.サイズの大きいデータを扱ったりする場合はテキストベースの方が有利になると思います.また,オブジェクトベースなのでデータを取り出すのに一手間必要であるところも取っつきにくいかもしれません.awkやsedのような事は出来るのですが(これはすごいことだと思います),すこし追加の処理が必要だったりします.
  • 絶望的に人気がない 
使ってみるとかなり良いのですが,人気が全然ありません.特に日本は酷いですね.人気と書籍の冊数は相関があると思うのですが,PowerShellの書籍は殆どありません.新しいという事を差し引いても少なすぎるように感じます.とはいえ,最近はWeb上にいくらでも情報があるので何とでもなるといえばなります.
  •  デフォルトエンコードがUTF-16
デフォルトエンコードがUTF-16なので,Out-File等を使うときに注意しなければいけない.コマンドプロンプトに合わせるためには以下の様にする必要があります.
Out-File -Encoding ascii out_file.txt

不満な点もあるのですが,Windows環境では最高のシェルだといえるのではないでしょうか.そして現時点で進化途上であり,今後の大幅な改良が期待できそうです.そういうわけで,MicrosoftはもっとPushしてコマンドプロンプトを絶滅させるつもりで広めていくべきです.

(続き)
PowerShell+ckwでUnixシェルライクな環境構築


0 件のコメント:

コメントを投稿