Upgrade to Pro — share decks privately, control downloads, hide ads and more …

生成AIのODC周辺開発(External Logic)への適用例

Avatar for Junji Watanabe Junji Watanabe
April 25, 2025
140

生成AIのODC周辺開発(External Logic)への適用例

Developer Days Tokyo 2025のMVPセッション。
ODCのローコード部分に使える生成AIとしてはMentorの生成AI機能があるが、周辺的開発(ローコード以外の部分)に生成AIを適用する方法の紹介。ここではExternal Logic(C#)開発を例にする。

Avatar for Junji Watanabe

Junji Watanabe

April 25, 2025
Tweet

Transcript

  1. 生成AIのODC周辺開発 (External Logic)への適用例 Developer Day Tokyo 2025/04/24 OutSystems MVP 渡部

    潤司 : https://qiita.com/jyunji_watanabe : https://twitter.com/JyunjiW : https://www.linkedin.com/in/watanabejyunji/ Qiita X LinkedIn
  2. ODCでのAI利用をざっくり整理すると 1.Appそのものを作る ◦ Mentorの生成AI機能 2.開発をAIで支援する ◦ Mentorの静的解析や、コード補完機能 ◦ 生成AIでODC周辺開発(CSS・JavaScript・C#)を行う、調査を支援してもらう ◦

    生成AIでテストケース・テストデータ作成をしてもらう 3.外部のAIサービスに接続して利用する ◦ MentorのAI Agent Builder ◦ その他様々なベンダーが提供している外部APIにアクセスする ◦ (2025/4/14追加)AIモデル管理する組み込みの機能、およびAI検索サービスへの接続機能 2025/03のOSUGで 説明 [1]
  3. External Logicとは C#のメソッドを、OutSystemsのServer Actionとして利用する • OutSystemsが提供するライブラリを参照して、.NET 8を利用す るClass Libraryを作る •

    ライブラリが提供する属性を付与したメソッドが、OutSystemsの Server Actionになる • 実行時には、Appコンテナのメモリ上ではなく、AWS Lambdaで動 作する(つまり背後ではHTTPSの通信が行われる) [2]
  4. External Logic作成手順 • :定型的な作 業なので手順書 を用意して対応 • :今日のテー マ。この部分のコ ードを生成AIで

    作成してみる 1.Projectを作 成する 2.SDK参照を 追加 3.interfaceを 作成 4.classを作成 5.publish 6.zip化 7.ODC Portal にUpload 8.動作確認 9.Release Library
  5. 1-2 Projectを作り、SDK参照を追加する 定型的なコマンドで実行できるので、必要な部分を書 き換えて実行するか、スクリプト化すれば良い [3] dotnet new sln -o DeveloperDayTokyo2025

    cd DeveloperDayTokyo2025 dotnet new classlib -o DeveloperDayTokyo2025 --framework net8.0 dotnet sln add DeveloperDayTokyo2025/DeveloperDayTokyo2025.csproj cd DeveloperDayTokyo2025 dotnet add package OutSystems.ExternalLibraries.SDK
  6. 次の条件を満たすC#のメソッドを作成してください。 前提 - .NET 8 - OSはLinux - ソリューション及びプロジェクトの作成は不要 -

    NuGetにあるライブラリを使って良い(必要なNuGetライブラリについては、VSCode上でプロジェクトに追加するため のコマンドリストを生成すること) - メソッドはinterfaceで定義し、そのinterfaceを実装する - interfaceとclassは別ファイルで定義する - interfaceには「OSInterface」属性を付与する - interface内のメソッドには「OSAction」属性を付与する - OSInterface及びOSAction属性は別の場所で定義したものを参照するので、定義部分は出力しない 仕様 - Excelの指定セルに値を書き込むメソッド Excelのバイナリファイル、シート位置、セル位置、値を渡し、該当セルに値を書き込んだ結果のExcelバイナリファイルを 返す - Excelの指定セルから値を読み込むメソッド Excelのバイナリファイル、シート位置、セル位置を渡し、該当セルから値を読み、文字列として返す。
  7. 3-4 コード作成 (3)プロンプト入力2回目 • 今度はNuGetのClosedXMLを利用するコードが出 力された • ClosedXML 0.104.2がインストールされた [4]

    • NuGetの該当パッケージページを見ると、MITライセ ンスなので、これを使うことにする dotnet add package ClosedXML
  8. 3-4 コード作成 (3)プロンプト入力2回目 • 出力されたinterfaceファイル using System; // OSInterface属性を付与 [OSInterface]

    public interface IExcelService { // OSAction属性を付与 [OSAction] byte[] WriteCell(byte[] excelFile, string sheetName, string cellAddress, string value); [OSAction] string ReadCell(byte[] excelFile, string sheetName, string cellAddress); } External Logicが要求する 属性が付与されている ActionのI/Fにマッピングさ れるメソッドのシグネチャに も問題なさそう
  9. • 出力されたClassファイルのメソッド部分 1/2 public byte[] WriteCell(byte[] excelFile, string sheetName, string

    cellAddress, string value) { using (var memoryStream = new MemoryStream(excelFile)) using (var workbook = new XLWorkbook(memoryStream)) { var worksheet = workbook.Worksheet(sheetName); if (worksheet == null) { throw new ArgumentException($"Sheet '{sheetName}' not found."); } worksheet.Cell(cellAddress).Value = value; using (var outputStream = new MemoryStream()) { workbook.SaveAs(outputStream); return outputStream.ToArray(); } } } IDisposableを実装するClass のオブジェクトを作成する処理 をusingで囲んでいる シート取得(取得できなかった 時のエラー処理もある) シートオブジェクトを経由して、 指定したセルアドレスに書き 込み 書き込みが終わったオブジェ クトからExcelファイルのバイ ナリを取得している
  10. • 生成されたClassファイルのメソッド部分 2/2 public string ReadCell(byte[] excelFile, string sheetName, string

    cellAddress) { using (var memoryStream = new MemoryStream(excelFile)) using (var workbook = new XLWorkbook(memoryStream)) { var worksheet = workbook.Worksheet(sheetName); if (worksheet == null) { throw new ArgumentException($"Sheet '{sheetName}' not found."); } var value = worksheet.Cell(cellAddress).GetString(); return value; } }
  11. 5-7 ODCに登録 1. Publish(ターミナルから「dotnet publish -c Release -r linux-x64 --self-contained

    false」を入力) 2. Publishで生成されたファイル群をzip圧縮 3. ODC Portal > External logicページからアップロ ードして作成 o 「Try library in an app」で、テスト用App に参照を追加しておく
  12. まとめ 1. C#スキルがなくてもExternal Logic開発できるか o 可能ではある o スキルが無いと出力されたコードの問題点に気づけなかったり、修正対応ができない可能性がある o 対応する範囲を限定する(シンプルな開発に絞る)、問題発生時には相談できる体制を用意する

    2. そこまでいけないとしても、C#スキルのある人がODC のC#開発を効率的に行えるか o こちらは、問題なしでかなり有用 o 大量のコードを即時出力してくれる o 細かい手順まで提示してくれる(間違っていることはあるので判断力は必要) o 知らないライブラリを使ったコードも即時出力してくれるので、開発のとっかかりにも良い
  13. 1. SpeakerDeck. 「Mentor 生成アプリ の構造解析」. https://speakerdeck.com/junjiwatanabe/mentor-sheng- cheng-apuri-nogou-zao-jie-xi 2. External LogicがAWS

    Lambda上で動作する点については、以下のONE2023の動画で確認できる o ONE Conference 2023. 「‘Level Up’ Your Low-Code Game with New Innovations 19:20あたりのスライ ド」.https://learn.outsystems.com/training/journeys/one-conference-2023-695/-level-up-your-low-code- game-with-new-innovations/odc/3832, (参照2024-04-18) o ONE Conference 2023. 「Extending ODC: the new Integrations capabilities of ODC 28:00あたりの説 明」. https://learn.outsystems.com/training/journeys/one-conference-2023-695/extending-odc-the-new- integrations-capabilities-of-odc-/odc/3821, (参照2024-04-18) 3. Qiita. 「External LogicをVisual Studio Codeで作成する」. https://qiita.com/jyunji_watanabe/items/04ffd0bc25ed4e845661 4. NuGet. 「ClosedXML Version 0.104.2」. https://www.nuget.org/packages/ClosedXML/0.104.2 5. Qiita. 「生成AI(GitHub Copilot)にODC向けの非同期JavaScriptを書かせてみる」. https://qiita.com/jyunji_watanabe/items/1f3e05ab985c85495991