LINE Notifyをnode.jsで利用する

Node.js

事業開発部の野村です。
もうすぐ入社1ヶ月が経ちます。日々の開発業務に必死についていきつつ、その裏で個人的に気になり調査し実践してみたことを今回ブログに書かせていただきます。

はじめに

ビジネスでのコミュニケーションツールとして、ChatWorkやSlackを使っている方は多いと思います。
一方でプライベートで友人や家族とコミュニケーションを取るときなど、生活の中でLINEを使うシーンもまた多々あると思います。
LINE Notifyをそんな中でうまいこと活用できないかと思い、まずは手元の端末で動作確認するところまでを実施しました。

LINE Notifyとは?

LINEのトークルームへメッセージを送ることができるAPIです。
REST APIなので、http通信可能であればどんな言語でも使用可能です。

事前準備

LINEトークルームのトークン発行

LINE Notify公式サイトからLINEアカウントでログインします。

LINE_Notify_ログイン

ログインしたらマイページへ移動します。

LINE_Notify_マイページリンク

アクセストークンの発行(開発者向け)の「トークンを発行する」ボタンをクリックします。

LINE_Notify_トークンを発行する

LINE_Notify_トークン発行

  • トークン名の記入
  • 通知を送信するトークルーム(自分にのみ通知させたい場合は「1:1でLINE Notifyから通知を受け取る」)

上記2点入力後「発行する」ボタンをクリックするとトークンが発行されます。
このトークンの文字列は開発で使用するため、必ずここで控えておいてください。
!!あとでトークンを確認することが出来ません!!

開発環境(node.js)

今回はタイトルにある通り、node.jsを使って開発します。

ちなみに筆者の場合、今後様々なバージョンのnode.jsを使った開発を想定しているので
anyenv(ndenv)を使用してnode.jsを導入しました。anyenvの導入方法については下記が参考になります。

anyenvを使って*env系をまとめて管理 | Developers.IO

※anyenvを利用したnode.jsインストールコマンド(+バージョン確認)

1
2
3
4
5
6
$ anyenv install ndenv
$ ndenv install v8.6.0
$ node -v
v8.6.0
$ npm -v
5.3.0

実装 + メッセージ送信確認

node.jsライブラリ導入

開発ディレクトリに以下のpackage.jsonファイルを用意します。

1
2
3
4
5
6
7
8
9
10
11
12
{
  "name": "line-notify",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "author": "nomura.keiichi",
  "license": "MIT",
  "dependencies": {
    "axios": "^0.16.2",
    "querystring": "^0.2.0"
  }
}

その後、開発ディレクトリ上で以下ライブラリのインストールコマンドを実行します。

1
$ npm install

上記package.jsonにある通り、以下のライブラリを今回導入しています。

  • axios
    • LINE Notify APIの通信に使用
  • querystring
    • LINE Notify APIのリクエストデータ作るためのクエリ文字列を扱うもの

実装

LINE Notify用のモジュールを以下のように実装します。

line.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
const axios = require('axios');
const querystring = require('querystring');
 
const Line = function () {};
 
/**
 * LINE Notifyのトークンセット
 * @param {String} token LINE Notifyトークン
 */
Line.prototype.setToken = function(token) {
  this.token = token;
};
 
/**
 * LINE Notify実行
 * @param {String} text メッセージ
 */
Line.prototype.notify = function(text) {
  if(this.token == undefined || this.token == null){
    console.error('undefined token.');
    return;
  }
  console.log(`notify message : ${text}`);
  axios(
    {
      method: 'post',
      headers: {
        Authorization: `Bearer ${this.token}`,
        'Content-Type': 'application/x-www-form-urlencoded',
      },
      data: querystring.stringify({
        message: text,
      }),
    }
  )
  .then( function(res) {
    console.log(res.data);
  })
  .catch( function(err) {
    console.error(err);
  });
};
 
module.exports = Line;

あとは、メインとなるプログラムに下記のような感じで
トークンとメッセージを指定して実行することでLINEメッセージを送ることができます。

※下記では、環境変数LINE_TOKENに事前準備で用意したトークンを設定しています。

main.js

1
2
3
4
5
6
7
const Line = require('./line');
const myLine = new Line();
 
// LINE Notify トークンセット
myLine.setToken(process.env.LINE_TOKEN);
// LINE Notify 実行(「こんにちは!」とメッセージを送る)
myLine.notify('こんにちは!');

コマンドラインで下記のように実行して確認します。

1
2
3
$ node main.js
notify message : こんにちは!
{ status: 200, message: 'ok' }

事前準備で指定したトークルームにもメッセージが送られることを確認します。
[<トークン名>]<メッセージ> という形で表示されます。
LINE_Notify_結果

ここまでのソースはGithubにまとめましたので参考にしてください。
https://github.com/K1-Style/line-notify-node

最後に

まずは手元の環境で簡単にLINE Notifyの動作確認を行いました。

個人的にはAWS Lambdaなどサーバーレス環境に置いて、比較的安価で継続的に運用ができるようにしていきたいなぁと考えてます。 例えばGoogleカレンダーの予定を家族や友人の共用トークルームに定期通知したりなど、色々応用ができるかと。

まだまだ試行錯誤しておりますので、その辺りも今後お話ができればと思います!

それでは。

AWS Cloud Roadshow 2017 福岡