🎯

IntentScript - 意図を書くための新しい言語

に公開

IntentScript - 意図を書くための新しい言語

生成 AI 時代の「仕様を書く楽しさ」を再発明する

はじめに:AI によるプログラミングパラダイムの転換

私たちはプログラミングの歴史的転換点に立っています。ChatGPT、Claude、GitHub Copilotなどの生成AIの急速な進化により、「コードを書く」という行為そのものが根本から変わり始めています。

これまでのプログラミングでは、「どのように実装するか」に多くの時間を費やしてきました。しかし、今日のAIは与えられた要件からコードを生成できるようになりつつあります。実装はAIが担うようになりつつあるのです。

このパラダイムシフトで新たに浮上してきた課題が 「AIに意図を正確に伝える方法」です。自然言語では曖昧さが避けられず、意図の不完全な伝達や反復的な修正コストが発生します。

IntentScript: 意図を構造化して伝えるための言語

そこで登場するのが IntentScript ─ 「LLMや人間に対して意図を明確に伝えるための軽量DSL(ドメイン特化言語)」です。

IntentScriptは既存のDSLやルールエンジンとは異なり、形式言語と自然言語の間に存在する「意図表現言語」として設計されています。
AIの解釈能力を前提とすることで、従来必要だった厳格な記述を緩和しつつ、表現力と構造性を両立しています。

従来のプログラミング言語が「どのように実装するか」に焦点を当てるのに対し、IntentScriptは純粋に「何をするか」という意図や目的を記述することに集中します。

IntentScriptの主な特徴

IntentScriptの主な特徴は以下の通りです:

  • YAMLベースの構文 – 一般的なパーサを不要とし、視覚的に構造が明快
  • 型と制約によって意味の明示 – 自然言語の曖昧さを排除
  • チューリング完全性を避け – 意図の構造化に特化
  • 漸進的形式性のレベルを提供 – 状況に応じた表現の柔軟性を実現

漸進的形式性の概念

IntentScriptの革新的な特徴は「漸進的形式性(gradual formality)」です。
これは、「厳密な構造」から「自由な自然言語」までを連続的にサポートするという概念で、以下の3つの表現レベルを提供します。

漸進的形式性の3レベル

これらのレベルは、同じ意図に対して異なる表現方法を提供します。
レベル 0 からレベル 2 に進むにつれて、形式性と厳密さが増していきます。
この柔軟性により、プロジェクトのフェーズや参加者のスキルに合わせて最適な表現レベルを選択できます。

誰が使えるのか? ─ 非エンジニアに開かれた言語

IntentScriptは、プログラマーだけでなく 「ドメイン知識を持つ非エンジニア」(業務担当者、企画者、行政職員など)
も意図を記述できることを重視しています。

従来、こうした非エンジニアは「仕様を書くことはできても、それをコードに変換するのは難しい」という壁がありました。
IntentScriptでは、自然言語に近い構文や漸進的形式性を用いることで、この壁を乗り越える設計がされています。

習得コストゼロ

IntentScriptの最も画期的な特徴の一つは「習得コストゼロ」です。
自然言語(母国語)さえ使えれば、プログラミングの知識がなくてもその日から使い始められます。

従来のプログラミング言語やDSLとは異なり、構文やパラダイムを学ぶ必要がなく、
ドメイン専門家が自らの知識を直接表現でき、AIがそれを解釈・実装するという新しいワークフローを実現します。

環境構築コストゼロ

IntentScript はAIに仕様を伝えるだけで利用できます。
したがってプロンプトに以下のように入力するだけで実行環境が整います

下記のリポジトリから IntentScript の仕様を理解してください。
https://github.com/yosugi/intent-script

このあとに入力する IntentScript に従って、Node.js のコードを生成してください。

プログラミング言語のように複雑な開発環境のセットアップや、ライブラリのインストール、コンパイラの設定などは一切不要です。
AIが仕様を理解した瞬間から、IntentScript で書かれた意図をコードに変換できるようになります。

IntentScript サンプル

たとえば、次のような処理を考えてみましょう:

取り扱っている商品のうち、割引対象のもので「商品名: 割引価格」の形式で一覧を作る

IntentScriptでは、こうしたロジックを直感的に、宣言的に書くことができます。
以下は、割引価格を計算する関数と、それを用いて割引商品の一覧を生成するエンティティの定義例です:

# 商品エンティティの定義
Product:
  name: string         # 商品名
  price: int           # 価格
  discount_rate: float # 割引率(0.0〜1.0)

# 割引価格を計算する関数
apply_discount:
  inputs:
    price: int    # 元の価格
    rate: float   # 割引率
  output: int     # 割引後の価格
  logic: price * (1 - rate)

# セール商品の一覧を生成
SaleItems:
  sale_info: list<string>{
    derive: products                       # 全商品から
            |> filter(_.discount_rate > 0) # 割引対象のみ抽出
            |> map(_.name + ": " + apply_discount(_.price, _.discount_rate) + "円")  # 「商品名: 割引価格」形式に変換
  }

このように、「何をしたいか」だけを記述することで、処理の意図が明確になり、人間にもAIにも理解しやすい構造が自然と生まれます。
計算ロジックやパイプライン処理、フィルタリングの意図が、ほとんど読解なしに伝わる点に注目してください。

IntentScript I/O の取り扱いについて

IntentScriptは「何をするか」の意図を記述することに特化しています。
入力元や出力先(ファイル、標準入力、APIなど)の書き方ついては仕様には含まれません。
ただし、実装時の補足情報として以下のようにコメント形式で併記することは推奨されます:

# 入力: movies は stdin からCSV形式で与えられる
# 入力: user.age はコマンドライン引数 --age で指定される
# 出力: recommended_titles は標準出力にリスト形式で出力される
#(必要に応じて、ファイル出力やAPI応答形式などに置き換えることもできます)

実践

実際に下記のプロンプトを生成 AI (ChatGPT 4o / Claude Sonnet 4 / Gemini 2.5 Pro) に入力しました。

下記は IntentScript のコードです。
これを読み、 echo でテストデータを作成し、
この後の IntentScript に下記にそった結果を出力する
awk のワンライナーを作ってください。

---

# IntentScript の仕様読み込み
include https://github.com/yosugi/intent-script

# 入力: products は標準入力から CSV 形式で与えられる。1 カラム目が商品名、2カラム目が価格、3 カラム目が割引率
# 出力: sale_info は標準出力に1行ずつ出力

# 商品エンティティの定義
Product:
  name: string         # 商品名
  price: int           # 価格
  discount_rate: float # 割引率(0.0〜1.0)

# 割引価格を計算する関数
apply_discount:
  inputs:
    price: int    # 元の価格
    rate: float   # 割引率
  output: int     # 割引後の価格
  logic: price * (1 - rate)

# セール商品の一覧を生成
SaleItems:
  sale_info: list<string>{
    derive: products                       # 全商品から
            |> filter(_.discount_rate > 0) # 割引対象のみ抽出
            |> map(_.name + ": " + apply_discount(_.price, _.discount_rate) + "円")  # 「商品名: 割引価格」形式に変換
  }

すると、下記のコードが出力されました。

出力されたコード(例)

echo -e "りんご,100,0.2\nバナナ,150,0\nみかん,200,0.1" | awk -F',' '{ if ($3 > 0) printf "%s: %d円\n", $1, $2 * (1 - $3) }'

生成されたコードをターミナルで実行することで簡単に試すことができます:

出力例:

りんご: 80円
みかん: 180円

小規模なコードであれば現時点でも実際に動くものを作る事が可能です。
今回の出力では、IntentScriptの関数定義とパイプライン構文が適切に bash のワンライナーに変換されており、
意図が正しく再現されていることが確認できました。

興味深いのが、その後の生成AIとの対話で、実際には仕様を読んでいなかった事です。
にもかかわらず、構文と意図の一貫性によって、AIは正確な処理を導き出しました。
これはIntentScriptの設計が、読まれやすさと意味の明瞭さを高いレベルで実現している証拠と言えるでしょう。

実際のユースケース

IntentScriptは以下のような領域で特に効果を発揮します:

  • フィンテック: 与信スコアロジック
  • 保険・行政: 資格判定ルール
  • セキュリティ: アクセス制御ポリシー記述
  • データ処理: 条件付き集計やスコア計算
  • インフラ: Infrastructure as a Intent

特に、ビジネスルールが頻繁に変更される領域で大きな価値を生み出す可能性があります。

AIとの共進化:生きた言語としてのIntentScript

IntentScriptは単なる「過渡的な言語」ではなく、AIの時代における新しいコミュニケーションパラダイムとして位置づけられます。自然言語と形式言語の間の最適なバランスを探りながら、AIの進化に合わせて共に成長していく「生きた言語」を目指しています。

将来的には、プログラミングの概念そのものが「動くものを作る」から「AIに正確に意図を伝える」行為へと変わっていく可能性があります。IntentScriptはその変革の橋渡し役となることを目指しています。

AIとの共進化サイクル

今後の展望と開発ロードマップ

IntentScriptは現在、バージョン0.0.1の最小仕様として定義されています。
今後は以下のような機能の拡張を視野に入れて開発が進める予定です:

  • エラー処理とバリデーション機構の明文化と標準化
  • 列挙型、依存型、条件付き制約など実務向けの型表現の拡充
  • ジェネリックなエンティティ定義(例:User<T>)による再利用性の向上
  • 名前空間やスコープ管理を含むパッケージ機構の導入
  • テンプレート機能による定義の再利用・パターン化
  • 自然言語コメントとの整合性検証と、曖昧な意図へのAI補完・指摘支援

IntentScriptは、AI時代にふさわしい「意図のための言語」として、構文の強化とツール連携の両面で進化していく予定です。

まとめ

AIの実装能力が高まる今、最も重要になるのは「意図を正確に伝える」スキルです。
IntentScriptはAIと人間の協働を前提とした、意図伝達に特化した新時代の言語です。

プログラミングの歴史の中で、私たちはアセンブリ言語から高級言語へ、そして今、意図記述言語へと進化の過程にあります。
IntentScriptはその最先端に位置する試みです。

公式リポジトリと仕様書

IntentScript の構文仕様はすべて以下の GitHub リポジトリで公開されています。
今後のバージョンアップやツール対応の進捗もこちらで随時更新していきます。

https://github.com/yosugi/intent-script

謝辞

この記事はもちろん、IntentScriptの発想そのものも、生成AIとの対話の中から生まれました。
最初は「AIに意図をうまく伝えられないかな」という漠然とした思いつきが、対話を重ねるうちに一つの言語設計へと育っていきました。

まさにこの記事で述べているような、「人間とAIの共創」を自分自身が体験したのです。
一人では絶対にたどり着けなかったアイデアです。AIに、心から感謝しています。


この記事に対するご意見や、IntentScriptに興味を持たれた方は、ぜひコメントで聞かせてください。
特に、皆さんの業界やプロジェクトでどのような適用可能性があるか、ご意見をいただけると嬉しいです。

Discussion