インストールしよう

 JaclとTcl Blendは、オープンソースで開発されており、両方とも SourceForgeのこのサイトで入手できます。 2003年のバージョン1.3.1以降、しばらく停止していましたが、 2005年6月に1.3.2が公開され、この新しい版はTcl/Tk 8.4.11、Java 1.4/5.0という、 最新の周辺環境でもテストされているようです。
 Jacl/Tcl Blendを使用する場合には、 SunのJ2SE SDK 1.3以降と、 (Tcl Blendの場合のみ) Tcl/Tk 8.3以降が必要です。私は次の環境で動作を試しました。
OSTcl/TkJavaTcl/Java
MS-Windows98SE8.3.01.2.21.2.6
MS-Windows XP Home Edition8.3.4.21.41.2.6
RedHat Linux 7.38.4a11.31.2.6
RedHat Linux 7.38.4.21.4.01.3.0
RedHat Linux 7.38.4.31.4.1_021.3.0
RedHat Linux 7.38.4.61.4.1_021.3.1


Jaclのインストール(バイナリアーカイブ編)

 Jaclにはソースアーカイブとバイナリアーカイブが配布されていますが、 Jaclはもともと純粋Javaで書かれたクラスライブラリ(JARファイル)なので、 バイナリアーカイブもどのOSでも共通にインストールできるので、 バイナリアーカイブでも十分使えますし、インストールはとても簡単です。 上記のリンクからバイナリアーカイブをダウンロードして、 展開すると中からjacl.jarとtcljava.jarという2つのJARファイルが出てくるので、 これらに環境変数CLASSPATHを通せば作業は完了です。
 試しに、Java処理系で、クラス「tcl.lang.Shell」を実行させてみましょう。 これが(非公式な呼び名ですが)「jaclsh」とでも呼ぶべきものです。

SHELL> java tcl.lang.Shell
%
このようにプロンプトが出ればOKです。
 なお、このときに、CLASSPATHにTcl BlendのJARファイル (tclblend.jar)を含めていると、次のようなエラーが出る場合があります。
Exception in thread "main" java.lang.NullPointerException
    at tcl.lang.Interp.create(Native Method)
    ...
Exception in thread "main" tcl.lang.RuntimeError:
    could not find class java/lang/Object.
Check that your LD_LIBRARY_PATH environment variable
includes the directory where libtclblend.so resides.
Try looking in the directories under the value of tcl_library,
...
これはなんだかよく分かりませんが、 tclblend.jarをCLASSPATHから外すと発生しなくなるようです。


Jacl 1.2.6のインストール(ソースアーカイブ編)

 さて、よくよく考えてみますと、 Jaclは純粋Javaで書かれたソフトウェアということは、 ソースコードはJavaで書かれているということは、UNIXでもWindowsでも、 別にソースアーカイブを入手する必要はないのですが… Javaコンパイラを持っていればビルドはそれほど難しくないので、 ソース配布からインストールしてもよいでしょう。
 また先述の通り、Jacl 1.2.6には、 アプレットからJaclを起動しようとすると、 Javaコンソールに次のようなエラーが出て使えないというバグがあります。

could not load resource "/tcl/lang/library/init.tcl resource"
これを直すには、ソースを1行だけ直してコンパイルする作業が必要になります。
  1. 上記のリンクから、jaclのソースアーカイブ(.zipまたは.tar.gz) をダウンロードして展開します。
  2. バージョン1.2.6の場合は、まず、jacl1.2.6/src/jacl/tcl/lang/Interp.java をテキストエディタで開き、メソッド Interp.evalResource()の中を次のように 1行だけ修正します。
           //stream = Class.class.getResourceAsStream(resName);
           stream = getClass().getResourceAsStream(resName);
    
  3. あとは簡単です。
    % cd jacl1.2.6/unix
    % sh configure
    % make
    % su root
    # make install
    
  4. これで、特にインストールパスを指定しなければ、 /usr/local/bin に jaclsh、/usr/local/lib にjacl.jarとtcljava.jar がインストールされます。 jaclshを起動してみて、tclshと同じようなインタープリタが動作すればOKです。


Jacl 1.3.1のインストール(ソースアーカイブ編)

 バイナリ配布があってもソース配布からビルドしたいという苦労好きな皆様(帰れ)、 1.3.1での手順です。 WindowsではREADMEを読むと「msys-mingwを使え」 と書いてありますが、私の環境で試すと(msys 1.0.9+MinGW 3.0.0)、 configureがまず失敗しますし、シェル変数JAVAを自分で編集して強引にMakefileを作っても makeでまた失敗します。 ということで現在、1.3.1のコンパイルはLinuxで行い、 できたjacl.jarとtcljava.jarをWindowsに持ってきて使う、というセコ技で逃げています。
 Linux環境でのコンパイルはとても簡単です。 1.3.0までと異なり、configureスクリプトはunixまたはwinサブディレクトリではなく、 アーカイブのトップディレクトリに移っているので、

sh configure; make; make install

でOKです。但し、「make test」すると途中で固まってしまいました。 ちょっと気がかりですが…


Tcl Blendのインストール、UNIX編

 UNIXでTcl Blend 1.3.0をインストールするには、 ソース配布からコンパイルすることになります。 前準備として、JDKをインストールしておくことと、 Tcl処理系をソース配布から configureのとき--enable-threadsオプションをつけて ビルドしておく作業が必要です (インストールはしなくてもよいです)。 また、TclのThread Extensionも必要です。 こちらも、必ずしもインストールしなくてもよいですが、 特定のディレクトリでビルドしておく必要があります。
では、まずThread Extension 2.5のUNIX環境でのインストール手順です。 アーカイブを展開したトップディレクトリにconfigureがありますが、 これはトラップなので実行してはいけません。 人食い箱です。赤く光るのです。(なんじゃ、そりは) ちょっとトリッキーなので要注意。

% tar xozf thread-2.5.1.tar.gz
% cd thread-2.5/unix
% sh CONFIG
% make
# make install
では、ここからがTcl Blendのインストール手順です。
% tar xozf tclBlend1.3.0.tar.gz
% cd tclBlend1.3.0
% sh configure --with-tcl=../tcl8.4.3/unix \
  --with-thread=../thread-2.5/unix \
  --with-java=/usr/local/j2sdk1.4.1_02
--with-tcl はTclをビルドしたディレクトリを指定します。 同様に、--with-threadにはThread Extension をビルドしたディレクトリを指定します。 --with-threadは「thread2.5」ディレクトリの位置を指定しても、 その下の「unix」ディレクトリの位置を指定しても、どちらでもよいようです。
JDKは、PATHに通っているjavacコンパイラを含んでいるものが認識されるので、 あらかじめPATHをそのようになるようにしておくか、 configureの--with-javaオプションを使います。
% make
% su root
# make install
これで、インストール位置を特に指定しなければ、 /usr/local/bin に jtclsh と jwish、 /usr/local/lib に tclblend.jar と libtclblend.so、 /usr/local/lib/tclblend に pkgIndex.tcl が入ります。 tclblend.jarは環境変数CLASSPATHに追加しておく必要があります。
jtclshとjwishはJava VMを実行するためのもろもろの環境変数の設定をしたあと、 スクリプト名に従ってtclshかwishを呼び出すスクリプトです。 しかし実行してみると、(1.2.6の場合)次のようなエラーで止まってしまいました。
basename: error in loading share libraries:
  /usr/local/jdk1.3/jre/lib/i386/classic/libjvm.so:
    undefined symbol: jdk_sem_post
The wrapper script must be named jtclsh or jwish.
ありゃりゃりゃーん!! そこでWebで検索を行ってみると、PHPの一部のバージョンでも、 このようなエラーが起きることがあるそうで、その際の対応策として、 ネイティブの共有ライブラリのパスを少し変えると動いたそうです。 そこで、jtclshをテキストエディタで編集して、次のように書き換えてみます。
#JAVA_ARCH_GREEN_RUNTIME_LIBS=/usr/local/jdk1.3/jre/lib/i386:
/usr/local/jdk1.3/jre/lib/i386/green_threads:
/usr/local/jdk1.3/jre/lib/i386/classic:${LIB_INSTALL_DIR}
JAVA_ARCH_GREEN_RUNTIME_LIBS=/usr/local/jdk1.3/jre/lib/i386:
/usr/local/jdk1.3/jre/lib/i386/green_threads:
/usr/local/jdk1.3/jre/lib/i386/server:${LIB_INSTALL_DIR}
#JAVA_ARCH_NATIVE_RUNTIME_LIBS=/usr/local/jdk1.3/jre/lib/i386:
/usr/local/jdk1.3/jre/lib/i386/native_threads:
/usr/local/jdk1.3/jre/lib/i386/classic:${LIB_INSTALL_DIR}
JAVA_ARCH_NATIVE_RUNTIME_LIBS=/usr/local/jdk1.3/jre/lib/i386:
/usr/local/jdk1.3/jre/lib/i386/native_threads:
/usr/local/jdk1.3/jre/lib/i386/server:${LIB_INSTALL_DIR}
つまり、「classic」を「server」に変えればOKでした。 (jwishはjtclshへのシンボリックリンクなので、編集は不要です) これで、Tcl/Tkでおなじみの「%」というプロンプトと、 jwishの場合は空のウィンドウが出れば完了です。 さっそく、伝統と格式にのっとり、
% puts "Hello, World."
とやってみるのです。
 なお、JaclのJARファイルとtclblend.jarを両方CLASSPATHに含めている場合には、 tclblend.jarの方を先に(より先頭に近いほうに)含めないと、 スクリプトを実行させようとしたときに、
jacl.jar found on env(CLASSPATH) before tclblend.jar
というTclエラーになってしまいます。


Tcl Blend on Windows ちょっとややこしい環境設定

 Tcl Blendのまず一番ややこしいのは環境変数の設定です。JDKのjavaコマンドや、 Tcl/Tk処理系が動くのを確認して、 ダウンロードしてきたライブラリやJARアーカイブを適当なところに配置して環境設定をするわけですが、 バイナリ配布の場合は文書もついておらず、なかなか難しいです。 ここではとりあえず、MS-Windows98、JDK 1.2.2、Tcl/Tk 8.3、 およびMS-Windows XP、J2SE 1.4、ActiveTcl 8.3.4.2上の環境設定です。 ちなみに JDK 1.1.x の元ではまた違う設定になるはずなのでご注意ください。

  1. インストール場所を決める
    現在のTcl Blendにはインストーラはついていません。 そこで、アーカイブを展開して出てくるファイルをどこかにエクスプローラなどを使ってコピーして、 インストール作業をします。 場所はどこでもいいのですが、原因がよくわからないのですが、 「C:\Program Files」のように間に空白文字が入るディレクトリの下は避けたほうがよいようです。 ここでは例として 「C:\Wintools\tcl\lib\tclblend」の下に全部インストールすることにします。 ちなみにTcl/Tkのインストールパスは C:\Wintools\tcl です。
  2. インストールする(ことに決めた)ディレクトリに、次の4つのファイルをコピーします。
    • TCLBLEND.DLL
    • TCLBLEND.JAR
    • TCLJAVA.JAR
    • PKGINDEX.TCL
  3. 環境変数PATHに、使うtclshやwishのパス、JRE(Java Runtime Environment) のパス、TCLBLEND.DLL を置いてあるパスを設定します。 J2SE 1.2.2では、例えばこんな感じです。

    set PATH=%PATH%;C:\Wintools\Tcl\bin
    set PATH=%PATH%;C:\Wintools\Tcl\lib\tclblend
    set PATH=%PATH%;C:\jdk1.2.2\bin;C:\jdk1.2.2\jre\bin;C:\jdk1.2.2\jre\bin\classic
    

    同様に、J2SE 1.4ではこんな感じです。

    set PATH=%PATH%;C:\Wintools\Tcl\bin
    set PATH=%PATH%;C:\Wintools\Tcl\lib\tclblend
    set PATH=%PATH%;C:\jdk1.4\jre\bin;C:\jdk1.4\jre\bin\client
    

  4. TclBlendのインストールディレクトリがTclのライブラリパスに含まれていない場合に限り、 環境変数TCLLIBPATHに、TCLBLEND.DLLを置いてあるパスを設定します。 今回の C:\Wintools\Tcl\lib\tclblend はライブラリパスに含まれているのですが、 あえて蛇足設定をするとするならばこのようになります。 このとき、バックスラッシュではなくスラッシュを使うのに注意が必要です。 おおっと、これはTclBlendだけの話ではなくTCLLIBPATHの共通の話ですね。
    SET TCLLIBPATH=C:/Wintools/tcl/lib/tclblend
    
  5. 環境変数CLASSPATHに、Java処理系が提供しているJARアーカイブをセットします。 J2SE 1.2.2では、下のように2つのJARアーカイブを指定する必要があります。
    SET CLASSPATH=C:\jdk1.2.2\jre\lib\rt.jar;c:\jdk1.2.2\lib\tools.jar
    
    J2SE 1.4でも同じです。
    SET CLASSPATH=C:\jdk1.4\jre\lib\rt.jar;c:\jdk1.4\lib\tools.jar
    
    なお、Tcl Blend付属の TCLBLEND.JAR などの設定は PKGINDEX.TCL 内部で自動的にやってくれるので、指定しなくてもよいようです。
    ここでとても重大な注意ですが、 Jaclに含まれるjacl.jar、TclBlendに含まれるtclblend.jar、 tcljava.jarは、どれもJava VMの拡張JAR用ディレクトリに置いてはいけません。 Java VMの拡張JAR用ディレクトリとは、Windowsでは次の名前で示される2つの場所です。
    C:\jdk1.4\jre\lib\ext
    C:\Program Files\JavaSoft\JRE\1.4\lib\ext
    
    ここにこれらのファイルを置いてしまうと、 クラスローダが混乱して茶碗を投げつけてきたりします(しないしない)。 そのときの対処のコツは、立会い、前三つをとりにきたところを右にかわし、 いなしておいてから一気にはたきこむのです。(黙れ)
  6. tclshを起動します。
    Tcl Blendが対応しているバージョンのtclshを起動します。
  7. tclshプロンプトから次のように打ちます。
      % package require java
    
    「1.2.6」とバージョンの数字が出てきたら大成功です。 そうでない場合は、「TCLBLEND.DLLにパスが通ってへんぞ」 「package javaがロードできひんぞ」 「TCLBLENDかそれに依存するライブラリのどれかが見つかりまへん」 などの(関西弁ではなくて)英語のメッセージが出ます。ちなみに、 この3つはそれぞれ環境変数 PATH、TCLLIBPATH、CLASSPATH が正しく設定されていないときに最もよく出るエラーです。
    あと、この「package require java」というのがTcl Blendを使う Tcl/Tk スクリプトの冒頭部に書かないといけない「おまじない」 というのを覚えておけば大OKです。


Tcl BlendをWindows上でソース配布からビルドするには(OBSOLETE)

Tcl/Java 1.2.6では下記の問題は解決されたので、 この項の内容は完全におぶそりたるになりました。 が、戦争の記憶を未来に伝えるために残しておきたいと思います。 (なんじゃ、そりは) 1998年のことでした。(遠い目)
 Tcl Blend 1.2.5 はまだスタブ機構には対応していないので、 Tcl/Tk 8.2 用のTcl Blend は Tcl/Tk 8.3以降では使えません。 どうしてもという場合はソース配布をコンパイルして作ります。 ここでは MS-Windows98上、Visual C++ 4.0 で JDK 1.2.2+Tcl/Tk 8.3 対応の Tcl Blend 1.2.5 をビルドした例をメモっています。

当日用意するもの:

  • Tcl/Tk 8.3(インストール済み)
  • Tcl/Tk 8.3のソースアーカイブ付属の tclInt.h
  • JDK 1.2.2(インストール済み)
  • Microsoft Visual C++ 4.0(インストール済み)
  • おやつ(できるたけ栄養のあるものを※)
  • Tcl Blendのソースアーカイブ
これだけです。tclInt.h が必要なので、適当にソースアーカイブから引っ張り出してきてください。
※基本的なことですが、バナナはおやつに含みません。
手順は次の通りです。
  1. tclInt.h を、Tcl/Tkをインストールしたディレクトリの下の include サブディレクトリにコピーします。
  2. Tcl Blendのソースアーカイブを展開します。
  3. TclBlend1.2.5\Win に移動します。
  4. makefile.vcをMakefileとしてコピーし、 冒頭部のディレクトリ編成などを調整します。
    TCLJAVA		= tclblend
    TCLJAVA_VERSION	= 1.2.5
    
    # Location you will be installing into
    #TCL_DIR		= D:\Tcl
    TCL_DIR	= C:\Progra~1\tcl
    
    # Root directory of the distribution
    TOP_DIR		= C:\INSTALL\$(TCLJAVA)$(TCLJAVA_VERSION)
    
    # The root directory of your MS dev tools
    TOOLS32		= C:\msdev
    
    # JDK1.2 users should uncomment this section
    JAVA_DIR	= C:\jdk1.2.2
    JAVA_VERSION	= 1.2
    JAVA_CLASSPATH	= $(JAVA_DIR)\lib\tools.jar;$(JAVA_DIR)\jre\lib\rt.jar;.
    
    #Tcl version info needed by the rest of the scripts
    TCL_DOTVERSION	= 8.3.0
    TCL_VERSION	= 83
    
    # If you are compiling from the Tcl Blast 8.0.3 cd, then uncomment these lines
    TCLSH		= tclsh83.exe
    TCLLIB		= $(TCL_DIR)\lib\tcl$(TCL_VERSION).LIB
    
  5. MakefileのTCLBLEND_OBJSから tclResult.obj を削除します。 (これいらないのかどうかわかりませんが、削らないとTclライブラリの中の関数と衝突するといってエラーになります)
  6. nmake でコンパイルします。
  7. TclBlend1.2.5\Win に次のファイルがあれば完了です。
       TclBlend.DLL
       TclBlend.JAR
       TclJava.JAR
       pkgIndex.tcl
    
  8. nmake shell とすると tclsh が起動するので、 「package require java」と打って「1.2.5」とバージョン番号が返ればOKです。。
  9. またそのときにPATHやCLASSPATHを設定しているのが画面表示されるので、 これを見習って、AUTOEXEC.BATを編集します。

拡張レビュー分室 top
(first uploaded 2000/06/25 last updated 2005/11/05, KOUKEN HEIJIMA - MISUMI URANO)