HyperLedger Fabric + Composer を使ったアプリケーションの概要
投稿者:國藤 篤規
こんにちは。
HyperLedger Fabric と、開発・運用に使用するツール群である Composer を使用してデモ・アプリケーションを作成しました。たくさんのツールが登場しますので、それぞれの役割などを簡単にご紹介します。
デモアプリの概要
今回は、ssh terminal として使用可能な サーバ運用作業管理アプリを作成しました。
特徴として以下の機能を備えています。
- 作業登録された時間帯のみ、対象サーバへ接続可能
- 作業者に対象サーバのログインパスワードを通知する必要がない
- 確認者が確認を行うまで、コマンドが実行されない
- ログが改竄されない形で記録される
4点目の部分で、HyperLedger を使用しています。
HyperLedger Composer の役割
以下が今回登場するコンポーネントです。
HyperLedger Composer は開発、ディプロイ、実働フェーズのそれぞれで使用するツール群です。フェーズごとにツールの役割を紹介していきましょう。
(コマンド例などはversion 0.19.10時点のものです)
【開発フェーズ】Playground
BNA(Business Network Archive)を定義するためのWebツールです。ローカル環境にインストールすることもできますが、以下のURLで公開されており、オンラインエディタとしてBNAを作成することができます。
BNAとはその名の通り、HyperLedgerへの設定などがひとまとめになったアーカイブファイルです。含まれるファイルの役割は以下の通りです。
ファイル | 設定内容 | DBで相当する部分 |
---|---|---|
Model | HyperLedgerで管理したいasset , 履歴などがどのような属性を持つのか記述します | テーブル定義 |
Query | asset を照会する際の条件パラメータ、ソート順などを定義します | select文、もしくは View定義 |
Transaction | asset の更新を含む処理を記述します。JavaScript を用いて、更新に先立つチェックや、更新可能なカラムの限定などが行えます | ストアード・プロシージャ |
Acl | Model , Query , Transaction について、どのユーザが、どれにアクセスできるのか定義します | grant文など |
この中で特筆すべきは、やはり Transaction でしょう。HyperLedger の chaincode(他のブロックチェーン・エンジンだと、スマートコントラクトとも呼ばれます) を定義する部分で、参加者の台帳の使い方を規定することができます。Model と Transaction の設定の自由度が高いことが、HyperLedger のもつ大きな特徴といえます。逆に仮想通貨系に特化したエンジンは、あらかじめ定義済みの Model(参加者は残高をもつ)とTransaction(残高を超えて、送金はできない)が組み込まれているブロックチェーン・エンジンと表現してもいいかもしれません。
記述はブラウザ上のエディタで行いますが、スペルチェックなどが働き、快適にコーディングができます。
また、テストタブに切り替えると、実環境(HyperLedger)にディプロイを行うことなく、テストができます。
特にTransactionはJavaScriptでのコーディングとなりますので、疑似的とはいえ、手軽に動作を確認できるのは大きなメリットです。
テストを終えた後、Export ボタンをクリックするとBNAファイルがダウンロードされます。
【ディプロイフェーズ】Composer CLI
Composer CLI は、HyperLedger Fabric を管理するためのツールです。Node.js 上で動作するため、以下のコマンドでインストールします。
npm install -g composer-cli
Composer CLI では、Card という概念で、HyperLedgerへの接続情報を管理します。Card もアーカイブファイルになっており、中をのぞくと接続先HyperLedger の(grpc)urlや、クライアントの公開鍵・秘密鍵などが入っています。Card の作成方法は環境によって異なりますので、詳細は割愛します。(もし、fabric-dev-servers を使用している場合は、createPeerAdminCard.sh を実行するだけです。) card が作成できたら、composer card import
コマンドを使用して、インポートしておきます。
HyperLedgerに接続できるようになったら、以下のようなコマンドで BNA ファイルのディプロイを行います。
composer network install -a cossh-network.bna -c PeerAdmin@hlfv1
composer network start --card PeerAdmin@hlfv1 -n cossh-network -V 0.0.2-deploy.6 --networkAdmin admin --networkAdminEnrollSecret ***** --file networkadmin.card -l INFO
composer card import --file networkadmin.card
composer network ping --card admin@cossh-network
最後に、composer network ping
コマンドで接続が確認できれば、ディプロイは完了です。
【実働フェーズ】Client API もしくは Rest Server
アプリケーションからHyperLedgerに接続するためにはどうしたらよいのでしょうか。HyperLedger は二つの手段を用意しています。
まず一つ目は、JavaScript(Node.js)のClient API を使用する方法。アプリケーションが Node.js を使用している場合は、最もわかりやすい方法です。インストールするパッケージは以下の3つです。
npm install composer-client
npm install composer-admin
npm install composer-common
気を付ける点は、ここでも Card を使ってHyperLedgerに接続する点です。アプリケーションのノードに composer CLI をインストールし、composer card import
しておくか、Client APIを使用して、Cardファイルを読み込んでおく必要があります。
アプリケーションがNode.js以外で動作する場合は、Rest Server をインストールして Transactionなどを REST API として公開します。アプリケーションからは通常通り、適当な HttpClient を用いて接続します。
npm install composer-rest-server -g
composer-rest-server
あとはアプリケーションのコーディングあるのみです。
まとめ
以上、駆け足ではありますが、どのようなコンポーネントが利用できるのか一通り見てきました。私自身使ってみた感触としては、Playground などの使いやすいツールが揃っていて、HyperLedger利用のハードルが非常に下がったと感じる一方、Card などは頻繁に仕様が変更されることもあり、煩雑に感じられる部分も存在しています。また、Playground , Composer CLI , Client API で少しでもバージョンが違うと、とたんに動かなくなったりします。ですが、それもハイペースでの機能拡充の裏返しというべきでしょう。頑張ってキャッチアップする価値のあるツールだと感じました。
参考リンク
公式サイトの更新も遅れがちな中、常に最新の情報を提供されているサイトです。今回のアプリを開発するにあたりたくさんの疑問点がありましたが、こちらのサイトを訪れると、いつも回答が書いてありました。
HyperLedger Composer の公式サイトです。バージョンアップに記述が追い付いていない個所が一部ありますが、BNA の作成方法などはここを見るのが一番わかりやすいです。リンクは Model 定義の Language reference です。