soramaru777/hirake-markdown

C#

0

132 commits

updated Sep 19, 2026

See the code

README

Hirake

Windows 用の軽量な Markdown ビューアです。WPF + WebView2 で構築されており、Markdown ファイルをダブルクリックするだけで素早く閲覧できます。

✨ Hirake のここがユニーク

ただ表示するだけのビューアではありません。フォルダに溜まった Markdown を「知識ベース」として横断的に探索できるのが Hirake の特徴です。すべてローカルで完結し、文書が外部へ送信されることは一切ありません。

機能できること
🔍AI 意味検索(完全オフライン)「認証まわりで例外的な扱いをしている箇所」のような曖昧な日本語で、キーワードが一致しない文書まで引き当てます。埋め込みモデルはローカル実行(ONNX)なので社内文書でも安心
🖼️画像の中まで検索(OCR)スクショや図の中の文字を Windows OCR で抽出し、キーワード検索・意味検索の両方でヒット。「あの画面のスクショどこだっけ」に効きます
🕸️ナレッジグラフ文書間のリンクを解析して関係を地図のように可視化(Ctrl+G)。無限キャンバスの「全体俯瞰」として開き、そのままズームインして中身まで見に行けます。「この文書を参照している文書」のバックリンク一覧も常設表示
🗂️構造クエリビュー「全文書の見出しだけ」「未完了の TODO だけ」を横断抽出して一覧化(Ctrl+Shift+S)。クリックで該当行へ直接ジャンプ
🔗リンク切れ・孤立ページの検出移動・改名で切れたリンクと、どこからも参照されていないページを一覧化(Ctrl+Shift+L)。クリックで壊れた行へジャンプでき、hirake:// 付きでまとめてコピーして外部エディタや AI に渡せます
👯文書指紋・類似検出コピペそのまま・編集して貼った重複記述を検出してグループ表示(Ctrl+Shift+R)。ドキュメント資産の重複を棚卸しできます
📖「次に読む」レコメンド表示中の文書と意味的に似た文書をサイドバーに提案。フォルダ内の関連知識へ自然に辿れます

これらの探索機能は検索結果・一覧から該当行への直接ジャンプでつながっており、AI モデル未取得の環境では静かに無効化されるため、ビューアとしての軽快さは損ないません。

概要

Hirake は、エディタでの編集を目的とせず「素早く正確に Markdown を表示すること」に特化したビューアアプリケーションです。GitHub 風のスタイルでシンタックスハイライトや mermaid 図を含む Markdown を、ネイティブアプリのように高速に表示します。

機能一覧

  • タブ表示: 複数の Markdown ファイルをタブで切り替えて閲覧できます
  • シンタックスハイライト: コードブロックを highlight.js(GitHub テーマ)で色分け表示します
  • mermaid 図の描画: フローチャートなどの mermaid コードブロックを図として描画します
  • 目次(TOC): 見出しから目次を自動生成し、サイドバーから各見出しへジャンプできます
  • ページ内検索(Ctrl+F): 表示中のページ内をインクリメンタル検索できます
  • 外部リンクはブラウザで開く: http(s):// へのリンクはアプリ内ではなく既定のブラウザで開きます
  • 自動リロード: 表示中のファイルが更新されると自動的に再読み込みします
  • 二重起動時は既存ウィンドウに新タブ: 別の Markdown ファイルを開いたときに新しいウィンドウを増やさず、既存のウィンドウに新しいタブとして追加します
  • ダークモード(自動/手動): OS のテーマに追従する自動モードに加え、ライト/ダークを手動で切り替えられます(Ctrl+Shift+D)
  • スクロール位置・セッション復元: ファイルごとのスクロール位置を記憶し、引数なし起動時には前回開いていたタブを復元します。キャンバス・構造クエリ・リンク検出・指紋・統計といった仮想タブも復元対象です(ウィンドウの枚数ごと復元されます)
  • ワークスペース(Ctrl+Shift+W): タブ構成・スクロール位置・キャンバスの視点・ウィンドウ位置をまとめて名前付きで保存し、いつでも復元できます。1 ワークスペース = 1 ウィンドウで、既に開いていれば二重には開かず前面化します
  • マルチウィンドウ(Ctrl+N): 複数のウィンドウを同時に開けます。テーマやズーム倍率はアプリ全体で共通です
  • PDF エクスポート(Ctrl+Shift+E): 表示中のドキュメントを PDF ファイルへ書き出します。画面のズーム倍率(Ctrl+ホイール / Ctrl+0)がそのまま出力倍率になるので、文字を小さくして 1 ページに詰めたいときはズームアウトしてから書き出してください(有効範囲は 10%〜200%。これを超えるズームは 200% として出力されます)
  • フォルダ内横断検索(Ctrl+Shift+F): アクティブなファイルのフォルダ配下の .md / .markdown を再帰的に検索し、ファイルごとにヒット行のプレビューを表示します。文書が参照する画像内の文字(OCR)もヒット対象です
  • ファイルツリー(Ctrl+B): アクティブなファイルのフォルダを起点にしたファイルツリーをサイドバーに表示し、クリックで開けます
  • 戻る(Alt+← / ツールバー左側): 1 つ前に表示していたファイルへ戻ります。タブを閉じた後でも戻れます(履歴はパスで持っているため、タブが無ければ開き直します)。履歴はウィンドウごとに独立していて、最大 50 件・保存はしません
  • 上の階層へ(Alt+↑ / ツールバー左側): ファイルツリーのルートを 1 つ上のフォルダへ移します。タブは動きません。 上げたルートは、読んでいるファイルがその配下にある限り保たれ、外れると通常どおりアクティブなファイルのフォルダへ戻ります
  • ズーム記憶: Ctrl+ホイール / Ctrl+0 のズーム倍率を記憶し、全タブに反映します。拡大縮小した瞬間は現在の倍率(120% など)が画面右下に表示され、操作を止めると自動で消えます(印刷・PDF には写りません)
  • クリップボード/テキストドロップのクイックプレビュー: クリップボードのテキスト(Ctrl+Shift+V)やドロップしたテキストを一時 Markdown として即座に表示します
  • 構造クエリビュー(Ctrl+Shift+S): フォルダ配下の全文書から「見出しだけ」「タスク(- [ ])だけ」「TODO などのキーワードを含むブロックだけ」を横断抽出して一覧表示し、クリックで該当行へジャンプできます
  • リンク切れ・孤立ページの検出ビュー(Ctrl+Shift+L): フォルダ配下の全文書から、解決できないリンク(リンク先が無い / 走査範囲の外 / [[wikilink]] が索引に無い)と、被リンクが 0 のページを一覧表示します。クリックで参照元の該当行へジャンプでき、一覧は hirake://open?path=...&line=... 付きのテキストとしてコピーできます(Hirake は検出して場所を示すところまでを担い、修正はエディタや AI が行います)
  • 文書指紋・類似検出(Ctrl+Shift+R): フォルダ配下の全文書からコピペ由来・編集済みコピペの重複記述を検出してグループ表示し、クリックで該当行へジャンプできます
  • フォルダ統計ダッシュボード(Ctrl+Shift+T): ファイル数・文字数などのサマリ、過去365日の更新ヒートマップ、開くたびに育つ推移グラフ、放置文書・ボリューム・未完了タスクのランキングを表示します
  • 無限キャンバス・モード(Ctrl+Shift+C): フォルダ配下の全文書をズーム可能な無限キャンバスへ空間配置。ズームアウトでリンクグラフ、ズームインでサムネイル付きカード、さらに拡大すると中央付近の文書が実物のインラインプレビューになります(同時に最大 3 枚・遠ざかると自動で破棄)。ドラッグ配置はピン留めとして記憶されます
    • ナレッジグラフ(Ctrl+G)はこのキャンバスの「全体俯瞰」として開きます(Ctrl+Shift+C は前回の視点で再開)
    • プレビューは静的表示(スクリプトを実行しないため Mermaid・数式・シンタックスハイライトは出ません)。完全な表示はタイトル部分のダブルクリックで通常タブへ
  • KaTeX 数式: $...$ / $$...$$ の数式を KaTeX で描画します
  • フロントマターカード + メタ情報バー: YAML フロントマターをカード表示し、文字数・読了目安・更新日時をバーに表示します
  • 別ドライブ絶対パスリンク対応: 別ドライブへの絶対パスの .md リンクも新しいタブで開けます
  • [[wikilink]] 記法: Obsidian などで使われる [[ページ名]] をリンクとして扱います。ナレッジグラフ・バックリンク・キャンバスにも反映されます(後述)
  • エディタで開く(Ctrl+E): いま読んでいる行を外部エディタの同じ行で開きます。エディタは選ぶだけで使えます(後述)

インストール

Releases から HirakeSetup-x.y.z.exe をダウンロードして実行します。

  • 管理者権限は不要です。 %LocalAppData%\Programs\Hirake にユーザー単位でインストールします
  • .NET ランタイムの事前導入も不要です。 インストーラに同梱しています
  • .md の関連付けとスタートメニューのショートカットは、ウィザードのチェックボックスで選べます

アンインストールは「設定 > アプリ > インストールされているアプリ」から行います。

初回起動時の警告について

インストーラにコード署名がないため、「Windows によって PC が保護されました」という青い画面が出ます。 「詳細情報」→「実行」 を押すと続行できます(この表示は署名証明書を取得するまで消せません)。

設定やデータも完全に削除したい場合

アンインストールしても、設定・ワークスペース・セマンティック索引は残ります(再インストール時に失わないためです)。完全に消す場合は、アンインストール後に次のフォルダを削除してください。

Remove-Item -Recurse -Force "$env:LocalAppData\Hirake"

ビルド方法

.NET 10 SDK がインストールされた環境で、以下のコマンドを実行してください。

dotnet publish src/Hirake -c Release -r win-x64 --self-contained false -o publish

ビルド成果物は publish フォルダに出力されます(publish\Hirake.exe)。

配布用のインストーラを作る手順は installer/README.md を参照してください。

.md 関連付け手順

インストーラを使った場合、この手順は不要です(ウィザードで登録済み)。ソースからビルドした場合や、インストール時に関連付けを外した場合に使います。

.md / .markdown ファイルを Hirake で開けるようにするには、scripts/register.ps1 を実行します。管理者権限は不要です(現在のユーザー = HKCU にのみ登録します)。

# 既定の exe パス(publish または bin\Release)を自動検出して登録する場合
.\scripts\register.ps1

# exe のパスを明示的に指定する場合
.\scripts\register.ps1 -ExePath "C:\Tools\Hirake\Hirake.exe"

登録すると、以下が行われます。

  • Hirake.md という ProgId を HKCU に登録
  • .md / .markdown の「プログラムから開く」候補に Hirake を追加
  • .md の既定プログラムが未設定の場合のみ Hirake を既定に設定(既に別アプリが既定になっている場合は上書きしません)
  • hirake:// の URL プロトコルを登録(下記のディープリンク用)

他アプリが .md に登録している既定プログラムや「プログラムから開く」候補は変更しません。既に別アプリが既定になっている環境では、Hirake は「プログラムから開く」候補にのみ追加されます。

注意: Windows 11 では初回のみ、.md ファイルを右クリック →「プログラムから開く」→「別のプログラムを選択」から Hirake を選び、「常にこのアプリを使う」にチェックを入れる操作が必要な場合があります。

関連付けの解除手順

登録した関連付けを削除するには、scripts/unregister.ps1 を実行します。

.\scripts\unregister.ps1

Hirake の ProgId・OpenWithProgIds・hirake:// プロトコルのエントリを削除します。.md の既定プログラムは、Hirake.md になっている場合のみ削除され、他アプリが既定になっている場合は変更しません。Hirake が追加した値を除去し、その結果として空になった関連キーも削除します。

どちらのスクリプトも「どの値を自分が作ったか」は記録していません。unregister.ps1 の契約は「現時点で存在する Hirake の関連付けをすべて解除する」ことなので、実行前から Hirake の関連付けがあった場合はそれも解除されます。また、実行前から空だった OpenWithProgIds / 拡張子キーも掃除の対象になります。

他アプリが登録した OpenWithProgIds のエントリが残っている場合、そのキーは削除されません。Hirake.md ProgId と hirake:// プロトコルのキーも、shell\open\command の実行ファイル名が Hirake.exe であることを確認してから削除します。確認できない場合(別の実行ファイルを指している/shell\open\command が無い)は、レジストリを 1 つも変更せずに終了コード 1 で中止します。

確認しているのは実行ファイルの名前だけで、パスは見ていません。別アプリの実行ファイルもたまたま Hirake.exe という名前であれば Hirake のものと判定されます。

両スクリプトはレジストリ操作と手順を scripts/association-lib.ps1 に集約しており、単体では動作しません。3 ファイルを同じフォルダに置いて実行してください。

どちらも失敗時は終了コード 1 で終わります。値ごとのロールバックは行わないため、その時点で一部の変更が適用済みのことがあります。原因を解消して再実行してください(両スクリプトとも何度実行しても同じ結果になります)。

関連付けスクリプトのテスト

tests/ にリグレッションテストがあります。Pester には依存しません(追加インストール不要)。実際の .md / .markdown / Hirake.md / hirake には一切触れず、実行ごとに一意な使い捨ての ProgId・URL スキーム・拡張子だけを使い、終了時に削除します。

# レジストリ操作の関数単体
.\tests\test-association-lib.ps1

# 登録・解除の制御フロー(呼ぶ順序、どの失敗で何をやめるか、表示と終了コード)
.\tests\test-association-flow.ps1

hirake:// ディープリンク

ブラウザ・チャット・タスク管理ツール・エディタなど他アプリから、特定文書の特定位置へ直接リンクできます(scripts/register.ps1 での登録が必要)。

hirake://open?path=<URLエンコードした絶対パス>[&line=<1始まりの行番号>][&heading=<URLエンコードした見出しテキスト>]
パラメータ説明
path必須。ローカルの絶対パス。拡張子は .md / .markdown のみ
line任意。1 始まりの行番号
heading任意。見出しテキストそのもの(概要 など)。指定すると line より優先されます

例:

Start-Process "hirake://open?path=C%3A%5Cdocs%5Csample.md&heading=%E6%A6%82%E8%A6%81"
Start-Process "hirake://open?path=C%3A%5Cdocs%5Csample.md&line=42"
  • Hirake が起動していなければ起動して開き、起動済みなら既存ウィンドウの新規タブで開いて前面化します。同じファイルが既に開いていればそのタブへジャンプします(複数ウィンドウがある場合は、そのファイルを開いているウィンドウ → 無ければ最後にアクティブだったウィンドウ)
  • リンクは**タブを右クリック →「この位置へのリンクをコピー」**でも作れます(現在のスクロール位置が line に入ります)
  • heading に見出し id(section-1 等)ではなく見出しテキストを使うのは、日本語見出しの id が自動採番になり人間が書けないためです
  • 安全のため、UNC・ネットワークドライブのパス、.md / .markdown 以外の拡張子、存在しないファイル、未知の verb は黙って無視します(行うのは「Markdown をタブで開く」ことだけです)

ワークスペースへのリンク

hirake://workspace?name=<URLエンコードしたワークスペース名>
Start-Process "hirake://workspace?name=%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E6%BA%96%E5%82%99"
  • 同名のワークスペースを開いているウィンドウがあれば前面化するだけで、二重には開きません。無ければ新しいウィンドウで開きます
  • 名前は前後の空白を除いた大文字小文字を無視する完全一致で照合します。一致するものが無ければ黙って無視します
  • name はパスとして一切解釈しません(ワークスペースは名前をファイル名に使わない設計のため、トラバーサルの経路自体が存在しません)
  • URI 経由で既存のタブが閉じられることはありません(新しいウィンドウで開く設計のため、破壊的な経路が構造的に存在しません)

Obsidian などで使われる [[ページ名]] を、ふつうのリンクとして扱います。ナレッジグラフ(Ctrl+G)・バックリンクパネル・キャンバスにもそのまま反映されます。

書き方動き
[[ページ名]]そのページを新しいタブで開く
[[ページ名|表示名]]表示だけ変えて同じページを開く
[[ページ名#見出し]]そのページの該当見出しへスクロールする
[[フォルダ/ページ名]]フォルダを指定して曖昧さをなくす

拡張子は省略できます([[note]] でも [[note.md]] でも同じ)。

どのファイルが開くか

探す範囲は、開いているファイルから推定したワークスペースのルート配下です(横断検索・ナレッジグラフと同じ範囲)。同名のファイルが複数あるときは、次の順で 1 つに決めます。

  1. [[sub/note]] のようにフォルダを指定していれば、それに一致するもの
  2. リンク元と同じフォルダにあるもの
  3. ルートから見て階層が浅いもの
  4. それでも決まらなければパス順の先頭

4 まで来た場合はリンクとして開けますが、点線の下線で「同名が複数ある」ことを示します。どれが選ばれたかはマウスを乗せると分かります。

見つからないとき

リンクにはせず、[[まだ無いページ]] のように原文のまま赤い破線で表示します。黙って通常の文字にすると、リンクのつもりが繋がっていないことに気付けないためです。

誤爆しないための決まり

[[ を含む普通の文章をリンクにしてしまわないよう、次の場合はリンクにしません。

  • コードブロック・インラインコードの中
  • [[0][1]] のように内側に [ ] を含むもの
  • \[[...]] とエスケープしたもの
  • 改行をまたぐもの、[[]] のように中身が空のもの
  • ![[...]](埋め込み記法。Hirake では非対応)

それでも都合が悪い場合は、settings.json の WikiLinksEnabled を false にすると機能ごとオフにできます(設定 UI はありません。タブの再読み込みで反映されます)。

[表示](other.md#見出し) のような通常のリンクでも、#見出し で開いた先の該当位置までスクロールします。 見出しテキスト(#決めごと)と GitHub 流の見出し id(#my-heading)のどちらでも指定できます。

エディタで開く(Ctrl+E)

いま読んでいる行を、外部エディタの同じ行で開きます。編集機能は入れず、編集へ移る経路だけを用意する形です。

  • タブを右クリック →「エディタで開く」、またはショートカットの Ctrl+E
  • 「フォルダをエディタで開く」で、vault 全体をエディタ側で開けます
  • エディタ側で保存すれば、Hirake は自動リロードしてスクロール位置も保ちます(従来どおり)

初回だけエディタを選ぶ

はじめて使ったときに、インストール済みのエディタを探して一覧で出します。選ぶだけで使え、引数を書く必要はありません。

┌─ エディタを選ぶ ──────────────────────────────┐
│  ● Visual Studio Code                          │
│    ...\Microsoft VS Code\Code.exe              │
│    見つけた場所: 既知のインストール先            │
│  ○ メモ帳                                       │
│    C:\Windows\system32\notepad.exe              │
│    見つけた場所: PATH                           │
│    ※ 行ジャンプには対応していません              │
└────────────────────────────────────────────────┘

同名の実行ファイルが複数見つかることがあるため、どこで見つけたかを併記し、候補が 1 件でも確認を求めます。行ジャンプに対応していないエディタは、その場で分かるようにしています。

一覧に無いエディタは「一覧に無い…」から .exe を選べます(この場合はファイルを開くところまで。行ジャンプが必要なら下記の設定を書き換えてください)。

同梱しているエディタ

実機で確認できたものだけを同梱しています。

エディタ行ジャンプ
Visual Studio Code✅
サクラエディタ✅
メモ帳—

秀丸 / Notepad++ / EmEditor / Sublime Text / gVim は未検証のため、Assets\editors.json の unverified に置いてあります。使う場合は editors 配列へ移してください(引数が違っていれば、そのファイルを直せば直ります)。

設定

選んだ内容は settings.json の Editor に保存されます。選び直すときはこの項目を削除してください(次に Ctrl+E を押したときに再び選択画面が出ます)。

"Editor": {
  "Name": "サクラエディタ",
  "ExePath": "C:\\Program Files (x86)\\sakura\\sakura.exe",
  "FileArgs": ["-Y={line}", "{file}"],
  "NoLineArgs": ["{file}"],
  "FolderArgs": [],
  "SupportsLine": true
}

{file} / {line} / {folder} が置き換わります。引数は配列で持ちます(1 本の文字列にしないのは、パスに空白・日本語・& が含まれても壊れないようにするためです)。

起動に失敗したときは、実行しようとした内容と理由を表示し、診断ログにも残します。

シンボリックリンクで束ねたフォルダ

複数の場所にある docs/ を 1 つの vault へシンボリックリンク(またはジャンクション)で集めている場合、既定ではリンクを辿りません。横断検索・ファイルツリー・ナレッジグラフなどの結果にリンク先の文書は出ません。

これは、リンクが \\server\share のようなネットワーク共有を指していると、走査した時点で認証情報が送られてしまうためです。

リンクを経由するフォルダ自体も、既定では開けません。 C:\vault\link\docs\x.md のように、開いたファイルの経路のどこかにリンクがある場合、サイドバーのファイルツリーや横断検索は次のように案内します。

このフォルダはリンクを経由しています。
settings.json の FollowDirectoryLinks を true にすると表示できます。

(\\server\share を指すリンクなど、設定を有効にしても開けないものにはこの案内は出ません。)

辿るようにするには、%LocalAppData%\Hirake\settings.json に次を追加して Hirake を再起動します。

{
  "FollowDirectoryLinks": true
}

有効にしても、次のリンクは辿りません。

  • \\server\share のような UNC パスを指すもの
  • ネットワークドライブを指すもの
  • 固定ドライブ・リムーバブルドライブ以外(CD-ROM や RAM ディスクなど)を指すもの
  • \\?\GLOBALROOT\... のようなデバイスパス(\\?\C:\ と \\?\Volume{...}\ は除く)
  • 途中に 1 つでも上記が挟まるリンクの連鎖
  • 解決できないもの(判定できないものは辿らない)

なお、辿らないのはあらかじめ置かれたリンクについての判定です。走査している最中にリンクの向き先を書き換えられる状況までは防げません(フォルダを直接開く場合は従来どおり、UNC とネットワークドライブを拒否します)。

表示されるパスは実体のパスになります。 C:\vault\docs-a\x.md ではなく、リンク先の C:\repo-a\docs\x.md として扱われます。同じ文書がリンク経由と実体の両方で二重に出るのを防ぐためです。

ワークスペースとセッションにも実体のパスが保存されます。 リンク経由のパスのままだと、次に開いたときにそのタブが復元されないためです。すでに保存済みのワークスペースも、読み込んだ時点で実体のパスとして扱われます(ファイルは書き換えません)。

なお、C:\vault\current のようなリンクを張り替えて参照先を切り替える使い方をしている場合、ワークスペースには保存した時点の実体が記録されます。張り替えても、そのワークスペースは元の実体を開きます。

ワークスペース

タブ構成をまとめて保存し、いつでも同じ状態に戻せます。ツールバーの「ワークスペース」ボタン、または Ctrl+Shift+W で一覧を開きます。

操作動作
名前を入力して「保存」そのウィンドウのタブ構成を保存します。以後このウィンドウはそのワークスペースとして扱われます
一覧の項目をクリック新しいウィンドウで開きます。既に開いていればそのウィンドウを前面化します(● 印が付きます)
ゴミ箱アイコン確認のうえ削除します
ウィンドウを閉じる名前付きワークスペースなら、タブ構成の変更が自動で書き戻されます(保存忘れが起きません)

保存されるもの: タブの並び順・種別(文書 / キャンバス / 構造クエリ / リンク検出 / 指紋 / 統計)・アクティブタブ・各文書のスクロール位置・キャンバスの視点(パン位置とズーム率)・ウィンドウの位置とサイズ。

保存されないもの:

  • キャンバスのノード配置は共有のまま(canvas-layout の値を参照するだけ)です。同じフォルダを含む 2 つのワークスペースが別々の座標を持つと、手動配置(ピン留め)のどちらが正しいか決められなくなるためです
  • クリップボード由来の無名タブ
  • テーマ・ズーム倍率(引き続きアプリ全体の設定です)

上限は、ワークスペース 50 件 / 1 ワークスペース 200 タブ / 名前 60 文字 / 同時に開けるウィンドウ 10 枚です。保存先は %LocalAppData%\Hirake\workspaces.json で、書き込みは一時ファイル経由の原子的置換を行います(壊れた場合は空の一覧として起動します)。

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

キー動作
Ctrl+OMarkdown ファイルを開く
Ctrl+Eいま読んでいる行を外部エディタで開く
Ctrl+N新しいウィンドウを開く
Ctrl+Shift+Wワークスペース一覧の開閉
Ctrl+W現在のタブを閉じる
Ctrl+Tab次のタブへ切り替え
Ctrl+Shift+Tab前のタブへ切り替え
Ctrl+Fページ内検索を開く
Esc検索を閉じる
Ctrl+Shift+EPDF にエクスポート
Ctrl+Shift+Vクリップボードのテキストを表示
Ctrl+Shift+Dテーマ切替(自動 → ライト → ダーク)
Ctrl+Bファイルツリー サイドバーの表示切替
Alt+←1 つ前に表示していたファイルへ戻る
Alt+↑ファイルツリーのルートを 1 つ上のフォルダへ
Ctrl+Shift+Fフォルダ内横断検索(サイドバーを開いて検索)
Ctrl+Gナレッジグラフ(キャンバスの全体俯瞰)を開く
Ctrl+Shift+S構造クエリビューを開く
Ctrl+Shift+Lリンク切れ・孤立ページの検出ビューを開く
Ctrl+Shift+R文書指紋・類似検出ビューを開く
Ctrl+Shift+Tフォルダ統計ダッシュボードを開く
Ctrl+Shift+C無限キャンバス・モードを開く
Ctrl+P印刷(プレビュー)
Ctrl+ホイール / Ctrl+0ズーム(拡大縮小 / 100% に戻す)

動作要件

  • Windows 10 バージョン 1809(10.0.17763)以降 / Windows 11、x64
  • WebView2 Runtime(Windows 11 には標準搭載。Windows 10 では別途インストールが必要な場合があります)
  • .NET 10 Desktop Runtime — インストーラを使う場合は不要(同梱しています)。ソースからビルドして使う場合のみ必要です

ライセンス

Hirake は MIT License で公開されています。

Copyright (c) 2026 soramaru777

同梱・利用しているサードパーティライブラリ

ライブラリ用途ライセンス
MarkdigMarkdown → HTML 変換BSD-2-Clause
Microsoft.Web.WebView2HTML レンダリング(SDK)Microsoft Software License Terms
highlight.js(github / github-dark テーマ含む)シンタックスハイライトBSD-3-Clause
mermaid図の描画MIT
KaTeX(同梱フォント含む)数式レンダリングMIT

highlight.js / mermaid / KaTeX は src/Hirake/Assets/vendor/ にミニファイ済みファイルを同梱しています。各ライセンスの全文は THIRD-PARTY-NOTICES.md を参照してください。

soramaru777/hirake-markdown

C#

0

132 commits

updated Sep 19, 2026

See the code

README

Hirake

Windows 用の軽量な Markdown ビューアです。WPF + WebView2 で構築されており、Markdown ファイルをダブルクリックするだけで素早く閲覧できます。

✨ Hirake のここがユニーク

ただ表示するだけのビューアではありません。フォルダに溜まった Markdown を「知識ベース」として横断的に探索できるのが Hirake の特徴です。すべてローカルで完結し、文書が外部へ送信されることは一切ありません。

機能できること
🔍AI 意味検索(完全オフライン)「認証まわりで例外的な扱いをしている箇所」のような曖昧な日本語で、キーワードが一致しない文書まで引き当てます。埋め込みモデルはローカル実行(ONNX)なので社内文書でも安心
🖼️画像の中まで検索(OCR)スクショや図の中の文字を Windows OCR で抽出し、キーワード検索・意味検索の両方でヒット。「あの画面のスクショどこだっけ」に効きます
🕸️ナレッジグラフ文書間のリンクを解析して関係を地図のように可視化(Ctrl+G)。無限キャンバスの「全体俯瞰」として開き、そのままズームインして中身まで見に行けます。「この文書を参照している文書」のバックリンク一覧も常設表示
🗂️構造クエリビュー「全文書の見出しだけ」「未完了の TODO だけ」を横断抽出して一覧化(Ctrl+Shift+S)。クリックで該当行へ直接ジャンプ
🔗リンク切れ・孤立ページの検出移動・改名で切れたリンクと、どこからも参照されていないページを一覧化(Ctrl+Shift+L)。クリックで壊れた行へジャンプでき、hirake:// 付きでまとめてコピーして外部エディタや AI に渡せます
👯文書指紋・類似検出コピペそのまま・編集して貼った重複記述を検出してグループ表示(Ctrl+Shift+R)。ドキュメント資産の重複を棚卸しできます
📖「次に読む」レコメンド表示中の文書と意味的に似た文書をサイドバーに提案。フォルダ内の関連知識へ自然に辿れます

これらの探索機能は検索結果・一覧から該当行への直接ジャンプでつながっており、AI モデル未取得の環境では静かに無効化されるため、ビューアとしての軽快さは損ないません。

概要

Hirake は、エディタでの編集を目的とせず「素早く正確に Markdown を表示すること」に特化したビューアアプリケーションです。GitHub 風のスタイルでシンタックスハイライトや mermaid 図を含む Markdown を、ネイティブアプリのように高速に表示します。

機能一覧

  • タブ表示: 複数の Markdown ファイルをタブで切り替えて閲覧できます
  • シンタックスハイライト: コードブロックを highlight.js(GitHub テーマ)で色分け表示します
  • mermaid 図の描画: フローチャートなどの mermaid コードブロックを図として描画します
  • 目次(TOC): 見出しから目次を自動生成し、サイドバーから各見出しへジャンプできます
  • ページ内検索(Ctrl+F): 表示中のページ内をインクリメンタル検索できます
  • 外部リンクはブラウザで開く: http(s):// へのリンクはアプリ内ではなく既定のブラウザで開きます
  • 自動リロード: 表示中のファイルが更新されると自動的に再読み込みします
  • 二重起動時は既存ウィンドウに新タブ: 別の Markdown ファイルを開いたときに新しいウィンドウを増やさず、既存のウィンドウに新しいタブとして追加します
  • ダークモード(自動/手動): OS のテーマに追従する自動モードに加え、ライト/ダークを手動で切り替えられます(Ctrl+Shift+D)
  • スクロール位置・セッション復元: ファイルごとのスクロール位置を記憶し、引数なし起動時には前回開いていたタブを復元します。キャンバス・構造クエリ・リンク検出・指紋・統計といった仮想タブも復元対象です(ウィンドウの枚数ごと復元されます)
  • ワークスペース(Ctrl+Shift+W): タブ構成・スクロール位置・キャンバスの視点・ウィンドウ位置をまとめて名前付きで保存し、いつでも復元できます。1 ワークスペース = 1 ウィンドウで、既に開いていれば二重には開かず前面化します
  • マルチウィンドウ(Ctrl+N): 複数のウィンドウを同時に開けます。テーマやズーム倍率はアプリ全体で共通です
  • PDF エクスポート(Ctrl+Shift+E): 表示中のドキュメントを PDF ファイルへ書き出します。画面のズーム倍率(Ctrl+ホイール / Ctrl+0)がそのまま出力倍率になるので、文字を小さくして 1 ページに詰めたいときはズームアウトしてから書き出してください(有効範囲は 10%〜200%。これを超えるズームは 200% として出力されます)
  • フォルダ内横断検索(Ctrl+Shift+F): アクティブなファイルのフォルダ配下の .md / .markdown を再帰的に検索し、ファイルごとにヒット行のプレビューを表示します。文書が参照する画像内の文字(OCR)もヒット対象です
  • ファイルツリー(Ctrl+B): アクティブなファイルのフォルダを起点にしたファイルツリーをサイドバーに表示し、クリックで開けます
  • 戻る(Alt+← / ツールバー左側): 1 つ前に表示していたファイルへ戻ります。タブを閉じた後でも戻れます(履歴はパスで持っているため、タブが無ければ開き直します)。履歴はウィンドウごとに独立していて、最大 50 件・保存はしません
  • 上の階層へ(Alt+↑ / ツールバー左側): ファイルツリーのルートを 1 つ上のフォルダへ移します。タブは動きません。 上げたルートは、読んでいるファイルがその配下にある限り保たれ、外れると通常どおりアクティブなファイルのフォルダへ戻ります
  • ズーム記憶: Ctrl+ホイール / Ctrl+0 のズーム倍率を記憶し、全タブに反映します。拡大縮小した瞬間は現在の倍率(120% など)が画面右下に表示され、操作を止めると自動で消えます(印刷・PDF には写りません)
  • クリップボード/テキストドロップのクイックプレビュー: クリップボードのテキスト(Ctrl+Shift+V)やドロップしたテキストを一時 Markdown として即座に表示します
  • 構造クエリビュー(Ctrl+Shift+S): フォルダ配下の全文書から「見出しだけ」「タスク(- [ ])だけ」「TODO などのキーワードを含むブロックだけ」を横断抽出して一覧表示し、クリックで該当行へジャンプできます
  • リンク切れ・孤立ページの検出ビュー(Ctrl+Shift+L): フォルダ配下の全文書から、解決できないリンク(リンク先が無い / 走査範囲の外 / [[wikilink]] が索引に無い)と、被リンクが 0 のページを一覧表示します。クリックで参照元の該当行へジャンプでき、一覧は hirake://open?path=...&line=... 付きのテキストとしてコピーできます(Hirake は検出して場所を示すところまでを担い、修正はエディタや AI が行います)
  • 文書指紋・類似検出(Ctrl+Shift+R): フォルダ配下の全文書からコピペ由来・編集済みコピペの重複記述を検出してグループ表示し、クリックで該当行へジャンプできます
  • フォルダ統計ダッシュボード(Ctrl+Shift+T): ファイル数・文字数などのサマリ、過去365日の更新ヒートマップ、開くたびに育つ推移グラフ、放置文書・ボリューム・未完了タスクのランキングを表示します
  • 無限キャンバス・モード(Ctrl+Shift+C): フォルダ配下の全文書をズーム可能な無限キャンバスへ空間配置。ズームアウトでリンクグラフ、ズームインでサムネイル付きカード、さらに拡大すると中央付近の文書が実物のインラインプレビューになります(同時に最大 3 枚・遠ざかると自動で破棄)。ドラッグ配置はピン留めとして記憶されます
    • ナレッジグラフ(Ctrl+G)はこのキャンバスの「全体俯瞰」として開きます(Ctrl+Shift+C は前回の視点で再開)
    • プレビューは静的表示(スクリプトを実行しないため Mermaid・数式・シンタックスハイライトは出ません)。完全な表示はタイトル部分のダブルクリックで通常タブへ
  • KaTeX 数式: $...$ / $$...$$ の数式を KaTeX で描画します
  • フロントマターカード + メタ情報バー: YAML フロントマターをカード表示し、文字数・読了目安・更新日時をバーに表示します
  • 別ドライブ絶対パスリンク対応: 別ドライブへの絶対パスの .md リンクも新しいタブで開けます
  • [[wikilink]] 記法: Obsidian などで使われる [[ページ名]] をリンクとして扱います。ナレッジグラフ・バックリンク・キャンバスにも反映されます(後述)
  • エディタで開く(Ctrl+E): いま読んでいる行を外部エディタの同じ行で開きます。エディタは選ぶだけで使えます(後述)

インストール

Releases から HirakeSetup-x.y.z.exe をダウンロードして実行します。

  • 管理者権限は不要です。 %LocalAppData%\Programs\Hirake にユーザー単位でインストールします
  • .NET ランタイムの事前導入も不要です。 インストーラに同梱しています
  • .md の関連付けとスタートメニューのショートカットは、ウィザードのチェックボックスで選べます

アンインストールは「設定 > アプリ > インストールされているアプリ」から行います。

初回起動時の警告について

インストーラにコード署名がないため、「Windows によって PC が保護されました」という青い画面が出ます。 「詳細情報」→「実行」 を押すと続行できます(この表示は署名証明書を取得するまで消せません)。

設定やデータも完全に削除したい場合

アンインストールしても、設定・ワークスペース・セマンティック索引は残ります(再インストール時に失わないためです)。完全に消す場合は、アンインストール後に次のフォルダを削除してください。

Remove-Item -Recurse -Force "$env:LocalAppData\Hirake"

ビルド方法

.NET 10 SDK がインストールされた環境で、以下のコマンドを実行してください。

dotnet publish src/Hirake -c Release -r win-x64 --self-contained false -o publish

ビルド成果物は publish フォルダに出力されます(publish\Hirake.exe)。

配布用のインストーラを作る手順は installer/README.md を参照してください。

.md 関連付け手順

インストーラを使った場合、この手順は不要です(ウィザードで登録済み)。ソースからビルドした場合や、インストール時に関連付けを外した場合に使います。

.md / .markdown ファイルを Hirake で開けるようにするには、scripts/register.ps1 を実行します。管理者権限は不要です(現在のユーザー = HKCU にのみ登録します)。

# 既定の exe パス(publish または bin\Release)を自動検出して登録する場合
.\scripts\register.ps1

# exe のパスを明示的に指定する場合
.\scripts\register.ps1 -ExePath "C:\Tools\Hirake\Hirake.exe"

登録すると、以下が行われます。

  • Hirake.md という ProgId を HKCU に登録
  • .md / .markdown の「プログラムから開く」候補に Hirake を追加
  • .md の既定プログラムが未設定の場合のみ Hirake を既定に設定(既に別アプリが既定になっている場合は上書きしません)
  • hirake:// の URL プロトコルを登録(下記のディープリンク用)

他アプリが .md に登録している既定プログラムや「プログラムから開く」候補は変更しません。既に別アプリが既定になっている環境では、Hirake は「プログラムから開く」候補にのみ追加されます。

注意: Windows 11 では初回のみ、.md ファイルを右クリック →「プログラムから開く」→「別のプログラムを選択」から Hirake を選び、「常にこのアプリを使う」にチェックを入れる操作が必要な場合があります。

関連付けの解除手順

登録した関連付けを削除するには、scripts/unregister.ps1 を実行します。

.\scripts\unregister.ps1

Hirake の ProgId・OpenWithProgIds・hirake:// プロトコルのエントリを削除します。.md の既定プログラムは、Hirake.md になっている場合のみ削除され、他アプリが既定になっている場合は変更しません。Hirake が追加した値を除去し、その結果として空になった関連キーも削除します。

どちらのスクリプトも「どの値を自分が作ったか」は記録していません。unregister.ps1 の契約は「現時点で存在する Hirake の関連付けをすべて解除する」ことなので、実行前から Hirake の関連付けがあった場合はそれも解除されます。また、実行前から空だった OpenWithProgIds / 拡張子キーも掃除の対象になります。

他アプリが登録した OpenWithProgIds のエントリが残っている場合、そのキーは削除されません。Hirake.md ProgId と hirake:// プロトコルのキーも、shell\open\command の実行ファイル名が Hirake.exe であることを確認してから削除します。確認できない場合(別の実行ファイルを指している/shell\open\command が無い)は、レジストリを 1 つも変更せずに終了コード 1 で中止します。

確認しているのは実行ファイルの名前だけで、パスは見ていません。別アプリの実行ファイルもたまたま Hirake.exe という名前であれば Hirake のものと判定されます。

両スクリプトはレジストリ操作と手順を scripts/association-lib.ps1 に集約しており、単体では動作しません。3 ファイルを同じフォルダに置いて実行してください。

どちらも失敗時は終了コード 1 で終わります。値ごとのロールバックは行わないため、その時点で一部の変更が適用済みのことがあります。原因を解消して再実行してください(両スクリプトとも何度実行しても同じ結果になります)。

関連付けスクリプトのテスト

tests/ にリグレッションテストがあります。Pester には依存しません(追加インストール不要)。実際の .md / .markdown / Hirake.md / hirake には一切触れず、実行ごとに一意な使い捨ての ProgId・URL スキーム・拡張子だけを使い、終了時に削除します。

# レジストリ操作の関数単体
.\tests\test-association-lib.ps1

# 登録・解除の制御フロー(呼ぶ順序、どの失敗で何をやめるか、表示と終了コード)
.\tests\test-association-flow.ps1

hirake:// ディープリンク

ブラウザ・チャット・タスク管理ツール・エディタなど他アプリから、特定文書の特定位置へ直接リンクできます(scripts/register.ps1 での登録が必要)。

hirake://open?path=<URLエンコードした絶対パス>[&line=<1始まりの行番号>][&heading=<URLエンコードした見出しテキスト>]
パラメータ説明
path必須。ローカルの絶対パス。拡張子は .md / .markdown のみ
line任意。1 始まりの行番号
heading任意。見出しテキストそのもの(概要 など)。指定すると line より優先されます

例:

Start-Process "hirake://open?path=C%3A%5Cdocs%5Csample.md&heading=%E6%A6%82%E8%A6%81"
Start-Process "hirake://open?path=C%3A%5Cdocs%5Csample.md&line=42"
  • Hirake が起動していなければ起動して開き、起動済みなら既存ウィンドウの新規タブで開いて前面化します。同じファイルが既に開いていればそのタブへジャンプします(複数ウィンドウがある場合は、そのファイルを開いているウィンドウ → 無ければ最後にアクティブだったウィンドウ)
  • リンクは**タブを右クリック →「この位置へのリンクをコピー」**でも作れます(現在のスクロール位置が line に入ります)
  • heading に見出し id(section-1 等)ではなく見出しテキストを使うのは、日本語見出しの id が自動採番になり人間が書けないためです
  • 安全のため、UNC・ネットワークドライブのパス、.md / .markdown 以外の拡張子、存在しないファイル、未知の verb は黙って無視します(行うのは「Markdown をタブで開く」ことだけです)

ワークスペースへのリンク

hirake://workspace?name=<URLエンコードしたワークスペース名>
Start-Process "hirake://workspace?name=%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E6%BA%96%E5%82%99"
  • 同名のワークスペースを開いているウィンドウがあれば前面化するだけで、二重には開きません。無ければ新しいウィンドウで開きます
  • 名前は前後の空白を除いた大文字小文字を無視する完全一致で照合します。一致するものが無ければ黙って無視します
  • name はパスとして一切解釈しません(ワークスペースは名前をファイル名に使わない設計のため、トラバーサルの経路自体が存在しません)
  • URI 経由で既存のタブが閉じられることはありません(新しいウィンドウで開く設計のため、破壊的な経路が構造的に存在しません)

Obsidian などで使われる [[ページ名]] を、ふつうのリンクとして扱います。ナレッジグラフ(Ctrl+G)・バックリンクパネル・キャンバスにもそのまま反映されます。

書き方動き
[[ページ名]]そのページを新しいタブで開く
[[ページ名|表示名]]表示だけ変えて同じページを開く
[[ページ名#見出し]]そのページの該当見出しへスクロールする
[[フォルダ/ページ名]]フォルダを指定して曖昧さをなくす

拡張子は省略できます([[note]] でも [[note.md]] でも同じ)。

どのファイルが開くか

探す範囲は、開いているファイルから推定したワークスペースのルート配下です(横断検索・ナレッジグラフと同じ範囲)。同名のファイルが複数あるときは、次の順で 1 つに決めます。

  1. [[sub/note]] のようにフォルダを指定していれば、それに一致するもの
  2. リンク元と同じフォルダにあるもの
  3. ルートから見て階層が浅いもの
  4. それでも決まらなければパス順の先頭

4 まで来た場合はリンクとして開けますが、点線の下線で「同名が複数ある」ことを示します。どれが選ばれたかはマウスを乗せると分かります。

見つからないとき

リンクにはせず、[[まだ無いページ]] のように原文のまま赤い破線で表示します。黙って通常の文字にすると、リンクのつもりが繋がっていないことに気付けないためです。

誤爆しないための決まり

[[ を含む普通の文章をリンクにしてしまわないよう、次の場合はリンクにしません。

  • コードブロック・インラインコードの中
  • [[0][1]] のように内側に [ ] を含むもの
  • \[[...]] とエスケープしたもの
  • 改行をまたぐもの、[[]] のように中身が空のもの
  • ![[...]](埋め込み記法。Hirake では非対応)

それでも都合が悪い場合は、settings.json の WikiLinksEnabled を false にすると機能ごとオフにできます(設定 UI はありません。タブの再読み込みで反映されます)。

[表示](other.md#見出し) のような通常のリンクでも、#見出し で開いた先の該当位置までスクロールします。 見出しテキスト(#決めごと)と GitHub 流の見出し id(#my-heading)のどちらでも指定できます。

エディタで開く(Ctrl+E)

いま読んでいる行を、外部エディタの同じ行で開きます。編集機能は入れず、編集へ移る経路だけを用意する形です。

  • タブを右クリック →「エディタで開く」、またはショートカットの Ctrl+E
  • 「フォルダをエディタで開く」で、vault 全体をエディタ側で開けます
  • エディタ側で保存すれば、Hirake は自動リロードしてスクロール位置も保ちます(従来どおり)

初回だけエディタを選ぶ

はじめて使ったときに、インストール済みのエディタを探して一覧で出します。選ぶだけで使え、引数を書く必要はありません。

┌─ エディタを選ぶ ──────────────────────────────┐
│  ● Visual Studio Code                          │
│    ...\Microsoft VS Code\Code.exe              │
│    見つけた場所: 既知のインストール先            │
│  ○ メモ帳                                       │
│    C:\Windows\system32\notepad.exe              │
│    見つけた場所: PATH                           │
│    ※ 行ジャンプには対応していません              │
└────────────────────────────────────────────────┘

同名の実行ファイルが複数見つかることがあるため、どこで見つけたかを併記し、候補が 1 件でも確認を求めます。行ジャンプに対応していないエディタは、その場で分かるようにしています。

一覧に無いエディタは「一覧に無い…」から .exe を選べます(この場合はファイルを開くところまで。行ジャンプが必要なら下記の設定を書き換えてください)。

同梱しているエディタ

実機で確認できたものだけを同梱しています。

エディタ行ジャンプ
Visual Studio Code✅
サクラエディタ✅
メモ帳—

秀丸 / Notepad++ / EmEditor / Sublime Text / gVim は未検証のため、Assets\editors.json の unverified に置いてあります。使う場合は editors 配列へ移してください(引数が違っていれば、そのファイルを直せば直ります)。

設定

選んだ内容は settings.json の Editor に保存されます。選び直すときはこの項目を削除してください(次に Ctrl+E を押したときに再び選択画面が出ます)。

"Editor": {
  "Name": "サクラエディタ",
  "ExePath": "C:\\Program Files (x86)\\sakura\\sakura.exe",
  "FileArgs": ["-Y={line}", "{file}"],
  "NoLineArgs": ["{file}"],
  "FolderArgs": [],
  "SupportsLine": true
}

{file} / {line} / {folder} が置き換わります。引数は配列で持ちます(1 本の文字列にしないのは、パスに空白・日本語・& が含まれても壊れないようにするためです)。

起動に失敗したときは、実行しようとした内容と理由を表示し、診断ログにも残します。

シンボリックリンクで束ねたフォルダ

複数の場所にある docs/ を 1 つの vault へシンボリックリンク(またはジャンクション)で集めている場合、既定ではリンクを辿りません。横断検索・ファイルツリー・ナレッジグラフなどの結果にリンク先の文書は出ません。

これは、リンクが \\server\share のようなネットワーク共有を指していると、走査した時点で認証情報が送られてしまうためです。

リンクを経由するフォルダ自体も、既定では開けません。 C:\vault\link\docs\x.md のように、開いたファイルの経路のどこかにリンクがある場合、サイドバーのファイルツリーや横断検索は次のように案内します。

このフォルダはリンクを経由しています。
settings.json の FollowDirectoryLinks を true にすると表示できます。

(\\server\share を指すリンクなど、設定を有効にしても開けないものにはこの案内は出ません。)

辿るようにするには、%LocalAppData%\Hirake\settings.json に次を追加して Hirake を再起動します。

{
  "FollowDirectoryLinks": true
}

有効にしても、次のリンクは辿りません。

  • \\server\share のような UNC パスを指すもの
  • ネットワークドライブを指すもの
  • 固定ドライブ・リムーバブルドライブ以外(CD-ROM や RAM ディスクなど)を指すもの
  • \\?\GLOBALROOT\... のようなデバイスパス(\\?\C:\ と \\?\Volume{...}\ は除く)
  • 途中に 1 つでも上記が挟まるリンクの連鎖
  • 解決できないもの(判定できないものは辿らない)

なお、辿らないのはあらかじめ置かれたリンクについての判定です。走査している最中にリンクの向き先を書き換えられる状況までは防げません(フォルダを直接開く場合は従来どおり、UNC とネットワークドライブを拒否します)。

表示されるパスは実体のパスになります。 C:\vault\docs-a\x.md ではなく、リンク先の C:\repo-a\docs\x.md として扱われます。同じ文書がリンク経由と実体の両方で二重に出るのを防ぐためです。

ワークスペースとセッションにも実体のパスが保存されます。 リンク経由のパスのままだと、次に開いたときにそのタブが復元されないためです。すでに保存済みのワークスペースも、読み込んだ時点で実体のパスとして扱われます(ファイルは書き換えません)。

なお、C:\vault\current のようなリンクを張り替えて参照先を切り替える使い方をしている場合、ワークスペースには保存した時点の実体が記録されます。張り替えても、そのワークスペースは元の実体を開きます。

ワークスペース

タブ構成をまとめて保存し、いつでも同じ状態に戻せます。ツールバーの「ワークスペース」ボタン、または Ctrl+Shift+W で一覧を開きます。

操作動作
名前を入力して「保存」そのウィンドウのタブ構成を保存します。以後このウィンドウはそのワークスペースとして扱われます
一覧の項目をクリック新しいウィンドウで開きます。既に開いていればそのウィンドウを前面化します(● 印が付きます)
ゴミ箱アイコン確認のうえ削除します
ウィンドウを閉じる名前付きワークスペースなら、タブ構成の変更が自動で書き戻されます(保存忘れが起きません)

保存されるもの: タブの並び順・種別(文書 / キャンバス / 構造クエリ / リンク検出 / 指紋 / 統計)・アクティブタブ・各文書のスクロール位置・キャンバスの視点(パン位置とズーム率)・ウィンドウの位置とサイズ。

保存されないもの:

  • キャンバスのノード配置は共有のまま(canvas-layout の値を参照するだけ)です。同じフォルダを含む 2 つのワークスペースが別々の座標を持つと、手動配置(ピン留め)のどちらが正しいか決められなくなるためです
  • クリップボード由来の無名タブ
  • テーマ・ズーム倍率(引き続きアプリ全体の設定です)

上限は、ワークスペース 50 件 / 1 ワークスペース 200 タブ / 名前 60 文字 / 同時に開けるウィンドウ 10 枚です。保存先は %LocalAppData%\Hirake\workspaces.json で、書き込みは一時ファイル経由の原子的置換を行います(壊れた場合は空の一覧として起動します)。

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

キー動作
Ctrl+OMarkdown ファイルを開く
Ctrl+Eいま読んでいる行を外部エディタで開く
Ctrl+N新しいウィンドウを開く
Ctrl+Shift+Wワークスペース一覧の開閉
Ctrl+W現在のタブを閉じる
Ctrl+Tab次のタブへ切り替え
Ctrl+Shift+Tab前のタブへ切り替え
Ctrl+Fページ内検索を開く
Esc検索を閉じる
Ctrl+Shift+EPDF にエクスポート
Ctrl+Shift+Vクリップボードのテキストを表示
Ctrl+Shift+Dテーマ切替(自動 → ライト → ダーク)
Ctrl+Bファイルツリー サイドバーの表示切替
Alt+←1 つ前に表示していたファイルへ戻る
Alt+↑ファイルツリーのルートを 1 つ上のフォルダへ
Ctrl+Shift+Fフォルダ内横断検索(サイドバーを開いて検索)
Ctrl+Gナレッジグラフ(キャンバスの全体俯瞰)を開く
Ctrl+Shift+S構造クエリビューを開く
Ctrl+Shift+Lリンク切れ・孤立ページの検出ビューを開く
Ctrl+Shift+R文書指紋・類似検出ビューを開く
Ctrl+Shift+Tフォルダ統計ダッシュボードを開く
Ctrl+Shift+C無限キャンバス・モードを開く
Ctrl+P印刷(プレビュー)
Ctrl+ホイール / Ctrl+0ズーム(拡大縮小 / 100% に戻す)

動作要件

  • Windows 10 バージョン 1809(10.0.17763)以降 / Windows 11、x64
  • WebView2 Runtime(Windows 11 には標準搭載。Windows 10 では別途インストールが必要な場合があります)
  • .NET 10 Desktop Runtime — インストーラを使う場合は不要(同梱しています)。ソースからビルドして使う場合のみ必要です

ライセンス

Hirake は MIT License で公開されています。

Copyright (c) 2026 soramaru777

同梱・利用しているサードパーティライブラリ

ライブラリ用途ライセンス
MarkdigMarkdown → HTML 変換BSD-2-Clause
Microsoft.Web.WebView2HTML レンダリング(SDK)Microsoft Software License Terms
highlight.js(github / github-dark テーマ含む)シンタックスハイライトBSD-3-Clause
mermaid図の描画MIT
KaTeX(同梱フォント含む)数式レンダリングMIT

highlight.js / mermaid / KaTeX は src/Hirake/Assets/vendor/ にミニファイ済みファイルを同梱しています。各ライセンスの全文は THIRD-PARTY-NOTICES.md を参照してください。