Kodokon kodokon.com

コマンドラインのスクリプト:引数、環境、終了コード

process.argvで引数を受け取り、環境変数を読み、終了コードを返すスクリプトを書きましょう。

8 分 · 3 問

このレッスンを Kodokon で開く

あなたはすでにコマンドラインのプログラムを使っています。nodenpmgitなどです。それぞれが引数、つまり名前のあとに打ち込まれる単語を受け取り、それが挙動を変えます。自分でも書いてみましょう。Nodeはグローバルオブジェクトprocessを公開しています。これは現在実行中のプログラムを表します。process.versionで出会いましたね。そのプロパティprocess.argvは配列で、次のものを含みます。インデックス0にNodeへのパス、インデックス1にスクリプトへのパス、そしてインデックス2以降に、ユーザーが実際に打ち込んだ引数です。

JAVASCRIPT
console.log(process.argv);

const args = process.argv.slice(2);
console.log("Your arguments:", args);
このコードをargs.jsに保存して、node args.js apple pearを実行しましょう。slice(2)が役立つ引数だけを取り出します。

第二の情報源です。環境変数です。これは、起動時にシステムからプログラムへ提供される名前と値のペアです。設定に使われます。秘密のAPIキー、デバッグモード、データベースのアドレスなどです。process.envオブジェクトの中で読み取ります。存在しない変数はundefinedです。たとえば??演算子を使って、常にデフォルト値を用意しておきましょう。

JAVASCRIPT
const level = process.env.LOG_LEVEL ?? "info";

console.log("Log level:", level);
このコードをconfig.jsに保存しましょう。変数が定義されていなければ、レベルはinfoになります。
BASH
LOG_LEVEL=debug node config.js
macOSとLinuxでは、コマンドのすぐ前で変数を定義します。するとスクリプトはdebugと表示します。

プログラムが終わるとき、システムに終了コードを返します。物事がどう進んだかを要約する数値です。普遍的な慣習です。0は"成功"を意味し、それ以外の値はエラーを知らせます。他のツールやスクリプトが、すべてうまくいったかを知るために確認するのがこれです。process.exit(1)はコード1でスクリプトを即座に止めます。エラーメッセージにはconsole.errorも使いましょう。これはエラー出力(stderr)、つまり通常の出力とは別のチャンネルに書き出します。すべてを一つの完全なスクリプトにまとめてみましょう。

JAVASCRIPT
const name = process.argv[2];

if (!name) {
  console.error("Usage: node greet.js <name>");
  process.exit(1);
}

console.log(`Hello, ${name}!`);
引数がなければ、greet.jsは使い方を説明してコード1で終了します。名前があれば、あいさつをしてコード0で終わります。

理解度チェック

このレッスンの要点をしっかり覚えているか確認しましょう。

  1. process.argvの中で、ユーザーが打ち込んだ最初の引数はどこにありますか?
    • インデックス0
    • インデックス2
    • インデックス1
    • 常に最後のインデックス
  2. プログラムが正常に終わったことを知らせる終了コードはどれですか?
    • 0
    • 1
    • 200
  3. Nodeスクリプトの中でAPI_KEY環境変数を読み取るにはどうしますか?
    • process.argv.API_KEY
    • env.get("API_KEY")
    • process.env.API_KEY