序章

Node.js は、Googleに電力を供給するために使用されるのと同じエンジンであるV8JavaScriptエンジンを使用して、ブラウザーの外部でJavaScriptを実行できる人気のあるオープンソースランタイム環境です。 ChromeウェブブラウザのJavaScript実行。 Nodeランタイムは通常、コマンドラインツールとWebサーバーを作成するために使用されます。

Node.jsを学習すると、フロントエンドコードとバックエンドコードを同じ言語で記述できるようになります。 スタック全体でJavaScriptを使用すると、コンテキスト切り替えの時間を短縮でき、ライブラリをバックエンドサーバーとフロントエンドプロジェクト間でより簡単に共有できます。

また、非同期実行のサポートのおかげで、Node.jsはI / Oを多用するタスクに優れているため、Webに非常に適しています。 ビデオストリーミングなどのリアルタイムアプリケーション、またはデータを継続的に送受信するアプリケーションは、Node.jsで記述した場合により効率的に実行できます。

このチュートリアルでは、Node.jsランタイムを使用して最初のプログラムを作成します。 いくつかのノード固有の概念を紹介し、ユーザーがシステム上の環境変数を検査するのに役立つプログラムを作成する方法を構築します。 これを行うには、文字列をコンソールに出力する方法、ユーザーから入力を受け取る方法、および環境変数にアクセスする方法を学習します。

前提条件

このチュートリアルを完了するには、次のものが必要です。

ステップ1—コンソールへの出力

「Hello、World!」を書くためにプログラム、などのコマンドラインテキストエディタを開きます nano 新しいファイルを作成します。

  1. nano hello.js

テキストエディタを開いた状態で、次のコードを入力します。

hello.js
console.log("Hello World");

The console Node.jsのオブジェクトは、書き込みを行うための簡単なメソッドを提供します stdout, stderr、または他のNode.jsストリーム(ほとんどの場合、コマンドライン)へ。 The log メソッドはに印刷します stdout ストリームなので、コンソールで確認できます。

Node.jsのコンテキストでは、ストリームは、次のようなデータを受信できるオブジェクトです。 stdout ストリーム、またはネットワークソケットやファイルなどのデータを出力できるオブジェクト。 の場合 stdoutstderr ストリームの場合、それらに送信されたデータはすべてコンソールに表示されます。 ストリームの優れた点の1つは、ストリームが簡単にリダイレクトされることです。この場合、たとえば、プログラムの出力をファイルにリダイレクトできます。

保存して終了 nano を押すことによって CTRL+X、ファイルを保存するように求められたら、を押します Y. これで、プログラムを実行する準備が整いました。

ステップ2—プログラムの実行

このプログラムを実行するには、 node 次のようにコマンド:

  1. node hello.js

The hello.js プログラムが実行され、次の出力が表示されます。

Output
Hello World

Node.jsインタープリターがファイルを読み取り、実行しました console.log("Hello World"); を呼び出すことによって log グローバルの方法 console 物体。 文字列 "Hello World" の引数として渡されました log 関数。

テキストが文字列であることを示すためにコードに引用符が必要ですが、画面には出力されません。

プログラムが機能することを確認したら、よりインタラクティブにしましょう。

ステップ3—コマンドライン引数を介してユーザー入力を受け取る

Node.jsを実行するたびに「Hello、World!」 プログラム、それは同じ出力を生成します。 プログラムをよりダイナミックにするために、ユーザーからの入力を取得して画面に表示してみましょう。

コマンドラインツールは、多くの場合、動作を変更するさまざまな引数を受け入れます。 たとえば、実行中 node とともに --version 引数は、インタープリターを実行する代わりに、インストールされたバージョンを出力します。 このステップでは、コマンドライン引数を介してコードがユーザー入力を受け入れるようにします。

新しいファイルを作成する arguments.js ナノで:

  1. nano arguments.js

次のコードを入力します。

arguments.js
console.log(process.argv);

The process オブジェクトはグローバルNode.jsオブジェクトであり、関数と現在実行中のNode.jsプロセスに関連するすべてのデータが含まれています。 The argv プロパティは、プログラムに指定されたすべてのコマンドライン引数を含む文字列のarrayです。

保存して終了 nano 入力して CTRL+X、ファイルを保存するように求められたら、を押します Y.

このプログラムを実行するときは、次のようなコマンドライン引数を指定します。

  1. node arguments.js hello world

出力は次のようになります。

Output
[ '/usr/bin/node', '/home/sammy/first-program/arguments.js', 'hello', 'world' ]

の最初の引数 process.argv arrayは常に、プログラムを実行しているNode.jsバイナリの場所です。 2番目の引数は、常に実行中のファイルの場所です。 残りの引数は、ユーザーが入力したものです。この場合は、次のようになります。 helloworld.

Node.jsが提供するデフォルトの引数ではなく、ユーザーが入力した引数に主に関心があります。 を開きます arguments.js 編集用ファイル:

  1. nano arguments.js

変化する console.log(process.arg); 次のように:

arguments.js
console.log(process.argv.slice(2));

なぜなら argv は配列であり、要素の選択を返すJavaScriptの組み込みスライスメソッドを使用できます。 あなたが提供するとき slice で機能する 2 その引数として、あなたはのすべての要素を取得します argv それはその2番目の要素のの後に来る; つまり、ユーザーが入力した引数です。

でプログラムを再実行します node コマンドと前回と同じ引数:

  1. node arguments.js hello world

これで、出力は次のようになります。

Output
[ 'hello', 'world' ]

ユーザーからの入力を収集できるようになったので、プログラムの環境から入力を収集しましょう。

ステップ4—環境変数へのアクセス

環境変数は、プログラムの外部に保存され、OSによって提供されるキー値データです。 これらは通常、システムまたはユーザーによって設定され、構成または状態の目的で実行中のすべてのプロセスで使用できます。 ノードを使用できます process それらにアクセスするためのオブジェクト。

使用する nano 新しいファイルを作成するには environment.js:

  1. nano environment.js

次のコードを追加します。

environment.js
console.log(process.env);

The env オブジェクトは、Node.jsがプログラムを実行しているときに使用できるall環境変数を格納します。

以前と同じように保存して終了し、 environment.js とファイル node 指図。

  1. node environment.js

プログラムを実行すると、次のような出力が表示されます。

Output
{ SHELL: '/bin/bash', SESSION_MANAGER: 'local/digitalocean:@/tmp/.ICE-unix/1003,unix/digitalocean:/tmp/.ICE-unix/1003', COLORTERM: 'truecolor', SSH_AUTH_SOCK: '/run/user/1000/keyring/ssh', XMODIFIERS: '@im=ibus', DESKTOP_SESSION: 'ubuntu', SSH_AGENT_PID: '1150', PWD: '/home/sammy/first-program', LOGNAME: 'sammy', GPG_AGENT_INFO: '/run/user/1000/gnupg/S.gpg-agent:0:1', GJS_DEBUG_TOPICS: 'JS ERROR;JS LOG', WINDOWPATH: '2', HOME: '/home/sammy', USERNAME: 'sammy', IM_CONFIG_PHASE: '2', LANG: 'en_US.UTF-8', VTE_VERSION: '5601', CLUTTER_IM_MODULE: 'xim', GJS_DEBUG_OUTPUT: 'stderr', LESSCLOSE: '/usr/bin/lesspipe %s %s', TERM: 'xterm-256color', LESSOPEN: '| /usr/bin/lesspipe %s', USER: 'sammy', DISPLAY: ':0', SHLVL: '1', PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin', DBUS_SESSION_BUS_ADDRESS: 'unix:path=/run/user/1000/bus', _: '/usr/bin/node', OLDPWD: '/home/sammy' }

表示される環境変数の多くはシステムの構成と設定に依存しており、出力はここに表示されているものとは大幅に異なる場合があることに注意してください。 環境変数の長いリストを表示するのではなく、特定の変数を取得することをお勧めします。

ステップ5—指定された環境変数へのアクセス

このステップでは、グローバルを使用して環境変数とその値を表示します process.env オブジェクトを作成し、その値をコンソールに出力します。

The process.env オブジェクトは、環境変数名と文字列として格納されているそれらの値の間の単純なマッピングです。 JavaScript のすべてのオブジェクトと同様に、角かっこで囲まれた名前を参照して、個々のプロパティにアクセスします。

を開きます environment.js 編集用ファイル:

  1. nano environment.js

変化する console.log(process.env); に:

environment.js
console.log(process.env["HOME"]);

ファイルを保存して終了します。 今実行します environment.js プログラム:

  1. node environment.js

出力は次のようになります。

Output
/home/sammy

オブジェクト全体を印刷する代わりに、 HOME のプロパティ process.env、の値を格納します $HOME 環境変数。

繰り返しになりますが、このコードからの出力は、システムに固有であるため、ここに表示されているものとは異なる可能性があることに注意してください。 取得する環境変数を指定できるようになったので、ユーザーに表示したい変数を要求することで、プログラムを拡張できます。

ステップ6—ユーザー入力に応答して引数を取得する

次に、コマンドライン引数と環境変数を読み取る機能を使用して、環境変数の値を画面に出力するコマンドラインユーティリティを作成します。

使用する nano 新しいファイルを作成するには echo.js:

  1. nano echo.js

次のコードを追加します。

echo.js
const args = process.argv.slice(2);
console.log(process.env[args[0]]);

の最初の行 echo.js ユーザーが指定したすべてのコマンドライン引数を、と呼ばれる定数変数に格納します args. 2行目は、の最初の要素に格納されている環境変数を出力します。 args; つまり、ユーザーが指定した最初のコマンドライン引数です。

保存して終了 nano、次に次のようにプログラムを実行します。

  1. node echo.js HOME

これで、出力は次のようになります。

Output
/home/sammy

議論 HOME に保存されました args 配列。これは、環境内でその値を見つけるために使用されました。 process.env 物体。

この時点で、システム上の任意の環境変数の値にアクセスできるようになります。 これを確認するには、次の変数を表示してみてください。 PWD, USER, PATH.

単一の変数を取得することは良いことですが、ユーザーが必要な変数の数を指定できるようにすることをお勧めします。

ステップ7—複数の環境変数を表示する

現在、アプリケーションは一度に1つの環境変数しか検査できません。 複数のコマンドライン引数を受け入れて、環境内で対応する値を取得できれば便利です。 使用する nano 編集する echo.js:

  1. nano echo.js

代わりに次のコードが含まれるようにファイルを編集します。

echo.js
const args = process.argv.slice(2);

args.forEach(arg => {
  console.log(process.env[arg]);
});

forEachメソッドは、すべての配列オブジェクトの標準JavaScriptメソッドです。 配列のすべての要素を反復処理するときに使用されるコールバック関数を受け入れます。 あなたが使う forEachargs 配列。環境内の現在の引数の値を出力するコールバック関数を提供します。

ファイルを保存して終了します。 次に、2つの引数を使用してプログラムを再実行します。

  1. node echo.js HOME PWD

次の出力が表示されます。

[secondary_label Output] 
/home/sammy
/home/sammy/first-program

The forEach 関数は、 args 配列が出力されます。

これで、ユーザーが要求する変数を取得する方法がありますが、ユーザーが不正なデータを入力した場合を処理する必要があります。

ステップ8—未定義の入力の処理

プログラムに有効な環境変数ではない引数を指定するとどうなるかを確認するには、次のコマンドを実行します。

  1. node echo.js HOME PWD NOT_DEFINED

出力は次のようになります。

[secondary_label Output] 
/home/sammy
/home/sammy/first-program
undefined

最初の2行は期待どおりに印刷され、最後の行には undefined. JavaScriptでは、 undefined valueは、変数またはプロパティに値が割り当てられていないことを意味します。 なぜなら NOT_DEFINED は有効な環境変数ではありません。次のように表示されます。 undefined.

コマンドライン引数が環境で見つからなかった場合は、ユーザーがエラーメッセージを表示する方が便利です。

開ける echo.js 編集用:

  1. nano echo.js

編集 echo.js 次のコードが含まれるようにします。

echo.js
const args = process.argv.slice(2);

args.forEach(arg => {
  let envVar = process.env[arg];
  if (envVar === undefined) {
    console.error(`Could not find "${arg}" in environment`);
  } else {
    console.log(envVar);
  }
});

ここでは、に提供されているコールバック関数を変更しました forEach 次のことを行うには:

  1. 環境内のコマンドライン引数の値を取得し、変数に格納します envVar.
  2. の値が envVarundefined.
  3. の場合 envVarundefined、次に、見つからなかったことを示す役立つメッセージを出力します。
  4. 環境変数が見つかった場合は、その値を出力します。

console.error 関数は、を介して画面にメッセージを出力します stderr ストリーム、一方 console.log を介して画面に印刷します stdout ストリーム。 コマンドラインからこのプログラムを実行すると、 stdoutstderr ストリームですが、エラーを印刷することをお勧めします stderr ストリーミングして、他のプログラムで簡単に識別および処理できるようにします。他のプログラムは、で違いを知ることができます

次に、次のコマンドをもう一度実行します。

  1. node echo.js HOME PWD NOT_DEFINED

今回の出力は次のようになります。

[secondary_label Output] 
/home/sammy
/home/sammy/first-program
Could not find "NOT_DEFINED" in environment

これで、環境変数ではないコマンドライン引数を指定すると、そのことを示す明確なエラーメッセージが表示されます。

結論

最初のプログラムは画面に「HelloWorld」を表示しました。これで、ユーザー引数を読み取って環境変数を表示するNode.jsコマンドラインユーティリティを作成しました。

これをさらに進めたい場合は、このプログラムの動作をさらに変更できます。 たとえば、印刷する前にコマンドライン引数を検証したい場合があります。 引数が未定義の場合、エラーを返すことができ、すべての引数が有効な環境変数である場合にのみ、ユーザーは出力を取得します。

Node.jsの学習を継続したい場合は、 Node.jsシリーズのコーディング方法に戻るか、Nodeトピックページでプログラミングプロジェクトとセットアップを参照してください。