Markdownテーブル出力
def render_markdown(result) -> str:
"""CRUD行列をMarkdownテーブル形式で出力する"""
programs = result.programs
tables = result.tables
# ヘッダー行
header = '| プログラム / テーブル | ' + ' | '.join(tables) + ' |'
sep = '|-' + '-|'.join(['-' * max(len(t), 3) for t in ['プログラム / テーブル'] + tables]) + '-|'
rows = [header, sep]
for prog in programs:
cells = [get_cell(result, prog, t) or '' for t in tables]
row = f'| {prog} | ' + ' | '.join(cells) + ' |'
rows.append(row)
return '\n'.join(rows)
Markdown出力例
| プログラム / テーブル | MEISAI | SHOHIN | TOKUI | URIAGE | |------------------------|--------|--------|-------|--------| | SHOHIN-KANRI | | CRUD | | | | TOKUI-MEISHO | | | CRUD | | | URIAGE-SHUKEI | R | R | R | R | | URIAGE-TOROKU | CRD | R | R | CU |
Mermaid形式出力
def render_mermaid(result) -> str:
"""CRUD行列をMermaid xychart-beta形式で出力する(主要テーブルのみ)"""
lines = ['```mermaid', 'graph LR']
for prog in result.programs:
safe_prog = prog.replace('-', '_')
for table, ops in result.matrix.get(prog, {}).items():
safe_table = table.replace('-', '_')
label = ops_to_str(ops)
lines.append(f' {safe_prog}["{prog}"] -->|{label}| {safe_table}[("{table}")]')
lines.append('```')
return '\n'.join(lines)
Mermaid出力例
```mermaid
graph LR
URIAGE_TOROKU["URIAGE-TOROKU"] -->|R| TOKUI[("TOKUI")]
URIAGE_TOROKU["URIAGE-TOROKU"] -->|R| SHOHIN[("SHOHIN")]
URIAGE_TOROKU["URIAGE-TOROKU"] -->|CU| URIAGE[("URIAGE")]
URIAGE_TOROKU["URIAGE-TOROKU"] -->|CRD| MEISAI[("MEISAI")]
URIAGE_SHUKEI["URIAGE-SHUKEI"] -->|R| TOKUI[("TOKUI")]
```
💡 Mermaid の表現制限
Mermaid の graph LR はエッジ数が多いと見づらくなります。プログラム数・テーブル数が多い場合は、重要なプログラムに絞ったフィルタリングや PlantUML の表形式出力が有効です。
PlantUML形式出力
def render_plantuml(result) -> str:
"""CRUD行列をPlantUMLのテーブル形式で出力する"""
programs = result.programs
tables = result.tables
lines = ['@startuml', 'title COBOL CRUD図', '']
lines.append('legend')
lines.append(' C=Create R=Read U=Update D=Delete')
lines.append('end legend')
lines.append('')
# salt(ワイヤーフレームUI)でテーブルを表現
lines.append('salt')
lines.append('{#')
# ヘッダー
header_cells = ['プログラム'] + tables
lines.append('| ' + ' | '.join(header_cells) + ' |')
lines.append('|' + '|'.join(['=' * max(len(c), 3) for c in header_cells]) + '|')
# データ行
for prog in programs:
cells = [prog] + [get_cell(result, prog, t) or ' ' for t in tables]
lines.append('| ' + ' | '.join(cells) + ' |')
lines.append('}')
lines.append('@enduml')
return '\n'.join(lines)
統合出力クラス
from pathlib import Path
class CrudOutputWriter:
def __init__(self, result, output_dir: str = '.'):
self.result = result
self.out = Path(output_dir)
self.out.mkdir(parents=True, exist_ok=True)
def write_all(self) -> None:
self._write('crud_matrix.md', render_markdown(self.result))
self._write('crud_matrix_mermaid.md', render_mermaid(self.result))
self._write('crud_matrix.puml', render_plantuml(self.result))
export_to_json(self.result, str(self.out / 'crud_matrix.json'))
print(f'出力完了: {self.out}')
def _write(self, filename: str, content: str) -> None:
path = self.out / filename
path.write_text(content, encoding='utf-8')
print(f' → {path}')
各ツールでのレンダリング確認
| ツール | 形式 | 利用方法 |
|---|---|---|
| GitHub | Markdown / Mermaid | .md ファイルをそのままプッシュ |
| Notion | Markdown | Markdownインポート機能を使用 |
| Confluence | PlantUML | PlantUML マクロプラグインを使用 |
| VS Code | Mermaid / PlantUML | Mermaid Preview / PlantUML 拡張 |
✅ 次の章では…
PART 07 では実際のサンプル COBOL プロジェクトを使ってツールを動かし、生成されたMarkdown・Mermaid・PlantUML 出力を確認します。