to top page
2013-01-17
DOT言語で読む風太郎忍法帖 [1] くノ一紅騎兵
山田風太郎の忍法帖には、「くノ一紅騎兵」、「忍者本多佐渡守」、「忍法破倭兵状」など、短編らしくない大きな歴史の枠の中で人物を動かした作品がある。DOT 言語のレベルアップに手ごろなサイズの課題なので、いくつかグラフ化してみる。まず「くノ一紅騎兵」から。

最初のプログラムは次の通り。これを修正しながらいろいろ試すことにする。
digraph {
    graph [size = 6];
    上杉景勝 -> 直江山城;
    上杉景勝 -> 千坂民部;
    上杉景勝 -> 上泉泰綱;
    上杉景勝 -> 前田利太;
    蒲生家 -> 岡野左内;
    佐竹家 -> 車丹波;
    徳川家康 -> 本多正信;
    本多正信 -> 斎藤天鬼;
    陽炎 -> 斎藤天鬼;
    陽炎 -> 鍬形杖兵衛;
    陽炎 -> 上杉景勝;
    陽炎 -> 直江山城;
    真田昌幸 -> 陽炎;
    真田昌幸 -> 直江山城;
    陽炎 -> 扇屋;
    直江山城 -> 徳川家康;
    石田三成 -> 真田昌幸;
}

これを Graphviz の dot コマンドにかけると次の図ができる。
矢印の方向は、現段階では意味を持たない。
矢印で結ばれたどうしのあいだに、敵対、同盟、主従などの関係があることだけを示している。



グラフィック的にあまりおもしろくない。むだにタテ長なのを直そうと思う。
この図の内、斎藤天鬼と鍬形杖兵衛はともに陽炎に討たれる人物。二人は近い場所に置きたい。
同じくタテ長を直すため家康と本多正信もヨコに並べる。
そのようにするには、DOT プログラムの最後に次の行を追加する。

{rank = same; 斎藤天鬼; 鍬形杖兵衛; 上杉景勝}
{rank = same; 徳川家康; 本多正信}

結果は次の通り。



だいぶ見栄えがよくなった。
斎藤天鬼は徳川方が上杉の動向を探るために送り込んだスパイだが、図中のポジションもそんな感じになっている。
ただし、この図では背景の政治情勢が見えない。
時代は関ヶ原戦の前夜。そこで、徳川に敵対して豊臣方に付く可能性のある勢力を枠で囲んでみる。



「くノ一紅騎兵」の構造を反映した図になってきた。
枠外の石田三成、真田昌幸、徳川家康、本多正信は、名前だけ出てきて物語には登場しない人物である。そのへんもすっきりした。
物語の発端時点で、上杉景勝は豊臣方につくか徳川方か明らかでない。
しかし家老の直江兼続は豊臣方に加担するつもりでいる。そこで同じく豊臣方の真田昌幸と語らい、真田忍者の陽炎(かげろう)を上杉家中に引き入れる。陽炎はある詐術を用いて、上杉家が豊臣に加担せざるを得ない状況を作り出す。そういう「くノ一紅騎兵」の枠組と人間関係の基本的な部分は表現できてると思う。

この項つづく。次はグラフに色を付けたり、矢印に意味を持たせたりする。

今回の最終プログラムは次の通り。
digraph {
    graph [size = 6];
    subgraph cluster0 {
        上杉景勝 -> 直江山城;
        上杉景勝 -> 千坂民部;
        上杉景勝 -> 上泉泰綱;
        上杉景勝 -> 前田利太;
        蒲生家 -> 岡野左内;
        佐竹家 -> 車丹波;
        陽炎 -> 斎藤天鬼;
        陽炎 -> 鍬形杖兵衛;
    }
    徳川家康 -> 本多正信;
    本多正信 -> 斎藤天鬼;
    陽炎 -> 上杉景勝;
    陽炎 -> 直江山城;
    真田昌幸 -> 陽炎;
    真田昌幸 -> 直江山城;
    直江山城 -> 徳川家康;
    真田昌幸 -> 石田三成 [dir = back];
    {rank = same; 徳川家康; 本多正信}
    {rank = same; 石田三成; 真田昌幸}
}