はじめてのHyperledgerFabric 〜ゼロからPoCを始める際の知見〜

# はじめに
Blockchain Advent Calendar 2019の23日目の記事です。

この記事では、ブロックチェーンのプラットフォームの１つである**HyperledgerFabric**を扱います。これから企業内でのPoCなど検討するにあたり、何から手を付けようか途方に暮れかけている方の参考になればと思います。

公式ドキュメントは[こちら](https://hyperledger-fabric.readthedocs.io/en/release-1.4/)

# HyperledgerFabricとは
一般的には**コンソーシアム型**のブロックチェーンと言われています。ブロックチェーンが注目されるきっかけとなったBitcoinのようなパブリック型のブロックチェーンとは少し思想が異なります。**HyperledgerFabric**は、主に**エンタープライズユース**を前提に考えられており、パブリック型に見られる非中央集権的なコンセプトは捨てて、許可された特定のユーザーのみがブロックチェーンに参加できるようになっています。

エンタープライズユースが中心であるが故に、Qiitaなどの一般的なブログ記事では情報が少ないなと感じています。特に日本語の記事はかなり限定されます。検索にかけると、引っかかるのは特定の数名のみみたいな感じでしょうか。もっと多くの知見がネット上に出ていると、はじめやすく、敷居も下がると思いますが、現状まだまだその段には来ていないなという印象です。

ちなみに、エンタープライズユースを前提としたブロックチェーンでは、HyperledgerFabricの他に、**Quorum**や**Corda**も有名です。（２０１９/１２月現在）

# マネージドサービス
PoCの目的にも寄りますが、2019/12月時点においては、特段の事情が無ければその後の本番稼働も視野に入れつつ、どこかのマネージドサービスを利用するのが吉でしょう。

| Cloud Service    |     Service Name    |        Version     |
|:-----------------|--------------------:|:------------------:|
| IBM Cloud        | Blockchain Platform |                1.4 |
| AWS              | Amazon Managed Blockchain |          1.2 |
| Oracle           | Blockchain Platform |                1.4 |
| Alibaba Cloud    | Blockchain as a Service |            1.4 |
*2019/12月時点で利用可能なHyperledgerFabricが利用できるマネージドサービス*

まずはローカルでブロックチェーン環境を構築して試す、もしくはどこかのクラウドサーバーに自分でブロックチェーン環境を構築し色々と試してみる、という形を取ることも可能ですが、運用・管理の際に見なければならない範囲が格段に増える、かつ、学習コスト高くて難しいです。
まだまだアップデートも頻繁に発生する状況が続くと予想されますので、その辺の差異はマネージドサービスに任せてしまうのが現実解でしょう。

社内に数十名程度のブロックチェーンエンジニアがいる場合はその限りではありませんが、おそらくそのような企業はまだ日本にも数社くらいなのではないかと思います。

# 開発範囲
ブロックチェーン環境、すなわちブロックチェーンネットワークをマネージドサービスで構築してしまえば、エンジニアが開発しなければならないのは、２点に絞られます。

いずれも**SDK**が用意されているので、比較的少ないコード量で実装が可能です。バージョンによってSDKも異なることには注意が必要です。これから始めるのであれば、**v１.４**から入るのがオススメです。ネットワークへの接続やチェーンコード実行時のコードがかなりシンプルに書けるようになりました。

- **チェーンコード**
**スマートコントラクト**のことをHyperledgerFabricでは、チェーンコードと呼びます。イーサリアムでは、スマートコントラクトは一度デプロイしてしまうと後から修正が出来ませんが、チェーンコードは修正も可能です。
チェーンコードは、peerノードにインストールし、インスタンス化することで、呼び出し可能な状態となります。

- **アプリケーション**
アプリケーションでは、ブロックチェーンネットワークと繋げて、作成したチェーンコードを呼び出して**StateDB**の読み書きを行います。小規模なアプリケーションであれば、SDKを使用して直接呼び出しを記述しても良いですが、ある程度の大きなアプリケーションを想定するのであれば、SDKを使用してチェーンコードを呼び出す部分を**API**化し、アプリケーションからはそのAPIを呼び出すような形で実装するのがベストプラクティスです。

# 開発・テスト環境
Visual Studio Codeの拡張機能として、[IBM Blockchain Platform Extension for VS Code](https://marketplace.visualstudio.com/items?itemName=IBMBlockchain.ibm-blockchain-platform&cm_mmc=OSocial_Wechat-_-Blockchain%20and%20Watson%20Financial%20Services_Blockchain-_-WW_WW-_-VS%20code%20link%20on%20IBM%20domain%20to%20VS%20code&cm_mmca1=000026VG&cm_mmca2=10008691)というものがあります。チェーンコードの開発、テストをする上ではこれ一択でしょう。名前は、IBM Blockchain Platformとなっていますが、チェーンコードの開発、テストをするだけなら特にプラットフォームの縛りはありません。数クリックで、Dockerを使ってローカルにブロックチェーンネットワークが構築され、GUIベースでpeerノードへのインストール、インスタンス化、チェーンコードの実行が可能です。Visual Studio Code内で全て完結するのでとても便利です。

もちろんマネージドサービスとして、IBM Blockchain Platformを使うのであれば、この拡張機能を使ってIBM Blockchain Platformへのデプロイまで簡単に出来るようです。

# 情報収集
これからはじめてHyperledgerFabricに触れる際に、まず読んでおけば良いのではという記事まとめです。とりあえず思いついたものを上げておきます。後日見直すかもしれません。

**公式ドキュメント**
https://hyperledger-fabric.readthedocs.io/en/release-1.4/index.html

**IBM Blockchain VS Code 拡張機能を使用してスマート・コントラクトを開発する**
https://www.ibm.com/developerworks/jp/library/ibm-blockchain-platform-vscode-smart-contract/

**Hyperledger Fabric v1.4 のプログラミングモデル**
https://www.ibm.com/developerworks/jp/cloud/library/cl-hyperledger-fabric-basic-6/index.html

# おわりに
なかなかイーサリアムなどと比べると始めるにあたってのハードルが高く感じるHyperledgerFabricですが、もう少し広く知見が共有されるようになると良いなと思います。
コードベースの記事はまた別途書こうと思います！！