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コマンドを使用します。 次のコマンドを実行して、Node.jsで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で実行環境による違いがあることを理解した