メインコンテンツへスキップ

宣言的な Excel 変換のための標準

Execute Excel.
Deterministically.

Jinja が HTML をテンプレートとして実行可能にしたように、xl3 は Excel ワークブックをテンプレートとして実行可能にします — 単一のライブラリではなく、オープンな標準として。データとともにテンプレートを実行すれば、毎回同じワークブックが得られます。

Fast
Deterministic
Portable
Spec-first

仕組み

Excel がテンプレートで、xl3 がそれを実行する。

ビジネスユーザーは Excel でレイアウトを編集し、アプリケーションはデータと入力値を供給し、xl3 はワークブックを決定的に実行します。三つのステージをクリックして、一つのレポートが元データから完成した出力まで進む様子をたどってください。

data.xlsx元データから始めます。
data.xlsx生のオペレーターデータ
ABCDEFG
1AccountRegionRenewalOwner
2Acme LogisticsSeoul18400Mina
3Beta WorksBusan7200Joon
4
5
6
7
8
Raw

アプリケーションが xl3 にデータテーブル — .xlsx シートまたは言語中立な JSON ソース — と実行ごとの入力値を渡します。レイアウトに関するものはコードに存在しません。

なぜ Excel がテンプレートなのか

レポートのレイアウトを使い捨てのスクリプトに埋め込むのをやめる。

ExcelJS、SheetJS、openpyxl、Apache POI はスプレッドシートの DOM API です。強力ですが冗長です。レポートのレイアウト、スタイル、結合セル、ループがコードに入ると、列の追加、小計の移動、ヘッダーの書式変更といったあらゆるデザイン変更がデプロイになります。

xl3 は繰り返される契約を Excel の中へ戻します。ワークブックはすでにビューであり、XTL がそれを実行可能にします。アプリケーションはデータを供給してエンジンを実行するだけです。テンプレートはごく普通の .xlsx なので — マクロもベンダークラウドもなく — 差分を取り、プルリクエストでレビューし、xl3 を聞いたことのない人にも渡せます。

責任に基づく自動化

文書変更をデプロイの待ち行列から外す。

ほとんどの Excel 自動化ツールは開発者を速くします。xl3 が目指すのは別の成果です — かつて開発者が必要だった文書変更を、オペレーター自身が引き受けられるようにすることです。取引先ごとに独自のフォーマットが必要なとき、開発者一人がそれを一つずつ実装し、変更のたびに直し続けるのはボトルネックになります。

xl3 は、数か月にわたり運用された社内サービスの中で形づくられました。その間、非開発者が Excel で直接テンプレートと変換ルールを保守し、開発者はほぼランタイムに専念しました。重要だったのは単なるコード量の削減ではなく、そもそも開発者がやらなければならない作業の量でした。

開発者

ランタイムを所有します: エンジンの挙動、検証、連携、デプロイ、信頼性。

runtime

オペレーター

テンプレートを所有します: レイアウト、列、繰り返しルール、出力形式、文書固有のロジック — Excel で直接編集します。

template.xlsx

ビジネス

繰り返される文書変更のたびにリリースを待つことなく、完成したワークブックを使います。

result.xlsx

xl3 は開発者を置き換えようとするものではありません。開発者がランタイムを、オペレーターがテンプレートを所有し、文書自動化は開発者だけの仕事ではなく組織の能力になります。

ライブラリではなく、オープンな標準

仕様、適合性スイート、そしてリファレンス実装。

xl3 は、三つの部分からなる実装非依存のオープンな標準として定義されています。XTL の表面は意図的に小さく保たれ、テンプレートは人が読みやすく、AI が下書きしやすいままです。

仕様 (xl3 + XTL)

規範的な定義: xl3 のワークブック形式と、その小さな組み込み式言語である XTL。関数は、ワークブックの作成前に値を確定しておく必要がある場合にのみ XTL に存在します (ADR-0043)。

spec/

適合性スイート

あらゆる実装が実行して適合を証明する、言語中立なフィクスチャ。特定の実装ではなく、このコーパスこそが移植が満たすべき契約です。

conformance/

リファレンス実装

@xl3-lang/xl3(TypeScript)はブラウザと Node で動作します。有用ですが規範ではなく — Rust/WASM と Python への移植が進行中です。

@xl3-lang/xl3

XTL 0.1 は 75 ADRs160 conformance fixtures を備え、Stage 2 ですべてグリーンです。TypeScript のリファレンス実装は @xl3-lang/xl3 で公開されており — 移植ガイド が契約を文書化しているため、別言語への移植でも同じ挙動を再現できます。

比較

同じ課題、異なる形。

アプローチ得意なことトレードオフ
xl3宣言的な Excel テンプレートの実行。ワークブックはすでに存在し、xl3 がデータでそれを実行します。アルファ版、メンテナー一人、XTL の表面は意図的に小さく保たれ、1.0 まで進化を続けます。
Workbook APIs (ExcelJS, SheetJS, openpyxl, POI)アプリケーションコードからの低レベルまたはフル機能のワークブック生成。レイアウト、スタイル、結合、ループ、業務ルールがコードになります。非開発者はテンプレートを安全に編集できません。
Python / VBA scripts既存のスプレッドシートに近い、素早い単発の自動化。ルールがコードや担当者一人の記憶の中にあり、レイアウト変更には依然としてコード修正が必要です。
Power Query / Office ScriptsExcel エコシステム内での Microsoft 365 ワークフローとデータ整形。テナントに依存し、ワークフローのルールがワークブックと一緒に移動しません。
Template engines (JXLS, xltpl, jsreport xlsx)スプレッドシート風テンプレートからのサーバーサイドのレポート生成。有用な先行事例ですが、多くは単一のランタイムに結び付いており、小さく可搬な Excel ルールフォーマットとしては位置づけられていません。
Doc-gen SaaS (Plumsail, Conga, Formstack)マネージドな文書ワークフロー、連携、承認、配信。ルールがベンダーのサービスに存在し、自分でレビューして実行できる可搬なワークブックテンプレートではありません。
Direct LLM → xlsx手早い探索的なドラフト作成、単発のチャート。反復運用のための決定的な変換契約ではなく、実行のたびにスタイルや合計がぶれます。

開発者 API

同じワークフローをそのままプロダクトに組み込む。

リファレンス実装をインストールし、データのバッファでテンプレートを実行します。オペレーターの体験はファイルベースのまま、アプリがデプロイと検証を担います — さらに、ホストに渡す .xlsx がない場合は convertJson() が言語中立な JSON ソースを受け取ります。

terminal
$npm install @xl3-lang/xl3
example.ts
import { convert } from '@xl3-lang/xl3';

const outputs = await convert(templateBuffer, dataBuffer);
// OutputFile[] → formatted .xlsx workbook(s)

クックブック 01 — 5分で始める · 仕様を読む · 移植ガイド