Replitをただ使ってみたかっただけ。ダミーデータ作成アプリ。
はじめに
AIエージェントを使用することが主流になってきた昨今ですが、AIエージェントは少し違った立ち位置のReplitが、どんな感じでアプリを作ってくれるのかを見てみたくて使用してみました。
Replitは、AIエージェントのような機能を備えたオンライン開発環境です。特に「Replit Agent」と呼ばれるAIシステムを提供しており、ユーザーが自然言語でアプリやウェブサイトのアイデアを伝えると、自動的にそれを構築します。
このReplit Agentは、開発環境の設定、依存関係のインストール、コードの実行などを自動で行い、まるでペアプログラマーのように機能します。 そのため、Replitは単なる開発ツール以上の、AIエージェント的な役割を果たしていると言えます。 
さらに、Replitはリアルタイムのコード支援、デバッグ、リファクタリングのサポートなど、多岐にわたるAI機能を提供しています。 これらの機能により、開発者はより効率的に作業を進めることが可能です。
感想。
ほんの1、2時間ほどで、まあざっくり作りたいものができました。
デプロイは有料でした。デプロイまで無料にできる〜と思ってました。(流石に無料ではないか)
Replitは、環境構築なしでコードを書きたい、シンプルなWebアプリ・スクリプト開発に向いているようですね。
主流のCursor / Cline / Devinなどとは異なり、より気軽に使えるものかなと思いました。
今回は、なんとなくテストデータ生成してくれる便利なのないかなと思い作った、KotlinとFlaskを組み合わせて構築したダミーデータ生成アプリについて解説します。
目次
プロジェクト概要
このプロジェクトは、PostgreSQLデータベースに対して現実的なダミーデータを生成・挿入するシステムです。バックエンドにKotlin/Gradleを採用し、直感的なWeb操作インターフェースをFlaskで実装しています。
データはJSON形式で構造化され、UUIDv7による一意識別子、職業名、有効フラグ、日付情報などを含む高品質なレコードを生成します。生成されたデータはWebインターフェースから閲覧可能で、リアルタイムにデータベースの状態を確認できます。
システム構成
システムは大きく分けて3つのコンポーネントで構成されています:
- Kotlinバックエンド:データ生成エンジン
- PostgreSQLデータベース:生成データの保存先
- Flask Webインターフェース:操作・閲覧用UI
これらのコンポーネントは連携して動作し、コマンドラインもしくはWebインターフェースからシステムを操作することができます。
主要機能
-
高度なダミーデータ生成
- UUIDv7/v4による一意識別子の生成
- Fakerライブラリを活用したTextの生成(※今回は「職業」を使用)
- 同一登録者内でのラベル名重複防止ロジック
- 日付データと有効フラグのランダム生成
-
バッチ処理
- 一度に数百〜数千件のレコードを効率的に生成・挿入
- エラーハンドリングと結果レポート機能
-
Webインターフェース
- データ生成パラメータの設定
- 生成済みデータの閲覧(最新順)
- データベース状態の確認
-
JSON形式のデータ構造
{ "label_id": "1f00acd0-e079-6b3d-97e9-5104989883fa", "label_name": "Forward Education Specialist", "is_valid": 0, "from": "20250127" }
技術スタック
バックエンド
• 言語: Kotlin
• ビルドツール: Gradle 8.4
• データベース: PostgreSQL
• ORM: JDBC(直接SQL実行)
• データ生成: Faker, Jackson
フロントエンド
• フレームワーク: Flask (Python)
• テンプレートエンジン: Jinja2
• スタイリング: Bootstrap
実装のポイント
- UUIDv7の実装
最新のUUID仕様であるv7を実装することで、時間順に並べられる一意識別子を生成しています。
class UuidGenerator {
companion object {
// タイムスタンプをミリ秒単位で取得
private fun getTimeBasedValue(): Long {
return System.currentTimeMillis()
}
// UUIDv7を生成
fun generateUuidV7(): UUID {
val timestamp = getTimeBasedValue()
val randomBytes = ByteArray(10)
SecureRandom().nextBytes(randomBytes)
val msb = (timestamp shl 16) or (0x7000L shl 48) or (randomBytes[0].toLong() and 0xFFL)
val lsb = ByteBuffer.wrap(randomBytes, 1, 8).long
return UUID(msb, lsb)
}
}
}
- データベース接続の管理
環境変数から接続情報を取得し、安全にデータベースに接続します。
class DatabaseService {
private val logger = Logger.getLogger(DatabaseService::class.java)
private var connection: Connection? = null
init {
try {
// 環境変数からデータベース接続情報を取得
val dbUrl = System.getenv("DATABASE_URL") ?: throw IllegalStateException("DATABASE_URL not set")
connection = DriverManager.getConnection(dbUrl)
logger.info("データベース接続が確立されました")
} catch (e: Exception) {
logger.error("データベース接続エラー", e)
throw e
}
}
// 他のメソッド...
}
- Flask-Kotlin連携
FlaskからKotlinアプリケーションを呼び出し、結果を取得するインターフェースを実装しています。
def run_kotlin_app(num_records=100, uuid_version="v7"):
"""Kotlinアプリケーションを実行してダミーデータを生成"""
try:
cmd = ["./gradlew", "run", f"--args=generate {num_records} {uuid_version}"]
result = subprocess.run(cmd, capture_output=True, text=True, check=True)
# 出力からJSONを抽出
json_data = extract_json_with_markers(result.stdout)
if json_data:
return json.loads(json_data)
else:
return {"success": False, "error": "JSONデータが見つかりません", "records_inserted": 0}
except subprocess.CalledProcessError as e:
return {"success": False, "error": str(e), "records_inserted": 0}
AIの動き
まずは要件定義を渡しました。
ある程度作ってくれたあと、実行してみてくださいと言われ、実行。
出てきた結果をそのまま送ると、そのエラーを元に次から次へとファイルを修正してくれる。
引き続きエラーを解消してくれます。
フロントエンドも実装してくれるのですが、こんな感じ。
生成が成功したらこんな感じ。
データ閲覧処理も作ってくれていました。
そして、
こんな感じで、psqlコマンドも実行してくれます。
もちろん、ホスト等教えてくれるので、pgadminとかに繋いで確認することもできます。(データベースはNeon.techのサービス上にある)
(GUIで見れるの嬉しい)
まとめ
私は何もしていない!!ただご飯を食べながら、AIに指示を出しただけでここまで作ることができました。
テストデータを生成することは、開発作業を大幅に効率化してくれると思います。
今回は、現在開発中の仕様の関係でUUIDv7を使用していますが、より詳細な指示をAIに出すことで、もっと柔軟性のあるアプリを作ることができると思います。
※本記事で紹介したコードは一部抜粋したものです。実装はGitHubをご参照ください。
Discussion