Skip to content

add: グローバル Rust 言語ルール (Result/thiserror/clippy)#289

Open
shunsock wants to merge 1 commit into
mainfrom
claude-config/add-rust-language-rule
Open

add: グローバル Rust 言語ルール (Result/thiserror/clippy)#289
shunsock wants to merge 1 commit into
mainfrom
claude-config/add-rust-language-rule

Conversation

@shunsock
Copy link
Copy Markdown
Owner

Summary

  • configs/claude/rules/language__rust.md を新規追加
  • 3 規律を明文化:
    1. エラーは型で表現するunwrap() / expect() / panic!() を production コードで禁止、Result<T, E> / Option<T> で失敗パスを露出
    2. エラー型は ADT で作るthiserror::Error + enum で定義、anyhow::Error / Box<dyn Error> は禁止、#[from] で透過変換
    3. Clippy で機械検証[workspace.lints.clippy]unwrap_used / expect_used / panicwarn で設定し、CI では -D warnings で落とす

Motivation

shunsock/playground の Inazuma プロジェクト (Effect-Based + 4-Layer DDD の Rust CLI) で「エラーは型で表現する」規律がドキュメント化されていないことがレビューで指摘された。これは Inazuma 固有の規律ではなく Rust プロジェクト全般に適用したいので、Inazuma 側ではなく dotfiles の configs/claude/rules/ に置くことで、~/.claude/rules/ にグローバル配布する。

既存の language__hcl.md と同じ骨格 (規律 → 守ること → コード例 → 理由) で揃えた。Nix の home.file.".claude/rules".source = ../../configs/claude/rules でディレクトリ単位で配布されているため、新規ファイル追加のみで自動配布される (nix-darwin / nix-os 両方の modules/claude.nix に変更不要)。

Defaults Assumed (auto mode)

ヒアリング論点について auto mode 下で以下を採用:

  • clippy 厳格度: warn (CI で警告を出すが即落としはしない、段階導入しやすい)
  • テストコードの扱い: #[cfg(test)] 配下の unwrap / assert! は規律の対象外と明記
  • 禁止ライブラリ: anyhow のみ (要件の主旨に沿う最小)
  • 追加規律: 骨格の 3 セクションに留め、clone 多用や #[non_exhaustive] 等は今回見送り

合わない箇所があれば追加コミットで調整可能。

Verification

  • nix flake check (nix-darwin): passed
  • nix build .#darwinConfigurations.shunsock-darwin.system: main ブランチでも darwin.apple_sdk_11_0 has been removed で失敗 (本 PR 由来ではない既知の依存問題)
  • 変更は configs/claude/rules/ 配下の Markdown 1 ファイル追加のみで、Nix の評価結果に影響しないことを確認 (home.file の source はディレクトリ参照のため)

🤖 Generated with Claude Code

エラーを Result/Option の型で表現すること、anyhow を禁止し thiserror
ADT でエラー型を定義すること、clippy で機械検証することの 3 規律を
language__rust.md として明文化する。既存の language__hcl.md と同じ
配置・骨格に揃え、configs/claude/rules/ 配下に置くことで Nix の
home.file.".claude/rules" 経由で自動配布される。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@shunsock shunsock added the claude-config-updater PRs created by claude-config-updater agent label May 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

claude-config-updater PRs created by claude-config-updater agent

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant