|
Vix.cpp は、高速で信頼性が高く、本番運用を意識したアプリケーションを構築するための、モダン C++ ランタイムおよび開発者ツールキットです。 Website · Docs · Rix · Registry · Engineering notes |
Vix.cpp は、ネイティブ性能、明示的な制御、既存の C++ エコシステムとの互換性を保ちながら、C++ プロジェクトにモダンなアプリケーション開発ワークフローを提供します。
Vix.cpp は単なる Web フレームワークではありません。
Vix.cpp は、モダン C++ のためのアプリケーションランタイムおよび開発者プラットフォームです。
C++ source code
-> Vix.cpp workflow
-> CMake/Ninja when needed
-> native executable or libraryVix.cpp は、プロジェクト作成、単一 C++ ファイルの実行、ターゲットビルド、テスト、フォーマット、依存関係管理、パッケージング、OpenAPI ドキュメント公開、本番サービス運用までを扱う統一されたコマンドサーフェスを提供します。
C++ は強力で、移植性があり、成熟しており、高速です。
しかし多くの場合、難しいのは C++ 言語そのものではありません。難しいのは、アプリケーションの周辺にある仕組みです。
- プロジェクト構造
- ビルド設定
- 依存関係の準備
- 開発コマンド
- テスト実行
- 診断
- パッケージング
- ランタイム設定
- OpenAPI ドキュメント
- デプロイ
- 本番ログ
- ヘルスチェック
- サービス管理
本格的な C++ プロジェクトの多くは、最終的に同じ基盤を何度も作り直すことになります。
Vix.cpp は、その基盤を再利用可能で一貫したものにするために存在します。
目的は C++ を隠すことではありません。
目的は、実用的な C++ アプリケーションを作成し、実行し、テストし、パッケージ化し、ドキュメント化し、運用しやすくすることです。
server.cpp を作成します。
#include <vix.hpp>
int main()
{
vix::App app;
app.get("/", [](vix::Request &, vix::Response &res) {
res.text("Hello from Vix.cpp");
});
app.run();
return 0;
}実行します。
vix run server.cpp開きます。
http://localhost:8080API ドキュメントを公開するプロジェクトでは、実行時に docs を有効化できます。
vix run api --docs次を開きます。
http://localhost:8080/docsまたは、生成された OpenAPI ドキュメントを取得します。
http://localhost:8080/openapi.json通常実行では docs は無効です。
vix run apiこれにより、API ドキュメントの公開は明示的で環境を意識したものになります。
カスタムアプリケーションでは、OpenAPI とドキュメントルートをコードから登録できます。
#include <vix.hpp>
#include <vix/openapi/register_docs.hpp>
int main()
{
vix::App app;
app.get("/status", [](vix::Request &, vix::Response &res) {
res.text("OK");
});
vix::openapi::register_openapi_and_docs(
*app.router(),
"Example API",
"1.0.0");
app.run();
return 0;
}これにより、次のルートが登録されます。
GET /openapi.json
GET /docs
GET /docs/
GET /docs/index.html
GET /docs/swagger-ui.css
GET /docs/swagger-ui-bundle.jsドキュメント UI は、埋め込み Swagger UI アセットを使ってローカルに提供されます。
OpenAPI メタデータは、ルートドキュメントとして定義できます。
vix::router::RouteDoc doc;
doc.summary = "Service status";
doc.description = "Returns whether the service is running.";
doc.tags = {"system"};
doc.responses["200"] = {
{"description", "OK"}
};OpenAPI ジェネレータは、ルーターのメタデータと登録済みモジュールドキュメントからドキュメントを構築します。
router routes + registry docs
-> OpenAPI 3.0.3 document新しいプロジェクトを作成します。
vix new api
cd api
vix install
vix devプロジェクトをビルドします。
vix build実行します。
vix runテストを実行します。
vix testsプロジェクトを検証します。
vix check --testsパッケージ化します。
vix packVix.cpp は 3 つのレイヤーを組み合わせています。
Vix は C++ プロジェクトに一貫したコマンドサーフェスを提供します。
vix run main.cpp
vix new api
vix install
vix dev
vix build
vix tests
vix fmt
vix check
vix packすべてのプロジェクトで手作業のスクリプトを組み直す代わりに、Vix は一般的な開発ライフサイクルに予測可能な形を与えます。
Vix はアプリケーション開発のための再利用可能なランタイムモジュールを提供します。
agent async cache cli conversion
core crypto db env error
fs game io json kv
log middleware net orm os
p2p p2p_http path process reply
sync template tests threadpool time
utils validation webrpc websocketこれらのモジュールは、小さなサンプルだけではなく、実用アプリケーションを支えるために設計されています。
Vix は C++ ツールチェーンを置き換えません。
Vix は、ネイティブ C++、CMake、Ninja、コンパイラ、リンカ、通常の実行ファイルやライブラリ出力と連携します。
C++:
language, performance, native binaries
CMake and Ninja:
build system and ecosystem compatibility
Vix.cpp:
application workflow, runtime modules, CLI, diagnostics, project lifecycleVix.cpp は次のような用途に使えます。
- バックエンドサービス
- HTTP API
- OpenAPI ドキュメント付き API
- WebSocket アプリケーション
- コマンドラインツール
- 再利用可能な C++ ライブラリ
- ローカルファーストアプリケーション
- P2P システム
- AI エージェントワークフロー
- ゲーム向けプロジェクト
- 本番サービス
Linux と macOS:
curl -fsSL https://vixcpp.com/install.sh | bashWindows PowerShell:
irm https://vixcpp.com/install.ps1 | iexその他のインストール方法:
https://vixcpp.com/install単一ファイルモードは、Vix.cpp を試す最短ルートです。
main.cpp を作成します。
#include <vix.hpp>
int main()
{
vix::print("Hello from Vix.cpp");
return 0;
}実行します。
vix run main.cppVix はソースファイルを検出し、ネイティブ C++ ツールチェーンでビルドし、生成されたプログラムを実行します。
このモードは次の用途に向いています。
- 実験
- サンプル
- 小さなツール
- Vix API の学習
- 短い C++ スニペットの検証
コードが複数ファイル、テスト、依存関係、安定したアプリケーションへ成長したら、Vix プロジェクトへ移行します。
新しいアプリケーションを作成します。
vix new hello --app
cd hello
vix build
vix run生成されるプロジェクトは通常、次のような構造になります。
hello/
├── src/
│ └── main.cpp
├── tests/
│ └── test_basic.cpp
├── .env.example
├── vix.app
├── vix.json
└── README.mdこの構造は意図的に小さく保たれています。
複雑な構成を最初から強制せず、アプリケーションが成長するために必要な最低限の整理を提供します。
アクティブな開発中は vix dev を使います。
vix dev開発ループは次のようになります。
edit
save
detect change
rebuild
restart
continueコンパイルだけを確認したい場合:
vix buildアプリケーションを手動で起動したい場合:
vix runコードを編集しながら開発する場合:
vix devVix は 2 つのプロジェクトモデルをサポートします。
CMakeLists.txt
vix.app解決順序:
1. CMakeLists.txt
2. vix.appCMakeLists.txt が存在する場合、Vix はそれを使用します。
CMakeLists.txt がなく、vix.app が存在する場合、Vix はマニフェストを読み込み、内部 CMake プロジェクトを生成します。
Project with CMakeLists.txt
-> Vix uses the existing CMake project
Project with vix.app
-> Vix generates an internal CMake project
-> Vix builds the targetこれにより、高度な CMake プロジェクトは主導権を保ちつつ、より単純なアプリケーションには読みやすいマニフェストワークフローを提供できます。
現在のプロジェクトをビルドします。
vix build詳細出力付きでビルドします。
vix build -vRelease ビルドを行います。
vix build --preset release特定ターゲットをビルドします。
vix build --build-target vixすべてをビルドします。
vix build --build-target all単一 C++ ファイルをビルドします。
vix build main.cppvix run は Web アプリケーションに限定されません。
次のものを実行できます。
- 現在のプロジェクト
- 名前付きプロジェクトまたはターゲット
- 単一 C++ ファイル
.vixマニフェスト- コンパイル済みバイナリ
- Docker イメージ
- コンテナイメージ
- SSH ターゲット
- HTTP または HTTPS ターゲット
- Vix umbrella examples
例:
vix run
vix run api
vix run main.cpp
vix run app.vix
vix run ./app
vix run docker://nginx
vix run ssh://user@host
vix run https://example.com| Command | Purpose |
|---|---|
vix run main.cpp |
単一 C++ ファイルを実行する |
vix new <name> |
新しいプロジェクトを作成する |
vix install |
プロジェクト依存関係をインストールする |
vix dev |
開発モードを開始する |
vix build |
設定してビルドする |
vix run |
必要ならビルドして実行する |
vix tests |
テストを実行する |
vix fmt |
ソースファイルをフォーマットする |
vix check |
プロジェクトを検証する |
vix pack |
プロジェクトをパッケージ化する |
vix registry |
レジストリメタデータを管理する |
vix replay |
記録済み実行を再現する |
vix agent |
AI 支援開発ワークフローを実行する |
vix game export |
ゲームプロジェクトをエクスポートする |
Vix.cpp はモジュラーなフレームワークとして構成されています。
vix/
├── modules/
│ ├── agent/
│ ├── async/
│ ├── cache/
│ ├── cli/
│ ├── core/
│ ├── crypto/
│ ├── db/
│ ├── env/
│ ├── error/
│ ├── fs/
│ ├── game/
│ ├── io/
│ ├── json/
│ ├── kv/
│ ├── log/
│ ├── middleware/
│ ├── net/
│ ├── orm/
│ ├── p2p/
│ ├── p2p_http/
│ ├── path/
│ ├── process/
│ ├── reply/
│ ├── sync/
│ ├── template/
│ ├── tests/
│ ├── threadpool/
│ ├── time/
│ ├── utils/
│ ├── validation/
│ ├── websocket/
│ └── webrpc/
├── docs/
├── tests/
└── benchmarks/各モジュールは独立して進化でき、同時に同じアプリケーションプラットフォームの一部として機能します。
#include <vix.hpp>
int main()
{
vix::App app;
app.get("/", [](vix::Request &, vix::Response &res) {
res.text("Hello from Vix.cpp");
});
app.get("/health", [](vix::Request &, vix::Response &res) {
res.text("OK");
});
app.run();
return 0;
}実行します。
vix run server.cppテストします。
curl -i http://127.0.0.1:8080/
curl -i http://127.0.0.1:8080/healthプロフェッショナルな API は、検査可能であるべきです。
Vix は、明示的に有効化できる OpenAPI ドキュメントルートをサポートします。
開発時に docs を有効化して実行します。
vix run api --docs通常実行では docs を無効にします。
vix run api明示的に docs を無効化します。
vix run api --no-docs環境変数でも制御できます。
VIX_DOCS=1 vix run api
VIX_DOCS=0 vix run api推奨される本番ポリシー:
disable docs completely
protect /docs behind auth
serve docs only in internal environments
serve /openapi.json only in CI or stagingVix は、パッケージベースの C++ プロジェクト向けにレジストリワークフローを提供します。
vix registry sync
vix add <package>
vix installレジストリモデル:
Registry index -> package metadata
Store -> fetched package Git checkouts
vix.json -> declared project dependency requirements
vix.lock -> exact resolved dependency versions
.vix/deps -> project-local dependency links or copies
.vix/vix_deps.cmake -> generated dependency integrationレジストリは、パッケージメタデータをプロジェクトソースから分離します。
Rix は、Vix.cpp の統一された userland ライブラリレイヤーです。
Vix が提供するもの:
runtime
CLI
build workflow
registry integration
core modulesRix が提供するもの:
optional userland libraries
a unified facade
independent packages統一 facade をインストールします。
vix add @rix/rix
vix install使用例:
#include <rix.hpp>
int main()
{
rix.debug.print("Hello", "Rix");
auto table = rix.csv.parse("name,language\nAda,C++\n");
rix.debug.log("loaded {} rows", table.size());
return 0;
}Vix は、本番サービスを検査可能で運用しやすくするために設計されています。
本番向けワークフローの例:
vix build --preset release
vix service install
vix service start
vix service status
vix service logs
vix proxy nginx check
vix doctor production目的は、本番状態を見えるようにすることです。
App status
Binary path
Service status
HTTP port
WebSocket port
Public URL
Proxy state
TLS state
Healthcheck result
LogsC++ アプリケーションは、デプロイ後にブラックボックスになるべきではありません。
vix replay は、記録済みの実行を再現するための機能です。
実行を記録します。
vix run api --replay最後に記録された実行を再現します。
vix replay last最後に失敗した実行を再現します。
vix replay failedこれは、実行が失敗した、クラッシュした、または予期しない挙動をした場合に、同じコンテキストを再現したいときに役立ちます。
Vix は、ローカルプロジェクト解析や開発支援のための AI エージェントコマンドを提供します。
vix agent ask "Explain this project"
vix agent analyze .
vix agent scan .エージェントは許可されたワークスペースを検査し、プロジェクト構造を要約し、開発タスクを支援できます。
Vix は vix game 名前空間を通じて、ゲーム向けツールを提供します。
vix game exportこれにより、ゲームプロジェクトをアセットとメタデータ付きの配布用ディレクトリへエクスポートできます。
Vix.cpp は、性能を単なるマーケティング文句ではなく、エンジニアリング上の関心事として扱います。
Core モジュールには、リリース間の性能を追跡し、マージまたはリリース前にリグレッションを検出するための公式ベンチマークスイートが含まれています。
Benchmark source:
- Core benchmarks
- Core benchmarks README
- v2.6.3 benchmark baseline
- Engineering note: Vix Core v2.6.3 benchmark baseline
例:
vix build --build-target benchmarksCore ベンチマーク領域:
runtime.task
runtime.queue
runtime.scheduler
runtime.worker
executor.submit
executor.post
executor.metrics
router.match
router.registration
http.request
http.response
session.fake_transport
app.route_registration
app.group_registration公式 Core benchmark baseline は次に保存されています。
modules/core/benchmarks/baselines/v2.6.3/Baseline files:
core_app_group_registration_bench.json
core_app_route_registration_bench.json
core_executor_metrics_bench.json
core_executor_post_bench.json
core_executor_submit_bench.json
core_http_request_bench.json
core_http_response_bench.json
core_router_match_bench.json
core_router_registration_bench.json
core_runtime_queue_bench.json
core_runtime_scheduler_bench.json
core_runtime_task_bench.json
core_runtime_worker_bench.json
core_session_fake_transport_bench.json公式ベンチマーク値は Release ビルドから生成する必要があります。
dev/debug = compile, test, debug
release = measure performancemodules/core からベンチマークスイートをビルドします。
vix build --clean --preset release --build-target all -v -- \
-DVIX_CORE_BUILD_BENCHMARKS=ON \
-DVIX_CORE_BUILD_TESTS=ON単一ベンチマークを実行します。
./build-release/benchmarks/core/core_router_match_benchCore benchmark suite 全体を実行します。
./scripts/run_core_benchmarks.sh \
--bin-dir build-release/benchmarks/core \
--out-dir benchmarks/results/dev \
--version dev \
--runner local \
--machine local公式 baseline と比較します。
./scripts/compare_core_benchmarks.py \
benchmarks/baselines/v2.6.3 \
benchmarks/results/currentデフォルトでは、benchmark comparison は次を使用します。
median_ops_per_sec値が高いほど良い結果です。
Default thresholds:
WARN = -5%
FAIL = -10%Vix.cpp は次の原則に基づいて構築されています。
- ネイティブ C++ を保つ
- ツールチェーンを隠さない
- CMake と競合せず連携する
- 一般的なワークフローを再利用可能にする
- 必要なときに OpenAPI で API を公開する
- 診断を読みやすくする
- 本番環境を検査可能にする
- モジュールを組み合わせ可能にする
- 性能を推測ではなく測定する
- 隠れた魔法より明示的な API を優先する
- 単純なプロジェクトは簡単に、複雑なプロジェクトは可能にする
Vix.cpp は C++ を置き換えません。
C++ をスクリプト言語に変えるものではありません。
高度なビルドシステムにおける CMake を置き換えるものではありません。
すべてのプロジェクトに単一の構造を強制するものではありません。
すべての環境でドキュメントをデフォルト公開するものではありません。
Vix.cpp は、ネイティブ制御を保ちながら、C++ アプリケーションに一貫したワークフローとモジュラーなランタイム基盤を提供します。
Vix.cpp は現在も積極的に開発されています。
一部の領域は安定しており、実用的なアプリケーション開発に使用できます。
一部の領域はまだ進化中であり、本番利用前に慎重に評価する必要があります。
このプロジェクトは次を重視して開発されています。
- 実用アプリケーションワークフロー
- テスト
- ベンチマーク
- OpenAPI ドキュメント
- 本番診断
- モジュラー設計
Start here:
Recommended path:
- Vix.cpp をインストールする
- 最初の C++ ファイルを実行する
- 最初のプロジェクトを作成する
- 最初の HTTP サーバーを構築する
- ローカルで OpenAPI docs を有効化する
- CLI コマンドを学ぶ
- ランタイムモジュールを探索する
- レジストリからパッケージを追加する
- ローカル開発から本番運用へ進む
| Project | Purpose |
|---|---|
| Rix | Vix.cpp の統一 userland ライブラリレイヤー |
| Cnerium | Vix 上に構築された durable backend reliability layer |
| Vix Game | ゲーム向けランタイムプロジェクト |
| PulseGrid | 本番スタイルのサービス監視プロジェクト |
| Softadastra Runner | Vix.cpp で構築されたコマンドランナー |
コントリビューションは歓迎です。
Pull Request を開く前に実行してください。
vix fmt --check
vix check --tests
vix build --preset release性能に関わるコードを変更する場合は、ベンチマークスイートを実行し、現在の baseline と比較してください。
MIT License.
