こんにちは。サイドFIREを目指しながら開発を続けているプログラマー、田中です。
今回は、Replitで開発したNode.js + PostgreSQL構成のWebアプリケーションを、AWS EC2上に本番環境として移行したプロセスをまとめました。
実際に移行したサイトはこちらです:
👉 https://yomiai.info/
想定読者
- Replitを活用してAIと一緒にアプリ開発をしている方
- 開発したアプリをできるだけ低コストで本番運用したい方
背景:Replitとは何か
Replitは、AIと対話しながらアプリを構築できるクラウド開発プラットフォーム(SaaS)です。
コードを一切書かずに、チャット形式でAIに指示を出すだけでアプリが完成するという、新しい開発体験を提供してくれます。
特に、プロトタイピングや学習用途では非常に優秀で、デプロイ機能まで内蔵されているため、ワンクリックでアプリを公開することも可能です(独自ドメインにも対応)。
Replitについて詳しく知りたい方は、Qiitaなどで解説記事を探してみてください。
Replitを本番運用に使う際の課題
実際にReplitでアプリを構築し、公開してみたことで、以下のような課題が見えてきました。
課題1:継続的な課金が必要
Replitは、AI機能の利用、データベースの使用、Webサイトの公開に対して月額課金される仕組みです。
私のケースでは、公開しているだけで毎月およそ30ドル程度の費用が発生していました。
AIによる開発支援は価値がありますが、「完成したアプリをただ置いておくだけ」で課金され続けるのは、コスト的に見合わないと感じました。
課題2:開発環境と本番環境の分離ができない
Replitでは、開発環境と本番環境で同じデータベースを共有する構成になっており、開発中の操作がそのまま本番に影響を及ぼすリスクがあります。
スキーマ分割によって論理的に分けることは可能ですが、設定ファイルの切り替えなどで運用する必要があり、人的ミスによる事故リスクが常に伴います。
解決策:AWS EC2への移行
上記の課題を踏まえ、以下の方針で本番環境をReplitからAWS EC2へ移行しました。
- 開発は引き続きReplitを利用(AIによる迅速な構築支援を活用)
- 本番環境はAWS EC2上に構築し、開発・本番の完全分離
- インフラコストは極力抑えつつ、安全かつ安定した本番運用を実現
実際に行った移行手順
前提条件
- GitHubアカウント保有
- AWSアカウント保有
移行フロー
- ReplitとGitHubの連携
- AWS EC2インスタンスの作成
- インスタンスに以下をインストール:
- NGINX
- PostgreSQL
- Node.js
- Git
- GitHubからReplitで作成したソースコードをクローン
- Replitに依頼し、
.env
ファイルでDB接続設定を切り替えられるように調整 - Replitに依頼し、本番用のDBスキーマを生成
- EC2上のPostgreSQLで、Replit用のユーザとDBを作成
- 作成されたDBスキーマをPostgreSQLに適用
- お名前.comでドメイン取得
- DNS設定で、ドメインからEC2インスタンスのIPを参照するように設定
- NGINXでドメイン受け取り設定を実施
- NGINXでNode.js(ポート5000)をHTTP(ポート80)で公開するように設定
- Let’s Encryptを使ってHTTPS化
苦労したポイントと解決法
1. Node.jsアプリが起動しない
原因の特定には至りませんでしたが、ReplitがAWS上で動作させるためのバッチスクリプトを用意してくれたことで解決しました。
2. DB接続の切り替え対応
Replit上ではHTTPS経由でクラウドDBへ接続する構成ですが、EC2ではローカルにPostgreSQLをインストールする必要があります。
この差異に対応するため、.env
ファイルに接続環境を識別するフラグを用意し、それに応じて接続設定を切り替えるようにしました。
AI駆動開発で大事なマインドセット
AIを活用した開発では、トラブルに直面したときに「どのような情報をAIに渡せば解決できるか」を考えることが重要です。
エラーが出たらその情報をAIに伝え、修正提案をもらう。その繰り返しが問題解決の鍵になります。
まとめ
- ReplitはAI開発のスピードを最大限活かせる優秀な開発環境
- ただし本番運用には課題があるため、EC2との併用がオススメ
- 最小限のコストで安全な運用を実現したい方には、今回の方法が有効
お知らせ
この記事が参考になった方は、ぜひ「いいね!」やX(旧Twitter)のフォローをお願いします!
Replit関連でお仕事を依頼したいという方がいましたらTwitterでDMください!