🦀
Rustで一気通貫にWebアプリを作りたい!(要件定義編)
こんにちは.早いものでもうこの Zenn 投稿も 20 記事目となりました.
なお今回は Gemini 2.0 flash と対話しながら Rust だけで Web アプリを作って Vercel とかにデプロイしたいなーみたいな話です.僕が詰まったところの共有になれば幸いです.
以下,Gemini 2.0 flash との対話をスクリーンショットしたものを載せていきます
Rust でWebアプリを作成して Vercel にデプロイする際の最適な技術スタックを教えてください
- 速さと非同期処理に強いとの面で Actix Web に惹かれました.フロントは Rust で書きたいので Yew を採用
- ORM については Diesel をオススメされていますが,非同期に強いということで SeaORM にしました.
- Diesel は非同期に対応していないというのをどっかで見た
- あとデカいらしいというのもサクッと作る上で障壁になるかなと
Actix Web + Yew + SeaORM でいこうかと思います.データベースだけが迷っています
- スクショペタペタするの面倒なんで先に結論だけ書くとタグやタイトルからも推測できる通り PostgreSQL にしました.
- 最初は SQLite を採用するつもりだったのですが,以下画像のデメリットの項を鑑みて PostgreSQL という選択になりました.
- 最初は SQLite を採用するつもりだったのですが,以下画像のデメリットの項を鑑みて PostgreSQL という選択になりました.
- とくに,Vercel で使う際にファイルシステムに書き込みが起こるとそれローカルでは?となって……
- 無料だけど設定に手間がかかる,みたいなことを言っている.まあそこは AI がいるため問題ないと思う.
スクショベタベタしてたらものすごく記事が長くなった!
一応この記事の最初のタイトルは(ディレクトリ構築とPostgreSQLインストール編)としていたのですが,(要件定義編)としておきます.
Discussion
Gemini との会話
Rust でWebアプリを作成して Vercel にデプロイする際の最適な技術スタックを教えてください
RustでWebアプリを作成し、Vercelにデプロイする際の最適な技術スタックは、以下の要素を考慮する必要があります。
Actix Web:
非常に高速で、パフォーマンスが求められるWebアプリケーションに適しています。
非同期処理に強く、高負荷な環境でも安定した動作が期待できます。
Rocket:
開発体験が良く、シンプルなAPIで開発を効率化できます。
型安全性を重視しており、コンパイル時に多くのエラーを検出できます。
Axum:
Tokioとの統合が容易で、非同期処理を最大限に活用できます。
比較的新しいフレームワークですが、急速に人気が高まっています。
2. フロントエンドフレームワーク
React:
豊富なエコシステムとコミュニティがあり、大規模なアプリケーション開発に適しています。
Vercelとの相性が良く、簡単にデプロイできます。
Vue.js:
学習コストが低く、初心者でも扱いやすいフレームワークです。
柔軟性が高く、様々な規模のアプリケーションに対応できます。
Svelte:
コンパイル時に最適化を行い、高速なパフォーマンスを実現します。
シンプルな構文で、開発効率を高めることができます。
3. データベース
PostgreSQL:
信頼性と安定性が高く、多くのWebアプリケーションで利用されています。
豊富な機能と拡張性があり、複雑なデータ構造にも対応できます。
MySQL:
広く普及しており、多くのホスティングサービスでサポートされています。
比較的簡単に導入・運用できるため、小規模なアプリケーションに適しています。
SQLite:
軽量で、ファイルベースのデータベースです。
開発環境での利用や、小規模なアプリケーションに適しています。
4. ORM (Object-Relational Mapper)
Diesel:
Rustの型システムを活用し、安全かつ効率的なデータベース操作を実現します。
パフォーマンスが高く、複雑なクエリにも対応できます。
SeaORM:
非同期処理に対応しており、Actix WebやAxumなどの非同期フレームワークとの相性が良いです。
比較的新しいORMですが、急速に人気が高まっています。
5. デプロイ
Vercel:
フロントエンドアプリケーションのデプロイに最適化されており、高速なパフォーマンスを実現します。
Rustのバックエンドをデプロイする場合は、AWS Lambdaなどのサーバーレス環境と組み合わせる必要があります。
最適な技術スタックの例
バックエンド: Actix Web + Diesel + PostgreSQL
フロントエンド: React
この組み合わせは、高速なパフォーマンスと高い信頼性を実現できます。
補足
Rustでフロントエンドを開発する場合は、YewやSeedなどのフレームワークも選択肢となります。
Rustでwasmを利用することで、フロントエンドのパフォーマンスを向上させることも可能です。
上記以外にも、様々な技術スタックが考えられます。アプリケーションの要件や開発者のスキルに応じて、最適な組み合わせを選択してください。
より詳しい情報については、以下の参考資料をご覧ください。
Actix Web: https://actix.rs/
Rocket: https://rocket.rs/
Axum: https://github.com/tokio-rs/axum
Diesel: https://diesel.rs/
SeaORM: https://www.sea-ql.org/SeaORM/
Vercel: https://vercel.com/
これらの情報を参考に、あなたのWebアプリケーションに最適な技術スタックを見つけてください。
Actix Web + Yew + SeaORM でいこうかと思います.データベースだけが迷っています
Actix Web + Yew + SeaORM の組み合わせは、パフォーマンスと開発体験のバランスが取れた優れた選択肢です。データベースの選択で迷われているとのことですが、いくつかの選択肢とその特徴を比較検討してみましょう。
データベースの選択肢
PostgreSQL
信頼性と安定性が高く、複雑なデータ構造にも対応できる高機能なデータベースです。
トランザクション処理や高度なクエリ機能など、エンタープライズレベルの機能も備えています。
SeaORMとの相性も良く、多くのプロジェクトで利用されています。
Vercelで利用する場合は、外部のマネージドサービス(AWS RDS、Google Cloud SQLなど)を利用する必要があります。
MySQL
広く普及しており、多くのホスティングサービスでサポートされているため、導入・運用が比較的容易です。
シンプルなWebアプリケーションに適しており、学習コストも比較的低いのが特徴です。
PostgreSQLと同様に、Vercelで利用する場合は外部のマネージドサービスを利用する必要があります。
SQLite
軽量でファイルベースのデータベースであり、開発環境での利用や小規模なアプリケーションに適しています。
サーバーが不要で、ファイルとしてデータを保存するため、簡単に導入できます。
Vercelでの利用も可能ですが、ファイルシステムに書き込みが発生するため、パフォーマンスや可用性に注意が必要です。
データベース選択のポイント
アプリケーションの規模と要件
大規模で複雑なアプリケーションの場合は、PostgreSQLが適しています。
小規模でシンプルなアプリケーションの場合は、MySQLやSQLiteも選択肢となります。
パフォーマンス
高いパフォーマンスが求められる場合は、PostgreSQLが優れています。
SQLiteは、同時接続数が多い場合などは、パフォーマンスが落ちる可能性が有ります。
運用管理
マネージドサービスを利用する場合は、運用管理の負担を軽減できます。
Vercelにデプロイをする場合、マネージドサービスを利用するほうが、運用管理が楽になると思われます。
開発経験
すでに使い慣れているデータベースがあれば、それを選択するのが良いでしょう。
Actix Web + Yew + SeaORM との相性
SeaORMは、PostgreSQL、MySQL、SQLiteなど、多くのデータベースをサポートしています。
そのため、どのデータベースを選択しても、SeaORMとの連携は比較的容易です。
特筆すべき点として、PostgreSQLとの組み合わせは、SeaORMの機能を最大限に活用できるため、特にお勧めです。
結論
アプリケーションの規模や要件に応じて、最適なデータベースを選択してください。
特に理由がない場合は、信頼性とパフォーマンスに優れたPostgreSQLを選択するのが良いでしょう。
Vercelにデプロイをするのであれば、外部のマネージドサービスを利用すると、運用が楽になるでしょう。
データベースの選択は、アプリケーションの将来にも影響を与える重要な決定です。各データベースの特徴を比較検討し、慎重に選択してください。
SQLite を採用しようと思います.
SQLiteを採用されるとのこと、承知いたしました。SQLiteは軽量で扱いやすく、開発環境や小規模なアプリケーションに適したデータベースです。Actix Web + Yew + SeaORMとの組み合わせにおいても、十分に活用できるでしょう。
SQLiteを採用するにあたって、いくつか注意点と考慮すべき事項をまとめました。
SQLiteのメリット
軽量・シンプル:
サーバーが不要で、ファイルとしてデータを保存するため、簡単に導入できます。
設定や管理が容易で、学習コストも比較的低いのが特徴です。
開発環境に最適:
開発中のアプリケーションや、テスト環境での利用に適しています。
デプロイ時にデータベースの設定を変更する必要がないため、開発からデプロイまでの流れをスムーズに行えます。
組み込み利用:
組み込みシステムやモバイルアプリケーションなど、軽量なデータベースが必要な場合に適しています。
SQLiteのデメリット
同時接続性能:
同時接続数が多い環境では、パフォーマンスが低下する可能性があります。
Webアプリケーションで多数のユーザーが同時にアクセスする場合は、他のデータベースを検討する必要があります。
機能制限:
PostgreSQLやMySQLなどの高機能なデータベースと比較すると、機能が制限されます。
複雑なデータ構造や高度なクエリが必要な場合は、他のデータベースを検討する必要があります。
Vercelでの利用:
VercelでSQLiteを利用する場合、ファイルシステムへの書き込みが発生するため、パフォーマンスや可用性に注意が必要です。
Vercelはサーバーレスプラットフォームであるため、ファイルシステムへの永続的な書き込みは推奨されません。
Vercelにデプロイをする場合、外部のマネージドサービスを利用するほうが、運用管理が楽になると思われます。
Actix Web + Yew + SeaORM + SQLiteでの開発
SeaORMとの連携:
SeaORMはSQLiteをサポートしているため、Actix Webとの連携も容易です。
SeaORMのドキュメントやサンプルコードを参考に、データベースの接続やクエリの実行方法を確認してください。
開発環境での利用:
開発環境では、SQLiteをファイルベースで利用するのが良いでしょう。
アプリケーションのデータは、プロジェクト内のファイルとして保存されます。
Vercelへのデプロイ:
Vercelへのデプロイを検討しているのであれば、開発環境と本番環境でデータベースを切り替えることを推奨します。
本番環境では、外部のマネージドデータベースサービス(PostgreSQLなど)を利用することで、パフォーマンスと可用性を向上させることができます。
開発環境と本番環境でデータベースを切り替えることで、VercelでのSQLite利用における課題を回避できます。
まとめ
SQLiteは、開発環境や小規模なアプリケーションに適したデータベースです。Actix Web + Yew + SeaORMとの組み合わせにおいても、十分に活用できます。ただし、Vercelへのデプロイを考慮する場合は、外部のマネージドデータベースサービスの利用も検討してください。
これらの情報を参考に、SQLiteを最大限に活用してください。
デメリットの項を鑑み,PostgresSQLを採用しようかと迷っています.
SQLiteのデメリットを考慮し、PostgreSQLの採用を検討されているとのこと、賢明な判断です。PostgreSQLは、信頼性、安定性、機能性の高さから、多くのWebアプリケーションで利用されているデータベースです。
PostgreSQLを採用するにあたって、メリット、デメリット、およびVercelでの利用について詳しく解説します。
PostgreSQLのメリット
高い信頼性と安定性:
トランザクション処理、高度な同時実行制御、データ整合性など、エンタープライズレベルの機能を備えています。
大規模なアプリケーションや、高い可用性が求められるシステムに適しています。
豊富な機能と拡張性:
複雑なデータ型、高度なクエリ機能、ストアドプロシージャ、トリガーなど、様々な機能を利用できます。
ユーザー定義関数や拡張機能により、機能を拡張できます。
高いパフォーマンス:
高度なクエリ最適化、インデックス機能、同時実行制御により、高いパフォーマンスを実現します。
大規模なデータセットや、複雑なクエリにも対応できます。
オープンソースと活発なコミュニティ:
オープンソースソフトウェアであり、ライセンス費用がかかりません。
活発なコミュニティがあり、豊富なドキュメントやサポート情報を利用できます。
SeaORMとの相性:
SeaORMはPostgreSQLを完全にサポートしており、型安全なデータベースアクセスを実現します。
SeaORMの機能を最大限に活用できます。
PostgreSQLのデメリット
初期設定の複雑さ:
他のデータベースと比較して、初期設定やチューニングが複雑になる場合があります。
特に、大規模なシステムや高度な機能を必要とする場合は、専門知識が必要です。
リソース消費:
高い機能とパフォーマンスを実現するために、比較的多めのリソースを消費します。
特に、同時接続数が多い場合や、複雑なクエリを実行する場合は、十分なリソースが必要です。
Vercelでの利用:
Vercelはサーバーレスプラットフォームであるため、PostgreSQLを直接ホストすることはできません。
AWS RDS、Google Cloud SQL、Azure Database for PostgreSQLなどの外部マネージドサービスを利用する必要があります。
外部マネージドサービスを利用する場合、追加の費用が発生します。
VercelでのPostgreSQLの利用
外部マネージドサービスの利用:
VercelでPostgreSQLを利用するには、外部のマネージドデータベースサービスを利用する必要があります。
マネージドサービスを利用することで、データベースの運用管理を大幅に軽減できます。
接続情報の管理:
Vercelの環境変数機能を利用して、データベースの接続情報を安全に管理できます。
接続情報をコードに直接記述することは避けてください。
パフォーマンスの考慮:
Vercelとマネージドデータベースサービスの間のネットワーク遅延を考慮する必要があります。
データベースのパフォーマンスチューニングや、クエリの最適化を行うことで、パフォーマンスを向上させることができます。
結論
PostgreSQLは、高い信頼性、安定性、機能性を備えた優れたデータベースです。Vercelで利用する場合は、外部マネージドサービスを利用する必要がありますが、その分のメリットは十分にあります。
アプリケーションの規模や要件、予算などを考慮し、最適なデータベースを選択してください。