CUBE SUGAR CONTAINER

技術系のこと書きます。

graphviz/blockdiag の作業を捗らせるツール diagram-autobuild をつくった

graphvizblockdiag (シリーズ) は、どちらもテキスト形式のソースファイルからダイアグラムの画像を生成できるツール。 今回、その graphviz や blockdiag で作業する際の効率を上げまくるツール diagram-autobuild というものをつくってみた。

https://raw.githubusercontent.com/wiki/momijiame/diagram-autobuild/images/diagram-autobuild.gif

そもそも graphviz/blockdiag ってなに?

graphviz や blockdiag を知らない人向けに、それがどういったツールなのか軽く解説しておく。 まず graphviz を例に挙げると、例えばこんなソースファイルがあったとする。

digraph G {
  A -> B;
  B -> C;
}

graphviz をインストールすると使えるようになる dot コマンドで上記をビルドしよう。

$ dot -T png -o sample.png sample.dot

すると、次のようなダイアグラムが得られる。

f:id:momijiame:20151212115336p:plain

次に blockdiag の場合だと、こんなソースファイルになる。

blockdiag {
   A -> B -> C;
}

同様に blockdiag をインストールすると使えるようになる blockdiag コマンドで上記をビルドする。

$ blockdiag -o sample.png sample.diag

すると、次のようなダイアグラムが得られる。

f:id:momijiame:20151212120135p:plain

つまり、独自の言語で書かれたソースファイル (テキスト) からダイアグラム (画像) を作成するためのツールということになる。

それで?

実際に graphviz とか blockdiag を使って作図していると、結構めんどくさいことに気づく。 通常、その作業は以下のようになる。

  1. ソースファイルを編集する
  2. ダイアグラムをビルドする
  3. できたダイアグラムを開く
  4. 内容が意図通りになっているか確認する (もしなっていなかったら 1 に戻る)

上記の 2 と 3 の工程がめんどくさい。

解決策

それを自動化するのが今回つくった diagram-autobuild というわけ。 このツールは、具体的には次のことをする。

  • ソースファイルを監視して、それが編集されたタイミングで再ビルドをかける
  • ダイアグラムはブラウザで表示しておいて、再ビルドが終わったらリフレッシュする

これで作業する際の手数を大幅に減らせる。

インストール

diagram-autobuild は Python のパッケージマネージャの pip を使ってインストールする。

$ pip install diagram-autobuild

使い方

インストールすると diagram-autobuild コマンドが使えるようになるので、ツール名とソースファイルを指定して実行する。

例えば graphviz の場合はこんなかんじ。

$ diagram-autobuild graphviz sample.dot

blockdiag を使うならこんなかんじ。

$ diagram-autobuild blockdiag sample.diag

注意点としては、あらかじめ使うツール (graphviz or blockdiag シリーズ) は別途インストールしておくこと。

おまけ

Mac OS X を使っている場合の各ツールのインストール方法について。

graphviz のインストール

graphviz は Homebrew を使ってインストールできる。

$ brew install graphviz

blockdiag のインストール

blockdiag は pip を使ってインストールする。

$ pip install blockdiag

ちなみに (1)

blockdiag には、今回つくったツールと同じことをしてくれる Web サービスがあるようです!

ちなみに (2)

ソースコードはこちら。

github.com

RabbitMQ: Management Plugin の WebUI を使う

RabbitMQErlang で実装された AMQP のブローカー。 具体的な利用例だと OpenStack プロジェクトで RPC のインフラとして使われている。 最近知ったんだけど RabbitMQ にはプラグイン機構があって、その中の Management Plugin を使うと WebUI を利用できるようだ。

使い方

検証の環境には Mac OS X を使っている。

$ sw_vers 
ProductName:    Mac OS X
ProductVersion: 10.11.2
BuildVersion:   15C50

まずは RabbitMQ 本体を Homebrew でインストールする。

$ brew install rabbitmq

インストールできたら、次に Management Plugin を有効にする。

$ rabbitmq-plugins enable rabbitmq_management

RabbitMQ を起動する。

$ rabbitmq-server

起動できたら TCP:15672 を Listen しているか確認する。 このポートが HTTP サーバを提供している。

$ lsof -i | grep :15672
beam.smp  34160 amedama   25u  IPv4 0xc500faa99d5ac3d5      0t0  TCP *:15672 (LISTEN)

ポートが空いていることが確認できたらブラウザで開く。

$ open http://localhost:15672/

すると、次のような WebUI が表示されるはず。

f:id:momijiame:20151212213108p:plain

デフォルトの状態であれば次のアカウントでログインできる。

  • Username: guest
  • Password: guest

ログインすると WebUI 経由で RabbitMQ の状態が確認できたり、各リソースを操作できるようになる。

f:id:momijiame:20151212213203j:plain

RabbitMQ Management HTTP API

ちなみに Management Plugin を有効にすると WebUI だけでなく HTTP API も使えるようになる。 むしろ、この HTTP API をラッパしているのが WebUI ということだろう。

例えば curl コマンドを使って、自身のアカウント情報を確認してみよう。

$ curl -sS -u guest:guest http://localhost:15672/api/whoami | python -m json.tool
{
    "name": "guest",
    "tags": "administrator"
}

アカウント名の guest と、管理者権限を表すであろうタグの administrator という情報が得られた。

HTTP API ではキューやエクスチェンジなどを操作することもできるようになっている。 詳しくは Management Plugin を有効にした RabbitMQ を立ち上げた状態で次の URL にアクセスすると API の仕様を確認できる。

http://localhost:15672/api/

めでたしめでたし。