お疲れ様です、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でした。