マインドマップツール(FreeMind)を使ってUSDMを記述し、自動変換してEXCELに　―　作成作業もレビューも効率アップ

# 追記
本稿で紹介しているのと同じ処理をExcelアドイン化して公開しました。以下で使い方等を紹介していますので、よろしければ使ってみてください。

「[ExcelからいきなりFreeMindの.mmファイルを開ける(つまりはXSLTでXMLファイルをXMLSSに自動変換してシートとして開く)Excelアドインの紹介](https://qiita.com/sho1884/items/a522b0f3bab84f412db0)」

# はじめに
USDM（Universal　Specification Describing Manner）の提唱者である清水吉男氏は、ご著書の中でこのUSDMをExcelで書くことを勧めています。要求仕様書がWordのようなワープロツールで書かれることが一般的であることから、それと比較する形でExcelで書くことの利点や応用価値を説明しているのです。

しかし、もう少し制約を取り払うと未だ他の選択肢がありそうです。分割、階層や順番の入れ替えなどの操作性の良さに着目して、私はマインドマップツール(FreeMind)を使ってUSDMを記述してみました。やってみると思った通り、使用頻度の高い入力／編集操作の操作性が良くなるので、非常に効率が上がることが実感できました。
利点はそれだけではなく、一覧性が向上したり、折りたたんだり広げたりで構造も見え易くなったりで、レビューもし易くなりました。

ただ、ベースラインが決まる頃にはやはり表の形にしたくなります。その後、XDDP（eXtreme Derivative Development Process）で大切な役割を担う3 点セットの一つであるレーサビリティ・マトリクスを連結する必要もあります。さらにテスト設計のために広義のHAYST法におけるFV表(機能検証表：Function Verification Table)を連結したりもするので、この段階では表の形式になっていることも重要になります。

そこで、FreeMind（.mm）形式からExcel形式への変換ツールも用意しました。これによってマインドマップツールのデータ形式からExcelの表形式への変換も効率的に行うことができるようになり、双方の形式及びツールから得られる利点をストレスなく享受できるようになりました。

これは一人で満足していてももったいないということで、いくつかの場所で披露したところ、いずれもかなり好評でした。そこで、一部ツール化した部分も含めてやり方を整理し、ここでも紹介することにします。

# 実施方法の説明
まず、何ができるのかざっと見てみましょう
[関係するファイルはGitHubの方に](https://github.com/sho1884/FreeMind2USDM)置きました。

何が置いてあるかというと、まずは以下のような情報が記載されたFreeMindのファイルです。これはFreeMindによるUSDMの記述方法を示しつつ、記述を始めるときの雛形として使ってもらうことを想定したものです。

![FreeMindUSDM.jpg](https://qiita-image-store.s3.amazonaws.com/0/246520/2afadaba-b86e-f0f4-1e58-e2b5c98e6e4b.jpeg)

次に、ここに置いてあるXSLTプログラムを使用すれば、上の画面例のように一定のルールに従って記述されたFreeMindによるUSDMファイルを、下の画面例のような一般に知られているExcelの形式に変換できます。(正確にはXSLTプログラムはExcelで読み込むと以下のような一般に知られているUSDMの形式となるようなXMLファイルに変換します。Excelマクロなどは一切使いません。)

![ExcelUSDM.jpg](https://qiita-image-store.s3.amazonaws.com/0/246520/78c8838f-8c48-6dbd-504d-73110dbd7ecf.jpeg)

以上、それだけです。

## 【記述のルールをもう少し詳しく】

記載ルールはこの雛形を見ればだいたいわかると思いますが、以下のようになります。

- 中央にカテゴリーを記載します。カテゴリー毎に１枚(マインドマップもExcelシートも)の想定です。
- プレーンテキストの使用を前提としています。(リッチテキストは書式が維持されない他、余分な空白が入ります。)
- 項目の判別はアイコン情報のみからなされます(それ以外の色やフォントなどの情報は一切関係しません)ので、対応するアイコンを一つだけ付けてください。以下のように設定されています。(気に入らなければ好みに合わせて変更してください。「FreeMind2ExcelUSDM-xml_utf8.xsl」の先頭で定義していますので、そこだけ変更すれば良いです。)

|         項目       |    アイコン        |
|:------------------|:------------------:|
|要求ID             |         緑の旗      |
|仕様ID             |         青の旗      |
|要求や仕様の「本文」 |        ！          |
|理由               |         ？          |
|説明               |      丸の付いたｉ    |
|グループ           |        フォルダ      |
|備考               |        赤鉛筆       |

- 上記指定のアイコンが付いていないものは全て変換の対象外です。（アイコンを付け忘れるとそこは一切出て来ないので注意してください。）
- グループのノードはグループに含まれる全てのノードの親にするか直近の長兄にするか好きな方を選べます。
    - 長兄の方が一覧性が良いかもしれませんが、親にしておけば簡単にグループ単位で畳むことが出来ます。
- 木の構造がUSDMの違反にならなければ問題は起こらないと思います。（逆にルール違反は特にエラーチェックしていません。）
- 「備考」はUSDMとしての木のリーフにのみ付けられます。つまりは要求や仕様の「本文」か「理由」「説明」に付けられます。

##【変換方法の説明】
「FreeMind2ExcelUSDM-xml_utf8.xsl」が変換規則が記述されている本体です。
（以下Windowsでの使い方を示します。）

- FreeMindの以下のメニューから使用します。
    - ファイル -> エクスポート -> XSLTを使用...

![FreeMindXSLT.jpg](https://qiita-image-store.s3.amazonaws.com/0/246520/a28af26a-2f4b-af69-e45d-fbc31f7d32c4.jpeg)

- 出てきたダイアログの「XSLファイルを選択」で「FreeMind2ExcelUSDM-xml_utf8.xsl」のファイルを指定します。

![FreeMindXSLT2.jpg](https://qiita-image-store.s3.amazonaws.com/0/246520/2fa79eac-d9f0-7741-158b-8e647fb69c34.jpeg)

- 「エクスポートファイルを選択」の方に出力先ファイルを指定します。
    - （拡張子は.xmlが良いでしょう。）
- そして「エクスポート」ボタンを押します。
- 変換出力されたxmlファイルを右クリックし、出てきたメニューから
    - プログラムから開く -> Excel

以上で、Excelが起動してUSDMが読み込まれます。

実はこの表の形は[スパークスシステムズ ジャパン株式会社さんのEnterprise ArchitectのUSDMアドイン](https://www.sparxsystems.jp/products/EA/tech/USDM.htm)が生成する形式を参考に、それに揃えて作ってあります。
これはどちらで作業しても結局同じ形式のものが得られることが望ましいと考えたからです。(作業者が要求側なのか開発側なのかで使用ツール環境も変わりますので。)

Enterprise Architectのように専用のツールを使う利点の一つは、ルール違反を指摘してくれることです。それに対してここで示したFreeMindを使う方法では、そのチェックはしてくれません。作成したデータにルール違反がないかは自分で確認する必要があります。

# おまけ（感想）
XSLTでのプログラミングは楽しいです。
しかしあまり自分で書く機会はありませんね。
テーブル型のデータに対しては簡単に機械的に処理できてしまうので、開発環境が自動生成してしまうからですね。しかし、データがツリー構造になると多少は自分で頭を使わなければならないということになるのでしょう。（高価なツールを使用している場合は別かもしれないですが。）
再帰的な処理が基本となるので、LISPやSchemeでプログラミングしていた頃の感覚が蘇って来ます。
[DSSSL(Document Style Semantics and Specification Language)](https://ja.wikipedia.org/wiki/Document_Style_Semantics_and_Specification_Language)を作った人たちの気持ちがわかったような気になります。