PowerShell Advent Calendar 2日目のエントリです。
今年は.NET Core on RHELを追っかけた一年だったので、その関連でPowerShell on Linuxの現状というか簡単な振り返りをしてみたいと思います。事の始まりはPowerShell のOSS化とLinuxへの対応が発表されたこのブログでした。
PowerShell v6 のα版というステータスでLinuxを含め各種OS向けのバイナリが1月に1回くらいのペースでリリースされています。
今のところ、CentOS系はrpmをダウンロードしてyum installを実行する形式になっています。CentOS系だからFedoraでもいけるのでは...?とも思われますが、内部で参照している.NET Coreのランタイムが古いせいか、Preview版のFedora24向け.NET Coreをインストールしていても、powershellは起動に失敗します。
$ powershell Failed to initialize CoreCLR, HRESULT: 0x80131500
ということなので、CentOS系ではCentOSもしくはRHELで楽しみましょう。さて、LinuxのShell上でpowershellコマンドを実行するとPowerShellのShellに変わりますが、これがなかなか補完が効いたり、色がついたりして使い勝手がよいです*1。
これは最後の$_.の間で補完候補を表示した結果です。
シンタックスハイライトの様子。
さて、現状PowerShell v6のαで使えるコマンドは350個ほどしかなく、モジュールを追加したいところですが、そこにも問題があります。
PS /root> @(Get-Command).Count 349
既存のモジュールの中にはC#などで書いたコードをコンパイルしたdllを参照しているものもありますが、.NET Framework版でビルドしたdllはWindows版でしか動きません。その一つがAzure PowerShellになります。こちらは、PowerShell on Linuxが公開されてかなり早い段階で.NET Core版のバイナリもPreview扱いでリリースしましたが、まだPreview扱いのままのようです... tech.tanaka733.net
さて、PowerShell on Linuxの今後ですが、まだすぐに普及するというステータスではないように思われます。コマンドなりモジュールがLinuxのコマンドにも対応してくれるとうれしいですね。なんといってもPowerShellのメリットはオブジェクトの集合がパイプで流れてきて、オブジェクトのまま*2処理できることにあると思っているので、Linuxの管理系コマンドの結果がオブジェクトでとれると使い勝手もよくなります。
また、DSCの動向ですが、例えば、Azure上でLinuxを動かす場合、Azure VMやVNETまわりのリソースはARMテンプレートで管理し、起動したLinuxより上のレイヤー(OSインストール後の設定、ミドルウェア製品のインストールやセットアップ)はAnsibleで行うというのが一つの形としてあります。例えばLinux中心の環境で一部Windows Serverを動かしたいとなれば、AnsibleでWindowsを管理しAnsibleの標準コマンドで管理しづらいようなWindowsの機能はPowerShell DSCでセットアップするということが考えられます。一方、Windows中心の環境で一部Linuxを使いたいとなれば、PowerShell DSC中心に置いて、PowerShell DSC for LinuxでLinuxを管理する方法がとれるかもしれません。AnsibleのModuleをPowerShell DSCから呼び出すという試みをしている人もいるので、この辺は何がメジャーになるのかまだわからないなあという感想を持っています。
なにはともあれ、なかなか面白いものが出て来たので、来年も引き続きさわっていきたいと期待している、というのが個人の感想です。