【コラム】
Mac OS X 10.4 Tigerの発売、次期MacintoshでのIntel製チップ採用、iTunes Music Storeの日本でのスタート、Apple Store Shibuyaのオープンなど、最近Apple Computerに関する話題が途絶えない。これらは最近急に起きた訳ではなく、数年前から種を蒔いていたものが実を結んだ、と考えるべきだろう。
こういった中でも一番大きかった伏線の一つは何かと問われれば、筆者はMac OS Xの登場とCocoaフレームワークの採用と答える。NeXTに由来を持つMac OS Xは、堅固なカーネルを礎にして、ソフトウェアが活躍するための土壌を築き、Cocoaフレームワークを活用して、Safariやiアプリケーションといた多くのソフトウェアたちが花開いているのである。
さて、そのCocoaである。Cocoaの名前は、高い完成度を誇るオブジェクト指向のフレームワークとして、聞いたことがあるだろう。しかし、多くの方が首をひねるのが、そのプログラミング言語として、非常にマイナーなObjective-Cを利用していることだ。その理由の一端は、歴史的な経緯に求めることができる。Cocoaの前身であるNEXTSTEPの開発が始まったのが、1980年代の後半。当時、Cをベースとしたオブジェクト指向言語として、C++とObjective-Cが登場していたが、どちらも主流に至っているとは言えず、Objective-Cを選択することはそれほど不自然ではなかったであろう。
別の言語を採用する機会がなかった訳ではない。AppleがCocoaフレームワークを発表したとき、JavaからCocoaを操作する、Cocoa Java APIも公開された。また、同じようにObjective-Cで書かれていたフレームワークWebObjectsも全面的にJavaで書き換えられて、一気にJava採用へと傾くかと思われた。しかし、それ以降に登場するフレームワーク、アプリケーションはことごとくObjective-Cを採用し、Java APIのサポートも、Tigerを最後に終わりとなることが明らかになっている。
なぜ、Objective-Cなのか?--そこには過去との互換性だけではない、技術的な理由があると筆者は考える。そのキーワードは、「動的」(dynamic)である。動的な型付け、メソッドの動的結合、動的なクラス読み込みなど、Objective-Cはコンパイル時ではなく実行時に決定できる事項が多い。これこそが、同じく動的な特性をフルに活用している、Coocaフレームワークと、ベストマッチとなる理由である。
本連載では、Objective-CとCocoaが持つ動的な特徴を、一つずつ、徹底的に明らかにしていくことを目的とする。Objective-Cの柔軟性と拡張性、そして現役のフレームワークであるCocoaがこれをいかに活用しているかを解説していく予定だ。これは同時に、すでにコンパイルされ実行されているアプリケーションを変更しやすいということを意味している。つまり、Cocoaはハックしやすいのである。このあたりの、実践的なテクニックも紹介していこう。
本格的にObjective-Cの世界に浸る前に、便利なユーティリティをひとつ紹介しておこう。動的な言語というのは、一言で言えば、実行時にクラスやメソッドの情報を得ることができる、ということだ。ということは、コンパイルされたファイルのどこかに、それらのメタ情報がしまわれているはずである。ならば、それを表示させれば、そのファイルが持つすべてのクラスとメソッドを知ることができる。そのためのユーティリティが、class-dumpだ。Cocoaプログラマならば、必ず(?)愛用している一品である。
class-dumpの配布場所
class-dumpはコマンドラインから起動し、フレームワークやアプリケーションなどのバイナリファイルが持つすべてのクラスやメソッドを、ヘッダファイルの形で表示してくれる。たとえば、Cocoaの基礎的なフレームワークであるFoundationのクラスとメソッドを表示させてみよう。
大量の出力があるので、上の例ではファイルに書き込んでいる。これが、Foundationフレームワークが持つメタ情報である。
出力されたファイルを眺めると、経験のあるCocoaプログラマならば、見慣れないクラスやメソッドがあることに気づくだろう。これらは、ヘッダファイルでは公開されていない、プライベートクラスやプライベートメソッドである。これらを使うと、保証はされないが、フレームワークの隠れた機能を呼び出すことができる。これが、Cocoaハックの最初の一歩として使われる手である。
Cocoaプログラマならば、新しいフレームワークが公開されたら、まずclass-dumpをかけて、隠しクラスや隠しメソッドを眺めることから始めるだろう(本当か?)。
では次回からは、本格的にObjective-Cの特徴を探っていこう。
【コラム】ダイナミックObjective-C 第2回 Objective-Cの動的型付け
【コラム】ライトニングJava 第16回 拡張for構文(1) -実装に沿った読みやすい記述を実現~拡張for構文の導入
| TI、リチウムイオンバッテリの駆動時間を延長させる急速充電技術を発表 [15:05 6/20] |
| イーソル、ルネサスのHMI向けMPU「RZ/A」シリーズをサポート [14:55 6/20] |
| NEDOなど、先進型イットリウム系超電導線材の低コスト長尺製造技術を確立 [14:49 6/20] |
| ルネサス、10MBのRAMを内蔵したハイエンドマイコン「RZ/A1」シリーズを発表 [14:39 6/20] |
| 筑波大と東工大、水泳ロボットを用いて泳動作の手部の推進力などを計測 [14:34 6/20] |
|
疲労回復を促す、運動後に着る機能性ウェアにネオンカラーTシャツ登場 [15:33 6/20] ライフ |
|
ビーズ、自動車に使われる軽量新素材を採用した、国内初省エネ自転車発売 [15:33 6/20] ライフ |
|
宮古島の雪塩を使った「ハウスとんがりコーン 雪塩バター味」発売 [15:33 6/20] ライフ |
|
"夏"を感じる素材が人気!! ストックフォト「PIXTA」、5月の利用動向を発表 [15:23 6/20] クリエイティブ |
|
[西山茉希]出産は「めちゃくちゃ怖い」 早乙女太一の立ち会い希望 [15:14 6/20] エンタメ |