日本語 · 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

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

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

構成

ディレクトリ 内容
spec/ 言語仕様(レビュー可能なスナップショット。まずここ)
reference/ 記述語リファレンス(演算子・窓生成語ごとの解説。例は実装で実行検証)
stdlib/ 標準 premise の解説(GregorianFiscalISOWeekKyureki——透明な標準ライブラリ。例は実行検証)
impl/ リファレンス実装(TypeScript・実行時依存ゼロ。プロトタイプ)
design/ 設計記録(ADR-01〜47・ドメインモデル・構文ドラフト・表現力検証・綻びログ)

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

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

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

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

node src/cli.ts examples/payday.kairos      --from 2026-01-01 --to 2027-01-01
node src/cli.ts examples/jp-holidays.kairos --from 2026-01-01 --to 2027-01-01
node src/cli.ts examples/rokuyo.kairos      --from 2026-01-01 --to 2027-01-01

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

設計の背骨

ライセンス

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