mcpField
M
moai-lang-rust

moai-lang-rust

github.com/modu-ai開発1.2k59 回インストール今日更新
リポジトリ

moai-lang-rust について

moai-lang-rustは、Rust開発向けのスキルです。システムやアプリケーション開発に役立つ言語、非同期処理、Webサービス、データベース、CLI、テストのパターンを扱います。

主な機能

  1. 01Rust 1.92+の言語機能と所有権パターン
  2. 02Tokioによる非同期処理と並行処理
  3. 03AxumによるREST API開発
  4. 04SQLxによる型安全なデータベースクエリ
  5. 05clapによるCLI開発とテストパターン

活用シーン

  1. 01REST APIやマイクロサービスの構築
  2. 02並行システムや低レイテンシのネットワークサービスの開発
  3. 03CLIツールやシステムユーティリティの開発
  4. 04WebAssemblyアプリの作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/modu-ai/moai-adk --skill moai-lang-rust

インストール後、Claude Code で/moai-lang-rustを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

reference/
engineering.md
guidelines.md
performance.md
references/
examples.md
reference.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

コメント