DApps/truffleフレームワークによる開発準備
前回、RailsにgemをインストールすることでEhereumネットワークと接続することができるよ。
これでDAppsが作れるよ。ということを書いたんですが・・・。
ぼくには無理でした。
RailsとEthereumを連携させるという事例はなかなかなく・・・参考にさせていただいたサイトもいくつかあるんですが僕には環境構築がうまくできませんでした・・・。
と、いうことでEthereumネットワークを用いたDAppsを作成する際に、truffleというフレームワークが多く使われているようです。
今回はこのフレームワークを使う王道方式で行こうかと思います。
truffleとは
いい匂いしそう。 ではなく、開発に必要となるコンパイルやテスト、デプロイなどを可能にするEthereumスマートコントラクト開発用フレームです。
開発環境の構築というのは、アプリケーションを作る際に常に必要な作業になるとは思うのですが、スマートコントラクト機能を持つDAppsの場合その難易度はかなり上がるんじゃないかなと思います。
というのも、スマートコントラクトとなるとgethやsolidityといった開発環境を構築していくことになるのですが、 これらの環境はまだ過渡期といってもいいような状態です。
要は、前のsolidityバージョンではこの記述でできたのに、別のsolidityバージョンではエラーがでる。なんてことが頻繁に起きます。
言語単体の話だけでなく、gethとweb3.js間のバージョンが整合性取れずに・・なんてこともあった気がします。というか原因特定に至らなかったんですがそういう雰囲気のエラーはでました。
DAppsの場合、フロントからサーバー、Ethereumネットワークまで連携的に動いていく必要があるのですが、一つ一つ構築していくとなかなか難しいです。
そこでこのtruffleをインストールすると、truffle自体が様々な機能を包括的に持っているので簡単にアプリケーション開発に望むことができます。
truffle使い方
インストール方法はネット上を探せばあるのと思うので省略させてください。
インストールしたらバージョン確認をします。最新版はv5系なのですが、安定しているらしいということでv4.1.15を使用していきます。
基本的には安定板を使用していったほうがいいと思います。本当にいろんなところでひっかかるし、ネット上にあるリファレンスが全然使えなくなったりするので・・・。
$ truffle version
Truffle v4.1.15 (core: 4.1.15)
Solidity v0.4.25 (solc-js)
truffleプロジェクトの作成
まずはプロジェクト用のディレクトリを作成します。
$ mkdir myapp
作成したディレクトリに移動してtruffleプロジェクトを新規作成します。
$ cd myapp
$ truffle init
作成されたtruffleプロジェクトのディレクトリ構造は下記の通りです。
$ tree
.
├── contracts
│ └── Migrations.sol
├── migrations
│ ├── 1_initial_migration.js
├── test
└── truffle.js
truffle developについて
truffleには、開発用ブロックチェーンとしてtruffle developが用意されています。 truffle developはトランザクション発行後に即ブロックに取り込む機能を備えています。 トランザクションの結果を即座に確認することができるため、開発の際には重宝するそうです。 gethみたいに目の前でマイニングの様子を見せてくれるわけではないみたいですね。(あれはあれで何かロマン)
truffle developの起動
$ truffle develop
上記コマンドを実行すると、次の内容を知らせてくれます。
・http://127.0.0.1:9545/にてtruffle developクライアントが起動 ・10個のアカウントを発行 ・それぞれの秘密鍵とニーモニックを表示
起動後はtruffleコンソールに切り替わります。このコンソールでは、任意のEthereumクライアントが指定されています。
デプロイ先のEthereumネットワーク設定
デプロイ先のネットワークを設定します。
ここでは、gethプライベートネットとganacheの設定を行います。
gethのインストールなんかは調べてみてください。
truffle-config.jsを開き、下記の通りに編集します。
module.exports = {
networks: {
development: {
host: '127.0.0.1',
port: 8545,
network_id: 15,
gas: 4700000
},
ganache: {
host: '127.0.0.1',
port: 7545,
network_id: '*'
}
}
}
gethプライベートネットワークのdevelopmentネットワークと、ganacheアプリケーションが提供するプライベートネットワークを指定します。
truffleコンソール
truffle-config.jsで設定したネットワークを指定して、truffleコンソールを起動します。
--networkの引数にtruffle-config.jsで指定したネットワーク名を付与して、truffle consoleコマンドを実行します。
$ truffle console --network development
truffle(develop)>
ちなみにネットワーク名がdevelopmentの場合は、truffle consoleだけでも起動できます。
ganacheのプライベートネットを指定する場合も操作方法は同じになります。
$ truffle console --network ganache
truffle(ganache)>
これでtruffleによる開発準備は完了です。
って感じです。
色々と飛ばしちゃったなぁ。ブロックチェーンの概念とかも読み深めていきたいところ。
とりあえず、しばらくは個人アプリ開発奮闘記みたいな構成で書いていこうかなと思ってます。