日本語 · English

Kairos

English 日本語(ドキュメントは日本語が正・spec/reference/stdlib は英語フルミラーあり〈旧暦のみ日本語〉)

Kairos は、汎用スケジューラのためのスケジュール定義言語である。連続時間軸という基底(Chronos)から、 発報すべき意味ある時点(kairos)の集合を紡ぐ。

premise JP { calendar-system: Gregorian; calendar: TSE; tz: "Asia/Tokyo"; wkst: Mon }

@JP
monthEnd |> roll(Preceding, on: bizDay) |> shift(-3, unit: bizDay)   # 毎月末の 3 営業日前

cron や iCalendar RRULE は「月末 N 日前(暦日)」までは書けるが、「第 N 営業日」を式の中で簡潔に書けるものは 無い。既存言語の本質的な限界は機能不足ではなく、式が一枚岩で合成できないこと——Kairos は「導いた日を基準に さらに別の定義を作る」閉包性を中核に据える(全式は時間ストリーム → 時間ストリーム)。祝日カスケードの導出・ 会計暦・旧暦・二十四節気・干支まで、同じ演算子族の合成で書ける。

二層構造: premise 層がカレンダーを定義(内包)し、評価は一方向。本体層がスケジュールを紡ぎ、出力の時間ストリームはさらに次の定義へ流せる(閉包)。

何ができて何ができないか——cron・Quartz・RRULE・営業日カレンダー付き製品との比較表は spec §1.2。実装系(発報層)との分業の全体像(消費ループ・決定性・missed-fire)は spec §7.8、「前回完了から N 営業日後」のような実行起点相対の正しい書き方 (分解の仕方)は spec §7.7。発報層が満たすべき契約(再評価・at-least-once と冪等キー・ 運用信号の配線)は spec 付録 A 発報層プロファイル。

合成が要である理由: cron は固定パターンまで・RRULE は繰り返し規則まで。Kairos は式が合成でき、結果は常にストリームとして次の定義へ流せる(閉包)。

ステータス: 1.0(2026-09-14 宣言・追補 28〈2026-10-19〉まで反映)。意味論・演算子族・文法(EBNF)・字句は確定、命名も 全語確定(最後の仮称 shiftBoundary は rephase に裁定済み=2026-07-26)。表現力は既知スケジュール 20 要素のサンプル 検証と、リファレンス実装での実行検証(国立天文台 暦要項の実データ照合を含む・827 テスト)で実証済み。

構成

ディレクトリ 内容
spec/ 言語仕様(レビュー可能なスナップショット。まずここ)
recipes/ レシピ——cron/Quartz/RRULE で「書けない」とされてきた要求の実用形(1 要求 1 ページ・Playground リンクつき)
reference/ 記述語リファレンス(演算子・窓生成語ごとの解説。例は実装で実行検証)
stdlib/ 標準 premise の解説(Gregorian・Fiscal・ISOWeek・Kyureki——透明な標準ライブラリ。例は実行検証)
impl/ リファレンス実装(TypeScript・実行時依存ゼロ。プロトタイプ)
mcp/(日本語) MCP サーバ kairos-lang-mcp——MCP クライアントから評価(list/next)・検証・リファレンス参照。tz は必須(英語)
design/ 設計記録(ADR-01〜53・ドメインモデル・構文ドラフト・表現力検証〈「書けないスケジュール」の博物誌 含む〉・綻びログ)
MAINTENANCE.md 保守の手引き——年 1 回の祝日表の更新・鮮度の検査・CI が赤のときの見分け・公開の仕組み(方針は design/75-stewardship.md)

設計の履歴を遡るときは design/INDEX.md から。

Kairos 言語検定の教材(3 級 読解・2 級 作文・1 級 運用意味論の教本と、実装で実行検証したサンプル問題)は 別サイト exam.kairos-lang.org。

クイックスタート(リファレンス実装)

まずブラウザで試す: Playground はリファレンス実装を そのまま実行する——インストール不要・式はブラウザの外に出ない。

npm から入れる(Node.js 20+・実行時依存ゼロ):

npm i -g kairos-lang                             # 入れずに試すなら: npx kairos-lang --version
kairos list impl/examples/payday.kairos --from 2026-01-01 --to 2027-01-01
kairos next -n 3 --json impl/examples/payday.kairos   # 今日から次の 3 発火(機械可読)

(impl/examples/ はこのリポジトリにある。npm パッケージに入るのは CLI と stdlib。下のブロックは開発用に TypeScript を そのまま実行する形)

Node.js 24+ で TypeScript をそのまま実行できる。

cd impl
npm install          # devDependencies(typescript / vitest)のみ
npm test             # 仕様の代表例・実データ照合・doctest(reference/ と stdlib/ の実行例)

node src/cli.ts list examples/payday.kairos      --from 2026-01-01 --to 2027-01-01
node src/cli.ts list examples/jp-holidays.kairos --from 2026-01-01 --to 2027-01-01
node src/cli.ts list examples/rokuyo.kairos      --from 2026-01-01 --to 2027-01-01
node src/cli.ts next -n 3 examples/payday.kairos   # 今日から次の 3 発火(--json で機械可読)

jp-holidays.kairos は法定祝日の表だけから、振替休日(2026-05-06)と国民の休日(2026-09-22)を言語の式で 導出する例。rokuyo.kairos は旧暦(NAOJ 暦要項の朔データで月を切る)から大安などの六曜を導出する例。

設計の背骨

エラーはこう見える(直し方は括弧の中)

診断は「語: 何が悪いか(直し方。根拠の所在)」の三部構成です。末尾の参照(I3・ADR-38・§3.3)は仕様書の番号で、そのまま引けます。 参照実装 1.0.5 の実物を 3 本:

CLI はメッセージを印字して終了コード 1 で止まり、結果は出しません。誤った日付が出ることはなく、出るのはエラーです。

限界(しないこと)

ライセンス

Apache-2.0(帰属表示は NOTICE)。