見出し画像

アプリをラクにつくることは可能か

昔、iPhone向けに「ナイアガラエチケッツ」という音姫アプリを作った。音姫とはトイレでの恥ずかしい音を隠す(日本特有の)機能なのだけど、どうせなら豪快に恥じらえばええやんと思い、世界中の名滝の音を爆音で流すようにした。もうストアには並んでいないのだけど、なかなかオツな作品ではと自負している。

【注目アプリ】ナイアガラエチケッツで豪快に恥じらう
http://npn.co.jp/article/detail/25027889/

このアプリは公式の由緒正しい方法ではなく、Titaniumというフレームワークを用いてJavascriptで書いた。今回はそこら辺の事情を書いてみる。

アプリを作る方法

iOSの場合はObjectiveC(最近だとSwiftも)で、Androidの場合はJavaで(最近だとKotlinも)でアプリを実装するのが普通だ。それぞれ、XCode、Android Studioという統合開発環境が提供されている。言語と開発環境の使い方に習熟しないとアプリは作れない。

色々変化はあれど、僕がナイアガラエチケッツをこしらえた2011年当時からこの構図は変わっていない。

めんどい、ひたすらにめんどい

2011年の僕はさっそくMacにXCodeを入れてiOSのコーディングを初めたが、すぐに開発に嫌気がさした。Objective Cがめちゃ扱いにくく、CocoaPodsのような便利なライブラリ管理ツールも出る前だったりで、生産性が上がらず萎えたのだった。

Android版も作るとなると、似たような事をAndroidの開発でもやるハメになり明らかに大変だ。これからアプリ屋の受託は儲かるだろうなと当時の僕でも思った(そして当たった)。

ハイブリッドアプリという解

そこで、当然の流れとして、"もっとアプリ開発簡単にやりたい。出来ればワンソースでiOSとAndroidを同時に作りたい"と思う人が出てきた。

その流れの初期の方に現れたのがTitaniumだ。TitaniumはiOSやAndroidが提供する諸機能をブリッジし、開発者からはJavascriptのAPIとして叩ける用にしてくれる。要はJavascriptでネイティブと遜色ないアプリが書ける。

"やばい、これぞ未来だ"と思い早速Titanumで音姫アプリをこしらえた。実際1ヶ月もかからず公開まで持っていくことができ、大いに満足したのだった。

しかし、2017年現在、Titanium Mobileの利用例は殆ど聞かなくなってしまった。趣味アプリ程度ならいいのだが、仕事でそれなりの品質のアプリを出そうとすると、Titanium APIで未対応の作り込みをしたい際に自分でプラグインを書かなくていけないため、結局ネイティブの理解・実装が必要になってしまうからだ。

また、iOSもAndroidも頻繁に細かい仕様が変わるのだけど、Titaniumがそれに追従するのにタイムラグがどうしても発生してしまうのも辛い。

webviewを軸としたアプローチ

それでも、webの技術でアプリを書きたいというニーズは相当に強く、Titanium以外にも色々なアプローチでライブラリが開発されてきた。

例えば、CordovaはWebviewにアプリ特有の機能(カメラとかpush通知とか)を付加するアプローチを取っている。Webviewはただのブラウザなので、その上に乗るアプリをwebサービス開発と同じ方法で作ることが出来る。

ブラウザの層が挟まっているゆえに、ネイティブアプリ並の性能やUXを得ることは難しいのだが、ユースケースによっては全然問題ないだろう。(例えば、業務系アプリのように高いUXがそこまで求められない場合)

Cordovaはモバイル端末の機能をWebviewで使えるようにしてくれるだけなので、UIコンポーネントは自分でデザインして用意する必要がある。もちろんそれは大変な作業なので、Cordovaの上に乗るUIライブラリがある。IonicOnsenUIはその代表例だ。

React Nativeは真打ちになるか

2017年現在での最有力は間違いなくReact Nativeだ。ReactというUIライブラリがあるのだけど、描画エンジンを選べる設計になっているためブラウザでもネイティブアプリでも似たようなコードで実装できる。

いままでと大きく注目度が違うのは、ReactはFacebook社謹製であり、すでに本番のFacebookアプリとInstagramアプリで(一部)採用されているという圧倒的ファクトがあるからだ。日本でもメルカリが乗り換えを計画していることを発表し、業界がおおいに沸いた。

しかし、細かい部分の制御をしたい場合はプラットフォームごとにコードを書かないといけない現状は変わっておらず、全ツッパで移行しても省力化ができるとはいいにくい。(そもそもまだ1.0になっていない)

色々見てきましたが

webの技術を使ってクロスプラットフォーム環境を実現するために、各所で努力がなされてきてようやくいい所まで来ている、という雰囲気が伝われば幸いです。音姫アプリ、React Nativeで書き直してみっかなあ。


こんぴゅです! 外苑前から皆様に役立つテックな話題をお届けしております。もし100円でもサポいただければ励みになります。記事もグレードアップします。何卒よろしくお願いいたします