DifyのDSL(YAML)とは?AI自動生成からコード編集まで完全解説

「AIアプリを開発したいけど、プログラミングは難しそう…」「もっと直感的で、スピーディにアイデアを形にできないだろうか?」

こんな風に感じていませんか?そのお悩みを解決するのが、Difyの「DSL(Domain Specific Language)」です。
特に、自然言語からアプリの設計図を自動生成する機能は、まさに革命的です。

この記事では、Dify DSLの基本から、AIによる自動生成を使いこなすためのプロンプトのコツ、そして業務を効率化する活用事例まで、誰でも分かるように徹底解説します。
さらに、DSLの正体である「YAML」の具体的な書き方や、GUIの限界を超えるための実践的なテクニックも網羅。

この記事を読めば、あなたのアイデアが、コーディング不要で簡単に、そしてより高度にAIアプリケーションとして動き出します。

この記事の監修者

Tom@0x__tom
代表取締役 CEO

プロフィール

Dify を活用した企業の DX 支援や AI エージェント事業などに取り組む株式会社MYUUUという生成AIスタートアップの代表。生成AIユーザーが1,400名所属し、Difyの最新ユースケースを学び合うコミュニティ「FRACTAL LAB」を運営しています。

出版書籍:お金を使つかわず、AIを働かせる「Dify」活用

目次

Dify DSL(YAML)とは?GUIの裏側にある「設計図」

Dify DSL(Domain Specific Language)とは、Difyアプリケーションの構造や動作を定義するための、YAML形式で書かれた「設計図」のことです。

ユーザーからの指示をAIが理解できる形に変換し、アプリケーションの根幹を担います。

例えば、「ユーザーの名前を受け取って、挨拶を返す」だけのシンプルなアプリも、このDSLファイルによって定義されます。

name: 挨拶アプリ
description: ユーザーに挨拶を返すシンプルなアプリ
inputs:
  - name: 名前
    type: string
    description: ユーザーの名前を入力します
outputs:
  - name: 挨拶文
    type: string
    description: 生成された挨拶メッセージ

このように、アプリの名前、説明、入力、出力を定義するだけで、アプリケーションの骨格が完成します。

では、このDSLの正体は何なのでしょうか?

実は、DifyにおけるDSLは、YAML(ヤムル) という、人間が読み書きしやすいように設計されたデータ形式で書かれています 。
私たちが普段GUIでノードを配置したり、プロンプトを編集したりする操作は、裏側でこのYAML形式のDSLに変換されているのです 。

つまり、GUIはDSLを視覚的に操作するためのインターフェースに過ぎません 。
このYAMLの構造を直接理解し編集できるようになることは、Difyの仕組みを根本から理解し、GUIの制約を超えた、より高度で柔軟なアプリ構築への第一歩となるのです 。

Tom

難しく考えなくてOK!要は「こういう動きをしてね」というAIへの指示書みたいなものだよ。

なぜ今YAML(DSL)で開発するのか?GUIの限界とコード管理3つの革命

Difyの直感的なGUIは非常に優れていますが、本格的な開発を進める上では限界が見えてきます 。

YAMLによるコード管理は、AIアプリ開発に「圧倒的な効率化」「高い再利用性」「確実なバージョン管理」という3つの大きな革命をもたらします 。

GUIでの操作は直感的ですが、似たようなアプリを複数作成する際に、同じ設定を何度も繰り返す手間が発生します 。
しかし、YAMLで設定をコード化すれば、テキストをコピー&ペーストするだけでアプリの複製が完了します 。
さらに、過去のワークフローをテンプレートとして保存し、新しいプロジェクトに即座に流用することも可能です 。

GUIとYAML(DSL)での操作を比較すると、その差は一目瞭然です。

項目GUIでの操作YAML(DSL)での操作
効率性似た設定でも毎回手動でクリックが必要。時間がかかり、ミスも起きやすい。コードを複製・編集するだけ。作業時間を大幅に短縮できる。
再利用性ワークフローの再利用が難しい。部分的なコピーも困難。テンプレートとして保存可能。過去の資産を簡単に流用できる。
バージョン管理変更履歴の追跡が困難。「いつの間にか設定が変わっていた」という事態が起こりうる。Git等で管理可能。変更履歴が明確になり、チーム開発でも安心。
共有スクリーンショットや口頭での説明が必要で、正確性に欠ける。ファイルを共有するだけ。誰でも同じ環境を正確に再現できる。

特に、Gitなどのバージョン管理システムと連携させれば、「いつ」「誰が」「何を」変更したのかを正確に追跡でき、チーム開発での安定運用に繋がります 。

Dify DSL(YAML)の作成方法:2つのアプローチ

DSLファイルの作成には、テキストエディタで直接記述する「手動作成」と、Difyの機能を使ってAIに作らせる「自動生成」の2つの方法があります。

アプローチ1:自然言語で自動生成する(ワークフロージェネレーター)

Difyに搭載されている「ワークフロージェネレーター」を使い、作りたいアプリの内容を自然言語で指示するだけで、AIがDSLファイルを自動で生成してくれる方法です。

メリットデメリット
圧倒的に速く、簡単に作成できる
YAMLの知識がなくても問題ない
記述ミスがなく、正確
複雑なアプリになると作成が非常に煩雑になる

ワークフロージェネレーターの性能を最大限に引き出す鍵は「プロンプト」にあります。より正確なDSLを生成するために、以下の3つのコツを意識しましょう。

「何を入力し、何を処理し、何を出力するか」を具体的に書く

曖昧な指示は、曖昧な結果しか生みません。アプリケーションの目的、入力、出力、そして処理内容をできるだけ詳細に記述しましょう。

  • 悪い例 ❌: ユーザーの誕生日から年齢を計算する
  • 良い例 ✅: ユーザーの生年月日(YYYY-MM-DD形式)を入力として受け取り、現在の年齢を整数で計算して出力するアプリケーション

データ型(タイプ)を明記する

入力や出力のデータが「文字列(string)」なのか、「数値(number)」なのかを明確に指定することで、AIの誤解を防ぎます。

  • プロンプト例: 「レビューの文章(string)と5段階評価の星の数(number)を入力し、評価が3未満の場合に『改善要望』というタグを付けて出力する。」

具体的なフォーマットや例を示す

どのような形式で出力してほしいのか具体例を示すと、期待通りの結果を得やすくなります。

  • プロンプト例: 名前(string)と年齢(number)を入力し、「〇〇さん(〇〇歳)、こんにちは!」という形式の挨拶文を生成する。
Tom

基本は自動生成が圧倒的におすすめ!
まずは自動で骨格を作って、細かい調整を手動で行うのが最強の組み合わせだね。

アプローチ2:YAMLコードを直接記述・編集する

もう一つの方法は、DSLの本体であるYAMLコードを直接記述・編集する方法です。

これにより、自動生成では難しい細かな調整や、既存のワークフローの迅速な複製が可能になります。次の章で、その基本的な書き方をマスターしましょう。

【初心者向け】Dify YAMLの基本構文をマスターしよう

ここからは、DifyのYAML(DSL)の具体的な書き方を学んでいきましょう。一見複雑に見えるかもしれませんが、基本的なルールと構造さえ押さえれば、誰でも読み書きできるようになります 。

全体構造:nodesvariables

DifyのワークフローYAMLは、主にnodesvariablesという2つの主要なキーで構成されます。これらがアプリの骨格を形成します 。

nodes:
  - node_id: start-1
    # ... startノードの詳細設定 ...
  - node_id: llm-1
    # ... LLMノードの詳細設定 ...
  - node_id: answer-1
    # ... Answerノードの詳細設定 ...

variables:
  - variable: query
    # ... ユーザー入力変数の詳細設定 ...
  • nodesセクション: ワークフローを構成する各機能(開始、LLM、回答など)を定義します 。
  • variablesセクション: ユーザーからの入力(質問など)を受け取るための変数を定義します 。

この2つの関係性を理解することが、YAMLを読み解く第一歩です 。

アプリの心臓部「nodes」の書き方

nodesは、ワークフローの一つ一つの処理ブロックを定義する、まさにアプリの心臓部です 。各ノードはリスト形式(ハイフン- で始まる形式)で記述され、それぞれが固有のnode_idを持ちます 。

主要なプロパティは以下の通りです。

  • node_id: ノードを一意に識別するためのID(例: llm-1
  • node_type: ノードの種類(例: llm, start, answer
  • title: GUI上に表示されるノードのタイトル
  • inputs: 他のノードからのデータや変数をどう受け取るかの設定
  • model: (LLMノードの場合)使用する大規模言語モデルの設定

例えば、LLMノードは以下のように記述されます。

inputsuser_input: "{{#start-1.query#}}"と書くことで、startノードのqueryという出力(ユーザーの入力)を、このLLMノードの入力として受け取ることを意味します 。

# LLMノードの記述例
- node_id: llm-1
  node_type: llm
  title: LLM
  inputs:
    user_input: "{{#start-1.query#}}" # startノードからの入力を受け取る
    # ... その他のプロンプト設定など ...
  model:
    provider: openai
    name: gpt-3.5-turbo
    mode: chat

ユーザー入力を受け取る「variables」の定義

variablesセクションは、アプリがユーザーからどのような情報を受け取るかを定義する場所です 。
チャットボットであれば、ユーザーからの質問文がこれにあたります 。

各変数は、以下の主要なプロパティで設定されます。

  • variable: 変数名(コード内で使用)
  • label: GUI上に表示されるラベル名
  • type: 入力の種類(stringnumberなど)
  • required: この入力が必須かどうか(true or false

例えば、ユーザーからの質問を受け付けるqueryという変数は、以下のように定義します 。

# 変数の記述例
variables:
  - variable: query
    label: 質問
    type: string
    required: true

このvariable名が、nodesセクションで{{#start-1.query#}}のように参照されるわけです 。

【画面で解説】生成したDSLのエクスポートとインポート手順

このセクションでは、例として「チャットフローを使ってAI社長クローンを作ってみよう!」という、非常にシンプルなワークフローのDSLをエクスポート・インポートしていきます。

まだワークフローを用意していない方は、以下の手順で作成できるので、一緒に操作してみてください。

(すでにご自身のワークフローがある方は、次の「STEP2」に進んでいただいて構いません。)

STEP1(準備):エクスポートするワークフローを用意しよう

Difyで「アプリを作成する」→「最初から作成」を選択し、プロンプト入力画面を開きます。

「チャットフロー」を選択し、「アプリのアイコンと名前」「説明(随意)」を入力します。

「作成する」で次へ進みます。

以下のチャットフローを構築します。

知識検索ノードを使って、ユーザーの質問に近い情報を事前に登録したナレッジから参照、そのデータを使ってLLMに回答させるフローです。


これでエクスポートするワークフローの準備が整いました。

STEP2: ワークフローをDSLファイルとしてエクスポートする

まずは、完成したワークフローをPCに保存します。

  1. エクスポートしたいワークフローの編集画面を開きます。
  2. 画面の左上のアイコン横にある「調整アイコン」をクリックし、表示されたメニューから「DSLをエクスポート」を選択してください。

【ここにキャプチャ画像を挿入①】

これだけの操作で、~~~.yaml という名前のDSLファイルが自動的にダウンロードされます。このファイルが、あなたのワークフローの「設計図」そのものです。

STEP3: DSLファイルを新しいアプリにインポートする

次に、先ほど保存したDSLファイルを使って、新しいアプリケーションとして完全に複製してみましょう。

  1. Difyのダッシュボードに戻り、通常通り「アプリを作成」ボタンをクリックします。
  2. ワークフローから作成」を選択します。
  3. プロンプトを入力する画面が表示されますが、ここでは入力しません。入力欄の下にある「DSLファイルをアップロード」という青い文字のリンクをクリックします。
  4. ファイル選択画面が開くので、先ほどダウンロードしたYAMLファイルを選択してアップロードします。

たったこれだけの操作で、アプリケーションの複製と共有が可能です。

ただし、インポートしたワークフローを実際に動かす際には、いくつか確認すべき注意点が存在します。

次のセクションで、その重要なポイントと、さらに進んだ活用法を見ていきましょう。

生成されたDSLファイルの活用と注意点

自動生成したDSLファイルは、そのまま使うだけでなく、さらにカスタマイズしたり、複雑な業務に応用したりすることが可能です。

DSLファイルのインポートとテスト実行

生成されたDSLファイルは、Difyのダッシュボードから簡単にインポートできます。

インポート後、テストデータを入力して実行し、期待通りの動作をするか確認しましょう。

もし想定と違う動きをした場合は、DSLファイルを直接編集して修正します。

DSLファイルの編集と改良

生成されたDSLは完璧な出発点ですが、ゴールではありません。

テキストエディタでYAMLファイルを開き、inputsの型を変更したり、descriptionをより分かりやすく書き換えたり、新しい処理ステップを追加したりと、自由に改良できます。

正規表現による入力チェックや、条件分岐を追加するなど、高度なカスタマイズも可能です。

応用例1:定型業務の自動化

毎日作成する日報や、週次の売上レポート集計など、定型的な業務をDSLで定義することで、面倒な作業を自動化できます。

CSVデータを入力とし、集計・分析して結果を出力するワークフローを一度作ってしまえば、あとは実行するだけです。

応用例2:外部APIと連携した複雑なアプリケーション

DSLは、外部のAPIやツールと連携させることも可能です。例えば、以下のような複雑なアプリケーションもDSLで開発できます。

  • 決済API連携: 商品情報を受け取り、決済APIを呼び出して支払い処理を行う。
  • 顧客管理システム連携: 問い合わせ内容を分析し、種別に応じてSlackに通知したり、CRM(顧客管理システム)にチケットを起票したりする。

【重要】DSLインポート後の確認ポイントと注意点

DSLファイルをインポートするだけでワークフローの骨格は完全に再現できますが、そのまま問題なく動作するとは限りません。

インポート後は必ず以下のポイントを確認・修正する習慣をつけましょう。

注意点1:ツール・ノードの有効化を確認する

ワークフロー内でGoogle検索や特定のAPIツールなどを使用している場合、インポート先のDify環境でも同じツールが有効化されている必要があります。

もしツールが不足しているとエラーになるため、事前に確認・追加しておきましょう。

注意点2:LLMやAPIキーを再設定する

ワークフローの「構造」は引き継がれますが、セキュリティ情報(各ツールに設定したAPIキーなど)は引き継がれません。

LLM(大規模言語モデル)ノードやツールノードを開き、使用するモデルの選択やAPIキーの再入力を行ってください。

注意点3:ノードの接続を確認する

基本的には自動で接続されますが、稀にノード間の接続(線)が切れてしまうことがあります。

インポート後は全体を俯瞰し、接続が切れている箇所がないか確認し、もしあれば手動で繋ぎ直しましょう。

おすすめ!GUIとYAMLのハイブリッド開発術

「ゼロからYAMLを書くのはまだ不安…」という方におすすめなのが、GUIとYAMLを組み合わせたハイブリッド開発です 。

まずは、DifyのGUIを使ってドラッグ&ドロップでワークフローの大枠を作成します 。

その後、そのワークフローをYAMLとしてエクスポートします 。
手元にダウンロードしたYAMLファイルを開き、プロンプトの微調整や、変数の追加、ノードの複製などをコード上で直接行います 。

この方法なら、GUIの直感的な操作性と、コード編集の効率性の両方の良いところ取りができます 。

Tom

インポートはゴールじゃなくてスタート!
車で言えば、エンジンをかけて最終チェックをするような大事な作業だよ。
ここを怠ると、いざという時に動かない原因になるからね。

【コピペOK】実践Dify YAML(DSL)サンプルコード集

理論は分かったけれど、実際にどんなDSLを書けば良いのかイメージが湧かない…という方もいるかもしれません。

ここでは、コピー&ペーストしてすぐに使えるシンプルなDSLのサンプルを2つご紹介します。

ぜひご自身のDify環境にインポートして、どのように動作するのか、そしてどのようにカスタマイズできるのかを試してみてください。

サンプル1:自己紹介文 生成アプリ

名前、職業、趣味を入力すると、自然な自己紹介文を生成してくれるワークフローです。LLMの基本的な使い方を理解するのに最適です。

▼このワークフローのDSLコード

name: 自己紹介文 生成アプリ
description: 簡単な情報から自己紹介文を作成します。
inputs:
  - name: name
    type: string
    description: あなたの名前
    required: true
  - name: job
    type: string
    description: あなたの職業
    required: true
  - name: hobby
    type: string
    description: あなたの趣味
    required: true
outputs:
  - name: introduction
    type: string
    description: 生成された自己紹介文
nodes:
  - id: start
    type: start
    config:
      inputs:
        - name: name
        - name: job
        - name: hobby
  - id: llm
    type: llm
    config:
      prompt: "以下の情報を使って、親しみやすい自己紹介文を作成してください。\n\n名前:{{name}}\n職業:{{job}}\n趣味:{{hobby}}"
  - id: end
    type: end
    config:
      outputs:
        - name: introduction
          source: llm.text
edges:
  - source: start
    target: llm
  - source: llm
    target: end

サンプル2:税込み価格 計算アプリ

この記事の中でも例として登場した、商品の単価と数量から税込みの合計金額を計算するワークフローです。

数値計算など、定型的な業務を自動化する際の基本形となります。

▼このワークフローのDSLコード

name: 税込み価格 計算アプリ
description: 商品の単価と数量から税込みの合計金額を計算します。
inputs:
  - name: price
    type: number
    description: 商品の単価
    required: true
  - name: quantity
    type: number
    description: 購入数
    required: true
outputs:
  - name: total_price
    type: number
    description: 税込みの合計金額
nodes:
  - id: start
    type: start
    config:
      inputs:
        - name: price
        - name: quantity
  - id: code
    type: code
    config:
      code: |
        export default async function main({price, quantity}) {
          const totalPrice = price * quantity * 1.1;
          return { total_price: Math.round(totalPrice) };
        }
  - id: end
    type: end
    config:
      outputs:
        - name: total_price
          source: code.total_price
edges:
  - source: start
    target: code
  - source: code
    target: end
Tom

まずはこのサンプルをインポートして動かしてみるのが、Dify DSL理解への一番の近道だよ!
ここから自分なりに改造してみると、もっと楽しくなるはず。

Dify DSLに関するよくある質問(Q&A)

Dify DSLに関するよくある質問をまとめました。

プログラミング知識がなくても、本当にDSLファイルは作れますか?

はい、作れます。

この記事で紹介した「ワークフロージェネレーター」を使えば、作りたいアプリの内容を日本語で入力するだけでAIが自動でDSLファイルを生成します。

YAMLの知識がなくても、直感的にAIアプリ開発を始められます。

自動生成で思った通りのDSLができません。コツはありますか?

プロンプトの具体性が重要です。

「入力・処理・出力」を明確に記述し、データ型や出力フォーマットを指定してみてください。複数のパターンを試して、AIのクセを掴むのも有効です。

YAML形式とは何ですか?難しくないですか?

YAMLは、人間が読み書きしやすいように設計されたデータ形式です。

インデント(字下げ)で構造を表現するのが特徴で、JSONなど他の形式に比べて直感的です。

最初は戸惑うかもしれませんが、Difyで生成されたDSLを参考にすれば、基本的なルールはすぐに理解できます。

生成したDSLファイルはどこで、どのように編集するのですか?

DSLファイル(.yml または .yaml)は、お使いのPCのテキストエディタ(メモ帳、Visual Studio Codeなど)で直接編集できます。

編集後は、Difyのダッシュボードから再度インポートすることで変更が反映されます。

Difyのワークフロージェネレーターは無料で使えますか?

はい、Difyには無料プランがあり、その範囲内でワークフロージェネレーターを試すことができます。

本格的な利用や、より高性能なAIモデルを使用する場合は、有料プランへのアップグレードが必要になることがあります。

まとめ

今回は、Difyアプリケーション開発の心臓部である「Dify DSL」について、その概要からAIによる自動生成の方法、そして実践的な活用術までを解説しました。

  • Dify DSLは、アプリの動作を定義するYAML形式の「設計図」
  • 作成は、AIによる「ワークフロージェネレーター」での自動生成が簡単
  • 自動生成の鍵は、具体的で分かりやすい「プロンプト」にある
  • YAMLを直接編集することで、GUIの限界を超えた効率化、再利用、バージョン管理が可能になる
  • GUIで大枠を作り、YAMLで微調整する「ハイブリッド開発」が効率的

かつては専門知識が必要だったAIアプリケーション開発が、Dify DSLの登場によって、誰もがアイデアを形にできる時代になりました。

この記事を参考に、ぜひあなたもDify DSLの自動生成機能を活用して、革新的なアプリケーション開発の第一歩を踏み出してください。

このコンテンツの投稿者

Tomのアバター Tom 代表取締役 CEO

Dify を活用した企業の DX 支援や AI エージェント事業などに取り組む株式会社MYUUUという生成AIスタートアップの代表。生成AIユーザーが1,400名所属し、Difyの最新ユースケースを学び合うコミュニティ「FRACTAL LAB」を運営しています。書籍『お金を使わず、AIを働かせる「Dify」活用 』の著者。

目次