開発環境を用意しよう
✅ 環境構築を行う
このsectionではスマートコントラクトを実装していきます。
まずはそのための環境構築をしましょう!
まず,node
/ yarn
を取得する必要があります。
動作確認。
$ node -v
v18.6.0$ yarn -v
1.22.19併せて本プロジェクトの実行環境(上記のバージョン)もトラブル時の参考にしてください。
それでは本プロジェクトで使用するフォルダを作成してきましょう。前回のレッスンで作成したAVAX-Subnet
ディレクトリ直下にいることを確認し、次のコマンドを実行します。
yarn init --private -y
AVAX-Subnetディレクトリ内に、package.jsonファイルが生成されます。
AVAX-Subnet
├── genesis/
+└── package.json
それでは、package.json
ファイルを以下のように更新してください。
// package.json
{
"name": "avax-subnet",
"version": "1.0.0",
"description": "AVAX Subnet",
"private": true,
"workspaces": {
"packages": ["packages/*"]
},
"scripts": {
"contract": "yarn workspace contract",
"client": "yarn workspace client",
"test": "yarn contract test"
}
}
package.json
ファイルの内容を確認してみましょう。
このプロジェクトはモノレポ構成となるようにフォルダを構成してきます。モノレポとは、コントラクトとクライアント(またはその他構成要素)の全コードをまとめて1つのリポジトリで管理する方法です。
モノレポを作成するにあたり、パッケージマネージャーの機能であるWorkspacesを利用しています。
この機能により、yarn installを一度だけ実行すれば、すべてのパッケージ(今回はコントラクトのパッケージとクライアントのパッケージ)を一度にインストールできるようになります。
workspacesの定義をしている部分は以下になります。
//package.json
"workspaces": {
"packages": [
"packages/*"
]
},
また、ワークスペース内の各パッケージにアクセスするためのコマンドを以下の部分で定義しています。
//package.json
"scripts": {
"contract": "yarn workspace contract",
"client": "yarn workspace client",
"test": "yarn workspace contract test"
}
これにより、各パッケージのディレクトリへ階層を移動しなくてもプロジェクトのルート直下から以下のようにコマンドを実行することが可能となります(ただし、各パッケージ内にpackage.json
ファイルが存在し、その中にコマンドが定義されていないと実行できません。そのため、現在は実行してもエラーとなります。ファイルは後ほど作成します)。
yarn <パッケージ名> <実行したいコマンド>
次に、TypeScriptの設定ファイルtsconfig.json
を作成しましょう。今回のプロジェクトは、contractとclientどちらもTypeScriptを使用するため、それぞれのパッケージにtsconfig.jsonが存在します。そのため、ルートディレクトリにもtsconfig.jsonを配置することでパッケージ間で共通したい設定を記述することができます。
それでは、AVAX-AMMディレクトリ直下にいることを確認し、下記のコマンドを実行しましょう。
tsc --init
tsconfig.json
ファイルが生成されたことを確認してください。設定はデフォルトのままにしておきます。
それでは、ワークスペースのパッケージを格納するディレクトリを作成しましょう。
以下のようなフォルダ構成となるように、packages
ディレクトリとその中にcontract
ディレクトリを作成してください(client
ディレクトリは、後ほどのレッスンでフロントエンド構築の際に作成したいと思います)。
AVAX-Subnet
├── genesis/
├── package.json
+├── packages/
+│ └── contract/
└── tsconfig.json
contract
ディレクトリには、スマートコントラクトを構築するためのファイルを作成していきます。
client
ディレクトには、フロントエンドを構築するためのファイルを作成していきます。
最後に、AVAX-Subnetディレクトリ下に.gitignore
ファイルを作成して以下の内容を書き込みます。
**/yarn-error.log*
# dependencies
**/node_modules
# misc
**/.DS_Store
最終的に以下のようなフォルダー構成となっていることを確認してください。
AVAX-Subnet
├── .gitignore
├── genesis/
├── package.json
├── packages/
│ └── contract/
└── tsconfig.json
これでモノレポの雛形が完成しました!