rust-macros について
Rustの宣言的マクロ`macro_rules!`と手続き型マクロを学び、利用する開発者向けのスキルです。例、フラグメント指定子、展開ツール、トラブルシューティングを含みます。
主な機能
- 01宣言的マクロの例
- 02手続き型マクロのパターン
- 03フラグメント指定子のリファレンス
- 04cargo expandによるマクロ展開
- 05衛生性と定義順序のトラブルシューティング
活用シーン
- 01再利用可能なRust macro_rules!ヘルパーの作成
- 02derive手続き型マクロの構築
- 03デバッグ時のマクロ展開確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pluginagentmarketplace/ custom-plugin-rust --skill rust-macrosインストール後、Claude Code で/rust-macrosを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/config.yamlmacro-example.rsschema.jsonreferences/GUIDE.mdPATTERNS.mdscripts/validate.py詳細
Rust マクロスキル
Rust のマクロシステムをマスターしましょう。宣言的マクロ(macro_rules!)と手続き型マクロを学びます。
クイックスタート
宣言的マクロ
macro_rules! vec_of_strings {
($($x:expr),* $(,)?) => {
vec![$($x.to_string()),*]
};
}
let v = vec_of_strings!["a", "b", "c"];
フラグメント指定子
| 指定子 | 一致するもの |
|---|---|
ident | 識別子 |
expr | 式 |
ty | 型 |
pat | パターン |
tt | トークンツリー |
literal | リテラル |
繰り返し
macro_rules! hashmap {
($($key:expr => $value:expr),* $(,)?) => {{
let mut map = std::collections::HashMap::new();
$(map.insert($key, $value);)*
map
}};
}
let m = hashmap! { "one" => 1, "two" => 2 };
手続き型マクロ
[lib]
proc-macro = true
[dependencies]
syn = { version = "2", features = ["full"] }
quote = "1"
Derive マクロ
use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, DeriveInput};
#[proc_macro_derive(HelloMacro)]
pub fn hello_derive(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
let name = input.ident;
quote! {
impl HelloMacro for #name {
fn hello() {
println!("Hello from {}!", stringify!(#name));
}
}
}.into()
}
デバッグ
cargo expand # Expand all macros
cargo expand main # Expand specific
トラブルシューティング
| 問題 | 解決策 |
|---|---|
| 衛生性の問題 | $crate:: を使用します |
| 順序が重要 | 使用する前に定義します |
リソース
コメント
Markdown 対応