SPAとネイティブアプリを比較した時のメリットとデメリット

次のプロジェクトで、 SPAを採用して、Webアプリケーションを作っていくか、決めかねているので比較記事をメモ代わりにざっくり書いてみようかと思います。 まずはネイティブアプリケーションと比べた時のSPAのメリットを書いてみようかと思います。

ここでのネイティブアプリケーションは主に、iOSの場合はSwift,Androidの場合はJavaを使って実装されたものを想定しているので、 ApacheCordovaを始めたについては特に触れる予定はありません。

リリースが簡単であること

ソースコードが完成した時点で、サーバーにアップロードするだけで公開できちゃいます。 修正もソースコードを一部書き換えて、サイドアップロードするだけですぐに反映されちゃいます。

ネイティブのように審査に落とされることもなければ、長いと1週間くらい審査にかかる時間も無いということです。 コンパイルもネイティブアプリケーションのそれと比べてもそこまで長いものではないですから、

ブラウザやOSを選ばない

Android,iOSやPCが同じソースコードで原則として動かすことが可能です。 もちろん、それぞれのブラウザで違いは少しだけあるかもしれませんが、原則として、 どのOSでも同じコードで動くのです。 Androidを書くためにJavaを、iOSを実装するためにSwiftを分けて書くこともなくなるのです。

新しい言語は覚える必要がない。

iOSだったらSwift,AndroidだったらJavaでネイティブアプリケーションは実装しないといけませんが、 SPAはHTML+CSS+JSという、他のWebサイトとほとんど同じ言語を使用して実装していくことができるので、 既に学習済みであれば、ネイティブアプリケーションよりも、とっかかりやすいかも知れません。

サーバーサイドのAPIサーバーはネイティブアプリでも活用できる。

SPAはJSONでAPIサーバーからリクエストを受け取って処理していくので、 そこの部分はネイティブアプリも同じです。したがって、 ネイティブアプリもやりたい時に同じAPIサーバーを活用することができるでしょう。

デメリット

パフォーマンスの問題

ネイティブアプリはインストールするのに少し時間はかかりますが、そのあとは基本的にはサクサク動いてくれます。 初期ページで、色々(JSファイルやCSSファイル)を読み込んだり、DOMを生成したりで、 初期動作が遅くなりがちなので、見せ方に工夫が必要になってきます。 これは、差が詰まってきているのでしょうが、やっぱり、アプリより動作が重いのかなぁと思ったりしています。

SPA独特のノウハウが必要になる

メリットに新しい言語を覚える必要がないという項目を書きましたが、 前述したパフォーマンスの問題を含めて、 WebサイトとSPAは全く別物を作っていくと考えておいたほうがいいでしょう。

乱立するフレームワークや新技術

これはSPAだけでないJS全般に言えるのでデメリットと言うと、ふさわしくないのですが、 やっぱりサーバーサイドの技術に比べると、 まだまだJSのフレームワークなどの部分でやっぱり枯れてない部分が多くて、 常にJSの新技術のキャッチアップをしていかなければなりません。

個人的にはこれが一番躊躇している理由だったりする。

どちらも「アプリケーション」なので、ネイティブアプリケーションを作るときも、SPAもこのくらいのことは仕方ないといった感じでしょう。

まとめ

  • どっちの実装方法にしてもサーバーサイドエンジニアが片手間でできるレベルにはないのは確か。
  • どっちも基本的にはAPIサーバーを使用するので、結局大きい会社とかは、アプリもやってSPAもやることに。
  • どっちにしろアプリ(フロントエンド)エンジニアはいたほうが良さそう。