[筆者: Anders Lassen]
編集者注記: Anders LassenはFuseのファウンダでCEO。初めての、デザイナーとデベロッパの両方のためのネイティブアプリツールだ。
Facebookがこのほど、モバイルアプリを構築するためのフレームワークReact Nativeをオープンソースにした。React Nativeでは、デベロッパがJavaScriptでプログラムを書けば本物のネイティブのユーザインタフェイスができあがる。こんな説明では、技術系以外の読者は肩をすくめるだけだろうが、でもわれ思うに、この発表には重大な意味がある。React Nativeはやがて、モバイルアプリの開発という業界の業態を完全に変えてしまうだろう。そしてそれは、スマートデバイスのオーナー全員にも影響を及ぼすだろう。
HTML対ネイティブという戦争の終わり
長年モバイルアプリのデベロッパは、ほかのデベロッパには無縁な、独特の困難な選択をつねに迫られていた。AppleやGoogleのネイティブツールを使ってアプリを開発すべきか、それとも、何らかのクロスプラットホームなソリューションを使ってアプリを作るべきか?
最良のユーザ体験を作り出したいなら、ネイティブツールを使うべし、これが、これまでの定説だった。ネイティブアプリは速いし無駄がないから、ユーザの期待を裏切らない。欠点は、ネイティブツールは勉強がたいへんだし、またユーザにとっても、Webなどの標準的なインタフェイスに比べると、いちいち使い方をおぼえなければならない。プログラミング言語も各ネイティブプラットホームごとに独特だから、同じアプリを異なるプラットホームごとに二度も三度も書かなければならない。今日はiOS、明日はAndroid、と。したがってネイティブアプリは開発コストが高くつき、それが業界全体の頭痛の種だった。
一方、クロスプログラムなソリューションは、多くの場合、HTMLとCSSとJavaScriptという三種の神器から成るWebの技術だ。モバイルのプラットホームはいろいろあっても、Webページを表示する機能はどれにもある。だからWebの標準技術〜標準言語でアプリを書けば、プログラムはたった一度だけ書けばよいし、開発の費用や時間も少なくてすむ。
しかしそうやってWebの標準言語(HTML, CSS, JavaScript)で書いたプログラムはネイティブに比べると遅く、また言語の実装がプラットホームごとにやや違ったりする。しかも、素早くてなめらかなネイティブインタフェイスと違って、ユーザ体験がぎごちなくなりがちで、さらに、電力を食うので電池を酷使する。派手な要素を多く散りばめたWebアプリが、往々にしてとろく感じられるのは、そのためだ。
React Nativeには、JavaScriptでネイティブのユーザインタフェイスを作れるだけに終わらない、深い思想がある。
React Nativeは、ネイティブの良いところとWeb言語の良いところを“良いとこ取り”したような、新しいツールだ。デベロッパは、今や誰もが使っていて、プログラミングの初心者でも書けて、すべてのモバイルデバイスが実装しているJavaScriptでアプリを書く。しかしそれで作られるユーザインタフェイスは、本物のネイティブの部品が使われている。だからそれは、デベロッパにとって魅力的なライフラインだ。ネイティブアプリを書くためには各プラットホーム固有の言語…Objective-C, Swift, Java, …と固有のライブラリ(API)を勉強しなければならない、という恐怖から彼らは解放される。
今後成熟すべき余地はまだ十分にあるものの、React Nativeを使えば基本的に、HTMLかネイティブかという二者択一はなくなる。できあがるユーザインタフェイスは高品質なネイティブだが、それを慣れ親しんだJavaScriptで書けるのだ。
無駄な苦労を忘れ、アプリそのものをもっとおもしろく創造的に
React Nativeをちょっと使い込んでみると、JavaScriptでネイティブインタフェイスを書けるという表面的な利便性を超えた、深い思想があることに気づく。Facebookが1月に行った詳細なプレゼンテーション*を見ていただくとお分かりと思うが、とにかく、ワークフローがまったく新しい。これまで、大きなプロジェクトでは何時間もかかっていたようなプロセスの多くを削り取り、アプリのデベロッパが十分に納得できる開発体験を作り出している。 〔*: このビデオのコメントがおもしろい。〕
これまで、Webで開発する場合は変更の結果をすぐにブラウザの画面で見ることができたが、ネイティブ開発の場合はコンパイルしてデプロイしてモバイルデバイス上にローンチする、という待ち時間があった。それは、時間がかったるいだけではなくて、創造性とか、新しい試みの実験とかの、‘乗り’を失ってしまうのだ。デベロッパは独創的な試みを我慢して抑え、まあまあのレベルで妥協しなければならない。いろんなことをトライしていると、途中で夜が明けてしまうから。
数年語にはもっとクリーンで応答性の良いアプリが一般的になる。
React Nativeが導入したのは、ネイティブなユーザインタフェイスと、ユーザインタフェイスを動かすロジックを、それぞれ別立てにする(分離する)ことだ。そのために、一般的にリアクティブアプローチ(日本語参考記事)と呼ばれている方法を使っている。ユーザインタフェイスは各モバイルデバイスに固有だが、それを動かすロジックは普遍的だ…ブラウザの動作が共通的で普遍的であるように。だからデベロッパは、Web開発のときと同じようなツールとワークフローを使える。コードに変更を加えると、結果がすぐにデバイスまたはエミュレータ上で見られる。アプリの制作が早くなり、新しいアイデアをいろいろトライできる余裕が生まれる。
この記事を読んだだけで、JavaScriptとブラウザツールに乗り換える気になった人は、あまりいないかもしれないが、でもツールのデベロッパには、React Nativeは大きなインスピレーションを与えたはずだ。モバイルアプリの市場は爆発的に拡大しているから、デベロッパとその時間はますます希少財だ。変更のたびに、アプリをコンパイルしてデプロイを待つという時間は、過去へと葬り去る必要がある。
新しいモバイル時代のインスピレーションを与えるオープンなコードベースを
React Nativeのコードベースは、これからは無料で誰にでも入手/利用できる。だからそのコードとアイデアが、ほかのツールや開発プラットホームにも浸透していくだろう。React Nativeの前身React.js(Webベースのユーザインタフェイスを作るためのフレームワーク)でも、それが起きた。React.jsは、それ自身が人気者になっただけではなく、そのほかのフレームワークにも強い影響を与えた。
そしてアプリのエンドユーザにとっては、よりクリーンで応答性の良い(レスポンシブな)アプリがこれからはどんどん多くなる。ほとんどお金をかけられなかったアプリでも。逆に高品質なアプリ開発はそのコストが下がり、アプリのデベロッパの生産性と創造性が高まる。
スマートフォンの登場によって、アプリ産業が経験したさまざまな苦痛は、今でも続いている。iOSとAndroidという二度手間、使いにくいツール、遅い開発サイクル。でもこれからは、React Nativeと、これからインスピレーションを得たいろんなツールにより、オープンソースのコードベースを軸とする新しいアプリ開発の時代が始まる。