share facebook facebook2 twitter menu hatena pocket slack

2014.10.28 TUE

ブロック図生成ツール blockdiagを導入してみました

橋本 満

WRITTEN BY橋本 満

cloudpack橋本です。

はじめに

bloddiagとは

公式サイトより
ブロック図生成ツール blockdiag — blockdiag 1.0 ドキュメント

blockdiag シリーズはシンプルなテキストからブロック図などの画像を生成する画像生成ツール群です。

今回試したこと

「テキストベースの定義ファイルから画像ファイルを生成」
こちらを試してみました。

参考サイト

導入

環境

AWS EC2(CentOS 6.5)
Python 2.6.6

インストール

# yum install python-setuptools python-imaging ipa-gothic-fonts
# easy_install blockdiag

※easy_installとは、pythonのsetuptoolsに含まれるコマンドラインツール。web上からパッケージをDLしインストールする。

▽エラー対処2より

# yum install python-devel zlib-devel libjpeg-devel

▽エラー対処4より

# yum install freetype-devel.x86_64

▽エラー対処1より

# easy_install pillow
# easy_install webcolors
# easy_install funcparserlib

▽エラー対処3より

# easy_install -U reportlab==2.5

▽インストール確認(pythonパッケージ)

# pip freeze | grep -i "blockdiag|pillow|webcolors|funcparserlib"

設定

フォント

▽実行時にフォントを指定する場合

$ blockdiag -f /usr/share/fonts/ipa-gothic/ipag.ttf simple.diag

▽$HOME/.blockdiagrcにて定義する場合

$ vi $HOME/.blockdiagrc
--------------------
[blockdiag]
>fontpath = /usr/share/fonts/ipa-gothic/ipag.ttf

動作確認

ブロック図を生成するには blockdiag コマンドを実行する。
※公式サイトで謳っているexampleが格納されていないため手動で作成。

ディレクトリ移動

まずは作成する画像が表示できるwebサーバのdocumentroot配下に移動する

# cd /var/www/html

シンプルなブロック図より

シンプルなブロック図 | 出力サンプル — blockdiag 1.0 ドキュメント

# vi simple.diag
-----------------
blockdiag <span class="o">{
   A -> B -> C -> D;
   A -> E -> F -> G;
}

・ブロック図を生成

# blockdiag simple.diag
# blockdiag -Tsvg simple.diag
# blockdiag -Tpdf simple.diag
※上からPNG形式、SVG形式、PDF形式

・ブラウザから確認
http://example.com/simple.png
01

http://example.com/simple.svg
02

http://example.com/simple.pdf
03

■日本語の利用より

日本語の利用 | 出力サンプル ー blockdiag 1.0 ドキュメント

# vi nippon.diag
-----------------
blockdiag admin {
   // Set M17N text using label property.
   A [label = "起"];
   B [label = "承"];
   C [label = "転"];
   D [label = "結"];

   A -> B -> C -> D;

   // Use M17N text directly (need to quote).
   春 -> 夏 -> 秋 -> 冬;

   // Use M17N text including symbol characters (need to quote).
   "春は 曙" -> "夏 = 夜" -> "秋.夕暮れ" -> "冬 & つとめて";
}

・ブロック図を生成

# blockdiag nippon.diag
# blockdiag -Tsvg nippon.diag
# blockdiag -Tpdf nippon.diag
※上からPNG形式、SVG形式、PDF形式

・ブラウザから確認
http://example.com/nippon.png
04
http://example.com/nippon.svg
05
http://example.com/nippon.pdf
06

補足

エラー対処1

・diagコマンド実行時に下記エラーが出力された場合

# blockdiag simple.diag
--------------------
Traceback (most recent call last):
  File "/usr/bin/blockdiag", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 2655, in <module>
    working_set.require(__requires__)
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 648, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 546, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: Pillow

・pillowがインストールされていないことを確認

# pip freeze | grep -i "pillow|webcolors|funcparserlib"
※pipとは、Pythonにおけるパッケージ管理システム

・pillowのインストール

# easy_install pillow

▽pillow導入後だと下記エラー

pkg_resources.DistributionNotFound: webcolors

・webcolorsのインストール

# easy_install webcolors

▽webcolors導入後だと下記エラー

pkg_resources.DistributionNotFound: funcparserlib

・funcparserlibのインストール

# easy_install funcparserlib

・導入確認

# pip freeze | grep -i "pillow|webcolors|funcparserlib|reportlab"
Pillow==2.6.0
funcparserlib==0.3.6
webcolors==1.4

エラー対処2

▽pillowインストールにて下記エラーが出力された場合

(省略)
_imaging.c:3570: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘init_imaging’
error: Setup script exited with error: command 'gcc' failed with exit status 1

・下記パッケージを導入する(フォーラムより)

# yum install python-devel zlib-devel libjpeg-devel
------
zlib-devel-1.2.3-29.el6.x86_64
libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64
python-devel-2.6.6-52.el6.x86_64

・対処、下記パスを通す(フォーラムより)

# export CFLAGS=-Qunused-arguments
# export CPPFLAGS=-Qunused-arguments

・改めてインストールコマンド実行

# easy_install pillow

エラー対処3

▽PDF形式のブロック図を作成出来ない場合

# blockdiag -Tpdf simple.diag
ERROR: unknown format: PDF

▽reportlabをインストールする

easy_install -U reportlab==2.5

※注釈: 最新版reportlab3.1.8は、下記より私の導入しているpythonをサポートしていないようなので古いversionを導入しています。

# python
Python 2.6.6 (r266:84292, Jan 22 2014, 09:42:36)

>&gt;&gt; import reportlab
Traceback (most recent call last):
  File &quot;&quot;, line 1, in &lt;module&gt;
  File &quot;/usr/lib/python2.6/site-packages/reportlab-3.1.8-py2.6-linux-x86_64.egg/reportlab/__init__.py&quot;, line 11, in &lt;module&gt;
    raise ImportError(&quot;&quot;&quot;reportlab requires Python 2.7+ or 3.3+; 3.0-3.2 are not supported.&quot;&quot;&quot;)
ImportError: reportlab requires Python 2.7+ or 3.3+; 3.0-3.2 are not supported.

エラー対処4

▽日本語を含むサンプルブロック図を作成しようとした際

# blockdiag nippon.diag
ERROR: The _imagingft C module is not installed

▽参考サイト
[python\PILで_imagingftのインポートエラーが出た場合
PILで_imagingftのインポートエラーが出た場合 – Pashango’s Blog

要はPILのコンパイル時にFreeType2がインストールされていなかった事が原因。
Linux(OpenSuse)ならば、「freetype2-devel」パッケージをインストールしてから、PILをインストールすれば解決する。

▽freetype-develをインストール

# yum install freetype-devel.x86_64

▽PILをアンインストール・インストール
(公式サイトより)PIL パッケージの再インストール

# easy_install -m PIL
# rm -rf /usr/lib/python2.6/site-packages/PIL-1.1.7-py2.6-linux-x86_64.egg

# easy_install PIL

▽pillowも再インストール

# easy_install -m pillow
# rm -rf /usr/lib/python2.6/site-packages/Pillow-2.6.0-py2.6-linux-x86_64.egg

# easy_install pillow

▽上記設定後、再度コマンドを実行すると無事PDF形式にて出力出来ました。

# blockdiag nippon.diag

# ls -l nippon.pdf
-rw-r--r-- 1 root root 20415 10月  6 16:47 2014 nippon.pdf

以上になります。

元記事はこちらです。
ブロック図生成ツール blockdiagを導入してみました

橋本 満

橋本 満

後輩、歳下、業務内容の違いなど関係なく、見習うべきところは見習う貪欲系エンジニア。技術志向だけの理系脳ではなく、顧客とのコミュニケーションを大事にすることも心掛けています。あと、ON/OFF(Dancin')大事にしています。