どうやって動いているか
サーバーはありません。計算しているのは hledger 本体で、いま開いているこのページの中で動いています。帳簿はテキストファイルで、テキストファイルのままです。
hledger を作り直してはいません
プレーンテキスト会計の道具はたいてい、書式を自分で読み直します。帳簿を読んで、こういう意味だろうと決めて、そこから答える。これは違います。hledger 自身が乗っている hledger-lib を WebAssembly にして、画面からの問い合わせをそれに投げています。
だから残高は hledger が出す残高で、出し方も同じです ── 金額を書かなかった仕訳をどう埋めるか、何を通貨とみなすか、二つある日付のどちらで数えるか。普段は誰も考えないけれど、噛まれると痛いところまで同じです。hledger が変われば、追いかけるのではなく追従できます。
帳簿はファイルのままです
仕訳は末尾に足します。すでにある行を書き換えたり、並べ替えたり、整形し直したりしません。手で書いてきた帳簿は書いたままの姿で残りますし、差分には変わった分だけが出ます。
このアプリが知らない記法は、そのまま素通しします ── ディレクティブも、コメントも、対応する画面を持たない書き方も。あなたのファイルですし、ファイルのままです。パソコンで hledger に読ませれば、同じ帳簿です。
hledger が読めないものは残しません
書き込みは必ず、先に hledger へ差し出します。新しいテキストを帳簿としてまるごと読ませ、それが通ったときだけファイルになります。読めない変更は帳簿を一切動かさず、hledger が何行目の何に文句を言ったかを、そのまま伝えます。
ここで書いた仕訳と手で打った仕訳が同じものである理由が、これです。どちらも同じ読み手を通らないと残りません。
作業中、ファイルはどこにあるか
端末の中、ブラウザの保存領域に、帳簿ごとに1つあります。動かすために何かをアップロードすることはありません ── プログラムもファイルもページの中にあるので、電波が一本も立っていなくても使えます。
どこかへ送るのは別の行為です。送り先はあなた自身のリポジトリで、押したときだけ動きます。
金額を浮動小数点で持ちません
金額は整数と桁数で持ちます ── 12.34 なら 1234 と 2 ── そこから書き出します。小数を浮動小数点で足すことは一度もしません。数字の列の末尾に、誰にも説明できない1円が出るのは、あれが原因だからです。
人だけでなくプログラムにも答えます
アプリを開くと、ページの中に `window.choai` が置かれます。画面が使っているのと同じ中身が、スクリプトにも、テストにも、エージェントにも答えます。Web API ではないので、アドレスを叩いても届きません ── 訊きに行くサーバーが無いからです。
できるのは名前の付いた行為だけで、それは画面がやっているのと同じものです。コードを実行させる道も、ファイルを生テキストで書く道も、アプリが持っている鍵やトークンを読み返す道もありません。