コマンドラインとGUIを融合するHotwire
このような表現になってしまう原因の一つは、普通のデスクトップユーザがUnixのシェルをあいまいに把握しているということにある。普通のユーザはたいていの場合、シェルのことを意識していない。独立したバイナリであるコマンド(lsやchown)と実はシェルが提供している内部的な関数(cdやumask)とがあるということくらいはおそらく知っているかもしれないが、スクリプトをたくさん書く人でなければ、どのコマンドがどちらなのかということまではなかなか覚えていないだろう。大抵のユーザは、必要なコマンドをプロンプトに入力して用を済ませたらシェルにもう用はなく、本来の作業に戻るだけだ。
このように目立たない存在になってしまっているシェルを21世紀風にアップデートする必要があるのではないかと考える人がいても不思議ではない。Colin Walters氏もそう考え、Hotwireを作成した。
基本的な説明
矛盾した表現に聞こえないように願いつつ一言で言えば、Hotwireはコマンドを実行するために利用することのできるGUIアプリケーションだ。しかしbashやtcshなどの従来のUnixシェルがプレーンテキストを出力するのに対して、Hotwireは操作可能なGUIオブジェクトを返す。例えばbashでls
と入力すればカレントディレクトリにあるファイルのリストのテキストが返ってくるが、Hotwireでls
と入力すると、ファイルの大きさ/修正時刻/所有者/権限情報、それにサムネイルアイコンまでが含まれた、クリック可能なコンテンツがウィンドウいっぱいに表示される。
さらに言うと、bashではパイプオペレータ(|
)を使用してコマンドの出力を別のコマンドの入力につなぐことができるが、Hotwireでも同じことができ、Hotwireではパイプでつなげる出力が便利なことにオブジェクトになっているので、よりスマートに操作することができるというプラスもある。
HotwireはPythonで書かれていて、普段よく行なうシステム管理作業をすべてHotwireでできるようにすることを目標に書かれている。よく使うシェル関数とコマンドラインプログラム(主にファイルやディレクトリの管理を行なうためのもの)を内部的に実装していて、それらをHotwire用語で「組み込み」と呼んでいる。
現在の最新リリース(0.600)には、21個の組み込み(cat、cd、cp、current、edit、filter、fsearch、help、history、ls、mkdir、mv、open、proc、prop、py、rm、sechash、sh、term、write)が含まれている。ファイル管理用の組み込みはPythonのオブジェクトを出力し、出力されたPythonのオブジェクトはHotwireの表示キャンバスに渡されるとクリック可能なGUIオブジェクトとして表示される。
例えばls組み込みはFilePathオブジェクトを返すが、このオブジェクトはHotwireの表示キャンバスに渡されるとファイルマネージャ風の表として表示されるが、単純な文字列マッチではなくファイルの様々な属性でフィルターすることが可能なfilter組み込み(grepの代替物)に渡すこともできる。
さらに、必要なコマンドの代替となる組み込みをHotwireがまだ提供していない場合のための、合間を埋めるための特殊な組み込みもある。例えばPythonのコードを実行するpy、任意のシェルコマンドを実行するsh、新規のタブの中で端末を開くtermなどがある。
また、コマンド名やファイル名の補完(タイプするにしたがってマッチするコマンドやファイルがプロンプトの上に現われるウィンドウ内に表示されるので、タブキーで必要なものを選択することができる)などのインタラクティブな便利な機能もいくつか提供されている。
Hotwireのインストール
HotwireはFedora、Ubuntu、Mandriva、Arch、Debian用にあらかじめパッケージされたものが利用可能になっているが、Hotwireの開発速度が速いので、各ディストリビューションのパッケージが最新のものではなくなっている可能性がある。そのような場合ソースパッケージを利用することになるが、ソースパッケージを利用すると言っても単にダウンロードして、展開して、「python ui/hotwire &
」を実行するだけで良い。
HotwireはLinuxシステム上ではいくつものGNOMEサービスを利用するため必ず依存関係を満たしておく必要がある。また適切なPythonパッケージをインストールしておく必要もある。依存関係についての詳しいリストは、HotwireのwikiのHotwireDevelopmentページに書かれている。
なぜ「Linuxシステム上では」と断っているのか不思議に思われたかもしれないが、それはHotwireがWindows上でも動くためだ。Windows用のポートはLinux用の開発ブランチほどには注目されてはいないが、 必要条件のPythonとGTK+ライブラリをインストールすれば実行することができるし、そうすることで開発者がWindowsポートを最新に保っておくことに協力することにもなる。
Hotwireを起動すると、GTK+の標準的なウィンドウが表示される。いちばん上にはメニューバーがあって、その下に大きなキャンバス領域があり、さらにその下にテキストボックスがあり、いちばん下にドロップダウンメニューがある。
テキストボックスにコマンドを入力すれば、(形式はさまざまではあるが)結果がキャンバス領域に表示される。一般的な結果としては、(何を入力したのか忘れた場合のために)入力したコマンドの内容がいちばん上に表示されて、その下にファイルのリストが表示される。いちばん下のドロップダウンメニューには常にカレントディレクトリが表示される。cd
でディレクトリを移動すると、前にいた場所がドロップダウンメニューに追加されるので、元の場所に素早く戻ることができる。
Hotwireとxtermの違いを最も分かりやすく体験するには、典型的なコマンドをいくつか試してみれば良いだろう。例えばHotwireでは、cd
で新しいディレクトリに移動する度に毎回、自動的にディレクトリの内容が表示される。表示されたファイルをダブルクリックすれば、ちょうどNautilusで行なった場合と同じように、該当するファイルタイプ用のそのユーザの環境のデフォルトのアプリケーションがファイルを開く。また右クリックでその他の操作をすることもできる。
Hotwireではsh組み込みを使って様々なシェルコマンドを実行することはできるが、従来のようなシェルスクリプトを書くことはできない。とは言えその代わりにPythonスクリプトを書けば良いので、深刻な欠点ではない。Hotwireのwikiには、Hotwireのアーキテクチャの概要から始まって、パイプラインの基本、独自の拡張と組み込みの書き方まで続く、素晴らしい入門用ガイドが用意されている。
Hotwireを使おう
Hotwireの開発はまだ始まったばかりだ。時間とともに組み込みの数が増えていくだろうということは間違いないが、シェルのコマンドライン内で文字列で簡単に表現されるようなタスクの中には、Hotwireのインタラクティブで2次元の世界には率直に言って馴染まないものもある。
その一例がHotwireプロジェクトのバグ追跡システムでも指摘されているrmだ。rmは他の多くのコマンドラインプログラムと同じように、引数として複数のファイル(複数のディレクトリである場合もある)を受け付けるが、(指定されたファイルを削除するということに関しては特に問題はないが)指定されたファイルが複数のディレクトリの複数のファイルである場合に結果をどのようにグラフィカルに表示するべきかというのは難しい問題だ。また別の潜在的な問題点として、Hotwireの現在のリリースではリモートでの実行やsu/sudoをサポートしていないということがある。このコードは現在開発中だが、次期バージョンは一般ユーザが使える状態にはまだなってないので、今すぐに手持ちのシェルを厄介払いするのは良くないだろう。
とは言え、Hotwireは試してみるべきだ。その便利さには驚かされることだろう。ここに来て思いもよらないことに、CLIとGUIは交わることのない2つの別世界ではなくなった。私を含めデスクトップLinuxユーザのほとんどは常にX Window環境の中にいるのだから、日常的なシェルの操作もそこで行なうことは理にかなうことなのだ。