FlightGear 最新版とオブジェクト指向

たいへんご無沙汰しております。

FlightGear Alterenative をダウンロードしにお越し下さった方はご存知かもしれませんが、Win / Linux 環境ではすでにリリースされている、FlightGear v0.9.10 の正式版が、そう遠くないうちにリリースされそうです。

これは、Mac ユーザーも最新バージョンの FlightGear をプレイできる、というほかに、私が作ってきた FlightGear Alternative が、あんまし意味がなくなる、ということでもあります。それは、RubyCocoa という開発環境を使って、これまでとてもシンプルだった、Mac 版の起動ランチャが改良されているからです。

といっても、まだ機能的にかぶらない部分もありますし、現在 MacOS X 版公式サイトで配布されている開発途上版や、旧バージョンをお使いの方もいるかもしれないので、完全に意味がなくなるのはまだ先かもしれませんが、これから FlightGear Alternative をダウンロードされる方は、頭の端にでも置いておいてください。

オブジェクト指向に目覚める…?

その FlightGear の起動画面の開発に使われている RubyCocoa ですが、面白いですね。ビルドされた状態のソフトでも、アプリケーションパッケージを開けばソースファイルがそのまま入っています。小さな修正ならば、テキストエディタでそのファイルを編集するだけで簡単にできてしまいます。

Ruby は使ったことはないのですが、ソースは難なく理解でき、そして「うーん、オブジェクト指向!」と唸ってしまいました。

いや、唸るほどか、という人も多いと思いますが、私はプログラミングをあまりしっかり勉強したことがないため、「オブジェクト指向」に関してうっすらとした理解しかないことと、オブジェクト指向の要素を含みつつも、コードを書くときは結構手続き的だったり、それを意識することが少ない AppleScript を使ってきたため、かもしれません。

この Ruby で書かれているプログラムと、FlightGear Alternative がやろうとしていることは(当たり前ですが)全く同じで、内部でコマンドラインを実行しています。そして、コマンドに引数を渡す際に、FlightGear Alternative では、ユーザーが指定した値を取ってきて、それを引数として使える文字列に変換して、それを変数に足して…という作業を羅列してやっています。一方、Ruby で書かれたソースを読むと、基礎となる「引数オブジェクト」から、いろいろなタイプに対応したオブジェクトが派生しているのがよく分かりました。そしてそれら自体が、値を取ってくる GUI 部品や引数の名前を保持しており、一発同じ命令を出せば、自分の担当する引数の文字列を返すようになっています。まあ、当たり前なんですが…。しかし私は「すげえ! AppleScript でもやってみよう!」と思い、それが、更新が遅くなった原因のひとつでもあります。

AppleScript のスクリプトオブジェクト

AppleScript で、独自のオブジェクトっぽいモノを作れる…といえばスクリプトオブジェクトです。しかし、これを普通っぽく(Ruby や Objective-C のように)使えるようにするには、いろいろ引っかかったことがありました。その普通っぽく使うための唯一の法則は:

  • スクリプトオブジェクトは、必ず引数を取らないハンドラでラップしろ!

です。いや、いくつかウェブサイトを見れば分かるのですが(実際見たのですが)、結局自分で試行錯誤しないとよくわからなかった…。で、その理由を書こうと思ったのですが、私が書くと無駄に時間がかかりそうだし、知っている人は知っていることだと思うので、またの機会に。

l2i を開発中

で、上の法則を見つけてから、ここまでスクリプトオブジェクトを使う人がいるのか!? というぐらいてんこ盛りにオブジェクトを作っているのですが、それを使って何をしているかというと、以前公開した、「LEGO CG」を少ない手順でサクッとレンダリングするためのユーティリティ、「l2i」(旧サイト)をブラッシュアップしています。ちなみに制作過程では、

  • archivedDataWithRootObject((colorWithColorName("yellow") of NSColor()) of NSArchiver()

といったコードも登場し、いまいちど AppleScript を使う根拠を考えねばなりません(笑)

新しい l2i は最初、バージョン 0.2位でさくっと出すつもり(出すべき)だったのですが、ちゃんと作り込んでから出そうと考え直し、バージョン1.0 として出せそうな感じになっています。われながら、なかなか便利だと思います。

というわけで、日本のかなりごく一部の方になると思いますが(!)、しばらくお待ちくださいませ…。

Leave a Reply

Your email address will not be published. Required fields are marked *