【コラム】

ダイナミックObjective-C

48 F-Script - CocoaとObjective-Cのスクリプティング環境

    木下誠  [2006/08/30]

    今回は、F-Scriptを紹介しよう。CocoaとObjective-Cを操作する、スクリプティング言語環境だ。もちろん、動的なObjective-Cの特性を利用して、他のアプリケーションへの侵入もできる。オープンソースプロジェクトなので、ソースコードを見れるのもポイントだ。

    F-Script言語とインタプリタ

    まず、F-Scriptでは、独自のスクリプト言語を実装している。言語仕様によれば、文法はSmalltalkをベースにしており、SelfとAPLからも影響を受けているらしい。Smalltalkのように、制御文を使わずに、論理値とブロックを使って記述を行うところが面白い。詳しくは、言語仕様を参照してほしい。

    このように、文法はSmalltalkの影響を強く受けているが、ランタイムはObjective-Cと密接な関係がある。F-Scriptにはインタプリタが付属するのだが、ここからObjective-CおよびCocoaのオブジェクトを直接作成して操作できるのである。実際にやってみよう。

    F-Scriptの開発環境をダウンロードすると、F-Scriptという名前のアプリケーションファイルがある。これがインタプリタになる。起動すると、ターミナルが開き、スクリプトを打ち込む状態になる。

    まず、ウィンドウを表示してみる。これには、Cocoaでウィンドウを表すNSWindowクラスを使う。操作のために必要なAPIは、リファレンスからチェックできる。

    まず、NSWindowのインスタンスを作成する。

    > window := NSWindow alloc initWithContentRect:(100<>100 extent:300<>300) styleMask:NSTitledWindowMask+NSClosableWindowMask backing:NSBackingStoreBuffered defer:true

    少し長いが、ウィンドウの位置と、スタイルを設定している。作成したインスタンスは、windowという変数に入れておく。この段階では、まだウィンドウが表示されていない。表示するには、orderFront:メソッドを使う。

    > window orderFront:nil

    これで、ウィンドウが表示された。次に、タイトルを設定してみよう。

    > window setTitle:'My Window'

    さらに、ウィンドウ上にボタンも追加してみよう。

    > button := NSButton alloc initWithFrame:(100<>200 extent:120<>24)
    > button setTitle:'button'
    > button setBezelStyle:NSRoundedBezelStyle
    > window contentView addSubview:button

    このように、インタプリタからスクリプトを打ち込んで、Cocoaのオブジェクトを操作できる。

    もう少し実用的な例も紹介しよう。URLを指定して、Webページを表示するスクリプトだ。

    > window := NSWindow alloc initWithContentRect:(100<>100 extent:800<>800) styleMask:NSTitledWindowMask+NSClosableWindowMask backing:NSBackingStoreBuffered defer:true
    > window orderFront:nil
    > webView := WebView alloc initWithFrame:(window contentView bounds)
    > window contentView addSubview:webView
    > webView mainFrame loadRequest:(NSURLRequest requestWithURL:(NSURL URLWithString:'http://www.fscript.org'))

    このようにスクリプトを打ち込む事で、次の図のように、Webページを表示する事ができる。わずか5行で表示できるのだ。もちろん、これはObjective-Cを使っても、まったく同様に5行で行える訳だが。

    オブジェクトブラウザ

    F-scriptが提供するもう一つの機能は、オブジェクトブラウザだ。これは、F-Scriptアプリケーションのメニューから開く事が出来る。名前の通り、現在のランタイムにある、オブジェクトの情報を見る事のできるブラウザだ。

    Workspaceボタンを押すと、インタプリタで作成したオブジェクトを見る事ができる。もちろん、その時点でのインスタン変数の値もチェックできる。

    Classesボタンでは、ランタイムにあるクラスの一覧を見る事ができる。ランタイムのクラス情報から調べているので、プライベートクラスも見ることができる。

    F-Script Anywhere

    これだけだったら、単なるObjective-C環境へのラッパーでしかない。求めるべきものは、やはり、アプリケーションの侵入だろう。既存のアプリケーションに侵入して、その中で、インタプリタやオブジェクトブラウザを使うのだ。F-Script Anywhereを使えば、これができる。

    F-Script Anywhereを起動すると、現在立ち上がっているアプリケーションの一覧が表示される。この中に、F-Script実行環境をインストールできるのだ。使い方は簡単で、Installボタンを押せばいい。

    インストールされたアプリケーションには、FSAメニューが現れる。ここから、F-Scriptインタプリタやオブジェクトブラウザを起動できるのだ。これにより、すでにコンパイルされているアプリケーションの中で、オブジェクトを操作したり、クラス一覧を見る事ができる。

    また、FSAメニューの「Browser for Target...」という項目を選ぶと、クリックしたビューの階層を見る事ができる。これもまた便利な機能だ。

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン