rust について
Rustは、メモリ安全性、並行性、性能を重視するシステムプログラミング言語です。このスキルは、サービス、CLIツール、ターミナルUI、WebAssemblyなどの開発に役立つ実践的な指針を提供します。
主な機能
- 01所有権と借用のガイダンス
- 02エラー処理パターン
- 03Tokioによる非同期プログラミング
- 04axumによるWebサービス開発
- 05clapによるCLI開発
- 06テストとベンチマーク
活用シーン
- 01メモリ安全なシステムソフトウェアの構築
- 02非同期Webサービスの開発
- 03コマンドラインツールやターミナルUIの作成
- 04性能重視アプリケーションのベンチマーク
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill rustインストール後、Claude Code で/rustを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/async-tokio.mdaxum-web.mdcli-applications.mderror-handling.mdownership-and-types.mdratatui-tui.mdrelease-pipeline.mdtesting-and-benchmarks.md詳細
Rust
概要
Rust は、安全性、並行性、パフォーマンスを重視したシステムプログラミング言語です。所有権システムにより、ガベージコレクションなしでメモリ安全性が保証され、型システムによりコンパイル時にスレッド安全性が確保されます。
使用する場面: システムプログラミング、Web サービス(axum)、CLI ツール(clap)、ターミナル UI(ratatui)、WebAssembly、パフォーマンスが重要なアプリケーション、実行時のオーバーヘッドなしでメモリ安全性が必要なあらゆる用途。
使用しない場面: 安全性よりコンパイル時間が重要な迅速なプロトタイピング、単純なスクリプト作成、チームに Rust の経験がなく納期が厳しいプロジェクト。
クイックリファレンス
| パターン | API / ツール | 主なポイント |
|---|---|---|
| 所有権の移動 | let b = a; | a はムーブされ、その後は使用できません |
| 借用 | &T / &mut T | 可変参照は 1 つ、または不変参照は複数 |
| ライフタイム注釈 | fn f<'a>(x: &'a str) -> &'a str | 出力のライフタイムを入力に結び付けます |
| エラーの伝播 | ? 演算子 | エラーを変換して伝播します |
| カスタムエラー | thiserror::Error derive | Display を実装した構造化エラー型 |
| アドホックなエラー | anyhow::Result<T> | アプリケーション向けのコンテキスト連鎖 |
| 非同期ランタイム | #[tokio::main] | 非同期プログラムのエントリーポイント |
| タスクの起動 | tokio::spawn(async { }) | 非同期タスクを並行実行します |
| HTTP ルーター | axum::Router::new().route(...) | エクストラクターを使った合成可能なルーティング |
| エクストラクター | Json<T>, Path<T>, State<T> | 型安全なリクエスト解析 |
| シリアライズ | #[derive(Serialize, Deserialize)] | フォーマットに依存しない derive を備えた serde |
| CLI の解析 | #[derive(Parser)] | 引数解析用の clap derive API |
| TUI の描画 | terminal.draw(|f| { }) | 即時モードの ratatui 描画 |
| ベンチマーク | criterion::Criterion | 統計的なベンチマーク用フレームワーク |
| 依存関係の監査 | cargo deny check | ライセンス、脆弱性、ソースの監査 |
| バイナリのリリース | cargo dist init | クロスプラットフォームのバイナリ配布 |
| 変更履歴 | release-plz update | semver の自動更新と変更履歴の生成 |
よくある間違い
| 間違い | 正しいパターン |
|---|---|
| ローカル変数への参照を返す | 所有型を返すか、ライフタイムパラメーターを使用する |
ライブラリコードで unwrap() を使う | Result を返し、呼び出し元に判断を任せる |
借用チェッカーを通すために clone() する | コードを再構成して借用の競合を避ける |
| 非同期コンテキストでブロッキングする | tokio::task::spawn_blocking を使う |
| 同期機構なしで可変状態を共有する | Arc<Mutex<T>> またはチャネルを使う |
&str で十分な場面で String を使う | 関数パラメーターでは &str を受け取る |
must_use 警告を無視する | 対処するか、let _ = で明示的に破棄する |
| 大きな列挙型のバリアントを使う | 大きなバリアントを Box 化して全体のサイズを抑える |
境界条件なしでトレイトに async fn を定義する | Send 境界を追加するか、async-trait クレートを使う |
非同期テストに #[tokio::test] がない | #[test] の代わりに #[tokio::test] を使う |
委任
- コードの調査:
Exploreエージェントを使用します - アーキテクチャのレビュー:
Taskエージェントを使用します - コードレビュー:
code-reviewerエージェントに委任します
dockerスキルを利用できる場合は、複数ステージのコンテナビルドパターンを委任します。github-actionsスキルを利用できる場合は、CI パイプラインの設定を委任します。openapiスキルを利用できる場合は、API 仕様とコード生成を委任します。
参考資料
コメント
Markdown 対応