どうも、今回も仕事ネタです。
EC2にRedmineが導入済みの状態からの作業スタートです。なので、Redmineの導入から知りたい!という方にはちょっと足りない記事になります。
バグだったり、ユーザ様からのご要望だったり、様々なタスクを管理する為に
古くから多くのプロジェクトで利用されていると思われるRedmine
タスクの管理だけに留まらず、Wikiの機能も存在していますよね
ここに図があるともっとわかりやすい、視覚的・直感的に伝わりやすいのになぁ
(※私が活字苦手なだけかもしれません)
と思う事も多々あるわけです
そこで、手軽に作図できるplantumlが候補に上がるわけですが
ローカルで作図して画像出力して、その画像をredmineに貼り付けて・・・
って、手間!!!ですよね
だったら、Redmine上で作図しようという話です
作図方法として以下の2パターンがあります
- コードをplantumlのサーバで図に変換するパターン
- コードをローカルで図に変換するパターン
今回は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 existError: 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_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で確認できるようになります
どのタイミングで変わったのか?等
情報を遡及できるようになるのもメリットだと思いますので
是非是非活用してみてください