分はじめに本連載では,注目を集めるNode.jsを使って,Webアプリケーションを様々なクラウド環境で動かすことを最終目的にしています。Node.jsに触れたことがないJavaやPHPなど普段サーバサイドで開発されている方を主な対象として,まずNode.jsの概要から紹介していきます。Chrome用に開発されたJavaScriptエンジンV8がサーバ上でプログラムを実行できるように,ファイルやネットワークI/Oなど多くの機能を追加したものです。軽量で効率よく多くのリクエストを処理するネットワークアプリケーションの構築ができるプラットフォームになっています。いわゆるサーバサイドJavaScriptの代名詞として注目を集めています。Node.jsでは“⁠軽量で効率良く⁠”というのを実現するために次の2つのモデルを採用しています。ノンブロッキングI/OイベントループJavaScriptの1つの特徴にシングルスレッドで動作することがあります。これはNode.jsでも同様で,デッドロックなどを意識する必要がなくなります反面一度に1つの処理しかできないため複数の処理を捌けません。そのためNode.jsではノンブロッキングI/Oを採用しています。データベースにアクセスして検索を実行して結果を取得する。この場合,データベースに問い合わせてから結果が返ってくるまで,待ち時間があります。一般的にはライブラリなどでデータベースから結果が返るまでの間,呼び出し元の処理を止めておきます。そのため結果を利用した処理を続けて定義できます。それに対してノンブロッキングI/Oは,データベースに問い合わせたら次の処理に移ります。結果の受け取りはコールバックで実現します。このように基本的に重い入出力処理は非同期で実行するのがノンブロッキングI/Oです。リクエストやコールバックの発生はイベントとして扱い(登録し⁠)⁠,そのイベントに関する処理が終わったら,次のイベントを処理する。このようなイベントループをNode.jsは採用しています。以降,Node.jsを単純にnodeとして表記します。開発者のダール氏たちも⁠”node⁠”と呼んでいるようです。Nodeのインストールhttp://nodejs.org/のサイトで,WindowsとMacにはインストーラが,そしてLinux用にソースコードが提供されています。(x86)\nodejs\node.exe」と,Macは「/usr/local/bin/node」として,それぞれ実行ファイルがインストールされます。基本的にLinuxにおいては,ソースコードからのコンパイルになります。GCCなどのコンパイラ環境がすでにインストールされている状態で,次のような手順でインストールできます。install」はrootユーザで行い,「⁠/usr/local/bin/node」として実行ファイルがインストールされます。現状,バージョン0.6系が安定版,0.7系が開発版になります。本執筆では0.6系を前提に進めていきます。モジュールの使い方についてブラウザ上で動くJavaScriptはすべてのjsファイルがマージされたものとしてスコープが適用されますが,nodeにはモジュールという単位で各機能を分割することができます。モジュールが1つのjsファイルとなります。それぞれのグローバルスコープはそれぞれのjsファイル内で"閉じた"状態になり,exportsオブジェクトを通して外部に渡すことができます。モジュールの参照はrequire関数を使います。読み込んだモジュールのexportsオブジェクトを返してくれます。モジュール参照の一例を見てみましょう。}このコードをfoo.jsファイルとして保存します。このfooモジュールは,文字列「foo」を返すだけのprintFooメソッドを実装しています。printFoo());こちらのコードをmain.jsファイルとして,同じディレクトリに保存します。foo.jsをモジュールとして読み込んで,fooオブジェクトで参照します。printFooメソッドの結果をコンソールに出力します。main.jsを実行すると,コンソールに「foo」と出るのが確認できます。シンプルなHTTPサーバNode.jsサイトのトップページにある以下のコードを辿り,具体的に動きを見ていきましょう。http://127.0.0.1:1337/');httpモジュールをhttpオブジェクトとしてロードしています。次にhttpモジュールのcreateServerメソッドにはHTTPリクエストを処理してレスポンスを返すHTTPサーバアプリケーションとしての処理を定義する関数を指定します。World」を書き出しています。createServerメソッドはHTTPサーバオブジェクトを返し,さらにそのlistenメソッドで1337番ポートとループバックアドレスにバインドしてサーバを開始します。このコードをapp.jsファイルとして保存します。次のようにコマンドプロンプトで,nodeコマンドの引数に指定して実行します。World」と表示されることが確認できると思います。普段使われている言語では,WebサーバとしてTomcatやApache+CGIといったアプリケーションを動作させるコンテナがある状態で,中身のアプリケーションだけを,サーブレットのように定まった仕様で構築することが多いでしょう。nodeの場合は,前述のサンプルのようにそれ自身でコンテナとなるWebサーバもアプリケーションも,どちらもまとめて実装することになります。最後に今回は,Node.jsの概要からブラウザでのJavaScriptとは異なる,具体的なサーバサイドプログラミングに関わる部分を重点に紹介してみました。次回以降は,パッケージ管理npmの紹介や,フレームワークのExpressを使ってWebアプリケーションを作っていきたいと思います。メーカー企業でパッケージソフト開発などに携わった後,ティルフィン合同会社を設立しフリーエンジニアとして,RIAやスマートモバイルアプリとサーバーサイドと広い分野で開発に従事。トレンドトピック,Newstrushをリリースしている。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。