ハクソク

世界を動かす技術を、日本語で。

Show HN: Ferrite – Rust製のMarkdownエディタでネイティブのMermaidダイアグラムレンダリングをサポート

概要

Ferriteは、Rustとeguiで構築された高速・軽量なテキストエディタ
Markdown、JSON、YAML、TOMLファイルの多機能編集に対応。
Windows向けに主に開発・テストされており、Linux/macOSも利用可能。
AIによる自動生成コードを活用し、最新技術を体験可能
GitHubでインストール・貢献ができ、多彩な機能と拡張性を提供。

Ferrite 概要

  • Rustとeguiによるネイティブ・レスポンシブなテキストエディタ
  • Markdown、JSON、YAML、TOMLのマルチフォーマット対応
  • Windows優先開発、Linux・macOSもサポート(未検証部分あり)
  • すべてのコード・ドキュメントはAI(Claude/Anthropic)生成
  • プロダクト指向、AI開発の学習・実験プロジェクト

主な機能

  • WYSIWYG Markdown編集:ライブプレビュー、クリック編集、シンタックスハイライト
  • 多形式サポート:Markdown、JSON、YAML、TOMLのネイティブ編集
  • ツリービューア:JSON/YAML/TOMLを階層表示、インライン編集、パスコピー
  • 検索・置換:正規表現対応、ハイライト付き
  • Undo/Redo:タブごとに完全サポート
  • 分割ビュー:生テキスト+プレビューを同時表示、リサイズ可能
  • Zenモード:集中執筆用、中央寄せ表示
  • 同期スクロール:生テキストとプレビュー間で双方向同期

エディタ機能

  • シンタックスハイライト:40以上の言語に対応
  • コードフォールディング:見出し・コードブロック・リストの折りたたみ指標
  • ミニマップ:VS Code風ナビゲーションパネル、クリックジャンプ・検索ハイライト
  • 括弧マッチング:()[]{}<>や強調記号の対応強調表示
  • 自動保存:一時ファイル安全機能付き、設定可能
  • 行番号表示:オプションで切り替え
  • MermaidJSダイアグラム:11種類の図をプレビュー内でネイティブ描画

最新リリース情報

  • v0.2.2:安定性・CLI強化、CJKフォント対応、Undo/Redo改善、コマンドラインファイルオープン、ログレベル・初期表示設定追加

ワークスペース機能

  • ワークスペースモード:フォルダ/ファイルツリー、クイックスイッチャー、全文検索
  • Git連携:変更・追加・未追跡・無視ファイルの状態表示
  • セッション保持:タブ・カーソル・スクロール位置を再起動時に復元

追加機能

  • ライト/ダークテーマ:実行時切替対応
  • ドキュメントアウトライン:大規模文書のアウトラインパネル
  • エクスポート:HTML書き出し、HTMLコピー
  • フォーマットツールバー:太字・斜体・見出し・リスト・リンク等のショートカット
  • ライブパイプライン:JSON/YAMLをシェルコマンドにパイプ可能
  • カスタムウィンドウ:枠なしウィンドウ・独自タイトルバー・リサイズ対応

インストール方法

  • GitHub Releasesから各OS向けバイナリをダウンロード

    • Windows: ferrite-windows-x64.zip
    • Linux: ferrite-editor_amd64.deb(推奨)、ferrite-linux-x64.tar.gz
    • macOS: ferrite-macos-x64.tar.gz
  • Linux .debパッケージ

    • sudo apt install ./ferrite-editor_amd64.deb でインストール
    • /usr/bin/ferrite に配置、デスクトップエントリ・関連付け・アイコン自動登録
  • Arch Linux

    • AURパッケージ ferrite / ferrite-bin
    • 例:yay -Sy ferrite または yay -Sy ferrite-bin
  • tar.gz利用

    • tar -xzf ferrite-linux-x64.tar.gz 展開後、./ferrite 実行
  • ソースビルド

    • Rust 1.70+ 必須(rustup.rsからインストール)
    • Windows: Visual Studio Build Tools 2019+
    • Linux: build-essential, pkg-config, libgtk-3-dev, libxcb-shape0-dev, libxcb-xfixes0-dev など
    • macOS: xcode-select --install
    • ビルド手順
      • git clone https://github.com/OlaProeis/Ferrite.git
      • cd Ferrite
      • cargo build --release
      • バイナリは target/release/ 配下

使い方

  • 起動cargo run --release またはビルド済みバイナリ実行
  • ファイル指定起動./ferrite path/to/file.md
  • 複数ファイルタブ./ferrite file1.md file2.md
  • ワークスペース(フォルダ)起動./ferrite path/to/folder/
  • バージョン表示./ferrite --version
  • ヘルプ表示./ferrite --help
  • CLI詳細:docs/cli.md参照

ビューモード

  • Raw:プレーンテキスト編集+ハイライト
  • Rendered:WYSIWYGプレビュー編集
  • Split:生テキストとプレビューの同時表示
  • 切り替え:ツールバーまたはショートカット使用

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

  • ファイル操作

    • Ctrl+N:新規作成
    • Ctrl+O:開く
    • Ctrl+S:保存
    • Ctrl+Shift+S:名前を付けて保存
    • Ctrl+W:タブを閉じる
  • ナビゲーション

    • Ctrl+Tab:次のタブ
    • Ctrl+Shift+Tab:前のタブ
    • Ctrl+P:クイックファイル切替
    • Ctrl+Shift+F:全文検索
  • 編集

    • Ctrl+Z:Undo
    • Ctrl+Y / Ctrl+Shift+Z:Redo
    • Ctrl+F:検索
    • Ctrl+H:検索と置換
    • Ctrl+B:太字
    • Ctrl+I:斜体
    • Ctrl+K:リンク挿入
  • 表示

    • F11:全画面切替
    • Ctrl+,:設定
    • Ctrl+Shift+[:すべて折りたたみ
    • Ctrl+Shift+]:すべて展開

設定

  • 保存場所

    • Windows: %APPDATA%\ferrite\
    • Linux: ~/.config/ferrite/
    • macOS: ~/Library/Application Support/ferrite/
    • ワークスペース設定は .ferrite/ フォルダ内
  • 設定パネル

    • Ctrl+, またはギアアイコンからアクセス
    • 外観:テーマ、フォントファミリ、サイズ
    • エディタ:ワードラップ、行番号、ミニマップ、括弧マッチング、コードフォールディング、シンタックスハイライト
    • ファイル:自動保存、履歴

今後のロードマップ・貢献

  • ROADMAP.mdで開発予定・既知課題を公開
  • 貢献歓迎:CONTRIBUTING.md参照
  • クイックスタート
    • Fork/Clone
    • ブランチ作成・変更・ビルド・テスト
    • コミット・プッシュ

技術スタック

  • Rust 1.70+
  • GUI:egui 0.28 + eframe 0.28
  • Markdown:comrak 0.22
  • シンタックスハイライト:syntect 5.1
  • Git連携:git2 0.19
  • CLIパース:clap 4
  • ファイルダイアログ:rfd 0.14
  • クリップボード:arboard 3
  • ファイル監視:notify 6
  • ファジーマッチ:fuzzy-matcher 0.3

ライセンス・謝辞

  • MITライセンス
  • 主要ライブラリ:egui, comrak, syntect, git2, Inter, JetBrains Mono
  • 開発支援ツール:Claude (Anthropic), Cursor, Task Master

Ferriteの特徴まとめ

  • 高速・軽量な起動、約15MBバイナリ
  • 即時起動、大規模ファイルにも最適化
  • Windows/Linux/macOS対応
  • ネイティブMermaidダイアグラム描画
  • GitHubで最新版・詳細情報・貢献募集
    • https://github.com/OlaProeis/Ferrite

フィードバック・今後の展望

  • v0.2.2以降、大規模ファイル対応のパフォーマンス改善予定
  • ユーザーからのフィードバック歓迎

Hackerたちの意見

Typoraにお金を払ったのは嬉しかったな。Markdownだけで、JSONやYamlのサポートはないけど、同じようなことをやってくれるから。LLMが解析可能なテキストや埋め込まれた図をたくさん出力してる今、これはいい感じの市場だと思う。
Typoraの幸せなユーザーがここにいるよ!埋め込まれたメディアをドキュメントにドラッグすると、自動的に関連資産フォルダを作ってくれるのが本当に好き。
Typoraの15ドルという価格は、提供される基本機能を考えるとちょっと高い気がする。
ありがとう!Typoraは素晴らしいよね。Ferriteは似たような洗練さを目指してるけど、ネイティブのMermaidや構造化データのサポート(JSON/YAML/TOMLのツリービューア)、シェル統合のためのパイプライン機能があるよ。そしてオープンソースだ!
明らかにeguiの美学に頼ってないeguiプロジェクトを見るのはいいね。eguiでの作業はどうだった?
> eguiでの作業はどうだった? Claude CodeはReactの方が好きだったみたい。
eguiは迅速なプロトタイピングに最適だね。即時モードで状態管理が簡単になるし。主な制限は、TextEditがコードエディタ向けに設計されてないこと(マルチカーソルがないし、折りたたんだテキストを隠せない)。v0.3.0ではカスタムウィジェットに置き換える予定だよ。デフォルトのスタイルは「egui」って感じが強いから、カスタムテーマに時間をかけてそれを避けたよ。
他のライブラリがChromiumを立ち上げてスクリーンショットを撮るのに頼ってる中、ネイティブのMarkdownレンダリングが見られるのは嬉しい!
ネイティブレンダリングの大きな欠点は、ネイティブで編集してから他の場所で共有するときに、レイアウトの一貫性が欠けることだね。図がmermaid.jsでレンダリングされるときに特にそうなる。
確かに!ネイティブレンダリングはmermaid.jsでピクセルパーフェクトにはならないね。トレードオフはスピードとJSランタイムがないことだよ。Ferrite内に留まるドキュメントには最適だけど、共有用にはv0.3.0でSVGエクスポートを追加するから、必要ならmermaid.jsを使って最終レンダリングができるようにするよ。
これはいいね。Zedからの進展を期待してたけど(例えばTree-sitter → https://github.com/tree-sitter-grammars/tree-sitter-markdown)、これを見るのはワクワクする。私はObsidianをヘビーユーザーで、すごく気に入ってるけど、基盤に焦点を当てた本当の代替品が見たいな。もしあれば、最終的な目標についてもっと知りたい。頑張って!これを見守るよ。
Obsidianは何で書かれてるの?Electron?
Obsidianユーザーなんだね。今作ってるhttps://hyperclast.com/についてフィードバックもらえたら嬉しいな。まだShow HNをする準備はできてないから、投稿はしないでほしいけど、早めのフィードバックをもらえると助かる!
ありがとう!最終的な目標は、「ただ動く」速いネイティブMarkdownエディタだよ。Electronもウェブ技術もなしで、すぐに起動するやつ。v0.3.0ではMermaidをスタンドアロンのクレートとして抽出して、eguiのTextEditブロックの機能を解放するカスタムテキストエディタウィジェットを作る予定だよ(マルチカーソルやコード折りたたみがちゃんとできる)。長期的には、エコシステムに欠けているヘッドレスRustライブラリとしてエディタを抽出する可能性もあるよ。詳しくはROADMAP.mdを見てね。
スクリーンショットのテキストを見るには拡大鏡が必要だね。状況がわかるくらいの大きさのウィンドウでスクリーンショットを取るのが理想だと思うけど、それ以上は大きくしない方がいいよ。フルスクリーンや最大化は避けた方がいいかも、特に高解像度でやってるならね。ウィンドウに空白が多いと、それはサイズが大きすぎるサインだよ。こうすれば、自分のディスプレイより小さい画面、例えばスマホでもズームなしで読みやすいスクリーンショットが保証されるよ。
いいフィードバック、ありがとう!その通りだね — スクリーンショットは高解像度で撮ってるから、小さいディスプレイだと読みづらいんだ。もっと集中したウィンドウサイズで、無駄なスペースを減らして再撮影するよ。具体的なアドバイス、感謝!
スクリーンショットを見てると、これが5年前だったら数日や数週間かかってたんじゃないかな。今は2セッションでコーディングできる感じだね。すごい時代だよ。
ハハ!褒めてくれてありがとう(と思う?)。正直に言うと、開発中にAIツールは使ったよ — ボイラープレートやドキュメント、知らないAPIを探るのには最高なんだ。でも「2セッション」ってわけじゃなくて、Ferriteは数ヶ月間開発してきたし、50以上のモジュールに約30,000行のRustが使われてる。Mermaidレンダラーだけでも約6000行のレイアウトアルゴリズムがあるし(Sugiyamaスタイルのグラフレイアウト、シーケンス図のアクティベーショントラッキング、ネストされた状態機械など)。AIはめっちゃ助けてくれたけど、「完全なアプリを生成する」プロンプトで、ネイティブの図形レンダリングやロープベースのテキストバッファ、カスタムウィンドウクロームを持つ動作するテキストエディタができるわけじゃない。やっぱりドメインを理解する必要があるね。それにしても、開発のスピードは5年前よりも早くなってるのは確か。ワクワクする時代だね!
すぐに雰囲気でコーディングできるけど、AIなしでもかなり早くできるよ — 重い作業はZedのUIライブラリがやってくれるからね。これがこういうアプリの本当の鍵だよ。
すごいね!ただ、これを日常のノート取り用に試すのをためらうのは、LaTeXのサポートがないからなんだ。最近、Linuxでのレンダリングやパフォーマンスの問題でObsidianからZettlrに切り替えたけど、すごく良い体験だったよ。でも、新しい選手が登場するのはいつも楽しみだね。
LaTeXのサポートは妥当なリクエストだね!すぐに実装する予定ではないけど、考えていることはこんな感じだよ:考慮したオプション:- KaTeX/MathJaxスタイルのレンダリング(Rustの数学レンダラーかJSブリッジが必要) - Typstの統合(Rustネイティブで、LaTeXの現代的な代替) - 外部ツールパイプライン(pandoc/LaTeX CLI経由でレンダリング)TypstはRustベースで、フルLaTeXよりも簡単だから面白いね。インライン数学($x^2$)と表示数学($$...$$)で君の使い方はカバーできるかな?それともフルドキュメント機能が必要?考慮リストに追加したよ。フィードバックありがとう!
> プラットフォームノート:Ferriteは主にWindowsで開発・テストされています。LinuxやmacOSでも動くはずですが、これらのプラットフォームでは広範なテストは行われていません。すごい!最近、Windowsでは2級市民のように感じてた。 > AI開示:このプロジェクトは100% AI生成のコードです。ああ、まあ、少なくとも正直に言ってるね。
v0.2.2がリリースされたよ — このスレッドで指摘された問題に対処してる:- CJKフォントサポート1 — 韓国語/中国語/日本語の文字が正しく表示されるようになった - CLIの改善 (#9, #10) — ferrite file.mdが動作するようになったし、--versionと--helpフラグも追加された - アンドゥ/リドゥの修正2 — スクロールリセットとフォーカスの問題を修正した - デフォルトの表示モード設定3 — スプリット/プレビューをデフォルトに設定できるようになった - 設定可能なログレベル4 — stderrのノイズを減らす - Ubuntu 22.04の互換性5 — .debが22.04+で動作するようになった。問題を報告してくれたみんなに感謝!ダウンロードはこちら: https://github.com/OlaProeis/Ferrite/releases/tag/v0.2.2
自分のアプリOctarine(https://octarine.app)を宣伝しちゃうけど、もっとWYSIWYGな編集体験を求めているユーザーにはおすすめだよ。すべてのノートをデバイスにMarkdownで保存できて、これもRust(Tauri)で書かれてるし、雰囲気コーディングじゃないからね :)