🧟‍♂️

【solidity初心者向け】CryptoZombiesをもっと丁寧に解説!(レッスン1-1, 1-2)

2022/04/12に公開

solidityを始めた時、多くの場合は「CryptoZombies」から入ることでしょう。

だいたい「solidity 初心者」とググっても、「クリプトゾンビやりましょう」みたいなコメントが溢れている。

しかし、エンジニア経験の無い方が一人でやってみると、結構難しい
質問も結構見かける。

なんで難しいか?

それは解説が難しいからである。
エンジニアならサクッと読んで理解できるだろうが、初心者にはなれない言葉も結構並んでいる。
しかも英語を直訳したような表現もいくつかある。

そこで、おそらく日本で始めて、CryptoZombiesの解説記事を作成してみた
初心者向けの学習サイトを解説するというのもなかなか珍しい。w

この記事の対象者

この記事の対象は以下のような方である。

  • solidityを始めてみたけど、CryptoZombies難しい
  • なんとなく分かったが、ちゃんと理解できてない部分もある

あくまで理解がなかなか追いついていない人向けの記事だということを理解いただきたい。

解説するチャプター

今回解説するのは、レッスン1のチャプター1とチャプター2である。

▼ チャプター1のURL
https://cryptozombies.io/jp/lesson/1/chapter/1

この記事で得られること

この記事ではざっくりと以下のことが学べる。

  • CryptoZombiesで何が学べるのか
  • contractとは何か
  • pragmaとは何か

それではさっそくやっていこう。


チャプター 1: レッスンの概要

CryptoZombiesは、ゾンビ兵士のデータを作成して、作成したゾンビ同士で戦わせるプログラムを作成するものである。
レッスン1ではゾンビのデータ構造を作成することができればOK。

ゾンビは以下のような16桁の番号(ゾンビDNA)を持っていて、そのDNAによって見た目が変化するという仕様になっている。

8356281049284737

これは運営側が決めた設定なので、「なんで16桁なの?」「ほかのプログラムにもゾンビDNAが必要ですか?」などは考えなくて大丈夫。

CryptoZombiesが完了したら忘れてもらってOK


チャプター 2: コントラクト

チャプター2からはいよいよsolidityのコードを書いていく。

先にこのチャプターでの答えを載せておくので、参考にして頂きたい。

pragma solidity ^0.4.19;

contract ZombieFactory {
}

✅ pragmaとは

pragmaは他の言語やHTTPのヘッダーでも使用されることがあるが、コンパイラのバージョンを宣言するものだという認識で問題ない。
(コンパイラとは、私たちが書いたsolidityのコードをコンピューターが理解できるように変換してくれるプログラムのことである。)

とにかく、これは絶対に書かないといけない。

pragma solidity ^0.4.19;

✅ pragmaの書き方はいくつかある

ここでは出てこないが、今後pragmaの宣言方法はいくつか目にすることになると思うので、ここで説明しておく。
初心者はとりあえず覚えなくて大丈夫だが、「なんかそんなことも言ってたな」と頭に入れておいてほしい。

案外すぐにその時が訪れるでしょう。

  1. ^をつけて単体を指定

基本的にはこの書き方で大丈夫だと思う
ドキュメントを読むと、^を付けることで、勝手にバージョンの上がったコンパイラが使用されるのを防いでくれるらしい。

pragma solidity ^0.4.19;
  1. 範囲を指定

0.4.0以上、0.6.0未満の範囲のコンパイラは使用可能、それ以外でコンパイルする場合にはエラーとなる。

pragma solidity >=0.4.0 <0.6.0;

(番外編)

番外編として、このような書き方をすることも見かける。
// SPDX-...と書かれている最初のこの1行は何なのか?

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.0 <0.9.0;

vscodeでsolidityプラグインを入れて開発した場合、このコメントが無いと以下のようなAlertが表示される。

SPDXのライセンスIDがソースファイルで提供されていない。公開する前に、"SPDX-License-Identifier." を含むコメントを追加することを検討してください。"SPDX-License" というコメントを各ソースファイルに追加してください。SPDX-License-Identifierを使用してください。オープンソースでないコードには、"UNLICENSED "を使用してください。詳しくは、https://spdx.org をご覧ください。

要は「使ってるライセンスをしっかり示せ」ってことかな?
もうちょっと深掘りしたい人はこの記事がいいかも。
私はアラートが気になるので、入れているが、ここの挙動については検証していないので分かる方に教えていただきたい。。

https://note.com/standenglish/n/n503f50d3c339

✅ コントラクトについて

他のプログラミング言語を触ったことがある人にはclassのようなもの。で通じるはず。

基本的には1ファイル1コントラクトで考えておけばいいのでは無いかと思う。
もちろん、実装パターンによって例外はあるが、CryptoZombiesではこれで大丈夫。

コントラクトとは、変数や関数を全てまとめた箱のようなものであり、この中に処理を書いていくこととなる。

オブジェクト指向の基本であるので、この考え方がどうしても分からないなら、JavaScriptなど他の言語から始めた方がいい場合もある。

このレッスンでは、ZombieFactoryというコントラクトを作成していく。

contract ZombieFactory {
  // この中に変数や関数の処理を書いていく
}

まとめ

今回は

  • pragmaの書き方
  • contractの書き方

を紹介しました。
いかがだったでしょうか?

また、間違っていたり追加した方がいいことがあったらコメントをして頂きたいです!
皆さんにより良い情報を届けたいので、間違ったものは修正します。

それでは引き続き解説出すので、そちらも参考にしてください!!

Discussion