Work The Dial - 511V41's diary

<–– Back

スクリプトを書くならNode.jsで

ちょっとしたスクリプトを書きたい場合、なにを使うでしょうか。シェルスクリプト?Ruby?ふむふむ、なるほどですね。

でもね、一番はNode.jsなんですよ。Node.jsは最高!

ちょっとしたサンプルを用意しました。

// おまじない
const fs = require("fs").promises;
const exec = require("util").promisify(require("child_process").exec);

// Promiseを扱いたい場合が多いと思うので、このようにasync functionを作ると良いです
const main = async () => {
  // fsでファイルの一覧を取得 Promiseがサポートされているので便利ですね
  const listByFS = await fs.readdir(".");
  console.info("List by fs module", listByFS);
  // コマンドを実行したい場合はおまじないで作ったexecを使います
  const { stdout: rawListByCommand } = await exec("ls");
  const listByCommand = rawListByCommand.split("\n").filter(name => name);
  console.info("List by ls command", listByCommand);
  // 例外などが発生した場合はcatchできます
  throw "Exception can be catched.";
};

main().catch((error) => {
  console.error(error);
});

何をやっているかってことがわかりやすくないですか? 更に、npmの資産を使うことができるのも良いポイントです。

例えば以下の例はaxiosを使ってipifyというIPアドレスを確認するAPIを叩くスクリプトです。

const axios = require("axios");

const main = async () => {
  const response = await axios.get("https://api.ipify.org?format=json");
  console.info(`Your IP address is ${response.data.ip}`);
};

main().catch((error) => {
  // もしインターネットに繋がっていなかったりしてエラーになると呼ばれます
  console.error(error);
});

実行するには単に npm install axios を行っておくだけでOKです。やっぱり何をやっているか理解しやすいと思いますし、簡単ですよね。

以前はコールバック地獄に突入することが多く、開発体験がイマイチという問題があったのですが、async/awaitによって大幅に改善されたこともオススメポイントの1つです。

というわけで、スクリプトを書くならNode.jsでやってください。命令です。

以上