界面駭客日記(10) - Cygwin 増井俊之


UNIXに慣れた人間がDOSやWindowsを使おうとすると、 UNIX上では簡単にできた仕事が Windowsではなかなかできないことに 当惑することがよくあります。 WindowsのGUIやアプリケーションは近年格段に進化しましたが、 コマンドベースの機能は昔からほとんど変わっていません。 UNIXだと普通に使える便利なツールがDOSやWindowsで 使えないという問題は、 なぜか長年まったく解決される見込みが無かったので、 UNIXの好きなユーザは一生懸命UNIXのツールをDOSに移植していたものです。

UNIXのツールをひとつずつWindows用に書き換えていると 大変な手間がかかってしまいますが、 UNIXのシステムコールやライブラリ関数を すべてWindows上でエミュレートするライブラリを使うという 手法を使うことによって、 UNIXのツールをWindowsに移植するのが非常に楽になってきました。 この方式のツールで現在最も広く使われているのが Cygnus Solutions(現Redhat)により開発された Cygwin[*1]というシステムです。

Cygwinとは

Cygwinというのは、 UNIXのシステムコールやライブラリを Windows95/98/ME/NT/2000上でエミュレートする 動的ライブラリ(DLL)と、 それを使って動くGNUの開発ツールやUNIXのアプリケーション群の総称です。 Cygwinを導入することにより、 Windows上のコマンドプロンプトから UNIXの数多くのツールや開発環境を使うことができるようになります。

Cygwinの開発は Windows95が発売された当初から Cygnus Solutionsにおいて開始されており、 1997年にBeta18が/ 1998年にBeta19が/ 1999年にBeta20.1が/ ...と地道に開発が進んでいました。 古いバージョンのCygwinはいまひとつ安定しておらず、 DOS窓でUNIX的なコマンドが使えないこともない、といった雰囲気でしたが、 Beta19やBeta20ではかなり安心して使えるようになり、 2000年にはVersion1.1がリリースされて 非常に快適に使えるようになっています。 現在のバージョンはネットワーク経由の段階的インストールが可能に なっており、ツール毎にアップデートすることも可能です。

Cygwinを使う利点

Cygwinは、 UNIXのパワーユーザにとって非常に便利であるだけでなく、 普通のWindowsユーザにとっても有益なツールです。 WindowsでCygwinを使うことには以下のような利点があります。
UNIXのツールがWindowsで使える
UNIXにはファイルやテキストを操作する優れたツールが沢山あります。 なかでも、 ファイルの中身を検索するgrepコマンド、 ファイル名を階層的に検索するfindコマンドなどは UNIX上でのファイルを検索するのになくてはならないものですが、 Windowsではこういったコマンドが標準装備されていないので ちょっとした検索がすぐにできずに困ってしまいます。 ファイル検索に限らず、 Cygwinを導入すれば UNIXの便利なツールがすべて使えるようになります。
シェルの高度な機能が使える
UNIXのコマンドインタプリタ「シェル」は、 DOS窓に比べてはるかにすぐれた各種の機能を持っています。 たとえば UNIXのシェルでは 「正規表現」というパタンマッチング手法が使えるようになっており、 複雑なファイル名のパタンを指定することができます。 またシェルでは ファイル名などを途中まで入力するだけで残りを補完する 「コンプリーション」機能や、 以前使ったコマンドを再利用できる 「ヒストリ」機能などの便利な機能が用意されており、 長いコマンドやファイル名を簡単に入力することができます。 CygnusのシェルはDOS窓で動作し、 非常にすぐれたCOMMAND.COMのように使うことができます。
フリーのすぐれた開発環境
UNIXのツールは必要ないという人にとっても フリーのプログラム開発環境は魅力的かもしれません。 Cygwinには フリーのCコンパイラ「GCC」が含まれており、 Windowsのプログラム開発を行なうことができます。 またクロスコンパイラを使うことにより Palmの開発もできます。 コンパイラに限らず、 UNIXはもともとハッカーが作ったものですから、 コンパイルなどの作業を支援するMakeや バージョン管理や共働作業を支援するCVSなど 各種の便利なプログラム開発ツールが揃っています。 Windows版のこういった開発ツールも作られていますが、 Cygwinを導入すればそれらほとんどすべてを一度に導入 できることになります。
スクリプト言語が手軽に使える
Perl、Rubyといったスクリプト言語が人気を集めていますが、 CygwinにはPerlやPythonが付属していますし、 それ以外の言語も比較的簡単に導入することができます。
Unix風のサーバが使える
UNIX上では、 telnet/ftp/HTTPなどのサーバが広く使われていますが、 Cygwin上でこれらのサーバを動かすことにより Windows95/98マシンをサーバとして使うことができるようになり、 別のマシンからWindows98マシンにログインしたり ファイルをftpでやりとりしたりすることができて便利です。 UNIXでは かな漢字変換サーバの「jserver」や「skkserv」などが 広く使われていますし、 私は予測型日本語入力サーバ「POBox server」 を使っていますが、 このようなサーバもすべてWindows上で動かすことができます。
WindowsアプリとUNIXアプリを併用できる
UNIXユーザにとっては、これまでにあげた点は 利点ではなく当然の機能であるわけですが、 UNIXユーザにとっては Windowsアプリケーションを使いながらUNIXツールを使うことが できるというのは大きな魅力です。 Windows上のすぐれた画像処理ソフトやブラウザを使ったり RealPlayerでストリーミング放送を聴いたりしながら UNIXの開発ツールを同時に使うことができます。
Cygwinでは、 Cygwinと無関係に作成されたDOSコマンドも シェルから普通に起動することができます。 たとえば コマンドラインから データを指定して 「start」コマンドを起動することにより、 データに関連づけられたWindowsプログラムを 起動することができます。
UNIXを気軽に体験できる
本格的にUNIXを使おうとする場合は 専用のUNIXマシンを使う方が良いのですが、 UNIXをちょっと使ってみたいという場合や 単にUNIXの使い心地を試してみるといった用途の場合は 手持ちのWindowsマシンにCygwinを導入して使ってみるのが 良いかもしれません。 Cygwinを動かすためには 新しいディスクやパーティションの用意も必要なく、 既存のディスクにファイルをインストールするたけでUNIXが動きますし アンインストールも簡単です。 CygwinはWindowsの特定のファイルシステム上にインストールされ、 通常のWindowsの動作に影響を与えることがありません。 セットアップも簡単で、普通のWindowsユーザなら 気楽にインストールすることができますし、 削除しても他に影響を与えることはありませんから 安全です。
共通ソースで開発できる
Cygwinを使えば、 WindowsでもUNIXでも全く同じソースで プログラム開発を行なうことができるので、 オフィスではデスクトップのUNIXマシンでプログラム開発を行ない、 Windowsのノートパソコンを持ち歩いて 開発を続行するといったことができます。

CygwinでのGUI開発

UNIXではウィンドウシステムとしてX Window Systemがよく使われていますが、 最近はCygwin上のフリーのXサーバやライブラリが存在し、 商用のサーバも有るので、 既存のXのアプリケーションをCygwin上でコンパイルしなおして Windowsで動かすことが可能です。 OpenGL/GLUTのような3次元処理ライブラリは Windows用のものもX用のものもあるので、 全く同じソースを異なる環境で使うことができます。 CygwinはWindowsのAPIを呼ぶこともできるので、 Windowsアプリケーションを作ることもできます。 UNIX互換のAPIとWindowsのAPIが混在することになりますが、 ウィンドウ処理にはWindowsのAPIを使って ファイル処理はUNIXのAPIを使う、といったこともできます。

おわりに

CygwinはWindowsで無理矢理UNIX互換環境を実現しようとしているため、 完全互換でないところや効率が悪いところなどもいくつかあります。 たとえば UNIXのプロセスの挙動をWindows上でエミュレーションしているので、 プロセスを大量に作成するような仕事は効率が悪いようですし、 ファイルの名前やアクセス権などの処理も完全互換ではありません。 しかし、通常の利用においてはほぼ完全にUNIX互換の環境が得られると 考えて良いでしょう。 Cygwinの動作については、 開発者のひとりである藤枝さんが Unix Magazineの2000年11月号からの 連載で詳しく解説しています。 また、藤枝さんのページ[*2]には新しい情報が載っているので 参考にするとよいでしょう。

最近はJava, OpenGLなど多くの有用なツールが UNIX, Windows, Macintoshなどで共通に動くようになり、 異なるプラットフォームでの資源共有がやりやすくなってきたのは 憙ばしいことです。 一方、 Macintosh OS XはBSD系のUnixの上に構築されていますし、 WindowsではCygwinを使うことができるので、 ほとんどどのような環境でもUNIXツールを使うことが できる時代になってきました。 このためUNIXが共通プラットフォームとして有用に なってきたように思えます。 計算機によってキーボードの配列や 操作のバインディングが違ったりするととても気持ちが悪いものです。 UNIXとWindowsを一緒に使っていると、 dirのかわりにlsと打ち込んでしまうなど、 コマンド体系が異なるとミスが多くなりイライラします。 単に名前やマッピングを変えるだけなら単純な解決方法もありますが、 DOSの基本コマンドはほとんど UNIXのコマンドで代用することができますから、 どこでもUNIXのコマンド体系を使うことにすれば 困ることはありません。 これまでUNIXに縁がなかった人も、CygwinでUNIXの便利な点を理解し、 共通プラットフォームとして活用していくとよいのではないでしょうか。

  1. http://cygwin.com/
  2. http://www.jaist.ac.jp/~fujieda/cygwin/

Toshiyuki Masui