lisz-works

技術と興味の集合体

Freemindのフォーマットを読み解いてみた

【スポンサーリンク】

マインドマップ

マインドマップアプリ界で有名であろうアプリはいくつかあります。

その1つが「Freemind」ですね。

今回はこのFreemind形式、「mmファイル」のファイルフォーマットを読み解いてみました!

フリーで使えるうえ、マインドマップアプリと互換を持たせていることが多々ある形式であります。

ちょちょっとイジれるもの作れたらいいなー、という思いから調べてみました!

思ったより簡単な構造でした。

Freemindのファイル概要

Freemindが作成する「.mm」という拡張子のファイル。

この中身は「XML形式」のファイルになっています。

必要最低限のフォーマット

このようなマインドマップを作成しました。

マインドマップ サンプル

この中身を見てみると、こんな感じになっています。

<map version="1.0.1">
    <!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
    <node CREATED="1533537434576" ID="ID_1019067241" MODIFIED="1533539045388" TEXT="parent">
        <node CREATED="1533537450713" ID="ID_911640747" MODIFIED="1533539064313" POSITION="right" TEXT="item0000">
            <node CREATED="1533537465796" ID="ID_309793701" MODIFIED="1533539068865" TEXT="item0001"/>
            <node CREATED="1533537482344" ID="ID_1532094515" MODIFIED="1533539073239" TEXT="item0002"/>
        </node>
        <node CREATED="1533537487554" ID="ID_945649757" MODIFIED="1533537493210" POSITION="right" TEXT="item1111">
            <node CREATED="1533537494988" ID="ID_768460083" MODIFIED="1533537498264" TEXT="item1112">
                <node CREATED="1533537498267" ID="ID_905046689" MODIFIED="1533537500950" TEXT="item1113"/>
            </node>
        </node>
        <node CREATED="1533539046822" ID="ID_1972347925" MODIFIED="1533539054268" POSITION="left" TEXT="item2222"/>
    </node>
</map>

なおFreemindで作成したファイルは、インデントなしなので、見やすいようにインデントを付けています。

コレを見るとわかるように、Freemindのフォーマットは

  1. <map version="1.0.1">
  2. <node CREATED="..." ID="ID_..." MODIFIED="..." TEXT="...">

の2つだけで構成されているんですね!

装飾時のフォーマット

Freemindの「自動レイアウト」機能があります。

自動レイアウトの設定

この自動レイアウトを使って、見た目をキレイにしてみました。

自動レイアウト設定後

このときのファイルの中身は、このようになっています。

<map version="1.0.1">
  <!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
  <node COLOR="#000000" CREATED="1533537434576" ID="ID_1019067241" MODIFIED="1533619365153" TEXT="parent">
    <font NAME="SansSerif" SIZE="20"/>
    <hook NAME="accessories/plugins/AutomaticLayout.properties"/>
    <node COLOR="#0033ff" CREATED="1533537450713" ID="ID_911640747" MODIFIED="1533619365145" POSITION="right" TEXT="item0000">
      <edge STYLE="sharp_bezier" WIDTH="8"/>
      <font NAME="SansSerif" SIZE="18"/>
      <node COLOR="#00b439" CREATED="1533537465796" ID="ID_309793701" MODIFIED="1533619365146" TEXT="item0001">
        <edge STYLE="bezier" WIDTH="thin"/>
        <font NAME="SansSerif" SIZE="16"/>
      </node>
      <node COLOR="#00b439" CREATED="1533537482344" ID="ID_1532094515" MODIFIED="1533619365147" TEXT="item0002">
        <edge STYLE="bezier" WIDTH="thin"/>
        <font NAME="SansSerif" SIZE="16"/>
      </node>
    </node>
    <node COLOR="#0033ff" CREATED="1533537487554" ID="ID_945649757" MODIFIED="1533619365148" POSITION="right" TEXT="item1111">
      <edge STYLE="sharp_bezier" WIDTH="8"/>
      <font NAME="SansSerif" SIZE="18"/>
      <node COLOR="#00b439" CREATED="1533537494988" ID="ID_768460083" MODIFIED="1533619365151" TEXT="item1112">
        <edge STYLE="bezier" WIDTH="thin"/>
        <font NAME="SansSerif" SIZE="16"/>
        <node COLOR="#990000" CREATED="1533537498267" ID="ID_905046689" MODIFIED="1533619365151" TEXT="item1113">
          <font NAME="SansSerif" SIZE="14"/>
        </node>
      </node>
    </node>
    <node COLOR="#0033ff" CREATED="1533539046822" ID="ID_1972347925" MODIFIED="1533619365153" POSITION="left" TEXT="item2222">
      <edge STYLE="sharp_bezier" WIDTH="8"/>
      <font NAME="SansSerif" SIZE="18"/>
    </node>
  </node>
</map>

だいぶ長ったらしくなりましたね。

自動レイアウト設定(hook)

自動レイアウトの場合、ルートノード*1の中に、

<hook NAME="accessories/plugins/AutomaticLayout.properties"/>

という要素が組み込まれるようです。

コレを削除しないと、XMLの編集で装飾が変わりませんでした。

なので「NAME」に記載されたものを紐づけて、自動でレイアウト(装飾)を調整していると思われます。

フォント設定(font)

フォントは

<font NAME="SansSerif" SIZE="18"/>

のように設定します。

項目 意味
NAME フォントファミリ(フォント名)
SIZE フォントサイズ

あるノードのXMLタグに含ませると、そのノードにフォント設定が適用されます。

<node ...>      ←このノードに
    <font ...>  ←このフォント情報が適用
</node>

ただしfontを含んでいるノードにのみ適用されるため、その下に子ノードがいたとしても、このフォント情報は適用されません。

またフォント情報をもっていないと、Freemindのデフォルト設定が適用されます。

そのため、親から子までそれぞれフォント設定する場合、すべてのノードにfontを含ませる必要があります。

線の設定(edge)

ノードとノードを結ぶ線の設定です。

親から自分に伸びている線について設定することができます。

これらのように設定することができます。

<edge STYLE="sharp_bezier" WIDTH="8"/>
<edge STYLE="bezier" WIDTH="thin"/>
項目 意味
STYLE 線のスタイル
WIDTH 線の幅

フォント設定同様、ノードのXMLタグに含ませると、そのノードにフォント設定が適用されます。

<node ...>      ←このノードに
    <font ...>  ←このフォント情報が適用
</node>

「旧バージョン」と表示される

Freemind的に、

存在しても問題ないけど、不要なもの

があると「旧バージョン」として扱う模様です。

例えば、先頭にXMLの先頭に書く

<?xml version="1.0" ?>

を入れたりすると、旧バージョンの旨表示が出る。

まぁ無視してしまえば済む話なのですが……

あとがき

ファイルを読み解いて、ファイルフォーマットを書いていきました。

本当は資料がどこかにあるんでしょうけど、いまいち見つからず……

ということで、とりあえず独学で試してみました。

そして実際編集してみると、なんとかなるので、最低限のところはなんとかなるのでしょう!(笑)

*1:中央に作られるノード