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のCLIアプリケーションは、main.js
ファイル以外にも複数のファイルが必要になります。
また、外部のnpmパッケージのインストールやテストスクリプトの実行なども行います。
そのため、Node.jsプロジェクトのセットアップとしてpackage.json
というファイルを作成します。
package.json
とは、プロジェクトの情報、プロジェクトが依存するパッケージ、プロジェクトで実行するスクリプトなどを記録するJSON形式のファイルです。
package.json
ファイルのひな形は、npm init
コマンドで生成できます。
まだnpm
コマンドの用意ができていなければ、先に「アプリケーション開発の準備」の章を参照してください。
通常は対話式のプロンプトによって情報を設定しますが、ここではすべてデフォルト値でpackage.json
を作成する--yes
オプションを付与します。
nodecli
のディレクトリ内で、npm init --yes
コマンドを実行してpackage.json
を作成しましょう。
$ npm init --yes
生成されたpackage.json
ファイルは次のようになっています。
package.json
{
"name": "nodecli",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
現時点ではpackage.json
にはあまり情報が記述されていませんが、後ほどアプリケーションの情報や依存パッケージを追加する際に利用します。
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アプリケーションの開発をはじめていきましょう。
このセクションのチェックリスト
nodecli
ディレクトリを作成したnodecli/main.js
ファイルを作成したnode
コマンドでnodecli/main.js
を実行し、標準出力にログが出力されるのを確認したnpm init --yes
コマンドでnodecli/package.json
ファイルを作成した- グローバルオブジェクトについて、ウェブブラウザとNode.jsで実行環境による違いがあることを理解した