moai-lang-rust について
moai-lang-rustは、Rust開発向けのスキルです。システムやアプリケーション開発に役立つ言語、非同期処理、Webサービス、データベース、CLI、テストのパターンを扱います。
主な機能
- 01Rust 1.92+の言語機能と所有権パターン
- 02Tokioによる非同期処理と並行処理
- 03AxumによるREST API開発
- 04SQLxによる型安全なデータベースクエリ
- 05clapによるCLI開発とテストパターン
活用シーン
- 01REST APIやマイクロサービスの構築
- 02並行システムや低レイテンシのネットワークサービスの開発
- 03CLIツールやシステムユーティリティの開発
- 04WebAssemblyアプリの作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ modu-ai/ moai-adk --skill moai-lang-rustインストール後、Claude Code で/moai-lang-rustを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
reference/engineering.mdguidelines.mdperformance.mdreferences/examples.mdreference.md詳細
クイックリファレンス(30秒)
高パフォーマンスでメモリーセーフなアプリケーション開発に精通した、Rust 1.92+ 開発スペシャリストです。
自動検出対象:.rs、Cargo.toml、async/await、Tokio、Axum、SQLx、serde、ライフタイム、トレイト
主なユースケース:
- 高パフォーマンスな REST API とマイクロサービス
- メモリーセーフな並行システム
- CLI ツールとシステムユーティリティ
- WebAssembly アプリケーション
- 低レイテンシーのネットワークサービス
基本パターン:
Axum REST API:パスとハンドラーを連結するルートマクロを使って Router を作成します。共有状態を指定するには with_state を追加します。tokio::net で TcpListener をバインドし、axum::serve でサーバーを起動します。
SQLx を使った非同期ハンドラー:AppState 用の State エクストラクターと id 用の Path エクストラクターを引数に取る非同期ハンドラー関数を定義します。SQL 文字列とバインドパラメーターを指定した sqlx::query_as! マクロを使います。プールに対して fetch_optional を呼び出して await し、ok_or でエラーを変換します。結果を Json でラップして返します。
実装ガイド(5分)
Rust 1.92 の機能
最新の Rust 機能:
- Rust 2024 Edition が利用可能(Rust 1.85 とともにリリース)
- 非同期トレイトが安定化(async-trait クレートが不要に)
- コンパイル時の配列サイズ指定に使える const ジェネリクス
- パターンマッチングで早期リターンを行う let-else
- polonius による借用チェッカーの改善
非同期トレイト(安定版):async fn シグネチャを持つトレイトを定義します。具体型に対して async fn 実装を行います。トレイトメソッド内で SQLx マクロを直接呼び出します。
Let-Else パターン:早期終了のために、let Some(value) = option else と return を使用します。複数の let-else 文を連結して、順番に検証できます。else ブロックではエラー型を返します。
Web フレームワーク:Axum 0.8
インストール:Cargo.toml の dependencies セクションに、axum のバージョン 0.8、full 機能を有効にした tokio のバージョン 1.48、cors および trace 機能を有効にした tower-http のバージョン 0.6 を追加します。
API の完全なセットアップ:axum::extract からエクストラクターを、routing マクロをインポートします。PgPool を保持する Clone を derive した AppState 構造体を定義します。tokio::main を付けた非同期 main で、PgPoolOptions の max_connections を設定し、環境変数 DATABASE_URL で接続してプールを作成します。パスとハンドラーを連結したルートを持つ Router を構築し、CorsLayer を追加して with_state を呼び出します。TcpListener をバインドし、axum::serve を呼び出します。
ハンドラーパターン:適切な型の State、Path、Query エクストラクターを引数に取る非同期ハンドラーを定義します。位置指定のバインドを使った、型安全なクエリには sqlx::query_as! を使用します。成功時は Json、失敗時は AppError を返す Result を返します。
非同期ランタイム:Tokio 1.48
タスクのスポーンとチャネル:容量を指定して mpsc チャネルを作成します。チャネルからループ内で受信するワーカータスクを tokio::spawn でスポーンします。タイムアウトには、処理のブランチとスリープのブランチを持つ tokio::select! マクロを使用し、タイムアウト時はエラーを返します。
データベース:SQLx 0.8
型安全なクエリ:構造体に sqlx::FromRow を derive して、自動マッピングを有効にします。コンパイル時に検証されるクエリには query_as! マクロを使用します。プールに対して fetch_one または fetch_optional を呼び出します。トランザクションでは、pool.begin を呼び出し、トランザクション参照を使ってクエリを実行し、tx.commit を呼び出します。
シリアライゼーション:Serde 1.0
構造体に Serialize と Deserialize を derive します。大文字・小文字の変換には rename_all を指定した serde 属性を使用します。フィールドごとの名前付けには rename 属性を使用します。Option::is_none を指定した skip_serializing_if を使用します。デフォルト値には default 属性を使用します。
エラー処理
thiserror:表示メッセージには error 属性を使い、enum に Error を derive します。元のエラーから自動変換するには from 属性を使用します。バリアントに応じて分岐し、エラーメッセージを含む Json ボディとステータスコードを返す IntoResponse を実装します。
CLI 開発:clap
メインの Cli 構造体に Parser を derive し、name、version、about の command 属性を指定します。グローバルフラグには arg 属性を使用します。コマンド用の enum に Subcommand を derive します。main でコマンドに応じて分岐し、処理を振り分けます。
テストパターン
cfg(test) 属性を付けたテストモジュールを作成します。tokio::test を付けた非同期関数を定義します。セットアップ用ヘルパーを呼び出し、テスト対象の関数を実行し、検証には assert! マクロを使用します。
高度なパターン
以下を含む包括的な内容については、次を参照してください。
- 高度な所有権パターン、ライフタイム、スマートポインター
- トレイト設計とジェネリックプログラミング
- パフォーマンス最適化戦略とプロファイリング
- エンジニアリングのベストプラクティスとコーディングガイドライン
- 非同期パターンと並行処理
所有権とトレイトについては reference/engineering.md、最適化については reference/performance.md、コーディング標準については reference/guidelines.md を参照してください。
パフォーマンス最適化
リリースビルド:Cargo.toml の profile.release セクションで lto を有効にし、codegen-units を 1 に設定し、panic を abort に設定して、strip を有効にします。
デプロイ
最小構成のコンテナー:マルチステージ Dockerfile を使用します。第 1 ステージでは rust alpine イメージを使用し、Cargo ファイルをコピーして、依存関係をキャッシュするためのダミーの main を作成し、リリースビルドを行います。ソースをコピーし、再ビルドのために main.rs のタイムスタンプを更新してから、最終的なリリースビルドを行います。第 2 ステージでは alpine を使用し、ビルダーからバイナリをコピーして、ポートを公開し、CMD を設定します。
並行処理
レート制限付き操作:最大許可数を指定して、Arc でラップした Semaphore を作成します。項目をマッピングして、セマフォの許可を取得し、処理を実行して、結果を返すタスクを起動します。futures::future::join_all を使用して結果を収集します。
Context7 との連携
ライブラリのドキュメントへのアクセス:
/rust-lang/rust- Rust 言語と標準ライブラリ/tokio-rs/tokio- Tokio 非同期ランタイム/tokio-rs/axum- Axum Web フレームワーク/launchbadge/sqlx- SQLx 非同期 SQL/serde-rs/serde- シリアライゼーションフレームワーク/dtolnay/thiserror- エラー導出/clap-rs/clap- CLI パーサー
相性の良いツール
moai-lang-go- Go のシステムプログラミングパターンmoai-domain-backend- REST API アーキテクチャとマイクロサービスのパターンmoai-foundation-quality- Rust アプリケーションのセキュリティ強化moai-workflow-testing- テスト駆動開発のワークフロー
トラブルシューティング
よくある問題:
- Cargo のエラー:cargo clean を実行してから cargo build を実行します
- バージョンの確認:rustc --version と cargo --version を実行します
- 依存関係の問題:cargo update と cargo tree を実行します
- コンパイル時の SQL 検証:cargo sqlx prepare を実行します
パフォーマンス特性:
- 起動時間:50-100ms
- メモリ使用量:ベースで 5-20MB
- スループット:100k-200k req/s
- レイテンシ:p99 で 5ms 未満
- コンテナーサイズ:5-15MB(alpine)
追加リソース
高度な所有権パターンとトレイト設計については、reference/engineering.md を参照してください。
最適化戦略とプロファイリング手法については、reference/performance.md を参照してください。
Rust のコーディング標準とベストプラクティスについては、reference/guidelines.md を参照してください。
最終更新日:2026-01-11 バージョン:1.2.0