マインドマップを作成中、トピックに自動で通し番号をつけたいと思ったことはありませんか?
例えば、議事録をマインドマップで準備中、議題トピックに進行順序をつけたり、プロジェクトの作業計画を作成中、タスクの優先順位、アンケートの集計結果を整理中、順位をふるなど、これまで手動で、トピックに1.、2. と番号を入力していた、そんなあなたには、便利な「Script」プラグインを使うことを推奨します。
今回は、議事録を題材としたマインドマップで、トピックにテキストまたはアイコンの通し番号を一括して自動採番する例をご紹介します。
(1)選択したトピックに通し番号をふる
- astah* professional又はastah* UMLを起動します(astah*をお持ちでない方は、こちらのページから、評価版をダウンロードできます)
- こちらの手順に従ってastah*にスクリプトプラグインをインストールします
- こちらからスクリプトをダウンロードします(ダウンロード後.zipファイルを解凍してください)
- マインドマップを開き、トピックを選択します。
例では、右下の「議題内容」配下のトピックに、上から順に連番を振りたいので「議題内容」トピックを選択します。

- メインメニュー[ツール]-[スクリプト]を選択して[スクリプト]ウインドウを開きます

- [スクリプト]ウィンドウにて、[ファイル] – [開く]を選択して、ダウンロードした.jsファイルを選択します

- 続けて、[アクション] – [実行]メニュー、もしくは、右矢印のボタンを選択してください
-この時、’number’という変数に’text’/’icon’のどちらかを入れることで、通し番号を、テキストで追加するか、数字のアイコンで追加するかを選択できます。

- トピックに通し番号がつきました。(今回は、数字アイコンを選択しました)
[アイコン通し番号]
*子トピックが21以上あった場合は、アイコン番号は表示されず、astahのアイコンが表示されます。
*先頭にある数字のアイコン以外のアイコンは保持されます
(2)一度振った通し番号を更新する
前述したやり方で通し番号をつけた後に、やっぱり議題順序を変更しようという時があるでしょう。その場合も簡単に更新できます。
- 2番目に用意していた議題を削除して、新しく「スケジュールの確認」という議題を追加しました。

- 「議題内容」トピックを選択し、同じように実行します。すると下図のように番号が更新でき、番号を再度ふりなおすことが出来ました。

(3)複数トピックを選択して、それぞれの子トピックに通し番号を一括で振りたい
(1)(2)では、一つのトピックのみを選択しました。複数のトピックを選択してそれぞれの子トピックに通し番号をしたい、と思う方もいるでしょう。その場合も対応しています。
- 図のように会議の参加者を「チームA」「チームB」と分けました。
この時、岡村さんをチームAの一番目、佐藤さんをチームBの一番目・・・と名付けたい
とします。

- 「チームA」と「チームB」の複数のトピックを選択して、採番します。
下図のようにチーム毎に番号をつけることが出来ました。今回は、アイコンではなく、テ
キストで数字を振りました。

今回紹介したスクリプトはいかがでしたか?
今まで、マインドマップで手動で通し番号をふっていた方、更新する度に修正していた方、ぜひこのスクリプトを使ってみてください!
スクリプトの実行には「astah* Scriptプラグイン」(無償)が必要です。下のボタンをクリックし、Scriptプラグイン詳細ページから、ダウンロード、インストールしてください。

以下、スクリプトの詳細になります。
自分で自由にカスタマイズして使用していただくことも出来ます。
var Key = Java.type('com.change_vision.jude.api.inf.presentation.PresentationPropertyConstants.Key');
var TransactionManager = Java.type('com.change_vision.jude.api.inf.editor.TransactionManager');
var number = 'icon'; // please select text or icon.
putSerialNumber();
function putSerialNumber() {
var topics = getSelectedTopicsInDiagramEditor();
if (topics.length === 0) {
print('Please select a topic');
return;
}
if (number !== 'text' && number !== 'icon') {
print('Please change number to "text" or "icon".');
return;
}
try {
topics.forEach(function (topic) {
if (number === 'text') {
setNumberText(topic);
} else if (number === 'icon') {
setNumberIcon(topic);
}
});
} catch (e) {
print('error: Could not number topics.');
print(e);
return;
}
}
function getSelectedTopicsInDiagramEditor() {
var diagramViewManager = astah.getViewManager().getDiagramViewManager();
var presentations = diagramViewManager.getSelectedPresentations();
return Java.from(presentations).filter(function(p) {
return p.getType() === 'Topic';
});
}
function setNumberText(topic) {
var REGEXP_START_WITH_NUMBER = /^\d+\.\s/;
var children = Java.from(topic.getChildren());
try {
TransactionManager.beginTransaction();
children.forEach(function(child, index) {
var label = child.getLabel();
if (label.search(REGEXP_START_WITH_NUMBER) !== -1) {
label = label.replace(REGEXP_START_WITH_NUMBER, '');
}
var no = index + 1;
child.setLabel(no + '. ' + label);
});
TransactionManager.endTransaction();
} catch (e) {
TransactionManager.abortTransaction();
throw e;
}
}
function setNumberIcon(topic) {
var REGEXP_NUMBER_ICON = /^number_\d+/;
var children = Java.from(topic.getChildren());
try {
TransactionManager.beginTransaction();
children.forEach(function(child, index) {
var icons = child.getProperty(Key.ICONS);
var iconsToKeep = icons.replace(REGEXP_NUMBER_ICON, '');
var no = index + 1;
child.setProperty(Key.ICONS, 'number_' + no + ',' + iconsToKeep);
});
TransactionManager.endTransaction();
} catch (e) {
TransactionManager.abortTransaction();
throw e;
}
}