Node.jsでHello World
実際にアプリケーションを作成する前に、まずはHello Worldアプリケーションを通じてNode.jsのCLIアプリケーションの基本を学びましょう。
プロジェクトディレクトリの作成
今回作成するNode.jsのCLIアプリケーションでは、JavaScriptやMarkdownなどのファイルを扱います。 そのため、まずそれらのファイルを置くためのディレクトリを作成します。
ここではnodecli
という名前で新しいディレクトリを作成します。
ここからは作成したnodecli
ディレクトリ以下で作業していきます。
またこのプロジェクトで作成するファイルは、必ず文字コード(エンコーディング)をUTF-8、改行コードをLFにしてファイルを保存します。
Hello World
まずはNode.jsでHello Worldアプリケーションを作ってみましょう。
具体的には、実行すると標準出力に"Hello World!"
という文字列を表示するCLIアプリケーションを記述します。
はじめに用意するのは、アプリケーションのエントリーポイントとなるJavaScriptファイルです。
nodecli
ディレクトリにmain.js
という名前でファイルを作成し、次のように記述します。
main.js
console.log("Hello World!");
ウェブブラウザの実行環境では、console.log
メソッドの出力先はブラウザの開発者ツールのコンソールでした。
Node.js環境では、console.log
メソッドの出力先は標準出力になります。
このコードは、標準出力に"Hello World!"
という文字列を出力するものです。
JavaScriptのコードをNode.jsで実行するには、node
コマンドを使用します。
コマンドラインでnodecli
ディレクトリに移動し、次のコマンドでNode.jsを使いmain.js
を実行します。
まだnode
コマンドの用意ができていなければ、先に「アプリケーション開発の準備」の章を参照してください。
# `cd`コマンドでnodecli/ディレクトリに移動する
$ cd nodecli/
# `node`コマンドで`main.js`を実行する
$ node main.js
Hello World!
Node.jsでは、エントリーポイントとなるJavaScriptファイルを作成し、そのファイルをnode
コマンドの引数に渡して実行するのが基本です。
また、ウェブブラウザのJavaScriptと同じく、コードは1行目から順に実行されます。
Node.jsとブラウザのグローバルオブジェクト
Node.jsは、ウェブブラウザのChromeと同じV8というJavaScriptエンジンを利用しています。 そのため、ECMAScriptで定義されている基本構文はブラウザと同じように使えます。 しかし、ブラウザ環境とNode.js環境では利用できるグローバルオブジェクトが違うため、アプリケーションを開発するときにはその違いを理解しなくてはなりません。
ECMAScriptで定義されているグローバルオブジェクトはブラウザとNode.jsどちらの環境にも存在します。
たとえばBoolean
やString
などのラッパーオブジェクト、Map
やPromise
のようなビルトインオブジェクトはどちらの環境にも存在します。
しかし、実行環境によって異なるオブジェクトもあります。
たとえばウェブブラウザ環境のグローバルオブジェクトはwindow
オブジェクトですが、Node.jsではglobalと呼ばれるオブジェクトがグローバルオブジェクトになります。
ブラウザのwindow
オブジェクトには、次のようなプロパティや関数があります。
一方、Node.jsのglobal
オブジェクトには、たとえば次のようなプロパティや関数があります。
それぞれのグローバルオブジェクトにあるプロパティなどは、同じ名前でグローバル変数や関数としてアクセスできます。
たとえばwindow.document
プロパティは、グローバル変数のdocument
としてもアクセスできます。
また、ECMAScriptで定義されたものではありませんが、ほぼ同等の機能と名前を持つプロパティや関数がブラウザとNode.jsのどちらにもある場合があります。 たとえば次のようなAPIは同等の機能を提供しますが、メソッドの種類や返り値が異なります。
- Console API
setTimeout
関数
これらを踏まえた上で、次のセクションからCLIアプリケーションの開発をはじめていきましょう。
このセクションのチェックリスト
main.js
ファイルを作成したnode
コマンドでmain.js
を実行し、標準出力にログが出力されるのを確認した- グローバルオブジェクトについて、ウェブブラウザとNode.jsで実行環境による違いがあることを理解した