タイトル鶴薗賢吾のCocoaはやっぱり!出張版》Mac OS X対応アプリケーションをCocoaでプログラミング(1)カテゴリーCocoa, 鶴薗賢吾のCocoaはやっぱり!出張版
作成日2001/7/15 13:12:17作成者新居雅行
■ あいさつ
どうもはじめまして。今回より月に一度Cocoaに関する連載を書くことになりました鶴薗賢吾と申します。Cocoaに関しては、「興味はあるんだけど情報が少なくどう手を付けてよいのやら…」と思っていらっしゃる方も多いのではないでしょうか。この連載では、多少なりでもそういった方の手助けになればと思っています。
かくいう私自身も勉強中の身でして、この連載を通じてさらに勉強してきたいと思っていますし、色々と読者のみなさんよりの情報やフィードバック等も期待しているところです。よろしくお願いいたします。では、早速始めたいと思います。

■ Cocoaとは何か
Mac OS Xの構成図を見ると分かりますが、Mac OS Xで動作するアプリケーションには、「Classic、Carbon、Cocoa」の3種類の形式があります(Javaを含めている図もありますので、この場合は4種類となります)。

◇図1. Mac OS Xの構成図
 

Classicは、従来のMac OS 9までで使用されてきた形式です。Mac OS Xに備わっているClassic環境によって動作します。ただし、Mac OS Xに備わっている新しい機能(プリエンプティブマルチタスク、メモリ保護、Quartzによる高機能なグラフィック等々)をフルに利用することはできません。
Carbonは、Mac OS Xの新しい機能を利用するためにClassicから発展して作られた、Mac OS Xネイティブの新しい形式です。CarbonからはMac OS Xに備わっている新しい機能を利用することが出来ます。また、開発者の視点から見ると、CarbonのAPIはClassicのAPIと似ているため、既存のClassicアプリをゼロから作りなおすことなく、Mac OS X対応させることが可能です。
Cocoaは、Carbonと同様にMac OS Xの新しい機能が使える新しいアプリケーションの形式ですが、ベースになっているのはNeXT Computerで生まれた「OPENSTEP(旧NeXTSTEP)」です。そのため開発方法が今までとは全く異なります。Carbonがあるにもかかわらず、Cocoaというものが用意された理由は、なんといっても「開発が容易である」ことです。Mac OSは(つまりClassic APIは)、長年の建て増しの繰り返しによって継ぎはぎの目立つものになってきました。CarbonもClassicをベースにしているため、整理はされているものの同様の性質を持っています。
Cocoaは、非常にエレガントな作りになっていて、「10倍簡単に開発ができる」というような表現を見掛けることがあります。OPENSTEP自体は随分昔に開発されたものですが、基本設計のよさもあり、それを引き継いだCocoaは今でも十分新しく、Mac OSの開発環境としては最も優れたものといえます。これから新規にMac OS X対応のアプリケーションを作る、もしくは、これからMac OS Xのプログラミングの勉強を始めるという方には、CarbonよりもCocoaの方が非常に魅力的な解になるでしょう。

■ 開発ツール
Cocoaの開発を容易にしている1つ目の理由は、開発用ツールにあります。Project BuilderとInterface Builderが2大開発ツールで、以下のようなものです。

  • Project Builder:プロジェクト管理、ビルド、デバッグ
  • Interface Builder:ユーザーインターフェイス等の定義、テスト

特にInterface Builderが特徴的で、2つのオブジェクトをグラフィカルに接続しながらアプリケーションを組み立てていくことができます。2つのオブジェクトを接続をすることで、そのオブジェクト間でメッセージを送ることができるようになります。また、その接続状況を確認する画面もあります。

◇図2. Project Builder
 

◇図3. Interface Builderでオブジェクトの接続を行っているところ。(印刷ボタンからプロフィールに接続しています)
 

◇図4. Interface Builderの接続状況確認画面(印刷ボタンからプロフィールに「print」メッセージが送信されることが分かります)
 

■ フレームワーク
Cocoaの開発を容易にしているもう1つ目の理由は、フレームワークにあります。FoundationとApplication Kitが2大フレームワークで、以下のようなものです。

  • Foundation:文字列、配列、辞書、ファイル、通信、分散オブジェクト等
  • Application Kit:ユーザーインターフェイス、グラフィック、サウンド等

Foundationの方は、ソフトウェアを開発する上で必要となる基礎的なクラスを提供してくれます。Application Kitの方は、ユーザーと対話するためのユーザーインターフェイスやグラフィカルな要素を扱うクラスを多く含みます。どちらも全面的にオブジェクト指向を取り入れたエレガントなものとなっています。
MACWORLD Expoでよくデモされていたような、画像を回転したり透明度を変えたりといったことも簡単です。印刷やPDFへの出力、ムービー再生、スクリーンセーバーの作成も簡単にできます。また、UNIXのコマンドも呼び出せますので、UNIXのプログラムにMacらしいユーザーインターフェイスを付加するような用途にも使うことも可能です。

■ コーディング無しで作れるアプリケーション
さて、Cocoaの開発環境の優秀さの一端を見ていただくために、コーディングをしないでここまでのアプリケーションが作れるという例をお見せしましょう。プロフィール入力を行うアプリケーションです。

◇図5. コーディング無しで作ったサンプルアプリケーション
 

図に書いているように、以下のようなことがコーディング無しで実現できます。

  • フォントパネルを使ったフォントや文字サイズの変更。
  • カラーパネルを使った文字色の変更。
  • テキスト編集のアンドゥが可能。
  • 数値入力範囲の制限が可能。
  • Finderから画像のドロップによる画像の挿入。
  • スライダーによるテキスト入力。
  • ボタンによるドローワーの開閉。
  • プロフィールの印刷。

印刷は簡易的なものになりますが、印刷プレビューを表示させると以下のようになります。

◇図6. 印刷でプレビューを表示させたところ(手前のウィンドウが印刷プレビュー)
 

これはちょっと極端な例かもしれませんが、Cocoaでは、これくらいのことはコーディングをしなくてもできてしまうのです。

■ 開発言語
Cocoaの開発で使用する言語は、「Objective-C」もしくは「Java」です。Cocoaの2大フレームワークはObjective-Cで記述されていることもあり、この連載では、Objective-Cを使います。
Objective-Cは、馴染みのない方が多いかと思います。Cocoaという新しいものに加えて、新しい言語も覚えなければならないのかと思われるかもしれません。でも、Objective-Cは、ANSI C互換のC言語で、そこにシンプルな形でオブジェクト指向の機能拡張を行っています。ですので、C言語が分かる方であればさほど修得には時間はかかりません。
C言語ベースにオブジェクト指向の拡張を行った言語としてはC++の方が一般的ですが、かなり多機能で修得には時間がかかります。しかし、C++の複雑さに挫折した方でも、Objective-Cならなんとかなるかもしれません。それくらいシンプルな言語です。でも、かなりダイナミックで強力な機能を備えています。プログラム言語の善し悪しを論じるのは難しいですが、かなり面白い言語であることは間違いないと思います。
Javaに通じている方は、JavaでCocoaの開発を行うことも可能です。Javaを使う場合は、Java Bridgeを経由してObjective-Cで書かれたフレームワークを使うことになり、パフォーマンス的には多少不利なところもあります。
[鶴薗賢吾]
関連リンクCocoaはやっぱり!