Rustで書かれたノートアプリmdlibが実用性もあり、実装も興味深かったので紹介します。
mdlibは、Rustで書かれたウェブベースのMarkdownノートアプリケーションです。自分のマークダウンファイルを、タグやカテゴリで整理し、リアルタイムプレビューでスムーズに編集できます。現時点では個人用途のみを想定しているようです(チーム機能なし)。
前提条件
- Rust と Cargo (バージョン1.54.0以上)
- ブラウザ(Chrome、Firefox、Safariなど)
mdlibの特徴
GitHub上の説明によると、mdlibには以下のような機能があります:
- 📝 ディレクトリ内のマークダウンファイルの閲覧と編集
- ✨ 新しいマークダウンファイルの作成
- 👁️ リアルタイムでのマークダウンレンダリングプレビュー
- 🔍 全ノートを対象とした検索機能
- 🏷️ タグによる整理
- 📂 カテゴリによる階層的な整理
- 🌙 ダークモード対応
- ⚡ キーボードショートカット
- 🔄 自動保存機能
- 💾 シンプルなファイル管理
- 📱 レスポンシブデザイン
- 🔍 全文検索機能
- 🔗 ノート間のリンク機能
- 📄 YAMLフロントマター対応
- 🧩 カスタマイズ可能な設定
- 📦 埋め込みウェブアセット(どのディレクトリからでも実行可能)
インストール方法
cargoを使ったインストール
cargo install mdlib
ソースからのビルド
- リポジトリをクローンします:
git clone https://github.com/bahdotsh/mdlib.git
cd mdlib
- プロジェクトをビルドします:
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を中心に以下のような技術を使用しています:
-
Axumウェブフレームワーク:
server.rs
で使用されており、ウェブサーバーとAPIエンドポイントを実装しています。 -
ファイルシステム操作:
fs.rs
でマークダウンファイルの読み書きや、タグ・カテゴリの管理機能が実装されています。 -
設定管理:
config.rs
でアプリケーション設定の読み込みと保存を行っています。 -
埋め込み静的ファイル:
embedded.rs
で静的ファイルをバイナリに埋め込む機能が実装されています。
まとめ
mdlibは、シンプルながらも機能的なマークダウンウィキシステムです。Rustで書かれたバックエンドとウェブインターフェースを組み合わせることで、ナレッジベースの管理ツールとして活用できそうです。
インストールは簡単で、既存のマークダウンファイルをそのまま活用できるため、すぐに使い始めることができます。また、Gitリポジトリとしてノートを管理すれば、バージョン管理やバックアップの恩恵も受けられますね。
チーム機能やAPI機能があるとさらに便利になりそうですね