sui-move について
Sui Move 開発者向けのリファレンススキルです。言語の基礎、イベント、コインをタスク別に整理し、リソース安全性やよくある誤りも扱います。
主な機能
- 01Move の型、能力、リソース安全性
- 02イベントとコイン操作のガイド
- 03タスクに応じた資料の案内
- 04よくある誤りと安全規則
活用シーン
- 01Move モジュールや構造体の作成
- 02代替可能トークンの作成とイベント処理
- 03アクセス制御やオブジェクト破棄の確認
MCP 対応
利用可能な環境では、Sui ドキュメント MCP サーバーに問い合わせて回答を検証し、資料にない詳細を補えます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mystenlabs/ skills --skill sui-moveインストール後、Claude Code で/sui-moveを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
events-coins.mdmove.mdevals/code-evals.jsonevals.json詳細
Sui Move
MCP ツール: お使いの環境で利用できる場合は、最新情報の回答を得るために Sui ドキュメントの MCP サーバー(
https://sui.mcp.kapa.ai)にも問い合わせてください。回答の検証や、これらのリファレンスファイルに記載されていない詳細の確認に利用してください。
情報源の制約: このスキルの情報は、docs.sui.io と move-book.com のみを情報源としています。このスキルを拡張または更新する場合は、これらの情報源のみを使用してください。サードパーティのブログ、チュートリアル、非公式ドキュメントは使用しないでください。
Move は Sui のスマートコントラクト言語で、リソースの安全性とオブジェクト中心のデータモデルを基盤に設計されています。このスキルでは、型システム、能力、リソースの安全性、イベント、コインといった Move 言語の基本を扱います。
このスキルから、目的に応じたリファレンスファイルに移動できます。現在のタスクに関連するものだけを読み込んでください。
リファレンスファイル(このスキル)
move — Move 言語の基礎
パス: move.md
読み込むタイミング: Move コードの記述、能力、TxContext、時刻/Clock、init 関数、One-Time Witness、internal::Permit<T>、type_name の非推奨化、パッケージ、モジュール、構造体、リソースの安全性、アクセス制御のパターン、管理者の交代、拒否リスト、セキュリティレビュー、または高度な設計パターン(能力の割り当て、ファントムイベント、共有オブジェクトの並行処理、レシーバー構文、エラー属性、transfer::receive、フィールドのプライバシー、マクロ)を扱う場合。
内容: 4 つの能力と一般的な組み合わせ、TxContext のメソッド、Clock オブジェクト、init 関数、OTW パターン、型レベルの認可を行う internal::Permit<T>、type_name の非推奨化、パッケージとアップグレード、モジュール、構造体、リソースの安全性とオブジェクトの破棄、Greeting の実例、管理者の交代(2 段階の移譲)、規制対象のコインと拒否リスト、セキュリティレビューのチェックリスト、高度な設計パターン(能力の割り当て、ファントム型イベント、イベントの非正規化、共有オブジェクトの & と &mut、レシーバー構文の順序、#[error] 定数、transfer::receive のプライバシー、フィールドのプライバシー、マクロでの注意点)。
events-coins — イベントとコイン
パス: events-coins.md
読み込むタイミング: イベントの発行、オフチェーンでのイベントの購読、代替性トークンの作成、またはコイン操作(ミント、バーン、分割、結合)を扱う場合。
内容: イベントの発行、イベント構造体の要件、coin::create_currency、TreasuryCap、CoinMetadata、標準的なコイン操作。
関連スキル(別のスキルディレクトリから読み込み)
| トピック | スキル | 読み込むタイミング |
|---|---|---|
| オブジェクトモデル、所有権、動的フィールド、コレクション、Display、転送パターン | object-model/ | データモデルの設計、所有権の種類の選択、動的フィールドまたはコレクションの使用、Object Display の設定 |
| プログラマブルトランザクションブロック、コマンド、二重実行 | ptbs/ | PTB の構築、トランザクションの合成、スポンサー付きトランザクション、トランザクションエラーのトラブルシューティング |
| フロントエンドの dApp 開発、dApp Kit、ウォレット接続 | frontend-apps/ | React/Vue フロントエンドの構築、ウォレット連携、ブラウザーからのオンチェーン状態の照会 |
| プロジェクトのセットアップ、Move.toml、依存関係、公開 | sui-move-project/ | Move プロジェクトの作成、Move.toml の設定、ビルドエラーの解決、パッケージの公開 |
| Move 2024 の構文、メソッド構文、マクロ | modern-move-syntax/ | メソッド構文、ベクターリテラル、option/loop マクロなどの Move 2024 エディション機能の使用 |
| 合成可能な関数の設計 | composable-move-functions/ | PTB の合成可能性を考慮した関数の設計、パラメーターの順序、戻り値のパターン |
| ユニットテストの規約 | move-unit-testing/ | Move のユニットテストの作成、テストパターン、expected_failure、クリーンアップ |
| 命名規約 | naming-conventions/ | エラー、定数、ケイパビリティ、イベント、ゲッター、動的フィールドキーの命名 |
ルーティングガイド
| タスク | 読み込むもの |
|---|---|
| abilities を持つ Move struct の作成 | move |
| TxContext または Clock オブジェクトの使用 | move |
| init 関数または OTW の作成 | move |
type_name 関数の使用 | move |
internal::Permit<T> によるモジュール権限の証明 | move |
| パッケージの公開またはアップグレード | move |
| drop なしでのオブジェクトの破棄 | move |
| イベントの発行または購読 | events-coins |
| 代替可能トークンの作成 | move + events-coins |
| オブジェクトのデータモデルの設計 | object-model/ スキル |
| shared オブジェクトと owned オブジェクトの選択 | object-model/ スキル |
| dynamic fields またはコレクションの使用 | object-model/ スキル |
| Object Display のセットアップ | object-model/ スキル |
| PTB の構築 | ptbs/ スキル |
| スポンサードトランザクションの実装 | ptbs/ スキル |
| フロントエンドの構築 | frontend-apps/ スキル |
| Move.toml のセットアップ | sui-move-project/ スキル |
| スマートコントラクト全体の作成 | move + events-coins + object-model/ + naming-conventions/ + modern-move-syntax/ |
| コードレビュー | move + events-coins + composable-move-functions/ + naming-conventions/ + modern-move-syntax/ |
| セキュリティレビュー/アクセス制御監査 | move + object-model/(パターン)+ events-coins |
| 高度な設計パターン/パフォーマンスチューニング | move |
ルール
- UID の作成には、必ず
object::new(ctx)を使用してください。他に方法はありません。 - オブジェクトが
storeを持ち、呼び出し元が定義元モジュールの外部である場合は、transferではなくpublic_transferを使用してください。 - イベントの struct は
copyとdropの abilities を持つ必要があります。 - 数値型に
asキャストを使用しないでください。from/intoまたはtry_from/try_intoを使用してください。 dropなしでオブジェクトを破棄するには、struct をアンパックし、UID に対してobject::delete(id)を呼び出してください。
よくある間違い
transferとpublic_transferを混同する。 非公開のほうは定義元モジュール内でのみ動作します。別のモジュールから呼び出すと、コンパイルエラーになります。- UID の削除を忘れる。 オブジェクトを破棄するときは、UID フィールドに対して
object::delete(id)を呼び出す必要があります。 ctx.epoch_timestamp_ms()が正確だと思い込む。 これはエポックの開始時刻を返します。リアルタイムのタイムスタンプには Clock オブジェクト(0x6)を使用してください。