マーリンアームズ サポート   翻訳   コンサル   講座   アプリ   コラム
JavaScript講座     辞書サイト

Node.jsデザインパターン 第2版    Mario Casciaro + Luciano Mammino著    武舎広幸+阿部和也訳

まえがき

Node.js(略してNode)はウェブ開発の世界に大きな変化をもたらしました。この変化はここ十年で最大のものだったと言ってもよいかもしれません。Nodeが広まった理由としては、その機能的な面ももちろんありますが、Nodeがウェブ開発にもたらした「パラダイムシフト」も大きな要因です。

パラダイムシフトのひとつ目は、単一言語によるウェブアプリケーションの作成が可能になった点です。Nodeのアプリケーションは主要ウェブブラウザでネイティブにサポートされる唯一のプログラミング言語であるJavaScriptで書かれます。したがってNodeを使うことで、ウェブアプリケーション全体を単一の言語で記述でき、サーバとクライアントでコードの共有も可能になったのです。Nodeの登場により、プログラミング言語としてのJavaScriptの重要性が高まり、これがこの言語の進化を加速しました。ブラウザ上のJavaScriptに関して不満を抱いた開発者は少なくなかったのですが、サーバ側で実行するJavaScriptに関してはそれほどは不満の声を聞かなくなってきました。オブジェクト指向言語と関数型言語の両者の特徴を合わせもつこの言語を気に入る開発者が徐々に増えてきたのです。

パラダイムシフトの2つ目は、Nodeが提供する「シングルスレッドアーキテクチャ」によって、新しい非同期プラグラミングの世界が切り開かれた点です。パフォーマンスやスケーラビリティという観点から見てこの長所は明らかですが、並行実行や並列実行に関する開発者の見方を大きく変えることにもなったのです。Nodeの非同期プログラミングでは、従来のmutexミューテックスはキューに置き換えられ、スレッドはコールバック関数とイベントに置き換えられました。

そしてもっとも重要なのが、熱烈なファンからなるコミュニティによって支えられている「エコシステム」の存在です。日々新しいモジュールが追加され、パッケージマネージャのnpmによって簡単にインストールできるようになっています。徹底した実用主義、簡潔さとモジュラリティを何よりも重んじる独特の文化が形成されています。

一方で、他のサーバサイドのプラットフォームとの違いに戸惑いを覚える開発者も少なくありません。このため、Nodeに不慣れな開発者は時として、ごく一般的な問題に対しても、どうデザインすればよいのか、どうコーディングすればよいのかよくわからないという状況に陥ってしまいます。たとえば次のような疑問が湧いてきてしまうのです。

「どのようにコードを整理し、構成していけばよいのか?」

「これを設計するのにベストな方法は何だろうか?」

「自分のアプリのモジュール性をより高めるにはどうしたらよいのだろうか?」

「複数の非同期呼び出しの処理はどうすれば効果的に行えるのだろうか?」

「規模が大きくなっても大丈夫なようにするには、どんなことに気をつければよいのだろうか?」

そして、もっと単純に

「これを『正しく』処理するにはどうするのがよいのだろうか?」

というものでしょう。

幸いなことに、Nodeは既にプラットフォームとして十分成熟しており、こうした疑問に対する回答は「デザインパターン」という形で与えられています。既に有効性が証明されたコーディングのテクニックや推奨される「プラクティス」が「デザインパターン」という形でまとめられているのです。

この本の目的はこうしたデザインパターンを皆さんに提供することです。典型的な問題に対する解決策となる、パターンや技法、プラクティスを紹介することです。

もう少し具体的に説明しましょう。この本では次のような事柄を紹介していきます。

Node流の解決手法
Node特有の問題を解決するには、Node特有のアプローチを学ぶ必要があります。この本では、従来型のデザインパターンとは異なる、Node流の解決手法("The Node Way")を学びます。
デザインパターン集
日常の開発における設計上の問題解決にすぐに役立つデザインパターンを、整理されたカタログの形で紹介します。
設計手法
大規模アプリケーションをNodeで開発するのに必要とされる、設計上の基礎知識と原則を説明します。また、既存のパターンでは解決できないような問題に対して、そうした原則を応用する方法を説明します。

この本には、LevelDBやRedis、RabbitMQ、ZMQ(ØMQ)、Express、その他多くの実際によく使われているライブラリなどをデザインパターンの例として紹介します。これによりサンプルコードがより有用なものになるだけでなく、Nodeのエコシステムに慣れることにもなるでしょう。

実際に仕事や趣味でNodeを使っている読者はもちろんのこと、これから導入を検討している人にとっても、デザインパターンを知ることで、他のエンジニアとコードや設計の話をする際の「共通言語」が得られるため、Nodeの方向性についてより正しい理解が得られることでしょう。

前提条件

この本で紹介するサンプルコードを実際に実行するには、Node.jsバージョン6以上およびnpmバージョン3以上がコンピュータにインストールされている必要があります(例題の実行はNode.jsバージョン11.9.0で行いました)。また、コードを編集するためのテキストエディタやウェブブラウザ(の最近リリースされたバージョン)も必要になります。さらに、いくつかのサンプルコードはBabelなどのトランスコンパイラ(トランスパイラ)を必要とします。また、この本ではコマンドラインの実行方法や、npmパッケージのインストール方法、Nodeアプリケーションの実行方法については説明しません(こういった事柄の習得には『初めてのJavaScript 第3版』(オライリー・ジャパン)などが参考になります)。

対象読者

この本の対象読者は、既にNodeを使用したことがあり、さらに生産性や品質やスケーラビリティといった観点で、より効果的にNodeを使いこなしたいと考えている開発者です。とはいえ、いくつかの基礎的な概念についても解説しますから、初級者でJavaScriptプログラムを書いた経験があれば内容を理解できるでしょう。また、中級者も多くの新情報を得られるはずです。

この本で触れるいくつかの概念を理解するには、ソフトウェア設計の理論に関する知識があったほうがよいでしょう。さらには、ウェブアプリケーション開発、JavaScript、ウェブサービス、データベース、データ構造についての知識も前提としています。