Ruby Workshop Report 前橋孝広 RubyのGUI環境について (報告者: 後藤謙太郎) 午前最後の講演は前橋さんによるRubyとGUI全般のおはなしでした。 Ruby/Gtkのドキュメンテーションにおいて密かに貢献されている前橋さん はGUIをスクリプト言語で作ることのメリット、とくにRubyとの相性を分 析されました。また、Rubyで特に広く使われている二つのツールキットTk とGtkについて紹介されました。発表のあらましは以下の通りです:「GUI とは」、「スクリプト言語とGUIの相性」、「RybyのGUI拡張ライブラリ」、 「Ruby/TkとRuby/Gtk」、「GUIプログラミング」そして「RubyのGUI環境 の課題」。 ■GUIとは まず、Graphical User Interface 略してGUI(海の向こうでは「ぐーいー」と 読むそうですが)について簡単な定義と基本的な用語を与えられました。読者 のみなさんにはGUIそのものについて改めて説明する必要はないとおもわれま すので本報告ではあとで重要になる2つのキーワード「ツールキット」と「イ ベントドリブン」について特に取り上げます。 「ツールキット」とは頻繁に使われるパターンをまとめたもので、一般にスク ロールバーやボタンなどのウィジェット(widget)とよばれるちょっとした部品 を定義した物です。よく知られたツールキットとしてはTk、Gtk、Motif、Qt などがあります。このようにツールキットが数多くある事自体に対しては「車 輪の再発明」のようなことかも知れないし、いろいろあるのはやっぱりいい事 なのかも知れないと善し悪しの判断は避けておられました。 もうひとつの「イベントドリブン」とは、GUIで広くおこなわれている実現形 態のことでイベント駆動と訳されることもありますが、具体的にはイベント処 理ループからコールバックルーチンを呼び出すことを指します。後述されます がこのことを把握しておくことは使い心地の良いGUIを書くうえで重要です。 ■スクリプト言語とGUIの相性・速度 スクリプト言語でGUIを書く場合、具体的な描画などの処理はCなどで書かれた ツールキットの関数を呼び出すことになるわけですが、前橋さんから指摘され たのは、実行時間の大半はインタープリタの制御部分ではなくこのCで書かれ たライブラリレベルで費されていることです。つまり、一般に遅いと考えられ るインタープリタがCPU使用時間に占める割合はわずかですから、利用者であ る人間の速度に合わせて反応すれば良いので、インタープリタである事を恐れ る必要はないわけです。また、GUIは見ためが重要ですから少し修正しては再 実行というサイクルが多くなります。これらの点からいってインタプリタで実 現されるスクリプト言語とGUIの相性は「抜群」であるという結論が導かれま す。 さて、Rubyについてはどうでしょう。実はウィジェットのようなそれほど多く ない種類の多数の部品から成り立っているツールキット自体がオブジェクト指 向であり、またちょこっとだけ違う部品を用意するのには特異メソッド定義が 使えます。しかもブロックやメソッドチェインが自然に使えるRubyでGUIを扱 えるのは「快感」であって、とどのつまり、RubyとGUIの相性は「抜群」。 ■RubyのGUI拡張ライブラリ [ruby-list:9906]によればRubyでは少なくとも次にあげるGUI拡張ライブラリ が存在知られているそうです: tk、gtk、xtoolkit、xview、xforms、ezwgl (ちなみにちょうどこのワークショップが行われたころ、ついにGNOMEの拡張ラ イブラリが ruby-ext メーリングリストで発表されました)。このうち特に広 く使われているtkとgtkがとりあげられました。 ■Ruby/Tk と Ruby/Gtk それぞれ特徴があるのですが、もともとオブジェクト指向であるgtkは特に Rubyと相性がよいようです。現状ではRuby/Tkの方が午後のセッションで紹介 される鴫原さんのIMAP4対応メイラSGmailをはじめ、前橋さんのEmacs風エディ タmime(Mime Is Not Emacs)などのアプリケーションが揃っているようです。 Tk はthreadとの相性がわるいことやTclが邪魔なので将来はptkになるんでは ないかなどの指摘もでました(まつもとさんによればTkへの追従が遅いために 食指が動かないそうですが)。 また、ここで質問が入りWindowsでの動作状況を聞かれましたが、聴衆の中か ら助田さんが「少なくともcygwin版では動いている」と答えられました。しか し、個々のデモプログラムについてまとまった動作状況に関する文書はないそ うですので、誰か調べてくださいという声も出ました。 ■GUIプログラミング GUIプログラミングは他のプログラミングとくらべ、小粒な部品を用意してい くという特徴があります。また、個々のイベントに対応するコールバックの処 理は短時間で終らせるなどして制御をすみやかにメインループに戻す必要があ ります。特にブロックする可能性のあるIOを使う場合は注意が必要です。 一方で、部品の用意とそれを組み合わせるという「糊付け」的な利用はスクリ プト言語の得意とするところです。また、GUIにおけるオブジェクト指向の本 質は継承にあるのではなく、ウィジェットの抽象化やカプセル化にあるとも注 意されました。さらに、概してクラス間の結び付きを弱くすることが組合せを 便利にするという指摘もありました。 ■今後の課題 最後にRubyによるGUIを普及させるための問題点が指摘されました。まず一点 はドキュメントを充実させようと言うこと。それから、GUI Builder があった ほうがよいのではないかという提案。そして、いわゆるキラーアプリケーショ ン(思わずRubyをインストールせずにはいられなくさせるアプリケーション)の 出現を期待されました。 ■結論 * スクリプト言語とGUIの相性は抜群 * RubyとGUIの相性も抜群 * ドキュメントの充実を ■質疑応答 みなさん興味のある話題だったようで活発に質問や意見が出されました。目だっ た意見をいくつか挙げると「ドラッグ&ドロップに対応できませんか」(現状で は対応しているツールキットがないので無理だが、ActiveStateのPerl/Tkでは できるらしい)、「shape extension は Windows で出来ますか」(gtkならでき てる)、「tkやgtkとRubyのthreadの相性は?」(gtkはいまはまとも→tkも今は まとものはず(まつもとさん談)→tkはいまもおそいんじゃないか、とか…)、 「Windowsでも日本語は扱えるのか」(gtkでは極一部のウィジェットを除いて 可能)などなど。 (以上)