Node.js公式サイト:https://nodejs.org/en/
はじめに
以前はトイ言語と揶揄されていたJavaScriptも、今ではなくてはならない言語となりました。JavaScriptを使用していないウェブサイトは殆どありません。
長年、JavaScriptはブラウザで使用されてきましたが、サーバーサイドでも活用が進んでいます。その火付け役となったのが、今回紹介する「Node.js」です。
この記事では、サーバーサイドJavaScriptを知りたいエンジニアの方のために、Node.jsの概要や特徴、活用例などを紹介した後、簡単なチュートリアルを行います。
Node.jsとは何か?
Node.js公式サイト:https://nodejs.org/en/
リポジトリ:https://github.com/nodejs/node
Node.jsは、2009年に開発されたオープンソースのJavaScript実行環境です。内部では、GoogleのV8 JavaScriptエンジンが使われています。ブラウザとは切り離されているため、より汎用的な目的に使用できます。サーバーサイドのみならず、デスクトップアプリでも活用されています。Windows、Mac、Linuxとマルチプラットフォームに対応しています。
Node.jsの特徴
イベントループ
Node.jsは、多くのJavaScriptエンジンと同じくシングルスレッドで動作します。リクエストやレスポンスなどの処理はイベントキューに入り、順次イベントループで処理されます。このお陰で、大量のアクセスを処理できるのです。重い処理が入ると、全体がブロックされてしまうので注意する必要があります。
ノンブロッキングI/O
上述の通り、Node.jsでは処理をブロックしないことが重要です。重い処理の筆頭には、I/O処理があります。例えば、ファイルやデータベースなどの読み書きです。次々イベントを処理しなければならないため、I/Oの完了を待っている時間はありません。そのため、I/Oの完了を待たずに次の処理を始めます。後ほどI/Oが完了すると、コールバック関数が呼ばれ処理が再開されます。これを、ノンブロッキングI/Oと呼びます。非同期I/Oとは別物なので混同しないようにしましょう。
モジュール
保守しやすいプログラムを作るためには、分割が必要不可欠です。Node.jsは、CommonJS仕様をベースとしたモジュールシステムを採用しています。必要なモジュールを簡単にロードでき、独自モジュールの作成も簡単です。また、パッケージとしてモジュールが公開されており、npmというパッケージマネージャーを使ってインストールできます。
Node.jsが解決する問題
従来のスレッドをベースとした処理モデルでは、アクセス数の増大と共に多くのリソースを消費します(C10K問題)。一方、イベントループ(シングルスレッド)で処理をするNode.jsは、アクセス数が増えても必要なリソースは少なく済みます。これは、Node.jsが注目を集めた理由のひとつです。ウェブサーバーでも、同じくイベントループを採用したNginx(エンジンエックス)が人気化しています。
Node.jsの活用例
ウェブサイト
Expressを始めとする、ウェブフレームワークが揃っているため、Node.jsを使って簡単にウェブサイトを構築できます。サーバー上でNode.jsを動作させるため、レンタルサーバーを使う場合には対応しているか確認が必要です。主なクラウドサービスは概ね対応しています。
ウェブAPI
大量のアクセスをさばく必要があるウェブAPIもNode.jsの得意分野です。こちらも、Expressで簡単にウェブAPIを構築できます。JavaScriptで開発できるため、JSONとの相性がよく、開発しやすいでしょう。
デスクトップアプリ
モダンエディターのAtomやタスクランナーのGulpなど多数のアプリが、Node.jsをベースに作られています。npmを使って、色々なツールをインストールできます。自分でちょっとしたツールを作ってみるのもよいでしょう。
実際にNode.jsをインストールして使ってみよう
Node.jsをインストールする
初めに、Node.jsをインストールしましょう。下記のURLから各プラットフォーム用のインストーラーをダウンロードして下さい。通常は、LTS版を選んでおけば大丈夫です。
Node.jsダウンロード:https://nodejs.org/en/download/
インストールが終わったら、コンソール(コマンドプロンプト)から下記のコマンドを実行して正常にインストールできているか確認します。
node -v
バージョン番号が表示されれば、インストールは完了です。
JavaScriptでプログラムを書く
早速、Node.jsのプログラムを書いてみましょう。下記のコードを、任意の場所に「hello.js」として作成してください。
このコードでは、標準モジュールであるhttpモジュールを使って、簡易ウェブサーバーを起動します。ヘッダを書き出して文字列を返すだけの簡単なコードです。
var http = require("http"); http.createServer(function (request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.end("Hello, World"); }).listen(8081); console.log("Server running at http://127.0.0.1:8081/");
ファイルを保存したら、下記のコマンドを使ってコードを実行しましょう。
node hello.js
すると、コードに書いたログが出力され、リクエストを待ち受ける状態になります。ブラウザから「http://127.0.0.1:8081」にアクセスしてみましょう。次のように、文字列が表示されれば成功です。簡単ですね。
パッケージをインストールして使う
次は、npmを使ってパッケージをインストールしてみましょう。次のコマンドを入力してください。ここでは、HTTPリクエストを投げるrequestパッケージをローカルにインストールします。
npm install --save-dev request
依存しているパッケージも自動的にインストールされるため、依存関係を気にする必要はありません。
コードを書く
次に、下記のコードを「request.js」として作成してください。このコードは、取得したHTMLをそのままコンソールに出力します。
var request = require("request"); var url = "http://yahoo.co.jp"; request(url, function (error, response, body) { console.log(body); });
ファイルを保存したら、下記のコマンドを使ってコードを実行しましょう。
node request.js
すると、コンソールに取得したHTMLがずらずらっと出力されます。このように、パッケージを利用すれば、さまざまなことが簡単にできます。
まとめ
大量のアクセスを高速に処理したいなら、Node.jsを検討してみましょう。エンドツーエンドにJavaScriptを適用すれば、開発効率も上がるかもしれません。npmには30万以上のパッケージが登録されていますので、積極的に活用しましょう。Node.jsをサポートする開発ツールも数多くあります。あなたもサーバーサイドJavaScriptを始めてみませんか?
本ブログは、Git / Subversionのクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
エンタープライズ向け Git / Subversion 導入や DevOps による開発の効率化を検討している法人様必見!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。
No Comments