4
4

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×Django=最強?ボイラープレート地獄から脱却するために「Reinhardt」を自作した話

4
Posted at

はじめに: Web開発の「レゴ組み立て」しんどくないですか?

「Rustは好きだけど、Webアプリを作るたびにルーティングやORMの選定から始まるのは、正直ちょっと重い……」

そう感じたことはありませんか?

image-1.png

Rust で Web アプリを書こうとすると、強い部品は本当にたくさんあります。
でもその一方で、
「ルーティング何にする?」
「ORM は?」
「認証どうする?」
「OpenAPI は?」
「管理画面いる?」
「設定どう分ける?」
「で、最初の一歩はどう切る?」
みたいな話、毎回そこそこ発生しませんか?
もちろん、そこを自分で選べるのが Rust の良さでもあります。
でも正直、毎回レゴみたいに全部を自分で組み立てたい日ばかりでもありません。
Django みたいに、ある程度そろっていて、でも必要なら分解もできる。
そういう Rust の Web フレームワークがもう少しあってもよくないか?、と思って Reinhardt(ラインハルト) を作っています。

GitHub:

Docs:

1. Reinhardt ってなに?なにをめざしているの?

image-2.png

ひとことで言うと、Django っぽい開発の気持ちよさを、Rust の上でやりたいというところから始まったフレームワークです。
私は、Web アプリを作るたびに毎回すべてを一から配線したいわけではありません。

最初の一歩はできるだけ軽くしたい。
でも、その代わりに全部を固定されたいわけでもありません。

Reinhardt でやりたいのは、そこです。
最初はある程度そろった形で入りやすい。
でも、必要なら後から分けたり削ったりできる。
全部入り寄りではあるけれど、全部を最初から抱え込まなくてもいい。
ラーメンでも全部入りが好きな人と、シンプルに自分の好きな種類の麺、ゆで加減、トッピングを選びたい人もいます。
そういうエンジニアのこだわりに応えられるバランスを狙っています。

2. Reinhardtのつよみ

個人的にいちばん大きいのは、最初の一歩で疲れにくいことです。
Rust の Web は、慣れている人ほど「あとで好きに組み替えればいい」と言います。
それはその通りです。
でも、Rust初学者や、非エンジニアの方々は、そうは簡単にいきません。
そこに行く前の段階で消耗することも普通にあると思います。

でも、Reinhardt は、まず立ち上げる。
まず動かす。
そして、「何となく全体像が分かる」状態まで持っていく。
そのあとで、必要に応じて中身に入っていく。

そういう順番を大事にしています。
最初から全部理解してもらうより、まず触ってもらいたい。
最初の一歩で「うっ、うわ、もうイヤだ」とならないようにしたい。
そこをかなり意識しています。

3. とりあえず触るだけなら、入口はかなり短い

最初に触るだけなら、こんな感じです。

Quick Start

cargo install reinhardt-admin-cli
reinhardt-admin startproject my-api && cd my-api
cargo run --bin manage runserver

まずはここまでで十分です。
最初の段階では、深く理解するより、まず立ち上がることの方が大事だと思っています。

たとえば、Django でおなじみの「管理画面」。
Reinhardt では、モデルを定義して登録するだけで、データの閲覧や編集ができる管理画面が使えるようになります。

Rust で管理画面を一から作る手間を考えると、この「最初から用意されている」安心感はかなり大きいです。
私が Django っぽさを目指した理由も、まさにそこにあります。

触ってみて、「このノリは好きかも」と思ったら先に進めばいいですし、
「いや、違うな」と思ったら、それもかなり大事な感想です。
ぜひ率直にフィードバックしてください。

4. 今どんなものが入っているのか?

方向としては、かなり統合型です。

ORM があり、認証があり、API まわりがあり、管理画面があり、DI の仕組みもあり、リアルタイム系やフロント寄りの入口もあります。
要するに、「Web アプリを作るとき、だいたい後で欲しくなるもの」はかなり早い段階から意識して入れています。
ただし、ここで言いたいのは「こんなに機能があります」という自慢ではありません。
伝えたいのは、「最初から全部自分でつながなくても、ある程度まとまった形から始められる」ということです。
私自身がそういうフレームワークが欲しかったので、この方向で作っています。

簡単に Reinhardt の立ち位置を整理すると、こんなイメージです。

フレームワーク 立ち位置 特徴 イメージ
Axum / Actix-web 部品組み立て型 自由度が高く、必要なパーツを自分で選んでつなぐ 自由なレゴブロック
Loco Railsライクなフルスタック 規約やジェネレータが強く、開発のレールがかなり用意されている レール付きの高速開発
Reinhardt Djangoライクな統合型 ほどよい規約と柔軟性があり、管理画面なども最初から用意されている 統合感のある実用セット

全部自分で選びたいわけではない、でもRailsほどガチガチに固められたくない。そんな『ちょうどいい真ん中』を狙っています。

5. Reinhardtが刺さる人は?

たぶん、特に刺さるのはこんな人。
『選択の疲れ』を減らしたい人向けです。

・Django / DRF の哲学が好きな人。
・Axum / Actix を触っていて、「この自由度は好きだけど、毎回全部つなぐのは少し重い」と思っている人。
・Rust Web の入口がもう少しまとまっていてほしい人。
・小さく始めたいけれど、あとからちゃんと広げられる土台もほしい人。

逆に、「全部自分で選びたいし、それが楽しい」という人には、そこまで刺さらないかもしれません。
それはそれで自然だと思います。

6. まだまだ、率直な感想が欲しいです

この記事は、「完成しました。ぜひ使ってください」という目的で作ったのではありません。
むしろ逆で、「触って、率直な感想をもらいたい」という気持ちで書いています。
特に知りたいのは、たとえばこのへんです。
・最初のセットアップでどこが分かりにくいか
・Django / FastAPI / Axum 経験者から見て何が自然で何が不自然か
・統合されていることが魅力に見えるか、重さに見えるか
・ドキュメントのどこが足りないか
・先に安定化した方がよい部分はどこか

褒めてほしい、というよりは、
「ここ分かりにくい」
「ここはかなり好き」
「ここは普通に Axum でよくない?」
「ここはもっと削った方がよさそう」
みたいな意見もありがたいです。
感想でも、Issue でも、Discussion でも歓迎です。
もちろん、この記事のコメント欄への書き込みも大歓迎です!
皆さんのお力を借りて、Reinhardtをより良いWebフレームワークに育てていきたいです。

7. 最後に

Rust の Web 開発は、部品は本当に強いです。

そこは疑っていません。

何よりも、私は Rust が大好きです。

そのうえで、「毎回そこから全部組み立てなくても、もう少し気持ちよく始められないか」という方向にも、ちゃんと価値はあると思っています。

Reinhardt は、そのために作っているフレームワークです。

AI によるコード生成が当たり前になってくると、コードを書く速度そのものは、これからますます上がっていくと思います。

ただその一方で、出てきたコードの品質や整合性を、最後に人間が確認する負担は、むしろ重くなっていくはずです。

特に、複数の部品のつなぎ込みや、設定の食い違い、境界条件の抜けのようなものは、AI を使う時代ほど後から効いてきやすいと感じています。

だからこそ、人間は『部品のつなぎ込み』に頭を使うのではなく、型安全な『堅牢な土台』の上で、全体の整合性を確認することに集中すべきです。

Reinhardt は、そのための土台になりたいと思っています。

不整合を早い段階で表に出しやすい Rust の特性と、構成の自由度を押し付けすぎない統合型の基盤は、これからますます価値が出てくると信じています。

もっと多くのエンジニアが Rust で Web 開発を始めやすくなること。

そのうえで、ただ速く作れるだけではなく、安全に、整合性を保ちながら、あとから大きな不具合が出にくい形で育てていけること。

そこが大事だと思っています。

少しでも気になったら、ぜひ一度触ってみてください。

実際に使ってみた感想や、「ここが分かりにくい」「ここはもっとこうしてほしい」といったフィードバックをよろしくお願いします。

4
4
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
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?