Menu
CoddyTech

エラーと終了コード

CoddyのNode.jsジャーニー「Node.jsの基礎」セクションの一部。レッスン 5/33。

コマンドが失敗したとき、ターミナルを使っている人はその理由を確認する必要があり、あなたのプログラムを実行したプログラムにも失敗したことを知らせる必要があります。

プログラムには2つの出力ストリームがあります。結果を出力するstdoutと、エラーを出力するstderrです。エラーの出力にはconsole.errorを使います。プログラムが終了すると、終了コードを返します。0は正常に動作したことを意味し、それ以外は失敗したことを意味します。process.exit(1)は、コード1でプログラムをただちに停止します。

// node divide.js 6 0
const [a, b] = process.argv.slice(2).map(Number);
if (b === 0) {
    console.error('Cannot divide by zero');
    process.exit(1);
}
console.log(a / b);

コードの横にあるターミナルにはstderrが赤色で表示され、終了コードが0以外の場合はそのコードも表示されます。

challenge icon

チャレンジ

簡単

誰かがツールを誤った使い方をしたときは、使い方を表示し、失敗したことをターミナルに伝える必要があります。プログラムはエラーストリームであるstderrと終了コードを使ってこれを行います。

  1. notes.jsで、Unknown command:を出力する最後のelse分岐を変更します。エラーはstderrに送るので、console.logの代わりにconsole.errorで出力します。
  2. コマンドが入力されたものの不明な場合は、次の2行をこの順番でstderrに出力します:
    Unknown command: remove
    Usage: node notes.js <command> [words]
    1行目には入力された単語が表示されます。ここではnode notes.js remove 3のremoveです。2行目は常に同じです。<command>と[words]も記載どおりに、正確にコピーしてください。これらはテキストの一部であり、何かを入れる場所ではありません。
  3. node notes.jsの後に何も入力されていない場合は、使い方の行だけをstderrに出力します。Unknown command: undefinedは出力しないでください。
  4. どちらの場合も、終了コード1でプログラムを終了します。これは「失敗した」ことを意味します。
  5. addとlistは以前と同じように動作します。node notes.js add Buy milkは引き続きAdding: Buy milkを出力し、終了コード0で終了します。

試してみましょう:$ node notes.jsの後の入力欄を空にしたまま「実行」を押します。赤字で使い方の行が表示され、ターミナルには終了コード1が表示されます。次にremove 3と入力してEnterを押します。Unknown command: removeと使い方の行が両方とも赤字で表示され、終了コード1になります。次にadd Buy milkと入力します。Adding: Buy milkが通常の色で表示され、終了コードは表示されません。ターミナルでは0が非表示になるためです。

自分で試してみよう

// メモツールはここから始まります。
const [command, ...words] = process.argv.slice(2);
const text = words.join(' ');

if (command === 'add') {
    console.log(`Adding: ${text}`);
} else if (command === 'list') {
    console.log('No notes yet');
} else {
    console.log(`Unknown command: ${command}`);
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Node.jsの基礎のすべてのレッスン

自分で練習してみよう: Expressプレイグラウンド