絹田
絹田
4万回利用されたアプリ開発の経験から最適な要件を考えてみました

クロスプラットフォームは生産性が高い

なにかをサービスインしようとしたとき、Androidだけ、iOSだけ、あるいはWebだけというのは片手落ちです。だからといってAndroid用にKotlinで開発し、iOS用にSwiftで開発し、そしてWeb用にも別個に開発など現実的ではありません。

すでに大成功しているソフトならもちろんありですが、現実はうまくいくか保証のないまま開発し、なるべく多くのユーザーに使ってもらいながら成功につなげていきたいと考えると思います。だからこそ、クロスプラットフォームであることは特に個人や小規模の開発チームにとって必須のツールとなると考えています。

ここでは、フロントエンドとしてCapacitor(React, Vue, Angular),バックエンドとしてPythonという組み合わせがメリットの大きな組み合わせであることを解説します。

どこのプラットフォームを抑えるか

すぐに思いつくプラットフォームとしては、デスクトップ、スマホアプリ、Webです。

  • デスクトップアプリ Linuxは置いておいてもMacとWindowsがあります
  • スマホアプリ AndroidとiOSがあります
  • Web これはユーザーに非常に簡単にアクセスできるプラットフォームとして外すことはできないです

ユーザーは各プラットフォームに分散していますが、個人的にはWebとスマホアプリを抑えればほとんどカバーできると考えており、デスクトップアプリの優先度は低いと思っています。したがって、クロスプラットフォームの環境はUnity,Xamarin,Cordova,Capacitor,ReactNative,Fultterなどがあると思いますが、Unity,Flutter,XamarinはWebベースではないことから最も重要なWebアプリとして公開することに難があります.

CordovaはWeb技術をそのままアプリ化できることにメリットがある一方で,素のHTMLとJavaScriptで書かないといけないので複雑なアプリができません.それならよっぽどBubbleなどのノーコードツールの方がよいです.

そこで,優れたUIを簡単に実現できて自由度が高い技術として,Capacitorが良いと考えます.CapacitorはAngular ,React,VueベースのプロジェクトをWeb ,Android,iOS上で動作できるランタイムを提供します.UIはIonicというUIフレームライブラリで提供します.要するに技術はSPAで見た目はネイティブアプリを作って,それを色んなプラットフォームで動かせます.

私はAngularを使って開発していますが,今ならCapacitorをVueベースで使う方がいいと思います.

これならVueを使って爆速で開発できます.UIはIonicから提供されますし,クロスプラットフォームに対応できます.

これがUnityやXamarin,ReactNativeではWebでの利用に難がありますし,それだけの技術を身につけないといけないですし.

バックエンドはどうするか

Angularでフロントエンドを書くとするとバックエンドはどうすればいいでしょうか。TypeScriptが使えるのでnode.jsで書くのはもちろんいいと思います。PHPエンジニアもいると思います。

ただ、わたしはバックエンドはPythonが好きです。もともとPythonがもっとも馴染みのある言語ということがありますが、バックエンドというのはデータ処理が少なからずあると思うのです。例えばAIを搭載したアプリケーションを開発する場合を考えた時、AIはほぼPython一択です。そうでなくても多くのデータ処理を実行する可能性は多いにあるため、node.jsでもなくPHPでもなく、バックエンドはPythonが汎用性が高いと考えます。Pythonで書いておけばカバー範囲が広いと思っており、バックエンドはPythonで作成したAPIで担当させておいて、CapacitorからそのAPIを叩いてデータ処理を行うというイメージです。

組み合わせるとどうなるか

CapacitorをIonicで使用すると、見た目は完全にNativeになります。Nativeに比べると挙動が遅いということですが(https://developer.medley.jp/entry/2017/11/24/120000)、現在のスマートフォンの性能なら描写の多いゲームなどを除いてまったく問題ならないと思います。したがって、Capacitorで開発しておけば、ひとつのプロジェクトをつくるだけでAndroid,Web,iOSのプラットフォームに高いクオリティでビルドできます。そしてバックエンドはPythonで受ける。これによって高い生産性と拡張性を備えたシステムが開発ができると考えているため、これが個人の開発や小規模でも開発を実施する場合私の考える最強の組みわせです。

榊原昌彦さんのコメント

https://read.amazon.com.au/kp/card?preview=inline&linkCode=kpd&ref_=k4w_oembed_7CMEfTzSUGimG0&asin=B081ZN64FM&tag=kpembed-20

とても共感したので、こちらの著者である榊原昌彦さんの冒頭の挨拶を引用させていただきます。

大きく変わったWebの価値Web技術で作ることができるプロダクトの選択肢は大きく増えました。Web Native開発フレームワークの「Ionic Framework」を使えば、Mobile Native,と同じようなUIとUXをユーザに提供することができます。クロスプラットフォームライブラリ「Capacitor」を利用すれば、Webアプリを「App Store」(iPhone/iPad) や「Google Play」(Android)で配信することができます。Google Chromeをはじめとしたインターネットブラウザも大きく進化しました。モバイルアプリ同等のUX(ユーザ体験)を提供することを目指して、今までモバイルアプリでしか実現できなかったプッシュ通知やオフラインでの表示、高精度GPSといった機能をWebで提供できます。また、「Electron」というWebアプリをデスクトップアプリにすることができるフレームワークが利用されるシーンも増えています。今では、WebアプリのプラットフォームはWebだけではなくなり、1つのプロダクトをiOS、Android、デスクトップへと、ハイブリッドに展開できるようになっています。Webとモバイルの境目がなくなりつつある多くのWebサイト、Webアプリではモバイルデバイスからのアクセス数が増え続けており、モバイルファースト(モバイルデバイスを利用するユーザを優先した設計)が当たり前になりつつあります。ユーザが、「ホーム画面に追加」という機能を使えば、Webをモバイルアプリのように利用できます。Webアプリとモバイルアプリの違いは、アプリストアからインストールするか、ブラウザからアクセスするかの違いになりつつあります。その中で、ハイブリッドに展開する大きなメリットは「そこにユーザがいるから」です。皆さんが作ろうとしているアプリのユーザは、Webブラウザをよく使いますか? Androidユーザが多いですか? もしかすると、App Storeでアプリを探すような人かもしれません。Webとモバイルの境目がなくなりつつある今だからこそ、プラットフォームに依存しない形であなたのアイデアを実現できることは大きな武器になります。

個人的にはこれにPythonを加えると最強だと考えています。実際,ソースコードを変えずにiOS, Android, Huawei, Webにデプロイできましたし,ベージョンアップのたびにメリットを感じていますのでオススメです!

About The Author

絹田 真也

プログラミングを究めて週の半分しか働かなくなったサラリーマンです.
物理化学で修士課程修了後,2012年に日本を代表する大手インフラメーカーに就職.趣味の開発も含めて1日12時間以上プログラミングを行う生活を5年続け,データエンジニアリング,Webアプリ構築を習得.会社員を続ける傍ら,スマホアプリ構築やフリーランスとしてベンチャー企業を中心にデータエンジニアリング業務を請け負っています.
Webサイト