1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rust】mdlibで作るMarkdownウィキ

Posted at

Rustで書かれたノートアプリmdlibが実用性もあり、実装も興味深かったので紹介します。

Screenshot 2025-04-17 at 12.31.04.png

mdlibは、Rustで書かれたウェブベースのMarkdownノートアプリケーションです。自分のマークダウンファイルを、タグやカテゴリで整理し、リアルタイムプレビューでスムーズに編集できます。現時点では個人用途のみを想定しているようです(チーム機能なし)。

前提条件

  • Rust と Cargo (バージョン1.54.0以上)
  • ブラウザ(Chrome、Firefox、Safariなど)

mdlibの特徴

GitHub上の説明によると、mdlibには以下のような機能があります:

  • 📝 ディレクトリ内のマークダウンファイルの閲覧と編集
  • ✨ 新しいマークダウンファイルの作成
  • 👁️ リアルタイムでのマークダウンレンダリングプレビュー
  • 🔍 全ノートを対象とした検索機能
  • 🏷️ タグによる整理
  • 📂 カテゴリによる階層的な整理
  • 🌙 ダークモード対応
  • ⚡ キーボードショートカット
  • 🔄 自動保存機能
  • 💾 シンプルなファイル管理
  • 📱 レスポンシブデザイン
  • 🔍 全文検索機能
  • 🔗 ノート間のリンク機能
  • 📄 YAMLフロントマター対応
  • 🧩 カスタマイズ可能な設定
  • 📦 埋め込みウェブアセット(どのディレクトリからでも実行可能)

インストール方法

cargoを使ったインストール

cargo install mdlib

ソースからのビルド

  1. リポジトリをクローンします:
git clone https://github.com/bahdotsh/mdlib.git
cd mdlib
  1. プロジェクトをビルドします:
cargo build --release

コンパイルされたバイナリはtarget/release/mdlibに配置されます。

使い方

mdlibを起動するには、以下のコマンドを実行します:

mdlib [DIRECTORY]

[DIRECTORY]はマークダウンファイルを含むディレクトリへのパスです。指定しない場合、現在のディレクトリが使用されます。

カスタム設定ファイルを指定することもできます:

mdlib --config-file /path/to/config.json [DIRECTORY]

起動したら、ブラウザでhttp://localhost:3000にアクセスします。

設定コマンド

mdlibには設定を管理するための特別なコマンドが含まれています:

# 設定ファイルの場所と現在の設定を表示
mdlib --config

# デフォルトの設定ファイルを作成
mdlib --config create

# 埋め込まれた静的ファイルを一覧表示(デバッグ用)
mdlib --list-embedded

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

READMEに記載されているキーボードショートカットは以下の通りです:

  • Ctrl/Cmd + S: 現在のファイルを保存
  • Ctrl/Cmd + B: 選択したテキストを太字に
  • Ctrl/Cmd + I: 選択したテキストを斜体に
  • Ctrl/Cmd + P: プレビューモードの切り替え
  • Ctrl/Cmd + N: 新しいノートの作成

設定

--config-fileオプションでカスタム設定ファイルを指定できます:

mdlib --config-file /path/to/config.json

設定オプションには以下が含まれます:

  • サーバーポート
  • バインドアドレス
  • ファイル監視
  • 最大ファイルサイズ
  • デフォルトのテーマ設定

設定例

デフォルト設定を持つconfig.jsonファイルの例:

{
  "port": 3000,
  "watch_files": true,
  "bind_address": "127.0.0.1",
  "max_file_size_mb": 10,
  "default_dark_mode": false
}

これらの設定は好みに応じてカスタマイズできます:

  • port: mdlibサーバーのHTTPポート(デフォルト: 3000)
  • watch_files: ファイルの変更を監視して自動更新するかどうか(デフォルト: true)
  • bind_address: バインドするアドレス(デフォルト: "127.0.0.1"、外部アクセスを許可するには "0.0.0.0" を使用)
  • max_file_size_mb: メガバイト単位の最大ファイルサイズ(デフォルト: 10)
  • default_dark_mode: デフォルトでダークモードで起動するかどうか(デフォルト: false)

mdlibの内部構造

GitHub上のソースコードを調査すると、プロジェクト構造は以下のようになっています:

  • src/: ソースコード
    • main.rs: エントリーポイント
    • fs.rs: ファイルシステム操作
    • server.rs: ウェブサーバーとAPIエンドポイント
    • config.rs: 設定管理
    • embedded.rs: 埋め込み静的アセットハンドラ
  • static/: 静的ウェブファイル(コンパイル時にバイナリに埋め込まれる)
    • index.html: メインHTMLページ
    • css/: スタイルシート
    • js/: JavaScriptファイル

技術的な解説

ソースコードをみたところ、mdlibはAxumを中心に以下のような技術を使用しています:

  1. Axumウェブフレームワーク: server.rsで使用されており、ウェブサーバーとAPIエンドポイントを実装しています。

  2. ファイルシステム操作: fs.rsでマークダウンファイルの読み書きや、タグ・カテゴリの管理機能が実装されています。

  3. 設定管理: config.rsでアプリケーション設定の読み込みと保存を行っています。

  4. 埋め込み静的ファイル: embedded.rsで静的ファイルをバイナリに埋め込む機能が実装されています。

まとめ

mdlibは、シンプルながらも機能的なマークダウンウィキシステムです。Rustで書かれたバックエンドとウェブインターフェースを組み合わせることで、ナレッジベースの管理ツールとして活用できそうです。

インストールは簡単で、既存のマークダウンファイルをそのまま活用できるため、すぐに使い始めることができます。また、Gitリポジトリとしてノートを管理すれば、バージョン管理やバックアップの恩恵も受けられますね。

チーム機能やAPI機能があるとさらに便利になりそうですね

参考リンク

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?