← 作品一覧に戻る

manidoc ユーザーマニュアル


1. 概要

Manidoc は、ドキュメントの作成・自動化・管理をひとつにまとめたアプリです。 AI による文章生成・情報収集、ひな型からの一括作成、FTP・Git などの外部ツール連携まで、スクリプト機能で思い通りに自動化できます。

2. ワークスペースとは

Manidoc の作業データをまとめて保存するフォルダのことです。 初回起動時に「どのフォルダを使うか」を選びます。 複数のパソコンで共有する場合は、OneDrive や Dropbox などのクラウドフォルダを指定することもできます。

ワークスペースとは

3. はじめに ― 基本的な考え方

3.1. プロジェクトとは

1冊のドキュメントに相当するものです。 ワークスペースの中に複数のプロジェクトを作れます。 例:

  • 「製品リリースノート」
  • 「サービス紹介ページ」
  • 「技術調査レポート(AI で自動収集)」
  • 「定期更新手順書(スクリプトで自動生成)」
  • 「競合サイト・最新情報のまとめ(Web 情報収集)」
  • 「アイデアメモ・企画ノート」
プロジェクトとは

3.2. ノードとは

プロジェクトの中の「1つの見出し(ページ)」です。 各ノードには以下の内容を持たせられます。 ノードは階層(親子関係)を作れます。 例:「基本操作」の下に「ログイン方法」「ログアウト方法」を置く、といった構成が可能です。

ノードとは

4. スタート画面の使い方

アプリを起動すると最初に表示される画面です。 左側でワークスペースやプロジェクトの操作を行い、右側でプロジェクト一覧・AI・スクリプトを使います。

4.1. ワークスペースを選ぶ

画面左上の「ワークスペース」欄に、データを保存したいフォルダのパスを入力します。 「参照」ボタンでフォルダを選ぶこともできます。

ワークスペースを選ぶ

4.2. 新しいプロジェクトを作る

  1. 「新規プロジェクト名」に名前を入力します
  2. 「作成して開く」ボタンを押します
  3. そのままプロジェクトの編集画面が開きます
新しいプロジェクトを作る

4.3. 既存のプロジェクトを開く

右側の「最近のプロジェクト」タブに一覧が表示されています。 開きたいプロジェクトをダブルクリックしてください。

既存のプロジェクトを開く

4.4. プロジェクトの並び替え

プロジェクト一覧の順番は2通りの方法で変えられます。 並び替えた順番は自動的に保存されます。

プロジェクトの並び替え

4.5. タグ機能

プロジェクトに「タグ」を付けると、一覧を整理したり、Web 一括出力を階層構造にしたりできます。

タグ機能

4.5.1. タグを割り当てる

各プロジェクト行の右端にあるドロップダウン(コンボボックス)からタグを選ぶだけです。 「(なし)」を選ぶとタグなし状態に戻ります。

タグを割り当てる

4.5.2. タグを追加・編集する(タグ管理)

スタート画面の「🏷 タグ管理」ボタンを押すと タグ管理ダイアログ が開きます。

タグを追加・編集する(タグ管理)

タグ名を空白のままにすると保存できません。必ず名前を入力してください。

4.5.3. タグでグループ化する

スタート画面の「タグでグループ化」ボタンを押すと、プロジェクト一覧がタグごとにまとめて表示されます。 もう一度押すと通常表示(SortOrder 順)に戻ります。

タグでグループ化する

4.5.4. Web 一括出力とタグの関係

「🌐 Web 一括出力」を実行したとき、タグが設定されているプロジェクトが 1 件以上ある場合は 階層構造 で出力されます。

出力フォルダ/
├── index.html          ← トップページ(タグタイル + タグなしプロジェクト)
├── tag_0/
│   ├── index.html      ← タグ「操作マニュアル」のサブページ(プロジェクトタイル)
│   └── tagimg.png      ← タグ画像(設定した場合)
├── tag_1/
│   └── index.html      ← タグ「設定ガイド」のサブページ
├── a/                  ← 各プロジェクトの HTML(従来通り)
└── b/
  • トップページ:タグをカード形式で一覧。各カードをクリックするとそのタグのサブページへ。
  • タグサブページ:そのタグに属するプロジェクトを一覧表示。「← トップへ戻る」リンク付き。
  • タグなしプロジェクト:トップページの下部に「(タグなし)」セクションとして直接表示。
  • タグが 1 件も設定されていない場合は従来通りのフラット構造で出力されます。

4.6. プロジェクトを読み込む(インポート)

すでにある資料を取り込んでプロジェクトにできます。ワークスペースを選択してから各ボタンが有効になります。

プロジェクトを読み込む(インポート)

4.6.1. MD ファイルからインポート

Markdown 形式(.md)のテキストファイルを選択してプロジェクトに取り込みます。 既存の Markdown 資料をそのまま Manidoc で編集・管理したいときに使います。

MD ファイルからインポート

4.6.2. HTML ファイルからインポート

HTML 形式(.html)のファイルを選択してプロジェクトに取り込みます。 Web ページを保存したファイルや HTML で書かれたドキュメントを取り込めます。

HTML ファイルからインポート

4.6.3. Web サイトからインポート

URL を入力してウェブページを直接取り込みます。 公開されているページの内容をそのまま Manidoc プロジェクトとして編集できます。

Web サイトからインポート

5. プロジェクトの編集

プロジェクトをダブルクリックすると編集画面が開きます。 画面は左・中央・右の3列に分かれています。

5.1. ツールバーの操作

編集画面上部のツールバーから、よく使う操作にすばやくアクセスできます。

ツールバーの操作

5.1.1. 保存する

「保存」ボタンを押すと、現在のプロジェクトのすべてのノードをファイルに保存します。

5.1.2. 再読み込みする

「再読み込み」ボタンを押すと、ファイルから最新の内容を読み込みます。 外部から変更があった場合や、変更を破棄してファイルの状態に戻したいときに使います。

5.1.3. ブラウザを起動する

URL を入力して「ブラウザ起動」ボタンを押すと、アプリ内のブラウザでそのページを開きます。 開いたページのキャプチャをノードの画像として取り込む操作と組み合わせて使えます。

5.1.4. テーマ(ライト/ダーク)を切り替える

ツールバーの「テーマ切替」ボタンで、アプリ全体のライトモードとダークモードを切り替えます。 設定は次回起動時も引き継がれます。

5.2. 左パネル ― ノード一覧(構成ツリー)

マニュアルの目次のような一覧です。 クリックするとそのノードの内容が中央に表示されます。 ノードを追加する 「+ 項目追加」ボタンで新しいノードを追加します。 ノード一覧を右クリックするとコンテキストメニューが表示されます。 ノードを並べ替える ドラッグ&ドロップと矢印ボタンの 2 とおりの方法があります。 ドラッグ&ドロップ:

  • ノードをドラッグし、移動先の上半分にドロップすると、同じ階層の直前に挿入されます(青いラインが表示)
  • ノードをドラッグし、移動先の下半分にドロップすると、そのノードの子として追加されます(青い背景が表示)
  • 自分の子孫ノードへのドロップは自動的に無効化されます(循環防止) 矢印ボタン:
  • ↑↓ で同じ階層内の順番を 1 つずつ変えます
  • ← で親と同じ階層に昇格、→ で直前の兄弟ノードの子に降格します ノードを削除する ゴミ箱アイコン(🗑)で削除します。削除したノードは元に戻せないので注意してください。 選択ノードの点滅表示 現在選択中のノードは、テーマに応じた色でゆっくり点滅します。
  • ダークモード:青色で点滅
  • ライトモード:緑色で点滅 どのノードが作業対象になっているかが一目でわかります。

キーワード検索 左パネル上部の検索ボックスにキーワードを入力して Enter を押すと、全ノードのタイトル・記事・コメントを横断検索します。 検索結果をクリックすると、該当ノードが表示され、エディタ内でキーワードがハイライト・選択されます。

キーワード置換 検索ボックスの下にある置換ボックスに置換後のテキストを入力して Enter を押すと、置換モードに切り替わります。 置換はノード・エリア(記事/コメント/タイトル)ごとにスナップショットを保存します。[戻す] を押すと、そのノード・エリアの最初の置換前の状態まで戻ります。

左パネル ― ノード一覧(構成ツリー)

5.3. 中央パネル ― ノードの編集

選択したノードの内容を入力・編集する場所です。

中央パネル ― ノードの編集

5.3.1. タイトルを入力する

一番上のテキスト欄に見出しを入力します。

タイトルを入力する

5.3.2. 記事(本文)を書く

文章を入力するエリアです。 ツールバーのボタンで 太字斜体・取消線・箇条書き・番号付きリスト・表などの書式を付けられます。 よく使うボタン: 「✨ AIアシスタント」ボタンを押すと、AI が文章の改善案を提案します。 「📝 編集拡大」ボタンを押すと、広い画面で編集できます。

記事(本文)を書く

5.3.3. 表示倍率を変える(ズーム)

ツールバー右端の「-」「+」ボタンで文字の表示倍率を変えられます。 現在の倍率はボタン間にパーセントで表示されます(例:100%)。 Ctrl + マウスホイール でも倍率を変えられます。

  • 範囲:50% ~ 300%
  • 設定は記事エリア・コメントエリアそれぞれ個別に保存されます
  • アプリを終了して再起動しても前回の倍率が維持されます
表示倍率を変える(ズーム)

5.3.4. 画像を設定する

ノードに1枚の画像を紐付けられます。

  • 「画像を選択」:手持ちの画像ファイルを選ぶ
  • 「✨ AI で画像を生成」:テキストで説明すると AI が画像を自動生成する
  • 「編集」:画像にトリミング・枠線・文字を追加する
  • 「クリア」:設定した画像を削除する 画像ファイルはプロジェクトフォルダ内の images フォルダに自動保存されます。
画像を設定する

5.3.5. 画像エリアの拡縮ボタン

画像エリアの上下にボタンがあり、作業内容に応じてエリアの広さを切り替えられます。

画像エリアの拡縮ボタン

5.3.6. コメント(補足)を書く

記事とは別に、注意事項や補足情報を書く欄です。 HTML 出力時に記事の下に「補足」として表示されます。

コメント(補足)を書く

5.4. 右パネル ― プレビュー

編集内容を HTML で表示したイメージをリアルタイムで確認できます。 スライダーで表示倍率を調整できます(25%〜150%)。

右パネル ― プレビュー

6. 画面キャプチャをノードに貼り付ける

マニュアルによく使う「操作画面のスクリーンショット」を簡単に挿入できます。

6.1. 手順

  1. 「他のアプリにアタッチ」ボタンを押します
  2. キャプチャしたいアプリのウィンドウをリストから選んで「選択」を押します (自分のアプリ〔Manidoc〕は一番上に表示されます)
  3. キャプチャしたいノードを左パネルで選択します
  4. 「キャプチャ」ボタンを押すと、指定したウィンドウの画面が画像として挿入されます
手順

6.2. ブラウザ操作のキャプチャ

  1. URL 入力欄にアドレスを入力して「ブラウザ起動」ボタンを押します
  2. ブラウザが自動的に起動し、Manidoc がそのウィンドウを検出します
  3. ブラウザで目的の画面を表示してから「キャプチャ」ボタンを押します
ブラウザ操作のキャプチャ

7. AI 機能を使う

Manidoc には複数の AI 機能があります。使うには AI プロバイダーの設定が必要です。 (「⚙ 設定」→「AI モデル設定」タブから設定してください) 対応している AI プロバイダー:

  • Gemini API(Google) — クラウド型。Google AI Studio で API キーを取得して使います。
  • ローカルLLM(LM Studio 等) — ローカル動作型。LM Studio などを起動してエンドポイント URL を設定します。

7.1. AI チャット(AIエージェントタブ)

スタート画面の「AI エージェント」タブでAIと会話ができます。 マニュアルの内容を相談したり、情報を調べてもらったりできます。 主なボタン:

AI チャット(AIエージェントタブ)

7.2. AI で文章を改善する(記事・コメント編集時)

編集エリアの「✨ AIアシスタント」ボタンを押すと、AI が文章の改善案を提案します。 どのように直してほしいか指示を入力して「実行」を押してください。 提案内容を確認したら「編集内容を反映する」で本文に取り込みます。

AI で文章を改善する(記事・コメント編集時)

注意: AIアシスタントを使用すると、文字色やフォントサイズなどの書式設定は失われます。書式を保持したい場合は、AIアシストを使用する前に書式設定を行うか、反映後に再設定してください。

7.3. AI で画像を生成する

ノード編集画面の「AI への追加指示」欄に、作りたい画像の説明を書いてください。 例:「青いボタンを押す操作の図解」 「✨ AI で画像を生成」ボタンを押すと画像が作成されます。

AI で画像を生成する

8. 書き出し(エクスポート)

作成したプロジェクトを HTML や Markdown で書き出せます。

8.1. HTML 出力

プロジェクト編集画面の「HTML 出力」ボタンを押します。 書き出されたフォルダに index.html が作成されます。ブラウザで開けばそのまま閲覧できます。 HTML 出力では以下の機能が自動で付きます:

  • 目次メニュー(左側のハンバーガーメニュー)
  • 見出し番号(設定でオン/オフ)
  • 音声読み上げボタン(設定でオン/オフ)
  • 画像の自動圧縮(設定でオン/オフ)
HTML 出力

8.1.1. 目次をつける

ツールバーの「目次をつける」チェックボックスをオンにすると、HTML 出力時にページ上部に目次が自動生成されます。 チェックを外すと目次なしで出力されます。

目次をつける

8.2. Markdown 出力

プロジェクト編集画面の「MD 出力」ボタンを押します。 プロジェクトの内容が .md ファイルとして保存されます。

Markdown 出力

8.3. Web サイトとして一括出力(全プロジェクト)

スタート画面の「🌐 Web 一括出力」ボタンを押すと、 ワークスペース内の全プロジェクトをまとめて1つの Web サイトとして書き出せます。 書き出された index.html を開くと、全プロジェクトの一覧ページが表示されます。

Web サイトとして一括出力(全プロジェクト)

9. テーマ(デザイン)をカスタマイズする

HTML 出力時のデザインを変更できます。

テーマ(デザイン)をカスタマイズする

9.1. ライト/ダークテーマを切り替える

スタート画面右上の「🌙 テーマ切替」ボタンを押すたびに、ライトモードとダークモードが切り替わります。 設定は次回起動時も引き継がれます。

ライト/ダークテーマを切り替える

9.2. 既存のテーマを選ぶ

プロジェクト編集画面の右上にある「CSS テーマ選択」のドロップダウンから選択します。

既存のテーマを選ぶ

9.3. AI でオリジナルテーマを作る

スタート画面右上の「🎨 AI テーマ作成」ボタンを押します。 「どんなデザインにしたいか」を文章で入力して「✨ AI で CSS を生成」を押すと オリジナルのデザインテーマが作成されます。 気に入ったら「書き出して保存」でテーマとして保存できます。

AI でオリジナルテーマを作る

注意: AI テーマ作成は Gemini API が必要です。ローカルLLM(LM Studio 等)では利用できません。

9.4. テーマファイルを直接編集する

保存済みのテーマファイル({ワークスペース}/themes/テーマ名.css)をテキストエディタで直接編集できます。 テーマファイルは主に :root { } ブロック(色・フォントサイズなどの変数定義)で構成されていますが、 それ以外の CSS ルールを追加することも可能です。

/* :root の変数定義 — AI テーマ作成で生成される部分 */
:root {
  --primary-color: #0056b3;
  --main-bg-color: #FAF7F2;
}

/* ここから先は自由に追加できる — HTML 出力時も保持されます */
h2 {
  border-left: 4px solid var(--primary-color);
  padding-left: 8px;
}
.comment-section {
  font-style: italic;
}

:root 以外に追加したルールは HTML 出力時に上書きされません。 ファイルを編集したあとは、そのままプロジェクトに適用して出力できます。

10. ヘルプを見る

操作方法がわからなくなったときは、ヘルプモードを使うと素早く該当箇所のマニュアルを開けます。

ヘルプを見る

10.1. ヘルプモードの使い方

  1. プロジェクト編集画面の右上ツールバーにある 「?」ボタン をクリックしてヘルプモードをオンにします。
    • カーソルが疑問符(❓)に変わります。
  2. 説明を見たい画面要素(ボタン・エディタ・パネルなど)をクリックします。
    • 通常の操作は行われず、代わりにヘルプウィンドウが開きます。
  3. マニュアルの該当セクションへ自動でスクロールし、オレンジ色でハイライト表示されます。
  4. ヘルプを閉じるには、もう一度 「?」ボタン をクリックしてヘルプモードをオフにします。

10.2. ヘルプウィンドウについて

  • ヘルプウィンドウは画面右端に表示されます。
  • ウィンドウは自由にリサイズ・移動できます。
  • 一度開いたウィンドウは、別の箇所をクリックしても再利用されます(ページを再ロードせずスクロールのみ行います)。

10.3. ヘルプウィンドウ内を検索する

ヘルプウィンドウにフォーカスを移して Ctrl+F を押すと、ページ内検索バーが表示されます。 キーワードを入力するとマニュアル内の該当箇所をハイライト表示できます。

ヘルプウィンドウ内を検索する

ヒント: ヘルプモード中はアプリの操作が一切無効になります。クリックはすべてヘルプジャンプとして扱われます。

11. バックアップと復元

大切なデータは定期的にバックアップをおすすめします。

11.1. プロジェクト単体のバックアップ

プロジェクト一覧の「バックアップ」ボタンを押すと、そのプロジェクトが ZIP ファイルとして保存されます。

プロジェクト単体のバックアップ

11.2. ワークスペース全体のバックアップ

スタート画面の「💾 WS バックアップ」ボタンを押すと、全プロジェクトをまとめて ZIP ファイルに保存できます。

ワークスペース全体のバックアップ

11.3. 復元する

「📂 WS 復元」または「PJ 復元」ボタンでバックアップした ZIP ファイルを選択すると、元の状態に戻せます。

12. スクリプト機能(マクロ)

「スクリプト」タブでは、JavaScript で書かれた自動処理(マクロ)を実行できます。 「複数のプロジェクトをまとめて処理したい」「毎回同じ操作を自動化したい」 といった用途に役立ちます。プログラムの知識がなくても、AI に頼めばすぐ作れます。

12.1. スクリプトファイルの置き場所

ワークスペースフォルダの中にある scripts フォルダに .js ファイルを保存してください。 「📁 フォルダを開く」ボタンでそのフォルダを直接開けます。

12.2. スクリプトを実行する

  1. 「🔄 更新」ボタンで一覧を最新にします
  2. 実行したいスクリプトの「▶ 実行」ボタンを押します
  3. 実行結果が画面下のログエリアに表示されます
  4. 途中で止めたいときは「⏹ 停止」ボタンを押します

12.3. スクリプトを AI に書いてもらう

スクリプトの作成は ChatGPT や Gemini などの AI に任せられます。 以下の手順で依頼してください。

  1. Manidoc スクリプト API リファレンス(別ファイル)を AI に渡す
  2. 「〇〇をするスクリプトを書いて」と日本語で説明する
  3. 出力されたスクリプトを scripts フォルダに保存して実行する

例: 「全プロジェクトを一覧にして CSV ファイルに書き出すスクリプトを作って」

12.4. スクリプトでできること

12.4.1. ① AI で文章を自動生成・情報収集し、ひな型から一括作成

製品名やテーマのリストを用意しておけば、AI がそれぞれのドキュメントを自動で作り上げます。

// 製品リストを読み込み、各製品のマニュアルをAIに自動生成させる
var products = manidoc.readFile("data/products.txt").split("\n");

for (var i = 0; i < products.length; i++) {
    var name = products[i].trim();
    if (name === "") continue;

    var md = manidoc.askAIText(name + "の操作マニュアルをMarkdownで書いてください。## で章を分けること。");
    var proj = manidoc.createProject(name + " マニュアル");
    var top = proj.addNode("はじめに");
    top.importMarkdown(md);
    proj.save();
    manidoc.log(name + " 完了");
}

12.4.2. ② 画面キャプチャを自動でノードに貼り付け

アプリの画面を順番にキャプチャして、対応するノードへ自動的に挿入できます。

// 開いているアプリの画面を順番にキャプチャしてノードに貼り付ける
var proj = manidoc.openProject("操作マニュアル");
var steps = ["ログイン画面", "メインメニュー", "設定画面"];

for (var i = 0; i < steps.length; i++) {
    var node = proj.findNode(steps[i]);
    if (node === null) node = proj.addNode(steps[i]);

    var path = manidoc.captureWindow("MyApp", "screenshots/" + i + ".png");
    node.setImage(path);
    manidoc.log(steps[i] + " キャプチャ完了");
    manidoc.sleep(1000);
}
proj.save();

12.4.3. ③ FTP・Git などの外部コマンドをスクリプトから直接実行

HTML 書き出し → Git コミット → FTP アップロードまでをボタン1つで完結できます。

// HTML出力してGitにコミット、FTPでサーバーにアップロード
var proj = manidoc.openProject("製品マニュアル");
var htmlPath = proj.exportHtml(true);
manidoc.log("HTML出力: " + htmlPath);

// Git コミット
var git = manidoc.execute("git add . && git commit -m \"マニュアル更新\"");
manidoc.log(git.success ? "Gitコミット完了" : "Gitエラー: " + git.error);

// FTP アップロード
var ftp = manidoc.execute("curl -T export/index.html ftp://user:pass@example.com/public_html/", 60);
manidoc.log(ftp.success ? "FTPアップロード完了" : "FTPエラー: " + ftp.error);

12.4.4. ④ HTML・Markdown 形式でそのまま公開・共有

全プロジェクトを両形式で一括書き出しできます。

// 全プロジェクトをHTML・Markdownの両形式で一括書き出し
var names = manidoc.getProjects();
manidoc.log("対象: " + names.length + " プロジェクト");

for (var i = 0; i < names.length; i++) {
    var proj = manidoc.openProject(names[i]);
    if (proj === null) continue;

    var html = proj.exportHtml(true);
    var md   = proj.exportMarkdown();
    manidoc.log(names[i] + " → HTML: " + html);
    manidoc.log(names[i] + " → MD:   " + md);
}
manidoc.log("一括書き出し完了");

13. 設定

スタート画面右上の「⚙ 設定」から各種設定を変更できます。

13.1. AI モデル設定タブ

Gemini API キーについて Google AI Studio で無料取得できますが、 Web 検索(Grounding)や画像生成は有料プランが必要な場合があります。

ローカルLLM について LM Studio 等のローカル推論サーバーを起動し、エンドポイント URL を設定してください。 Web 検索・画像生成には対応していません。API キーは不要です。

13.2. エクスポート設定タブ

14. キーボードショートカット

15. よくある質問

15.1. Q. AI が返答してくれません

API キーが設定されているか「⚙ 設定」で確認してください。無料枠を超えた場合は、しばらく待ってから再度お試しください。

15.2. Q. プロジェクトが一覧に表示されません

ワークスペースのフォルダが正しく選択されているか確認してください。

15.3. Q. HTML 出力した画像が表示されない

出力フォルダを別の場所に移動すると画像パスが壊れることがあります。フォルダごとコピーして移動してください。

15.4. Q. スクリプトの書き方がわかりません

このマニュアルの末尾にある「スクリプト API リファレンス」を ChatGPT や Gemini などの AI に渡して「〇〇をするスクリプトを書いて」と頼むと、すぐに動くスクリプトを作ってもらえます。

16. スクリプト API リファレンス

このセクションは、AI にスクリプトを書いてもらうときに一緒に渡す仕様書です。 スクリプトは JavaScript で書き、manidoc オブジェクトを通じて Manidoc を操作します。

制限事項

  • メモリ上限:32MB
  • 実行時間:デフォルト 60 秒(超過すると自動停止)。manidoc.setTimeout() で変更可能(後述)
  • ファイル操作はワークスペースフォルダ内のみ可能

16.1. 基本的な書き方

// ログを出力する
manidoc.log("処理開始");

// プロジェクトを作成してノードを追加する
var proj = manidoc.createProject("マニュアル名");
var node = proj.addNode("はじめに");
node.article = "ここに本文を書きます。";
proj.save();

manidoc.log("完了");

16.2. manidoc オブジェクト ― プロジェクト操作

16.2.1. manidoc.createProject( プロジェクト名 )

新しいプロジェクトを作成します。

var proj = manidoc.createProject("新しいマニュアル");

16.2.2. manidoc.openProject( プロジェクト名 )

既存のプロジェクトを名前で開きます。名前は部分一致で検索します。 見つからない場合は null が返ります。

var proj = manidoc.openProject("社内システム");
if (proj === null) {
    manidoc.log("プロジェクトが見つかりません");
}

16.2.3. manidoc.openProjectByRegex( 正規表現パターン )

正規表現パターンにマッチするプロジェクトを開きます。 名前が完全にわかっていないときや、条件で絞り込みたいときに使います。 見つからない場合は null が返ります。

// 「2026」という文字を含むプロジェクトを開く
var proj = manidoc.openProjectByRegex("2026");

// 「製品」で始まるプロジェクトを開く
var proj = manidoc.openProjectByRegex("^製品");

if (proj === null) {
    manidoc.log("該当プロジェクトが見つかりません");
}

16.2.4. manidoc.getProjects()

ワークスペース内の全プロジェクト名を配列で返します。

var names = manidoc.getProjects();
for (var i = 0; i < names.length; i++) {
    manidoc.log(names[i]);
}

16.2.5. manidoc.deleteProject( プロジェクト名 )

プロジェクトを完全に削除します。元に戻せないので注意してください。

manidoc.deleteProject("不要なプロジェクト");

16.2.6. manidoc.importFromMarkdown( ファイルパス )

Markdown ファイルからプロジェクトをインポートします。 パスはワークスペースフォルダからの相対パスで指定できます。

var proj = manidoc.importFromMarkdown("docs/manual.md");

16.3. プロジェクト(proj)の操作

createProject または openProject で取得したオブジェクトに対して使います。

16.3.1. プロパティ

16.3.2. proj.save()

変更内容をファイルに保存します。編集後は必ず呼んでください。

proj.name = "新しい名前";
proj.save();

16.3.3. proj.addNode( タイトル )

ルートノードを追加します。追加されたノードを返します。

var node = proj.addNode("第1章 基本操作");

16.3.4. proj.getNode( タイトル )

ルートノードをタイトルで検索します。完全一致です。

var node = proj.getNode("第1章 基本操作");

16.3.5. proj.findNode( タイトル )

全階層(子ノード含む)からタイトルで検索します。

var node = proj.findNode("ログイン方法");

16.3.6. proj.getNodes()

全ルートノードを配列で返します。

var nodes = proj.getNodes();
for (var i = 0; i < nodes.length; i++) {
    manidoc.log(nodes[i].title);
}

16.3.7. proj.removeNode( タイトル )

指定タイトルのルートノードを削除します。

proj.removeNode("不要な章");
proj.save();

16.3.8. proj.exportHtml( 目次あり )

プロジェクトを HTML ファイルとして書き出します。 出力された index.html のパスを返します。

var path = proj.exportHtml(true);   // true = 目次あり
manidoc.log("出力先: " + path);

16.3.9. proj.exportMarkdown()

プロジェクトを Markdown ファイルとして書き出します。 出力されたファイルのパスを返します。

var path = proj.exportMarkdown();
manidoc.log("出力先: " + path);

16.4. ノード(node)の操作

addNode / getNode / findNode などで取得したオブジェクトに対して使います。

16.4.1. ノードのプロパティ

node.title = "ログイン方法";
node.article = "## 手順\n1. ID を入力\n2. パスワードを入力\n3. ログインボタンを押す";
node.comment = "パスワードは8文字以上が必要です。";
proj.save();

16.4.2. node.addChild( タイトル )

子ノードを追加します。

var parent = proj.addNode("基本操作");
var child = parent.addChild("ログイン方法");
child.article = "ログインの手順です。";
proj.save();

16.4.3. node.getChild( タイトル )

直接の子ノードをタイトルで検索します。

var child = node.getChild("ログイン方法");

16.4.4. node.getChildren()

全子ノードを配列で返します。

var children = node.getChildren();

16.4.5. node.setImage( 画像ファイルパス )

画像ファイルをノードに設定します。 ファイルはプロジェクトの images フォルダに自動コピーされます。

node.setImage("screenshots/login.png");
proj.save();

16.4.6. node.setOptimizedImage( 画像ファイルパス, 品質, 最大サイズ )

画像を圧縮してからノードに設定します。ファイルサイズを小さくしたいときに使います。

// 品質80、最大1920px でリサイズして設定
node.setOptimizedImage("screenshots/login.png", 80, 1920);
proj.save();

16.4.7. node.clearImage()

ノードに設定されている画像を削除します。

node.clearImage();
proj.save();

16.4.8. node.importMarkdown( Markdown テキスト )

Markdown テキストをパースして、このノードの子ノードとして追加します。 AI の応答をそのまま渡してノード構造を自動生成する用途に便利です。

  • 先頭の # 見出し はこのノードのタイトルに使用されます
  • ## 以降の見出しが子ノードになります(階層も維持されます)
  • 戻り値は追加された子ノードの配列です
var node = proj.addNode("第1章 基本操作");

// AI に Markdown で内容を書かせて、子ノードとして展開
var md = manidoc.askAIText("「基本操作」の操作マニュアルを Markdown で書いて。## で各手順を分けること。");
node.importMarkdown(md);

proj.save();

16.5. manidoc オブジェクト ― 画面キャプチャ

16.5.1. manidoc.captureWindow( ウィンドウタイトル, 保存先パス )

指定した名前のウィンドウをキャプチャして画像ファイルに保存します。 ウィンドウタイトルは部分一致で検索します。

var path = manidoc.captureWindow("Google Chrome", "screenshots/chrome.png");
node.setImage(path);
proj.save();

16.5.2. manidoc.captureSelf( 保存先パス )

Manidoc 自身のウィンドウをキャプチャして保存します。 ウィンドウタイトルの指定は不要です。

var path = manidoc.captureSelf("screenshots/manidoc.png");
node.setImage(path);
proj.save();

16.6. manidoc オブジェクト ― ファイル操作

すべてのパスはワークスペースフォルダからの相対パスで指定します。

16.6.1. manidoc.readFile( パス )

テキストファイルを読み込んで内容を返します。

var text = manidoc.readFile("data/list.txt");

16.6.2. manidoc.writeFile( パス, 内容 )

テキストファイルを書き込みます。ファイルが存在しない場合は新規作成します。

manidoc.writeFile("output/result.txt", "処理完了");

16.6.3. manidoc.fileExists( パス )

ファイルまたはフォルダが存在するか確認します。

if (manidoc.fileExists("data/list.txt")) {
    manidoc.log("ファイルあり");
}

16.6.4. manidoc.deleteFile( パス )

ファイルまたはフォルダを削除します。

manidoc.deleteFile("output/old_result.txt");

16.7. manidoc オブジェクト ― ログと情報

16.7.1. manidoc.log( メッセージ )

実行ログにメッセージを記録します。スクリプトタブのログエリアに表示されます。

manidoc.log("処理が完了しました");

16.7.2. manidoc.getLog()

これまでに記録した全ログを1つの文字列にまとめて返します。

var allLog = manidoc.getLog();

16.7.3. manidoc.saveLog( 保存先パス )

これまでのログをファイルに保存します。

manidoc.saveLog("logs/run_log.md");

16.7.4. manidoc.now()

現在の日時を yyyy/MM/dd HH:mm:ss 形式の文字列で返します。

manidoc.log("実行日時: " + manidoc.now());

16.7.5. manidoc.getWorkspacePath()

ワークスペースフォルダの絶対パスを返します。

manidoc.log("ワークスペース: " + manidoc.getWorkspacePath());

16.7.6. manidoc.sleep( ミリ秒 )

指定した時間(ミリ秒)だけ処理を止めて待ちます。

manidoc.sleep(1000);  // 1秒待つ

16.7.7. manidoc.version()

スクリプト API のバージョンを返します。

manidoc.log("API バージョン: " + manidoc.version());

16.7.8. manidoc.setTimeout( 秒数 )

スクリプトの実行タイムアウトを変更します。 スクリプトの先頭行に書く必要があります。 途中に書いても効果はありません。

// 例1:タイムアウトを5分(300秒)に延長する
manidoc.setTimeout(300);

// 例2:タイムアウトを無制限にする(長時間バッチ処理向け)
manidoc.setTimeout(0);

manidoc.log("処理開始");
// ... 長い処理 ...
manidoc.log("完了");

注意: setTimeout(0) は長時間ループや無限ループの場合に Manidoc が応答しなくなることがあります。 必要最小限の秒数を指定することを推奨します。

16.8. ブラウザ録画機能

プロジェクトビューの 🔴 録画 ボタンを押すと、Chromium ブラウザが起動し、操作内容を自動記録できます。

16.8.1. 録画コントロールウィンドウ

ブラウザ起動と同時に画面左上にフローティングウィンドウが表示されます。 ウィンドウはドラッグして移動できます。

16.8.2. 📷 手動キャプチャの注意事項

キャプチャ画像の保存先: {プロジェクトフォルダ}/captures/cap_yyyyMMdd_HHmmss_NNN.png

⚠ ブラウザが閉じられている場合、📷 ボタンを押しても何も起きません(エラーメッセージも表示されません)。 キャプチャが必要な場合はブラウザウィンドウが開いていることを確認してから押してください。 browser.isOpen() で状態を確認することも可能です。

16.8.3. DevTools のブレークポイントについて

⚠ ブラウザの開発者ツール(DevTools)でブレークポイントを設定している場合、以下の問題が発生します。

状況 影響
録画中にブレークポイントで停止 停止中のクリック・入力操作が記録されない(スクリプトに抜けが生じる)
再生中にブレークポイントで停止 タイムアウト(約30秒)まで待機後、次の操作へスキップされる
DevTools を開いているだけ 基本的に影響なし

録画・再生中はブレークポイントを外した状態で操作することを推奨します。

16.8.4. 生成されるスクリプト

⏹ 停止して保存 を押すと {ワークスペース}/scripts/rec_yyyyMMdd_HHmmss.js が生成されます。 スクリプトタブから実行すると、同じ操作を Chromium で再現できます。

16.9. ブラウザ操作 API

16.9.1. manidoc.openBrowser( URL )

システムにインストール済みの Microsoft Edge または Google Chrome を起動し、ブラウザ操作オブジェクトを返します。 Edge または Chrome がインストールされていない環境では起動できません。

var browser = manidoc.openBrowser("https://example.com");
// 操作後は必ず閉じる
browser.close();

返されるオブジェクトのメソッド: セレクターの例:

browser.click("#login-btn");           // ID
browser.fill("[name='username']", "admin");  // name属性
browser.click("text=ログイン");         // テキスト
browser.fill("[placeholder='パスワード']", "pass"); // placeholder

スクリーンショットの保存先: ワークスペースの captures/ フォルダに自動保存されます。

var path = browser.screenshot();  // "captures/cap_20260306_143022_000.png"
var node = proj.addNode("手順1");
node.setImage(path);

16.10. manidoc オブジェクト ― 入力・選択ダイアログ

スクリプトの実行中にユーザーへ入力や選択を求めることができます。

16.10.1. manidoc.inputBox( メッセージ )

テキスト入力ダイアログを表示します。 OK を押すと入力した文字列が返ります。キャンセルすると空文字 "" が返ります。

var name = manidoc.inputBox("プロジェクト名を入力してください");
if (name === "") {
    manidoc.log("キャンセルされました");
} else {
    var proj = manidoc.createProject(name);
    proj.save();
}

16.10.2. manidoc.selectionBox( メッセージ, 選択肢 )

コンボボックス付きの選択ダイアログを表示します。 選択肢は カンマ区切りの文字列で指定します。 OK を押すと選択した値が返ります。キャンセルすると空文字 "" が返ります。

var category = manidoc.selectionBox("カテゴリを選んでください", "操作マニュアル,設定ガイド,FAQ,リリースノート");
if (category !== "") {
    manidoc.log("選択: " + category);
}

16.11. manidoc オブジェクト ― AI 連携

スクリプトから AI に処理を依頼できます。使用には API キーの設定が必要です。

16.11.1. メソッド一覧

  • 指示書パス はワークスペースからの相対パスで .md ファイルを指定します
  • Web検索true にするとインターネット検索を使います(有料プランのみ・Gemini API 使用時のみ有効。ローカルLLM使用時は無視されます)
  • システムプロンプト は省略できます

16.11.2. 結果オブジェクト(

{
    success: true,       // 成功したか
    response: "...",     // AI の応答テキスト(success=true のとき)
    error: ""            // エラーメッセージ(success=false のとき)
}

16.11.3. 使用例

// ── パターン1: シンプルな呼び出し ──────────────────────────
try {
    var md = manidoc.askAI("prompts/request.md");
    var proj = manidoc.importFromMarkdown("temp/draft.md");
    manidoc.writeFile("temp/draft.md", md);
    proj.save();
    manidoc.log("完了: " + proj.name);
} catch (e) {
    manidoc.log("エラー: " + e.message);
}

// ── パターン2: エラーを変数で受け取る ─────────────────────
var result = manidoc.askAIResult("prompts/request.md");
if (!result.success) {
    manidoc.log("失敗: " + result.error);
} else {
    manidoc.log(result.response);
}

// ── パターン3: テキストを直接渡す ─────────────────────────
var r = manidoc.askAITextResult("Pythonのインストール手順をMarkdownで書いてください");
if (r.success) manidoc.log(r.response);

注意: Web検索: true は有料プランの API キーでのみ動作します。無料枠では 400/403 エラーになります。

16.12. manidoc オブジェクト ― テスト支援

スクリプトで動作確認・テストを行うための機能です。

16.12.1. manidoc.testStart( テスト名 )

テストケースを開始します。

manidoc.testStart("プロジェクト作成テスト");

16.12.2. manidoc.assert( 条件, メッセージ )

条件が偽のとき FAIL を記録します。

var proj = manidoc.openProject("テスト");
manidoc.assert(proj !== null, "プロジェクトが存在すること");

16.12.3. manidoc.assertEqual( 期待値, 実際の値, メッセージ )

2つの値が等しくない場合に FAIL を記録します。

manidoc.assertEqual(3, proj.nodeCount, "ノード数が3であること");

16.12.4. manidoc.assertFileExists( パス, メッセージ )

ファイルが存在しない場合に FAIL を記録します。

manidoc.assertFileExists("output/result.html", "HTML が出力されていること");

16.12.5. manidoc.testPass( メッセージ ) / manidoc.testFail( メッセージ )

テスト結果を明示的に記録します。

if (proj !== null) {
    manidoc.testPass("プロジェクトが見つかった");
} else {
    manidoc.testFail("プロジェクトが見つからなかった");
}

16.12.6. manidoc.getTestSummary()

テスト結果のまとめを返します。{ total, passed, failed, results[] } 形式です。

var summary = manidoc.getTestSummary();
manidoc.log("合計: " + summary.total + " / 合格: " + summary.passed + " / 不合格: " + summary.failed);

16.13. manidoc オブジェクト ― 外部コマンド実行

16.13.1. manidoc.execute( コマンド, タイムアウト秒 )

外部コマンドを実行します。Git・SFTP などのツールをスクリプトから呼び出せます。 タイムアウト秒は省略すると 30 秒です。 戻り値は { success, exitCode, output, error } 形式のオブジェクトです。

var result = manidoc.execute("git status");
if (result.success) {
    manidoc.log(result.output);
} else {
    manidoc.log("エラー: " + result.error);
}

注意: 削除コマンドなど危険な操作を誤って実行しないよう注意してください。

16.14. manidoc オブジェクト ― スクリプト管理

16.14.1. manidoc.listScripts( サブフォルダ名 )

指定フォルダ内の manifest.json に登録されたスクリプトファイルのパス一覧を返します。 サブフォルダ名を省略すると "recordings" フォルダが対象になります。

var scripts = manidoc.listScripts("recordings");
for (var i = 0; i < scripts.length; i++) {
    manidoc.log(scripts[i]);
}

16.14.2. manidoc.runScript( スクリプトパス )

別のスクリプトファイルを実行キューに追加します。 現在のスクリプトが終了した後に順番に実行されます。

manidoc.runScript("scripts/export_all.js");

16.15. スクリプト例

16.15.1. 例1:全プロジェクト名をログに出す

var names = manidoc.getProjects();
manidoc.log("プロジェクト数: " + names.length);
for (var i = 0; i < names.length; i++) {
    manidoc.log((i + 1) + ". " + names[i]);
}

16.15.2. 例2:新しいプロジェクトを構成込みで作る

var proj = manidoc.createProject("操作マニュアル");
proj.description = "システムの基本操作説明書";

var ch1 = proj.addNode("第1章 はじめに");
ch1.article = "このマニュアルでは基本的な使い方を説明します。";

var ch2 = proj.addNode("第2章 基本操作");
ch2.addChild("ログイン方法");
ch2.addChild("ログアウト方法");

proj.save();
manidoc.log("プロジェクト作成完了: " + proj.name);

16.15.3. 例3:Manidoc の画面をキャプチャしてノードに貼る

var proj = manidoc.openProject("操作マニュアル");
var node = proj.findNode("ログイン方法");

var imgPath = manidoc.captureSelf("screenshots/login_screen.png");
node.setImage(imgPath);
proj.save();

manidoc.log("キャプチャ完了");

16.15.4. 例4:全プロジェクトを HTML で一括書き出し

var names = manidoc.getProjects();
for (var i = 0; i < names.length; i++) {
    var proj = manidoc.openProject(names[i]);
    if (proj !== null) {
        var path = proj.exportHtml(true);
        manidoc.log(names[i] + " → " + path);
    }
}
manidoc.log("一括出力完了");

16.15.5. 例5:ダイアログで対話しながらプロジェクトを作成

実行中にユーザーへ名前やカテゴリを尋ねて、その内容でプロジェクトを作成します。

// プロジェクト名を入力させる
var projName = manidoc.inputBox("作成するプロジェクトの名前を入力してください");
if (projName === "") {
    manidoc.log("キャンセルされました");
} else {
    // カテゴリを選択させる
    var category = manidoc.selectionBox(
        "ドキュメントの種類を選んでください",
        "操作マニュアル,設定ガイド,FAQ,リリースノート,提案書"
    );

    var proj = manidoc.createProject(projName);
    proj.description = category !== "" ? category : "ドキュメント";

    // カテゴリに応じた初期構成を追加
    if (category === "操作マニュアル") {
        proj.addNode("はじめに");
        proj.addNode("基本操作");
        proj.addNode("よくある質問");
    } else if (category === "FAQ") {
        proj.addNode("インストール");
        proj.addNode("使い方");
        proj.addNode("トラブルシューティング");
    } else {
        proj.addNode("概要");
        proj.addNode("詳細");
    }

    proj.save();
    manidoc.log("作成完了: " + proj.name + "(" + proj.description + ")");
}

16.15.6. 例6:CSV データからノードを自動生成

テキストファイルに書いたデータを読み込んで、ノード構造に展開します。

// data/chapters.txt の内容例:
// 第1章 はじめに
// 第2章 基本操作
// 第3章 応用編

var text = manidoc.readFile("data/chapters.txt");
var lines = text.split("\n");

var proj = manidoc.createProject("自動生成マニュアル");

for (var i = 0; i < lines.length; i++) {
    var title = lines[i].trim();
    if (title === "") continue;
    var node = proj.addNode(title);
    node.article = "## " + title + "\n\nここに内容を記載します。";
    manidoc.log("追加: " + title);
}

proj.save();

// 処理結果をファイルに記録
manidoc.writeFile("logs/chapter_import.txt",
    manidoc.now() + " " + proj.name + " 作成完了(" + proj.nodeCount + "章)");
manidoc.log("完了: " + proj.nodeCount + " 章を作成しました");

16.15.7. 例7:Markdown ファイルを一括インポートしてプロジェクト化

フォルダにある複数の .md ファイルをそれぞれ別プロジェクトとして取り込みます。

var files = ["input/manual_a.md", "input/manual_b.md", "input/manual_c.md"];

for (var i = 0; i < files.length; i++) {
    var path = files[i];

    if (!manidoc.fileExists(path)) {
        manidoc.log("スキップ(ファイルなし): " + path);
        continue;
    }

    manidoc.log("インポート中: " + path);
    var proj = manidoc.importFromMarkdown(path);
    proj.save();

    var htmlPath = proj.exportHtml(true);
    manidoc.log("完了: " + proj.name + " → " + htmlPath);
}

manidoc.log("全インポート完了: " + manidoc.now());

16.15.8. 例8:正規表現でプロジェクトを絞り込んで更新

「2025」を含む古いプロジェクトを探し出し、タイトルを自動で置き換えます。

var names = manidoc.getProjects();
var count = 0;

for (var i = 0; i < names.length; i++) {
    // 名前に「2025」が含まれるプロジェクトが対象
    if (names[i].indexOf("2025") === -1) continue;

    var proj = manidoc.openProject(names[i]);
    if (proj === null) continue;

    var oldName = proj.name;
    proj.name = oldName.replace("2025", "2026");
    proj.save();

    manidoc.log("更新: " + oldName + " → " + proj.name);
    count++;
}

manidoc.log("更新完了: " + count + " 件");

16.15.9. 例9:ブラウザを自動操作して画面をキャプチャ

Web システムにログインし、主要画面を順番にキャプチャしてノードに貼り付けます。

var proj = manidoc.openProject("Webシステム操作マニュアル");
if (proj === null) proj = manidoc.createProject("Webシステム操作マニュアル");

var browser = manidoc.openBrowser("https://example.com/login");

// ログイン操作
browser.fill("[name='username']", "admin");
browser.fill("[name='password']", "password");
browser.click("text=ログイン");
browser.waitForUrl("dashboard");

// ダッシュボード画面をキャプチャ
var node1 = proj.addNode("ダッシュボード");
var shot1 = browser.screenshot();
node1.setImage(shot1);
node1.article = "ログイン後に表示されるトップ画面です。";

// 設定画面に移動してキャプチャ
browser.goto("https://example.com/settings");
var node2 = proj.addNode("設定画面");
var shot2 = browser.screenshot();
node2.setImage(shot2);
node2.article = "各種設定を変更する画面です。";

browser.close();
proj.save();
manidoc.log("キャプチャ完了: " + proj.nodeCount + " 画面");

16.15.10. 例10:画像を最適化しながら全ノードに再設定

プロジェクト内の全画像を圧縮・リサイズしてファイルサイズを削減します。

var proj = manidoc.openProject("操作マニュアル");
var nodes = proj.getNodes();
var count = 0;

for (var i = 0; i < nodes.length; i++) {
    var node = nodes[i];
    var imgPath = node.imagePath;

    if (imgPath === "" || imgPath === null) continue;

    // 品質80、最大1280pxで最適化して上書き設定
    node.setOptimizedImage(imgPath, 80, 1280);
    count++;
    manidoc.log("最適化: " + node.title);
}

proj.save();
manidoc.log("最適化完了: " + count + " 件の画像を処理しました");

16.15.11. 例11:テスト機能でプロジェクトの内容を検証

マニュアルの必須項目が揃っているかをスクリプトで自動チェックします。

manidoc.log("品質チェック開始: " + manidoc.now());

var names = manidoc.getProjects();

for (var i = 0; i < names.length; i++) {
    var proj = manidoc.openProject(names[i]);
    if (proj === null) continue;

    manidoc.testStart(proj.name);

    // ルートノードが1つ以上あること
    manidoc.assert(proj.nodeCount > 0, "ノードが存在すること");

    // 「はじめに」または「概要」ノードがあること
    var intro = proj.findNode("はじめに");
    var overview = proj.findNode("概要");
    manidoc.assert(intro !== null || overview !== null, "導入ノードが存在すること");

    // HTML 出力ファイルが存在すること
    var htmlExists = manidoc.fileExists("export/" + proj.name + "/index.html");
    manidoc.assert(htmlExists, "HTML出力済みであること");
}

var summary = manidoc.getTestSummary();
manidoc.log("チェック結果: " + summary.passed + "/" + summary.total + " 合格");

// 結果をファイルに保存
manidoc.saveLog("logs/quality_check_" + manidoc.now().replace(/[/ :]/g, "") + ".txt");