特集次世代WindowsシェルMSH(コード名:Monad)を試す(前編)デジタルアドバンテージ 遠藤 孝信 |
|
Windowsのシェルといえばコマンド・プロンプト(cmd.exe)であるが、その機能はUNIXなどのシェルと比較するとまったく貧弱なものである。WindowsではMMC(Microsoft Management Console)などのGUIによるシステム管理/設定のインターフェイスはリッチだが、運用や管理や自動実行が容易なスクリプトによるインターフェイスは弱い。
これはアプリケーションやサービスの設定がファイル・ベースであるUNIXなどに対して、Windowsがレジストリ・ベースであることも1つの要因だろう。またコマンド・プロンプトの機能を補うために、WSH(VBScriptおよびJScript)やWindows Services for UNIX、あるいはWMI(Windows Management Instrumentation)なども用意されているが、逆にそれらがWindowsのシステム管理を複雑化させていることも否めない。
このような問題を一掃すべく、現在Microsoftはまったく新しいシェルを開発中だ。それが、「Microsoft Command Shell(MSH、開発コード名:Monad)」である。MSHは.NET Frameworkをベースにして設計された次世代Windows用のシェルだ。
多くのシェルがそうであるように、MSHは次の2つの機能を提供する。
- 対話式シェルによるオペレーション
- シェル・スクリプトの実行(スクリプト言語)
もちろんこれら2つは別々のものではない。MSHではシェル・スクリプトは.mshファイルとして記述して実行するが、その記述内容は対話式シェルで直接入力しても実行できるし、対話式シェルで実行する一連のコマンドを1つのシェル・スクリプトとして記述し、1つのコマンドとして実行することもできる。
上述したようにMSHの本来の目的は、強力なシェル・スクリプトによるシステムの管理や運用であるが、本稿ではまず対話式シェルとしてMSHを使いながら、MSHの機能や仕組みを俯瞰(ふかん)してみる。
MSHについての詳細な情報は以下のサイトから得ることができる。
なお、本稿ではつい先日に公開された「Windows "Monad" Shell Beta 3.1 (for .NET Framework 2.0 RTM) x86」をベースに執筆している。使用している環境はWindows XP Professional SP2+.NET Framework 2.0である。
エイリアスが基本となるオペレーション
以下の画面はMSHを起動し、まずはおなじみの「dir」を実行したところである。ドライブの空き領域などは表示されないが、ディレクトリのリストは正しく表示できている。
MSHを起動しdirコマンドを実行した画面 |
UNIXではdirと同等のコマンドは「ls」であるが、MSHではこのコマンドも使える(以下ではMSHの実行結果を画面のキャプチャではなく、画面からコピーしたテキストで示す。また太字はキーボードからの入力を示している)。
| |
lsコマンドの実行結果 | |
この実行結果はdirのそれとまったく同じである。 |
dirとlsの実行結果はまったく同じだが、実はこれらはどちらも既存のコマンドのエイリアス(別名)だ。これらが何のエイリアスかは「aliasコマンド」により分かる。
| |
aliasコマンドの実行結果 | |
「alias エイリアス名」で、エイリアス定義されている元のコマンドを見ることができる。dirもlsも「get-childitemコマンド」の別名である。 |
このように、dirやlsは「get-childitemコマンド」の別名である。
このget-childitemコマンドは、「Cmdlet(コマンドレット)」と呼ばれるMSHの内蔵コマンドの1つである。Cmdletには基本的に「動詞-名詞」の形式のコマンド名が付けられる。内蔵コマンドであるが、ユーザーがC#やVBでコマンドを自作して追加することもできる。Cmdletについては後述する。
■エイリアス定義の一覧
現在実行中のMSHで定義されているエイリアスの一覧を見るには、パラメータなしでaliasコマンドを実行すればよい。
| |
aliasコマンドの実行結果 | |
すべてのエイリアスの一覧が表示される。現在のMSHのバージョンではデフォルトで合計93個のエイリアスがあらかじめ定義されているが、これらはすべてハードコーディングされているようだ。 |
デフォルトで定義されているすべてのエイリアスの一覧を別ページ「alias.html」で用意した。ちなみにこのalias.htmlは次のようなコマンドで作成したものだ(ただし手動で<table>タグに「border=1」を追加している)。
| |
エイリアスの一覧をalias.htmlに出力 |
これは「alias」の出力から、「selectコマンド」により「name」と「definition」の項目を選択し、その結果を「sortコマンド」により「name」の項目でソートし、さらにその結果を「convert-htmlコマンド」によりHTML化したものをファイル「alias.html」に出力している。パイプライン「|」の働きは既存のシェルとは少々異なるのだが、これについては次回で触れる予定だ。
以下に、Cmdletと基本的なWindowsおよびUNIXのコマンドへのエイリアスとの対応を抜き出してみた。
| ||||||||||||||||||||||||
Cmdletと基本的なWindowsおよびUNIXのコマンドへのエイリアス | ||||||||||||||||||||||||
少し無理やりな感じのするものもあるが、MSHではエイリアスを多用することにより、既存のWindowsユーザーだけでなく、UNIX系ユーザーにもある程度使いやすいように配慮しているようだ。
ちなみにファイルのパスの区切りは、日本語版Windowsでは円マーク「\」だが、MSHではUNIXと同様にスラッシュ「/」も使えるようになっている。これに伴い、コマンドのパラメータ(オプション)の指定は、スラッシュではなく、UNIXと同様にハイフン「-」で指定する(例:dir -Recurse)。
■エイリアスの追加と削除
もう少しaliasコマンドの使い方について見ておこう。エイリアスの定義の追加は「set-aliasコマンド」によって行う。次の例は、clear-hostコマンドを「c」にエイリアスしている。これで「c」を実行するだけで画面をクリアできる。
| |
set-aliasコマンドによるエイリアスの追加 |
エイリアスの削除は「remove-itemコマンド」により、次のようにして行える。
| |
remove-itemコマンドによるエイリアスの削除 |
ここで「alias:c」は、エイリアスとして定義されている「c」を意味する。
INDEX | ||
[特集] 次世代WindowsシェルMSH(コード名:Monad)を試す(前編) | ||
1. エイリアスが基本となるオペレーション | ||
2. プロバイダとして提供される各種ドライブ | ||
3. Cmdlet(コマンドレット)と関数(Function) | ||
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|