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どちらの環境にも存在します。 たとえばBooleanStringなどのラッパーオブジェクト、MapPromiseのようなビルトインオブジェクトはどちらの環境にも存在します。

しかし、実行環境によって異なるオブジェクトもあります。 たとえばウェブブラウザ環境のグローバルオブジェクトは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で実行環境による違いがあることを理解した