こちらの記事は、Max Savonin 氏により2020年6月に公開された『 When To Use Node.js as a Back-End 』の和訳です。
本記事は原著者から許可を得た上で記事を公開しています。
Node.jsをバックエンドに使うべきユースケース
JavaScriptは、世界で最も人気のあるプログラミング言語の1つだ。 現在の状況ではライバルになれるのはPythonとJavaだけであり、コンピューティング市場で約8%のシェアを保持している。
Webに関しては、JavaScriptの地位はさらに一つ突き抜けている。 JavaScriptは、事実上、Chrome(またはその派生物)またはFirefoxブラウザーで使用可能な大部分のWebアプリケーションを強化している。 結局のところ、これらのブラウザはWebアプリケーション開発に特化して開発されてきた。 JavaScriptは私たちの生活のいたるところに存在しているのだ。
このプログラミング言語がなければ、あなたは仕事を見つけたり、お気に入りの映画を見たりすることはできなかっただろう。 JavaScriptを使用して開発された最も人気のあるWebサイトは、Netflix、Facebook、LinkedInなどだ。
ただし、JavaScriptの制限された特性は、開発者にとっての多くの問題を生み出した。 そのために、JavaScriptを使用したWebサイトのサーバー側アプリケーションは、別のプログラミング言語で作成する必要しなければならなかった。 これは、JavaScriptを利用する企業にいくつかの重大な問題をもたらした。
1つ目の問題として、バックエンドとフロントエンドの2つのプログラミングチームを雇うコストを負担する必要が生じたということだ。 コストが高いだけでなく、このような企業の部門細分化は、別々のチーム間の衝突の可能性を生み出してしまった。
2つ目の問題として、バックエンドのJavaScriptソリューションがないことで、フロントエンドとサーバーサイド間で互換性の問題が発生する可能性が高くなってしまったということだ。 それらの大部分は簡単に解決できたものの、それらが徐々に蓄積されていくと、特定のWebアプリケーションでは容易に遅延が生じ、バグをはらむ可能性がある。
2009年のNode.jsの登場によって状況は一変した。 なんといっても、このプラットフォームはJavaScript用の本格的なランタイム環境を実現してくれるということだ。これはJava仮想マシンやPythonの統合開発・学習環境に劣らないものだ。
かくして、Node.jsにより開発者は無限の機会を手に入れた。 初めて、JavaScriptはいかなる場所でも使用できるようになった。 残る質問は1つだけだ。「Webベースのプロダクトのバックエンド開発をするためにNode.jsをいつ使用すべきか?」 これが私たちがこの記事で取り上げることだ。Node.jsがバックエンド開発に最適なテクノロジーになると考えられる3つの主要なケースを紹介する。
バックエンドとしてのNode.js:キーとなるユースケース
Node.jsが提供するすべての利点を考慮してみても、Node.jsは万能薬でも、万能ソリューションでもない。 Node.jsがバックエンド開発に最適な場合と、別のプログラミング言語を選択した方が良い場合がある。 そこでここでは、Node.jsがファーストチョイスとなる3つのユースケースに焦点を当ててみよう。
ユースケース1: バグのない、セキュアでメンテナンスが容易なWebベースのソリューションのためにJavaScriptでのフルスタック開発が必要となる場合
Node.jsは、バックエンド開発を念頭に置いて作られた。 基本的に、Node.jsの作者らはNode.jsを純粋なバックエンドソリューションにしようと考えていた。 したがって、市場に出回っている無数の既存のJavaScriptツールと全く問題なく一緒に使うことができる。 あなたのWebアプリケーションがすでにJavaScriptをベースとしていれば、Node.jsを使ったJavaScriptサーバーへの移行は理にかなっている。
第一に、ソフトウェアをアップデートする際の一般的な問題がなくなる。 フルスタックJavaScript開発を使用すると、開発者がWebアプリケーションの更新をプッシュするために費やす時間は大幅に減少するだろう。
第二に、構成の統一は、より古典的なサーバーとクライアント間の調整に必要なインタラクションにおいて発生する可能性がある重大なバグとセキュリティ欠陥の数を減らす可能性がある。 このことから、あなたのWebアプリが機密性の高いユーザー情報を処理する場合、全面的なJavaScriptフロントエンドがすでに存在する場合、JavaScriptバックエンドへの移行は、真に画期的なものになる可能性があるのだ。
同様の論理が、フロントエンド開発にJavaScriptを使用する可能性の高い新規のWebアプリ開発に当てはまる。 Node.jsバックエンドは将来のコードの複雑さを大幅に減らすことができ、一貫性を向上させてくれる。結果として有望なプロダクトのファーストバージョンの完成に一役買うことだろう。
ユースケース2: Webベースのソリューションの開発コストを大幅に削減したい
JavaScriptの大きな強みの1つは、そのシンプルさだ。 C++、Python、さらにはJavaよりも学習が簡単だと言うのが私の意見だ。 その結果、フルスタック開発およびさまざまなツールを使用したフロントエンド開発を断念した場合でも、作業コストを大幅に削減できるだろう。
JavaScriptバックエンドチームはおそらくPythonやC#のチームよりも規模が小さく、より経験の少ないプログラマーでも回すことができるかもしれない。 実際にフルスタックに移行する場合は、バックエンドチームとフロントエンドチームという分割を捨て去って、真に統一された開発環境を作ることも可能だ。
Node.jsランタイム環境にはフロントエンド開発をサポートするツールの拡張セットがあり、Node.jsの開発者とコミュニティのおかげでこのような開発体制を選ぶことは容易になっている。 たとえば、Pugというパッケージは、サーバー側のバックエンドデータを、クライアント側PC上で簡単にレンダリングできるHTML文字列に変換できるNode.jsテンプレートエンジンを提供している。
リソースに関して制約がある場合(たとえば、会社が小規模なスタートアップであったり開発者があなた1人だけだったりする場合)、
Node開発 0>が唯一の現実的な解決策かもしれない。 Node.jsでの開発はシンプルで習得が容易であり、バックエンド開発でもかなり控えめな規模の開発チームで十分だ。
Node.jsのランタイム環境はWebの外部での開発を可能にするほど十分に堅牢だ。例えば、ロボティクスを含む最もユニークな使用例のいくつかが知られている。 これらのことから、Node.jsは、従来の開発よりのソリューションが持つ効率やセキュリティを失うことなく、費用を節約する完璧な方法となってくれる。
ユースケース3: 多数のユーザーからのリクエストに対応するプログラムを作成しようとしている場合
Node.jsの主な利点の1つは、シングルスレッド処理をサポートしているという点だ。 Node.jsはこれを最大限に利用し、現代の非同期シングルスレッドコンピューティング 0>の事実上の「王」だ。
Node.js / JavaScriptバックエンドは、計算上の大きなニーズを持たない大量のユーザーの流入に遭遇する可能性が高いサーバーに最適なソリューションだ。 結果的に、1つのスレッド内ですべてのクライアントのリクエストを処理することができるので、リクエストすべてに対して別々のインスタンスを作成するという手段に訴えることはない。
現実的には、これはクライアント側とサーバー側の両方のCPU機能のより効率的な使用につながっている。 Node.jsをバックエンドに採用することによって、これまで述べてきたユースケースで他の一般的なバックエンドソリューションよりもサーバーへの負担が少なくできる。 たとえば、Webチャットを開発することを選択した場合、バックエンドは数千とまでいかなくても数百のリクエストを処理しなければならないだろう。
従来のマルチスレッドではスレッドの数はかなり制限される傾向があるため、パフォーマンスを妨げる可能性がある。 Node.jsはユーザーリクエストの処理能力を有意に向上させる。というのも、Node.jsでは異なるクライアント要求がランタイム環境内の一部の変数を共有することさえできてしまうからだ。
バックエンドに関しては、典型的な計算負荷はチャットやさらには単純化されたWebゲームでさえ、通常かなり制限されている。 結果的に、Node.jsは多数のユーザー向けのスケーラブルなソリューションを構築するための大きな力となってくれる。 今日、Node.jsのユースケースは枚挙にいとまがない。 バックエンドNode.jsソリューションは、今では多くの分野で積極的に使用されている。
- Webチャット開発
- シンプルなWebベースのゲームの開発
- ソーシャルメディアサイト(Facebookなど)
- Netflixといった動画ストリーミングWebサイト
- オンラインの文書編集アプリケーション
- ユーザーに少量の情報を提供することを目的とした多様なデータベースアプリケーション(証券取引ブローカー向けのWebアプリケーションは、Node.jsを使用して財務革新を推進している)
さらに、フロントエンドソリューションとしてJavaScriptを使用しないことを選択した場合でも、シングルスレッドコンピューティングの利点は残る。 つまり、JavaScriptの重要な利点をスマートフォンのアプリやさらにはデスクトップアプリケーションの開発にまで簡単に拡張できてしまう。
バックエンド開発でNode.jsの使用を避けるべきケース
すでに述べたように、Node.jsの主な長所は、シングルスレッドの性質だ。 純然に計算能力の話となると、リクエストの数が限られた数百、数千、または数十万のユーザーがいる場合に、Node.jsはさまざまなリクエストの処理の複雑さを大幅に軽減してくれる。
しかし、少数のクライアント側リクエストがありながら、かなりの計算能力を必要とする場合、話は変わってくる。 かなり複雑な数学的計算のための複雑なWebアプリケーションを構築している状況を想像してみよう。 特定のシナリオでは、2つの同時問い合わせしかなくても、サーバーのCPUがすぐに過負荷となる可能性がある。
マルチスレッディングだけがこの問題に対する堅牢なソリューションとなりうる。これは、複雑なプロセスにより多くの「火力」を割り当てることで、CPUの複数のコアで計算を迅速に初期化するためだ。
ただし、この状況はかなり仮説的だ。 というのも、重い計算を伴うプログラムの大部分は常にデスクトップベースだからだ。 多くの場合、計算は非常に複雑になるので、マルチスレッドサーバーのバックエンドでさえ、比較的少数のユーザーからのリクエストに対応することができないことがある。
すべての計算をユーザーのPCにオフロードする方が簡単だ。これはビデオレンダリングや数学計算などの最も複雑なタスクのいくつかのためにオフラインのプログラムを作成するということだ。 以上のことから、あらゆる種類の複雑な計算にWebプラットフォームを使用することはお勧めしない。 しかし、この状況は先10年で変わるかもしれない。ただし、将来のソリューションには、いくつかの画期的なイノベーションが関わっている可能性が高いだろう。 このケースでは、Node.jsは明らかに選択肢ではない。
Node.jsは、普通のPCユーザーの日常のニーズ向けに作られた適材適所なプロダクトだ。このセーフゾーンの外から出るならば、その本質上、自分の首を絞めることになるだろう。 複雑な計算は、古典的な開発ソリューションに全てお任せしよう。
Node.js:夢のプラットフォーム
Node.jsは間違いなく、現代の最も堅牢で興味深いバックエンド開発ソリューションの1つの代表だ。 このプラットフォームは、IT関連のマネジメントと開発業務に従事している多くの個人にとって興味深いものであるはずだ。
- 起業家であれば、Node.jsを使ったWeb開発サービスを使用すことで、Web開発のコストを削減する絶好の機会が得られる。
- Web開発者であれば、Node.jsはフルスタックJavaScript開発への完璧な道となってくれる。
開発の世界でこのような堅牢性を提供できるプラットフォームはほとんど存在しない。 そのため、私はすべてのタイプのWeb開発にNode.jsを本当にお勧めしている。
Node.jsは、セキュアでスケーラブルなバックエンドを作成しようとする開発者にとって夢のプラットフォームだ。 さらに重要なことに、シンプルなフロントエンド開発を可能にするための十分なツールも備えている。
JavaScriptを学習して、専門分野に関係なくNode.jsを使ってみるべきだ。 JavaScriptとNode.js、どちらのソリューションもシンプルであるから、あなたが決断すれば自身の開発者ポートフォリオに簡単に付け加えることができるはずだ。
翻訳協力
Original Author: Max Savonin
Original Article: When To Use Node.js as a Back-End
Thank you for letting us share your knowledge!
この記事は以下の方々のご協力により公開する事が出来ました。
改めて感謝致します。
選定担当: @_masa_u
翻訳担当: @_masa_u
監査担当: @r_pg10
公開担当: @_masa_u
ご意見・ご感想をお待ちしております
今回の記事は、いかがだったでしょうか?
・こうしたら良かった、もっとこうして欲しい、こうした方が良いのではないか
・こういったところが良かった
などなど、率直なご意見を募集しております。
いただいたお声は、今後の記事の質向上に役立たせていただきますので、お気軽にコメント欄にてご投稿ください。Twitterでもご意見を受け付けております。
みなさまのメッセージをお待ちしております。