Perl x Cocoa = CamelBones

| コメント(0) | トラックバック(0) | このエントリーを含むはてなブックマーク

数日前、LimeChat for OSX がリリースされ(LimeChat は Win で有名な IRC クライアント)、それが RubyCocoa で作られたと聞きました。

Cocoa ってのは Mac OS X 用のアプリケーションを構築するためのフレームワークで、普通 Object-C という C を拡張した言語を使って記述します。しかし RubyCocoa を使うとアプリケーションのメインとなる処理を Ruby を使って書く事が出来るようになるわけです。

RubyCocoa いいなぁ、かっこいいなぁって思い僕もチャレンジしようと思ったのですが、新たに Object-C を覚えるだけではなく Ruby も覚えないといけないのはちょっと時間的に大変。Ruby があるなら Perl でもありそうじゃないかっと思い Google 先生に伺ったところ CamelBones っていう物があると教えてくれました。

インストールして少し触ってみたところ、Perl 版 RubyCocoa って感じで、Ruby だった部分を Perl に置き換えて使えると思ってもらって OK な具合。ってことは GUI の Mac 用アプリも Perl で書こうと思ったら書けると。なおかつ CPAN Module も使えると。これって、もの凄くないですか? CPAN 使えたらなんでも作れそうな気がしてきますね。

とりあえず、Xcode やインターフェースビルダーの勉強もかねて、単純にボタンを押したら Hello World と表示する App を作ってみたので、下に書いておきます。

CamelBones で Hello World

実は、もう何年も Mac を触っているのに Xcode ってまともに触ったこと無かったんですよね僕。どうやらプロジェクトを立ち上げたらひな形は作ってくれるようなので、ただウィンドウが表示されるだけのアプリケーションだったらすぐに出来ます。(そんなものをアプリケーションと呼んでいいのか謎ですが)

アプリのインターフェース部分は Interface Builder を使って作るのですが、GUI でボタンやテキストエリアの配置などが出来るので簡単に出来そうな気がします。しかし、僕はボタンなどにインスタンスに動作を与える指示で躓きました。(慣れたら問題ないんっでしょうけど。)

Xcode

CamelBones をインストールしたら、まずは Xcode を起動して新しくプロジェクトを作ってみましょう。僕は Hello って名前でデスクトップジ上に作ってみました。

ウィンドウにパーツを配置

ボタンを押したら Hello World っと返すだけのシンプルな造りなのですが、ウィンドウに何もないと始まらないので、とりあえず、Xcode の画面にある MainWindow.nib ってのをダブルクリックして開きます。そうすると Interface Builder が立ち上がります。これがウィンドウ画面を編集するファイルになります。

MyApp

そうしたら Cocoa〜 ってパネルが出てくるので Cocoa-Controls からボタン、Cocoa-Text から System Font Text をウィンドウの中に配置。

インスタンス(パーツ)に動作を与える

そうしたら、ボタンに、押したら何かする。テキストフィールドに何かを表示するって指示を与えていきます。

Instances

Interface Builder 上に上記のようなパネルがあるので、その中から "File's Owner" というアイコンをダブルクリックします。

Attributes

そうすると上記のような画面が出てくるので Attributes を選び、ClassName の部分を"自分の作ったプロジェクト名"WindowController っとなるように変更する。(僕の場合は Hello っという名でプロジェクトを作ったので HelloWindowController っとなる)

次に Outlet タブを選び add ボタンを押して GUI パーツに値をセットしたり取り出したりするための変数を追加する。(僕は単純に TextArea と付けてみた)そうしたら Instances にある青いキューブのアイコン上でコントロールボタンを押しながらドラッグ&ドロップでウィンドウ上のテキストエリアに持っていく。そうするとテキストエリアに TextArea という変数が関係付けられる。

次に Outlet の横の Action タブを選び add ボタンで sayHello というアクションを登録する。そうしたらウィンドウ上のボタンの上でコントロールボタンを押しながらドラッグ&ドロップで Instances の青いキューブまでカーソルを持っていき関係付ける。(さっきとは逆)これでボタンを押すと sayHello が実行されるようになる。(ボタンから Instances へドラッグ&ドロップするのが英語が読めなくて躓きましたw)

これでやっとアプリケーションの動作部分を書いていく事が出来る。

Action 部分を Perl で記述

単純な事をさせるから Perl のソースを書く部分は少ないんですけど、HelloWindowController.pm を Xcode から開き書いていく。書く事は Outlet で作った TextArea の登録と sayHello のメソッドのみ。

TextArea の登録は下のように 'properties' に追加してやる。

class HelloWindowController {
    'super' => 'NSObject',
    'properties' => ['windowController', 'TextArea',],
};

new じゃないから焦ったんだけど、CamelBones Module のメソッドなんでしょうね。(まだ詳しくソースみてないからわからないけど)

Action はメソッド(サブルーチン)として下のように登録。Cocoa の API を使っているのでこんな感じらしい。

sub sayHello: Selector(sayHello:) IBAction {
    my ($self) = @_;
    $self->TextArea()->setStringValue("Hello, World");
}

これで完成。あとは Xcode から "ビルドして実行" を選べばウィンドウが立ち上がるはず。

Hello, World

実行するとこんな感じ。

作ったソース

感想

Xcode, Interface Builder の使い方がまだ良くわかってないので細かいことは出来ないんですが、テキストのサイズとかは GUI から変更出来るんでしょうね。

作ってみて楽しかったし、可能性も広がりそうな気はするんだけど、Air (元 Apollo) とかと比べるとクライアントを選んでいる時点で負けている気が...。言語自体の熟成度合では CamelBones の方が上なんで(そう思いたい) CPAN が使えることの優位性を生かしたアプリが作れたら面白いなぁって思います。

トラックバック(0)

トラックバックURL: http://www.hasta-pronto.org/mt/mt-tb.cgi/120

コメントする