mcpField
R
rust-cli-agent-style

rust-cli-agent-style

github.com/pproenca開発21857 回インストール11 週間前に更新
リポジトリ

rust-cli-agent-style について

OpenAI CodexのCLIおよびエージェントのコードベースをもとにしたRustコーディング規約のスキルです。プロダクション向けRust CLIやエージェントシステムの開発者に、エラー処理、ワークスペース、非同期処理、命名、スタイルを案内します。

主な機能

  1. 01エラー処理の規約
  2. 02ワークスペースの構成
  3. 03非同期処理とトレイトのパターン
  4. 04命名規則
  5. 05コードスタイルとlintの指針
  6. 06クレート間の依存関係の扱い

活用シーン

  1. 01Rust CLIツールの構築
  2. 02Rustエージェントシステムの開発
  3. 03Rustワークスペースの構成
  4. 04プロダクションRustコードのレビュー

インストール

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

$npx skills add https://github.com/pproenca/dot-skills --skill rust-cli-agent-style

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

同梱ファイル

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

AGENTS.md
README.md
metadata.json
assets/templates/
_template.md
references/
_sections.md
cross-workspace-deps.md
cross-workspace-lints.md
err-anyhow-application.md
err-context-chain.md
err-doc-errors.md
err-from-derive.md
err-io-result.md
err-map-err-conversion.md
err-no-expect.md
err-no-unwrap.md
err-structured-variants.md
err-thiserror-domain.md
err-transparent.md
mod-async-trait-macro.md
mod-builder-pattern.md
mod-derive-order.md
mod-extension-trait-suffix.md
mod-generic-constraints.md
mod-impl-block-order.md
mod-jsonschema-derive.md
mod-newtype-pattern.md
mod-serde-rename.md
mod-struct-visibility.md
mod-trait-bounds.md
mod-type-alias-complex.md

詳細

OpenAI Codex Rust CLI エージェントのベストプラクティス

このスキルでは、50 個のクレートと 787 個の Rust ファイルで構成される、本番環境向けの CLI/エージェントシステムである OpenAI Codex コードベースのスタイルで Rust コードを書く方法を学びます。

主な特徴

  • Edition 2024 と厳格な Clippy 設定
  • テスト以外のコードでは unwrap/expect を一切使用しない(ワークスペースレベルで適用)
  • 適切な Send + Sync 境界を持つ Tokio 非同期ランタイム
  • ライブラリエラーには thiserror、アプリケーションコードには anyhow
  • 依存関係を一元管理する フラットなワークスペース構成

適用する場面

次の場合にこのスキルを適用してください。

  • Rust で CLI ツールやエージェントシステムを構築する
  • Tokio を使って非同期 Rust を記述する
  • Rust ワークスペースの構成を設計する
  • エラー処理のパターンを実装する
  • 本番環境向けの Rust コードベースを扱う

クイックリファレンス

重要なルール(必ず守ること)
ルール説明
err-no-unwrapテスト以外のコードでは unwrap() を絶対に使用しない
err-no-expectライブラリコードでは expect() を避ける
err-thiserror-domainドメインエラーには thiserror を使用する
err-context-chain.context() を使ってエラーにコンテキストを追加する
エラー処理
ルール説明
err-anyhow-applicationエントリーポイントには anyhow::Result を使用する
err-from-deriveエラー変換には #[from] を使用する
err-transparentラップされたエラーには #[error(transparent)] を使用する
err-structured-variantsエラーのバリアントに関連データを含める
err-io-resultI/O 関数には std::io::Result を使用する
err-map-err-conversionエラー変換には map_err を使用する
err-doc-errorsエラー条件をドキュメントに記載する
構成
ルール説明
org-workspace-flatutils サブディレクトリを含むフラットなワークスペース
org-crate-namingディレクトリには kebab-case を使用し、プロジェクトの接頭辞を付ける
org-module-visibility内部 API には pub(crate) を使用する
org-test-common-crateテストユーティリティを共有するクレート
org-integration-tests-suitesuite ディレクトリにテストを配置する
org-feature-modules機能ベースでモジュールを構成する
org-handlers-subdir専用のサブディレクトリにハンドラーを配置する
org-errors-file専用ファイルにエラーを定義する
コンポーネントパターン
ルール説明
mod-derive-orderderive マクロの順序を統一します
mod-async-trait-macro非同期トレイトには #[async_trait] を使用します
mod-trait-bounds並行処理を行うトレイトには Send + Sync + 'static を指定します
mod-extension-trait-suffix拡張トレイトには Ext サフィックスを付けます
mod-builder-pattern複雑な設定には Builder パターンを使用します
mod-type-alias-complex複雑なジェネリクスには型エイリアスを使用します
mod-impl-block-orderimpl ブロックの順序を統一します
mod-generic-constraints複雑な境界条件には where 句を使用します
mod-newtype-pattern型安全性のために Newtype を使用します
mod-struct-visibilityフィールドを非公開にし、公開コンストラクターを用意します
mod-serde-renamewire format には Serde の rename を使用します
mod-jsonschema-deriveAPI 型には JsonSchema を使用します
命名規則
ルール説明
name-async-no-suffix非同期関数に _async サフィックスを付けません
name-try-prefix-fallible失敗する可能性のあるコンストラクターには try_ プレフィックスを付けます
name-with-prefix-builderビルダーメソッドには with_ プレフィックスを付けます
name-handler-suffixハンドラーには Handler サフィックスを付けます
name-error-suffixエラー型には Error サフィックスを付けます
name-result-type-aliasクレート固有の Result エイリアスを使用します
name-const-env-var環境変数定数には _ENV_VAR サフィックスを付けます
name-request-responseRequest/Response 型をペアにします
name-options-suffix設定のまとめには Options サフィックスを付けます
name-info-suffix読み取り専用データには Info サフィックスを付けます
name-provider-suffixサービスには Provider サフィックスを付けます
name-client-suffixAPI クライアントには Client サフィックスを付けます
name-manager-suffixライフサイクル管理には Manager サフィックスを付けます
name-bool-is-prefixブール値には is_/has_/should_ を使用します
name-plural-collectionsコレクションには複数形の名前を使用します
スタイル
ルール説明
style-import-granularityuse 文ごとに項目を1つだけ指定します
style-deny-stdoutライブラリで stdout/stderr を禁止します
style-inline-format-argsformat 引数をインライン化します
style-module-docsモジュールレベルのドキュメントを記述します
style-expect-reasonlint には理由を添えて #[expect] を使用します
style-cfg-test-module単体テストは mod tests に記述します
クレート間
ルール説明
cross-workspace-lintsワークスペースレベルの lint 設定
cross-workspace-deps依存関係のバージョンを一元管理します

例:適切なエラー処理

use thiserror::Error;
use anyhow::Context;

// Domain error with thiserror
#[derive(Debug, Error)]
pub enum ConfigError {
    #[error("failed to read config file: {path}")]
    ReadFailed {
        path: PathBuf,
        #[source]
        source: std::io::Error,
    },

    #[error(transparent)]
    Parse(#[from] toml::de::Error),
}

// Library function returns domain error
pub fn load_config(path: &Path) -> Result<Config, ConfigError> {
    let content = fs::read_to_string(path)
        .map_err(|source| ConfigError::ReadFailed {
            path: path.to_owned(),
            source,
        })?;
    toml::from_str(&content).map_err(Into::into)
}

// Application code uses anyhow with context
fn main() -> anyhow::Result<()> {
    let config = load_config(Path::new("config.toml"))
        .context("failed to load configuration")?;
    run(config).await
}

出典

OpenAI Codex(codex-rs/ サブディレクトリ)から抽出したパターンです。50 個のクレートと 787 個の Rust ファイルで構成される、本番環境で使用されている Rust コードベースです。

コメント