人が読むページ
chobo doc は、帳簿を、経理や運用の人が読むページにします。業務を知っている人が、帳簿を自分の知っていることと照らし合わせるためのページでもあります。何が載るかは、下の「ページに載るもの」にまとめています。ページに手で書いたところはありません。帳簿そのものと、検査が見つけたことと、参照インタプリタが返した結果でできています。
$ chobo doc examples/refunds/refunds.ja.book --lang ja --out pages
$ chobo doc examples/refunds/refunds.ja.book --format html --lang ja --out pages
$ chobo doc examples/refunds/refunds.book --format html --out pages
ページは、英語か、--lang ja を付ければ日本語で、Markdown か一枚の HTML として書きます。--out を付けなければ標準出力に、付ければそのディレクトリに、帳簿のファイルの名前で書きます(refunds.ja.md、refunds.ja.html)。だから、英語の版と日本語の版のページを、同じディレクトリに並べて置けます。
四つの例を描いたページ
下のページは、例の日本語の版を chobo doc --format html --lang ja で描いた、いまの出力です。
| 例 | ページ | 進めてみるシナリオ |
|---|---|---|
| 注文のために 30 分押さえる在庫 | 在庫の引当 | 一つの SKU の最後の一つを、二つの注文が同時に押さえようとする |
| 仮押さえで付与し、別の仮押さえで使うポイント | ポイント | 会員のポイントを上限まで増やす |
| 売上を超えない返金 | 返金 | 売上の最後の分を、二つの返金が取り合う(そのシナリオ) |
| 売上を店の取り分と手数料に分けるマーケットプレイス | マーケットプレイス | 2 つ目の移動で拒否され、何も動かない返金 |
英語のサイトには、英語の版を描いたページがあります。
ページに載るもの
- 見出し:帳簿の名前、バージョン、説明と、ページの読み方です。読み方として、残高は入った量から出た量を引いたものであること、境界を破る振替はその境界の名前で拒否されて何も動かないこと、振替にはすぐに動かすものと先に押さえるものがあることを書きます。
- 勘定:勘定ごとに一行で、何で分かれるか、単位、境界と拒否するときの理由、説明を載せます。外の勘定は、そうと分かるように書きます。
- 勘定のあいだの流れ:図です。四角が勘定で、単位と境界が入ります。矢印は振替の移動で、先に押さえる振替なら破線になります。外の勘定は角の丸い四角です。移動が二つある振替は、矢印ごとに額の名前が付きます。
- 振替ごと:移動(二つ以上あれば番号を付け、全部通るか一つも通らないかを書きます)、キーと、引数の違う二度目の呼び出しが受け取るもの、仮押さえの終わり方です。先に押さえる振替には、仮押さえのライフサイクルの図と、状態ごとに
postとvoidが返すものの表が付きます。そのあとに、操作ごとの拒否されうる理由と、それがいつ起きるかの表が続きます。畳んだところを開くと、理由ごとに、そこに至る操作の列と、拒否された移動のときの残高が出ます。 - シナリオ:
chobo scenariosが作るシナリオの全部です。ステップごとに、確定した量と、括弧の中に仮押さえの量を載せます。呼び出し元が同時に来るシナリオは、とりうる結果ごとに一つずつ載ります。 - 検査の警告:帳簿に警告があれば、
chobo checkの出力のとおりに載ります。
ページに載るのは帳簿で、データベースではありません。TigerBeetle に足す勘定やチェーン、PostgreSQL と MySQL の系統のテーブルは載りません。そうしたものはデータベースを動かす人のためのもので、chobo run --show と出力先(英語)にあります。
Markdown
Markdown のページは、図を Mermaid で描きます。GitHub はプルリクエストや issue や README の中で Mermaid を描くので、帳簿を変えるプルリクエストに、そのページを付けられます。返金の例の横にある日本語のページ (examples/refunds/doc.ja.md)の図は、次のとおりです。
flowchart LR
a0["返金できる残り(注文)<br>円<br>0 以上(返金超過)"]
a1(["売上<br>円・外の勘定"])
a2(["返金済み<br>円・外の勘定"])
a1 -->|"売上計上"| a0
a0 -.->|"返金"| a2
仮押さえのライフサイクルは状態遷移図にし、シナリオは名前ごとに畳んで、ステップごとの残高の表にします。どの例にも、リポジトリの中の帳簿の横に、そのページ doc.md と日本語の版 doc.ja.md を置いています。
一枚の HTML
--format html は、ほかに何も要らない一枚のページを書きます。図は chobo が自分で描き、ページはスクリプトもフォントも画像も取りに行かないので、ネットワークの無いところでも開けます。
- シナリオを選んで、ボタンか矢印キーで、またはステップを押して、一つずつ進めます。下の表に、そのステップのあとの残高と仮押さえが出て、変わったところが光ります。
- 図も一緒に動きます。 そのステップが呼んだ振替が図の上で光り、通ったものは緑、拒否されたものは赤になります。
- リンクで、見ていた場所を開けます。 シナリオ、ステップ、結果がアドレスに入る(
#scenario=19&step=2&outcome=2)ので、ページへのリンクで、話題にしたいステップを開けます。
ページには明るい配色と暗い配色があり、読む人のシステムの設定に従います。幅の狭い画面では、表と図とコードがそれぞれの枠の中で横にスクロールし、ページ全体が横にはみ出すことはありません。