AWS Redmine上でplantumlを動かす

開発

どうも、今回も仕事ネタです。
EC2にRedmineが導入済みの状態からの作業スタートです。なので、Redmineの導入から知りたい!という方にはちょっと足りない記事になります。

バグだったり、ユーザ様からのご要望だったり、様々なタスクを管理する為に
古くから多くのプロジェクトで利用されていると思われるRedmine

タスクの管理だけに留まらず、Wikiの機能も存在していますよね
ここに図があるともっとわかりやすい、視覚的・直感的に伝わりやすいのになぁ
(※私が活字苦手なだけかもしれません)
と思う事も多々あるわけです

そこで、手軽に作図できるplantumlが候補に上がるわけですが
ローカルで作図して画像出力して、その画像をredmineに貼り付けて・・・
って、手間!!!ですよね

だったら、Redmine上で作図しようという話です
作図方法として以下の2パターンがあります

  1. コードをplantumlのサーバで図に変換するパターン
  2. コードをローカルで図に変換するパターン

今回は2のローカルで変換するパターンを採用します
別サーバの状態に影響されて図が見えなくなることを避ける為です
ローカル環境に留まっていれば、自分たちで対処できるのでそちらの方がいいでしょう

前置きが長くなりましたが、本題に入っていきましょう

対象者

  • 既にRedmineがAWSのEC2インスタンス上で稼働している
  • plantumlを使って作図を簡単に行いたい
  • EC2インスタンスにjavaを導入しても良い
  • Redmineのバージョンが5.x系

という方向けになります
では、早速作業していきます

JavaとGraphvizの導入

タイトルの通りです plantumlを稼働させるのにJavaとGraphvizが必要になります
それぞれ、コマンドでインストールしましょう

  • Java
    インストール可能なJavaがあるかどうかは sudo yum search java で探すことができます
    今回は17を採用します
    sudo yum install java-17-amazon-corretto-devel でインストールしました
  • Graphviz
    こちらもJavaと同様にyumでインストールしました
    sudo yum install graphviz

Javaはplantuml.jarを動かすために必要
Graphvizはplantumlが作図する為に必要なライブラリとなります
plantumlだけで単純なUMLを描く事もできますが
Graphvizも抱き合わせで導入した方がおススメです

導入していないと↓のようなエラーと遭遇すると思います

Error: Dot executable does not exist
Error: only sequence diagrams will be generated

plantumlを導入

plantuml.jarをまずはダウンロードしましょう
ダウンロードサイトhttps://sourceforge.net/projects/plantuml/にアクセスして
「Download」ボタンをポチっとします

ダウンロードできたzipファイルを解凍して中を見ると
plantuml.jarが入っているので
これをAWSに配置します

※EC2インスタンスのコマンドラインから直接ダウンロードした方が手っ取り早いです
 この記事書きながらふと気づいてしまいました。。。

ローカルマシンからEC2へファイルをアップロードする為に
私はWinSCPを使いました
EC2インスタンスへSSH接続する際に使用するpemファイルを
puttygenを使ってppkに変換しWinSCPに読み込ませることで接続できます

ローカルからとりあえずEC2インスタンスへplantuml.jarをアップロードできたら
/usr/share/plantuml.jar に置きましょう
所有者をchown root:root plantuml.jarで設定
実行権限はchmod 755 plantuml.jarで設定

次に、plantumlを起動する為のコマンドを登録します
/usr/bin/plantumlを作成し中身に以下を記述しておきます

#!/bin/bash
/usr/bin/java -Djava.io.tmpdir=/var/tmp -Djava.awt.headless=true -jar /usr/share/plantuml.jar -charset UTF-8 ${@}

-charset UTF-8の部分は無くてもいいかもしれませんが、一応書いてます

こちらも所有者、実行権限を設定しておきましょう
chown root:root plantuml
chmod 755 plantuml

プラグインを導入

ここまでで、plantumlをコマンドベースで起動する為の準備が整いましたが
今回の目標はRedmine上での利用となるので、これだけでは足りていません
プラグインを読み込ませて先程作成したコマンドを使えるようにします

プラグインをダウンロードします
https://github.com/cdwertmann/wiki_external_filter

ダウンロードしたzipファイルをそのままEC2インスタンスへアップロードします
アップロードしたzipファイルを解凍し、フォルダ名を変更します
unzip wiki_external_filter-master.zip
mv wiki_external_filter-master wiki_external_filter

Redmineのルートフォルダ配下のpluginsに移動しましょう
mv wiki_external_filter/ <Redmine_root_directory>/plugins/.
Apacheが参照できるようにしておきます
chown -R apache:apache wiki_external_filter/
プラグインに同梱されているconfigファイルをコピーします
cp plugins/wiki_external_filter/config/wiki_external_filter.yml config/.
chown apache:apache config/*
httpサービスを再起動します
systemctl restart httpd.service

これでRedmineが動けば!

エラーに遭遇

私の環境では残念ながらスムーズに動きませんでした・・・
システム屋さんの運命なのだと思っています
絶対エラーに遭遇するんですよね・・・

Could not spawn process for application redmine-5.0.5: The application encountered the following error: Could not find gem 'open4' in locally installed gems.(Bundler::GemNotFound)

なにやらGemで足りないものがあるらしいです
rubyに疎いので、詳細分かってないですがライブラリが足りないってことっぽいので
お望みのものをインストールしてあげましょう

gem install open4

chmod go+w <Redmine_root_directory>/public/plugin_assets

これでもエラーに遭遇・・・
エラーの詳細をメモしてなかったんですが
導入したプラグインに関連するエラーでした
なので、この手順に沿って進めていると同様に引っかかると思われます
configファイルを編集し、黄色背景の部分を追記します

vi /opt/local/redmine/src/redmine-5.0.5/plugins/wiki_external_filter/config/routes.rb

match ‘wiki_external_filter/:filename’, :controller => ‘wiki_external_filter’, :action => ‘filter’, :macro => ‘video’, :index => ‘1’, :requirements => { :filename => /video\.flv/ }, :via => [:get, :post]
match ‘wiki_external_filter/:filename’, :controller => ‘wiki_external_filter’, :action => ‘filter’, :macro => ‘video_url’, :index => ‘1’, :requirements => { :filename => /video_url\.flv/ }, :via => [:get, :post]

httpサービスを再起動

systemctl restart httpd.service

これでRedmineとプラグインが動くはずです!
プラグインの設定画面に、キャッシュする時間を入力する項目があります
適当に大きな数字を入力しておきましょう
デフォルトの 0 の状態だとキャッシュ無しになるので
画面読み込み時に必ずplantumlが起動してロードが遅くなります

動作確認すると文字化け

はい、作図できて喜んだのもつかの間
日本語を表示しようとすると□□□□□ばかり表示されて何もわかりません

これ→□、豆腐と呼ばれるらしいです
世界的にもTofuで通じるようになっているらしいです
日本ってすごいですね・・・

話が逸れましたが、この豆腐状態を解消する為に、フォントが必要でした

yum install google-noto-sans-japanese-fonts
yum install google-noto-cjk-fonts.noarch

これに加えて、コード上にパラメータを付けると日本語が表示されるようになります
skinparam {
defaultFontName Noto Sans CJK JP Black Regular
}

おしまい!

まとめ

今回も長い闘いでした・・・

プログラムに関するドキュメントってメンテは手間だし形骸化しやすいし
プログラムの修正が先行して置いて行かれやすい存在ですよね

サクッと作れて、サクッと直せるようになれば
少しはドキュメントの存在も明るくなるんじゃないかと期待しています

また、図を画像にしないことで、図の変更点をdiffで確認できるようになります
どのタイミングで変わったのか?等
情報を遡及できるようになるのもメリットだと思いますので
是非是非活用してみてください