Ethereumをどんな感じで学んでいるか

この内容は Ethereum Advent Calendar 2022の11日目の記事です

# Ethereumをどんな感じで学んでいるか
自分は今年の9月にWeb3に興味を持って勉強を始めました。[Web3 Dev Advent Calendar](https://qiita.com/binnmti/items/a4b5fb8ae8597a9e207d) でも記事を書きました。Web3の本を読んでWeb3を知って、Web3で何か作ってみたいと思い、自分はプログラマなのでスマートコントラクトを書きたいと思いました。そこで次はEthereum Advent Calendarでイーサリアムをどんな感じで学んだについて書きます。ちなみに残念ながらまだスマートコントラクトは書けてないです。

# Ethereum関係で買った本について
最初自分は[テクノロジーが予測する未来　web3、メタバース、NFTで世界はこうなる](https://amzn.to/3FfB2qc)を読んで、Web3を知ったので、次にもう少し具体的な技術本を買うことにしました。やりたいことはスマートコントラクトだったので、本屋にスマートコントラクトの本を探しに行ったのですが、実際に流し見するとブロックチェーンかスマートコントラクトかイーサリアム系の本であれば、どれも似たような感じでした。自分は[ブロックチェーンアプリケーション開発の教科書](https://amzn.to/3FBz57J) が良さげだったのでこれを買いました。

# Ethereum関係のWEBサイトの写経
また本はコードより知識が多そうだったので、合わせてWEBサイトも読みました。色々見ましたが、結果的には[Ethereum入門](https://book.ethereum-jp.net/)が一番まとまっておりかつ実践的だったかなと思います。内容を読むだけだったら早ければ一日ぐらいで読めるぐらいの内容量ですが、実際に書かれている内容を試しながら進めるとそれなりに時間はかかると思います。個人的には本とサイトの同時進行は結構良かったと思います。相互に理解を深める感じで学べました。

# Ethereumを買ってみた
イーサリアムの把握にはイーサリアムを買ってみるのが一番です。最初に10月ぐらいに買ったときは1Eth20万円前後ぐらいでした。ここ3ヶ月はそれぐらいで若干下がり傾向だと思います。1年で見ると1月の時点では40万円ぐらいだったので、やはり変動は激しいかなと思います。値動きが大きい時に理由が分かるぐらいにはニュースは軽く見ている感じです。定期で見ているニュースはないです。自分はDMMBitcoinでイーサリアムを買いました。0.001Ethみたいに少数で100円単位ぐらいで帰るので1Ethも買ってないです。0.1Ethでないと送金出来ないサービスもあるので、それぐらいから始めてみるのが良いかもしれません。

# EthereumでNFTを買ってみた
またNFTも1つだけ買ってみました。NFTはNFT自体が発行権みたいな扱いになってコミュニティ参加とセットになっているケースも多く、それ込みで魅力的なモノを選ぶのがトレンドに思いました。ただ正直Discordに参加してチャットで情報交換は全く惹かれなかったので、コミュニティがゆるそうでかつ値段がお手頃だった[marimo NFT](https://marimo.life/ja)を買いました。0.02Ethだったので4000円ぐらい？コミュニティには最初にちょっとツイートしたぐらいでその後は特に何もしてないですが、空気感を掴む投資としてはちょうど良かったと思っています。

# Ethereumを本や日本語で学ぶのは現段階では中級レベルすら怪しい
で、実は3カ月たった今でもまだ学んでいる途中です。本は今日の段階で90%以上は読んでいるので今週中には読み終わりそうですが、思ったよりは知識の話が多くコードの話は少な目でした。ただブロックチェーンの根本は大分分かってきたので、次はスマートコントラクトの本を買おうかと思いましたが、これも本屋を見に行った感じだと、今の自分の知識ですらこれ以上詳しく書かれた本はもう5冊ない状態でした。もちろんこれから書かれる良書も増えてくるかもしれませんが、現段階では本で深く学んでいくのは難し気です。日本語サイトもそのレベルが多いかなと思います。英語サイトは残念ながらあまり見てないですが、[CryptoZombies](https://cryptozombies.io/jp/)というゲーミングにEthereumを学ぶサイトは結構良かったです。

# Solidityについてコードを書きながら学ぶ
Ethereumでスマートコントラクトを開発するなら言語は[Solidity](https://solidity-jp.readthedocs.io/ja/latest/)です。本やサイトに書いてあった開発環境構築をしてあとは実際に手を動かしながら学ぶことになると思います。本だと普通にコマンドラインベースに進んで行きますが、古い本の情報だと既に同じことをしても動かないケースがあります。自分の読んだ本も4年ぐらい前の本なので今とは書き方など違う点もありました。ただコードを書くだけであればVisual Studio Codeで良いのですが、そういった統合的な環境をコードとコマンドラインベースを行き来するのが面倒と感じたら統合開発環境の[Remix](https://remix.run/)があります。少し使ってみた感じではUIがVisual Studio Codeに似ていて抵抗感が薄く使えると思います。Web版もデスクトップ版もあり、どちらでも全く遜色は感じませんでした。VSCodeでも拡張をバンバン入れて行けば近い所まで行けるかもですが、やっぱり専用に作られたIDEには適わないと思います。

# Solidityについてさらに学ぶ
Ethereumを実際に組んでいくとコンパイルはもちろんテスト、デプロイといった作業が発生します。Remixでもこの辺対応していますが、スマートコントラクトのコンパイル・テスト・マイグレーションなどを踏まえた開発フレームワークに[Truffle](https://trufflesuite.com/)があります。また独自のトークンを作ってみたいなら[OpenZeppelin](https://www.openzeppelin.com/)というライブラリがあります。この辺を組み合わせて使っていくことでさらに理解が深まると思いますが、自分は書いてある通りでは動かない特にバージョン問題は結構苦労しました。特にSolidityとTruffleとOpenZeppelinが組み合わさってバージョン違いが出てくるとかなり混乱しました。Truffleに関しては似たようなフレームワークで最近は[hardhat](https://hardhat.org/)が人気があるようですが、まだ試してはいません。

# Ethereumを学ぶのに足りてない力
ここまで色々やってきて、まだ幾つか基本スキルが足りないかなと思っています。一つは英語力。Ethereumに限らずWeb3全般で言えることですが、やはり日本語では情報が足りていません。ここは何年かで劇的に情報が増える可能性もありますが、少なくともまだ数年はこの状態じゃないかなと思います。後はLinux力です。自分の実務経験はほぼ100%Windowsなので趣味でもほぼほぼLinuxをさわらずに来ました。その自分からするとSolidityの開発はやはりLinuxの方が向いているかなと思いました。さらに言うとDocker力ですかね。書いてある情報を試すだけでも出来なくて、そこで少し応用になって複数のもののバージョンが合わないことでかなりつまづいています。そういうこと環境としてLinuxで動く状態が保証されたものをDockerでサクッと持ってこれればもっと楽に試せるんだろうなとは思いました。

# まとめ
というわけで３カ月で大したことはしてないですが、少しずつ進んでいるかなとは思います。来年ぐらいにはもう少し骨のある記事が書けるように頑張ります。