解説
特定の分野や目的に特化して設計された、コンピュータに指示を出すための簡易的なプログラミング言語です。

さらに詳しく解説
ドメイン特化言語(Domain-Specific Language; DSL)は、特定の用途・領域に特化して設計されたプログラミング言語または記述形式です。汎用言語(Python、Javaなど)と対比される概念で、AI関連では設定ファイル・ワークフロー記述・モデル定義などに広く使われています。
汎用言語との対比
| 観点 | 汎用言語 | DSL |
|---|---|---|
| 適用範囲 | 何でも書ける | 特定領域のみ |
| 学習コスト | 高い | 低い(領域者向け) |
| 表現力 | 高い | 限定的 |
| 簡潔さ | 一般的 | 領域では極めて簡潔 |
| 例 | Python、Java | SQL、HTML、YAML |
身近なDSLの例
- SQL:データベース問い合わせ
- HTML / CSS:Webページ記述
- 正規表現:文字列パターン
- Dockerfile:コンテナ定義
- Terraform HCL:インフラ定義
- GraphQL:API問い合わせ
AI/機械学習でのDSL
設定・パイプライン記述
| DSL | 用途 |
|---|---|
| YAML | モデル設定、ワークフロー |
| JSON | API入出力、設定 |
| TOML | 設定ファイル |
モデル定義系
- PromptFlow / LangChain DSL:LLMパイプライン定義
- Hugging Face accelerate config:分散学習設定
- MLflow Recipes:機械学習パイプライン
検索・クエリ系
- Lucene クエリ構文:全文検索
- Elasticsearch DSL:複雑な検索条件
- Cypher:グラフDB検索
内部DSL vs 外部DSL
| 種類 | 概要 | 例 |
|---|---|---|
| 内部DSL | ホスト言語のAPIで疑似的にDSL風に書く | Pythonのpipe演算子等 |
| 外部DSL | 独立した文法を持つ別言語 | SQL、HTML |
メリット
- 領域知識を簡潔に表現できる
- 非エンジニアでも記述可能(業務担当者でも書けるDSLが理想)
- ミスが起きにくい(適用範囲が狭く検証しやすい)
- 自動化・コード生成と相性が良い
留意点
- 設計の難しさ:良いDSLを作るのは難易度が高い
- エコシステム不足:マイナーなDSLは情報・ツールが少ない
- 過度な独自化:標準形式を捨てると保守性が下がる
- 学習コスト:汎用言語に詳しい人ほど違和感を持つことも
AI実務でのDSLの位置付け
生成AI時代では、自然言語が一種の"究極のDSL"になりつつあります。一方で、自動処理の信頼性や再現性を求めるシーンでは、構造化されたDSL(YAMLでのワークフロー定義など)が依然重要です。
DSLは「表現したい領域に最適化された言語」であり、AI開発の各層(学習・推論・運用)で見えない形で活躍しています。
