Flow を使った Dapps の開発方法 〜概要編〜

Ara
Flow Japan

--

皆さん、こんにちは。Flow 開発コミュニティの荒川です。

最近は、NFT が若干バブルのようになってきていて、ちょっと不安な面も感じてます。

Flow においては、NBA Top Shot の他に、VIV3.com(読み方は vive が正しいらしい!)というマーケットも立ち上がり、これから徐々に Flow を使ったサービスが増えていくことが期待されます。

それでは、Flow を使ったサービスを作るにはどうすればよいでしょうか。

この記事では、現在公開されている開発者向けの情報をまとめて、大まかな開発の流れと、現状何かできるのかを紹介したいと思います。(内容がすぐに古くなりそうなので、気づいたものは更新していきます。)

目次

  • 利用できる Flow ネットワークの環境
  • 開発言語
  • コントラクトの開発
  • フロントエンドの開発
  • バックエンドの開発
  • まとめ 〜ざっくりとした開発の流れ〜

利用できる Flow ネットワークの環境

現在、パブリックなネットワーク環境として、メインネットテストネットが稼働しています。これ以外に、開発用のエミュレータの環境を利用できます。

すでにテストネットが利用できる状態になっているので、エミュレータとテストネットを使って開発を進めることができます。

メインネットはまだ一部の操作(コントラクトのデプロイなど)が制限されている状態です。 そのため、サービスをメインネットで稼働する際は、Flow チームに連絡して、承認をもらう必要があります。

開発言語

コントラクトは、Flow 独自の Cadence 言語を使って実装します。

Flow ブロックチェーンとやり取りするためには、Flow のアクセスノードに接続する必要があります。 このライブラリとして公式から Go 言語の SDK と、JavaScript 言語の SDK が提供されています。 また、コミュニティにより Ruby 言語のライブラリも開発されています。

なお、Flow のアクセスノードとの通信には gRPC が使われています。
そのため、この仕様に従えば、これ以外の言語を使って開発することも可能です。

コントラクトの開発

コントラクトは、ブラウザで動作する Flow Playground か、ローカル環境で動作する Flow エミュレータを使って開発できます。

Flow Playground では、ブラウザを使って、コントラクトのデプロイや、複数のアカウントによるトランザクション実行ができるので、簡単なコントラクトを動作確認するにはとても便利です。 ただし、ひとつのアカウントにひとつしかコントラクトをデプロイできなかったり、アカウントの数が 4 つしかなかったりするので、大規模なコントラクトの開発には向きません。ある程度の規模のコントラクトになる場合、Flow エミュレータを使うのがよいです。

ローカル環境で Flow エミュレータ を使う場合は、docker コマンドの実行だけで環境を構築できます(Docker Hub にある Docker イメージを利用できます)。 エミュレータとやり取りするためには、Flow CLI を使うのが簡単です。これを使うと、コントラクトのデプロイやトランザクション送信を、コマンドで実行できます。

Playground やエミュレータで動作確認を行なった後は、テストネットにデプロイして動作確認することになると思います。

テストネットを利用するには、まずテストネットにアカウントを作成する必要があります。 Testnet Faucet のページで、アカウント作成を申請できます。このページを使って、テストネットの FLOW トークンをもらうこともできます。

フロントエンドの開発

コントラクトとやり取りする一般的な方法は、フロントエンドで Flow の web ウォレットを利用することです。

Flow の web ウォレットとして、ローカルのエミュレータ環境では dev-wallet、テストネットでは Blocto ウォレットを利用できます。

これらの web ウォレットと接続するには、Flow JavaScript SDK を使います。

コントラクトとやり取りするには、Cadence 言語で書かれたトランザクションまたはスクリプトを、Flow JavaScript SDK を使用してアクセスノードに送信します。

※スクリプトとは、ブロックチェーンの状態を変更しない、情報を読み取るだけの Cadence コードのことです。

Blocto ウォレットは、メールアドレスを入力するだけでアカウントを作成できるので、簡単でとても便利です。

バックエンドの開発

フロントエンドだけで Dapps を作ることもできますが、より多様な機能を提供するために、ブラウザ以外からコントラクトとやり取りすることもできます。

これを行うには、Flow JavaScript SDK または Go SDK を使います。

ブロックチェーン上のイベントを取得したり、スクリプトを実行して情報を読み取るだけであれば、アクセスノードの URL を指定するだけでよく、アカウントを用意する必要はありません。

トランザクションを実行したい場合は、秘密鍵を使って、SDK で署名を行う必要があります。

まとめ 〜ざっくりとした開発の流れ〜

さて、ここまでの情報をまとめると、ざっくりとした開発の流れは下記のようになります。

1. コントラクトの開発

  • Cadence 言語でコントラクト(およびトランザクション、スクリプト)のコードを書く
  • Flow Playground / エミュレータを使って動作確認
  • テストネットのアカウントを作成して、テストネットで動作確認

2. フロントエンドの開発

  • Flow JavaScript SDK を使って、アクセスノードにトランザクションまたはスクリプトを送信することで、コントラクトとやり取りする
  • エミュレータの場合は dev-wallet、テストネットの場合は Blocto ウォレットを利用する

3. バックエンドの開発

  • Flow JavaScript SDK または Go SDK を使って、アクセスノードにトランザクションまたはスクリプトを送信することで、コントラクトとやり取りする

Flow を使った Dapps 開発の流れを理解いただけたでしょうか。

Flow を使って何かサービスをつくってみたくなりましたか? Flow は、メインネットがローンチされたばかりでまだサービスが少ないので、今こそ、何かを始めるチャンスだと思います。

次回は、より具体的なコードや手順を、紹介できたらと思います。

それでは、よい開発ライフを!

--

--

Ara
Flow Japan

ソフトウェアエンジニア。生物学、民俗学、仏教、神道、メディアアート、博物学、フォント、ブロックチェーンなどに興味あり。