[NodeJS]依存ライブラリを一切インストールせずにSlackにメッセージを送る一番簡単な方法

今回はタイトル通り余計なライブラリに依存しないでSlackにメッセージを送る一番簡単な方法を書きます。
俺自身がAWSのLabmdaで利用するために、できる限り簡単なコードを模索してこれにたどり着きました。メッセージをSlackに送るだけなのに、依存ライブラリをLambdaでLayerとして登録するとか、もしくは依存ライブラリをソースコードと一緒にLambdaにアップロードするとかするのが果てしなく嫌なのは俺だけではないはず!

とりあえずやってみよう

下記のSnippetを実行すると指定のEndPoint(Webhook URL)にメッセージが送られます。
EndPointは「 https://slack.com/services/new/incoming-webhook 」から取得できます。

const https = require ('https');
// ここは各々EndPointに書き換えてください
const endPoint = "https://hooks.slack.com/services/...";

function sendMessage(message)  {
  let options = {
    method : 'POST',
    headers : {
      'Content-Type' : 'application/json'
    }
  };
  const request = https.request(endPoint, options);
  request.write( JSON.stringify({text: message}) );
  request.end();
}

// メッセージ入力
sendMessage("Test message");

解説

ライブラリについて

Slackにメッセージを送るのは、要は指定のEndPointにPostとしてJSONの中身にtextを送ることです。RequestBentgotなどRequest関連の素晴らしいライブラリが多数存在しますが、簡単なHttpsのRequest操作ならNodeJSのBuilt-inのライブラリで十分です。
ちなみにRequestはDeprecatedされているので、使わないことにしましょう!どうしてもこの手のライブラリが使いたいなら、今の流行りではgotが良いかな。
https://www.npmtrends.com/bent-vs-fetch-vs-request-vs-request-promise-vs-got

非同期処理について

Slackにメッセージを一方的に送るだけですので、一般的なRequest処理で見られる非同期処理(Async/AwaitもしくはPromise)はしなくても問題ありません。もちろんSlackにメッセージを送った後に何か処理をする必要があるなら、きちんと非同期処理やりましょう。

エラー処理について

上の非同期処理と同じく、Slackにメッセージを一方的に送るだけですので、エラー処理も俺は要らないと思います。しかし、「エラー処理がないと気持ち悪い!」方も確かにいらっしゃるし、その理由も分かります。ですのでエラー処理が必要な場合は下記の参考にしてエラー処理を追加ください。

req.on('error', (e) => {
  console.error(`problem with request: ${e.message}`);
});

Slackに送るメッセージデータ(Payload)の送信時カスタマイズについて

Slackにメッセージを送る時に必須であるので、textのみです。他のChannel、Icon、User NameなどはEndPoint取得時に設定してあるDefaultのを使いますが、メッセージ送信時にカスタマイズすることもできます。必要な方はrequest.write( JSON.stringify({text: message}) );を下記を参考に変えてみてください。

const PAYLOAD = {
  "channel": "...",
  "username": "...",
  "text": "...",
  "icon_url": "..."
 };
 request.write( JSON.stringify(PAYLOAD) );