ブロックチェーンを組み込んだWebアプリを開発しました!

20190613125511[f:id:css_blog:20190613130706p:plain]

はじめに

ど〜も〜。株式会社シー・エス・エスで社内サービス開発を担当しているエンジニアのTBです!  今回は弊社オフィスが移転するということで、引越しついでに今まで管理されていなかった、会社資産である書籍を管理するWebアプリケーションを開発しました。

導入することによって、書籍の貸し出しの履歴追跡が簡単になりました!! 書籍の履歴追跡に関しては、よく話題に上がる技術であるブロックチェーンによって実現しました。 (まあ、物理的に書籍を紛失されたりしたら終わりなんですけどね。。。電子書籍などであれば有用だと思いますが)

Webアプリケーション名は「Bals」!!!

由来は「ラ○ュタ」のアレ

上のロゴは適当に作成したものなので、特に関係は無いです。

今回はブロックチェーン技術を利用したアプリケーションについて解説します!

ブロックチェーンとは?

ブロックチェーンって単語は仮想通貨が流行りだしてからメディアなどでもよく聞くようになりましたよね。 ブロックチェーンは仮想通貨の中核技術として利用されていますが、他のことにも利用できるのではないかと、現在、世の中では様々な試みがなされています。

どのような特徴を持っているかを知っている方々は、まだまだ少ないかなと思いますので、簡単に説明します。

同じものです→ ブロックチェーン = 分散台帳技術(DLT:Distributed Ledger Technology)

現在、送金取引は一般的には、銀行などの信頼できる中央機関が集中管理する台帳に記録されています。 取引を安全に記録するための集中型システムを構築し、冗長化やバックアップ、災害対策のための仕組みなどに莫大なコストをかけています。

これに対してブロックチェーンは、複数の企業・組織で台帳を共有します。 そして、ブロックチェーンの仕組みを巧みに使い、信頼できる第三者に頼ることなく台帳を更新、維持することが可能です。

この特性により、複数の企業にまたがるビジネスプロセスの処理スピードの迅速化や、システム構築や運用コストの削減などが図れると言われています。また、新しいビジネスモデルの創出にも期待されています!

ブロックチェーンの特徴を整理すると、次のようになります。

  • 複数の参加者が、同じ内容の台帳を分散保持できる
  • 台帳間の整合性を維持する仕組み(コンセンサスアルゴリズムというものがありますが長くなるので省きます)により、同じ内容が維持される
  • 中央機関の介在が不要(参加者同士のピア・ツー・ピア(P2P)取引)
  • 暗号技術により、取引の透明性を確保しつつ、署名によりトランザクション(取引)の作成元を特定できる
  • 台帳の1つに障害が発生しても、残りの台帳で業務を継続できる(システム可用性の向上)

ブロックチェーンとは既存の技術を組み合わせた技術!! ブロックチェーン = ピア・ツー・ピア(P2P) + 暗号技術(ハッシュ)

20190613130706

図:ブロックチェーンの仕組み(出典:経済産業省「ブロックチェーン技術を利用したサービスに関する国内外動向調査 報告書(概要)」2016年4月28日)

Webアプリケーションについて

Ruby on Railsで開発しました!

実装した機能は以下となります。

  • 書籍一覧の確認
  • 書籍詳細情報の確認
  • 書籍の登録・編集・削除
  • 書籍の貸出・返却
  • 貸出履歴の確認

機能のポイントとしては

  • 書籍のマスタ情報はGoogle Books APIから取得して利用
  • 書籍の貸出・返却と書籍の登録には端末のカメラから書籍のISBNを読み取るためWebRTCと画像解析を使用
  • ログインにはGoogle APIsを使用
  • バックエンドにはNode.js(Express)のAPIを用意し、ブロックチェーン基盤であるHyperledger FabricへのアクセスをOSSのSDKを用いて行う

環境構成図

リバースプロキシサーバとしてNginxを採用し、外部からのアクセスを3000番(Webサーバ)へ中継。RackアプリケーションサーバーにはUnicorn/Railsを使用し、上述の通りHyperledger FabricへのアクセスにはAPIサーバー(Express)を経由させています。Peerコンテナは書籍情報を共有する企業毎に用意しました!Hyperledger Fabricの構成については、IBMさんが用意しているチュートリアルで説明してくれています!

20190613130819

おわりに

今回ブロックチェーン技術を使用するにあたって、企業間取り引きに強みをもつプライベート型ブロックチェーン基盤である、OSSのHyperledger Fabricを採用しましたが、実際に規模の大きいシステムへの構築・運用には、もう一段上位レベルでブロックチェーンネットワークのシステム・アーキテクチャを策定する必要があると感じました。 具体的には、ブロックチェーンネットワークの機能要件、非機能要件、制約やルール等を考慮して、チャネル構成(ネットワークの分割)、Hyperledger Fabricのコンポーネント構成を決定するべきかなと。

そして、今回のブログですが、概要のみとなってしまいました。技術の詳細情報をもう少し掲載したかったのですが、とても長くなってしまうので、ブログとしてコンパクトにまとめてしまいました。