「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」を運営しています。
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の制約を超えた、より高度で柔軟なアプリ構築への第一歩となるのです 。

難しく考えなくて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)を入力し、「〇〇さん(〇〇歳)、こんにちは!」という形式の挨拶文を生成する。



基本は自動生成が圧倒的におすすめ!
まずは自動で骨格を作って、細かい調整を手動で行うのが最強の組み合わせだね。
アプローチ2:YAMLコードを直接記述・編集する
もう一つの方法は、DSLの本体であるYAMLコードを直接記述・編集する方法です。
これにより、自動生成では難しい細かな調整や、既存のワークフローの迅速な複製が可能になります。次の章で、その基本的な書き方をマスターしましょう。
【初心者向け】Dify YAMLの基本構文をマスターしよう
ここからは、DifyのYAML(DSL)の具体的な書き方を学んでいきましょう。一見複雑に見えるかもしれませんが、基本的なルールと構造さえ押さえれば、誰でも読み書きできるようになります 。
全体構造:nodes
とvariables
DifyのワークフローYAMLは、主にnodes
とvariables
という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ノードは以下のように記述されます。
inputs
にuser_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
: 入力の種類(string
やnumber
など)required
: この入力が必須かどうか(true
orfalse
)
例えば、ユーザーからの質問を受け付けるquery
という変数は、以下のように定義します 。
# 変数の記述例
variables:
- variable: query
label: 質問
type: string
required: true
このvariable
名が、nodes
セクションで{{#start-1.query#}}
のように参照されるわけです 。
【画面で解説】生成したDSLのエクスポートとインポート手順
このセクションでは、例として「チャットフローを使ってAI社長クローンを作ってみよう!」という、非常にシンプルなワークフローのDSLをエクスポート・インポートしていきます。
まだワークフローを用意していない方は、以下の手順で作成できるので、一緒に操作してみてください。
(すでにご自身のワークフローがある方は、次の「STEP2」に進んでいただいて構いません。)
STEP1(準備):エクスポートするワークフローを用意しよう
Difyで「アプリを作成する」→「最初から作成」を選択し、プロンプト入力画面を開きます。


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


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


これでエクスポートするワークフローの準備が整いました。
STEP2: ワークフローをDSLファイルとしてエクスポートする
まずは、完成したワークフローをPCに保存します。
- エクスポートしたいワークフローの編集画面を開きます。
- 画面の左上のアイコン横にある「調整アイコン」をクリックし、表示されたメニューから「DSLをエクスポート」を選択してください。




【ここにキャプチャ画像を挿入①】
これだけの操作で、~~~.yaml
という名前のDSLファイルが自動的にダウンロードされます。このファイルが、あなたのワークフローの「設計図」そのものです。
STEP3: DSLファイルを新しいアプリにインポートする
次に、先ほど保存したDSLファイルを使って、新しいアプリケーションとして完全に複製してみましょう。
- Difyのダッシュボードに戻り、通常通り「アプリを作成」ボタンをクリックします。
- 「ワークフローから作成」を選択します。
- プロンプトを入力する画面が表示されますが、ここでは入力しません。入力欄の下にある「DSLファイルをアップロード」という青い文字のリンクをクリックします。
- ファイル選択画面が開くので、先ほどダウンロードした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の直感的な操作性と、コード編集の効率性の両方の良いところ取りができます 。



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



まずはこのサンプルをインポートして動かしてみるのが、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の自動生成機能を活用して、革新的なアプリケーション開発の第一歩を踏み出してください。