Kairos — 言語概要
Kairos は汎用スケジューラのためのスケジュール定義言語。連続時間軸という基底(Chronos)から、発報すべき 意味ある時点(kairos)の集合を紡ぐ——名はこの営みに由来する。本書はその設計ドキュメント群の概要。全体は 次の構成で管理する。
spec/— レビュー可能な言語仕様(設計記録から議論を畳んで再構成した通読用の章立て)stdlib/— 標準 premise(Gregorian 等)の解説。spec が例として引用する中身の網羅資料00-overview.md(本書)— 目的・スコープ・既存方式との関係・設計の背骨10-domain-model.md— premise 定義・ドメインモデル・不変条件(現在形で上書きされ続ける層)20-adr/— 設計判断記録(ADR)。一本一ファイル。確定後は不変、増える一方30-syntax/— 構文の作業中ドラフト(設計を進める層。区切りで spec/ に反映)90-open-questions.md— 宿題・保留事項INDEX.md— 読む順序と ADR 一覧(設計記録の索引)
1. 目的
一般的なスケジューラでは定義が困難な「月末 N 日前」「第 N 営業日」といった指定を、他の一般的な定義と同様に 簡潔に書ける言語を設計する。言語はスケジュール(日時の列)の生成に特化し、その列=発報すべき時点の集合を 出力する。列を解釈して実際に発報・登録・実行するのは実装系の責務であり、言語のスコープ外とする(§2)。
2. スコープ
含めるもの:
- スケジュール定義の表現(言語そのもの)
- 定義からの日時列(時間ストリーム)の生成
- 営業日・暦・窓・ロール規約の表現
含めないもの:
- 発報・タスクの実行・管理(列を解釈しての起動、リトライ、状態追跡など)。言語は発報すべき時点の集合(外延)を 定義するところまでで、その列を解釈して発報するのは実装系の責務(Chronos 上の実行であり言語 Kairos の外)
- カレンダーデータの真正性の保証(祝日・組織休日データの正しさの判定。差し込む器は用意する。ADR-15)
- 実行起点に相対な窓(「前回完了から 5 時間」など、過去の実行結果に依存するもの。ADR-10・I7)。
但し書き(2026-07-11): スコープ外なのは実行状態への束縛(式の出力が入力に戻るフィード
バック)だけで、注入された時点からの次回計算は射程内——「与えられた 1 点から 3 営業日後」は
純関数として現行語彙で書ける(「ある時点」=単一要素のテーブルリテラル・t の注入はデータ供給と
同じ器=
source:/asof:・再評価ループは発報層の責務)。説明の正本は spec §7.7・実行検証は40-examples/07 - 複数の物理時間軸の相対論的調停(地球時と火星固有時のズレ等。基底の単一性を守るため。ADR-19・I1)
3. 既存方式との関係
独立・標準化された「スケジュール定義言語」は事実上 iCalendar の RRULE(RFC 5545)のみで、他は各スケジューラに 埋め込まれた cron 系方言である。いずれも「月末 N 日前(暦日)」までは表現できるが、「第 N 営業日(祝日考慮)」を 式の中で簡潔に書けるものは存在しない。営業日対応はエンタープライズ製品でも、言語ではなく「営業日カレンダー」 オブジェクトと「非営業日はスキップ/翌営業日へずらす」フラグの二層構造で外付け的に解決されている。 方式別の比較表(○△✗・できないことの受け皿込み)は spec §1.2 に整備した(2026-07-11)。本言語は この穴を中心に据える。
既存言語がこの穴を埋められなかった本質は、機能不足ではなく式が一枚岩で合成できない点にある。cron も RRULE も 「導いた日を基準にさらに別の定義を作る」閉包性を持たない。本言語はこの閉包性を中核に据える(ADR-04)。
4. 設計の背骨
基底(TZ 非依存の単一絶対時間軸、固定。TZ は市民座標への premise 相対の写像=ADR-33)/その上の窓分割としての暦法(自由・差し替え可能、グレゴリオもその一つ)/
窓は網羅パーティションと区間列の二種/粒度は表示射影・幅は演算子の規約引数/全式は時間ストリーム → 時間ストリーム
(閉包)/演算子は生成・点変換・結合・フィルタ・窓・選択・ストライド/生成子は暦法純粋でカレンダー依存は後段
(roll/shift/filter)/roll と shift は同じ点変換族で各段が premise を自足/合成の各ホップで錨解決とロール規約を
明示必須/ロール規約は軸非依存(Following・Preceding・上位窓を引数に取る Modified)/空は正当な値・出自は評価
註釈・判定は外部/意味は premise(解釈が立つ先行条件=暦法・軸・カレンダー・ロール・粒度・TZ・asof の総称)に
相対的で、premise は既定 → 評価文脈 → ブロック宣言 → 段引数の入れ子スコープから最内優先で供給され、危険な
premise の未解決は静的エラー(省略の統治)/名前もまた premise 相対に解決され、一意なら裸・曖昧なら上位存在で
修飾・未解決はエラー/言語は premise 層と本体層の二層(DDL/DML 対応、語彙共有・型分離)/本体層は core 族と糖衣の
二層(糖衣は core への展開で消せる片方向依存)/記号は三役に一対一(|> 段連結・. premise 修飾・| ストリーム
和)/発報・タスクの実行と管理、カレンダーデータの真正性、実行起点に相対な窓、相対論的調停はスコープ外。