bashシェルスクリプトでLINE通知関数を作成してみた

bashスクリプトでLINE通知する tech

スクリプトの進捗状況、処理結果をLINEに通知したかった

とある学習コンテンツを消化している中でbashシェルスクリプトを作成しているのですが、yum updateなどの処理が入る関係で、スクリプトが完了するまでに結構な時間がかかります。(10分くらい?)

ずっとPCの前に張り付いているのもイヤなので、スクリプト完了時や何らかの理由で処理がエラーになってしまった場合にスマホへ通知する仕組みを作ってみました。

今回は通知先はLINEモバイルアプリとしています。(LINE NotifyというAPIを利用します)

以下、実装までの手順を記録しておきます。

もちろんLINEではなく、Google ChatやSlackなどでも似たような実装ができますのでご興味のあるかたは調べてみてください。

通知先LINEグループの作成

まずはメッセージ通知先となるLINEグループを作成する必要があります。グループ作成時のポイントは

  • グループ名は任意の名前でよい
  • グループメンバーは、自分自身+他にも通知したいメンバー+LINE Notify

となります。

今回は自習用なので、私以外のアカウントはグループに参加させていません。

LINEグループを作成

LINEグループの作成は以上です。

LINE Notify用アクセストークンの作成

続いてLINE NotifyのAPIを利用するためのアクセストークンを発行します。

LINE Notifyの公式ページへアクセスし、画面右上の [ログイン] から自身のアカウントでログインします

LINE Notifyトップページ
ログイン

ログインできたら、画面右上に自身のアカウント名が表示されるので、クリックして [マイページ] を選択します。

マイページをクリック

画面を少し下にスクロールし、[トークンを発行する] をクリックします。

トークンを発行するをクリック

トークン発行画面が表示されます。

  • トークン名は任意の名称でOK
  • トークルームはさきほど作成したLINEグループを選択
  • 最後に [発行する] をクリック
トークン発行先の設定

↓画面のようにトークンが発行されます。

メモ帳などに控えておきましょう。

発行されたトークン

アクセストークンは重要なセキュリティ識別情報です。他人へ漏れないようにご注意ください。(悪意のある大量のメッセージ送信が可能になってしまいます)

また、画面にも表記がありますが作成したアクセストークンはあとから確認することができませんので、必ず何らかメモ等に残すようにしてください。

LINE Notifyのマイページ画面に、連携先サービスとして登録されたことを確認します。

連携中サービスとして登録されたことを確認

アクセストークンの発行は以上です。

シェルスクリプトの実装

ここまででLINE側の準備が整いましたので、シェルスクリプトを作成します。

コードは下記のとおりです。

#!/bin/bash
LINE_ACCESS_TOKEN="作成したアクセストークンに読み替えてください"
function line_notify() {
  MESSAGE=$1
  curl -X POST -H "Authorization: Bearer ${LINE_ACCESS_TOKEN}" -F "message=$MESSAGE" https://notify-api.line.me/api/notify
}

line_notify "テストメッセージですー"

ポイントは2点だけです。

  • LINE_ACCESS_TOKEN変数に作成したアクセストークンを代入
  • 通知したいメッセージ内容を関数実行時の引数にする

シェルスクリプトを実行し、メッセージ通知が正常に終わるとHTTPステータス200が返ってきます。

$ ./line-notify.sh
{"status":200,"message":"ok"}

さて、ちゃんと通知が来ているかLINEアプリを見てみましょう。

LINE通知を確認

はい、ちゃんとメッセージが届いてますね。よかったよかった。

メッセージ通知は実装がかんたんな割に汎用性が高い技術だと思う

最近はメールでのやりとりよりもLINEやその他チャットアプリでのコミュニケーションのほうが活発になってきている実感があります。

今回実装したスクリプトも事前準備は必要ですがコード自体は数行で済んでしまいますし、システム通常運転時の稼働状況サマリや障害検知、その他デバッグなどいろいろ使える場面がありますので、自分なりに使い勝手よくしたものを1本テンプレとして持っておくといいと思います。

今回は以上です。

それじゃあまたね。

タイトルとURLをコピーしました