Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
設計例 (ODC) : EventでUIから重たい処理を切り離す
Search
Junji Watanabe
July 26, 2024
Technology
370
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
設計例 (ODC) : EventでUIから重たい処理を切り離す
OutSystems東京開発者コミュニティ 2024/07/25
Junji Watanabe
July 26, 2024
More Decks by Junji Watanabe
See All by Junji Watanabe
OutSystems CoEチームの技術的サポート
junjiwatanabe
0
200
生成AIのODC周辺開発(External Logic)への適用例
junjiwatanabe
0
330
Mentor 生成アプリの構造解析
junjiwatanabe
0
200
Web Developer Specialist (ODC)
junjiwatanabe
0
490
ODC向けAI Mentor System
junjiwatanabe
0
200
認定資格の取り方
junjiwatanabe
0
980
Other Decks in Technology
See All in Technology
【2026年版】 ベクトル検索䛸 Embedding最前線
mocobeta
5
1.8k
新しいVibe Codingと”自走”について
watany
6
330
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
2k
日本 Fintech 未来予測レポート 2027〜2028年(手動編集版)
8maki
0
2.4k
白金鉱業Meetup_Vol.24_「AIエージェントは分けるほど良い」は本当か? / Is it true that “the more you divide AI agents, the better”?
brainpadpr
1
400
Claude Codeとのおしゃべりでセマンティックモデルの定義からダッシュボード作成まで完成させる
nic_sugiyama
0
120
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
1.2k
機械学習を「社会実装」するということ 2026年夏版 / Social Implementation of Machine Learning June 2026 Version
moepy_stats
6
2.4k
AmazonRoute 53ではじめてのドメイン取得!HTTPS化までの道のりを整理してみた
usanchuu
3
140
【セミナー資料】Claude Code をセキュアに使うための考え方と設定の勘どころ / Claude Code Webinar 20260616
masahirokawahara
2
380
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
3k
ルールやカスタム機能、どう活かす?ハンズオンで体感するIBM Bobの出力コントロール
muehara
1
170
Featured
See All Featured
Balancing Empowerment & Direction
lara
6
1.2k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
860
Mobile First: as difficult as doing things right
swwweet
225
10k
Documentation Writing (for coders)
carmenintech
77
5.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Statistics for Hackers
jakevdp
799
230k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
We Are The Robots
honzajavorek
0
250
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
840
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
230
Transcript
設計例 (ODC) : EventでUI から重たい処理を切り離す OutSystems東京開発者コミュニティ 2024/07/25 OutSystems MVP 渡部
潤司 : https://qiita.com/jyunji_watanabe : https://twitter.com/JyunjiW : https://www.linkedin.com/in/watanabejyunji/ Qiita X LinkedIn
本日の内容 1. ODCのEventとはなにか 2. Eventを使った設計例
1. ODCのEventとはなにか
ODCにおけるEventとは(イメージ) 他App イベントハンドラー (Server Action) 他App イベントハンドラー (Server Action) ②Action
FlowでEvent を発生させる (処理はそのまま継続 ⇨つまり非同期) ①ODC Studioの Eventsタブの下で作成 するプログラミング要素 ③Eventを参照し、発生 時のイベントハンドラー をApp毎に作成できる
ODCにおけるEventとは • App内で何らかの事象が発生したことを示すプログラミング要素(Eventsタブの下にある) • Eventを参照しておくと、そのEventが発生したときに自動で実行されるServer Action (Event Handler 。タイムアウトは2分と短め)を指定できる(これをSubscribeと呼ぶ) •
Subscribeは複数のAppから行える • Eventを発生させるにはTrigger EventをAction Flowに配置 • 重要なのは、 ◦ Eventを発生させる側と、Eventを受け取って動く側を切り離して非同期に処理できる ◦ 他のApp等のEvent Handlerに対してPushで操作を起動できる(なお、試してみた範囲では、起動にかかる時 間はOutSystems 11におけるLight BPTと遜色なく、ほぼ一瞬だった) Light BPTはEntityのCreateに呼応する Actionを書ける機能
Eventの使い所例 • 非同期で発生するイベントを待ち受ける • 小さなバッチ(タイムアウトが2分であることに注意) • Sagaパターン(コレオグラフィー) ◦ Sagaパターンは、複数のサービスにまたがるトランザクションを、ローカルトランザクションのつながりとして実現する ◦
コレオグラフィーは、この複数サービス間のやりとりをMessage Broker経由で行うので、まさにEventはODC上でこ の仕組みを実現するのにうってつけ ◦ Sagaが必要な設計をすると、構築・保守共に大変になりそうなので避けたいところではある • UIから重たい処理を分離し、非同期で処理する 今日は個々の例を見ていきたい
2. Eventを使った設計例
こんなアプリケーションを運用していたとする Excelからレコードを読み取る レコードをループして処理 1レコードあたりおよそ100ms 処理結果を返す Server Action Excelファイル をアップロード Excelファイルには大体200レコード
1レコードあたり100msなので、200 x 100ms ≒ 20秒 余裕を持ってServer Request Timeoutは30秒に設定
実装例 Sleepで「重たい処理」をシミュレート
「最近アップロードに失敗することがある。その場合は繰り返し てもだめなのでファイルを分割して対応している」という問い合 わせ ⇨調べてみると、アップロードされるファイルサイズは拡大傾向 で、今後も増えることが想定される こんな状況になったらどうするか? Server Request Timeoutは上限1分
Eventを使った対応例 Excelからレコードを読み取る レコードをDBに登録しEvent をTrigger 1レコードあたりおよそ100ms 処理状況EntityのIdを返す Server Action1 ①Excelファイ ルをアップロー
ド 処理状況 Entity Excelレコード Entity ②Excelの中身はDBに 登録し、すぐに制御をUI に戻す ③UIでは定期的(5秒と か)で処理状況を確認 Server Action2 ④Subscribeし ているハンドラ ーが起動 ⑤登録され ているデー タを処理
実装例①:事前準備 処理状況 Entity Excelレコード Entity Excelファイル内の各行が1レコードに対 応する Excelファイルのアップロードが行われた ことを通知するEvent イベントハンドラーが処理
対象のレコードを知るた め、参照を持たせておく
実装例 Entityにレコードを登録し、 EventをTriggerしたらす ぐに終わる イベントハンドラー:Entityか らレコードを取り出し、ループ で処理する 適当なところでステータスを 更新してコミットする
もちろん他の修正案もある 1. Eventの代わりにTimerを利用 ◦ 定期実行で複数のアップロードファイルを一括処理でいいとき 2. アップロードしたデータをEntityに登録するまではEvent案と同じだが、登録した結果は画面に 表示し、それを確認したユーザーが別のボタンをクリックすると取り込み処理を起動する ◦ Entityへの登録と、その後のループ処理が同じような処理時間であれば、この方法でもうまくいくかもしれない
3. クライアント側でファイルを分割し、ループ処理する ◦ Excelのまま読むなら、何らかのライブラリが必要になるかもしれない ◦ アップロードするファイルをCSVにできるならもっと楽かもしれない 選択肢を把握して、要件に合わせた方法で 実装するのが大切
以上