著者は、 Open Internet / Free Speech Fund を選択して、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

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

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

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

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

前提条件

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

サーバーやローカルコンピューターを使用せずにNode.jsを試してみたい場合は、ブラウザーでインタラクティブ端末を使用できます。 下のインタラクティブターミナルの起動!ボタンをクリックして開始します。

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

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

  1. nano hello.js

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

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

Node.jsのconsoleオブジェクトは、stdoutstderr、または他のNode.jsストリーム(ほとんどの場合コマンドライン)に書き込むための簡単なメソッドを提供します。 logメソッドはstdoutストリームに出力されるため、コンソールで確認できます。

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

CTRL+Xを押して保存し、nanoを終了します。ファイルの保存を求めるメッセージが表示されたら、Yを押します。 これで、プログラムを実行する準備が整いました。

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

このプログラムを実行するには、次のようにnodeコマンドを使用します。

  1. node hello.js

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

Output
Hello World

Node.jsインタープリターはファイルを読み取り、グローバルconsoleオブジェクトのlogメソッドを呼び出してconsole.log("Hello World");を実行しました。 string "Hello World"は、log関数の引数として渡されました。

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

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

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

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

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

nanoを使用して新しいファイルarguments.jsを作成します。

  1. nano arguments.js

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

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

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

CTRL+Xと入力して、nanoを保存して終了します。ファイルの保存を求めるメッセージが表示されたら、Yを押します。

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

  1. node arguments.js hello world

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

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

process.argv配列の最初の引数は、常にプログラムを実行している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を引数として指定すると、2番目の要素の後にが来るargvのすべての要素が取得されます。 つまり、ユーザーが入力した引数です。

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);

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

以前と同じように保存して終了し、nodeコマンドを使用してenvironment.jsファイルを実行します。

  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オブジェクトを使用して環境変数とその値を表示し、それらの値をコンソールに出力します。

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.envHOMEプロパティのみを出力するようになりました。

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

ステップ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

引数HOMEargs配列に保存され、process.envオブジェクトを介して環境内でその値を見つけるために使用されました。

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

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

ステップ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メソッドです。 配列のすべての要素を反復処理するときに使用されるコールバック関数を受け入れます。 args配列でforEachを使用して、環境内の現在の引数の値を出力するコールバック関数を提供します。

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

  1. node echo.js HOME PWD

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

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

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値は、変数またはプロパティに値が割り当てられていないことを意味します。 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. envVarの値がundefinedであるかどうかを確認します。
  3. envVarundefinedの場合、見つからなかったことを示す役立つメッセージを出力します。
  4. 環境変数が見つかった場合は、その値を出力します。

console.error関数は、stderrストリームを介して画面にメッセージを出力しますが、console.logstdoutを介して画面に出力します。 ] ストリーム。 コマンドラインからこのプログラムを実行すると、stdoutストリームとstderrストリームの違いに気付くことはありませんが、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トピックページでプログラミングプロジェクトとセットアップを参照してください。