契約書・利用規約でできること
契約書や利用規約は、条に番号を振り、日付と金額で約束を書く文書です。
chaff は、番号、参照、定義、日付、金額がかみ合っているかを機械で確かめます。ジャンルは legal/contract です。プライバシーポリシーも同じジャンルで見ます。
契約書でよく起きる崩れ
契約書は、ひな形を使い回し、条を足したり消したりして作ります。そのとき、数がずれます。
| 崩れ | 例 |
|---|---|
| 期間が逆になる | 去年のひな形の年だけを直し、終わりの日が始まりより前になった |
| 合計が合わない | 内訳の金額を一つ直したのに、合計を直していない |
| 無い条を引く | 「第9条に定める」と書いたが、第9条が無い |
| 番号が飛ぶ | 第4条を消したのに、番号を振り直していない |
| 曜日が合わない | 「2026年12月5日(月)」と書いたが、その日は土曜日 |
| 同じ語を二度定義する | 「本業務」を第1条と第6条で別々に定義している |
どれも、署名の後に見つかると、どちらの数が正しいのかで揉めます。
chaff が見ること、見ないこと
このジャンルでは、次のルールが何も付けなくても動きます。
| ルール | 見つけるもの |
|---|---|
date-range-reversed | 期間の終わりが始まりより前の所 |
total-mismatch | 合計が内訳の和と合わない所。表でも文でも |
dangling-reference | 文書に無い条を指している参照 |
numbering-gap | 条の番号の抜けや重なり |
date-weekday-mismatch | 日付に添えた曜日が、暦と合っていない所。年を書いていない日付は、その前に年まで書いた日付から 5 か月以内になる年として読みます |
duplicate-definition | 同じ語を二度定義している所 |
dangling-figure-reference | 文書に無い図・表・別表を指す所 |
見ないことも決めてあります。
- 契約の中身が妥当か、法律に合っているかは見ません。読んで決めるのは人です。
- 一方に不利な条項かどうかは見ません。
- 二つの定義のどちらが正しいかは決めません。二度目の定義の場所を示すだけです。
- 受け身や、長い漢字の連なりは見ません。契約書ではそれが決まった書き方だからです。
条の番号と参照の見かたは、社内規程・規則でできること と同じです。このページでは、まず日付と金額の食い違いを、次に呼び名、定義した語、期限を見ます。
かけてみる
準備がまだなら、先に準備するを済ませます。次の契約書を keiyaku.md という名前で保存しました。会社の名前は架空です。
# ウェブサイト保守業務委託契約書
株式会社みなと商事(以下「甲」という。)と、合同会社ささき制作(以下「乙」という。)は、次のとおり契約を結ぶ。
## 第1条(目的)
甲は、甲のウェブサイトの保守業務(以下「本業務」という。)を乙に委託し、乙はこれを受託する。
## 第2条(契約期間)
契約期間は、2026年11月1日から2026年10月31日までとする。
## 第3条(委託料)
本業務の委託料は、次のとおりとする。
| 項目 | 金額 |
| --- | --- |
| 月次の更新作業 | 50,000円 |
| サーバーの監視 | 20,000円 |
| 合計 | 80,000円 |
甲は、毎月の委託料を翌月末日までに乙に支払う。支払の方法は、第9条に定める。
## 第5条(報告)
乙は、毎月の作業の内容を、翌月5日までに甲に報告する。初回の報告日は、2026年12月5日(月)とする。
## 第6条(定義)
この契約において「本業務」とは、甲のウェブサイトの更新、監視及び障害の対応をいう。
## 第7条(協議)
この契約に定めのない事項は、甲乙が誠実に協議して決める。
ジャンルを付けずにかけると、chaff は技術記事として見ます。そのとき、勧めるジャンルが出ます。
$ npx chaffjs keiyaku.md --compact
keiyaku.md blog/tech · 日本語 ジャンルは既定から
契約書・規約のようです。--genre legal/contract を試せます
1:18 info 節の長さのばらつきが 22% しかありません(35% 以上ほしい)
section-length-uniformity
3:1 info 段落の長さのばらつきが 29% しかありません(30% 以上ほしい)
paragraph-length-variance
11:7 warning 期間「2026年11月1日から2026年10月31日」の終わりが始まりより前です
date-range-reversed
21:8 error 合計「80,000円」が、内訳の金額の和(70,000円)と合いません
total-mismatch
23:31 error 「第9条」(番地 9)はこの文書にありません
dangling-reference
25:1 error 「第3条」の次が「第5条」です(4 番目のはず)
numbering-gap
27:36 error 「2026年12月5日」は土曜日です(月曜日と書いてあります)
date-weekday-mismatch
31:9 warning 「本業務」は 7 行目でも定義されています
duplicate-definition
指摘 8 件、動いていない rule 59 件
勧められたとおり、--genre legal/contract を付けてかけ直します。
--compact は、1 件を 2 行にまとめて出す印です。
$ npx chaffjs keiyaku.md --genre legal/contract --compact
keiyaku.md legal/contract · 日本語 ジャンルは --genre から
11:7 warning 期間「2026年11月1日から2026年10月31日」の終わりが始まりより前です
date-range-reversed
21:8 error 合計「80,000円」が、内訳の金額の和(70,000円)と合いません
total-mismatch
23:31 error 「第9条」(番地 9)はこの文書にありません
dangling-reference
25:1 error 「第3条」の次が「第5条」です(4 番目のはず)
numbering-gap
27:36 error 「2026年12月5日」は土曜日です(月曜日と書いてあります)
date-weekday-mismatch
31:9 warning 「本業務」は 7 行目でも定義されています
duplicate-definition
指摘 6 件、動いていない rule 98 件
error は、数や参照が食い違っていて、どちらかが必ず間違っている所です。
warning は、直したほうがよい所です。
最初に出る指針
ジャンルを決めると、chaff は結果の最初にそのジャンルの指針を出します。よい契約書が満たすことを、原稿を確かめる問いの形で並べたものです。その下に、このジャンルで特に効く rule の名前が 1 行で出ます。
問いの多くはルールでは確かめられないので、指摘より先に読みます。 AI に書き直させるときも、AI は同じ指針に沿って書きます(AI にジャンルの指針を渡す)。
$ npx chaffjs keiyaku.md --genre legal/contract
指針: 契約書・規約(legal/contract)
下の指摘より先に、原稿がこれを満たしているかを確かめてください。
- 当事者の呼び方(甲・乙、定義した名前)を、最後まで同じ形で使っているか
- 定義語を一度だけ定め、定義どおりの形で使っているか
- 義務ごとに、誰が・何を・いつまでにするかが読み取れるか
- 金額・日付・期間・条番号の参照が、条項どうしと別表とで一致しているか
- 解除・損害賠償・準拠法・紛争の解決を定めた条項があるか
このジャンルで特に効く rule: dangling-figure-reference, dangling-reference, date-range-reversed, date-weekday-mismatch, defined-name-repeated, defined-term-form, duplicate-definition, numbering-gap, obligation-without-deadline, party-order, party-role-name, requirement-smell, toki-as-condition, total-mismatch, undefined-term, vague-deadline
chaff.yaml の guide: で書き換えられます。出さないときは --no-guide。
════════════════════════════════════════════════════════════
keiyaku.md legal/contract · 日本語 ジャンルは --genre から
…
パスや内容から推測したジャンルと、既定のジャンルでは、指針を出しません。違う種類の文書の指針は、かえって読み手を迷わせるためです。
--compact と --no-guide でも出しません。指針の文は、チームが chaff.yaml の guide: で書き換えられます(ジャンルの指針を変える)。
指摘の意味と直しかた
| 行 | 指摘 | 意味 | 直しかた |
|---|---|---|---|
| 11 | date-range-reversed | 終わりの日が、始まりの日より前です | 「2027年10月31日まで」のように、終わりの年を直します |
| 21 | total-mismatch | 50,000円と 20,000円を足すと 70,000円です | 合計を直すか、抜けた項目を足します |
| 23 | dangling-reference | 第9条がありません | 支払の方法を書いた条を足すか、参照を正しい条に直します |
| 25 | numbering-gap | 第3条の次が第5条です | 番号を振り直します。参照している条の番号も一緒に直します |
| 27 | date-weekday-mismatch | 2026年12月5日は土曜日です | 曜日を直すか、日付を月曜日に直します |
| 31 | duplicate-definition | 「本業務」を第1条と第6条で定義しています | 定義を一つにまとめます。中身が違うなら、どちらが正しいかを当事者で決めます |
番号を振り直すと、第5条が第4条になり、第9条の参照も変わります。直したら、もう一度かけて、参照が合っているかを確かめます。
呼び名、定義した語、期限
契約書は、当事者と語に一度だけ呼び名を決め、あとはその名前で書きます。ほかのひな形から写した条は、そのひな形の呼び名を連れてきます。期限の書き方も変わりがちです。次のルールが、呼び名と期限を確かめます。
| ルール | 見つけるもの |
|---|---|
party-role-name | 契約が決めていない役割の呼び名で当事者を指す所(甲と乙の契約に出てくる「受託者」) |
defined-name-repeated | 短い呼び名を決めたあとに、当事者の正式な名前をまた書いた所 |
defined-term-form | 定義した語を別の形で書いた所(「本業務」と定義したのに「本件業務」) |
undefined-term | 「本業務」のように定義した語と同じ形の「本成果物」を、定義しないまま使っている所 |
vague-deadline | ほかの期限を日数で書いている契約で、「速やかに」「遅滞なく」とだけ書いた所 |
obligation-without-deadline | ほかの義務に期限を書いている契約で、支払う・引き渡す・返還する・通知する義務に期限を書いていない所 |
duration-mismatch | 始まりの日と期間を足しても、隣に書いた終わりの日にならない所 |
reference-title-mismatch | 条を、その見出しと違う名前で指している所 |
次の契約書を kyodaku.md という名前で保存しました。会社の名前は架空です。
# ソフトウェア使用許諾契約書
株式会社みなと工房(以下「甲」という。)と、株式会社かもめ分析(以下「乙」という。)は、次のとおり契約を結ぶ。
## 第1条(許諾)
甲は、乙に対し、甲の分析ソフトウェアの保守(以下「本業務」という。)を行い、その使用を許諾する。
## 第2条(料金)
乙は、本業務の料金を、請求書を受け取った日から30日以内に支払う。受託者は、請求書を電子メールで送る。
## 第3条(保守)
株式会社みなと工房は、問い合わせを受けた日から2営業日以内に回答する。
本件業務で見つかった不具合は、速やかに直す。
## 第4条(期間)
この契約の期間は、2027年4月1日から2029年3月31日までの12か月とする。
## 第5条(解約)
甲及び乙は、第2条(通知)の定めにより、60日前までに書面で通知して、この契約を解約できる。
$ npx chaffjs kyodaku.md --genre legal/contract --compact
kyodaku.md legal/contract · 日本語 ジャンルは --genre から
11:34 info 「受託者」は、この契約が当事者に定めた呼び名(甲、乙)ではありません
party-role-name
15:1 info 「株式会社みなと工房」は 3 行目で「甲」と呼ぶと定めた名前です
defined-name-repeated
16:1 info 「本業務」は 7 行目で定義した語ですが、ここは「本件業務」と書いています
defined-term-form
16:16 info 「速やかに」では期限が決まりません。何日以内かを数で書くと、守ったかどうかを決められます
vague-deadline
20:21 warning 2027年4月1日から12か月なら、終わりは2028年3月31日ごろのはずですが、2029年3月31日と書かれています
duration-mismatch
24:11 info 第2条に「通知」と添えていますが、第2条の見出しは「料金」です
reference-title-mismatch
指摘 6 件、動いていない rule 98 件
| 行 | 指摘 | 直しかた |
|---|---|---|
| 11 | party-role-name | 「甲」と書きます。ほかの人が請求書を送るなら、先にその人を定義します |
| 15 | defined-name-repeated | 「甲」と書きます |
| 16 | defined-term-form | 「本業務」と書きます |
| 16 | vague-deadline | 「報告を受けた日から10営業日以内に」のように、起点と日数で書きます |
| 20 | duration-mismatch | 期間と終わりの日のどちらが正しいかを決め、もう一方を直します |
| 24 | reference-title-mismatch | 通知の定めがある条を指します。無ければ、その条を足します |
多くは info です。呼び名の付け方は書き手が決めることなので、ほかと違う所だけを示します。
duration-mismatch は warning です。期間と二つの日付が、すべて正しいことはありえないからです。
意味を読む検査は無い
このジャンルでは、npx chaffjs test で AI に送る箇所はありません。
npx chaffjs test keiyaku.md --genre legal/contract --dry-run で確かめると、送る箇所は 0 箇所と出ます。契約の中身を読んで決めることは、人がします。
chaff.yaml の始め方
契約書を置くフォルダに、次の chaff.yaml を置きます。
genre: legal/contract
language: ja
genre を書くと、毎回 --genre を付けなくて済みます。上と同じ指摘が、npx chaffjs keiyaku.md --compact だけで出ます。句読点の「、」と「,」の混ざり(kutoten-consistency)と、全角と半角の英数字の混ざり(fullwidth-alnum-consistency)も、既定で見ます。ひな形を貼り合わせて作る文書で、よく混ざるためです。この契約書には混ざりが無いので、指摘は出ていません。
次に読むページ
- 一箇所だけ黙らせる方法と、ルールをゆるめる方法は、社内規程・規則でできること にあります。
- ルールごとの説明は、リファレンス にあります。
- ほかの種類は、文書の種類ごとにできること に戻って選びます。