フレームワークのメタ情報を記述するブリッジサポート
プログラミングの世界で「ブリッジ」といえば、あるプログラミング言語から別の言語への「架け橋」である。ブリッジを作成するには、その呼び出しに関する詳細な情報が必要になる。たとえば、RubyからObjective-Cで書かれたCocoaの機能を呼び出したい場合、Cocoaのインタフェースがどのようになっているのか、詳しく知る必要がある。この情報は、ヘッダファイルと呼ばれるものにも書かれているのだが、これだけでは充分ではないのだ。
そこで、フレームワークの呼び出しに必要な情報をすべて書き出す技術が、ブリッジサポートだ。実例を見てみよう。
/System/Library/Frameworks/AppKit.framework/Resources/BridgeSupport/AppKit.bridgesupport
というファイルがある。これを開いてほしい。
このファイルは、テキストのXMLファイルになっている。Cocoaのユーザインタフェース周りである、Application Kitにアクセスするための情報が記述されているのだ。その一部を抜き出してみよう。
...
...
抜き出したのは、ウインドウを表すクラスであるNSWindowクラスに関するものだ。このクラスが持つメソッドが、すべて記述されているのが分かる。この他にも、定数名、構造体、関数、依存するフレームワークなど、そのフレームワークを利用する際に必要なメタ情報が、すべて含まれている。
これを使えば、Rubyからのブリッジを作成することができる。さらに、.bridgesupportファイルは、他の多くのフレームワークにも含まれている。それらが持つ機能を、Rubyから利用可能になる可能性があるのだ。
ちなみに、RubyCocoaでのこのファイルの読み込みは、
/System/Library/Frameworks/RubyCocoa.framework/Resources/ruby/osx/objc/oc_import.rb
の周辺で行われている。興味のある方は、こちらを参照してほしい。