---
title: "zkSyncで開発を始める方法(2025)"
description: "zkSyncで最初のアプリケーション開発を始める。"
---

# zkSyncで開発を始める方法(2025)

Matter Labsは現在、Scroll、Polygonと[世界初のゼロ知識EVM](https://www.alchemy.com/overviews/zkevm)の座を争うレースに、代表として[zkSync](https://www.alchemy.com/overviews/what-is-zksync-era) Eraを送り込んでいる。

2023年3月にローンチされたzkSync Eraは、[ゼロ知識証明](https://www.alchemy.com/overviews/validity-proof-vs-fraud-proof)を利用してEthereumネットワークの速度と処理能力をスケールさせる、EVM互換のZK Rollupである。

zkSync上での開発には、ETHおよび[**ERC20トークン**](https://www.alchemy.com/overviews/erc20-solidity)の低いガス手数料、さらにアトミックスワップ、指値注文、ネイティブなLayer-2 NFTサポートといった利点がある。

この記事では、zkSync Eraとは何か、そしてzkSyncのパブリックテストネット上でスマートコントラクトをデプロイする方法を5つのステップで説明する。

## **zkSync Eraとは何か**

zkSync Eraは、Matter Labsによる新しいLayer-2ソリューションで、ZK-ProofsとEthereum Virtual Machine技術を組み合わせて[**Ethereumメインネットのスループットをスケールさせる**](https://www.alchemy.com/overviews/ethereum-scaling-solutions)ものである。この2つの技術を統合することで、zkSync EraはよりTPSが高く、より安全なEthereumトランザクションを可能にする。

完全な[EVM](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm)互換に加えて、EraはEIP-4337で当初提案された[アカウント抽象化のコンセプト](https://www.alchemy.com/overviews/what-is-account-abstraction)をEthereumスタックに導入している。

アカウント抽象化により、ウォレットはスマートコントラクトとなり、カスタム署名アルゴリズム、スポンサー付きトランザクション、2要素認証といった機能を持てるようになる。

## **zkSync Era上での開発の始め方**

zkSync Era上での開発は、Ethereum上でコントラクトをデプロイする際に[web3開発者が使うのと概ね同じツール](https://www.alchemy.com/dapps/top/developer-tools)を使用する。このチュートリアルでは、zkSyncのパブリックテストネット上でスマートコントラクトをデプロイする方法を説明する。

### **前提条件**

このチュートリアルには、以下が必要となる：

- Ethereumウォレットの秘密鍵
- テスト用のether
- 必要なプラグインを備えた[Hardhat](https://www.alchemy.com/dapps/hardhat) Integrated Development Environment（IDE）
- パッケージマネージャ（NPMまたはYarn）
- [VScode](https://www.alchemy.com/dapps/vscode)
- Typescriptの基本的な理解

## **1. zkSync Era用のIDEをセットアップする**

まず、プロジェクト用のフォルダを作成する。

VScode（または端末）を開き、以下を入力する：

次に、以下のコマンドでnpmを初期化する：**npm init -y**

**-y**フラグを使うと、**_package.json_**ファイルの全ての入力フィールドがデフォルト値で自動的に埋められ、時間を節約できる。

npmとプロジェクトフォルダの準備が整ったので、必要な依存関係をインストールする。

VScodeのターミナルで、以下を入力する：

**コマンドの内訳は以下の通り：**

- **$ npm i -D**：installコマンドのエイリアス。-Dフラグは、全てのパッケージを開発用依存関係として保存する。
- $ typescript ts-node：TypescriptとNode.js用のTypescript実行エンジンのインストール。
- $ ethers@^5.7.2 zksync-web3@^0.13.1：コントラクトのデプロイと操作を助ける2つのライブラリ。
- $ hardhat：使用するIDE。
- $ @matterlabs/hardhat-zksync-solc @matterlabs/hardhat-zksync-deploy：スマートコントラクトのコンパイルとデプロイを助ける2つのHardhatプラグイン。

次に、Hardhatプロジェクトの初期化を行う。

ターミナルで、以下を入力する：

**npx hardhat init**

「**Create a TypeScript Project**」を選択し、Enterを押して次のフィールドをデフォルト値で埋める。

プロジェクトフォルダの構成は以下のようになるはずである：

contractsフォルダ内で、デフォルトで自動生成されるLock.solコントラクトは不要なので削除する。

IDEセットアップの最後のステップとして、**hardhat.config.ts**ファイルに移動する。

**hardhat.config.ts**ファイルは、デプロイに関する以下のパラメータを定義する「コマンドセンター」である：

- zkSyncコンパイラのバージョン
- コントラクトがデプロイされるチェーン
- コントラクトが記述される[Solidity](https://www.alchemy.com/overviews/solidity-smart-contract)コンパイラのバージョン

**hardhat.config.ts**ファイルの内容を削除し、以下に置き換える：

これでIDEのセットアップが完了し、次のステップではスマートコントラクトを作成する。

## **2. スマートコントラクトを作成する**

このコントラクトは、人物の名前と年齢を登録するものである。

プロジェクトディレクトリのcontactsフォルダに移動し、**Registry.sol**という新しいファイルを作成する。

次に、以下のスマートコントラクトのコードをコピーしてファイルに貼り付ける：

デプロイ前にコントラクトをコンパイルする必要がある。ターミナルで、以下を入力する：

**npx hardhat compile**

## **3. zkSync Era用のウォレットをセットアップする**

zkSync Eraは既存のEthereumウォレットをサポートしているため、新しいウォレットの作成は不要である。

したがって、[Metamask](https://www.alchemy.com/dapps/metamask)のような既存のウォレットを使用できる。

**注：デプロイ手続きでは秘密鍵のエクスポートが必要となるため、投資や貯蓄を保管している個人のEthereumウォレットの使用は推奨されない。**

## **4. テスト用のGoerli ETHを取得し、zkSync Eraにブリッジする**

コントラクトをデプロイするためには、zkSync Eraテストネット上のテスト用etherが必要になる場合がある。

**テスト用のetherを取得するには、デプロイヤーウォレットからそのzkSync Era上のインスタンスへGoerli ETHをブリッジする。**

- そのためには、[AlchemyのGoerliフォーセット](https://goerlifaucet.com/)に移動し、Goerliテストネット上でetherを取得する。

- 進める前に、無料のAlchemyアカウントを作成する。

- 次に、Metamaskを開き、ウォレットアドレスをクリックしてコピーする。

- Goerliフォーセットのウェブサイトで、ウォレットアドレスを貼り付け、**Send Me ETH**をクリックする。

次に、zkSync Eraの[ブリッジ](https://goerli.portal.zksync.io/bridge)に移動する。

「Connect via a browser wallet Metamask」をクリックする。

コントラクトのデプロイに使用するウォレットを選択する。

**MAX**をクリックする（または任意の金額を入力してもよいが、最低でも0.1 [gETH](https://www.alchemy.com/overviews/what-is-a-geth-node-and-how-to-run-one)であることを確認する）、その後**Deposit**をクリックする。

**注**：右下のフィールドが「**zkSync Era Goerli**」と表示されていることを確認する。

ブリッジが完了するのを待つ間に、デプロイスクリプトを作成してデプロイを仕上げる。

## **5. デプロイヤースクリプトを作成し、秘密鍵をエクスポートする**

次に、デプロイヤースクリプトを作成し、Metamaskから秘密鍵をエクスポートして、秘密鍵をコピーし、スマートコントラクトをデプロイする。

手順は以下の通り：

#### **デプロイヤースクリプトを作成する**

VSCodeに戻り、scriptsフォルダの名前を**deploy**に変更し、その中に**deploy.ts**というファイルを作成する。

その後、以下のコードをファイルにコピーする：

「//」で示されたコメントは、コードのロジックを説明している。

#### **MetaMaskから秘密鍵をエクスポートする**

Metamaskで、ブリッジ時に使用したウォレットを開き、その秘密鍵をエクスポートする。

縦の3つの点をクリックし、Account detailsをクリックした後、**Export private key**をクリックする。

パスワードを入力し、表示された文字列をコピーする。

#### **秘密鍵を貼り付け、スマートコントラクトをデプロイする**

deploy.tsファイルに戻り、以下の行を見つける：

**  const wallet = new Wallet\("&lt;WALLET-PRIVATE-KEY&gt;"\);**

**&lt;WALLET-PRIVATE-KEY&gt;**の部分に秘密鍵を貼り付ける。

二重引用符を削除しないよう注意する。

最後に、VScodeのターミナルで以下を入力する：**npx hardhat deploy-zksync**

## **6. ブロックエクスプローラーでスマートコントラクトを検証する**

zkSync Eraのテストネットブロックエクスプローラーを使用して、デプロイされたコントラクトを検証する。

[ブロックエクスプローラー](https://goerli.explorer.zksync.io/)に移動する。検索バーに、デプロイされたコントラクトのアドレスを貼り付ける。

コントラクトが見つかったら、**Contract**タブをクリックし、次に**Verify Smart Contract**をクリックする。

その後、必要な詳細を入力する：

**Contract Name**は**「Registry」**とする。

**Zksolc version** - v1.3。

Solc version - 0.8.17。

**Zksolc Version**と**Solc Version**はどちらも**hardhat.config.ts**ファイルから取得できる。

Enter the [Solidity](https://www.alchemy.com/overviews/solidity) Contract Codeのフィールドに、Registry.solファイルの内容を貼り付ける。

**Verify Smart Contract**をクリックしてプロセスを完了する。

**7. ZkSync Era上でデプロイされたコントラクトと対話する**

ブロックエクスプローラーで、再びアドレスによりコントラクトを見つけ、**Contract**タブをクリックする。

今回は、ブロックエクスプローラーに2つの新しいフィールドが表示されるはずである：

1. ゲッター関数用の**Read**
1. セッター関数用のWrite

**personInfo**マッピングの可視性は_public_として定義されているため、そのゲッターメソッドは自動的に生成される。

デプロイヤーウォレットがエクスプローラーに接続されていることを確認する。**addPerson**をクリックする。

セクションが展開され、2つの新しいフィールドが表示される - 1つは人物の名前を、もう1つは年齢を定義するためのものである。

それらを入力したら、**Write**をクリックし、トランザクションを確認する。

トランザクションが確認されたら、personInfoをクリックし、先ほど追加した人物の名前を入力する。

GUIは追加された人物の年齢を返すはずである。
