【開発レポート】Rustで挑む「理想のWebフレームワーク」構築

【開発レポート】Rustで挑む「理想のWebフレームワーク」構築

お疲れ様です、tomaです。

近頃、新しいプロジェクトの「種」を植えました。
リポジトリ名は rust_django
その名の通り、Rustという堅牢な大地に、Djangoのような豊穣なエコシステムと、FastAPIのような軽やかさを共存させようという試みです。

今日は、なぜ私がこの冒険を始めたのか、そして今どのような地図を描いているのか。
これまでの歩みを振り返りながら、現在の「セーブデータ」として記録を残しておこうと思います。


1. 開発の経緯:なぜ「車輪の再発明」に挑むのか

私はこれまで、PythonのDjangoやFastAPIを使っていくつかのプロダクトを作ってきました。
Djangoの「これさえあれば何もいらない」という安心感と、FastAPIの「書いているそばから形になる」スピード感は、開発者として本当に心地よいものです。

一方で、Rustという言語の持つ「圧倒的な速度」と「型による安全性」にも強く惹かれていました。
しかし、RustでWebアプリを作ろうとすると、どうしても「ライブラリの選定」や「ボイラープレートの記述」に時間がかかりすぎてしまう。
「パフォーマンスは欲しい、でも開発体験(DX)も妥協したくない」

そんなジレンマを解消するために、「最初から必要なものが揃っていて、かつRustの恩恵を最大化できるフレームワーク」を自分で作りたいと考えたのが、すべての始まりでした。

2. 現在のディレクトリ構造:開拓の足跡

リポジトリを作成し、まずは「どこに何があるべきか」という骨組みを整えるところからスタートしました。
現在のプロジェクト構成は以下のようになっています。

rust_django/
├── migrations/          # データベースの歴史(SeaORM)
├── src/
│   ├── main.rs          # 冒険の入り口
│   ├── core/            # フレームワークの心臓部
│   ├── models/          # データの定義(SeaORM Entity)
│   ├── routes/          # 道標(エンドポイント定義)
│   └── views/           # 景色の描画(ハンドラロジック)
├── templates/           # 記憶の断片(Tera / HTMLテンプレート)
├── static/              # 変わらないもの(CSS / JS)
└── Cargo.toml           # 冒険の契約書(依存関係)

Rustらしい厳格なレイヤー分離を意識しつつも、Djangoのように「どこにコードを書けばいいか迷わない」構造を目指しています。

3. 現在のセーブポイント:実装の進捗

今日までに、以下の機能を「装備」として整えました。

  • Rocket v0.5 による基盤:
    型安全でありながら、マクロによってFastAPIに近い直感的な記述ができるWebサーバ。
  • SeaORM による非同期DB接続:
    SQLを直接書く苦労を減らし、Rustの構造体としてデータを扱えるORM。
  • HTMX + Tera による動的描画:
    JavaScriptを書きすぎず、HTMLの延長線上でモダンなUXを実現する構成。

現在は、このフレームワークの最大の壁である「汎用CRUDトレイト」の実装に取り組んでいます。
モデルを一つ定義すれば、一覧・詳細・作成・削除の機能が魔法のように生えてくる……。そんな「Djangoらしさ」をRustの静的な世界でどう表現するか、パズルを解くような日々です。

4. 次の目的地:これから進む道

これからの開発予定についても、少し触れておきます。

  • 自動生成される管理画面: データベースをGUIで直接操作できる、あの便利さをRustで。
  • 認証システムのプラグイン化: ログイン・ログアウトといった共通機能を、設定一つで導入可能に。
  • 開発者用CLIツール: cargo-dj のように、雛形を一瞬で作れる仕組み。

このプロジェクトは、まだ始まったばかりの小さな火に過ぎません。
ですが、いつか「RustでWebを作るならこれが一番楽だよね」と言われるような、そんな未来を想像しながら、一歩ずつコードを積み上げていこうと思います。

それでは、また次のセーブレポートでお会いしましょう。
tomaでした。

Comments

No comments yet. Why don’t you start the discussion?

    コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です