時間のかかるコマンドの実行結果や処理完了を気軽にLINEに通知したい - LINE Notify


この記事はニフティグループ Advent Calendar 2020 の4日目の記事です。

昨日は@tatsuya-miyamotoさんの「JavaScriptでメンバーをローテーションさせよう!」でした。
こうやってエンジニアが自分の技術を駆使して自動化を推進し、より良い環境になっていくのは素敵ですね!

記事の最後に なんとかなれ! という強いメッセージがあったのを見つけたので なんとかします!

はじめに

当日滑り込みで枠を取ったのでネタを何にしようか悩んだのですが、タイトルの通り日常生活で使えるTipsを紹介します!

みなさんは日常生活において 時間のかかるコマンド を実行する機会はありませんか?
業務で使うようなシステムであれば「Slackなどのチャットツールに実行結果を通知する」など当たり前のように実装されていると思います。
しかし個人の環境ではどうでしょうか?
ちょっとコマンドを実行した時に結果を気軽に受け取りたい」と思ったことはありませんか?
処理に数十分掛かるけどずっとは確認できない…でも実行結果が気になる…」みたいな事ありませんか?

それ「LINE Notify」を使えば無料気軽に実現できます!

時間のかかるコマンド(例)

  • サイズの大きいファイルのコピー (ex. cp ~)
  • サイズの大きいファイルのダウンロード (ex. wget ~)
  • サイズの大きいファイルのFTPアップロード (ex. lftp ~)
  • メディアのエンコード (ex. ffmpeg ~)
  • CI/CDツールの実行結果 (ex. GitHub Actions)
  • などなど

LINE Notifyを使ってみる

それでは早速LINE Notifyを使ってみましょう!

LINE Notifyの準備

まずはLINEに通知するためのトークンの発行をおこないます
1. 普段使っているアカウントで LINE Notify にログイン
2. マイページ にアクセスし「トークンを発行する」をクリック
3. 「トークン名」に任意の名前を設定し、通知の送信先を選択(とりあえず1:1でOK)

4. 発行されたトークンを控える(このタイミングでしか確認できないので注意)

これで準備は終わりです!

LINE Notifyの動作確認

続いて軽く動作確認をしていきましょう。今回はcurlを使ってAPIを叩きます。
以下の{TOKEN}を先程控えたトークンに置き換え実行してみてください

curl -X POST https://notify-api.line.me/api/notify -H 'Authorization: Bearer {TOKEN}' -F 'message=Merry Christmas!!'

いかがでしょうか?以下のようなメッセージが届いていれば動作確認は成功です!

もし以下のようなエラーが返ってきた場合はトークンの確認や、再発行(削除→登録)を試してみてください。

{"status":401,"message":"Invalid access token"}

コマンドの実行結果をLINEに通知する

それでは本題です。
実際に「時間のかかるコマンド」を使って実行結果をLINEに通知してみましょう!
以下では「時間のかかるコマンド」としてsleep 5を使用しているため実行後5秒後に通知が届きます。
必要に応じてこの部分を任意の「時間のかかるコマンド」に変更してください。

失敗・成功に関わらず通知する

sleep 5 ; curl -X POST https://notify-api.line.me/api/notify -H 'Authorization: Bearer {TOKEN}' -F "message=実行結果: $?"

;が左辺の成功失敗問わずに終了次第右辺が実行される事、$?で終了コードを取得できる事を利用する。1

成功時に通知する

sleep 5 && curl -X POST https://notify-api.line.me/api/notify -H 'Authorization: Bearer {TOKEN}' -F 'message=実行結果: 成功'

&&が左辺が成功(終了コード0)の場合にのみ右辺が実行されるのを利用する。

失敗時に通知する

sleep 5 || curl -X POST https://notify-api.line.me/api/notify -H 'Authorization: Bearer {TOKEN}' -F 'message=実行結果: 失敗'

||が左辺が失敗(終了コード0以外)の場合にのみ右辺が実行されるのを利用する。

まとめ

LINEのAPIと聞くとなんだか難しそうな感じもしますが、ただ一方的に通知を受け取るだけであれば無料で簡単に使うことができます!
サービスごとにトークンも発行できるため複数のサービスや目的に応じて利用することもできます。
※ 届くトークルームは共通ですが、頭の[完了お知らせくん]の部分が変わります

私は「ファイルの変換完了通知」や「GitHub Actionsを利用したWordPressのデプロイ完了通知」などをLINE Notifyを使って受け取っています。

LINE NotifyのAPI仕様書を見るとわかりますが、パラメーターを指定してあげることで「画像やスタンプを送る」事や「通知なしでサイレントでメッセージだけ送る」といったことも出来るので、ぜひいろいろ試してみてください!

おわりに

明日は@regurusuuuさんの「GCP で運動不足を解消したかった」です。
運動不足は解消されたのでしょうか??結果は明日の記事でご確認ください!


  1. 今回のサンプルでは簡略化のために終了コードをそのままメッセージに入れて表示していますが、IF文などで処理してあげれば「成功時」「終了時」のメッセージ切り替えが出来るようになります。