ブロックチェーンの学習でやってみたこと

# 記事の内容
私は現在、R&D部門でブロックチェーンを使用した研究開発に従事しています。
ただ、現職に就いてからはまだ日が浅く、ブロックチェーンの学習を始めてからは２年ほどになります。
学習し始めた当初は身近にブロックチェーンの学習をしている人が居なかったので完全に独学での学習でした。
今後、ブロックチェーンの学習を始める方へ何かヒントになればと思い、これまでにやってきたことを纏めました。

# 書籍による学習
ブロックチェーンに関する書籍はかなり多いですし、何から学べば良いのか分からないという方は非常に多いと思います。
まず始めたのは、ブロックチェーンとは？を学べる書籍です。
その後、実際に手を動かす本やブロックチェーンを使ったビジネスに関する書籍を読んでいくと良いかと思います。
## ブロックチェーンに関する学習
私が読んだ本からしか紹介が出来ませんが、以下２冊は良かったです。

[徹底理解ブロックチェーン　ゼロから着実にわかる次世代技術の原則](https://www.amazon.co.jp/dp/B07F3MTXY4/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)
ブロックチェーンの技術的な説明や課題、その対応などが纏められていて有用な一冊だと思います。
外国で出版されたものの翻訳書であるため、若干表現が分かり辛い部分がありますが、良い本だと思います。

[WHY BLOCKCHAIN なぜ、ブロックチェーンなのか？](https://www.amazon.co.jp/WHY-BLOCKCHAIN-%E3%81%AA%E3%81%9C%E3%80%81%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%AA%E3%81%AE%E3%81%8B%EF%BC%9F-%E5%9D%AA%E4%BA%95-%E5%A4%A7%E8%BC%94-ebook/dp/B07T9KS6NY/ref=pd_vtp_351_3/356-8396201-4235655?_encoding=UTF8&pd_rd_i=B07T9KS6NY&pd_rd_r=64f23032-371b-496d-8348-a8b843b758e5&pd_rd_w=LnEgL&pd_rd_wg=dfG52&pf_rd_p=5f6afeed-4550-4672-8ec8-11f175f1f328&pf_rd_r=2Y7V1DTFZFK2X820NAC4&psc=1&refRID=2Y7V1DTFZFK2X820NAC4)
暗号通貨などを使用する領域ではなく、エンタープライズ領域でブロックチェーンの活用方法を探りたいと考えている方にとっては必読の１冊と言えると思います。
なぜ、ブロックチェーンでやるのか？というのは未だにカンファレンスなどに参加すると質問が上がります。
そのヒントがこの書籍から学べると思います。
著者の坪井氏の講演を一度拝聴したことがありますが、「ブロックチェーンは手段だ」と仰っていました。
その考えも理解が深まると思います。

## ブロックチェーンビジネスに関する学習
ブロックチェーンビジネスに関する学習ですが、ブロックチェーンがエンタープライズ領域でどう使われているかを知る必要があります。
これに関しては書籍による学習も良いですが、出版時までの情報しか得ることが出来ません。
その為、日頃から国内外の事例を収集する必要があります。

### 書籍による学習
書籍を読むのであれば、こちらは事例が豊富で参考になりました。
[未来IT図解　これからのブロックチェーンビジネス](https://www.amazon.co.jp/%E6%9C%AA%E6%9D%A5IT%E5%9B%B3%E8%A7%A3-%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89%E3%81%AE%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9-%E6%A3%AE%E5%B7%9D-%E5%A4%A2%E4%BD%91%E6%96%97-ebook/dp/B07JN4ZSL9/ref=pd_aw_sbs_351_5/356-8396201-4235655?_encoding=UTF8&pd_rd_i=B07JN4ZSL9&pd_rd_r=37435a13-2fb0-42ea-9cb0-e20243457525&pd_rd_w=8CXQn&pd_rd_wg=WaqiW&pf_rd_p=1893a417-ba87-4709-ab4f-0dece788c310&pf_rd_r=WVBE006B9VK0JW5CQJYY&psc=1&refRID=WVBE006B9VK0JW5CQJYY)

### ニュースメディアによる情報収集
以下、私が情報収集に使用しているニュースメディアです。

- [仮想通貨Watch](https://crypto.watch.impress.co.jp/)
- [BITTIMES](https://bittimes.net/tag/blockchain)
- [COINPOST](https://coinpost.jp/)
- [BLOCKCHAIN-BUSSINESS](https://blockchain-business.jp/)
- [Blockchain Biz](https://gaiax-blockchain.com/)

ニュースメディアによって、投稿されている記事の内容がかなり違います。
COINPOSTだと暗号資産に関する情報が豊富だったと特徴があるので、自身の知りたい情報が豊富なサイトを中心に見て回ると良いかと思います。

# メールマガジンによる情報収集
私が読んでいるのは１つだけですが、LayerX社のメルマガに登録しています。
無料で提供されているのが不思議なほど濃い内容が毎週配信されています。

[こちら](https://layerxnews.substack.com/)から登録ができます。

# 教育機関／媒体による学習
ブロックチェーンの学習をする方法には学習サイトや教育機関を利用するのも一つの方法だと思います。
## FLOCブロックチェーン大学校
私はここでエンジニアコースとビジネスコースを受講していました。
受講料は1コース20万強、計40万強掛かります。

あくまでも私個人の感想です。
エンジニアコースはブロックチェーンのエンジニアコースと銘打っていますが、学習する内容はbitcoinのみです。
bitcoinの暗号化技術の歴史や詳細な実装方法が学べます。
恐らくですが、取引所やbitcoinのLayer2技術開発に携わらない限りはこのコースで学んだことは活かせないと思います。

ビジネスコースはブロックチェーンを専門で扱っている企業の方による事例解説が主となります。
講師として登壇される方は色々なところで講演をされていたりするので、こちらも他の場所で聞くチャンスはあるかなと思います。

その他、基礎コースとスマートコントラクト開発コースがあるようですが、こちらは受講していないので内容が分かりません。
私の場合ですが、こういったビジネススクールによる学習を会社で支援する制度はありませんでした。
ただし、こういった自己投資を会社から評価して貰えたことにより給与のベースアップが大幅に行われました。
それで、なんとか投資金額はペイ出来たかなという感じです。

## PoL
[ブロックチェーン学習サイトPoL](https://pol.techtec.world/)
学歴ではなく"学習歴"というコンセプトにブロックチェーンの学習を行えるPoL（Ploof of Learning）です。

ブロックチェーンの基礎的な学習を体系的に学ぶことが出来ます。
無料で学習が出来ますし、スマホでも学習が出来るので通勤時間などの空き時間に学ぶのに丁度良いサイズのカリキュラム構成となっています。
個人的にはブロックチェーンの学習を始める場合、無料で体系的に学べますので、PoLから始めてみると良いと思っています。

## edX
edXという学習サイトでもブロックチェーンに関する学習が出来ます。[こちら](https://www.edx.org/course/hyperledger-sawtooth-for-application-developers-2)
ただし、全て英字ということと、Hyperledger Sawtoothというブロックチェーンの学習内容になります。
Sawtoothを学ぶ場合、体系的に学ぶことが出来るため良いと思いますが、私は英語が出来ないので断念しました。

# 手を動かして学ぶ
やはり、手を動かして学ぶに限ります。
ブロックチェーンも色々と種類がありますので、それぞれでのブロックチェーンでやったことを書いていきます。

## Ethereum
### 書籍による学習
何冊か読んでみた本の中では以下の書籍が良かったです。
[ブロックチェーンアプリケーション開発の教科書](https://www.amazon.co.jp/dp/B0794WJYGW/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)
Solidityの基本的な書き方やtruffleを使ったコントラクトデプロイ、実行の方法を体系的に学べるところが良いです。

### 独自トークンの発行
一通り書籍などで学習をした後はERC20トークンなどを発行するコントラクトなどを書いてみました。
こちらはQiitaに情報がたくさん上がっています。

### トークン／ethの送信Webアプリ
EthereumのSDKを使って作成したコントラクトを実行するようなWebアプリを作ってみました。
SDKは色々な言語で提供されていますが、私はJavaを使って開発をしてみました。

参考
[[Ethereum]web3jを使ってコントラクトを実行する方法～その２～](https://qiita.com/bc_yuuuuuki/items/675f8cc2b7c4435d3c82)

トークン送金のアプリであれば、一から始めても一週間ほどで出来ると思います。
これを作ってみることで、ブロックチェーンを使ったアプリケーションのイメージが湧き
、非常に有意義なものになると思います。

### Solidityの応用
応用としてはSolidityを使ったデザインパターンを学習をしています。
残念ながら日本語の情報はまだまだ少ないですが、海外のサイトなどを見ながら学習するとよいと思います。
[Solidity-patterns](https://fravoll.github.io/solidity-patterns/)

デザインパターンを学習することで、どういったところにブロックチェーンを使うべきかのヒントを得ることが出来ます。
また、Solidity自体の知識を深めることが出来ます。

### Solidityは結局どのバージョンを学ぶべきか？
正直私も教えてほしいです。
学習当初は書籍を何冊か買ってみましたが、全部Solidityのバージョンが異なるので困惑しました。
書籍を１冊買ったら、新たに書籍などを買って学習する必要はないという考えです。
メジャーバージョンが上がった場合は公式ドキュメントを見たり、Qiitaに纏められている情報を見て学習しました。
その他、自分で作ったSolidityのコードをRemixでsolcの別バージョンでコンパイルを通してみると良い勉強になります。

### 環境構築
ethereumをプライベートで使う想定でいたので、仮想環境を複数構築し、ネットワークにノードの追加などを行いました。
トランザクション発行で正しく伝播される様子などを学ぶと良いと思います。

## Hyperledger Fabric
Fabricの学習が正直一番しんどい。（環境構築的に。。）
### 書籍による学習
とりあえず、この本で学習しました。
[～ブロックチェーンの革新技術～ Hyperledger Fabricによるアプリケーション開発](https://www.amazon.co.jp/%EF%BD%9E%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%AE%E9%9D%A9%E6%96%B0%E6%8A%80%E8%A1%93%EF%BD%9E-Hyperledger-Fabric%E3%81%AB%E3%82%88%E3%82%8B%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-%E6%97%A9%E5%B7%9D%E5%8B%9D-ebook/dp/B07JNY46ZS/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=Hyperledger+Fabric&qid=1583910988&s=digital-text&sr=1-1)

Fabricの構成要素を体系的に学ぶには良いと思います。
ただ、環境構築やコードをそのまま動かすのは難しいです。

公式サンプルを読む方が良いかと思います。

### Go言語の学習
↑の書籍でchaincodeを書くにはそもそもGo言語を学ばないと書けないということが分かったので、以下の書籍で学習しました。
[The Go Programming Language](https://www.amazon.co.jp/Programming-Language-Addison-Wesley-Professional-Computing-ebook/dp/B0184N7WWS/ref=sr_1_6?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E+Go&qid=1583911477&s=digital-text&sr=1-6)
何故かAmazonで日本語版が出てこないのですが、日本語の翻訳版で学習しました。
入門書ではないですが、非常に良い本です。
学生時代にC言語の学習をしていたのですが、プログラミング言語Cの著者であるカーニハン氏が著者だったのでこの本を選びました。

### 環境構築
公式のドキュメントを見ながら環境構築を行い、fabcarサンプルなどを動かしてみました。

ただ、環境構築の難易度が高すぎるというのが率直な感想です。
環境の詳細な設定などを学ぶ必要のある人は自前で環境を構築してみると良いと思います。
アプリの開発に専念したい方はBaaSでさくっと構築すると良いと思います。

AWSとAureを使ってみましたが、Fabricの開発環境を簡単に構築したというだけであれば、個人的にはAWSのBlockchain Templateを利用するとよいと思います。
私はAWS、Azureともに個人の学習程度でしか触ったことがありませんが、使い方の難易度と料金体系の分かりやすさからAWSの方が良いと感じました。

## Hyperledger Iroha

irohaについて学習したことです。
ethereumやFabricに比べると情報は少ないです。

### 環境構築
環境は公式ドキュメントを見ながら作りました。
かなり簡単に環境を作ることが出来ます。
まあ、公式のドキュメントでもそれが売りだと書いてありますしね。

### 適当にコマンドを打って使ってみる
これも公式ドキュメントを見ながらトランザクション送信やブロック情報を確認したりなど、基本的な動作検証を行いました。
Iroha-CLIが対話形式で操作出来るため、さほどコマンドで悩むことはないと思います。

### ユーザー権限周りの操作
一通りコマンド操作を使ってみた後は、ユーザー権限周りの動きを確認しました。
irohaの良さはユーザーの権限を柔軟にコントロール出来る所にあります。
そのため、Irohaについて学ぶのであれば権限周りの仕組みを学ぶことは必須と言えるでしょう。

### Iroha SDKを使ってみる
Iroha SDKはJavaとPythonを使ってみました。
簡単に使えるのは圧倒的にPythonでした。
Javaについては環境を作るのにかなり苦戦しましたので、やってみたことは記事として纏めています。

[Hyperledger IrohaのJavaSDKを使ってみる](https://qiita.com/bc_yuuuuuki/items/fccd975666b5ca79ec74)
[Hyperledger IrohaのJava SDKでブロック情報を取得する](https://qiita.com/bc_yuuuuuki/items/700cb2853c2c05c9bd9a)

### Hyperledger Explorer
Hyperledgerプロジェクトの中にエクスプローラー機能に関するプロジェクトがあります。
こちらの環境構築を試みてみましたが、どうもまだIrohaには対応していないようです。

### 書籍
最近Irohaの書籍が発売されました。
立ち読み程度でしか目を通していませんが、irohaの入門には最適の一冊だと思います。

[Hyperledger Iroha入門 ―ブロックチェーンの導入と運営管理](https://www.amazon.co.jp/Hyperledger-Iroha%E5%85%A5%E9%96%80-%E2%80%95%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%AE%E5%B0%8E%E5%85%A5%E3%81%A8%E9%81%8B%E5%96%B6%E7%AE%A1%E7%90%86%E2%80%95-%E4%BD%90%E8%97%A4%E6%A0%84%E4%B8%80-ebook/dp/B084JP1M9B/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=Hyperledger+Iroha&qid=1583967774&s=digital-text&sr=1-1)

## Hyperledger Sawtooth
sawtoothについてはとりあえず動かしてみた程度でしか学習していません。

こちらもやったことは纏めていますので、何か参考になれば幸いです。

[Hyperledger-Sawtoothのチュートリアルをやってみる](https://qiita.com/bc_yuuuuuki/items/c743c92df03255f6df60)
[Hyperledger-Sawtooth-Sethの環境構築をする](https://qiita.com/bc_yuuuuuki/items/b0b4ab272a0c9814786d)


# その他情報収集
## 勉強会
暗号通貨関係やエンタープライズどちらも活発に勉強会が行われています。
勉強会は[connpass](https://connpass.com/)で検索すると簡単に見つかるので気軽に参加出来ます。

その他、大手SIerが主催の勉強会も多数開かれています。
こちらは、[Tech Play](https://techplay.jp/)などで探すと割と見つかります。

## Twitter
Twitterでブロックチェーン関係のキーワードで検索して見つかった方をフォローしました。

業界の第一線で活躍されている方が多数見つかります。
そういった方々が発信する情報を押さえておくだけでもかなり勉強になります。

# まとめ
ブロックチェーンは発展途上の技術なのでどんどん新しいものが出てきます。
如何にして新しい情報をキャッチアップしていくのかが大事ですね。

国内のブロックチェーンエンジニアの数はまだまだ少ないと思います。
AIやIoTなどの方がとっかかりはイメージし易いですし、情報は豊富ですね。
これからブロックチェーンエンジニアの需要が増えていくことが予想されていますし、今学んでいるものを積極的にアウトプットして、今後参入するエンジニアの敷居を下げていく必要があると思いながら日々学習しています。

この情報もこれからブロックチェーンを学ぶ方の助けになれば幸いです。