Bedrud へのコントリビューションに必要な日常的な開発ワークフローについて説明します。
リポジトリレイアウト
bedrud/
├── server/ # Go バックエンド
├── apps/
│ ├── web/ # React フロントエンド (TanStack Start)
│ ├── android/ # Android アプリ
│ ├── ios/ # iOS アプリ
│ └── desktop/ # デスクトップアプリ (Rust + Slint)
├── agents/ # Python ボットエージェント
├── packages/ # 共有 TypeScript 型
├── tools/cli/ # デプロイ CLI
├── docs/ # ドキュメント (MkDocs)
├── Cargo.toml # Rust ワークスペースルート
├── Makefile # ビルドオーケストレーション
└── Dockerfile # コンテナビルド
前提条件
| ツール | 対象 |
|---|---|
| Go 1.24+ | サーバー |
| Bun | Web フロントエンド |
| LiveKit Server | ローカルメディアサーバー |
| Android Studio + JDK 17 | Android アプリ |
| Xcode | iOS アプリ |
| Rust (stable) | デスクトップアプリ |
| Python 3.10+ | ボットエージェント |
| FFmpeg | ラジオ・動画エージェント |
初期セットアップ
git clone https://github.com/bedrud-ir/bedrud.git
cd bedrud
make initフルスタック開発
ローカルで全体スタックを実行するには:
make devLiveKit、Go サーバー、React 開発サーバーが同時に起動します。Ctrl+C ですべてのプロセスを停止します。
サービスの個別実行
make dev-webhttp://localhost:3000 でホットモジュール置換付きで実行されます。
make dev-serverhttp://localhost:8090 で実行されます。Go コード変更後は手動で再起動が必要です。
make dev-livekithttp://localhost:7880 で開発用認証情報で実行されます。
サーバー開発
Go サーバーのエントリポイントは server/cmd/server/main.go です。
API エンドポイントの追加
server/internal/handlers/にハンドラーを定義- 新しい DB クエリが必要な場合は
server/internal/repository/にリポジトリメソッドを追加 - サーバーセットアップ(通常
main.goまたはルーティングファイル)にルートを登録 - 認証や管理者チェックが必要な場合はミドルウェアを追加
データベースの変更
server/internal/models/ で GORM モデル構造体を追加または変更します。GORM は起動時に自動マイグレーションを行います。
Swagger ドキュメント
API ドキュメントのアノテーションには swaggo 形式を使用します。変更後、再生成します:
cd server
swag init -g cmd/server/main.go完全なディレクトリレイアウトとレイヤー設計については、サーバーアーキテクチャを参照してください。
Web フロントエンド開発
フロントエンドは apps/web/ にあり、React 19 と TanStack Start を使用しています。
ページの追加
TanStack Router のファイルベースルーティング規約に従って、src/routes/ の下に新しいファイルを作成します(例:src/routes/settings.tsx)。createFileRoute で作成した Route をエクスポートします。
API クライアント関数の追加
src/lib/api.tsにauthFetchを使用して関数を追加- TypeScript 型をインラインまたは共有型ファイルで定義
- ルートコンポーネントから TanStack Query の
useQueryフック経由で使用
型チェック
cd apps/web
bun run check # runs Biome lint + TypeScript type check完全なフロントエンド構造とパターンについては、Web フロントエンドアーキテクチャを参照してください。
Android 開発
make dev-android # Android Studio で開く主要なパターン
- すべての画面は Composable 関数
- 依存関係は
InstanceManager経由でkoinInject()で取得 - nullable な
StateFlow値にはcollectAsState().value ?: returnを使用 - ナビゲーションは
MainActivity.ktで処理
ビルド
make build-android-debug # Debug APK
make build-android # Release APK(キーストアが必要)
make release-android # ビルド + デバイスにインストール詳しいモバイルアプリアーキテクチャについては、Android アプリアーキテクチャを参照してください。
iOS 開発
make dev-ios # Xcode で開く主要なパターン
- ビューは SwiftUI 構造体
- 依存関係は
InstanceManager経由で@EnvironmentObjectで取得 - nullable な published プロパティにはオプショナルバインディングを使用
- ナビゲーションは SwiftUI のネイティブナビゲーションスタックを使用
プロジェクト生成
project.yml を変更した場合、Xcode プロジェクトを再生成します:
cd apps/ios
xcodegen generateビルド
make build-ios # Release アーカイブ
make build-ios-sim # シミュレータビルド
make export-ios # IPA をエクスポート詳しいモバイルアプリアーキテクチャについては、iOS アプリアーキテクチャを参照してください。
デスクトップ開発
デスクトップアプリは apps/desktop/ にあり、ワークスペース内の Rust クレートです。
前提条件(Linux)
sudo apt-get install -y \
libfontconfig1-dev libxkbcommon-dev libxkbcommon-x11-dev \
libwayland-dev libgles2-mesa-dev libegl1-mesa-dev \
libdbus-1-dev libsecret-1-dev \
libasound2-devWindows には Visual Studio Build Tools(C++ ワークロード、MSVC)が必要です。
実行
make dev-desktop # cargo run -p bedrud-desktopビルド
make build-desktop # optimised binary for the current platform主要なパターン
- すべての UI は
apps/desktop/ui/以下の.slintファイルで定義 -build.rsがビルド時に Rust にコンパイル apps/desktop/src/ui/bridge.rsが Slint コールバックを Rust ロジックに接続する唯一の場所 - ビジネスロジックを.slintファイルに配置しないでください- UI の更新が必要なバックグラウンドタスクを起動する場合は
Weak<AppWindow>を使用
詳しいデスクトップアプリアーキテクチャについては、デスクトップアプリアーキテクチャを参照してください。
ボットエージェント開発
エージェントは agents/ にあり、エージェントごとに1つのディレクトリがあります。
cd agents/music_agent
pip install -r requirements.txt
python agent.py "http://localhost:8090/m/test-room"すべてのエージェントは認証先として動作中の Bedrud サーバーが必要です。
CI/CD
GitHub Actions は main へのプッシュおよびプルリクエストごとに実行されます:
| ジョブ | チェック内容 |
|---|---|
| Server | go vet、ビルド、テスト |
| Web | 型チェック、ビルド |
| Android | リント、ユニットテスト、デバッグ APK |
| iOS | ビルド + テスト(シミュレータ、カバレッジ付き) |
| Desktop | cargo build、cargo test |
リリースビルドはバージョンタグ(v*)でトリガーされます。
コードスタイル
- Go: 標準の
gofmtフォーマット - TypeScript/React: Biome(
apps/web/biome.jsonで設定) - Kotlin: Android Studio のデフォルトフォーマット
- Swift: Xcode のデフォルトフォーマット
テスト
cd server
go test ./...cd apps/web
bun run checkcd apps/android
./gradlew testmake build-ios-sim # Builds and runs tests関連項目
- Makefile リファレンス - すべてのビルド・開発コマンド
- アーキテクチャ概要 - コンポーネントの全体構成