浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【Docker】日本語の PlantUML を文字化けさせずに画像に変換するイメージ

 環境を問わず Docker さえあればそれだけで PlantUML を web ページなどで使える画像ファイルにできる様にしたい時があります。具体的には複数、あるいは多数の方が似たような PlantUML を元にした画像を組み込んだドキュメントを作る必要がある時です。手作業の環境構築を一人一人見るのは手間ですし、未来の自分も信用がおけません。
 PlantUML はテキストファイルを元に様々なものを図示できる形式です。何よりも便利なのが Git 管理がしやすい点です。図の差分検出も簡単です。しかしながら、この記事を書いている時点では mermaid がけっこうなライバルになりそうです。
シンプルなテキストファイルで UML が書ける、オープンソースのツール
 PlantUML では例えば次の様にテキストを図示できます。

@startuml
Entity01 }|..|| Entity02
Entity03 }o..o| Entity04
Entity05 ||--o{ Entity06
Entity07 |o--|| Entity08
@enduml

 PlantUML を書き上げたところで実際に用いるには画像ファイル化する必要がある時が大半です。PlantUML を動的に画像として解釈してくれる環境は開発環境ぐらいです。PlantUMLサーバー(PlantUML を動的に図を見ながら編集できる Java ファイルを組み込んだサーバー)を立てて、都度画像ファイルに変換するのも手ですが、ここではローカルのコマンドラインで PlantUML を画像ファイルに変換することを考えます。
 Docker を用いることで PlantUML を画像に変換するための環境を整えつつワンライナーコマンドで PlantUML を画像ファイルに変換できます。このための Dockerfile 定義が次です。

# Dockerfile
# java ベース
FROM openjdk:19-jdk-alpine3.15
# このバージョンを使っている、というのをわかりやすくするために ENV へ配置
ENV PLANTUML_VERSION=1.2022.1
# とりあえず作業ディレクトリを設定。どこの何がどんなパスか推定しやすくなります。
WORKDIR /work

# PlantUML
# graphviz が plantuml を動作させるために必要
RUN apk add --update --no-cache graphviz \
    # PlantUML 本体をダウンロード
    && wget "https://downloads.sourceforge.net/project/plantuml/${PLANTUML_VERSION}/plantuml.${PLANTUML_VERSION}.jar" -O plantuml.jar

# jp font
# 素のままだと日本語が豆腐になるのでフォントを用意
RUN wget https://noto-website.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip -O NotoSansCJKjp-hinted.zip \
    && mkdir -p /usr/share/fonts/NotoSansCJKjp \
    && unzip NotoSansCJKjp-hinted.zip -d /usr/share/fonts/NotoSansCJKjp/ \
    && rm NotoSansCJKjp-hinted.zip \
    && fc-cache --force

# PlantUML の変換プログラムをエントリーポイントに用意
ENTRYPOINT java -jar plantuml.jar -p -charset UTF-8
# とりあえず png 形式で出力
CMD -tpng

 使用例は次です。

@Windowsのバッチファイルとしての例です。コマンドプロンプトで一行ずつ実行しても問題ありません
@Dockerイメージのビルド
@ docker build -t my_puml docker/my_puml
docker build -t my_puml [上記 Dockerfile を配置したディレクトリへのパス]
@docker を介して PlantUML を実行。
type [plantumlファイルのパス] | docker run --rm -i my_puml > [出力先のパス]
@あるいは
wlc cat [plantumlファイルのパス] | docker run --rm -i my_puml > [出力先のパス]

 これでお手軽に PlantUML を元に画像を量産する準備が整います。

  • この記事いいね! (0)