はじめに
ConsenSys社から、イーサリアム開発用ツールリスト(GitHub)が公開されています。ConsenSys社は、ブロックチェーン技術として主にイーサリアムベースの分散型アプリケーションの開発を幅広く手掛ける企業で、UPort、Balanc3、Gnosis、Singular等の開発に寄与するなど、世界規模のブロックチェーンベンチャー企業です。
本記事では、そんなConsenSys社が公表したイーサリアム開発に使用するツールを把握する事で、世界のイーサリアム開発手法や使用されているツール類のトレンドを学ぶ一助となるべく作成しました。
第2回となる今回はフロントエンド Ethereum APIからブートストラップ/out of boxツールまでを紹介します。
本記事は、過去にコンセンサス・ベイスが主宰していたオンラインサロンの記事です。記事は2017年~2018年にかけて執筆されたため、一部は、既に古くなっている可能性があります。あらかじめご了承ください。
フロントエンド Ethereum API
Web3.js
web3.jsは、イーサリアムのブロックチェーンにアクセスするためのAPIです。JavaScriptで実装されており、ブラウザなどのクライアントからのEtherの送金、スマートコントラクトへのデータ読み書き、スマートコントラクトの作成などの操作が可能になります。node.jsで利用される事が多いです。
web3.js – github
https://github.com/ethereum/web3.js/
Eth.js
Eth.jsは、web3.jsの代替ライブラリです。web3.jsの代替=フォークしたプロジェクトと言うわけではなく、個別に独立したライブラリとなっています。Eth.jsは軽量であること、非同期処理のみであること、16進数のみを扱う設計になっていること、ブラウザ用に最適化されておりファイルサイズが僅か104kbと軽量である、といった特徴があります。
ethjs – github
https://github.com/ethjs/ethjs
(参考)
New to Ethereum Development? Don’t forget EthJS =D : ethdev
Ethers.js
Ether.jsは、イーサリアムブロックチェーンとそのエコシステムと相互通信することを目的としたライブラリです。web3.jsが実行できることはether.jsでも行なうことができます。特徴として「安全な状態で自分の秘密鍵を自クライアント上に保管できる」や「デフォルトでENS(Ethereum Name Service)の設定がサポートされている」などが挙げられます。
ether.js – github
https://github.com/ethers-io/ethers.js/
Web3Wrapper
Web3Wrapperは、イーサリアムノード用のJSON-RPCクライアントで、TypeScriptで書かれた、web3.jsに取って代わるtype-safeな仕様になっているラッパーライブラリです。一貫性がありクリーンで、JavaScriptのPromise機能をベースとしたライブラリの提供を行なっています。
@0xproject/web3-wrapper – github
https://0xproject.com/docs/web3-wrapper#introduction
Ethereumjs
ethereum.jsは、イーサリアム JavaScript コミュニティで、web3.jsでカバーしきれていない部分を補うライブラリを開発しています。例えばethereum.jsのライブラリであるethereum-utilは様々なユーティリティメソッドを提供したり、ehtereum-txは自らトランザクションを作成・署名するときに利用するメソッドを提供しています。
EthereumJS – github
https://github.com/ethereumjs/
Drizzle
フロントエンド開発用ライブラリであるDrizzleは、Dapps開発でのエンジニアの負担を軽減します。DrizzleはRedux(JavaScript状態管理ライブラリ)を使用しており、Reduxの開発用ツールが利用できます。Drizzle Truffle Boxはスマートコントラクト開発に必要なものを取り揃え、その中には「drizzle」、「drizzle-react」、「drizzle-react-components」といったDrizzleの機能が含まれています。
Drizzle-box – github
https://github.com/truffle-box/drizzle-box
Subproviders
SubprovidersはLedger Nano S supportを加えるのに役立つLedgerSubproviderを含むいくつかの有用なweb3 subprovidersのことを指します。そのSubprovidersは0xプロジェクトから派生していることから0x.jsに特化していると想像する方もいると思いますが、0x.jsに限らず、どのアプリケーションにもレジリエンシー(対応力・復旧力)やユーザービリティーを提供できハードウェアウォレット機能もサポートしています。
@0xproject/subproviders – github
https://github.com/0xProject/0x-monorepo/tree/v2-prototype/packages/subproviders
web3-webpacked
MetaMask、Trustなどによってブラウザに導入するグローバルweb3オブジェクトを安全に管理するための堅牢な管理フレームです。Webpackedはインスタンス化されたweb3.jsインスタンスを公開、現在のネットワークやアカウントの状態を最新に保ちながら変数にその状態を格納したりします。また、EtherとERC20の残高を呼び出したり、npmパッケージを公開したりする汎用的ユーティリティ関数も含んでいます。
Web3: Webpacked – github
https://github.com/NoahHydro/web3-webpacked
Vortex
vortexは、DApp対応したRedux(JavaScript状態管理ライブラリ)のStore(Reduxオブジェクトの一種)で、トランザクションやスマートコントラクトなどを処理できます。Reactの利用が容易になりDappsの反応度が上がりweb3でのリクエスト量の減少を可能にします。 Vortexを利用することで、トランザクションの状態を正確に追跡できたり、Reactコンポーネントを通して全てのデータにアクセスすることができます。
vortex – github
https://github.com/Horyus/vortex
強い静的型付け言語 elm-ethereum
elm-ethereumは、web3.jsのようにイーサリアムブロックチェーンと相互通信を行ないます。また、Metamaskなどのwebウォレットに接続したり、トランザクションの生成も可能です。
elm-ethereum – github
https://github.com/cmditch/elm-ethereum
purescript-web3
purescript-web3は、purescriptのイーサリアムノードとの相互通信を可能にするライブラリです。全体数の中で大体のweb3APIのエンドポイントをカバーすると、トランザクションの送信やブロックチェーンデータへの要求が安定します。また、 purescript-web3-generatorを利用すると、スマートコントラクトabiからライブラリを生成することが可能になります。
purescript-web3 – github
https://github.com/f-o-a-m/purescript-web3
バックエンド Ethereum APIs
Web3.py
web3.jsのpython版です。web3はその名の通りJavaScriptで使うAPIですが、Web3.pyを使う事で、pythonでイーサリアムにアクセスできます。
Web3.py – github
https://github.com/ethereum/web3.py
Web3.php
web3.jsのphpバージョンです。web3.phpを利用することで、phpでイーサリアムネットワーク及びそのエコシステムにアクセスすることが出来ます。
web3.php – github
https://github.com/sc0Vu/web3.php
Ethereum-php
Ethereum PHPは、PHP-7.1で Ethereum JSON-RPC APIに接続するためのインターフェースです。現時点では全てのデータタイプをサポートすることは出来ていません。また、Ethereum-PHPは現時点で読み込みのみ可能となっており、Ethereumブロックチェーンに格納されているデータを取得することだけが出来る状態です。
Ethereum-PHP – github
https://github.com/digitaldonkey/ethereum-php
Web3j
web3jは、Web3 Java Ethereum Dapp APIの略称です。web3jはスマートコントラクトとの連動、イーサリアムクライアントノードとの同期のために必要になるAndroidライブラリです。Javaスマートコントラクトラッパーの自動生成やJavaのネイティブコードからスマートコントラクトを呼びだすことが出来ます。また、ENS(Ethereum Name Service)に対応しています。
web3j: Web3 Java Ethereum Ðapp API – github
https://github.com/web3j/web3j
Nethereum
web3.jsの.NET版です。Visual Studio を使用したマイクロソフト.net開発で、C#、Visual Basic 等でイーサリアムにアクセスできます。
Nethereum
https://nethereum.com/
Ethereum.rb
Ethereum.rbは、Ethereumのruby版ライブラリです。rubyから可能な限り高速で容易にイーサリアムブロックチェーンとの通信を可能にすることを目標として掲げています。特徴は「rubyのオブジェクトマッピングをSolidityに適用」や「ruby-eth gemでトランザクションに署名」などが挙げられます。
Ethereum Ruby library – Ethereum.rb – github
https://github.com/EthWorks/ethereum.rb
Web3.hs
Web3.hsは、JSON RPCを実行できるイーサリアムと互換性のあるHaskell APIです。関数型プログラミング言語 Haskell でWeb3の機能を使いイーサリアムにアクセスできます。
web3: Ethereum API for Haskell
http://hackage.haskell.org/package/web3
KEthereum
KEthereumは、Ethereum用のKotlinライブラリです。2011年発表された静的型付けのオブジェクト指向プログラミング言語 Kotlinでイーサリアムにアクセスできます。KEthereumはまだ完成版ではないですが、異なるアプリケーション間で共通のイーサリアムコードを”Don’t Repeat Yourself(DRY)”に則して共有することが可能です。
Kotlin library for Ethereum – github
https://github.com/walleth/kethereum
Pyethereum
Pyethereumは、Ethereumでの開発を支援するpythonのコアライブラリです。クライアントでありsolidityのようにスマートコントラクトを書くことはできません。pyethereumはsolidity、vyper、serspentで記述されたコントラクトをテストするのに有効です。Pyethereumはブロックチェーンに必要なロジックを取り揃えているので、ブロックチェーンを利用して何か実証したい場合などでpyethereumの強みを生かすことができます。
pyethereum – github
https://github.com/ethereum/pyethereum
Eventeum
Eventeumは、イーサリアムスマートコントラクトのイベント機能とバックエンドマイクロサービスとのブリッジとして機能します。Eventeumは指定のイベントがイーサリアムネットワークから発信されたら、それらのイベントを自分のミドルウェアレイヤーにブロードキャストしてくれます。それにより、明確なSoC(separation of concerns、関心事の分離)を提供し、自分のマイクロサービスでイベントの取得のためにイーサリアムノードへアクセスする必要が無くなります。
Eventeum – github
https://github.com/ConsenSys/eventeum
Ethereumex
Ethereumexは、プログラミング言語 Elixir を使ってイーサリアムブロックチェーンにアクセスすることが出来るJSON-RPCクライアントです。Elixir(エリクサー)は、古くから知られる堅牢な実行環境Erlang(アーラン)の仮想マシン上で動作するRubyライクなプログラミング言語です。汎用用途でElixirを古くから採用している企業も多く、そのままイーサリアムへアクセスできるのは魅力です。
Ethereumex – github
https://github.com/exthereum/ethereumex
EthContract
EthContractは、イーサリアムスマートコントラクトのクエリー実行に役立つヘルパーメソッドです。リクエスト処理のためにJSON-RPCを利用します。functionにウォレットアドレスの残高情報を取得するために必要な”account_balance(map)”や、呼び出されたスマートコントラクトの復号化に利用する”decode_data(data, abi, method, signatures_key \ “inputs”)”などがあります。
EthContract – github
https://github.com/AgileAlpha/eth_contract
ブートストラップ/out of box (すぐに使える)ツール
Truffle boxes
Truffle Boxesは、Dapps開発のテンプレート集です。Dappsを開発する際に必要なコントラクトやライブラリ、フロントエンドのビュー実装などが多数公開されており、これらを利用することで共通処理部分などの実装の負担を下げ、「どんなDappsを作るか?」という本来の目的にフォーカスすることができます。Dapps開発のチュートリアル的な「pet-shop」「tutorialtoken」や、代表的なフロントエンドフレームワークであるReact、Vue.js、Angular.jsを使ったサンプルなどもあり、これからDapps開発を学びたい人の足がかりとしても有用でしょう。
TRUFFLE BOXES – truffleframework
http://truffleframework.com/boxes/
Local Raiden
(※第一回記事と同じ内容です)Local Raiden は、送金速度が遅い等のスケーラビリティー問題を解決すべく開発が進んでいるプロジェクトの一つ Raiden Network をテストする為のローカル環境です。Dockerコンテナを使い簡単にテストネットを構築する事で、Ropsten Testnet を使うよりも簡単に実験出来る事を目標としています。但し、Raidenは開発者プレビュー段階にある為、利用には注意が必要です。
ConsenSys / Local-Raiden
https://github.com/ConsenSys/Local-Raiden
Private networks deployment scripts
(※第一回の記事より加筆) private-networks-deployment-scriptsは、Dockerコンテナを使って簡単にPoA(Proof of Authority)プライベートネットワークを構築する事ができるスクリプトです。PoAはマイニングを行わないコンセンサスアルゴリズムです。高速な承認を行うプライベートネットワークを素早く構築し、開発効率を高める事が期待できます。イーサリアムプライベートPoAネットワークでインストールや設定などの作業をあまり行わずに使用できます。Vagrant仮想マシーン、Dockerコンテナの二つのサンドボックスがサポートされており、そこで開発環境の構築やプライベートネットワークの初期化や動作を行なえます。private-networks-deployment-scriptsは現状開発中です。
ConsenSys / private-network-deployment-scripts – github
https://github.com/ConsenSys/private-networks-deployment-scripts
Parity Demo-PoA Tutorial
Parity Demo-PoA Tutorialは、Parityノード二つによるPoAチェーンテストを構築するために必要なことをステップバイステップに学べるチュートリアルです。チュートリアルでは、ローカルで二つのParityノードを立ち上げ、その二つのノード間でトランザクション送受信を行なう方法を学べます。
Demo PoA-Tutorial – Wiki
https://wiki.parity.io/Demo-PoA-tutorial.html
Local Ethereum Network
(※第一回記事と同じ内容です)プライベートPoWネットワークを利用可能とするための、すぐに使える構築手順です。gethのインストール、イーサリアムノードの初期化、他のイーサリアムノードとの通信、EOAの作成、マイニング、etherの送金、他のローカルネットワークノードへの接続方法が書かれています。
ConsenSys / local_ethereum_network
https://github.com/ConsenSys/local_ethereum_network
Kaleido
(※第一回記事と同じ内容です)Kaleido は、企業向けブロックチェーン SaaS サービスです。Enterprise Ethereum (Ethereum互換の企業向けスマートコントラクト技術) を採用しており、企業独自のブロックチェーンを簡単に構築でき実証実験を行う事が出来ます。
Kaleido
https://kaleido.io/
Cheshire
Cheshire(チェシャ)は、truffle boxで利用できるCryptoKittiesのWeb APIとスマートコントラクトのサンドボックスです。CheshireはDappsであるCryptoKittiesの迅速な開発を可能にします。特徴として、開発環境の構築・Dappsのブートストラッピング用のNode.jsフレームワークがサポートされています。
Cheshire – github
https://github.com/endless-nameless-inc/cheshire
Aragon CLI
Aragon CLI(Command Line Interface)は、Aragonアプリケーションの構築に必要なCLIツールです。Aragon は非中央集権型DAOプロジェクトの一種であり、Aragon CLI環境では、パッケージ管理システムAPM (Aragon Package Management protocol)が整備されてアップグレード性を確保しています。また、APM へアクセスする為のライブラリ apm.js 等も用意されています。
CLI usage – Aragon Developer Potal
https://hack.aragon.org/docs/cli-usage.html
ColonyJS
ColonyJSはColonyネットワークのスマートコントラクトとやりとりするためのAPIを提供しているJavaScript クライアントになります。ColonyJsはMonorepoベースのプロジェクトです。Monorepoとは共通のモジュールや開発環境の共有などのために使用される共通リポジトリのことです。
colonyJS – github
https://github.com/JoinColony/colonyJS
まとめ
今回は、ethereum-developer-tools-listの中から、Frontend Ethereum APIs ~ Bootstrap/out of box tools 迄をお届けしました
参考資料
ConsenSys/ethereum-developer-tools-list
https://github.com/ConsenSys/ethereum-developer-tools-list
免責事項
本記事に掲載されている記事の内容につきましては、正しい情報を提供することに務めてはおりますが、提供している記事の内容及び参考資料からいかなる損失や損害などの被害が発生したとしても、弊社では責任を負いかねます。実施される際には、法律事務所にご相談ください。
技術・サービス・実装方法等のレビュー、その他解説・分析・意見につきましてはblock-chani.jp運営者の個人的見解です。正確性・正当性を保証するものではありません。本記事掲載の記事内容のご利用は読者様個人の判断により自己責任でお願いいたします。
ブロックチェーン学習に最適の書籍の紹介
図解即戦力 ブロックチェーンのしくみと開発がこれ1冊でしっかりわかる教科書
本書は、ブロックチェーン技術に興味を持ったエンジニアや、その仕組みを学び、自分の仕事に活かしたいビジネスパーソンを対象にして、ブロックチェーンのコア技術とネットワーク維持の仕組みを平易な言葉で解説しています。この本を読んだうえで、実際にコードを書くような専門書、ブロックチェーンビジネスの解説書を読むことで、理解度が飛躍的に高まるでしょう。(はじめにより)
会社紹介
弊社(コンセンサス・ベイス株式会社)は、2015年設立の国内で最も古いブロックチェーン専門企業です。これまでに、大手企業の顧客を中心に、日本トップクラスのブロックチェーンの開発・コンサルティング実績があります。ブロックチェーンに関わるビジネスコンサル・システム開発・教育・講演などご希望でしたら、お気軽にお問い合わせください。
会社ホームページ
https://www.consensus-base.com/