ドキュメント記述ルール(Writing Guide)
このリポジトリの docs/ 配下に新規ファイルを作成する際に守るルールを定めます。
Claude Code・人間の両方が迷わず書けることを目的とします。
1. ファイル共通ルール
| ルール | 内容 |
|---|---|
| ファイルサイズ上限 | 1ファイル 200 行以内(ADR-0039 §1 AI最適化要件) |
| 文字コード | UTF-8(BOM なし) |
| 改行コード | LF |
| frontmatter | 全ファイルに必須。必須キーは id/type/status(ADR-0123)。audience 等の推奨値は frontmatter-lint_rules.md §6・§7 を参照 |
| ファイル名 | kebab-case(例: current-spec.md・bank-reconciliation.md) |
2. 見出しルール
2.1 レベル定義
| レベル | 用途 | 例 |
|---|---|---|
# H1 | ページタイトル(1ファイル1つのみ) | # 銀行照合 — 現行仕様 |
## H2 | メインセクション(項番付き) | ## 1. 概要 |
### H3 | サブセクション(項番付き) | ### 1.1 背景 |
#### H4 | 詳細項目(項番なし・乱用禁止) | #### エラーコード一覧 |
2.2 項番ルール
- H2 は
## N.形式(## 1.## 2....) - H3 は
### N.M形式(### 1.1### 1.2...) - H4 以下は項番不要
- セクションを削除・追加しても他の番号を振り直さない(参照リンクが壊れるため)
# ページタイトル
## 1. 概要
## 2. スコープ
### 2.1 含む
### 2.2 含まない
## 3. 処理フロー
3. 本文記述ルール
3.1 文体
| 種類 | ルール |
|---|---|
| 説明文 | 「〜する」「〜である」(です・ます調禁止) |
| 箇条書き | 体言止め OK(例:「エラー時はログに記録する」→「エラー時のログ記録」でも可) |
| テーブルのセル | 体言止め推奨 |
3.2 情報密度
- 概要セクションは 3 行以内(Claude Code が最初に読む)
- 詳細は H3 以下または
detail/サブディレクトリに分離する - 「なぜ」が非自明な場合のみコメントを書く(CLAUDE.md コーディング規約と同じ方針)
3.3 テーブル
データ・仕様・一覧は原則テーブルで表現する:
| フィールド名 | 型 | 説明 | 制約 |
|---|---|---|---|
| invoice_id | string | INV ID(SSOT) | NOT NULL |
3.4 コードブロック
言語を必ず指定する:
\`\`\`javascript
// GAS コード
\`\`\`
\`\`\`bash
# シェルコマンド
\`\`\`
\`\`\`
# 言語不明な場合は空(markdown として扱われない)
\`\`\`
3.5 リンク
<!-- 同リポジトリ内:相対パス・.md 拡張子を使う -->
[銀行照合仕様](../../domains/bank-reconciliation/current-spec.md)
<!-- 外部リンク:絶対 URL -->
[arc42](https://arc42.org/)
<!-- ADR への参照 -->
[ADR-0039](../../adr/0039-adopt-arc42-c4-madr-feature-folder-for-document-structure.md)
3.6 用語: 3 階層分類と原語温存・初出グロス (ADR-0105)
専門語は 3 階層に分け、噛み砕く対象を Tier 1/2 に限定する。Tier 0 は崩さない・Tier 1/2 は原語を残して初出グロスを足すのが原則:
| Tier | 例 | 扱い |
|---|---|---|
| Tier 0 IT 一般教養 | API / CI / JSON / lint / regex / commit | そのまま。説明しない (崩すと冗長) |
| Tier 1 プロジェクト固有 | INV / STL / Action A・B / マート更新 / 期ずれ | glossary 必須 + 初出時に 原語〔和訳〕 を併記 |
| Tier 2 専門フレーム | Kruchten Type / K.O. criterion / phantom dependency / DLQ | glossary 必須 + ホバー (ADR-0068) + 初出グロス |
ルール:
- 原語温存: Tier 1/2 の専門語・略語・固有名詞は日本語に置換しない (LLM の意味解像度・glossary 突合・コード参照を保つため)。地の文 (説明) は日本語で書く。
- 初出グロス記法:
原語〔和訳=一句〕。例:SSoT〔Single Source of Truth=唯一の正データ〕/DLQ〔Dead Letter Queue=処理失敗メッセージの退避先〕。全角()も可。同一文書で初出 1 回のみ。 - 冒頭エレベーターピッチ(旧称 TL;DR): 主要ページは、冒頭に業界用語なしの要約を置く。ADR 本文はこの方式でなく「決定の早わかり」に一本化済み(ADR-0138 で必須化・ADR-0139 で旧 TL;DR 箇条を廃止)。書式: セクション見出し
## エレベーターピッチ(括弧補足は付けない)の直下に引用ブロック>(サイト上で枠表示される)を置き、中身は問いラベルの箇条書き 5 行(- **ラベル** : 本文・最長ラベル幅まで全角スペースを足して「:」を縦に揃える・各 1 文): ①これは何?(ページ/仕組みの正体を一言。唐突感の防止)→ ②だれのため? → ③なにが起きる?(時系列は→の一行フローで。機能やゲートの列挙はしない)→ ④譲れない一線(一番誤解されたくないこと)→ ⑤だから(読み手への約束)。語りかけのため、ここのみ「です・ます」可。模範例:docs/_internal/03_decisions/decision_pipeline/README.md冒頭。既存の「TL;DR(このページは何か・専門語ゼロ)」表記は grandfather(そのページを触るときに順次改名)。 - 用語定義の SSoT:
docs/architecture/glossary.md。新語はまず glossary に追加する。 - 検証:
node scripts/adr-lint.mjs --check-terminology docs/adr/で glossary 未登録 + 初出グロスなしの略語を warn 検出 (filenum ≥ 105 限定・warn のみ)。
4. current-spec.md 固有ルール
domains/<feature>/current-spec.md に固有の記述基準:
| セクション | 記述基準 |
|---|---|
| 1. 概要 | 「何をするモジュールか」を 1〜3 文で。Why は ADR に委ねる |
| 2. スコープ | 含む / 含まない を明示。隣接機能との境界を書く |
| 3. 処理フロー | 入力→処理→出力を ASCII フローまたは箇条書きで。6 分制限(GAS 制約)に言及する場合はここ |
| 4. データ仕様 | 列スキーマはテーブル形式。ヘッダー名ベース参照(列番号禁止)を明記 |
| 5. ビジネスルール | CLAUDE.md の Domain rules に準拠した番号付き箇条書き |
| 6. エラーハンドリング | エラー条件→対処のテーブル形式 |
| 7. テスト | 対応するテスト関数名または operations/testing/ へのリンク |
| 8. 関連 | 旧仕様書・ADR・データ定義へのリンク |
5. research.md 固有ルール
| セクション | 記述基準 |
|---|---|
| 1. サマリー | 結論と採用/不採用の判断を先に書く(inverted pyramid) |
| 2. 調査内容 | H3 でサブトピック分割。引用元は脚注または inline リンク |
| 3. 参照元 | URL・書籍名・日付を記録(リンク切れ対策) |
| 4. プロジェクトへの示唆 | bizlp-gas-accounting に直接影響する点のみ。一般論は書かない |
6. itgc.md 固有ルール
| セクション | 記述基準 |
|---|---|
| 1. 統制目標 | 「〜を防止する」「〜を保証する」形式で 1 文 |
| 2. 統制活動 | 実施方法・証跡・頻度をテーブルで。曖昧な「確認する」は禁止 |
| 3. 証跡の保管場所 | ファイルパスまたは外部システム名を具体的に記載 |
| 4. 既知の統制の弱点 | ソロ開発・GAS 環境の制約と代替統制を正直に書く |
7. システム概要ページ(README / landing)固有ルール (ADR-0114 / ADR-0128)
システム・パイプライン・機能ドメインの全体像を説明する概要ページの冒頭構造を定める。正規形(模範例)は docs/_internal/03_decisions/decision_pipeline/README.md の §1-§2。サイト入口の 2 階層 landing 構造(L0 全社ポータル → L1 各軸入口) と新類型 Tier P は §7.3 を参照。
本則の階層: 本セクションのうち「§1§2 の形式・Tier A 必須 7 ページ・Tier 判定基準・Tier B 禁止条項・Tier A 上限 10 ページ・Tier P 定義と L0/L1 landing 階層(ADR-0128)」は核心決定(変更には ADR 改訂が必要。Tier B 禁止条項は緩和不可・強化のみ可)。状態 Enum の更新トリガー詳細・staleness 検知の閾値・棚卸しサイクル運用・検証手順詳細は実施細則(本ページ単独で調整可)。
7.1 冒頭構造(§1 基本情報 → §2 エレベーターピッチ・順序固定)
- §1 基本情報: H1 直下に
## 1. 基本情報。引用ブロック>形式・- **ラベル** : 値(コロン縦揃え)。- 必須 4 項目: 状態 / コード(コード位置)/ 基盤決定(よりどころの ADR リンク)/ 変更履歴(GitHub commits リンク)
- 任意 3 項目: 英語名 / 本番(本番 URL)/ ドメインオーナー(状態フィールド更新の責任者)
- 状態は Enum 5 値で固定:
Planned/Development/Production/Deprecated/Archived - 状態の更新トリガー(実施細則): 本番リリース・非推奨化・退役・アーカイブの各イベント時に変更を入れた PR と同一 PR で更新 + 半年毎の Tier 棚卸しで検認。自動検知は 実装済み (2026-06-04):
scripts/tier-a-header-lint.mjsが「状態 = Production かつ最終 commit が 183 日以上前」で CI 警告 (T1)、あわせて Tier A の部分ビルド HTML に必須 4 項目の存在をアサート (T2 = ADR-0114 §決定 5 のスモークテスト)。docs-nav-lint workflow で毎 PR 実行。
- §2 エレベーターピッチ:
## 2. エレベーターピッチ。書式は §3.6 の問いラベル 5 行形式。 - 順序は §1 基本情報 → §2 ピッチで固定(模範例と一致させ移行コストを抑える。順序の実証比較は ADR-0114 Confirmation のウォークスルーで記録)。
- 免責: 冒頭ブロック(基本情報・エレベーターピッチ)は内部開発ドキュメントの理解導入であり、監査証跡・法令対応の正式記述ではない。会計業務ドメインの README に展開する際も、電帳法等の訂正削除履歴要件を担う文書としては扱わない。
- 会計業務ドメイン(corporate-tax / project-accounting)の追加注記(必須): ファクトボックス直下に 1 行注記を置く — 「※本ブロックは開発理解導入用であり、法務・監査対応の正式記録ではない(正式記録は該当の運用文書を参照)」。なお両ドメインへの展開は、顧問税理士または法務担当者から「ファクトボックスが電帳法・会計指針上の記録文書に該当しない」旨の見解取得が前提条件(取得困難な場合は変更履歴フィールドの除外または別ファイル分離に設計変更。ADR-0114 §決定 1)。
7.2 適用範囲(3 Tier・完全リスト)
- Tier A 必須(7 ページ・上限 10 ページ): §1 基本情報 + §2 ピッチの両方を冒頭に持つ。
_internal/03_decisions/decision_pipeline/README.md(準拠済・模範)domains/corporate-tax/README.md※税理士見解取得まで適用保留domains/data-ingest/README.mddomains/order-management/README.mddomains/project-accounting/README.md※税理士見解取得まで適用保留domains/rpa-automation/README.mdarchitecture/product_overview.md
- Tier A 判定基準: (a) 単一のシステム・パイプライン・機能ドメインの全体像を説明する landing、または複数ドメインをまたぐ製品全体 landing である、かつ (b) 対応する実装(コード位置)が存在する。判定プロセス: ページ作成 PR のレビュー時にレビュアーが Tier 判定をコメントで明示し、Tier A 該当なら同一 PR で本リストを更新する。
- Tier B ピッチのみ任意(完全リスト 15 ページ・「等」を使わない): docs/README.md、adr/README.md、architecture/README.md、data/README.md、data/data-definitions/README.md、data/master-definitions/README.md、domains/README.md、domains/_shared/README.md、implementation/README.md、implementation/legacy-dev/README.md、operations/README.md、operations/itgc/README.md、operations/testing/README.md、_internal/01_discovery/research_prompts/README.md、_internal/biz/README.md。ナビゲーション目的の TOC ページにファクトボックスは不適用。
- 運用禁止条項(核心決定): レビュアーは Tier B ページのピッチ不在を理由に差し戻してはならない(任意規約の解釈分裂による差し戻し増加を防ぐ)。
- Tier C 適用外: spec_*.md(spec 型「基本情報」は別物 — 関数仕様テーブル。guidelines_spec_template.md 準拠で共存)、データ定義リファレンス本体、ADR 本体、RQ 調査結果(TL;DR grandfather 維持)、
index.md(flat TOC)、_meta / _nav。SUMMARY.mdは Tier C から外し Tier P(§7.3・ADR-0128)へ移した(全社の顔 = L0 ポータルの役割を担うため)。 - Tier 分類の棚卸しは半年毎(担当者明記の issue テンプレートから起票・カレンダー登録と組)。次回 Review After: 2026-12 月初(ADR-0114)。テンプレ整備済 (2026-06-18):
.github/ISSUE_TEMPLATE/tier-inventory.md(手動起票可・cron 自動起票は main 領分で実装予定)。
7.3 Tier P(ポータル landing)と L0/L1 landing 階層 (ADR-0128)
サイトは「管理会計ERP 単体ドキュメント」から BizLP コーポレート社内サイト(事業軸 Corp / MAS / DRP) へ再ポジショニングされた。入口を 2 階層の landing 構造として規約化し、コードを持たない landing にシステム前提のファクトボックス(§7.1)を誤適用しないために新類型 Tier P を設ける。ADR-0114 を Refine(核心は温存・Supersede ではない)。
L0 / L1 landing 階層:
- L0 = 全社ポータル:
SUMMARY.md。全 3 軸を横断する「全社の顔」。Tier P。 - L1 = 各軸入口: 軸ごとの概要/入口ページ。コードを持つ軸(MAS / DRP)= Tier A、持たない軸(Corp)= Tier P。
- MAS:
architecture/product_overview.md(Tier A) - DRP:
_internal/03_decisions/decision_pipeline/README.md(Tier A・模範) - Corp:
corp/README.md(Tier P・稼働中)
- MAS:
Tier P(ポータル landing)の必須形式:
- H1 直下に 軽量ヘッダー(引用ブロック
>・コロン縦揃え)。必須 4 項目: 運営(運営主体)/ 対象(読者)/ 更新ポリシー(更新の頻度・契機)/ 索引リンク(全ページ一覧 =index.mdへの導線)。 - 続けて エレベーターピッチ(§3.6 の問いラベル 5 行形式)。
- システム前提のファクトボックス(状態 / コード / 基盤決定 / 変更履歴)は課さない(ポータルには実装コードや状態 Enum が無く形骸化するため)。
tier-a-header-lint.mjsの必須 4 項目(REQUIRED_LABELS)は Tier P に適用せず、Tier P 専用検査(運営/対象/更新ポリシー/索引リンク)を別途行う。
Tier 判定基準の軸分岐:
- 「コードを持つ」の境界定義: リポジトリ上に実行可能な成果物(スクリプト / アプリ / Worker)が存在し CI でアサート可能な軸を「コードを持つ」とする。単なる仕様文書・調査記録のみの軸はコードを持たない。
- Tier P → Tier A 格上げトリガー: コードを持たない軸(Tier P)に後から実行可能な成果物が生まれ CI アサート可能になった時点で、当該軸の L1 入口を Tier A へ格上げし §7.2 Tier A リスト +
tier-a-header-lint.mjsのTIER_A配列へ追加する。
flowchart TD
P["概要/入口ページ"] --> Q1{"ナビ専用 TOC か?
(index / _meta / _nav)"}
Q1 -->|Yes| C["Tier C(適用外)"]
Q1 -->|No| Q2{"対応する実行可能コードが
リポジトリにあり CI で
アサート可能か?"}
Q2 -->|Yes| A["Tier A
(§1 基本情報 + §2 ピッチ)"]
Q2 -->|No| PP["Tier P
(軽量ヘッダー + ピッチ)"]
判定プロセス: ページ作成 PR のレビュー時にレビュアーが本フローチャートで Tier を判定しコメントで明示する。Tier A / Tier P 該当なら同一 PR で §7.2 リストまたは Tier P 対象を更新する。Tier 4 分類(A/B/C/P)の判定で例外が 5 件を超えたら分類設計を見直す(ADR-0128 撤退条件)。
8. 禁止事項
- 個人名 (例: 達希) をドキュメント・コメントに書かない (代表取締役指示 2026-06-04)。職位が適切な箇所 (指示・判断・観測・レビューの主体) は「代表取締役」、アカウントが適切な箇所 (起案者・Deciders・owner・author 等のメタデータ欄) はログイン中のアドレス
[email protected]を使う。例外: 実データの値を説明する記述 (銀行摘要・振込先名など実在文字列の引用) は実データと一致させる - 「TODO」「後で書く」「TBD」を本文に残したままコミット(frontmatter の
status: activeと矛盾) - 200 行を超えるファイルを 1 ファイルに詰め込む(
detail/に分割すること) docs/dev/docs/arch/docs/spec/への新規ファイル作成(AGENTS.md 参照)- 列番号のハードコード(
data[3]等)をデータ仕様テーブルに記載することは禁止ではないが、実装コードでは禁止