本エントリはOSSのノーコード・ローコード開発ツール「プリザンター」 Advent Calendar 2024の7日目の記事です。
独自のエンドポイントを追加する拡張コントローラ
プリザンターには、独自に実装したコントローラ(以降、拡張コントローラと呼びます)をプラグインとして追加する機能があります。
この機能を使うことで例えば、下記のような拡張エンドポイントを追加することが可能になります。
- チャットボットサービスと連携するWebhookのエンドポイント
- 特定のデータを集計し、カスタムレポートを生成するエンドポイント
- 他のシステムやサービスとデータをやり取りするためのエンドポイント
この記事では、拡張コントローラプラグインの開発方法について解説いたします。
前提
- この記事ではWindows PCでの開発、デバッグを想定しています
- Visual Studioがインストールされていること
- .NET8.0のSKDがインストールされていること
MacやLinux と VSCodeでも同様の開発は可能です。ご利用の環境に合わせて適宜読み替えて試してみてください。
事前準備
下記の手順でWindows PCにPleasanterのインストールをしておきます。
サンプルコードで試してみる
サンプルコードの取得
GitHubより下記リポジトリのソースコードをCloneします。
- 独自のエンドポイントを追加するクラスライブラリ
PleasanterWebHook
- デバッグに使用するPleasanterの本体
ここでは、Clone先のローカルフォルダを C:\work\pleasanter-dev
とした場合を前提として進めます。
cd c:\work\pleasanter-dev
git clone https://github.com/Implem/Implem.Pleasanter.git
git clone https://github.com/pleasanter-developer-community/PleasanterWebHook.git
Plesanterのデバッグ実行
-
C:\work\pleasanter-dev\Implem.Pleasanter\Implem.Pleasanter.sln
をVisual Studioで開きます -
プリザンターインストール時の設定に合わせて
App_Data\Parameters\Rds.json
を修正します
{
"Dbms": "PostgreSQL",
"Provider": "Local",
"SaConnectionString": "Server=localhost;Database=postgres;UID=postgres;PWD=SetSaPWD",
"OwnerConnectionString": "Server=localhost;Database=#ServiceName#;UID=#ServiceName#_Owner;PWD=SetAdminsPWD",
"UserConnectionString": "Server=localhost;Database=#ServiceName#;UID=#ServiceName#_User;PWD=SetUsersPWD",
"SqlCommandTimeOut": 0,
"MinimumTime": 3,
"DeadlockRetryCount": 4,
"DeadlockRetryInterval": 1000,
"DisableIndexChangeDetection": true,
"SysLogsSchemaVersion": 1
}
- デバッグ実行してログイン画面が表示されることを確認してください
- 確認出来たら、デバッグ実行を停止します
PleasanterWebHookのビルドと配置
-
C:\work\pleasanter-dev\PleasanterWebHook\PleasanterWebHook.sln
をVisual Studioで開きます - メニューバーから「ビルド」-「PleasanaterWebHookの発行」を選択
- 「+新しいプロファイル」をクリック
- 公開のターゲットを「フォルダー」として「次へ」
- 「フォルダーの場所」を下記の通りに設定し、「完了」をクリックします
C:\Work\pleasanter-dev\Implem.Pleasanter\Implem.Pleasanter\bin\Debug\net8.0\ExtendedLibraries
-
公開プロファイルが作成されたら、「全ての設定を表示」のリンクをクリックしてダイアログを開き「構成」をDebugに変更して「保存」します
-
「発行」 ボタンをクリックし、PleasanterWebHookのモジュール一式を設定したフォルダーに発行します
動作確認
もう一度プリザンターをデバッグ実行し、ブラウザのアドレスバーに {サーバー名}/webhook
を入力します。
ブラウザに下記の文字列が表示されれば成功です。
解説
新しいエンドポイントは、MVCコントローラを実装した.NETクラスライブラリを用意することで追加可能です。下記の手順でクラスライブラリのモジュールを作成します。
.NETクラスライブラリを作成する
まず、C#のプロジェクトをクラスライブラリのテンプレートから作成します。
作成後、プロジェクトファイル(.csproj)を開き、Project Sdk
をMicrosoft.NET.Sdk.Web
に変更します。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<OutputType>Library</OutputType>
</PropertyGroup>
</Project>
ControllerBase
を継承したコントローラクラスを実装する
次にMicrosoft.AspNetCore.Mvc.ControllerBase
を継承したクラスを作成し、そこに追加したいエンドポイントの処理を実装します。
[Route("[controller]")]
[ApiController]
[AllowAnonymous]
public class WebHookController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
return Ok($"{nameof(WebHookController)} is available !");
}
}
上記クラスライブラリをビルドして生成されたモジュール一式を下記場所に配置することで、拡張コントロールとして動作します。
{プリザンターのインストールフォルダ}\ExtendedLibraries
{プリザンターのインストールフォルダ}
はImplem.Pleasanter.dll
などのバイナリファイルが格納されているフォルダを指します。また、ExtendedLibraries
フォルダの下にサブフォルダを作成してその中に配置してもOKです。
- 例:
C:\web\pleasanter\Implem.Pleasanter\ExtendedLibraries\webhook\
デバッグ方法
追加モジュール側のデバッグにはVisual Studioの「プロセスのアタッチ」機能を使います。
- デバッグ用プリザンターをVisual Studioから「デバッグなしで開始(Ctrl + F5)」で実行します
- PleasanterWebHook側のVisual Studioで「デバッグ」-「プロセスにアタッチ」をメニューから選択します
- プロセスのアタッチダイアログで「iisexpress.exe」を探し、これを選択して「アタッチ」します
アタッチ後はPleasanterWebHook側のソースコードにブレークポイントを設定してステップ実行などのデバッグが可能になります。
次回へ続く
これでプリザンターに新しいエンドポイントを追加するモジュールを開発するための準備が整いました。
次回はもう少し実用的な例として、LINE BotのWebhookを実装してみたいと思います。