ボクココ

サービス開発を成功させるまでの歩み

シングルページアプリケーションである必要性を考えよう

ども、@kimihom です。

f:id:cevid_cpp:20190106105738j:plain

2019年、皆さんはどんな技術を習得したいと考えているだろうか。その中の候補の一つとして、おそらく「シングルページアプリケーション(以降SPA) を流行りの JavaScript フレームワークで作れるようになる」という目標を掲げている方も少なくないだろう。

私自身 SPA でサービスを作った経験を踏まえて、その価値に関して改めて考え直してみて欲しいと思いこのエントリーを記す。

ユーザーは SPA 自体を求めていない

技術トレンドに流されまくるエンジニアが後を絶たない。

  • SPA が流行ってるからうちもチャレンジしてみよう
  • あの有名企業が Go を採用したからうちも Go 使ってみよう
  • REST の時代は終わりらしいからうちも考え直そう

これらに関して考えるべきことは、「その技術を採用した企業と、あなたの置かれた状況は一致しているのか?」という点だ。実際は全く違うのにうちでも使おうという安易な結論を出してしまうケースがある。安易な選択はそれらを広めようとしている人たちの思うツボだ。

会社や個人のブランディングとして新技術を推し進めているかもしれない。大規模システムで負荷やレスポンス速度が本当にシリアルな課題になったから、プログラミング言語を変えたのかもしれない。誰かからお金をもらって技術を宣伝しているのかもしれない。採用目的で一部だけその技術を使っているだけかもしれない。。

ユーザーは本当に SPA を求めているのだろうか? この答えは No だろう。ユーザーのほとんどは非SPAのサイトを利用することに慣れきっているし、これからもアプリケーションによるけど非 SPA なサイトは残り続ける。単純に情報を投稿、閲覧するくらいの Web サービスではほぼ間違いなく SPA である必要はない。

そもそもこれら SPA を開発している元を考えてみよう。Angular は Google で React は Facebook だ。彼らにとって、これらの技術が必要だから作られた訳だ。私たちのほとんどが、 Gmail や Facebook のような複雑で多機能なアプリケーションを担当しているのだろうか?これは絶対にNoと断言できる。Gmail にせよ Facebook にせよ、あんだけ成功したからこそどんどん機能追加できたのだ。そんなに機能が複雑でない時点から SPA のフレームワークを利用する必要はないし、ほとんどの場合無駄な実装コストと時間が増えるだけで終わる。

先に明記した 「技術トレンドに流されまくるエンジニア」で挙げた3つの例は全て同じシチュエーションだ。ほとんどのサービスにおいては必要がないけど、一部の大規模/複雑なサービスでは必要になってきたから出てきたのがこれらの技術なのである。

学ぶ技術を見極めよう

現段階でシステム負荷やフロントエンドが複雑になりすぎている課題を抱えている場合には、それらに移行するために上記技術を学ぶ価値はある。

とはいえ、実際はブラウザやサーバー、ネットワークといったそもそもの部分がどんどん高速になってきている。エディタが進化してちょっとしたミスは勝手に修正してくれるようになってきている。 テクノロジーの進化から、実は新しく出てきたプログラミング言語やフレームワークが想定していた課題は既にクリアされている可能性がある。それなのにトレンドに流されてそれらの技術の学習に時間を割いてしまうほど、私たちに時間の余裕はないはずだ。

今年新しい技術を学ぼうとしている方は、「この技術は何の課題を解決するために出てきたのだろう?」という点を注視しよう。そして、その課題はあなたの感じている課題を完全に解決してくれるものだったら、学ぶ価値があるだろう。

ここで例として「jQuery で書いたコードがカオスだから別のフロントエンドフレームワークに移ろう」としたとしよう。この課題の本質は、実は jQuery のせいではなく今まで書いたプログラム自体がイケてないってだけだったという場合がほとんどだ。もしその状態で他のフレームワークに移っても、そのフレームワークを使ったカオスなコードができあがるだけである。そうなるといつまでも特定の技術を深めることができず、また適当なコードができあがってしまい、メンテナンス困難になるオチが待っている。

既存技術の方が色々な解決策や改善が繰り返されているから、これから作る場合でも既存技術を選択した方が効率的な場合が多い。新しい技術ではその課題をまだ解決しきれておらず、自分でゴリゴリのコードを書く必要が出てきたりする。そんなことを覚悟した上で、それでも新しい技術を採用しなきゃいけない"明確な理由"があるのなら、新しい技術に移るという選択が初めてできるようになる。

新しいチャレンジをするなというわけではない。本当に必要なチャレンジは何かを見極めて、それだけに集中できるようにしよう。

終わりに

新年の記事ということで、技術を学ぶことに意欲のある方が誤った方向に進まないようにするための一つのヒントを掲示した。完全にこの記事では SPA が悪者みたいになっちゃったけど、巷でもてはやされてるから、このくらいの扱いをされた記事が1つくらいあってもいいだろう。

今年、あなたはどんな技術を身に付けたいか?改めて考え直してみて欲しい。