Tcl/Tkってなーに?

Tcl/Tkってなーに?
Linuxなどのコンピュータの雑誌にときどき出てくるこいつはいったいなんだ? というところから始めたいと思います。だいたいどんなものかというと…

− MS-Windowsをお使いの方は、 「ボタンや絵がついたウィンドウを自由に画面に出す機能がついたバッチファイル」 という説明でおおむね当たっています。 LinuxなどUNIX系のOSをお使いの方だと、 「ウィンドウを自由に画面に出せるUNIXシェル」 でほぼ正解ですよ。 とかく「ウィンドウ」と縁があるTcl/Tk、少しずつ紹介してまいりましょう。

●Tcl/Tkとは?
Tcl/Tkは、プログラミング言語です。 ですが、C言語やJavaなどに比べ、とてもシンプルで使いやすい、 代表的なスクリプト言語のひとつです。 スクリプト言語というのは、言語処理系によって提供される「出来合いの」 機能を使って、やりたいことを簡潔に、 分かりやすく書くことができる言語という意味で、 覚えやすく、書きやすく、実行しやすい (けどちょっと遅いし、あまり複雑なことはできにくい) 言語を指して呼びます。 2013年の今、日本でおそらく最もよく知られているスクリプト言語の3つは、 Perl、JavaScript、 そしてPHPです。 マイクロソフトのVisual Basic (VBScriptやASP.NET) をスクリプト言語の部類に含める人もいるでしょう。 Tcl/Tkは、その他の、 たとえばPythonやSchemeなどと同じ、 「ちょっとマイナーな」こいつらの仲間というわけです。

たくさんあるスクリプト言語の中で、Tcl/Tkをもっともよく特徴づけることは、 GUI(Graphical User Interface)ベースのアプリケーションを簡単に作成できる言語だ、ということです。 Microsoft メモ帳などのテキストエディタを開いて数十行のコードを書くだけで、 華やかなだけでなく実際にデータを整形したりファイルを変換したりといった 「役に立つ」ウィンドウアプリケーションが作成できます。 ウィンドウアプリケーションの開発というと、 以前は枕にでもしたくなるような分厚いXウィンドウシステムや MS-Windowsの開発マニュアルを片手に勉強しなければいけなかったところですが、 テキストエディタでちょろちょろと書いたTcl/Tkのプログラムでも、 少なくとも画面の見栄えは全く遜色ないものが作れるのです。 簡単に開発できるのに加え、JavaなどのGUIに比べて、 動作が軽快なのも利点のひとつです。

また、ファイル操作などデスクトップツールの開発に不可欠な機能も充実しており、 小回りの効くツールを手早く開発するのに適した言語です。 それに、もし処理系に自分の望む機能がなかったり、 インタープリタ言語だけに速度の限界を感じたりしてしまったら、 不足の機能をC言語を使って書き、 Tcl/Tk処理系に新たなコマンドを追加するなどの拡張を行うことが簡単にできます。 この、C言語による拡張が簡単というのもTcl/Tkの大きな特徴のひとつです。 また、その機能を使って、世界中のTclハッカーがデータベースアクセス、 ネットワーク、高度なテキスト処理etc、etcをユーザー寄贈ソフトウェアとして公開しており、 たいへん便利に活用することができます。

ところで「Tcl/Tk」という名前が示す通り、 Tcl/TkはTcl(Tool Command Language)という部分と Tk(ToolKit)という部分からなっています。ちなみにTclは通常 「ティクル」Tkは「てぃーけー」と読まれているようです。

●Tclとは?
Tcl/TkのTcl(Tool Command Language)は、 Tcl/Tkの言語処理系としての中核となる部分です。 もともとはカリフォルニア大学(UC)バークレー校に在籍していた原開発者のJ.K.Ousterhout博士が、 集積回路の設計ツールに使われるスクリプト言語がツールによって全く違うことによる非効率性を改善できないかと考え、 ライブラリとしてC言語のアプリケーションに組み込んだり、 拡張性の高いインタープリタ型言語処理系として使ったりできるスクリプト言語として開発されました。 のちにTkの部分がバンドルされた形で公開されるようになりましたが、 Tcl自身は平易な文法をもつ簡単な言語で、 現在Perl、Pythonと並ぶ代表的な超高級言語(VHLL)として知られ、多くのユーザーを獲得しています。

●Tkとは?
Tclは拡張性の高い言語として開発されましたが、その最初の、 しかも現在に至るまで最大の拡張ライブラリセットがTk(ToolKit)です。 Ousterhout博士は、UNIX計算機でのGUIアプリケーション (つまり画面にウィンドウを出したり、 ボタンを押すと何か動作をしたりするような形態のプログラムで、 当時は作成には難しいプログラミング知識が必要でした) を記述するのにTclがとても適していることに気づき、 当初はTclの有効な活用事例として公開しました。 1987年にApple社が同社の計算機用のビジュアルインターフェース作成用のスクリプト言語 HyperCard を発表したのに触発されたということです。 ところが、 TkはTcl同様拡張性にもすぐれ、 本当に簡単にGUIを駆使した立派なアプリケーションを作成できるため、 多くのUNIXユーザーの支持を得て、 MS-WindowsとMacintoshにも移植され、現在に至っています。


Tcl/Tkの過去

Tcl/Tkは、1988年にJohn K. Ousterhout 博士によってUCバークレー校で最初に作成されたスクリプト言語です。 初期のTcl/Tkは、XウィンドウシステムのGUI環境で、 それまでXLibやOSF/Motifの大変難しいAPIプログラミングに悩まされていた開発者達、 特に集積回路CAD関連のソフト開発者達にとって福音となり、一気に知名度を上げました。 1994年から1998年初頭までは、 Ousterhout氏がJavaやSolarisでおなじみだったサン・マイクロシステムズ社 (現在はOracleに買収)に勤務を始めたことにより、同社内で開発が進められました。 この時期にバージョン8.0がリリースされ、 バイトコンパイラによる実行速度の高速化、Webブラウザプラグインの開発、 Javaとの融合、より高度な正規表現のサポート、 内部文字列をUTF-8に統一したことによる国際化(I18N)の実現などなど、 意欲的な機能拡張が次々に実装されていきました。
UNIX生まれのプログラミング言語として珍しく、 Windows、Macintoshのサポートが移植ではなく一次配布として行われるようになったのも、 この時期からです。

その後、一旦はOusterhout氏が設立したTcl/Tk専門の企業で開発が行われたものの、 直後にソフトウェアの世界には、 オープンソースの大きなムーブメントが押し寄せます。 Tclコミュニティもこの波を受け、2000年10月からはOusterhout氏と、 世界的に有名なTcl/Tk拡張ライブラリを開発した経験のある十数人からなるオープンソースの開発陣が結成されました。 この体制は今も続いており、 彼らの何人か、いやほとんど全員が、ニュースグループcomp.lang.tcl やTcl/Tkのバグデータベースを通じて、 世界中のユーザと日夜議論を深め、開発を進めています。


Tcl/Tkの現在

「現在」と書いて「いま」と読みます。(どうでもいいってば) そんなことはさておき、Tcl/Tkは、1988年に誕生し、 現在も活発に開発が行われている成長途上の言語処理系で、 今日生き残っている「C言語以後の」スクリプト言語 (「第4世代言語」「超高級言語」などとも呼ばれます) としては、最も歴史のある部類に入ります。 現在は先述の通り、オープンソースの開発体制がとられており、 その総本山は SourceForge に置かれています。 また1998年〜2000年10月の間Tcl開発の拠点だったScriptics〜AjubaSolutions 時代に構築された Tcl Developer Exchange でも本体処理系の一次配布を含む多くのソフトウェア・ドキュメントが入手できます。 本体処理系の最新の版は、現在はバージョン 8.6.0 (2012/12/20公開) となっています。

Tcl/Tkは、1990年中頃まではUNIXマシンをターゲットに普及してきましたが、 現在はX11が動くほとんど全てのUNIXのほか、MS-Windows、Macintoshでも動きます。 これは、Perl言語のような「移植」ではなく、オープンソースの開発陣自身がこれらのOS で動く版をすべて同時に開発・配布しているのが特徴で、 タイムラグなくどのOS上でも最新版を使うことができます。

Tcl/Tkは、日本ではあまり知名度は高くありませんが、 UNIX生まれの汎用スクリプト言語としては、 PerlやPythonと並ぶポピュラーな言語です。 一説には世界中で50万〜100万と言われる巨大なユーザーコミュニティが、 活発な開発活動の原動力となっているのです。

ちなみに、Perl、Tcl/Tk、Pythonはそれぞれ生まれたのが 1987、1988、1990年と接近しており、カバーする分野も近いこともあって、 お互いに刺激を与え合ったり仲良く喧嘩したりしている言語同士で、 状況と好みに応じてこれらを2つ以上操るハッカーも少なくないと言われています。


「Tclは悪い言語だから使うな」と言う人が多いそうだけど?

これは多分GNUの創始者R.Stallman氏の発言の影響だと思います。 GNUというのは、かつてUNIXのベンダー各社が自社の UNIX標準ソフトウェアにライセンスを設けて使用を有料化しようとしたのに対し、 「プログラム開発が特許でがんじがらめにされたのでは、 真に優れたソフトウェア技術の育成が損なわれる」として、 UNIX標準のプログラムすべてをフリーソフトウェアで提供することを目的に、 Stallman氏率いるフリーソフトウェア・ファウンデーション(FSF) によって1984年に設立されたプロジェクトです。 この理念は多くのUNIXユーザーに支持され、 現在UNIXユーザーで、 GNUの開発によるソフトウェアを利用しない環境にある人はほとんどいないまでになりました。 創始者Stallman氏自身もUNIX上の今日代表的なエディタである GNU Emacs を開発するなど伝説的に優れたプログラマです。 そのStallman氏が1994年に電子ニュース上で、「Tclは言語仕様に欠陥があり、 GNUソフトウェアにはこの言語を採用するつもりがない」 と発言し、大変な反響と議論を呼びました。 その論議についてはさまざまなニュースアーカイブや論文、 レポートなどが扱っており、一部はネットで入手できます。

しかし実際には、この発言のあった後、Tcl/Tkにはいろいろなことが起きました。 サン・マイクロシステムズ社に開発が移ってさらにパワーアップし、 バージョン8台になっていろいろな面で改良が加えられてきており、 現在では「宗教戦争」と言われがちな言語や環境の個人的な好き嫌いを除けば、 この種の評論に従う必要はないと思います。 そういう意味では、Tcl は偉大なソフトウェア技術者 Stallman 氏の好き嫌いのために若干の不遇をこうむることになったわけですが、 Tcl/TkはGNUに嫌われながら今日まで繁栄を続けている極めて珍しいソフトウェアとしてUNIX界でもむしろ異彩を放っています。

Tcl/Tkとよく対比される同じ超高級言語のPerlにも言えることですが、 これらは午後の優雅なひとときに趣味で楽しむ言語ではなく、 あくまで「実用」に主眼を置いた言語です。 そのため何かが「できる」ことこそ至上命令であり、 それは現実のPerlハッカーやTclハッカーが極めて実用指向、 結果指向なコーディングを好むことにも現れています。 「ボクは仕様が美しい言語しか使わないよ」 というような方を満足させることに対する必然性、 価値というものを、これらの言語はそもそももっていないのです。

やねうらの top
(first uploaded 1997/07/26 last updated 2013/01/19, MISUMI URANO)