読者です 読者をやめる 読者になる 読者になる

Snippets

対抗して作ってみた。

JavaScriptと Androidと伽藍とバザール

ちょっと code reviewに手間取ってうなってたら 23時前になってて、慌てて書いてます。クリスマスイブだし、とっておきのネタを書こうかとおもったけど、そんなものないのでやや漠然と。

JavaScriptの速さと Androidの遅さ

JavaScriptのフロントエンドのフレームワークの進化が速いのは、衆目の一致するところです。1年前に流行の技術が、あっというまに枯れるどころか、技術的負債のように言われたりします。しかも、その速度自体に加速度がついて進んでいるような雰囲気があります。大変ですねえ。

正直、自分は JavaScriptなんかでまともなアプリなんか組めるかって思ってた強い型とコンパイルがすきなおじさんでした。とはいうものの Quipperに入って Coffeescriptとか接してみて「お、これは案外行ける」と思って VisulanJS とか習作を作ってみたわけです。Promiseも Monadだときいて、Haskellファンとしてはいけてると飛びついたわけです。

で、いまは Reactがきて Reduxがきてます。なんか、傍目で見てると良さそうな感じです。

また、フレームワーク面だけじゃなくて言語面でも随分進化しました。Coffeescriptが人口に膾炙させた Transpilerはいろいろ普及して ES6とかも楽に導入できるようになりました。Dartとかが、chrome native対応するぜ、っていってたのが夢のようです。

ツール群もかなりイケてるみたいです。まあ、個々らへんは自分は brunch止まりなんですが、browserifyとかいろいろ進化してるみたいです (正直ついていっていない)

Androidも追いつこうとはしています。Reduxも Android用の実装 があったりします。言語も Javaだけじゃなくて Kotlinとか Scalaとかもきました (初戦 JVM言語ですが)。 また、build toolも gradleになったと思ったら、bazelの足音が聞こえてきてます。

とはいうものの、JavaScriptの SPA界の進化には追いついていない感があります。

なぜ Androidは遅れたか

そこで問題なのは、なんで天下の Google様がついていながら Androidの開発環境は遅れたのか、ということです。

それ考えるキーワードの一つが「伽藍とバザール」なのでないでしょうか。

もしかして最近の開発者は伽藍とバザールをご存知ないかも知れません。1999年 (20世紀だ!) に書かれた、Linuxはなぜ普及・発展したかを考察した論文です。「伽藍」というのはプロジェクトのロードマップをちゃんと書いてプロのエンジニアがちゃんと考えて公開するようなプロジェクト、大して「バザール」というのは寄ってたかってみんなで変更を加えて試して見るようなプロジェクトです。

Linusがやったバザール的プロジェクト管理は無謀に思われたが、頻繁なリリースと多大なフィードバックによって結局質のいいプロダクトを作り出すことができた、という今となってはそりゃそうだよなという知見が書かれています。

ということでお察しの通り、Androidは伽藍的な開発なのにたいして、Javasciript (というか WebApp) はバザール的な開発になっていて、その御蔭でその高速な進化を達成できているのでは、というのが今回のあらっぽい推論です。

例:リソースシステム

たとえば最近自分がはまってる Androidのリソースシステムを見てみましょう。

Androidの layout リソースに自分で定義した Viewのクラスを記述することはできます。しかし、自分で定義した Drawableはかけません。色の指定も colors.xmlとかで定義したものだけで、それを少し薄くしたとか書くことはできません。 dimensionも、別の dimensionの 1.5倍とかの指定ができません。SASSとか Jadeとかではいろいろできるのに。

それも、リソースシステムを Googleが握っているからです。開発者が欲しいと思った機能を追加できないのです。最終的には、システム組み込みの inflaterの制限にぶち当たります。

よかれ、と思って Googleが組み込んだ便利な機能が足枷になっているのです。

Googleもかわりつつあるか?

Googleもこの状況には気づいているような気がします。機能をフレームワークに組み込むことなく、一般的なライブラリとして供給しようとしているような気がします。DataBindingとかそうでしょう。そうすれば、新しい機能を使いたい開発者は、エンドユーザが Deviceを更新しなくても組み込むことができます。

さらに重要なのは、サードパーティーライブラリと競争が発生することです。逆にいえば、Appcompatとかは ActionBarSharlockがあってはじめて出てきた気もします。 そこで Googleお仕着せの機能ではなく、より使い良いライブラリがシェアを高めていくようなこともできるでしょう (ある意味、Volleyと okhttpはそんな感じだったかも)。

クリスマスプレゼントに代えて

以上は、非常に大雑把な床屋政談レベルの話です。何しろ、Advent Calendarに穴を開けないように 30分で書き下ろした話なので :)

本当はもっといろんな要素、たとえば WebAppはデプロイが楽だとか、JavaScriptの動作する環境はモバイルと比べてリッチだとかも考えなくてはいけないと思います。そこらへんの考察は正月にお屠蘇でも飲みながらやりたいと思います。

では、あと5分でクリスマスが来ます。Android界も WebApp界もともに発展しますように。ああ、あとついでに iOSも。