業務報告書でできること

業務報告書は、何が起きて、誰が次に何をするのかを伝える文書です。 chaff は、その伝わり方を邪魔する書き癖を機械で見つけます。ジャンルは business/report です。白書や社内文書も同じジャンルで見ます。

報告書でよく起きること

報告書は、書いた人が責任を避けたいときほど、ぼやけます。

書き癖例
どの文書にも当てはまる書き出し「近年、お客様からの問い合わせはますます多様化しており」
逃げの表現を重ねる「〜という状況であると考えられます」
誰がするのかを書かない受け身「ページを更新することが検討されています」
言い直すだけのまとめ「以上のように〜。今後も引き続き改善に努めてまいります」

読み手は、何が決まったのか、誰に聞けばよいのかが分かりません。

chaff が見ること、見ないこと

このジャンルで見る主なルールは、次のとおりです。

ルール見つけるもの動く条件
padded-introどの文書にも当てはまる書き出しいつも
max-sentence-length長すぎる一文いつも(info)
excessive-hedging逃げの表現の重ねいつも
agentless-passive誰がしたのかが無い受け身chaff.yaml で動かしたとき
empty-conclusion中身の無い結びnpx chaffjs test で AI に読ませたとき

agentless-passive は、人の書いたビジネス文書の多くに出るので、このジャンルでは動かしていません。動かしかたは下にあります。

見ないことも決めてあります。

  • 文章は書き換えません。直すのは書いた人です。
  • 数字が事実と合っているかは見ません。「412 件」が本当に 412 件だったかは、書いた人が確かめます。
  • 結びに中身があるかは、機械だけでは決めません。意味を読まないと決まらないので、AI に回します。

かけてみる

準備がまだなら、先に準備するを済ませます。次の報告書を houkoku.md という名前で保存しました。

# 9月の問い合わせ対応についての報告

## 背景

近年、お客様からの問い合わせはますます多様化しており、私たちサポートチームとしてもその変化にしっかりと対応していくことが求められているという状況であると考えられます。

## 9月の状況

9月の問い合わせは 412 件で、8月の 356 件から増えました。**特に**、請求に関する問い合わせが **大きく** 増えており、その多くは新しい料金プランへの切り替えに伴って、請求書の見方が分からないというものであったため、対応に時間がかかる場面が多く見られました。

一次回答までの時間は平均 6.2 時間で、目標の 4 時間を超えました。

## 対応

請求の問い合わせについて、よくある質問のページを更新することが検討されています。また、担当者の増員についても検討を進めることが必要であると考えられます。

## まとめ

以上のように、9月は問い合わせが増え、一次回答までの時間も目標を超えました。今後も引き続き改善に努めてまいります。

文書を置いたフォルダで、次のコマンドを打ちます。

npx chaffjs houkoku.md --genre business/report    houkoku.md を報告書として見る
$ npx chaffjs houkoku.md --genre business/report

指針: 報告書(business/report)

  下の指摘より先に、原稿がこれを満たしているかを確かめてください。

  - 冒頭で、結論(何が分かったか・何が起きたか)を述べているか
  - 数字に出典と時点があり、合計と割合が合っているか
  - 事実と、意見・推測を書き分けているか
  - 次の行動を、担当と期限つきで書いているか

  このジャンルで特に効く rule: concrete-evidence-density, cushion-phrase-density, empty-conclusion, padded-intro, preamble-length, quote-unnamed-speaker, request-without-deadline, risk-disclosure, unsourced-number
  chaff.yaml の guide: で書き換えられます。出さないときは --no-guide。

════════════════════════════════════════════════════════════

houkoku.md   business/report · 日本語   ジャンルは --genre から

─── 5 行目 ───────────────────────────────────────────────────

    近年、お客様からの問い合わせはますます多様化しており、私たちサポートチームとしてもその変化にしっかりと対応していくことが求められているという状況であると考えられます。

  ⚠  水増しの導入

     「近年」は、どの記事にも当てはまる書き出しです
     どの記事にも当てはまる書き出しは、読者に次を読む理由を与えません。

     → 具体的な状況か、この記事だけの主張から始めてください。

     このルールをゆるめる:  npx chaffjs relax padded-intro


─── 5 行目 ───────────────────────────────────────────────────

    近年、お客様からの問い合わせはますます多様化しており、私たちサポートチームとしてもその変化にしっかりと対応していくことが求められているという状況であると考えられます。

  ⚠  逃げの表現が多い

     この文は逃げの表現を 2 つ重ねています(「という状況である、と考えられます」)
     断言を避けるほど、読み手は何が決まったのか分からなくなります。1 つなら慎重さですが、重なると誰も責任を取らない文書になります。chaff は 2 つの見方で探します。1 つの文に逃げを重ねたもの(「〜という状況であると考えられます」「〜かもしれないと思われます」)は、短い文書でも 1 文で指摘します。文書全体で逃げの表現が多すぎるものは、短い文書では測りません。重なりを数えるとき、鉤括弧や引用符で引いた発言の中の逃げは、話した人のものなので数えません。

     → 言い切れるものは言い切ってください。言い切れないなら、何が分かれば言い切れるのかを書いてください。重ねた逃げは、1 つ残すか、全部外して言い切ってください。

     このルールをゆるめる:  npx chaffjs relax excessive-hedging


────────────────────────────────────────────────────────────

  注意 2 件   すべて機械による判定です
              (同じ文章なら何度実行しても同じ結果になります)

  文章は書き換えていません。直すのは書いた人です。

  69 件の rule は動いていません:
      abstract-length(ジャンル business/report では見ないため)
      adverb-overuse(ja 向けの rule ではないため)
      agentless-passive(ジャンル business/report では見ないため)
      agreement-slip(ja 向けの rule ではないため)
      ai-structure(ジャンル business/report では見ないため)
      all-caps-shouting(ja 向けの rule ではないため)
      article-sound(ja 向けの rule ではないため)
      attachment-not-attached(ジャンル business/report では見ないため)
      calendar-name-case(ja 向けの rule ではないため)
      citation-reference-mismatch(ジャンル business/report では見ないため)
      citation-style-mix(ジャンル business/report では見ないため)
      closing-cliche(ジャンル business/report では見ないため)
      code-fence-language-mix(ジャンル business/report では見ないため)
      contraction-consistency(ja 向けの rule ではないため)
      cross-doc-broken-link(比べるほかの文書が無いため(ファイルを二つ以上かフォルダを渡すと動きます))
      cross-doc-duplicate-definition(比べるほかの文書が無いため(ファイルを二つ以上かフォルダを渡すと動きます))
      cross-doc-fact-conflict(比べるほかの文書が無いため(ファイルを二つ以上かフォルダを渡すと動きます))
      cross-doc-term-variant(比べるほかの文書が無いため(ファイルを二つ以上かフォルダを渡すと動きます))
      dangling-participle(ja 向けの rule ではないため)
      default-value-mismatch(ジャンル business/report では見ないため)
      defined-name-repeated(ジャンル business/report では見ないため)
      defined-term-form(ジャンル business/report では見ないため)
      deprecated-option-used(ジャンル business/report では見ないため)
      email-greeting-closing(ジャンル business/report では見ないため)
      email-subject-length(ジャンル business/report では見ないため)
      empty-conclusion(意味を読む検査のため(npx chaffjs test で動きます))
      expletive-construction(ja 向けの rule ではないため)
      figure-reference-order(ジャンル business/report では見ないため)
      heading-command-missing(ジャンル business/report では見ないため)
      homophone-slip(ja 向けの rule ではないため)
      hyphen-as-dash(ja 向けの rule ではないため)
      kana-function-word(決まった書き方(chaff.yaml の style)のための rule で、style か rules で動かすため)
      latin-abbreviation-form(ja 向けの rule ではないため)
      less-for-fewer(ja 向けの rule ではないため)
      missing-space-after-comma(ja 向けの rule ではないため)
      numeral-sentence-start(ja 向けの rule ではないため)
      obligation-without-deadline(ジャンル business/report では見ないため)
      oxford-comma-consistency(ja 向けの rule ではないため)
      paragraph-length-variance(ジャンル business/report では見ないため)
      parameter-table-mismatch(ジャンル business/report では見ないため)
      party-order(ジャンル business/report では見ないため)
      party-role-name(ジャンル business/report では見ないため)
      prerequisite-after-step(ジャンル business/report では見ないため)
      quote-style-consistency(ja 向けの rule ではないため)
      quote-without-source(ジャンル business/report では見ないため)
      requirement-smell(ジャンル business/report では見ないため)
      return-type-mismatch(ジャンル business/report では見ないため)
      risk-disclosure(意味を読む検査のため(npx chaffjs test で動きます))
      rule-of-three(ジャンル business/report では見ないため)
      section-length-uniformity(ジャンル business/report では見ないため)
      sentence-initial-so(ja 向けの rule ではないため)
      sentence-rhythm(ジャンル business/report では見ないため)
      sentence-spacing-consistency(ja 向けの rule ではないため)
      shell-prompt-mix(ジャンル business/report では見ないため)
      space-before-punctuation(ja 向けの rule ではないため)
      spelling-consistency(ja 向けの rule ではないため)
      step-statement-mix(ja 向けの rule ではないため)
      title-case-consistency(ja 向けの rule ではないため)
      toki-as-condition(ジャンル business/report では見ないため)
      ui-label-variant(ジャンル business/report では見ないため)
      undefined-function-call(ジャンル business/report では見ないため)
      undefined-term(ジャンル business/report では見ないため)
      unknown-word(ja 向けの rule ではないため)
      unsourced-number(意味を読む検査のため(npx chaffjs test で動きます))
      vague-deadline(ジャンル business/report では見ないため)
      version-mismatch(ジャンル business/report では見ないため)
      version-order(ジャンル business/report では見ないため)
      warning-without-action(ジャンル business/report では見ないため)
      which-that-consistency(ja 向けの rule ではないため)

AI らしさ: 測っていません(短すぎます: 371 字。500 字から測ります)

指摘は 2 件で、どちらも 5 行目です。「近年、」は、どの報告書にも書ける書き出しです。読み手はこの段落を読んでも、何も新しく知りません。9月に何があったかから書き始めます。もう 1 件は、「という状況である」と「と考えられます」を 1 文に重ねた、逃げの表現です。

最初に出る指針

上の画面の最初には、ジャンルの指針が出ています。よい報告書が満たすことを、原稿を確かめる問いの形で並べ、このジャンルで特に効く rule を添えたものです。 --genre でジャンルを決めたので出ています。

問いの多くはルールでは確かめられないので、指摘より先に読みます。 AI に書き直させるときも、AI は同じ指針に沿って書きます(AI にジャンルの指針を渡す)。

推測したジャンルや既定のジャンルでは出さず、--compact と --no-guide でも出しません。指針の文は、チームが chaff.yaml の guide: で書き換えられます(ジャンルの指針を変える)。

「動いていない」一覧の読み方

画面の最後には、今回見なかったルールが理由つきで並びます。「指摘なし」を「全部見て問題なし」と取り違えないためです。理由は 3 種類です。

理由意味
ジャンル ○○ では見ないためジャンルがそのルールを外しています。理由を書いて外したものと、その種類の文書の多くに出るので外したものがあります。chaff.yaml の rules: で動かせます
ja 向けの rule ではないため英語の文書だけに使うルールです
意味を読む検査のため機械だけでは決まらないルールです。npx chaffjs test で AI に読ませると動きます

受け身の検査を動かす

agentless-passive は、ビジネス文書では動きません。人の書いた報告書の多くが、どこかで受け身を使っているからです。する人を必ず書く決まりのチームは、chaff.yaml で動かします。

rules:
  agentless-passive: normal

ここでは --compact を付け、1 件を 2 行にまとめて出しています。

$ npx chaffjs houkoku.md --genre business/report --compact

houkoku.md   business/report · 日本語   ジャンルは --genre から

  5:1     warning 「近年」は、どの記事にも当てはまる書き出しです
                  padded-intro
  5:68    warning この文は逃げの表現を 2 つ重ねています(「という状況である、と考えられます」)
                  excessive-hedging

指摘 2 件、動いていない rule 69 件
行指摘意味直しかた
5逃げの表現が多い「という状況である」と「と考えられます」を 1 文に重ねています言い切ります。言い切れないなら、何が分かれば言い切れるのかを書きます
5水増しの導入「近年」は、どの報告書にも書ける書き出しです9月の数字から書き始めます
15誰がしたのか書かれていない「検討されています」には、検討している人がいません「サポートチームは〜を載せます」と、する人を主語にします

15 行目の 2 文目「検討を進めることが必要であると考えられます」も、同じ書き癖です。ですが、chaff はこれを指摘しません。機械は、書き癖をすべて見つけるわけではありません。

意味を読む検査は AI に頼む

「まとめ」の節は、上に書いたことを言い直しているだけです。これは意味を読まないと決まらないので、chaff は npx chaffjs test で AI に回します。 AI に何を送るのかは、--dry-run を付けると、送らずに確かめられます。

npx chaffjs test houkoku.md --genre business/report --dry-run    AI に送る箇所を見せる(送らない)

画面の前半は、上の機械の検査と同じです。その後に、次が出ます。

houkoku.md   全 8 文のうち 2 箇所を送ります(API は呼んでいません)

      1 箇所  結びに中身がない  (機械で絞り込み済み)
      1 箇所  リスクが書かれていない  (機械で絞り込み済み)
      0 箇所  数字の根拠がない  (機械で絞り込み済み)

  最初の 1 件に送る文章:

    以上のように、9月は問い合わせが増え、一次回答までの時間も目標を超えました。今後も引き続き改善に努めてまいります。


────────────────────────────────────────────────────────────

  合計 2 箇所を送ります。--dry-run なので API は呼んでいません。
  送り先: anthropic / claude-opus-5(認証なし)

全文ではなく、機械で絞り込んだ 2 箇所だけを送ります。実際に AI に読ませるには、AI の会社から受け取る API key が要ります。送り先は Anthropic が既定で、chaff.yaml の ai_backend で OpenAI にも変えられます。鍵の置き方は README にあります。 AI を使わなくても、機械の検査はすべて動きます。

ジャンルを毎回書かずに済ませる

--genre を付けないと、chaff は技術記事(blog/tech)として見ます。報告書は見た目から種類を当てにくいので、ほかのジャンルを勧める行は出ません。報告書を置くフォルダには、ジャンルを書いた設定ファイルを置きます。

npx chaffjs init --genre business/report    この場所に chaff.yaml を作り、ジャンルを書く

chaff.yaml(設定ファイル)と .gitignore を作ったと出たあとに、次が出ます。

ジャンルは business/report にしました。違う場合は chaff.yaml の genre を直してください。
  一覧: npx chaffjs genres

次:
  npx chaffjs .            この場所の Markdown を全部見る

これで、このフォルダでは npx chaffjs houkoku.md だけで報告書として見ます。

意図した箇所を黙らせる

どの部署がページを更新するのか、まだ決まっていないこともあります。そのときは、その段落のすぐ上に次の 1 行を書き、受け身の指摘を黙らせます。

<!-- stet: agentless-passive — どの部署が更新するかは、まだ決まっていない -->
請求の問い合わせについて、よくある質問のページを更新することが検討されています。

stet は、この箇所の指摘を黙らせる印です。— の後ろに理由を書きます。 Markdown のコメントなので、文書を開いた人の画面には出ません。かけ直すと、受け身の指摘が消え、1 行目に黙らせた件数が出ます。

$ npx chaffjs houkoku.md --genre business/report --compact

houkoku.md   business/report · 日本語   ジャンルは --genre から

  5:1     warning 「近年」は、どの記事にも当てはまる書き出しです
                  padded-intro
  5:68    warning この文は逃げの表現を 2 つ重ねています(「という状況である、と考えられます」)
                  excessive-hedging

指摘 2 件、動いていない rule 69 件

チームで決まりを変える

黙らせるのが 1 箇所ではなく、チームの決まりなら、ルールのほうをゆるめます。たとえば「背景」の節を決まった書き出しで始めるのが社内の型なら、次のように打ちます。

npx chaffjs relax padded-intro --why "背景の節は、決まった書き出しで始める社内の型のため"

chaff.yaml に、次の行が理由と日付と打った人の名前つきで書き足されます。

  # 水増しの導入
  # どの記事にも当てはまる書き出しは、読者に次を読む理由を与えません。
  padded-intro: relaxed # 2026-09-30 背景の節は、決まった書き出しで始める社内の型のため / isamu

かけ直すと、「近年、」の書き出しは指摘されなくなります。理由が残るので、後から来た人も、なぜゆるめたのかを追えます。

直したあと

数字から書き始め、逃げの表現を外し、する人と時期を書きました。「まとめ」は、次の報告で示すことに変えました。

# 9月の問い合わせ対応についての報告

## 要点

9月は問い合わせが増え、一次回答までの時間が目標の 4 時間を超えました。増えた分の多くは、新しい料金プランの請求書の見方についての質問です。

## 9月の状況

9月の問い合わせは 412 件で、8月の 356 件から増えました。増えたのは請求に関する問い合わせです。その多くは、新しい料金プランに切り替えたお客様からの、請求書の見方が分からないという質問でした。

一次回答までの時間は平均 6.2 時間で、目標の 4 時間を超えました。

## 対応

サポートチームは、10月中に、よくある質問のページに請求書の見方を載せます。担当者を増やすかどうかは、10月の件数を見て、11月にサポート部長が決めます。

## 次の報告で示すこと

10月の一次回答までの時間が、目標の 4 時間以内に戻ったかを示します。
$ npx chaffjs houkoku-fixed.md --genre business/report

指針: 報告書(business/report)

  下の指摘より先に、原稿がこれを満たしているかを確かめてください。

  - 冒頭で、結論(何が分かったか・何が起きたか)を述べているか
  - 数字に出典と時点があり、合計と割合が合っているか
  - 事実と、意見・推測を書き分けているか
  - 次の行動を、担当と期限つきで書いているか

  このジャンルで特に効く rule: concrete-evidence-density, cushion-phrase-density, empty-conclusion, padded-intro, preamble-length, quote-unnamed-speaker, request-without-deadline, risk-disclosure, unsourced-number
  chaff.yaml の guide: で書き換えられます。出さないときは --no-guide。

════════════════════════════════════════════════════════════

houkoku-fixed.md   business/report · 日本語   ジャンルは --genre から

────────────────────────────────────────────────────────────

  指摘はありません   すべて機械による判定です
              (同じ文章なら何度実行しても同じ結果になります)

  文章は書き換えていません。直すのは書いた人です。

  69 件の rule は動いていません:
      abstract-length(ジャンル business/report では見ないため)
      adverb-overuse(ja 向けの rule ではないため)
      agentless-passive(ジャンル business/report では見ないため)
      agreement-slip(ja 向けの rule ではないため)
      ai-structure(ジャンル business/report では見ないため)
      all-caps-shouting(ja 向けの rule ではないため)
      article-sound(ja 向けの rule ではないため)
      attachment-not-attached(ジャンル business/report では見ないため)
      calendar-name-case(ja 向けの rule ではないため)
      citation-reference-mismatch(ジャンル business/report では見ないため)
      citation-style-mix(ジャンル business/report では見ないため)
      closing-cliche(ジャンル business/report では見ないため)
      code-fence-language-mix(ジャンル business/report では見ないため)
      contraction-consistency(ja 向けの rule ではないため)
      cross-doc-broken-link(比べるほかの文書が無いため(ファイルを二つ以上かフォルダを渡すと動きます))
      cross-doc-duplicate-definition(比べるほかの文書が無いため(ファイルを二つ以上かフォルダを渡すと動きます))
      cross-doc-fact-conflict(比べるほかの文書が無いため(ファイルを二つ以上かフォルダを渡すと動きます))
      cross-doc-term-variant(比べるほかの文書が無いため(ファイルを二つ以上かフォルダを渡すと動きます))
      dangling-participle(ja 向けの rule ではないため)
      default-value-mismatch(ジャンル business/report では見ないため)
      defined-name-repeated(ジャンル business/report では見ないため)
      defined-term-form(ジャンル business/report では見ないため)
      deprecated-option-used(ジャンル business/report では見ないため)
      email-greeting-closing(ジャンル business/report では見ないため)
      email-subject-length(ジャンル business/report では見ないため)
      empty-conclusion(意味を読む検査のため(npx chaffjs test で動きます))
      expletive-construction(ja 向けの rule ではないため)
      figure-reference-order(ジャンル business/report では見ないため)
      heading-command-missing(ジャンル business/report では見ないため)
      homophone-slip(ja 向けの rule ではないため)
      hyphen-as-dash(ja 向けの rule ではないため)
      kana-function-word(決まった書き方(chaff.yaml の style)のための rule で、style か rules で動かすため)
      latin-abbreviation-form(ja 向けの rule ではないため)
      less-for-fewer(ja 向けの rule ではないため)
      missing-space-after-comma(ja 向けの rule ではないため)
      numeral-sentence-start(ja 向けの rule ではないため)
      obligation-without-deadline(ジャンル business/report では見ないため)
      oxford-comma-consistency(ja 向けの rule ではないため)
      paragraph-length-variance(ジャンル business/report では見ないため)
      parameter-table-mismatch(ジャンル business/report では見ないため)
      party-order(ジャンル business/report では見ないため)
      party-role-name(ジャンル business/report では見ないため)
      prerequisite-after-step(ジャンル business/report では見ないため)
      quote-style-consistency(ja 向けの rule ではないため)
      quote-without-source(ジャンル business/report では見ないため)
      requirement-smell(ジャンル business/report では見ないため)
      return-type-mismatch(ジャンル business/report では見ないため)
      risk-disclosure(意味を読む検査のため(npx chaffjs test で動きます))
      rule-of-three(ジャンル business/report では見ないため)
      section-length-uniformity(ジャンル business/report では見ないため)
      sentence-initial-so(ja 向けの rule ではないため)
      sentence-rhythm(ジャンル business/report では見ないため)
      sentence-spacing-consistency(ja 向けの rule ではないため)
      shell-prompt-mix(ジャンル business/report では見ないため)
      space-before-punctuation(ja 向けの rule ではないため)
      spelling-consistency(ja 向けの rule ではないため)
      step-statement-mix(ja 向けの rule ではないため)
      title-case-consistency(ja 向けの rule ではないため)
      toki-as-condition(ジャンル business/report では見ないため)
      ui-label-variant(ジャンル business/report では見ないため)
      undefined-function-call(ジャンル business/report では見ないため)
      undefined-term(ジャンル business/report では見ないため)
      unknown-word(ja 向けの rule ではないため)
      unsourced-number(意味を読む検査のため(npx chaffjs test で動きます))
      vague-deadline(ジャンル business/report では見ないため)
      version-mismatch(ジャンル business/report では見ないため)
      version-order(ジャンル business/report では見ないため)
      warning-without-action(ジャンル business/report では見ないため)
      which-that-consistency(ja 向けの rule ではないため)

AI らしさ: 測っていません(短すぎます: 309 字。500 字から測ります)

指摘はありません。残った 3 つの「意味を読む検査」は、AI に読ませたときだけ動きます。

次に読むページ