44
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Difyの更新競合が怖くて悲観ロック(物理)を取っている件について

Last updated at Posted at 2025-12-08

経緯

ある現場にて、セルフホスティングしたDifyを使ってLLMを利用したワークフローを構築、本番環境として運用するWebアプリケーションからAPI経由で呼び出し、連携しています。

このワークフローは全体としてはこんな感じで、さらに部分部分で別の子ワークフローを呼び出しているという、まぁまぁ巨大なものになっています。

ワークフロー全体図

このワークフローを複数のエンジニアで手分けしつつ編集したい状況が生まれました。

懸念事項

テスト環境のDifyサーバーと本番環境のDifyサーバーはそれぞれ別々に立てており、基本的に本番環境ではなくテスト環境でワークフローを編集、本番環境には同じ修正内容を適用のみ行う運用にしたいところです。これをいかに安全に行うか課題となります。

また、そこを乗り越えたとして、テスト環境でワークフローを編集をするときにも以下のような懸念があります。

  • 間違った編集をしたときどうするか
  • 複数人が同時編集したら排他制御どうなるのか (誰かの編集以外の情報が裏宇宙に消えないか)

特に同時編集については実際手もとの変更が消えたこともあり、安全を期すために以下のような運用手順に至りました。

実際の運用手順

1. DSL をエクスポートしてgitで管理

Difyには、アプリケーション自体にバージョン管理の仕組みが内包されています。

Dify自身のバージョン履歴

作業中のうっかりミスをもとに戻す、というくらいならいいですが、本番環境に反映する断面を適切にコントロールするということも考えると、やはりバージョンコントロールの仕組みを利用したいところです。

Difyでは設定内容をDSLでダウンロード可能なのでこれを利用します。
テスト環境でDifyのDSL(YAML形式)をエクスポート、gitにてコミットして管理しておきます。

まずはgitで管理

親だけでなく、そこから呼び出される子ワークフロー含め、実際に利用するすべてのワークフローを対象にバージョン管理を行います。

2. 作業者はmainブランチ相当のワークフローを複製して編集

テスト環境にて、mainブランチ相当のワークフローを複製してtopicブランチ相当のものを作成、そちらで作業を行いテストします。

topicワークフロー作成

3. OKならmainブランチ相当のワークフローに取り込むためにSlack上で悲観ロック(物理)を取得

そこまで作業してOKならmainブランチ相当のワークフローに取り込みますが、ここで複数人が一緒に作業して思わぬ状態になることを防ぐため念の為Slackで編集を宣言し、他のエンジニアの作業をブロックします。

Slackで宣言して他者の編集をブロック

4. 手作業で同じ内容をmainブランチ相当のワークフローに反映してテスト、OKならDSLコミット

手作業でtopicブランチ相当のワークフローで行った変更をmainブランチ相当のワークフローへ反映します。

topicからmainへの反映作業

無事に終ればmainブランチ相当のワークフローにてDSLをダウンロード、gitにコミットします。

5. 悲観ロック(物理)解放

ロックも解放しましょう。

DONE

7. 本番環境にDSLインポート

最後に本番環境に反映します。

DSLをインポート

もし問題があればgit管理されたDSLを再度テスト環境のmainブランチ相当のワークフローにimportして復元可能です。

感想

同時編集する可能性があるといっても2〜4人くらいですが、ひとまずこれでいい感じに回っていました。
チームによってはテスト環境を使うときにSlackで宣言して他のメンバーに知らせるといったことを行っていますが、それと同じ。

44
5
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
44
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?