_著者はhttps://www.brightfunds.org/funds/open-internet-free-speech[Open Internet / Free Speech Fund]を選択してhttps://do.co/w4do-ctaの一部として寄付を受け取りました[寄付のために書く]プログラム。
前書き
Node.jsは人気のあるオープンソースのランタイム環境で、V8 JavaScriptエンジンを使用してブラウザーの外部でJavaScriptを実行できます。V8JavaScriptエンジンは、Google Chrome WebブラウザーのJavaScript実行に使用されるエンジンと同じです。 Nodeランタイムは、一般的にコマンドラインツールとWebサーバーを作成するために使用されます。
Node.jsを学習すると、フロントエンドコードとバックエンドコードを同じ言語で書くことができます。 スタック全体でJavaScriptを使用すると、コンテキスト切り替えの時間を短縮でき、ライブラリはバックエンドサーバーとフロントエンドプロジェクトの間でより簡単に共有できます。
また、非同期実行のサポートのおかげで、Node.jsはI / O集中タスクに優れているため、Webに適しています。 ビデオストリーミングなどのリアルタイムアプリケーション、または継続的にデータを送受信するアプリケーションは、Node.jsで記述するとより効率的に実行できます。
このチュートリアルでは、Node.jsランタイムを使用して最初のプログラムを作成します。 ノード固有の概念をいくつか紹介し、ユーザーがシステム上の環境変数を検査するのに役立つプログラムを作成する方法を構築します。 これを行うには、文字列をコンソールに出力し、ユーザーから入力を受け取り、環境変数にアクセスする方法を学びます。
前提条件
このチュートリアルを完了するには、次のものが必要です。
-
開発マシンにインストールされたNode.js。 このチュートリアルでは、Node.jsバージョン10.16.0を使用します。 これをmacOSまたはUbuntu 18.04にインストールするには、https://www.digitalocean.com/community/tutorials/how-to-install-node-js-and-create-a-local-development-environment-onの手順に従います-macos [macOSでNode.jsをインストールしてローカル開発環境を作成する方法]またはhttps://www.digitalocean.com/community/tutorials/how-to-install-node-の「PPAを使用してインストールする」セクションjs-on-ubuntu-18-04 [Ubuntu 18.04にNode.jsをインストールする方法]。
-
JavaScriptの基本的な知識(https://www.digitalocean.com/community/tutorial_series/how-to-code-in-javascript[JavaScriptのコーディング方法])
手順1-コンソールへの出力
「Hello、World!」プログラムを作成するには、 `+ nano +`などのコマンドラインテキストエディターを開き、新しいファイルを作成します。
nano hello.js
テキストエディターを開いた状態で、次のコードを入力します。
hello.js
console.log("Hello World");
Node.jsの + console +`オブジェクトは、 `+ stdout +
、 + stderr +
、またはほとんどの場合コマンドラインである他のNode.jsストリームに書き込むための簡単なメソッドを提供します。 + log`メソッドは
+ stdout`ストリームに出力されるため、コンソールで確認できます。
Node.jsのコンテキストでは、_streams_は、 `+ stdout `ストリームのようなデータを受信できるオブジェクト、またはネットワークソケットやファイルのようなデータを出力できるオブジェクトです。 ` stdout `および ` stderr +`ストリームの場合、それらに送信されたデータはすべてコンソールに表示されます。 ストリームの優れた点の1つは、簡単にリダイレクトできることです。この場合、たとえば、プログラムの出力をファイルにリダイレクトできます。
「+ CTRL + X 」を押して「 nano 」を保存して終了し、ファイルを保存するように求められたら「 Y +」を押します。 これで、プログラムを実行する準備が整いました。
ステップ2-プログラムの実行
このプログラムを実行するには、次のように `+ node +`コマンドを使用します:
node hello.js
`+ hello.js +`プログラムが実行され、次の出力が表示されます。
Output Hello World
Node.jsインタープリターはファイルを読み取り、グローバルな `+ console `オブジェクトの ` log `メソッドを呼び出すことで ` console.log(" Hello World "); `を実行しました。 文字列 `" Hello World "`は、引数として ` log +`関数に渡されました。
コード内ではテキストが文字列であることを示すために引用符が必要ですが、画面には印刷されません。
プログラムが機能することを確認したら、よりインタラクティブにしましょう。
手順3-コマンドライン引数を介したユーザー入力の受信
Node.jsの「Hello、World!」プログラムを実行するたびに、同じ出力が生成されます。 プログラムをより動的にするために、ユーザーからの入力を取得して画面に表示しましょう。
コマンドラインツールは、多くの場合、動作を変更するさまざまな引数を受け入れます。 たとえば、 `-version +`引数を指定して ` node +`を実行すると、インタープリターを実行する代わりにインストールされたバージョンが出力されます。 このステップでは、コードにコマンドライン引数を介したユーザー入力を許可させます。
nanoで新しいファイル `+ arguments.js +`を作成します。
nano arguments.js
次のコードを入力してください。
arguments.js
console.log(process.argv);
`+ process `オブジェクトは、現在実行中のNode.jsプロセスに関連するすべての関数とデータを含む_global_ Node.jsオブジェクトです。 ` argv +`プロパティは、プログラムに与えられたすべてのコマンドライン引数を含む文字列の配列です。
「+ CTRL + X 」を入力して保存し、「 nano 」を終了します。ファイルの保存を求められたら、「 Y +」を押します。
このプログラムを実行するとき、次のようなコマンドライン引数を提供します:
node arguments.js hello world
出力は次のようになります。
Output [ '/usr/bin/node',
'/home//first-program/arguments.js',
'hello',
'world' ]
`+ process.argv `配列の最初の引数は、常にプログラムを実行しているNode.jsバイナリの場所です。 2番目の引数は、常に実行中のファイルの場所です。 残りの引数は、ユーザーが入力したものです。この場合、 ` hello `と ` world +`です。
Node.jsが提供するデフォルトの引数ではなく、ユーザーが入力した引数に最も関心があります。 編集のために `+ arguments.js`ファイルを開きます:
nano arguments.js
`+ console.log(process.arg); +`を次のように変更します。
arguments.js
console.log(process.argv.);
`+ argv `は配列なので、要素の選択を返すJavaScriptの組み込みの ` slice `メソッドを使用できます。 引数に「+2」を指定して「+ slice 」関数を指定すると、2番目の要素に_あとに来る「 argv +」のすべての要素を取得できます。つまり、ユーザーが入力した引数。
`+ node +`コマンドと前回と同じ引数を使用してプログラムを再実行します。
node arguments.js hello world
これで、出力は次のようになります。
Output [ 'hello', 'world' ]
ユーザーから入力を収集できるようになったので、プログラムの環境から入力を収集しましょう。
ステップ4-環境変数へのアクセス
_環境変数_は、プログラムの外部に保存され、OSによって提供されるキーと値のデータです。 これらは通常、システムまたはユーザーによって設定され、構成または状態の目的で実行中のすべてのプロセスで使用できます。 Node `+ process`オブジェクトを使用してそれらにアクセスできます。
`+ nano `を使用して、新しいファイル ` environment.js +`を作成します。
nano environment.js
次のコードを追加してください。
environment.js
console.log(process.env);
`+ env +`オブジェクトは、all Node.jsがプログラムを実行しているときに利用可能な環境変数を保存します。
以前のように保存して終了し、 + node n`コマンドで
+ environment.js`ファイルを実行します。
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 +`ファイルを開きます:
nano environment.js
`+ console.log(process.env); +`を次のように変更します。
environment.js
console.log(process.env);
ファイルを保存して終了します。 次に、 `+ environment.js +`プログラムを実行します。
node environment.js
出力は次のようになります。
Output /home/
オブジェクト全体を印刷する代わりに、 `+ $ HOME `環境変数の値を保存する ` process.env `の ` HOME +`プロパティのみを印刷します。
繰り返しますが、このコードからの出力は、システムに固有であるため、ここで表示されるものとは異なる可能性が高いことに注意してください。 取得する環境変数を指定できるようになったので、表示したい変数をユーザーに尋ねることでプログラムを強化できます。
ステップ6-ユーザー入力に応じて引数を取得する
次に、コマンドライン引数と環境変数を読み取る機能を使用して、環境変数の値を画面に出力するコマンドラインユーティリティを作成します。
`+ nano `を使用して、新しいファイル ` echo.js +`を作成します。
nano echo.js
次のコードを追加してください。
echo.js
const args = process.argv.slice(2);
console.log(process.env[args[0]]);
`+ echo.js `の最初の行には、ユーザーが指定したすべてのコマンドライン引数が ` args `という定数変数に格納されます。 2行目は、 ` args +`の最初の要素に格納されている環境変数を出力します。つまり、ユーザーが指定した最初のコマンドライン引数。
`+ nano +`を保存して終了し、次のようにプログラムを実行します。
node echo.js HOME
これで、出力は次のようになります。
Output /home/
引数「+ HOME 」は「 args 」配列に保存され、「 process.env +」オブジェクトを介して環境内で値を見つけるために使用されました。
この時点で、システムの環境変数の値にアクセスできます。 これを確認するには、変数「+ PWD」、「+ USER」、「+ PATH」を表示してみてください。
単一の変数を取得するのは良いことですが、ユーザーに必要な変数の数を指定させる方が良いでしょう。
手順7-複数の環境変数の表示
現在、アプリケーションは一度に1つの環境変数しか検査できません。 複数のコマンドライン引数を受け入れ、環境内で対応する値を取得できると便利です。 `+ echo.js `を編集するには、 ` nano +`を使用します。
nano echo.js
代わりに次のコードを含むようにファイルを編集します。
echo.js
const args = process.argv.slice(2);
`+ forEach `メソッドは、すべての配列オブジェクトの標準JavaScriptメソッドです。 配列のすべての要素を反復処理するときに使用されるコールバック関数を受け入れます。 ` args `配列で ` forEach +`を使用し、現在の引数の値を環境に出力するコールバック関数を提供します。
ファイルを保存して終了します。 次に、2つの引数を使用してプログラムを再実行します。
node echo.js HOME PWD
次の出力が表示されます。
Output /home/
/home//first-program
`+ forEach `関数は、 ` args +`配列内のすべてのコマンドライン引数が確実に出力されるようにします。
これで、ユーザーが要求する変数を取得する方法ができましたが、ユーザーが不正なデータを入力した場合に対処する必要があります。
ステップ8-未定義の入力の処理
プログラムに有効な環境変数ではない引数を指定するとどうなるかを確認するには、次を実行します。
node echo.js HOME PWD NOT_DEFINED
出力は次のようになります。
Output /home/
/home//first-program
undefined
最初の2行は期待どおりに印刷され、最後の行には `+ undefined `しかありません。 JavaScriptでは、「 undefined 」の値は、変数またはプロパティに値が割り当てられていないことを意味します。 ` NOT_DEFINED `は有効な環境変数ではないため、 ` undefined +`として表示されます。
環境内でコマンドライン引数が見つからなかった場合は、ユーザーがエラーメッセージを表示する方が便利です。
編集のために `+ echo.js +`を開きます:
nano echo.js
`+ echo.js +`を編集して、次のコードを追加します。
echo.js
const args = process.argv.slice(2);
args.forEach(arg => {
let envVar = process.env[arg];
});
ここでは、 `+ forEach +`に提供されるコールバック関数を変更して、次のことを行います。
-
環境内のコマンドライン引数値を取得し、変数「+ env Var」に保存します。
-
+ env Var`の値が
+ undefined`かどうかを確認します。 -
`+ envVar `が ` undefined +`の場合、見つからなかったことを示す有用なメッセージを出力します。
-
環境変数が見つかった場合、その値を出力します。
次のコマンドをもう一度実行します。
node echo.js HOME PWD NOT_DEFINED
今回の出力は次のとおりです。
Output /home/
/home//first-program
Could not find "NOT_DEFINED" in environment
環境変数ではないコマンドライン引数を指定すると、そのことを示す明確なエラーメッセージが表示されます。
結論
最初のプログラムは「Hello World」を画面に表示しましたが、ユーザー引数を読み取って環境変数を表示するNode.jsコマンドラインユーティリティを作成しました。
これをさらに進めたい場合は、このプログラムの動作をさらに変更できます。 たとえば、印刷する前にコマンドライン引数を検証することができます。 引数が未定義の場合、エラーを返すことができ、すべての引数が有効な環境変数である場合にのみユーザーは出力を取得します。