Mind Elixir Plaintext Format について
Mind Elixir Plaintext Formatは、Mind Elixirのマインドマップ向けに、インデントで階層を表すテキスト形式とデータ変換方法を説明します。ノード参照、リンク、スタイル、要約に対応し、手動編集やAI生成、ストリーミングに使えます。
主な機能
- 01インデントによるノード階層の表現
- 02ノードへのカスタムID付与
- 03双方向リンクと一方向リンクの定義
- 04JSON風構文によるノードのスタイル設定
- 05要約ノードの作成
- 06テキストとMind Elixirデータの相互変換
活用シーン
- 01AI生成コンテンツをマインドマップに変換
- 02TXTやMarkdownファイルでマインドマップを保存
- 03Gitの差分やマージを使った共同編集
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ssshooter/ mind-elixir-core --skill mind-elixir-plaintext-formatインストール後、Claude Code で/mind-elixir-plaintext-formatを入力して読み込まれたか確認します。
詳細
Mind Elixir プレーンテキスト形式
このスキルでは、Mind Elixir のプレーンテキスト形式の仕様と、Mind Elixir の JSON データ構造との相互変換方法について説明します。プレーンテキスト形式は、人による編集、AI による生成、ストリーミングのシナリオに最適です。
1. 形式の概要
プレーンテキスト形式では、Markdown のリストに似たインデントベースの構文を使用します。各行はマインドマップのノードを表し、インデント(レベルごとに 2 つのスペース)で階層を定義します。
基本構造
- Root Node
- Child Node 1
- Child Node 1-1
- Child Node 1-2
- Child Node 2
- Child Node 2-1
主なルール:
- ルートノードは
-(ダッシュとその後のスペース)で始まります - 各子ノードは親ノードに対して 2 つのスペース分インデントします
- 各ノードの行は
-に続くスペースとトピックのテキストで始まります
2. 高度な機能
2.1 ノード参照(ID)
[^id] 構文を使用して、相互参照用のカスタム ID をノードに割り当てます。
- Root
- Node A [^id1]
- Node B [^id2]
形式: トピックのテキストの末尾に [^customId] を記述します。
2.2 ノードリンク
> プレフィックスと矢印構文を使用して、ノード間の接続を作成します。
双方向リンク
- Root
- Node A [^id1]
- Node B [^id2]
- > [^id1] (10,20) <-Link Label-> (-10,-20) [^id2]
形式: > [^sourceId] (delta1X,delta1Y) <-Label-> (delta2X,delta2Y) [^targetId]
(delta1X,delta1Y):開始ノードからの制御点のオフセットです。(delta2X,delta2Y):終了ノードからの制御点のオフセットです。
ヒント
座標は省略可能です: プレーンテキストを手動で記述または生成する場合(AI による生成など)、
(x,y)座標を省略できます。Mind Elixir は描画時に、バランスの取れたデフォルトのオフセットを自動で計算します。ただし、データをプレーンテキストにエクスポートすると、UI で行った手動調整を保持するため、これらの座標が含まれます。
一方向リンク
- Root
- Node A [^id1]
- Node B [^id2]
- > [^id1] >-Forward Link-> [^id2]
形式:
- 順方向:
> [^sourceId] >-Label-> [^targetId]
2.3 ノードのスタイル設定
JSON に似た構文を使用してインラインスタイルを適用します。
- Root
- Styled Node {"color": "#e87a90"}
- Another Node {"color": "#3298db", "background": "#ecf0f1"}
形式: トピックのテキストの末尾に {"property": "value", "property2": "value2"} を記述します。
一般的なプロパティ:
color:テキストの色(16 進数コード)background:背景色(16 進数コード)fontSize:フォントサイズ(文字列としての数値。例:"16")
2.4 サマリーノード
前にある兄弟ノードを視覚的にまとめるサマリーノードを作成します。
- Root
- Node 1
- Node 2
- Node 3
- } Summary of all above nodes
形式:
} Summary text- 前にあるすべての兄弟ノードをまとめます}:N Summary text- 前にある N 個の兄弟ノードをまとめます(例:最後の 2 つのノードには}:2を使用します)
- Root
- Node 1
- Node 2
- Node 3
- }:2 Summary of Node 2 and Node 3
2.5 完全な例
- Project Planning
- Phase 1: Research [^phase1]
- Market Analysis {"color": "#3298db"}
- Competitor Study {"color": "#3298db"}
- }:2 Research Summary
- Phase 2: Development [^phase2]
- Frontend {"color": "#2ecc71"}
- Backend {"color": "#2ecc71"}
- Testing {"color": "#f39c12"}
- } Development Summary
- Phase 3: Launch [^phase3]
- Marketing
- Deployment
- > [^phase1] (50,0) >-Leads to-> (-50,0) [^phase2]
- > [^phase2] >-Leads to-> [^phase3]
3. 変換 API
3.1 プレーンテキストから Mind Elixir データへの変換
Mind Elixir には、プレーンテキストを解析する組み込みコンバーターが用意されています。
import { plaintextToMindElixir } from 'mind-elixir/plaintextConverter'
const plaintext = `
- Root Node
- Child 1
- Child 2
`
const mindElixirData = plaintextToMindElixir(plaintext)
// Returns MindElixirData object ready for mind.init() or mind.refresh()
3.2 Mind Elixir データからプレーンテキストへの変換
既存のマインドマップをプレーンテキスト形式に戻すこともできます。これはデータのエクスポートや保存に便利です。
import { mindElixirToPlaintext } from 'mind-elixir/plaintextConverter'
const mindElixirData = mind.getAllData()
const plaintext = mindElixirToPlaintext(mindElixirData)
// Returns a string containing the mind map in plaintext format
3.3 統合例
import MindElixir from 'mind-elixir'
import { plaintextToMindElixir } from 'mind-elixir/plaintextConverter'
// 1. Parse plaintext
const plaintext = `
- My Mind Map
- Topic 1
- Subtopic 1.1
- Subtopic 1.2
- Topic 2
`
const data = plaintextToMindElixir(plaintext)
// 2. Initialize Mind Elixir
const mind = new MindElixir({
el: '#map',
direction: MindElixir.RIGHT,
})
mind.init(data)
4. 使用例
4.1 AI 生成のマインドマップ
プレーンテキスト形式は LLM による生成に最適です。
// Prompt example for AI
const prompt = `
Generate a mind map in plaintext format about "Web Development".
Use this format:
- Root Topic
- Subtopic 1
- Detail 1.1
- Subtopic 2
`
// Then parse the AI response
const aiResponse = await callAI(prompt)
const data = plaintextToMindElixir(aiResponse)
mind.refresh(data)
4.2 ファイルベースのマインドマップ
マインドマップを .txt または .md ファイルとして保存します。
// Load from file
const response = await fetch('/mindmaps/project.txt')
const plaintext = await response.text()
const data = plaintextToMindElixir(plaintext)
mind.init(data)
4.3 共同編集
プレーンテキスト形式は、バージョン管理でのマージに適しています。
# Easy to diff and merge in Git
git diff mindmap.txt
5. エラー処理
解析処理は必ず try-catch ブロックで囲みます。
function safeParse(plaintext: string): MindElixirData | null {
try {
return plaintextToMindElixir(plaintext)
} catch (error) {
console.error('Parse error:', error)
// Return fallback data
return {
nodeData: {
id: 'root',
topic: 'Parse Error',
children: []
}
}
}
}
6. ベストプラクティス
- 一貫したインデント: レベルごとに必ず 2 つのスペースを使用します
- 一意の ID: 参照を使用する場合、ドキュメント内で ID が一意になるようにします
- リンクの配置: リンクはどこにでも配置できますが、読みやすさのため、関連するノードの近くに配置します
- 検証: 特にユーザー入力の場合は、解析前にプレーンテキストを検証します
- ストリーミング: ストリーミングのシナリオでは、段階的に解析し、不完全なデータを適切に処理します
7. Format Specification Summary
| Feature | Syntax | Example |
|---|---|---|
| Node | - Topic | - My Node |
| Node with ID | - Topic [^id] | - Node A [^id1] |
| Node with Style | - Topic {"prop": "value"} | - Node {"color": "#ff0000"} |
| Bidirectional Link | > [^id1] (x,y) <-Label-> (x,y) [^id2] | > [^a] (10,20) <-connects-> (-10,-20) [^b] |
| Forward Link | > [^id1] (x,y) >-Label-> (x,y) [^id2] | > [^a] (10,20) >-leads to-> (-10,-20) [^b] |
| Summary (all) | } Summary text | } Overview |
| Summary (N nodes) | }:N Summary text | }:3 Last three items |
8. TypeScript Types
import type { MindElixirData, NodeObj } from 'mind-elixir'
// Converter functions
function plaintextToMindElixir(plaintext: string): MindElixirData
function mindElixirToPlaintext(data: MindElixirData): string