Dify 三昧:【リリース速報】 Dify v1.16.1 リリース:バグ修正とセキュリティ強化

はじめに

Difyをご利用・ご検討中の皆さん、暑い日が続きますがいかがお過ごしでしょうか?
ディーネットのよろず請負人、深見です。

最近、Dify v1.16.0 が正式リリースされたことをお知らせしました。
この度は v1.16.0 のバグフィックス版となる v1.16.1 がリリースされましたので、その情報をお届けします。
このバージョンは、v1.16.0で発見された複数のバグを修正し、セキュリティを強化する重要なアップデートです。
ワークフロー、RAG、エージェント、ウェブアプリ、APIなど、多岐にわたる領域で重要なバグ修正とセキュリティ強化が行われています。では、詳しく見ていきましょう。


Dify v1.16.1 リリース

✨ 新機能 (New Features)

  • ツールマルチセレクト入力: ワークフローのツールノードが、マルチセレクトドロップダウン入力をサポートするようになりました。これにより、ツールパラメータの設定時に定義済みリストから複数の値を選択できるようになります。これはワークフローの柔軟性を大幅に向上させます。
  • ワークフローノードロケーター: ワークフローの実行ログやエラーメッセージに表示されるnode_idをクリックすると、ワークフローエディタキャンバス内で対応するノードがハイライト表示されるようになりました。デバッグやワークフローの理解が格段に容易になります。
  • ワークフローブロックセレクターの改善: ノードをワークフローに追加する際のブロックセレクターパネルが改善され、キーボードナビゲーション、カテゴリプレビュー、より直感的な検索エクスペリエンスが提供されます。
  • サイドバーからのエージェントDSLエクスポート: エージェントアプリをサイドバーメニューからDSL YAML形式で直接エクスポートできるようになりました。エージェント構成のバックアップやバージョン管理が容易になります。
  • ナレッジトレーシングの強化: ナレッジ/RAGドキュメント処理操作に、より詳細な可観測性トレースが追加されました。これにより、インデックス作成パイプラインの可視性が向上し、問題の特定がしやすくなります。

🐞 バグ修正 (Bug Fixes)

以下は数多くの修正の中から、特に影響の大きいものをピックアップしています。

ワークフローとコラボレーション

  • 非アクティブなタブでコラボレーションリーダーが古いドラフトを保存してしまう問題が修正されました。
  • コラボレーションが接続されない場合に未保存の編集が失われる問題が修正されました。
  • 再接続後に最新のコラボレーションセッションが維持されるようになりました。
  • StrictModeの初期化中に発生する誤ったドラフト保存エラーが修正されました。
  • ワークフローのドラフト保存失敗時に永続的なエラー通知が表示されるようになりました。
  • Celeryタスク完了前にワークフローワーカースレッドの終了を待機するようになり、孤立した実行が防止されます。
  • Loroコラボレーションランタイムが遅延ロードされるようになり、初期バンドルサイズが削減されました。

RAGとナレッジ

  • ドキュメントクリーナーが特定の有効な文字(ï, ¿, ¾)を削除してしまう問題が修正されました。
  • 再帰的なテキスト分割時にスペースが維持されるようになりました。
  • 外部ナレッジ検証プローブで有効なボディが送信されるようになりました。

エージェント

  • エージェントプレビューで新しいプレビュー会話が古いIDを継承しないように修正されました。
  • 会話履歴が更新された際にエージェントチャット入力が置き換わる問題が修正されました。
  • エージェントログでモデル使用量の完全な価格が維持されるようになりました。
  • エージェント実行ログにワークフローノードの実行が表示されるようになりました。
  • エージェントの監視統計にワークフローの実行が含まれるようになりました。
  • 未公開のエージェントがワークフローで使用されるのをブロックするようになりました。

ウェブアプリとUI

  • ウェブアプリのJWT有効期限が誤って設定される問題が修正されました。
  • SafariおよびFirefoxでのTTS再生が修正されました。
  • 埋め込みアプリでクリップボードへの書き込みが失敗する問題が修正されました。
  • タイムアウト後にテキスト生成ウェブアプリが無限ロード状態になる問題が修正されました。
  • チャットがビジョンをサポートしないモデルにドキュメントを渡さないように修正されました。

APIとバックエンド

  • MCPツールのoutput_schemaがオプションであるにもかかわらず必須として扱われる問題が修正されました。
  • VariableTruncatorにおけるlist[File]の配列要素制限とバイト予算が尊重されるようになりました。
  • IDロギングのデッドロックが防止されました。
  • ファイルフィールドがオーディオからテキストへのエンドポイントで欠落している場合に、500エラーではなく400エラーが返されるようになりました。
  • ツールの実行中にtool_metaからtool_provider_typeが欠落する問題が修正されました。

🔒 セキュリティ強化 (Security Enhancements)

  • エージェントローカルサンドボックスの分離: エージェントのローカルサンドボックスが、専用のSquidフォワードプロキシの背後で厳格なACLルールのもとで実行されるようになりました。許可されるのはAPI側の/files/エンドポイントとagent_backend側の/agent-stub/のみで、いずれも短命なアクセストークンで保護されます。これにより、サンドボックスが内部サービスに直接アクセスするのを防ぎ、エージェントサンドボックスでの任意のコード実行による影響範囲が大幅に縮小されます。
  • Dify APIとエージェントバックエンド間のトークン認証: Dify APIとエージェントバックエンド間の通信がDIFY_AGENT_API_TOKEN / AGENT_BACKEND_API_TOKENを介したトークンベース認証を使用するようになり、内部サービス境界が強化されました。
  • Jinja2テンプレートレンダリングのサンドボックス化: Jinja2テンプレートレンダリングがSandboxedEnvironmentを使用するようになり、ワークフローコードノードでのテンプレートインジェクション攻撃が防止されます。
  • React Server Components DoS脆弱性の修正: React Server ComponentsのDoS脆弱性が修正されました。
  • メールバリデーターの改善: メールバリデーターでre.fullmatchを使用し、末尾の改行を拒否することでバイパス攻撃が防止されます。
  • ワークスペース招待時のアカウントステータス検証: ワークスペース招待を受け入れる前にアカウントステータスが検証されるようになりました。

🚀 パフォーマンス (Performance)

  • 軽量な最近のアプリエンドポイント: 新しいGET /console/api/apps/recentエンドポイントにより、ホームページの「作業を続ける」セクションの遅延が約69%削減(3.2倍高速化)され、SQLクエリが19回以上から1回の投影SELECTに削減され、レスポンスサイズが約50%削減されました。
  • Home作成モーダルの遅延ロード: 作成モーダルコードのロードがインタラクション時まで遅延されるようになり、初期JavaScriptバンドルサイズが削減されました。

🛠 改善 (Improvements)

  • エージェントコンポーザーの保存および公開状態の一貫性が向上しました。
  • Difyロゴのテーマ設定が簡素化されました。
  • ワークフローブロックセレクターのUIが改善されました。
  • ウェブアクセシビリティのセマンティクスが改善されました。
  • ワークフローのプレビュー中にノードがドラッグできなくなりました。
  • 統合ツール詳細に非LLM設定が表示されるようになりました。

⚙️ 環境変数の変更 (Environment Variable Changes)

新しい変数

  • DIFY_AGENT_API_TOKEN: APIとagent_backend間の認証に使用される共有ベアラートークンです。本番環境では必ず変更してください。 デフォルト値はdify-agent-run-token-for-dev-onlyで安全ではありません。
  • AGENT_BACKEND_API_TOKEN: agent_backend側の同じトークンです。DIFY_AGENT_API_TOKENと一致させる必要があります。デフォルト値はDIFY_AGENT_API_TOKENと同じくdify-agent-run-token-for-dev-onlyです。
  • PLUGIN_MODEL_PROVIDERS_CACHE_ENABLED(デフォルト: true): プラグインが外部にインストールされており、キャッシュを無効にできない場合にfalseに設定します。

重要: DIFY_AGENT_API_TOKENは、Dify APIとエージェントバックエンド間の安全な通信のために新しく必須となった変数です。デフォルト値は安全ではないため、本番環境では以下のコマンドで生成したセキュアなトークンに置き換える必要があります。

python -c 'import secrets; print(secrets.token_urlsafe(32))'

🐳 Docker Composeの変更 (Docker Compose Changes)

  • エージェントサンドボックスのネットワーク分離: local_sandboxがデフォルトネットワークから専用のagent_sandbox_network + local_sandbox_proxy_networkに移動しました。新しいagent_ssrf_proxyサービス(Squid)が追加されています。
  • ベアラ認証: AGENT_BACKEND_API_TOKEN / DIFY_AGENT_API_TOKENapiworkeragent_backendサービスに渡されるようになりました。
  • Dockerイメージタグが1.16.1に更新されました。

🗃️ データベースマイグレーション (Database Migrations)

このリリースには、以下の4つの新しいマイグレーションが含まれています。

  • 2026_07_15_1600-3c9f8e2a1d7b_add_workflow_run_archive_bundle_cursor_indexes.py: workflow_run_archive_bundlesにインデックスを追加します(PostgreSQLで同時実行可能)。
  • 2026_06_29_1200-b8c9d0e1f2a3_add_step_by_step_tour_state.py: account_step_by_step_tour_statesテーブルを作成します。
  • 2026_07_22_1500-d2825e7b9c10_scope_agent_debug_conversations.py: agent_debug_conversationsdraft_type列を追加し、ユニーク制約を更新します。
  • 2026_07_23_1200-6f5a9c2d8e1b_add_telemetry_fields_to_dify_setups.py: dify_setupsにテレメトリーフィールド(instance_id, install_reported_at, last_heartbeat_at)を追加します。

すべてのマイグレーションは追加のみ(新しいテーブル、列、インデックス)であり、ダウンタイムなしで安全に実行できます。


アップグレード手順 (Upgrade Guide)

Docker Compose (推奨)

  1. DifyのDockerディレクトリに移動します。
    cd docker
  2. 既存のDifyコンテナを停止します。
    docker compose down
  3. 最新の変更をプルします。
    git pull origin main
  4. 最新のDockerイメージをプルします。
    docker compose pull
  5. Difyコンテナを起動します。データベースマイグレーションは起動時に自動的に実行されます。
    docker compose up -d

重要: .envファイル内の新しいDIFY_AGENT_API_TOKEN変数を必ず確認してください。デフォルト値は安全ではないため、本番環境では以下のようにして生成したセキュアなトークンに置き換える必要があります。

python -c 'import secrets; print(secrets.token_urlsafe(32))'

ソースコードからのアップグレード

  1. 最新の変更をプルします。
    git pull origin main
  2. APIディレクトリに移動し、データベースマイグレーションを実行します。
    cd api
    flask db upgrade

Full Change List (重要なものをピックアップ)

「What's Changed」セクションに記載されている内容以外で、特に注目すべき変更点をいくつかピックアップします。これらは開発者や運用者にとって重要な影響を与える可能性があります。

  • refactor(web): use generated dataset card queries by @lyzno1 in #39203: データセットカードクエリに生成されたものを使用するリファクタリング。
  • fix(dataset_service): use flush() instead of commit() to preserve caller transaction by @sergioperezcheco in #39223: データセットサービスで、呼び出し元トランザクションを維持するためにcommit()ではなくflush()を使用するよう修正。
  • fix(api, web): scope trial app file uploads to the app tenant by @linw1995 in #39149: トライアルアプリのファイルアップロードをアプリテナントにスコープするよう修正。
  • feat(web): add webapp access control to agent access point by @GareArc in #39285: エージェントアクセスポイントにウェブアプリのアクセス制御を追加。
  • fix(api): use resource tenant for draft variable files by @linw1995 in #39307: ドラフト変数ファイルにリソーステナントを使用するよう修正。
  • fix(api): keep workflow log archives owner-admin only by @lyzno1 in #39338: ワークフローログアーカイブを所有者管理者のみに保持するよう修正。
  • fix(watercrawl): handle non-json error responses by @luochen211 in #37514: WaterCrawlウェブサイトクローラーが非JSONエラーレスポンスを処理できるよう修正。
  • feat(webapp-access): add WEBAPP_PUBLIC_ACCESS_ENABLED toggle by @GareArc in #38567: WEBAPP_PUBLIC_ACCESS_ENABLEDトグルを追加。
  • fix(api): apply configured timeout to enterprise inner API requests by @GareArc in #39335: エンタープライズ内部APIリクエストに設定されたタイムアウトを適用するよう修正。
  • fix(oauth): reauth after accepting invitation by @linw1995 in #39366: 招待承認後に再認証するよう修正。
  • feat(dataset): add document processing tasks by @hyoban in #39326: ドキュメント処理タスクを追加。
  • fix(web): patch React Server Components DoS by @lyzno1 in #39539: React Server ComponentsのDoS脆弱性を修正。

これらの変更は、Difyの安定性、セキュリティ、機能性に大きく貢献しています。特に、開発者の方はこれらの変更を把握しておくことをお勧めします。


終わりに

以上、Dify v1.16.1 のリリース情報について、技術系ブログ向けに要約し、まとめました。

今回のアップデートは新機能こそ控えめですが、エージェントローカルサンドボックスのネットワーク分離やAPI・エージェントバックエンド間のトークン認証など、本番運用を見据えたセキュリティ強化が中心となっています。特に DIFY_AGENT_API_TOKEN はデフォルト値が安全ではないため、Dify Agent機能を利用中の方は必ず本番用のトークンに置き換えてからアップグレードしてください。

ワークフローコラボレーションやエージェントのプレビュー・保存周りの細かな不具合修正も多く、日々Difyを触っている方ほど「地味だけど効く」アップデートだと感じられるはずです。

次回もDifyの最新情報をお届けしていきますので、引き続き「Dify 三昧」をよろしくお願いいたします。


参考リンク


本記事は Dify v1.16.1 のリリースノートを基に作成されています。最新情報は公式サイトおよび GitHub リポジトリをご確認ください。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA