へっぽこ社会人4年生がプログラミングを頑張る

へっぽこ社会人4年目がプログラミング系統を中心に書きたいことをつらつらと書きます

PerlでGraphVizのグラフを生成する

前回GraphVizを使ったグラフの生成方法について書きました。 今回はdot言語ではなく、Perlでプログラムを記述してグラフを生成します。 ディレクトリの内容物を再帰的に取得してグラフ化したり、CGIプログラムに応用するなど、使い方は様々だと思います。

下準備

PerlGraphVizを利用するには、GraphVizモジュールを導入する必要があります。CPANからインストールすることで導入が可能です。

プログラム例

前回作成したグラフと全く同じグラフを生成するプログラムを例として掲載します。 add_nodeメソッドはノードの生成、add_edgeメソッドは辺の設定を、as_pngメソッドは、PNG形式でグラフの生成します。 詳しくはCPANのマニュアルを参照してください。

#!/usr/bin/perl
use strict;
use warnings;
use GraphViz;

my $g = GraphViz -> new(directed => 0);

$g -> add_node('public_html', shape => 'folder');
$g -> add_node('cgi-bin', shape => 'folder');
$g -> add_node('css', shape => 'folder');
$g -> add_node('js', shape => 'folder');
$g -> add_node('index.html', shape => 'note');
$g -> add_node('design.css', shape => 'note');
$g -> add_node('script.js', shape => 'note');
$g -> add_node('calc.cgi', shape => 'note');

$g -> add_edge('public_html', 'cgi-bin');
$g -> add_edge('public_html', 'css');
$g -> add_edge('public_html', 'js');
$g -> add_edge('public_html', 'index.html');
$g -> add_edge('cgi-bin', 'calc.cgi');
$g -> add_edge('css', 'design.css');
$g -> add_edge('js', 'script.js');

print $g -> as_png();

プログラム名をgraph.plとし、出力する画像ファイル名はgraph.pngとします。 as_pngメソッドに引数を与えない場合は以下のように、リダイレクトで出力します。

$ ./graph.pl > graph.png
$ 
f:id:sierra-kilo:20161120002435p:plain
生成される画像

今回の例では、あまりPerlで実装する必要性が感じられないかもしれませんが、動的にグラフを生成したい場合に、Perlのプログラムに組み込むことで、柔軟に対応できると思います。 そんな感じで、今回はここまで。