Alternative Architecture DOJO

オルターブースのクラウドネイティブ特化型ブログです。

YARPとVisual Studio開発トンネルでC#以外のLINEボットのローカルデバッグ環境を作る

こんにちは、MLBお兄さんこと松村です。
前回の記事で Visual Studio 2022 の Web API 開発に効果的な機能を紹介しました。

aadojo.alterbooth.com

記事で紹介したうちの一つに、ローカルデバッグ中の Web アプリケーションの一時的または永続的な URL を発行できる Visual Studio 開発トンネル機能を紹介しました。

Visual Studio 開発トンネル機能は、当然 Visual Studio のなかで利用するものであるため、基本的には C# アプリケーションにおいて利用するものです。
しかし YARP と組み合わせることで、 C# 以外のアプリケーションでも開発環境としての URL を生成することができます。

YARP

YARP とは Yet Another Reverse Proxy の頭文字をとった、.NET で実装された高速なリバースプロキシのライブラリです。

github.com

devblogs.microsoft.com

devblogs.microsoft.com

全体の構成

要するに、Visual Studio 開発トンネルで発行した URL に対するリクエストを、 YARP を用いてローカルアプリケーションに転送するという流れです。

LINE ボットの準備

LINE ボットは今回はなんでもいいので、チュートリアルで公開されているものを使います。
ソースコードのリポジトリも載せておきます。

developers.line.biz

github.com

このアプリケーションをローカルで実行しておきます。

git clone https://github.com/tsubakimoto/linebot-sample-nodejs
cd linebot-sample-nodejs
npm install
DEBUG=express:* LINE_ACCESS_TOKEN={your-line-channel-access-token} node index.js

YARP の構成

ローカルの LINE ボットでは localhost で公開しているだけなので、LINE からの Webhook を受け取ることはできません。

そこで次は YARP を構成します。
YARP の構成方法はとてもシンプルで、ほとんどドキュメントの手順で良いです。

microsoft.github.io

ドキュメントの手順でプロジェクトを作成し、 appsettings.json に設定する転送先の URL をローカルの LINE ボット環境 (http://localhost:3000/) に向けてあげます。

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ReverseProxy": {
    "Routes": {
      "route1" : {
        "ClusterId": "cluster1",
        "Match": {
          "Path": "{**catch-all}"
        }
      }
    },
    "Clusters": {
      "cluster1": {
        "Destinations": {
          "destination1": {
            "Address": "http://localhost:3000/"
          }
        }
      }
    }
  }
}

こちらもソースコードを置いておきます。

github.com

開発トンネルの構成

YARP のプロジェクトを Visual Studio 2022 で開き、開発トンネルを作成します。
トンネルの種類は一時的でも永続的でもどちらでも良いです。ただし LINE 側の設定変更の手間を減らすなら、永続的が良いでしょう。
また、アクセス制御は公開用を選択します。公開用以外はアクセス時に認証を挟むので、LNIE ボットでは適切ではありません。

learn.microsoft.com

LINE Messaging API の設定

最後に LINE Messaging API の Webhook URL を設定します。
設定する URL は、ローカル環境にリバースプロキシをする YARP を開発トンネルで公開した URL となります。

これで準備は完了です。 LINE ボットへメッセージを送信した際の Webhook が、開発トンネルと YARP を経由して、ローカル環境へと到達しました。
もしろんローカル環境から適切にレスポンスを送信することで、LINE メッセージを送信することができます。


今回は LINE を例にしましたが、インターネットにあるべきエンドポイントをローカルに振り向けるときには同じ方法が使えると思いますので、ぜひ試してみてください。