LINE Messaging APIノード更新2024年版: 設定ノードが追加されました #linedc #noderedjp

こんばんわ n0bisukeです。

LINE Messaging APIのノードを作ってますが、色々アップデートをしたので記録しておきます。
**目玉機能の設定ノード追加** が大きいです。`v0.4.0`にしました。

https://flows.nodered.org/node/node-red-contrib-line-messaging-api

- 設定ノードの追加
- テキストメッセージv2への対応
- 各種ノードの追加 getProfile / getBotInfo / Loading
- 細かな部分の改修

他にも今回はアップデート箇所が多いです。
（年に一度アドカレにあわせて更新をするようなペースになっている気もします。）

## 1. 設定ノードの追加（lineConfig）

設定ノードの追加が一番大きいです。

今までLINE Botのチャンネルアクセストークンやシークレットの情報は各ノードに直打ちしてましたが、これだと複数のBOTの管理や複数ノードで同じBOTを利用したい場合にコピペを毎回しないとダメでした。

一度登録しておくと裏側の設定ノード

> ![スクリーンショット 2024-12-29 23.49.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/cc263df4-0c49-b46a-e091-9124227db832.png)

設定画面

> ![スクリーンショット 2024-12-29 23.51.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/994e0ac9-11bd-1fb8-1927-c226428cd563.png)

### 設定ノード利用時の注意: 表側の実行ノードと裏側の設定ノードは別物

設定ノードは通常のノード（表側に見えるノード）とは異なり、 **裏側にいるノード** という認識を持っておくと良いと思います。

> ![スクリーンショット 2024-12-29 23.56.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/5ea7545b-f704-19be-b6ba-969a59ac3022.png)

表側の実行ノードと裏側の設定ノードは別物なので**表側の実行ノードを消しても裏側の設定ノードは残る**ということを覚えておきましょう。

右上のメニューの`設定ノード`から現在存在する設定ノードを確認できます。

> ![](https://i.gyazo.com/132695726681422fa5498d0acca97cad.gif)

実行ノード側で設定を追加すると設定ノードは複製されていきますが、独自ノードをアンインストールするときにこの設定ノードが残ってしまっていてエディタ上は綺麗にしているのにノードがまだ使われていてアンインストールできないといったゾンビプロセスのせいでシャットダウンできない みたいな状態が発生する可能性があります。（僕は体験しました苦笑）

## 2. テキストメッセージv2への対応

Messaging APIのテキストメッセージv2に対応させました。これは @youtoy さんが僕がまとめるより早く解説してくれたので引用します笑

https://qiita.com/youtoy/items/71ebc6d29e8fbb7c80d4#line-messaging-api%E3%81%AE%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8v2%E9%96%A2%E9%80%A3%E3%81%AE%E6%9B%B4%E6%96%B0

グループでのユーザーへのメンションなどが使えるようになっています。

## 3. 各種ノードの追加 

> ![スクリーンショット 2024-12-29 23.46.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/2b0e83e7-79dc-4bc5-8c26-644fa4138daf.png)

- ユーザーの情報取得
- BOTの情報取得
- ローディングアニメーション

のAPIに対応させました。

ローディングアニメーション以外は今更感ありますね。ローディングアニメーションは今年の機能なので割とナウい感じ。

https://qiita.com/n0bisuke/items/b50bc835d99c3116a5b1

ローディングアニメーションは仕様上グループでは利用できず、BOTとユーザーの個別会話でのみ利用できるので注意しましょう。

## 4. 細かな部分の改修

内部的なものですが少し改修しています。

### type="text/x-red"をやめてみた （これ弊害ある？）

Node-REDのUIを作る時に`type="text/x-red"`というMIMEタイプを利用していましたが`type="text/html"`にしてみました。

https://github.com/node-red/node-red-nodes/blob/master/parsers/base64/70-base64.html#L2

公式のリポジトリにあるノードのUIをみたら普通に`type="text/html"`を使ってます。

Node-RED的なお作法だと思ってそうしてたんですけど、開発時にシンタックスハイライトが効いてくれないんですよね。地味に見ずらいしここだけのために設定するのもちょっと...って感じでした。

> type="text/x-red" だとハイライトされない
> ![スクリーンショット 2024-12-26 21.57.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/04a0e544-14b9-3959-2c4e-c906c0fca33d.png)

> type="text/html"だとハイライトされる 😃
> ![スクリーンショット 2024-12-26 21.59.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/338c7e5c-a052-5518-74db-17890e48ec3d.png)

## node-red:common.label.name

UI作る時のここのフィールド名について、今までは"Name"など直打ちしてました。

> ![スクリーンショット 2024-12-26 22.10.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/528dcc3e-b431-828e-ee9a-b6c9f9c2845e.png)

```html
<label for="node-input-name">Name</label>
```

内部で使えて定義されている変数があるみたいですね。

```html
<label for="node-input-name"><span data-i18n="node-red:common.label.name"></span></label>
```

このように指定すると勝手に多言語化してくれるみたい（ドキュメント読んでない）です。

`node-red:common.label.name`指定で日本語だと"名前"って表示になりました。

> ![スクリーンショット 2024-12-26 22.13.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/53467c27-0f1b-3de4-c584-59a572b513a7.png)

これ便利。。

### 設定ノード追加に伴いPushやReplyなどのノードにも機能追加

当たり前ですが、設定ノードをPushやReplyなどの各種ノードで使えるようにしないといけないので機能が追加されています。

> ![スクリーンショット 2024-12-30 0.13.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/417e4c51-7525-b831-1039-fc86f94576a8.png)

ただ後方互換性もあったほうがいいので、`(AccessToken)`という感じでカッコ書きで直接アクセストークンを設定できるようにもしておきました。

この辺りバグがないか少し不安

## まとめ

たぶん使いやすくなったと思いますがやれることが多いと複雑になるという側面もあるので悩ましいです。

LINE Bot開発をしている人、ぜひ使ってみてコメントやissueなどくれると嬉しいです。

良いお年を〜