コマンドプロンプトとの互換性も十分
Windows OSはMS-DOSによるCUI(キャラクターユーザーインターフェース)環境から、GUI(グラフィカルユーザーインターフェース)の流行(りゅうこう)に沿って生まれたOSである。そのため、Windows 9x時代はMS-DOSと密着し、Windows NT系となる現在ではNTVDM(仮想DOSマシン)という仮想マシン上で実行されてきた。既にWindows XP Service Pack以降は、後継のコマンドラインシェルとしてWindows PowerShellが標準搭載されていることから、長年使ってきたコマンドプロンプトの進化を期待するのは難しい。
そもそもシェルと呼ばれるコマンドラインインタープリタは、Windows 9x時代のcommand.comやWindows NT系のcmd.exe(コマンドプロンプト)だけではない。UNIXに目を向ければ数多くのシェルが存在し、コマンドライン上の操作を巧みに実行することが可能だ。Windows OS向けにはCygwinやCooperative LinuxといったUNIXライクの実行環境(実装方式は異なる)がオープンソースベースで提供されており、Linuxや*BSDのような利用環境を得ることができる。
だが、各環境のインストールや使いこなしは一定レベルの知識を必要とするため、気軽に導入できるとは言い難い。またWindows OSとUNIXというOSを利用する背景や文化の相違から操作方法や作法も異なり、Windows OSに慣れてきたユーザーが使うのは難しいだろう。しかし、優れたシェルをWindows OS上で使いたいという声は決して小さくない。
前述したCygwinやCooperative Linuxには、UNIX系OSで知名度の高いbash(Bourne Again Shell)やzsh(Z Shell)が利用可能だが、あくまでも独自レイヤー上で動作するため、コマンドプロンプトベースの操作ではない。そこで試したいのが、コマンドプロンプトにbash風の機能を追加する「clink」である。公式サイトに「Bringing Bash's powerful command line editing to Microsoft Windows' cmd.exe」とあるように、bashの強力なコマンドライン編集をMicrosoft Windowsのcmd.exeにもたらすソフトウェアである。
clinkについて語る前にbashの説明をしておこう。そもそもbashはBrian J Fox(ブライアン・J・フォックス)氏が当時のUNIXで使われていたBourne Shellの代替えとしてGNUプロジェクトのために作成したシェルだ。シェルスクリプト(バッチファイルをより高級化した実行環境)などBourneシェルの実装を引き継ぎながら他のシェルが備える機能を吸収し、コマンドヒストリーやファイル名の自動補完機能などを備えている。多くのLinuxディストリビューションでは、bashを標準シェルと採用していることが多い。なお、1990年以降はChet Ramey(シェト・ラメイ)が保守作業を担っている。
さて、clinkは図01のような機能を備えている。bashと同じく「GNU readline」というライブラリを実装し、コマンドラインにおけるショートカットキーをサポート。また、[Tab]キーを押すことで入力中のパスやファイル名を自動補完する機能やセッション間の保持や検索機能、ヒストリー展開を備えたコマンドラインヒストリー機能を備え、UNIX上のbashに似たシェル環境を利用可能だ(図01)。
その一方でコマンドプロンプトと異なり、[Ctrl]+[V]キーによるクリップボードの内容を貼り付ける機能を備えているため、同環境の初期状態で無効になっている簡易編集モードを改めて有効にせずとも貼り付けられるのは便利である。また、bashと同じく多彩なヒストリー機能もサポート。セッション間で保持するため、複数のウィンドウを開いても同じヒストリーを呼び出せる。
キーバインドもbashと同じく[Ctrl]+[R]キーで後方検索(reverse-i-search)を実行し、[Ctrl]+[S]キーで前方検索(i-search)も可能。もっとも一般的なLinuxでは、後者のショートカットキーに端末(ターミナル)エミュレーターへの出力をロックする機能が割り当てられているため、Emacs派以外は使う機会も少ないだろう。いずれにせよ入力文字列のヒストリー操作は、bashと同じ感覚で使用可能だ。もちろん「!」を使ったヒストリー展開も利用できる(図02)。
また、汎用スクリプト言語である「Lua(ルア)」をサポート。もともとC言語のホストプログラムに組み込まれることを前提に設計されたLuaは、Adobe Photoshop LightroomやYAMAHA製ルーターがサポートするなど幅広く利用されている。筆者はLuaでコードを書いた経験がないため、同機能に言及することはできないが、同スクリプトを使いこなしているユーザーには有用な機能となるはずだ。