前回述べたように,
他の Unix ライク環境と比べた Cygwin の特長は,
Windows の世界のものをそっくり扱える点です。
この特長を最も享受できるのがプログラム開発,
とりわけ Java や C# のプログラミングです。
coreutils パッケージにある mv, cp, ls 等の基本コマンド, diffutils パッケージにある diff コマンド群, 正規表現による内容検索のための grep パッケージなど, プログラミングのさまざまな側面を支援する Unix 由来の広範なユーティリティが Windows 上の ソース ファイルに利用できます。
それに加え,Windows ネイティブな処理系 (Java なら JDK, C# なら .NET Framework SDK) を Cygwin から直接利用できます。 同様に §6, §8 では Windows ネイティブなエディタ Meadow を Cygwin から呼び出しました。 高機能シェル bash や zsh から対話的に呼び出すほか, 多機能な GNU make からコンパイラを起動することもできます。
このように,ターゲットを Windows に置きながら, プログラム開発のための優れた環境である Unix の利点の多くを享受できます。
ただし,前回 述べたように, Cygwin 標準パッケージの GNU Emacs は Windows ネイティブ コマンドとの両立性にやや難があります。 日本語入力の能率のことも鑑み,これ以降,さしあたり専ら (GNU Emacs の Windows ネイティブへの移植である) Meadow を使うことにします。
ところで,なぜ Java と C# なのか,その理由は次の2点です。 もちろん,これらはいま有力な,または前途有望なプログラミング言語です。
以下,Cygwin による Java と C# それぞれの開発環境の整備方法を説明します。
JDK (Java 開発キット) を下記からダウンロードします。*1
以下,JDK 1.5.0 のダウンロード ページから JDK 1.5.0_01 (執筆時点の現行版) をダウンロードし,インストールしたと仮定します。 *2
~/.bash_profile 末尾に次の行を追加します。 パス名に空白が含まれていますから,二重引用符が必要です。
PATH="/cygdrive/c/Program Files/Java/jdk1.5.0_01/bin:${PATH}"
追加後,いったん bash を終わり,再び Cygwin を起動します。 java コマンドのパスを確認してみます。
01:~$ type -a java java is /cygdrive/c/Program Files/Java/jdk1.5.0_01/bin/java java is /cygdrive/c/WINDOWS/system32/java 01:~$
このように表示されれば成功です。
Cygwin からコマンドを起動するとき, 環境変数 PATH は自動的に Windows ネイティブな形式に変換されます。 ですから,そのコマンドがさらに別のコマンドを起動したときも無事 PATH が通ります。 このことは次のようにネイティブのコマンド プロンプトを Cygwin から起動し, そこから path コマンドや set コマンドを使えば確認できます。
01:~$ cygstart cmd 01:~$
ですから,Cygwin を起点とする限り, PATH の設定は ~/.bash_profile で十分です。
ちなみに,ちまたでしばしば説明されているように 環境変数 Path をネイティブに 「コントールパネル」→「システム」→「詳細設定」→「環境変数」 で設定しても可です。 もちろん,この場合は C:\Program Files\Java\jdk1.5.0_01\bin のようにネイティブな表記を使います。 しかし,Cygwin があるのに, わざわざネイティブのコマンド プロンプトを直接たちあげ,さらにそこから直接 Java コンパイラを起動することはありませんから, 書き換えや確認・取り消しが手軽な ~/.bash_profile の設定で十分でしょう。
Meadow には Java 編集モードが標準で用意されています。 自動的な字下げと,構文要素ごとの色分けなどがサポートされています。 かっこの不一致などの構文エラーをおかしたときは, 自動字下げが狂いますから,入力時にすぐ気づくことができます。
いわゆる普通の統合開発環境と比較したときの特長は, 複数箇所の同時編集が簡単にできることです。 これは,やさしいサンプル プログラムの範囲を超えた, 現実の,しばしばおそるべき規模のプログラムと格闘するとき, 非常に有用な機能です。*3
Java コンパイラ javac,インタープリタ java およびその他の ユーティリティ コマンドは普通に Cygwin から利用できます。 気をつける点はコマンドに与えるパス名です。
たとえばディレクトリ boo/foo の下に Woo.java があり, 「package boo.foo;」と宣言している*4と仮定します。 この場合は次のように Cygwin のパス名をそのまま与えることができます。 Unix 上の Java 処理系の場合と同様の操作になります。
01:~/src$ cat boo/foo/Woo.java package boo.foo; public class Woo { public static void main(String[] args) { System.out.println("bonan vesperon"); } } 01:~/src$ javac boo/foo/Woo.java 01:~/src$ ls boo/foo/ Woo.class Woo.java 01:~/src$ java boo.foo.Woo bonan vesperon 01:~/src$
Java と同じく C# も必要なファイルは無償配布されています。 ポータルサイトとして次が手ごろです。
http://www.microsoft.com/japan/msdn/netframework/downloads/
次の順序でインストールします。
以上 1, 2, 3 は Windows Update からも導入可能。 ASP.NET での開発をする場合は, 1. を導入するまえに IIS をインストールしておくこと。
(2006年1月追記: .NET Framework 2.0 SDK については, Visual Studio 2005 Express Editions についてのメモ を参照してください)
下図は .NET Framework 1.1 SDK の一部として導入されるドキュメントです。 詳細な仕様と解説に加え,サンプルコードも多数含まれていますから, これだけで一通りの自習が可能です。 *5
.NET Framework のコンパイラとユーティリティ コマンドを利用するには, PATH のほか,いくつか環境変数の設定が必要です。 そのため SDK は一括設定用のバッチファイル sdkvars.bat を用意しています。
/cygwin.bat を次のように書き換えて, sdkvars.bat の呼び出しを追加します。
@echo off C: chdir C:\cygwin\bin call "C:\Program Files\Microsoft.NET\SDK\v1.1\Bin\sdkvars.bat" bash --login -i
追加後,いったん bash を終わり,再び Cygwin を起動します。 C# コンパイラ csc のパスを確認してみます。
01:~$ type csc csc is /cygdrive/c/WINDOWS/Microsoft.NET/Framework/v1.1.4322/csc 01:~$
このように表示されれば成功です。
今のところ GNU Emacs に C# 編集モードは標準では用意されていませんが, 確認した限りでは2種類のプログラムが一般に公開されています。 どちらも R. M. Stallman 氏 原作のプログラムからの派生物であり, GPL にしたがって配布されています。
ここでは後者を Meadow 2.00 にインストールしてみます。 §8.3 の注に述べたように, Meadow 1.15 は基盤となっている GNU Emacs の版が古いため, うまく動きません。
便宜のためソース・ファイル csharp-mode.el のコピーを用意しました (ただし,新しい版が出ていないか上記の一次サイトを確認することを推奨します)。 §8.3 で用意した.emacs ファイルには 実はすでに csharp-mode を利用する仕掛けが施してあります。 ですから,それを導入済みの場合,必要な手順は次の一手です。
もしも未導入の場合は, §8.3 で用意した tohaba-2_00-dot-emacs-using-andale-mono.tar.gz または tohaba-2_00-dot-emacs.tar.gz を, §8.1 で説明する site-lisp.tar.gz とともに導入します。
他の言語の設定も混じっていますが,.emacs ファイルのうち C# 編集モードに関係する断片を下記に示します。
(add-hook 'csharp-mode-hook (lambda ()
(setq c-basic-offset 4
tab-width 4
indent-tabs-mode nil)))
(add-hook 'java-mode-hook (lambda () (setq tab-width 4)))
(autoload 'csharp-mode "csharp-mode" "C# editing mode." t)
(autoload 'python-mode "python-mode" "Python editing mode." t)
(nconc auto-mode-alist '(("\\.cs$" . csharp-mode)
("\\.aspx$" . html-mode)
("\\.pp$" . python-mode)
("\\.pyw$" . python-mode)
("\\.py$" . python-mode)))
ここに示した断片の最初の4行で C# 編集モードに対して
カスタマイズをしています。 このカスタマイズは最近の Microsoft の既定の設定に沿ったものです。 必要に応じて適宜修正してください。
java コンパイラ javac と異なり, C# コンパイラ csc は, ソース ファイルのディレクトリの区切りに / を利用できません。 しかし,C# は名前空間とディレクトリが1対1に対応する必要がなく, C/C++ のようにフラットな伝統的ファイル構成が可能です。 そうした場合,ディレクトリが表立ちませんから, あまり Unix との違いを意識する必要がありません。 make コマンドのための Makefile をナチュラルに書くことができます。
決して模範例ではありませんが,
下記は ASP.NET の「分離コード」ファイル
(.NET Framework SDK ドキュメントの
.NET Framework SDK > アプリケーションの構築 >
ASP.NET Web アプリケーションの作成 >
Web フォーム ページ >
Web フォームのコード モデル
を参照)
をコンパイルするために筆者が汎用的に使いまわしている
Makefile の例です。
all: csc /out:TestApp.dll /r:System.dll /r:System.Web.dll /t:library *.cs
これは Makefile とは名ばかりで,実質は, 依存関係を無視して毎回フォルダの全ソースをコンパイルする 単純なシェルスクリプトですが, さしあたり小規模アプリケーションを作るためなら, CPU クロック 1GHz 程度の携帯用ノート PC でもコンパイル待ちはほとんどありません。 ここではソースファイルをワイルドカードを使って *.cs と指定していることに注目してください。 ワイルドカードは引数が C# コンパイラに渡される前に展開されますから, 相手が Windows ネイティブ コマンドであってもなくても問題なく使用できます。
右図はこの Makefile を使って ASP.NET プログラミングをしているところです。
ブラウザで ASP.NET のページを表示しながら,Meadow で編集し,
Cygwin で make することにより,
仕上がりを確かめつつ作業できます。
C#/ASP.NET を使えば,Web アプリケーションを, Web 用簡易言語を使ったときのように手軽に, かつ Java struts http://struts.apache.org/ で組んだのと同じくらいしっかりした構成で作ることができます。 また,Java の最近の流行と異なり, 専用ツールなしには扱うことができないような大量の設定ファイルは事実上ありません。 シンプルで効果的, そして人の手に負える規模のテキスト ファイルによる管理という特徴を鑑みるとき, いま最も Unix 精神を具現化した Web アプリケーション アーキテクチャとさえいえるかもしれません。 オープンソース互換処理系の作者が十分に動機付けられているだろうことは, 想像に難くありません。
次回は, 本格的ながら低コスト (必要なソフトウェアはすべて無料) で軽量な Web 開発アーキテクチャとしての, Cygwin による ASP.NET プログラミングについて,もう少し説明します。
*1 ダウンロード ページにはオープンソースの統合開発環境ツール NetBeans へのリンクが目立つ位置にあります。NetBeans は使って損はありません。 とりわけ,プログラムのひながたを作り上げるときに有効なツールです。 ただし,ダウンロード ページに用意されているリンクからじかに SDK と NetBeans のバンドルをダウンロードするのではなく, http://www.netbeans.org/index_ja.html から Netbeans 単体のダウンロードへのリンクをたどり, Localization Language として陽に Japanese を選ぶとよいかもしれません。
Windows XP 上の NetBeans 4.0 日本語版のスクリーンショットを2枚示します。 まず GUI をデザインしている例です。
次に同じプログラムのソースを編集している例です。 ソース編集とデザイン編集は 「エディタ」ウィンドウの左上の部分にある「ソース」ボタン, 「デザイン」ボタンで切り替わります。
類似の統合開発環境として Eclipse http://www.eclipse.org/ も有名です。 ただし, NetBeans と比べると GUI 細部の気配りが今ひとつのほか, プラットフォームの最低限の取り決めを守らない点もあり, 個人的には敬遠しています。 話は OS X 上の Eclipse 3.0 になりますが,驚いたことに初期状態で Command+Space に独自に機能を割り当てています。 これは Windows でいえば,日本語入力のための 半角/全角 キー (英語鍵盤では Alt+Backquote) を無断で別の機能にすげかえることと ほぼ等価な暴挙です。 設定で割り当てを解除できますから致命的ではありませんが, Command+Space がシステム予約であることは, 無料公開されている Apple の開発者向け英文ドキュメントに明確に書かれています (Apple Human Interface Guidlines > User Input > The Keyboard > Keyboad Shortcuts Reserved by the System, さらに早見表として Apple Human Interface Guidlines > Keybodard Shortcuts Quick Reference > Table A-1 冒頭の最も目立つ位置にも) から,納得できる余地はありません。
*2 マーケティングのためか分かりませんが,ダウンロード ページ等では 1.5.0_01 ではなく 5.0 Update 1 と表記されています。 ただし,実際にインストールされるフォルダ名や処理系自身が表示する版数は 今のところ後者ではなく前者です。
*3 この点 だけ で評価すれば, NetBeans 4.0 と Eclipse 3.0 はともに落第です。 来るべき Microsoft の Visual Studio 2005 はかろうじて及第, 無償配布されている現行の Apple Xcode が Emacs とともに満足できる成績です。 ただし,最近になって Eclipse 3.1 がこの弱点を克服した模様です。 Emacs の特徴である動的略称展開 (Meta-/) の機能も加わり, 「話の分かる」環境により近づいたといえるでしょう。
*4 もちろん,このようなパッケージ名は説明のためだけです。
*5 ただし,全体の概観を得にくいきらいがありますから, まず最初は,手ほどき的な入門書を読むなり, 適切な講習会を受講するのがおそらく妥当でしょう。