# 機能設計書 74-Org-mode文書作成

## 概要

本ドキュメントは、Doom EmacsにおけるOrg-mode文書作成機能について記述する。Org-modeはEmacsの強力な文書作成・タスク管理・ナレッジ管理システムであり、本モジュールはその機能を拡張し、より効率的な文書作成環境を提供する。

### 本機能の処理概要

**業務上の目的・背景**：Org-modeはプレーンテキストベースの文書フォーマットでありながら、階層構造、タスク管理、スケジュール管理、コード実行（Babel）、エクスポートなど多彩な機能を持つ。研究者、開発者、ライターなど幅広いユーザーが日常的に使用しており、Doom Emacsではこれをさらに使いやすく拡張している。

**機能の利用シーン**：
- ドキュメント作成・編集
- タスク管理（TODO、スケジュール、締め切り）
- ナレッジベース構築（org-roam連携）
- プレゼンテーション作成
- コード実行とリテラシープログラミング
- 各種フォーマットへのエクスポート（HTML、PDF、Markdown等）

**主要な処理内容**：
1. 文書構造管理（見出し、リスト、表）
2. タスク管理（TODO状態、優先度、タグ）
3. スケジュール・アジェンダ管理
4. org-captureによるクイックキャプチャ
5. org-babelによるコードブロック実行
6. org-exportによる各種フォーマットエクスポート
7. org-attachによるファイル添付管理
8. カスタムリンクタイプ（doom-ref、doom-module等）

**関連システム・外部連携**：
- org-roam: ナレッジグラフ
- org-journal: 日記管理
- org-noter: PDF注釈
- ox-hugo: Hugo静的サイト生成
- ox-pandoc: Pandocエクスポート

**権限による制御**：特になし。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 1 | Doom Dashboard | 遷移先機能 | org-agenda表示へのショートカット |
| 14 | Calendar | 補助機能 | org-mode予定との統合表示 |

## 機能種別

文書作成 / タスク管理 / ナレッジ管理

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| +roam | フラグ | No | org-roamサポートを有効化 | doom!ブロックで指定 |
| +journal | フラグ | No | org-journalサポートを有効化 | doom!ブロックで指定 |
| +noter | フラグ | No | org-noterサポートを有効化 | doom!ブロックで指定 |
| +hugo | フラグ | No | ox-hugoエクスポートを有効化 | doom!ブロックで指定 |
| +pandoc | フラグ | No | ox-pandocエクスポートを有効化 | doom!ブロックで指定 |
| +present | フラグ | No | プレゼンテーション機能を有効化 | doom!ブロックで指定 |
| +pretty | フラグ | No | org-modernスタイルを有効化 | doom!ブロックで指定 |
| +crypt | フラグ | No | 暗号化サポートを有効化 | doom!ブロックで指定 |
| +dragndrop | フラグ | No | ドラッグ&ドロップサポートを有効化 | doom!ブロックで指定 |

### 入力データソース

- Orgファイル（*.org）
- org-directory設定（デフォルト: ~/org）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| HTML | ファイル | org-export-to-html |
| PDF | ファイル | org-latex-export-to-pdf |
| Markdown | ファイル | org-md-export-to-markdown |
| アジェンダ | バッファ | *Org Agenda*バッファ |

### 出力先

- エクスポートファイル: ソースファイルと同じディレクトリまたは指定先
- アジェンダバッファ: *Org Agenda*
- キャプチャバッファ: *Capture*

## 処理フロー

### 処理シーケンス

```
1. Orgファイルを開く
   └─ org-mode が起動
2. 初期化フック実行
   └─ +org-init-* フック群が実行される
3. 文書編集
   └─ 見出し、リスト、表、コードブロックの編集
4. タスク管理
   └─ TODO状態変更、スケジュール設定
5. エクスポート
   └─ org-export-dispatch で形式選択
```

### フローチャート

```mermaid
flowchart TD
    A[Orgファイルを開く] --> B[org-mode起動]
    B --> C[初期化フック実行]
    C --> D{操作選択}
    D -->|編集| E[文書編集]
    D -->|タスク| F[タスク管理]
    D -->|キャプチャ| G[org-capture]
    D -->|アジェンダ| H[org-agenda]
    D -->|エクスポート| I[org-export-dispatch]
    E --> J[保存]
    F --> J
    G --> J
    I --> K[出力ファイル生成]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-01 | TODOキーワード | TODO, PROJ, LOOP, STRT, WAIT, HOLD, IDEA, DONE, KILL | タスク状態管理時 |
| BR-02 | 優先度表示 | A=エラー色, B=警告色, C=影色 | 優先度設定時 |
| BR-03 | アジェンダ表示範囲 | 過去3日〜未来7日（計10日間） | アジェンダ表示時 |
| BR-04 | キャプチャテンプレート | t=TODO, n=ノート, j=ジャーナル, p=プロジェクト | org-capture実行時 |
| BR-05 | Babel確認 | 評価確認なし（org-confirm-babel-evaluate = nil） | コードブロック実行時 |

### 計算ロジック

**アジェンダ表示範囲**:
- `org-agenda-span`: 10日間
- `org-agenda-start-day`: "-3d"（3日前から開始）

## データベース操作仕様

### 操作別データベース影響一覧

データベース操作なし（ただしorg-roam有効時はSQLiteを使用）

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | file-error | org-id-locations-file が存在しない | エラーを抑制して継続 |

### リトライ仕様

リトライ機能なし

## トランザクション仕様

トランザクション管理なし

## パフォーマンス要件

- アジェンダバッファは `org-agenda-inhibit-startup` で高速化
- Babelの非同期実行は ob-async でサポート

## セキュリティ考慮事項

- +crypt フラグで org-crypt による暗号化をサポート
- Babelのコード実行は確認なしで行われる（信頼できるファイルのみ使用推奨）

## 備考

- org-directory のデフォルトは ~/org
- org-attach のデフォルト添付ディレクトリは org-directory/.attach/

---

## コードリーディングガイド

本機能を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

キャプチャ用変数とBabel設定を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | config.el | `modules/lang/org/config.el` | +org-capture-* 変数群、+org-babel-* 変数群 |

**読解のコツ**: これらの変数はユーザーカスタマイズポイントとして公開されている。

#### Step 2: 初期化フックを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | config.el | `modules/lang/org/config.el` | +org-init-* フック関数群 |

**主要処理フロー**:
1. **74-78行目**: `+org-init-org-directory-h` - ディレクトリ設定
2. **81-102行目**: `+org-init-agenda-h` - アジェンダ設定
3. **105-194行目**: `+org-init-appearance-h` - 外観設定（TODO、優先度等）
4. **197-294行目**: `+org-init-babel-h` - Babel設定
5. **339-434行目**: `+org-init-capture-defaults-h` - キャプチャテンプレート
6. **475-611行目**: `+org-init-custom-links-h` - カスタムリンク定義

#### Step 3: キーバインドを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | config.el | `modules/lang/org/config.el` | +org-init-keybinds-h |

**主要処理フロー**:
- **762-980行目**: org-mode-map のキーバインド設定
- **960-980行目**: org-agenda-mode-map のキーバインド設定

#### Step 4: 外部連携を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | contrib/*.el | `modules/lang/org/contrib/` | 各種拡張モジュール（roam, journal, present等） |

### プログラム呼び出し階層図

```
org-mode
    │
    ├─ org-load-hook
    │      ├─ +org-init-org-directory-h
    │      ├─ +org-init-appearance-h
    │      ├─ +org-init-agenda-h
    │      ├─ +org-init-attachments-h
    │      ├─ +org-init-babel-h
    │      ├─ +org-init-babel-lazy-loader-h
    │      ├─ +org-init-capture-defaults-h
    │      ├─ +org-init-capture-frame-h
    │      ├─ +org-init-custom-links-h
    │      ├─ +org-init-export-h
    │      ├─ +org-init-habit-h
    │      ├─ +org-init-hacks-h
    │      ├─ +org-init-keybinds-h
    │      ├─ +org-init-popup-rules-h
    │      └─ +org-init-smartparens-h
    │
    ├─ contrib モジュール
    │      ├─ roam.el (+roam)
    │      ├─ journal.el (+journal)
    │      ├─ present.el (+present)
    │      ├─ noter.el (+noter)
    │      └─ pretty.el (+pretty)
    │
    └─ 外部パッケージ
           ├─ evil-org
           ├─ toc-org
           ├─ org-cliplink
           └─ org-pdftools
```

### データフロー図

```
[入力]                   [処理]                      [出力]

Orgファイル ───────────▶ org-mode ─────────────────▶ フォーマット済み表示
                              │
org-capture入力 ──────────────┼──▶ org-capture ────▶ キャプチャファイル
                              │
エクスポート要求 ─────────────┼──▶ org-export ─────▶ HTML/PDF/MD等
                              │
アジェンダ要求 ───────────────┴──▶ org-agenda ────▶ *Org Agenda*バッファ
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| config.el | `modules/lang/org/config.el` | ソース | メイン設定、初期化フック |
| packages.el | `modules/lang/org/packages.el` | ソース | 依存パッケージ定義 |
| autoload/org.el | `modules/lang/org/autoload/org.el` | ソース | 汎用ユーティリティ |
| autoload/org-capture.el | `modules/lang/org/autoload/org-capture.el` | ソース | キャプチャ関連 |
| autoload/org-babel.el | `modules/lang/org/autoload/org-babel.el` | ソース | Babel関連 |
| autoload/org-export.el | `modules/lang/org/autoload/org-export.el` | ソース | エクスポート関連 |
| autoload/org-link.el | `modules/lang/org/autoload/org-link.el` | ソース | リンク関連 |
| contrib/roam.el | `modules/lang/org/contrib/roam.el` | ソース | org-roam統合 |
| contrib/journal.el | `modules/lang/org/contrib/journal.el` | ソース | org-journal統合 |
| contrib/present.el | `modules/lang/org/contrib/present.el` | ソース | プレゼンテーション |
