1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UML図を入れたMarkdown形式のファイルをPDFに変換する

Last updated at Posted at 2024-12-07

はじめに

タイトルの通りですが、UML図を入れたMarkdown形式のファイルをPDFに変換する方法を記載します。

Markdownは開発者にとって非常に使いやすく、文書の記載や管理が簡単です。
しかし、顧客に提供する場合など、そのままではドキュメントとしては見づらい場合があります。
また、図を埋め込んだ場合、閲覧するためには特定のツールやプラグインが必要になり、利用者にとってのハードルが上がることがあります。

上記解決のため、MarkdownをPDFに変換することで、誰でも簡単に閲覧できるようになり非常に便利です。

環境

OS: M2 Mac
(他の環境の場合、コマンドの差分は公式サイト等で確認してください)

使うもの

  • Mermaid (mermaid-cli)
    • テキストで手軽に図が書くためのツールです
    • PlantUML をご存知の場合、似たツールと思ってください

  • Pandoc
    • Markdown => PDF の変換を実現するためのツールです
    • 本記事では扱いませんが、その他様々な形式に対応しています

  • pandoc-ext/diagram
    • Pandoc で各種ダイアグラムを変換できるようにするための拡張です

  • MacTeX
    • pandoc で(日本語を含む)PDFを生成するために TeX を利用します
    • MacTeX は Mac向けのTeX ディストリビューションです (wiki)

手順

1. 必要ツールのインストール

Mermaid (mermaid-cli)

npm install -g @mermaid-js/mermaid-cli

Pandoc + MacTeX

brew install pandoc
brew install mactex

# パスを反映 (Terminal再起動でもOK)
eval "$(/usr/libexec/path_helper)"

pandoc-ext/diagram

GitHub から diagram.lua をダウンロードします。

curl コマンドで取得する場合は以下

curl -o diagram.lua https://raw.githubusercontent.com/pandoc-ext/diagram/refs/heads/main/_extensions/diagram/diagram.lua

2. Markdown ファイルの用意

以下のファイルを用意して、login.md という名称で保存します。

# システム設計書

## 1. はじめに
本システム設計書は、ネコネコシステムの設計をまとめたものである。

## 2. 機能一覧
- ユーザー管理機能
  - ユーザー登録
  - ログイン/ログアウト
- 猫管理機能
  - 猫情報追加
  - 猫情報編集

## 3. クラス図

```mermaid
classDiagram
class User {
    +String name
    +String email 
    +void login() 
    +void logout()
}
class Cat {
    +String name
    +float power
    +void add()
    +void edit()
} 
User "1" -- "many" Cat : manages
```

クラス図の部分を Mermeid で記載しています。
もちろん、シーケンス図など他のダイアログも書けるので、設計書はこれでバッチリです!

VSCode で Markdown Preview Enhanced を入れると、リアルタイムでプレビューを確認できます。

https://marketplace.visualstudio.com/items?itemName=shd101wyy.markdown-preview-enhanced

3. PDF ファイルへの変換

事前に用意した diagram.lualogin.md はコマンド実行ディレクトリ内に配置している前提とします。
それ以外の場合は、適宜コマンドで指定しているパスを変更して下さい。

以下のコマンドを実行します。

pandoc ./login.md \
    -o ./login.pdf \
    --pdf-engine=lualatex \
    -V documentclass=ltjarticle \
    -V geometry:margin=20mm \
    --lua-filter ./diagram.lua
オプション 説明
./login.md 変換元のMarkdownファイル
-o ./login.pdf 出力するPDFファイルの名前
--pdf-engine=lualatex PDFエンジンとしてlualatexを使用
-V documentclass=ltjarticle 日本語対応のためのドキュメントクラス設定
-V geometry:margin=20mm ページのマージン設定(お好みで)
--lua-filter ./diagram.lua Mermaid 変換用のフィルターを指定

4. 終わり!

login.pdf というファイルが生成されます。

image.png

クラス図もしっかりと出ていますね!

最後に

簡潔ですが以上です。
GitHub Actions で自動生成する記事も別途執筆したいと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?