iOSとCocoaの話

最近、真っ当にObjective-CCocoaフレームワークを使ってiOSアプリを作ってる。初めてだったのだけど、いきなりひとりで2ヶ月で作ることになって、とにかく必死で本を買って、問題をググってというのを繰り返してた。今まで触ってきたのが、Arduinoだったり、組み込みのCだったり、OpenCVをCかC++で使ったりという風に、わりと素の言語と専用のライブラリを経由して使うという感じだったので、Objective-CCocoaフレームワークは未体験の領域だった。というのも、Cocoaフルスタックのフレームワークで、今まで触ってきたものとは明らかに規模が違ったからだ。最初は規模の大きさに圧倒されて使い方がいまいちわからなかったのだけど、開発に慣れるにつれてよく出来てるなーと関心することが増えた。ということで、Cocoaに感心したという話をする。
iOSでアプリを作る、というのは、Cocoaに含まれる様々なAPIを使って組み合わせることで作っていくという風になる。ここの「組み合わせる」という感覚がかなり強くて、グルーを書いている感じ。今までの経験からするとopenFrameworksに近い。モバイルアプリケーションに必要と思われる機能がほぼすべて網羅されていて、ほとんど外部のライブラリがいらない。網羅具合が本当にすごいので、だいたいCocoaのクラスリファレンスとばっかりにらめっこになる。新参者なので雰囲気でしか言えないけど、昔のiOSでみんなが欲しいと思って使っていた外部のライブラリの機能を公式がOSのアップデート毎に実装している感もリファレンスの対応OSバージョンを見ているとある。クラスリファレンスでピンと来ないときは、アップルの公式ドキュメントを参照するとだいたい書いてある。公式ドキュメントには日本語訳がある奴があって、主要なドキュメントはほぼ網羅されている。結果として開発サイクルとしてはあんまりググらない。そもそも目当てのメソッドを見つけるためにググったりするけど、そこから先はまた公式リファレンスに戻る、という感じ。こういう流れなのでプログラミングに組み合わせ感が出てくるのだ。
Cocoa上で作るアプリのグルー感について書いたけど、他のGUIアプリケーションフレームワークというかGUIアプリケーションフレームワークというのがそもそもそういう感じなのでは?という疑問も生じる。正直に言って他の経験がゼロなのでなにも言えない。他の経験したもので似ているとしたらopenFrameworksに近いと言ったけど、Railsにも近いと思う。特にRailsの有名な考え方「設定より規約」というところが感覚としてCocoaに似ている。Railsの規約よりは薄いのだけど、「こう書いてね、こう呼び出してね、あとはこっちがうまいことやるよ」ていう雰囲気があるのね。その雰囲気に従うとコードが少なく疎結合なものになる。
そういう雰囲気を掴めてくると、もっとレイヤーが上のところを理解したくなってくる。フレームワークの構造自体に興味が出てきた。構造として見るとGoFデザインパターンが見事に使われていて、ホエーってなる。ちょうど設計をちゃんと学ぼうと思ってデザインパターンをようやく勉強し始めたところなので、Cocoaデザインパターンの実例集のように見えて、こういうことだったのかーと納得しまくってる。NeXTstep時代からあるものが沢山そのままであるというのも感心のしどころ。1989年に最初のバージョンがリリースされたOSのものが2013年の最新のコンピュータにも変わらず載っているのである。驚嘆。
まとめるとCocoaは20年以上前に設計された基盤を元に、プラットフォームの発展とともに的確に機能を追加している。結果として開発者の必要とするものはほぼすべて提供するという役割を常に保ち続けている、とても開発のしやすい素晴らしいフレームワークであるということでした。