fandhe-backend-core 0.5.0

fandhe-backend の最小コア。HTTP/1.1 サーバ・3 種拡張点(Middleware / UpgradeHandler / RequestGate)・Cargo feature 駆動のプラグイン配線を提供する。
Documentation

fandhe-backend

AI によるセキュリティ脆弱性発見リスクに備え、Rust で新規構築する軽量・高速・高並行なバックエンドフレームワークです。axum 級の性能を目標に、プラグインによる拡張(WebRTC / WebSocket)、多様な通信規格(GraphQL / tRPC)、OpenAPI 自動生成・容易なロギングを備えます。

正式名称は fandhe-backend に確定しています(決定経緯・可用性証跡・ 新旧マッピングは docs/design/framework-naming.md 参照)。

インストール

crates.io(v0.4.2、2026-09-28 公開済み。変更履歴は CHANGELOG.md 参照)から 最小コアのみを使う場合は:

cargo add fandhe-backend-core

プラグインは Cargo feature で着脱します(pay-for-what-you-use。無効な feature の依存・コードはバイナリに一切含まれません):

# 例: WebSocket プラグインを有効化
cargo add fandhe-backend-core --features websocket

# 例: 複数 feature の同時有効化
cargo add fandhe-backend-core --features graphql,openapi,cors

公開対象クレートは fandhe-backend-http / fandhe-backend-routes / fandhe-backend-core と fandhe-backend-plugin-*(websocket / graphql / openapi / webrtc / webrtc-proxy / tracing / hub-wiring / jwt / csrf / cors / compression / static)の 15 クレートで、すべて同一バージョン (lockstep)で公開します。現時点の crates.io 公開版は 0.4.2(2026-09-28 公開、13 クレート。 fandhe-backend-plugin-jwt・fandhe-backend-plugin-csrf は 0.5.0 で初公開予定。 変更履歴は CHANGELOG.md、公開手順は docs/design/crates-io-release.md 参照)です。 通常は fandhe-backend-core の feature 経由で利用し、 個別クレートを直接依存に追加する必要はありません (Gate 型の fandhe-backend-plugin-hub-wiring ・fandhe-backend-plugin-jwt・fandhe-backend-plugin-csrf は core の feature を持たない独立クレートで、直接依存に加えて Server::gate で登録します)。

Getting Started

crates.io からの依存追加〜最小サーバ起動までの最短手順は docs/guide/getting-started.md を、 feature 構成別のサンプル(websocket / graphql / webrtc 系 / tracing / openapi / cors / compression / static / hub-wiring)は docs/guide/feature-samples.md を、 拡張点の実装まで含むチュートリアルは docs/guide/tutorial.md を参照してください。 利用者向けドキュメントサイトは https://fandhe-ai.github.io/fandhe-backend/ にあります。

仕様

仕様書(ブレスト〜PoC〜要件定義〜タスク分解〜ロードマップ)は Fandhe-AI/fandhe-backend-spec で管理し、docs/spec/ にサブモジュールとして取り込んでいます。

git clone --recurse-submodules git@github.com:Fandhe-AI/fandhe-backend.git
# 既存クローンの場合
git submodule update --init
ドキュメント 内容
docs/spec/04-requirements.md MoSCoW 優先度付き要件(REQ-1〜15)・受け入れ基準
docs/spec/05-tasks.md タスク分解(全 56 タスク・依存関係・工数)
docs/spec/06-roadmap.md マイルストーン MS-1〜MS-6・着手判定

開発の進め方

docs/spec/06-roadmap.md のマイルストーンに従って実装します。

  • MS-1: 基盤構築(cargo workspace・CI・依存監査ベースライン)・最小コア(HTTP/1.1・3 種拡張点)・プラグイン機構
  • MS-2〜MS-4: Must 要件(性能ベンチマーク・セキュリティ・OpenAPI 自動生成ほか)
  • MS-5〜MS-6: Should 要件(GraphQL / tRPC・WebRTC / WebSocket プラグイン・micro-service-hub 共通配線)

実装着手の最初のタスクは TASK-1.1(cargo workspace・CI 基盤整備)です。

開発環境の構築

開発タスクは Makefile に集約しています。クローン後に make setup を実行すると 仕様書 submodule の取得と git hooks(lefthook)の配線が完了します。

git clone git@github.com:Fandhe-AI/fandhe-backend.git
cd fandhe-backend
make setup    # submodule 取得 + lefthook install(pre-commit / commit-msg フック配線)

make help     # ターゲット一覧(Make 非依存の一覧は scripts/help.sh)
make build    # デフォルト構成のビルド
make test-all # 全 feature 有効のテスト(doc test 含む)
make lint     # cargo fmt --check + clippy -D warnings(CI と同一コマンド)

git hooks は lefthook(lefthook.yml)で管理し、pre-commit で staged の .rs に対する rustfmt --check、commit-msg で Conventional Commits 形式検証 (scripts/commit-msg-check.sh、外部依存なし)を行います。--no-verify での スキップは禁止です(CONTRIBUTING.md 参照)。

ホスト環境に Rust ツールチェーンを入れずに開発する場合は Docker を使えます (Dockerfile / compose.yaml):

make docker-build  # 開発用イメージのビルド
make docker-shell  # コンテナのシェルに入る(リポジトリを /work にマウント)
make docker-test   # コンテナ内で make test-all を実行

エディタ設定は .editorconfig で統一しています(Rust は rustfmt と同じ 4 スペース)。

ビルド成果物(target/)は肥大化しやすいため、ルート Cargo.toml の [profile.dev.package."*"] で依存クレート(workspace 外)のデバッグ情報を行番号のみに しています(dev・test に効き、本リポのクレートは full debuginfo のままです。panic 位置・ バックトレースの行番号は残り、デバッガで依存の変数・型を見られなくなるだけです)。 溜まった古い成果物は cargo install cargo-sweep のうえ cargo sweep --time 14 (14 日以上使われていない成果物を削除)や cargo sweep --installed(rustup に現存しない ツールチェーンでビルドした成果物を削除)で消せます。

コントリビュート

開発フロー・コミット規約・設計原則は CONTRIBUTING.md を参照してください。

ライセンス

本プロジェクトは MIT ライセンス と Apache License 2.0 の デュアルライセンスで提供されます。あなたが本プロジェクトへ提出する Contribution は、明示的な 別段の定めがない限り、上記デュアルライセンスの下で提供されるものとみなされます (詳細は CONTRIBUTING.md を参照)。

crates.io への公開手順(名前確保・所有権・リリース CI)は docs/design/crates-io-release.md で定めています。