初心者による初心者のためのInternet Computerチュートリアル備忘録その3「Pass text arguments」
プログラミング(C#)歴半年の私でりおてんちょーが、Internet Computerチュートリアルを進めていく上で
- 分かりづらかったところ
- めっちゃ調べたところ
などを、備忘録としてこちらにまとめていきます。
【目次】
Internet Computerチュートリアル備忘録その1「Explore the default project」
Internet Computerチュートリアル備忘録その2「Query using an actor」
Internet Computerチュートリアル備忘録その3「Pass text arguments」
Internet Computerチュートリアル備忘録その4「Increment a natural number」
Internet Computerチュートリアル備忘録その5「Use integers in calculator functions」
Internet Computerチュートリアル備忘録その6「Import library modules」
Internet Computerチュートリアル備忘録その7「Use multiple actors」
Internet Computerチュートリアル備忘録その8「Customize the front-end」
Internet Computerチュートリアル備忘録その9「Add a stylesheet」
Internet Computerチュートリアル備忘録その10「Make inter-canister calls」
Internet Computerチュートリアル備忘録その12「Add access control with identities」
Internet Computerチュートリアル備忘録その13「Accept cycles from a wallet」
Internet Computerチュートリアルが終わったらやること1「examplesを動かして遊ぶ」
今回は、3つ目のチュートリアル「Pass text arguments」についてです。
これからInternet Computerチュートリアルを始める方に、少しでも役立てていただけると幸いです。
また、この記事ではMacでの作業となりますこと、あらかじめご了承ください。
新しいプロジェクトを作成する
1. ターミナルシェルをまだ開いていない場合は、ローカルコンピューターで開きます。
まずはターミナルを開きます。
2. 別の作業フォルダーを使用している場合は、インターネットコンピュータープロジェクトに使用しているフォルダーに移動します。
クイックスタートで「ic-projects」というフォルダを作り、私はそこにまとめるようにしたので、『cd ic-projects』で移動します。
ちなみに『pwd』コマンドで、現在の場所が確認できますよ。(pwd:print working directoryの略)
3. 『dfx new location_hello』のコマンドを実行して、新しいプロジェクトを作成します。
この呪文で∞マークっぽいのが表示されれば、プロジェクトの作成成功です。
4. 『cd location_hello』のコマンドを実行して、プロジェクトディレクトリに移動しておきます。
デフォルト設定を変更する
1つ目のチュートリアルでは、「デフォルト設定を確認する」だけでしたが、今回も2つ目と同じく変更を加えていきます。
1. dfx.json構成ファイルをテキストエディターで開きます。
- Xcode
- Visual Studio (code)
- テキストエディット
のどれかで開きます。
2. location_helloプロジェクトのデフォルト設定を確認してください。
そろそろデフォルト設定も見慣れてきた頃ではないでしょうか。
3.不要な構成設定をすべて削除します。
この「location_hello_assets」部分が今回も不要なので、ざっくり消してあげましょう。
[ , ]や[ } ]の帳尻が合わないとエラーになるので、よく確認してから消しましょう。
4. 変更を保存し、ファイルを閉じて続行します。
「command + S」で保存して終了しましょう。
デフォルトのプログラムを変更する
1. ソースコードファイル「src/location_hello/main.mo」をテキストエディタで開きます。
Finderから、「ic-projects → location_hello → src → location_hello → main.mo」で開きます。
2. デフォルトのソースコードを変更して、greet関数をlocation関数に置き換え、name引数をcity引数に置き換えます。
関数名と引数名を変更するだけで、処理の中身自体は変更していませんね。
どこを変えればよいかイマイチ分からなければ、とりあえず全部消してから、これを全部コピペしておきましょう。
3. 変更を保存してmain.moファイルを閉じます。
「command + S」で保存して終了しましょう。
ローカルネットワークを開始します
『dfx start --background』のコマンドを実行して、ローカルコンピューターでインターネットコンピューターネットワークを起動しましょう。
--backgroundオプションを使うことで、ローカルコンピューターで別のターミナルシェルを開かずに済みますよ。
アプリケーションを登録、ビルド、およびデプロイする
1. 必要に応じて、プロジェクトのルートディレクトリにいることを確認してください。
「location_hello」にいることを確認しましょう。
2. 『dfx deploy』のコマンドを実行して、アプリケーションを登録、ビルド、およびデプロイします。
テキスト引数を渡す
1. プログラムでlocationメソッドを呼び出し、『dfx canister call location_hello location "San Francisco"』のコマンドを実行して、テキスト型のcity引数を渡します。
『dfx canister call』までは呼び出す呪文で、その後に
- キャニスターまたはアプリケーションサービスの名
- 呼び出したい特定のメソッドまたは関数
- 関数に渡す引数
を打ち込んでいきます。
3の引数を○○にしてあげることで、返ってくる文章が
("Hello, ○○!")になりますよ。
プログラムのソースコードを修正する
複数の都市名を返すように、location関数を変更してみましょう。
1. テキストエディターでdfx.json構成ファイルを開き、デフォルトのlocation_hello設定をfavorite_citiesに変更します。
2. 変更を保存し、dfx.jsonファイルを閉じて続行します。
「command + S」で保存して終了しましょう。
3. 『cp -r src/location_hello src/favorite_cities』のコマンドを実行して、location_helloソースファイルディレクトリをdfx.json構成ファイルで指定された名前と一致するようにコピーします。
『cp −r A /B/』 コマンドで、「Aというディレクトリとその中身を絶対パスで/B/にそっくりコピーする」という意味になります。
ここでは、「src/location_hello」ディレクトリ・及びその中身を、「src/favorite_cities」として新たにコピーして生み出しなさい!という命令になります。
4. 「src/favorite_cities/main.mo」ファイルをテキストエディタで開きます。
3の命令で新しく「favorite_cities」ディレクトリが生成されているので、ここから「main.mo」ファイルを開きます。
5. 「src/favorite_cities/main.mo」ファイルをテキストエディタで開きます。
6. 次のコードサンプルをコピーして貼り付け、location関数を2つの新しい関数に置き換えます。
「2つの新しい関数」というのは、funcで表されている
- location
- location_pretty
のことです。
今回の引数は[Text]となっていますが、[]は配列を表すものです。
配列が気になる方はググってみてください。
簡単にいうと、一つの変数の中に複数の値を入れられる箱みたいなものです。
6. 『dfx deploy』のコマンドを実行して、アプリケーションを登録、ビルド、およびデプロイします。
コードを変更したら、デプロイしてあげる必要があります。
もしデプロイできないようであれば、ローカルネットワークに接続されている状態か確認してみてください。
7. プログラムでlocationメソッドを呼び出し、『dfx canister call favorite_cities location '(vec {"San Francisco";"Paris";"Rome"})'』のコマンドを実行して、Candidインターフェイス記述構文を使用してcity引数を渡します。
Candidインターフェース記述言語の詳細については、Candid言語ガイドを参照してください。(私はまだ読めていない&理解してません。。)
7. location_prettyプログラムでメソッドを呼び出し、city次のコマンドを実行して、インターフェイス記述構文を使用して引数を渡します。
チュートリアル通りに結果が表示されたら成功です!
今回はチュートリアルのコードをコピペしているので、デプロイ・コピペミス等で失敗していなければ、同じ結果になると思います!
ブラウザで機能をテストする
Webインターフェイスを使用して、canister機能をテストすることも可能なのです!(テストしながらGUI?も確認できるみたいなことです)
1. 『dfx canister id __Candid_UI』コマンドを使用して、現在のプロジェクトに関連付けられているCandidUIキャニスター識別子を見つけます。
「この機能を使いたければIDを渡せ」とのことなので、上のコマンドでIDを確認します。
2. クリップボードで使用できるように、CandidUIキャニスターIDをコピーします。
どこかにメモっておきましょう。
多分、「r7inp-6aaaa-aaaaa-aaabq-cai」になると思います。
3. インターネットコンピュータを停止した場合は、『dfx start --background』のコマンドを実行してローカルで再起動します。
停止していなければ読み飛ばしましょう。
4. ブラウザを開き、dfx.json構成ファイルで指定されているアドレスとポート番号に移動します。デフォルトでは、localネットワークは127.0.0.1:8000アドレスとポート番号にバインドされます。
これのことです。
確認したところデフォルトでは「127.0.0.1:8000」なので、チュートリアルの通りに進めていきましょう。
5. 必要なcanisterIdパラメーターと、『dfx canister id』コマンドによって返されるCandidUIキャニスターIDをURLに追加します。
2と4で確認したものを使うと以下『』になるので、これをブラウザのURL記入欄に打ち込んで検索します。
『http://127.0.0.1:8000/?canisterId=r7inp-6aaaa-aaaaa-aaabq-cai』
(※ローカルネットワークと接続していないと開けません。『dfx start』のやつですね。)
するとこんな画面が出てきます。
しかし、この「Provide a canister ID」が分からない状態です。
チュートリアルでは
「使用するキャニスターIDがわからない場合は、dfx canister idコマンドを実行して、特定のキャニスター名のIDを検索できます。」
と書いてありますが、『dfx canister id』と打ってもエラーが表示されます。
これに関しては私の頭では理解できなかったので、もし分かる方はいらっしゃればそっと教えていただけますと幸いです、、
追記:『dfx canister id ○○』と打てばidが表示されるみたいです。
「Customize the front-end」のチュートリアルに書いてありました。
「きたあああああぁぁぁああぁぁぁあ!!!!!」のところまで読み飛ばしてください。
で、いろいろ試してみた結果、『dfx deploy 』したときの返り値に、この「Provide a canister ID」が書かれていることを発見!
こいつだ。おそらくこいつが犯人に違いない。
いけぇぇぇぇぇえええええええぇえ
きたあああああぁぁぁああぁぁぁあ!!!!!
ということで、無事にCandid UI画面まで辿り着けました。
あとは、最初のミッションを思い出してください。
「複数の都市名を返すように、location関数を変更してみましょう。」
この「len」と書かれている欄は、配列の長さlengthを入力するところです。
チュートリアルの通り、3を入力してTextに都市名を入力して『CALL』を押すと、3つの都市名を返してくれるでしょう。
ローカルネットワークを停止します
テストができたら、最後にローカルネットワークを止めておきましょう。
ターミナルが現在稼働中であれば「Control-C」を押して、「%」が表示される状態にします。
最後に『dfx stop』コマンドを入力すれば、3つ目のチュートリアルは終了です。お疲れ様でした。
思っていた以上に多くの反響をいただき、大変ありがたい次第です。よければHiÐΞやTwitterのフォローお願い致します!
需要がありそうであれば、他のチュートリアルも備忘録を残していきますので、何かしらアクションいただけると大変励みになりますし嬉しいです!
次はこちら(↓)をどうぞ
初心者による初心者のためのInternet Computerチュートリアル備忘録その4「Increment a natural number」