始めに
Dapp(decentralized application=分散型アプリケーション)を開発するにあたり、開発環境の整備(Ganache, Metamask, Solidity, Truffleなど)が完了したら、実装に当たってDappがどうやって動いているのかを理解する必要がある。
公式ドキュメントなどの体系的なインプットと合わせて、具体的なアプリケーションを動かし、コードリーディングをすると理解が深まる。
全くのDapp未経験の人でも、効率的な独学方法を共有したい。
実装に当たって、どのドキュメントをどの順番で進めていくといいかを記載する。
※ あくまで私自身の経験をベースである。
Dappの構成要素の全体理解については下記に記載。
− DAppsを支える技術達(どんな構成で成り立っているのか)を確認
おすすめの学び方
①一番シンプルな(複雑なロジックなどを省いた)プログラムを動かしてみる。
②処理内容が①よりも複雑化したプログラムを動かしてみる。
③一番シンプルなプログラムに対して、好きな機能拡張を行い、プログラムを動かしてみる。
①一番シンプルな(複雑なロジックなどを省いた)プログラムを動かしてみる。
イメージとしては「Hello World」メッセージの出力レベルのプログラムである。
プログラムにフォーカスした理解というよりは、プログラムとそれが動くために必要な周辺ツールの関係性を理解して全体感をつかめるとゴールである。
- 参照ページ
- 学べること。
- リポジトリから対象プロジェクトを取得ができる。
- truffleフレームワークを使ってcompile
- 開発環境のテストネットワーク(Ganache)へのdeploy
- deployしたcontractの呼び出し
- テストネットワークのブロックチェーンへのデータの書き込み
- ブロックチェーン上の処理によって発生するコストの支払い(Ether)
- Ether支払い時のMetamaskの呼び出し
②処理内容が①よりも複雑化したプログラムを動かしてみる。
単なる「Hello World」メッセージ出力ではなくて、データの受け渡しなどができるレベルのプログラムである。
プログラムにフォーカスしてプログラムの言語ルールを捉えにいく。
- 参照ページ
- 学べること。
- よりプログラムに特化した解説があるので、
- スマートコントラクト(Solidity)の記法
- compileやdeployなどの細かい手順
- truffleフレームワークで作ったプロジェクトのディレクトリ構成
- フロントエンドからスマートコントラクトとMetamaskの呼び出し
- テストネットワーク(Ropsten)へメッセージだけを書き込みと呼び出しができるアプリをheroku上へ公開した。
- Blockchain Demo
- 【注意】一回目のアクセスでビルドをしてくれるので、タイムアウト後にもう一度アクセスしてください。
③一番シンプルなプログラムに対して、好きな機能拡張を行い、プログラムを動かしてみる。
- 参照ページ
- 学べること。
- Ethereum上で動かすアプリケーションのソースコードレベルでの全体像理解。
- いきなりCryptozombiesから始めると難易度が高いが、①と②を通して基本的な仕組みがわかっていれば中身がスッと入ってくる。
- ①と②では扱わなかった細かいトピックに触れることが多い。より具体例と合わせて説明されており、実践向けになっている。
- よりセキュアなコントラクトの実装
- コストを下げる効率的なソースコード
- 外部コントラクトの呼び出し
- ソースコードの権限管理(原則ブロックチェーン上にdeployされたら変更ができない)
- デバッグの仕方...ここは別でググる必要があるかな
- Ethereum上で動かすアプリケーションのソースコードレベルでの全体像理解。
- テストネットワーク(Ropsten)上でERC721トークンライブラリを使って一意の識別子をアカウント(address)間で交換ができるアプリをheroku上へ公開した。
- Blockchain Token Transfer Demo
- 【注意】一回目のアクセスでビルドをしてくれるので、タイムアウト後にもう一度アクセスしてください。
最後に
学習方法は人それぞれですが、個人的には具体と抽象の行き来が効率を上げてくれる。
- 特に体系的なドキュメントがない場合、情報収集→仮説→検証→確証のサイクルを小さく、早く、多く回すことが大事。
- また、どんな順番で何から学ぶと効率がいいか(各レクチャとの位置づけと、順番)がとても大事。
今回は特に後者の方で、キャッチアップが遅くなった印象があったので他の誰かの役にたてばと思い残しておく。
今後はデバッグ方法についても共有したい。検証の場面で役立ち、学習スピードを高めてくれる。知らないと逆に問題発見ができずにスタックしまいがちになってしまう。
読んでいただきありがとうございました。