Motoko プログラミング入門: Candid UI を使ってキャニスターを実行する
Dec 29, 2021このページは、DFINITY(Internet Computer) の Motoko のチュートリアルを日本語で解説しています。
実際に使ったソースコードはGitHubからダウンロードできます。
はじめての方は先にこちらをご覧ください。
実行環境
- dfx: 0.8.4
- macOS: 11.5.2
- npm version: 8.1.3
- 任意のターミナル
- 任意のテキストエディタ
ターミナルとテキストエディタは好きなソフトウェアを使えば大丈夫です。
はじめは Mac 標準のターミナルでよいと思います。テキストエディタは筆者は Visual Studio Code を使っています。
手順
プロジェクトの作成
新しいプロジェクトを作ります。
dfx new my_counter
cd my_counterソースファイル名の変更
今回はmain.moというソースファイルの名前を変えます。
dfx.jsonの以下の行を変更します。
変更前
"main": "src/my_counter/main.mo",
変更後
"main": "src/my_counter/increment_counter.mo",そして以下のコマンドでファイル名を変更します。
mv src/my_counter/main.mo src/my_counter/increment_counter.moコーディング
src/my_counter/increment_counter.moを以下のように編集して保存します。
// Create a simple Counter actor.
actor Counter {
stable var currentValue : Nat = 0;
// Increment the counter with the increment function.
public func increment() : async () {
currentValue += 1;
};
// Read the counter value with a get function.
public query func get() : async Nat {
currentValue
};
// Write an arbitrary value with a set function.
public func set(n: Nat) : async () {
currentValue := n;
};
}Counterという actor に 3 つの関数を定義しています。
incrementgetset
incrementはcurrentValueを+1 します。
起動
以下のどちらかのコマンドでローカル PC で実行環境を起動します。
dfx startオプションをつけない場合、Ctrl+C で IC を停止するまで他のコマンドを実行できません。 そのため別のターミナルウィンドウで他のコマンドを実行する必要があります。
dfx start --background--backgroundをつけると起動後も同じウィンドウで他のコマンドを実行できます。
ビルド&デプロイ
以下のコマンドでビルド&デプロイを実行します。
dfx deploydfx deployでは以下の 3 つの処理を一気に実行できます。
dfx canister createdfx builddfx canister install
コンパイルされていなければコンパイルしてからデプロイをしてくれます。
my_counter % dfx deploy
Creating a wallet canister on the local network.
The wallet canister on the "local" network for user "default" is "rwlgt-iiaaa-aaaaa-aaaaa-cai"
Deploying all canisters.
<中略>
Committing batch.
Deployed canisters.実行
get increment set の 3 つの関数を使って実行します。
dfx canister call my_counter get出力
(0 : nat)初期値は 0 です。
incrementを実行してキャニスターが持つcurrentValueを+1 します。
dfx canister call my_counter incrementdfx canister call my_counter get出力
(1 : nat)結果が 1 になっています。
setを使って(987)を設定します。
dfx canister call my_counter set '(987)'
dfx canister call my_counter getincrementで+1 します。
dfx canister call my_counter increment
dfx canister call my_counter getcurrentValueは 988 になっています。
ブラウザから実行 (Candid UI)
このプロジェクトには、Candid UI というテスト用のキャニスターがデプロイされています。 Candid UI のキャニスター ID を確認してみましょう。
dfx canister id __Candid_UIr7inp-6aaaa-aaaaa-aaabq-caiローカル IC にデプロイされたキャニスターの一覧は以下のファイルに保存されています。 上のコマンドで表示された__Candid_UI というキャニスターもあります。
my_counter % cat .dfx/local/canister_ids.json
{
"__Candid_UI": {
"local": "r7inp-6aaaa-aaaaa-aaabq-cai"
},
"my_counter": {
"local": "rrkah-fqaaa-aaaaa-aaaaq-cai"
},
"my_counter_assets": {
"local": "ryjl3-tyaaa-aaaaa-aaaba-cai"
}
}もし、dfx stop で IC を停止していたら起動しましょう。
dfx start --backgroundブラウザを使って以下の URL にアクセスします。
http://127.0.0.1:8000/?canisterId=<CANDID-UI-CANISTER-IDENTIFIER>自分の環境の__Candid_UI のキャニスター ID に置き換えます。
http://127.0.0.1:8000/?canisterId=r7inp-6aaaa-aaaaa-aaabq-caimy_counter % dfx canister id my_counter
rrkah-fqaaa-aaaaa-aaaaq-cai以下のように Canister ID を入力する画面が表示されるはずです。
ここに my_counter のキャニスター ID を入力します。
キャニスター ID はさっき確認した.dfx/local/canister_ids.jsonにも書かれていますが、以下のコマンドでも表示できます。
my_counter % dfx canister id my_counterrrkah-fqaaa-aaaaa-aaaaq-caiこの ID をブラウザのフォームのProvide a canister ID:に入力します。
QUERY, CALL, RANDOM をクリックして自由に試してみましょう!
ローカル実行環境の停止
終わったらローカル PC 上の実行環境を停止します。
dfx stop