Pythonデベロッパーが初めてDApp開発を勉強するときにおすすめしたいUdemy講座

## おすすめしたい講座
私が制作した講座ですが、紹介させてください m(__)m

https://www.udemy.com/course/dapp-vyper/?referralCode=D50B5400D6DD442667C2

## おすすめしたい理由

:::note info
**Pythonライクなツールを活用した、数少ない日本語のDApp開発の学習コンテンツ**として有用。
:::

:::note info
執筆時点では、DApp学習コンテンツの**多くがJavaScript系ツール**（HardhatやReactなど）を多用。JavaScriptが得意ではない方にとって、ハードルが高い。
:::

:::note info
DApp開発に**Pythonライクなツール**（VyperやBrownieなど）も利用できがる、執筆時点では**日本語での解説ドキュメントが少ない。**
:::


## そもそもDAppとは
DAppとは、ブロックチェーン上で実行されるアプリケーションのこと。
「Decentralized Applications」の略。
色々な書き方や読み方があり、例えば以下は、すべて同じDappを指す。

- Dapps（ダップス）
- DApps（ダップス）
- dapps（ダップス）
- Dapp（ダップ）
- DApp（ダップ）
- dapp（ダップ）

なお、[ethereum.org](https://ethereum.org/en/dapps/)では、複数形の意味のニュアンスで"dapps"、単数形のニュアンスで"dapp"、文頭の大文字表記で"Dapps"、強調するニュアンスで"DAPPS"と表記されている。※2023/12執筆時点

## 有名なDAppって、例えば何がある？

### Uniswap：暗号資産をスワップ（交換）できる取引所
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/454fa749-b08f-76b2-a22c-11f0200216bb.png)
参考：https://app.uniswap.org/swap

### Gods Unchained：戦略的カードゲーム。プレイでカードを獲得し、実生活で売れる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/a356a227-a09f-e4d6-269a-a90ab03fb7a0.png)
参考：https://godsunchained.com/

### OpenSea：NFTを売買するプラットフォーム
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/c3ace2c4-63af-8619-9ddc-7990914ada4a.png)
参考：https://opensea.io/

## 基本的なDAppのシステム構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/e057e35d-83b4-ddde-3521-b2ae9cc24e1b.png)

### 特徴①：スマートコントラクトをブロックチェーンにデプロイ
DAppの文脈において、スマートコントラクトとは、DAppが持つ機能をコード化したもの。このスマートコントラクトを、ブロックチェーンネットワーク上にデプロイしている。

### 特徴②：フロントエンドをWebサーバにデプロイ
HTML, CSS, Javascript, Swift, Kotlin等のフロントエンドのソースコードを、Webサーバにデプロイしている。DAppの利用ユーザーがフロントエンドにアクセスし、フロントエンドからブロックチェーン上のスマートコントラクトにアクセス。

これは、通常のWebアプリにおけるAPIサーバとフロントエンドの関係性に似ている。


## DApp開発の学習コンテンツではJS系ツールがよく使われ、Pythonデベロッパーにはハードルが高い
DApp開発の学習コンテンツでは、上述のシステム構成を、次のツールで解説するケースが多い。

|ツール名|概要|
|--|--|
|[Solidity](https://solidity-jp.readthedocs.io/ja/latest/)|スマートコントラクトを記述する言語。構文は、**JavaScript**やC++に似ている。|
|[Hardhat](https://hardhat.org/)|スマートコントラクト開発のためのフレームワーク（**JavaScript**ベース）|
|[ethers.js](https://docs.ethers.org/)|ブロックチェーンとやり取りするための**JavaScript**ライブラリ|
|[web3.js](https://web3js.readthedocs.io/)|同上|
|[React](https://ja.react.dev/)|フロントエンド開発でよく利用される**JavaScript**ライブラリ|

JavaScript系ツールを多用している。
JavaScriptがあまり得意でない方にとって、学習ハードルは高い。

## DApp開発で活用できるPythonライクなツールもある
実は、DApp開発で活用できるPythonライクなツールもある。

|ツール名|概要|
|--|--|
|[Vyper](https://docs.vyperlang.org/)|スマートコントラクトを記述する言語。構文は、**Python**に似ている。|
|[Brownie](https://eth-brownie.readthedocs.io/)|スマートコントラクト開発のためのフレームワーク（**Python**ベース）|
|[web3.py](https://web3py.readthedocs.io/)|ブロックチェーンとやり取りするための**Python**ライブラリ|

## PythonライクなDApp開発ツールを勉強するには英語力も必要
DApp開発で活用できるPythonライクなツールもありますが、公式サイトは英語表記です（2023/12執筆時点）。簡単に学習が可能であるとはいえません。日本語で解説しているサイトも、2023/12執筆時点であまり多くありません。

**Vyper**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/c96b4a43-d364-7559-91f1-47c42f3153ac.png)
参考：https://docs.vyperlang.org/

**Brownie**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/aec23f7d-4753-dab8-d150-ad90e7b8554b.png)
参考：https://eth-brownie.readthedocs.io/

**web3.py**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/ba42911c-c0fe-f333-c322-7e6a8024510b.png)
参考：https://web3py.readthedocs.io/

## 学習ハードルを下げるためにUdemyコースを制作
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/6f6d6a85-7244-44a8-ac26-c17b6c04b5a8.png)

### コースの特徴

:::note info
VyperとBrownieの導入により、**Pythonの基礎知識を活かして**、DApp開発をスムーズにスタート
:::

:::note info
ツールのインストール、スマートコントラクトの作成、ブロックチェーンへのデプロイ、フロントエンドとの連携までの**一連の流れ**を習得
:::

:::note info
**実際に機能するDApp**が1つ完成。Ethereumブロックチェーンのテストネットワーク”Sepolia” へデプロイ、VercelでDApp公開。
:::

### 注意点
DApp開発で活用できるPythonライクなツールもあるが、DAppに実装したい機能によっては、JavaScriptも必要となる。おすすめしているコースでも、フロントエンド開発でJavaScriptを利用している。以下、JavaScriptが必要になるケース例。

- MetaMaskログイン機能を実装する場合
MetaMaskは、フロントエンドで機能するアプリです。MetaMaskの機能をDAppに組み込むには、JavaScriptが必要です。

- JSでフロントエンド開発に動きをつけたい場合
当然ですが、Webアプリのフロントエンド開発に動きをつけたい場合も、JavaScriptを使うのが合理的です。

- ユーザーがトランザクションを実行する場合
ユーザーがトランザクションを実行するには、ユーザーアドレスに対応する秘密鍵が必要です。秘密鍵は、漏洩を防ぐためフロントエンド内部で、トランザクション実行処理を行う必要があります。Webアプリの場合、このフロントエンド内部処理の記述に、JavaScriptが必要です。

## こんなDAppを作ります（Youtube動画）

https://youtu.be/Rq6-vBO55zo

## さいごに
初めてDApp開発を勉強する時、JavaScriptや英語が苦手な私は苦労しました。Python派の技術者にとって、すこしでもスムーズに勉強できればと思い、講座を作りました。Vyperでスマートコントラクトを記述するところまで無料公開しています。もしご興味あれば、ぜひご視聴ください😊

https://www.udemy.com/course/dapp-vyper/?referralCode=D50B5400D6DD442667C2