あなたの最初のMoveモジュール
Aptosブロックチェーンにより、開発者は設計により安全なMove言語でチューリング完全なスマートコントラクト(「モジュール」と呼ばれる)を書くことができます。スマートコントラクトにより、ユーザーはブロックチェーンでお金を送ることができ、さらに任意のコード、ゲームさえも書くことができます!すべてはAptos CLIでアカウントを作成し、デプロイ(「公開」)されたMoveモジュールを格納することから始まります。
このチュートリアルでは、最小限のAptos環境をセットアップし、Aptosブロックチェーン上でMoveモジュールをコンパイル、テスト、公開、操作する方法をガイドして、Moveモジュールを理解するのに役立ちます。以下のことを学びます:
- 環境のセットアップ、CLIのインストール
- devnetアカウントの作成と資金調達
- Moveモジュールのコンパイルとテスト
- AptosブロックチェーンへのMoveモジュールの公開(または「デプロイ」)
- モジュールとの相互作用
- Aptosでの構築を続ける(次のステップ)
1. セットアップ
Section titled “1. セットアップ”ブロックチェーンへの変更は「トランザクション」と呼ばれ、ネットワーク手数料(「ガス手数料」)を支払うアカウントが必要です。その手数料を支払い、公開されたコントラクトを所有するために、いくらかのAPTを持つアカウントを作成する必要があります。それを行うために、Aptos CLIを使用する必要があります。
-
Aptos CLIをインストール
Aptos CLIをインストール(まだインストールしていない場合)。
-
新しいターミナルを開く
新しいターミナルウィンドウまたはタブを開きます。
-
インストールを確認
aptos --version
を実行してインストールされていることを確認します。Terminal window aptos --versionaptos 4.6.1
のような応答が表示されるはずです。 -
プロジェクトフォルダを作成
以下を実行してこのチュートリアル用の新しいフォルダを作成:
Terminal window mkdir my-first-module -
プロジェクトフォルダに移動
cd my-first-module
を実行して新しいフォルダに移動します。 -
アカウントを初期化
aptos init
を実行し、devnet
上でテストアカウントを作成するためのセットアップの各ステップで「enter」を押します。このような成功メッセージが表示されるはずです:
Terminal window ---Aptos CLI is now set up for account 0x9ec1cfa30b885a5c9d595f32f3381ec16d208734913b587be9e210f60be9f9ba as profile default!{"Result": "Success"}
2. (オプション)オンチェーンで今行ったことを探索
Section titled “2. (オプション)オンチェーンで今行ったことを探索”-
アカウントアドレスをコピー
新しいアカウントのコマンドラインからアドレスをコピーします。
アドレスは
0x9ec1cfa30b885a5c9d595f32f3381ec16d208734913b587be9e210f60be9f9ba
のような形で、以下の行で見つけることができます:Terminal window Aptos CLI is now set up for account 0x9ec1cfa30b885a5c9d595f32f3381ec16d208734913b587be9e210f60be9f9ba as profile default! -
Aptos Explorerを開く
Aptos Explorerにアクセスします。
これは、devnet、testnet、またはmainnetで何が起こっているかを素早くチェックする主要な方法です。後でデプロイされたコントラクトを表示するために使用します。
-
Devnetネットワークにいることを確認
右上角で「Devnet」を探すか、「Mainnet」ドロップダウンをクリックしてDevnetを選択してネットワークを切り替えます。
-
アカウントを検索
新しく作成したアドレスを検索バーに貼り付けます。
-
検索結果を表示
結果が表示されるまで待ち、上位の結果をクリックします。
-
トランザクションを確認
新しく作成されたアカウントと、devnetトークンで資金調達するフォーセット関数のトランザクションが表示されるはずです。
-
残高を確認
「Coins」タブをクリックして、Aptos Coinの1 APTがあることを確認します。これにより、aptos devnet上でスマートコントラクトを公開し、相互作用できるようになります。
3. 最初のモジュールの記述とコンパイル
Section titled “3. 最初のモジュールの記述とコンパイル”環境をセットアップし、アカウントを作成したので、最初のMoveモジュールを記述してコンパイルしましょう。コントラクトが独立して存在するEthereumとは異なり、Moveはすべてをアカウントに結び付けます - モジュールとそのリソースの両方です。コアコンセプトを理解するために、シンプルな例から始めましょう。
Moveモジュールとは?
Section titled “Moveモジュールとは?”Moveモジュールは他のブロックチェーンのスマートコントラクトに似ていますが、いくつかの重要な違いがあります:
- リソース: 状態がコントラクト変数に保存されるSolidityとは異なり、Moveは「リソース」を使用します - 一度に一箇所にしか存在できず、常にアカウントに結び付けられる特別なデータタイプです
- モジュールベース: Solidityのように完全なコントラクトを独立したユニットとしてデプロイするのではなく、Moveコードは境界を越えてリソースを共有し処理できる再利用可能なモジュールに組織化されます。モジュールは一緒にまたは別々に公開できる標準ライブラリパッケージのようなもので、コード組織のより細かい制御を提供します。
- 設計による安全性: Moveの型システムとリソースセマンティクスは、一般的なスマートコントラクトの脆弱性を防ぐのに役立ちます
あなたの最初のMoveモジュール
Section titled “あなたの最初のMoveモジュール”最初のモジュールは、アカウントがメッセージを保存・取得できるシンプルなメッセージストレージシステムになります。my-first-module
フォルダ内に新しいmoveプロジェクトを作成しましょう:
-
プロジェクトを初期化
aptos move init --name my_first_module
で新しいmoveプロジェクトを初期化します。これにより、
sources
ディレクトリとMove.toml
ファイルを含むプロジェクト構造が作成されます。 -
モジュールファイルを作成
モジュールコードで新しいファイル
sources/message.move
を作成:module my_first_module::message {use std::string;use std::signer;struct MessageHolder has key, store, drop {message: string::String,}public entry fun set_message(account: &signer, message: string::String) acquires MessageHolder {let account_addr = signer::address_of(account);if (exists<MessageHolder>(account_addr)) {move_from<MessageHolder>(account_addr);};move_to(account, MessageHolder { message });}public fun get_message(account_addr: address): string::String acquires MessageHolder {assert!(exists<MessageHolder>(account_addr), 0);let message_holder = borrow_global<MessageHolder>(account_addr);message_holder.message}} -
コードを理解する
この簡単なモジュールは以下のことを行います:
- 構造体定義:
MessageHolder
はhas key, store, drop
能力を持つリソースですkey
: グローバルストレージに保存できるstore
: 他の構造体内に保存できるdrop
: 削除できる
- set_message関数: アカウントにメッセージを保存(既存のものがあれば置換)
- get_message関数: アカウントからメッセージを読み取り
- 構造体定義:
-
モジュールをコンパイル
プロジェクトディレクトリで以下を実行:
Terminal window aptos move compile成功すると、コンパイル結果が表示されます:
Terminal window Compiling, may take a little while to download git dependencies...INCLUDING DEPENDENCY AptosFrameworkINCLUDING DEPENDENCY AptosStdlibINCLUDING DEPENDENCY MoveStdlibBUILDING my_first_module{"Result": ["9ec1cfa30b885a5c9d595f32f3381ec16d208734913b587be9e210f60be9f9ba::message"]}
4. モジュールのテスト
Section titled “4. モジュールのテスト”Moveにはテストを書くための組み込みサポートがあります。モジュールをデプロイする前にテストしましょう:
-
テストファイルを作成
sources/message_test.move
を作成:#[test_only]module my_first_module::message_tests {use std::string;use my_first_module::message;#[test(account = @0x1)]public fun test_set_and_get_message(account: &signer) {let message_text = string::utf8(b"Hello, Aptos!");message::set_message(account, message_text);let stored_message = message::get_message(@0x1);assert!(stored_message == string::utf8(b"Hello, Aptos!"), 0);}} -
テストを実行
Terminal window aptos move testテストが通れば、以下のような出力が表示されます:
Terminal window Running Move unit tests[ PASS ] 0x9ec1cfa30b885a5c9d595f32f3381ec16d208734913b587be9e210f60be9f9ba::message_tests::test_set_and_get_messageTest result: OK. Total tests: 1; passed: 1; failed: 0
5. モジュールの公開
Section titled “5. モジュールの公開”テストが通ったので、モジュールをdevnetに公開しましょう:
-
モジュールを公開
Terminal window aptos move publish -
公開を確認
プロンプトで「yes」と入力して公開を確認します。
成功すると、トランザクションハッシュが表示されます:
Terminal window package size 1755 bytesDo you want to submit a transaction for a range of [600 - 900] Octas at a gas unit price of 100 Octas? [yes/no] >yes{"Result": {"transaction_hash": "0x64b9e3bd21c5b3ca1cab0e1b10dc06c0add1d2f7bfcf0b4ce1de3c1b7c3e8dc8","gas_used": 721,"gas_unit_price": 100,"sender": "9ec1cfa30b885a5c9d595f32f3381ec16d208734913b587be9e210f60be9f9ba","success": true,"version": 502312001,"vm_status": "Executed successfully"}}
6. モジュールとの相互作用
Section titled “6. モジュールとの相互作用”モジュールが公開されたので、相互作用してみましょう:
-
メッセージを設定
Terminal window aptos move run --function-id default::message::set_message --args string:"Hello from my first module!" -
メッセージを取得
Terminal window aptos move view --function-id default::message::get_message --args address:your_account_addressあなたのアカウントアドレスを実際のアドレスに置き換えてください。
-
Explorerで確認
Aptos Explorerでアカウントアドレスを検索し、「Resources」タブでMessageHolderリソースを確認できます。
次のステップ
Section titled “次のステップ”おめでとうございます!あなたは最初のMoveモジュールを正常に作成、テスト、公開、相互作用しました。次に以下を試してみてください:
- Move Book - Moveプログラミング言語の詳細を学ぶ
- エンドツーエンドdApp構築 - フロントエンドでモジュールを統合
- Aptos標準 - より高度なMoveパターンとベストプラクティスを探索
Move開発の旅を楽しんでください!