愚かなハッカーたれ、利口なエンジニアよりも

自我と距離をおきたいプログラマの日記

まだSPA開発で消耗してるの?

使い古された煽りテンプレタイトルですが、リッチクライアントなウェブアプリ、SPA開発に疲れた人、今さらながらやるべきか考えている人などの参考になれば幸いです。

当方、ネイティブアプリ開発メインのプログラマンで、消耗するほどSPA開発などしていないですが、久々にSPAというかリッチクライアントなウェブアプリの開発をやりました。Reactを使ったんですが、これを機会に勉強しなきゃと思いつつ放置してたAngularJSも公式のチュートリアルもやってみました。

個人的にフォルダの構成とか静的型付け言語のTypeScriptと親和しているAngularJSの方がReactよりいいなと思ったのですが、この記事を読んで、

www.bokukoko.info

やっぱり自分はSPAはやらなくていいなと思いました。というかウェブフロントエンドの開発は最小限にしたい。

以下、その理由。

頑張ったところでネイティブアプリのUI/UXに勝てない

かなりスマホのスペックが上がった今でもネイティブと比べたらウェブアプリはモッサリ感がある。また、OSの機能をフルに使えて、新機能をリアルタイムに追随できるのは、やはりネイティブアプリである。

ウェブアプリを作り込む主な理由は、

  • ネイティブアプリより開発コストが低い
  • ネイティブアプリをインストールするハードルが無い
  • OSに依存しない

ことであると思うが、その理由の妥当性も考え直して見る必要があるのではないだろうかと思う。

ネイティブアプリの開発はずいぶん楽になった

一昔前はiOSObjective-CAndroidJavaという今となっては古めかしく冗長な記述を余儀なくされる言語を使うしかなかった。でも今はiOSはSwift、AndroidはKotlinという今風の洗練された言語で開発できる。

さらに検索すればたいていの問題の解決方法は見つかるし、Githubに豊富なライブラリやコンポネントがある。ネイティブアプリの開発はずいぶん楽になりました。相対してPHPRubyJavaScriptといった動的型付け言語が主流のウェブプログラミングの方が、規模が大きくなると辛いと感じるように。

規模が大きくなるほどに、コンパイラが事前にエラー検出してくれる静的型付け言語のありがたみを感じる。そこでウェブアプリも静的型付けのTypeScriptでガッツリやれるAngularがいいかなと思いましたが、そこまでくるとネイティブアプリ開発とコストがあまり変わらなくなるように思う。

ユーザーのほとんどはスマホである

今やほとんどのサービスへのアクセスはスマホからだろう。それなりに使ってもらえるサービスなら、ネイティブアプリを用意した方が良いはずだ。上記の理由によりウェブアプリを作り込むよりは、ネイティブアプリのインストールを促したほうが良いだろう。

LINEはまさにそうしている。LINE NEWSで検索すると、https://news.line.me/のリンクが提示されるが、アクセスするとhttps://news.line.me/about/へリダイレクトする。そこはスマホアプリのダウンロードを促すランディングページのようなもので、最近の記事一覧などはない割り切りである。

へたにリッチなウェブアプリケーションがあると、スマホアプリをインストールの妨げになる。ウェブの方は必要最低限にして、その分ネイティブアプリの開発に注力する。という考え方もあるだろう。

ウェブアプリならOSに依存しないというメリットもあるが、スマホで対応すべきOSは、実質iOSAndroidの2つだけである。端末サイズによるレイアウト崩れなどの問題は、ウェブアプリでも同じく抱える問題である。

フレームワークが乱立する

スマホのネイティブアプリ開発で使用するフレームワークは、OS提供元であるAppleGoogleが提供するものを使う(ゲームならUnityなど選択肢があるが)。これらのフレームワークは、そのOSがユーザに使われる限りメンテされ続ける。OSのバージョンが上がるごとに機能が追加されたり無くなることもあるが、基本的には過去の遺産を引き継いでいる。

しかしブラウザベースで動かすものはフレームワークが乱立し流行り廃りがある。あるフレームワークを使って、それが数年後もメンテナンスされている保証は、ネイティブアプリに比べると低い。さらにメジャーバージョンアップで下位互換がほとんどなく、一から書き直さねばならないことも珍しくないだろう。

それでもSPAとして開発するなら

個人的には、どうしてもPCの画面サイズが必要でブラウザ上でやりたい時に限られる。となると、管理画面でリッチなことをしたい時くらいかなと・・・

改めて自主開発で今後もメンテナンスしていく予定の管理画面のフロントエンド実装をみたら、たいしてボリュームがあるわけでもなく、今後もCoffeeScriptjQueryで十分な気がしました。サーバーサイドは静的型付け言語のGoで、コードのボリュームはこっちに持っていって、JavaScriptの実装は極力抑える形でやればそう困らないかなと。