Application Layer

2010.10.21 23:30
 コンピューターのシステムには、それぞれの機能に応じてそれぞれのブロックでいろんな作業をしているわけですが、いざ自分で開発に携わってゆくと結構面倒なことがタイトルにもあるようにApplication Layerなのです。これは、IllustratorとかPhotoshopとかのレイヤーとは何の関係もないレイヤーでして、このレイヤーはむしろただの概念に近いといいますか、端から見ているとむしろお化けです。
 アニメーションというのは、動く部分と動かない背景の部分を分けて描いて、ごく頻繁に動く部分(いわゆる動画)をセル画という透明なシートに描いてその動かない背景に重ねて作るわけです。ここ近年の宮崎駿アニメみたいになっちゃうと背景の草木までが風に揺れていたりするので、背景にもセル画を使っているように作成していますが、勿論コンピューターグラフィック処理とかでいろいろやっているので、製作現場にいない私には詳しい製法は勿論わからないのですが、とにかく、アニメの世界でもごく頻繁に動く部分と滅多に動かない部分というのを要素要素に分けて製作し最終的に重ね合わせて一つの空間を作るわけです。
 コンピューターのソフトという機能もそれと殆ど変わらない...と言っても過言ではないのですが、ここが非常にわかりにくいです。実際に恐ろしく細かい分業が行われているために隣のお部屋で何をやっているのかというのがわからないというのが現実です。機能全体としてむしろ「わからない」方がうまく動くという設計をはじめたのは歴史的にごく最近といってもいいと思いますが、この各分業のブラックボックス化というのが実に見事にできているんです。
 iPhoneの全体のそのレイヤーは、
iPhone OS
 Core OS
  Media
   Cocoa Touch
    iPhone Application
というふうになっています。(逆にした方がよかったかな。)あなたがiPhoneでゲームをしたり電話をしたりメールをしたりする際には、実際に目に触れて動いてみえるのは、iPhone Applicationのみです。最も表面的な部分しか見えないわけです。しかしちょっとした開発者が目を凝らして見てみると、Cocoa Touchという一枚下の皮みたいなものが見えてくる。この層がアプリ開発者が触れる層でSDKという便利なソフトでもってiPhoneアプリ開発が可能になっています。このiPhoneアプリの開発でさえ分厚い本を数冊読まないとなかなか理解できないという代物なのにそのCocoa Touch層を下から支えているMediaという層(レイヤー)があるわけです。ここらのソフトがObjectiv-Cで出来ているのか、Javaで出来ているのか、Cで出来ているのかわかりませんが、どうやらObject-Cらしいです。全体的にObject-Cで成り立っているiPhoneらしいのですが、実は純粋にObeject-Cの根幹に携わっているというプログラムはもっともっと下の層であって、Cocoa TouchやMedia辺りはそれでも尚、下層のシステムが表面に送り込んでいるオブジェクトを操作することで事足りるということになっているんです。iPhoneアプリ開発の本を読んでいても「できることならCocoa Touch以下を触らない方がいい」と推奨しております。
 例えばこれをWeb開発に当てはめてみると、HTMLなんていう作業は表面の表面の更に表面という作業であって、CSSなんかは、もう薄皮一枚って感じです。
 しかし、PHPにしろPerlにしろ、HTMLのもう一枚下の層でもって何某を開発するとなると、プログラム自体が壮大になる分だけこのレイヤーを作っていかないとやしづらいことになる。というのは、機能が増える度にボタンを増やして違うページにジャンプということであればレイヤーなんて考えなくていいのですが、様々なことを同時多発的に行うような機能であればあるほどこのレイヤー機能が必要なのですよ。
 で、このレイヤーをどんな風に設計してゆくのかというと、これまたわかりづらい話なのだけど、その抽象度によって決定するということになります。言葉のあやでもって表現するとアップデートは抽象度が低いことになりバージョンアップは抽象度が高い。つまりアップデートになるとレイヤー構造の根本に対して何某をするということになるわけです。これらのことは一つの概念として理解することは非常にわかりやすい話なのですが、実際に具体的に開発に関わると大変困難なのです。
 かつてWIndows XPでService Pack2という大規模なパッチをあてがわないとセキュリティー的に危ないですよという事件がありましてMSは(当たり前ですが)無償でService Pack2のダウンロードを我々に提供しましたが、このパッチがどのレイヤーに対してあてがわれたのかは我々には定かではありません。MS側としてはむしろ「やってしまった!これだったら、バージョンアップした方がいいんじゃないの?」と思った開発者もいただろうし、パッチにしては容量が大きすぎることも多少気になりはしたけど、パッチってことで話は収まりました。が、このパッチのダウンロードだの、アップデートだのアップグレードだのっていうのは本当に言葉の単なるあやであって、開発者側からすると何とも曖昧な言葉なのです。というのは、レイヤーの中間層のグレーゾーンはいったいどうすんじゃいという話になってくるわけです。
 例えばForm入力に対してどんな場合でも、どんなサーバーでも共通に使えるようにするクラスを作るなんていうことを念頭に(目標)に開発するわけですが、実際に手をつけてみると表面的なレイヤーに近い作業ほどかなり簡単に製作ができるんです。というのは、前述したように抽象度の問題なので、抽象度が高くなるとそれだけ変数の割合が高くなり、最終的には文字列(例えば、$value='something'などというような...)値は全く使われないことになります。常に変数が出現し、新しい変数を変数によって生成してその生成したものを何らかのフィルターを通して加工してゆくという作業になります。つまり変数中の文字列が今現在その行でもってどんな値をもっているのかを常に想像して(時として出力して実際に確認して)作らないといけないんですよ。そうなってくると、「想像力を豊に!」なんて学校の先生やら上司やらが簡単にいいますが、この想像力は予想以上に骨が折れますよ。ほんとに。
 例えば生物学とでいうところのレイヤーの最下層はいわゆるES細胞です。概念的にいうと遺伝子ということになりましょうが、現在の技術では遺伝子からはすべての細胞を生成することができないわけなので、実際的にはES細胞にその見込みがあるということになっています。この細胞は、どんな人間に対してもどんな臓器、どんな組織に対しても抽象度が高くその細胞に変化できるという細胞なわけですから、これはすごい。
 アプリケーションの開発という意味で、こういう万能モジュールとか万能クラスっていうものが作れたとしたら、これは非常にすばらしいということになります。引く手数多。しかも設定が何もいらないとなると更に便利だし時間もかからないしというわけで更にすばらしい。設計の段階ですでにそのような高い目標をもっているとよいのですが、世の中そういうわけにもいかない。
 だいたい、このレイヤー構造を知らないという人が多いし、アクセスカウンターとかちょろちょろっとAjaxとかFlash使うと何となくプログラマーみたいな感じ...というぐらいの人って山ほどいるわけですよ。しかしインチキ臭いチュートリアルをコピーしている間にですよ、めちゃくちゃすごい設計している人々がいっぱいいるわけでして、正にiPhoneとかって本当にすごいと思います。かつてのMachintoshがまだUNIXベースを導入する以前、つまりPower Macとかあの辺りの理想もすごいと思います。結局不安定さとWindowsの爆発的な購買力と価格に負けちゃってApple倒産かと思われましたが、iPhoneにてまたまた頂点に上り詰めた感じがしないでもないです。

 抽象度の高いプログラムを書くのは実に難しいことでして、そういうプログラムは、チュートリアルにもならないし、いわゆる関数の使い方というような説明にも至らないし(実際はそうしないといけないんでしょうけど)実際には例えばそういうプレゼンテーションをしたところで誰が理解してくれるんだろうと思うとこれまた悲しい感じになってきます。自分が書いているコードがはたしてWindowsサーバー上で動くのかどうかとか、はたして最小限のコードで書かれているのかとか、最小限でなくとも協力者が理解しているような書き方をしているのかとか、いろいろ考えるわけですけど、本当に難しいです。何だか誰も理解してくれない抽象絵画を描いている作家さんみたいな気分になってきます。
 






プロフィール



  • Name :: 山上オサム ♂(39)
  • Hobby :: 武術
  • Work :: Web Designer