その他
    ホーム 技術発信 DoRuby CappuccinoとObjective-JでHello Worldを書いてみる

    CappuccinoとObjective-JでHello Worldを書いてみる

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    こんにちは。

    KBMJの佐藤です。

    今回はCappuccinoとObjective-JでHello Worldを書いてみます

    Cappuccino と Objective-J を使うと iPhone や Mac 向けのアプリ開発と同じ感覚で Web アプリケーションを開発することができます。

    http://farm4.static.flickr.com/3151/3064248883_ffdfecd321.jpg

    CappuccinoとObjective-Jについて

    Cappuccino は、デスクトップソフトウェアのユーザーがうちとけやすい見た目のアプリケーションを開発するためのオープンソースフレームワークです。

    Cappuccino は JavaScript などの標準的なWeb技術の上に構築されています。そしてアップルのCocoaフレームワークに非常に近い実装がなされています。

    Cappuccino でプログラムしたとき、HTML, CSS, DOM などの伝統的なWeb技術を意識する必要がありません。

    複雑なクロスブラウザアプリケーションを構築する際の不愉快さはありません。

    Cappuccino は Objective-C をモデルとした新しいプログラミング言語である Objective-J で実装されています。Objective-J は JavaScript の上に構築されています。Objective-J で書かれたプログラムはクライアント上で翻訳されるので、プラグインなどは必要ありません。Objective-J のライセンスは LGPL となっています。

    ソースコード

    Hello World のソースコードを以下に示します。

    import <foundation /cpobject.j>
    
    // アプリケーションコントローラークラスである AppController を宣言します
    @implementation AppController : CPObject
    {
      // ラベルオブジェクトをメンバ変数として持たせます
      CPTextField label;
    }
    
    // アプリケーションの起動時に呼ばれる関数です。ここに各種初期化処理などを記述します
    - (void)applicationDidFinishLaunching:(CPNotification)aNotification
    {
        // ウィンドウオブジェクトを生成し、そのビューを管理する contentView を取り出します
        var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask],
            contentView = [theWindow contentView];
    
        // ラベルオブジェクトを生成します
        label = [[CPTextField alloc] initWithFrame:CGRectMakeZero()];
        // ボタンオブジェクトを生成します
        var button = [[CPButton alloc] initWithFrame: CGRectMake(
    			     CGRectGetWidth([contentView bounds]) / 2.0 - 40,
    			     CGRectGetMaxY([label frame]) + 100,
    		    80, 18
    		 )];
        // ボタンオブジェクトの自動リサイズに関する設定を行います
        [button setAutoresizingMask:CPViewMinXMargin |
    	                        CPViewMaxXMargin |
    	                        CPViewMinYMargin |
                            	CPViewMaxYMargin];
    
        // ボタンのタイトルを設定します
        [button setTitle:"swap"];
    
        // ボタンが押された際に呼ばれる処理を登録します
        [button setTarget:self];
        [button setAction:@selector(swap:)];
    
        // ビューにボタンを追加します。
        [contentView addSubview:button];
    
        // ラベルのキャプションとフォントを設定します
        [label setStringValue:@"Hello World!"];
        [label setFont:[CPFont boldSystemFontOfSize:24.0]];
        
        [label sizeToFit];
        
        // ラベルの自動リサイズ設定を行います
        [label setAutoresizingMask:CPViewMinXMargin | CPViewMaxXMargin | CPViewMinYMargin | CPViewMaxYMargin];
        // ラベルの位置を設定します
        [label setFrameOrigin:CGPointMake[1]CGRectGetWidth([contentView bounds]) - CGRectGetWidth([label frame] / 2.0, (CGRectGetHeight([contentView bounds]) - CGRectGetHeight([label frame])) / 2.0)];
        
        // ビューにラベルを追加します
        [contentView addSubview:label];
        
        [theWindow orderFront:self];
    
        // ラベルのキャプションを中央に設定します
        [label setAlignment:CPCenterTextAlignment];
        
        // メニューバーを表示します
        [CPMenu setMenuBarVisible:YES];
    }
    
    // ボタンが押された際に呼ばれる処理
    -(void)swap:(id)sender
    {
      // ラベルのキャプションを変更します
      if([label stringValue] == "Hello World!")
        [label setStringValue:"Goodbye!"];
      else
        [label setStringValue:"Hello World!"];
    }
    
    @end
    

    さいごに

    Cappuccino を使うと Mac や iPhone のソフト開発と同じ感覚で Web アプリケーションを開発することが可能です。

    次回以降、Objective-J, Objective-C, Cocoa, Cocoa Touch などに関する記事を掲載していきたいと思います。

    お楽しみに!

    個人ブログ 拡張現実ライフ

    References

    References
    1 CGRectGetWidth([contentView bounds]) - CGRectGetWidth([label frame]