21
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OSSのノーコード・ローコード開発ツール「プリザンター」Advent Calendar 2024

Day 7

プリザンターに独自のエンドポイントを追加する

Last updated at Posted at 2024-12-06

本エントリは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の発行」を選択
  • 「+新しいプロファイル」をクリック
  • 公開のターゲットを「フォルダー」として「次へ」

image.png

  • 「フォルダーの場所」を下記の通りに設定し、「完了」をクリックします
    C:\Work\pleasanter-dev\Implem.Pleasanter\Implem.Pleasanter\bin\Debug\net8.0\ExtendedLibraries

image.png

  • 公開プロファイルが作成されたら、「全ての設定を表示」のリンクをクリックしてダイアログを開き「構成」をDebugに変更して「保存」します
    image.png

  • 「発行」 ボタンをクリックし、PleasanterWebHookのモジュール一式を設定したフォルダーに発行します

動作確認

もう一度プリザンターをデバッグ実行し、ブラウザのアドレスバーに {サーバー名}/webhook を入力します。
ブラウザに下記の文字列が表示されれば成功です。
image.png

解説

新しいエンドポイントは、MVCコントローラを実装した.NETクラスライブラリを用意することで追加可能です。下記の手順でクラスライブラリのモジュールを作成します。

.NETクラスライブラリを作成する

まず、C#のプロジェクトをクラスライブラリのテンプレートから作成します。
作成後、プロジェクトファイル(.csproj)を開き、Project SdkMicrosoft.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の「プロセスのアタッチ」機能を使います。

  1. デバッグ用プリザンターをVisual Studioから「デバッグなしで開始(Ctrl + F5)」で実行します
  2. PleasanterWebHook側のVisual Studioで「デバッグ」-「プロセスにアタッチ」をメニューから選択します
  3. プロセスのアタッチダイアログで「iisexpress.exe」を探し、これを選択して「アタッチ」します
    image.png

iisexpress.exeは、プリザンターのデバッグの構成で「IIS Express」を選んだ場合にアタッチするプロセス名です。 Implem.Pleasanter.NetCore`を選択して実行している場合は「Implem.Pleasanter.exe」にアタッチします。

image.png

アタッチ後はPleasanterWebHook側のソースコードにブレークポイントを設定してステップ実行などのデバッグが可能になります。

image.png

次回へ続く

これでプリザンターに新しいエンドポイントを追加するモジュールを開発するための準備が整いました。

次回はもう少し実用的な例として、LINE BotのWebhookを実装してみたいと思います。

21
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?