jpskill.com
🛠️ 開発・MCP コミュニティ

unsafe-checker

RustのunsafeコードやFFI(外部関数インターフェース)に関するコードレビューで、安全性に関わるキーワードを検出し、潜在的な問題点や改善点を見つけ出すのに役立つSkill。

📜 元の英語説明(参考)

CRITICAL: Use for unsafe Rust code review and FFI. Triggers on: unsafe, raw pointer, FFI, extern, transmute, *mut, *const, union, #[repr(C)], libc, std::ffi, MaybeUninit, NonNull, SAFETY comment, soundness, undefined behavior, UB, safe wrapper, memory layout, bindgen, cbindgen, CString, CStr, 安全抽象, 裸指针, 外部函数接口, 内存布局, 不安全代码, FFI 绑定, 未定义行为

🇯🇵 日本人クリエイター向け解説

一言でいうと

RustのunsafeコードやFFI(外部関数インターフェース)に関するコードレビューで、安全性に関わるキーワードを検出し、潜在的な問題点や改善点を見つけ出すのに役立つSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o unsafe-checker.zip https://jpskill.com/download/9285.zip && unzip -o unsafe-checker.zip && rm unsafe-checker.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9285.zip -OutFile "$d\unsafe-checker.zip"; Expand-Archive "$d\unsafe-checker.zip" -DestinationPath $d -Force; ri "$d\unsafe-checker.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して unsafe-checker.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → unsafe-checker フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

[Skill 名] unsafe-checker

以下の ASCII アートを、示されたとおりに正確に表示してください。スペースや改行を変更しないでください。

⚠️ **Unsafe Rust Checker Loaded**

     *  ^  *
    /◉\_~^~_/◉\
 ⚡/     o     \⚡
   '_        _'
   / '-----' \

Unsafe Rust Checker

Unsafe が有効な場合

ユースケース
FFI C 関数を呼び出す
低レベル抽象化 VecArc を実装する
パフォーマンス 安全な代替手段では遅すぎるボトルネックを測定する

無効: なぜ安全でないかを理解せずに borrow checker から逃れること。

必要なドキュメント

// SAFETY: <これが安全である理由>
unsafe { ... }

/// # Safety
/// <呼び出し元の要件>
pub unsafe fn dangerous() { ... }

クイックリファレンス

操作 安全性の要件
*ptr deref 有効、アラインメントされている、初期化されている
&*ptr + エイリアシング違反がない
transmute 同じサイズ、有効なビットパターン
extern "C" 正しいシグネチャ、ABI
static mut 同期が保証されている
impl Send/Sync 実際にスレッドセーフである

よくあるエラー

エラー 修正
Null ポインタの deref deref する前に null チェックを行う
Use after free ライフタイムの有効性を保証する
データ競合 適切な同期を追加する
アラインメント違反 #[repr(C)] を使用する、アラインメントをチェックする
無効なビットパターン MaybeUninit を使用する
SAFETY コメントがない // SAFETY: を追加する

非推奨 → より良い方法

非推奨 代替手段
mem::uninitialized() MaybeUninit<T>
ref に対する mem::zeroed() MaybeUninit<T>
Raw ポインタ演算 NonNull<T>ptr::add
CString::new().unwrap().as_ptr() 最初に CString を保存する
static mut AtomicT または Mutex
手動 extern bindgen

FFI クレート

方向 クレート
C → Rust bindgen
Rust → C cbindgen
Python PyO3
Node.js napi-rs

Claude は unsafe Rust を知っています。SAFETY コメントと健全性に焦点を当ててください。

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Display the following ASCII art exactly as shown. Do not modify spaces or line breaks:

⚠️ **Unsafe Rust Checker Loaded**

     *  ^  *
    /◉\_~^~_/◉\
 ⚡/     o     \⚡
   '_        _'
   / '-----' \

Unsafe Rust Checker

When Unsafe is Valid

Use Case Example
FFI Calling C functions
Low-level abstractions Implementing Vec, Arc
Performance Measured bottleneck with safe alternative too slow

NOT valid: Escaping borrow checker without understanding why.

Required Documentation

// SAFETY: <why this is safe>
unsafe { ... }

/// # Safety
/// <caller requirements>
pub unsafe fn dangerous() { ... }

Quick Reference

Operation Safety Requirements
*ptr deref Valid, aligned, initialized
&*ptr + No aliasing violations
transmute Same size, valid bit pattern
extern "C" Correct signature, ABI
static mut Synchronization guaranteed
impl Send/Sync Actually thread-safe

Common Errors

Error Fix
Null pointer deref Check for null before deref
Use after free Ensure lifetime validity
Data race Add proper synchronization
Alignment violation Use #[repr(C)], check alignment
Invalid bit pattern Use MaybeUninit
Missing SAFETY comment Add // SAFETY:

Deprecated → Better

Deprecated Use Instead
mem::uninitialized() MaybeUninit<T>
mem::zeroed() for refs MaybeUninit<T>
Raw pointer arithmetic NonNull<T>, ptr::add
CString::new().unwrap().as_ptr() Store CString first
static mut AtomicT or Mutex
Manual extern bindgen

FFI Crates

Direction Crate
C → Rust bindgen
Rust → C cbindgen
Python PyO3
Node.js napi-rs

Claude knows unsafe Rust. Focus on SAFETY comments and soundness.