Ethereum 学習フロー 0 ~ 1ヶ月目

## 記事の目的
Ethereumの学習を初めて1ヶ月経ったので、今後学習される方のマイルストーンの1つにでもなれば良いなと思いまとめた学習フローです。

## まえがき
自分はプログラミング経験者で、Ruby on Railsでwebアプリケーションが作れる位のスキルで始めました。
webエンジニアの方などプログラミング経験者の方にとっては、敷居それほど高く無く、未知の領域が楽しい感じかなと思います。
逆に、プログラミング未経験の方にとっては、知っておくべき作法やエラー対処などが身についていない状態だと思うので、**未知の領域×未知の領域**みたいな感じになってしまい迷宮入りが濃厚です。
なので独学で学ぶ場合は、お金を払ってプログラミングスクールに入ってレベルアップしてから挑戦するのがオススメかもしれないです。
[テックアカデミーのブロックチェーン講座] (https://techacademy.jp/blockchain-special)もあるらしいです。

## 学習のフローの参考にした記事
1ヶ月前はお世話になりました、ありがとうございました。
[Ethereumの学習フローを整理した] (https://qiita.com/shiki_tak/items/bf080787b9bb3343ae46)
[Solidity学習ヒント集] (https://qiita.com/Yukiya025/items/b0b67c44b2878998015c)

# 学習フロー
## 1- Ethereumに触れる
[Ethereum入門] (https://book.ethereum-jp.net/)のサイトを参考に、自分のPCにEthereumらをインストールした。
このサイトでethの採掘、コントラクトの記述、フレームワークを使ったデプロイまで、一通りを経験できるのでオススメだと感じた。無料で公開されているのがとても有り難い。
経験者にとっては一番手っ取り早くブロックチェーン感を感じれると思う。。
プログラミングをしたことが無い方にとっては環境構築の部分やコードを記述していく部分が多く、１人で行っていくのは難しそうな印象。手とり足取り教えてくれそうな[テックアカデミーの講座] (https://techacademy.jp/blockchain-special)とかが良さそうだと感じた。最初は眺める程度がオススメ。

## 2- Solidityに触れる
Qiitaでも多くの方がおすすめされている[cryptozombies] (https://cryptozombies.io/jp/course)で学習を進めていった。
Progateのsolidity版みたいな感じ。ブラウザ上でコードを実行していく。ゾンビ可愛い。
solidityの構文は一通り押さえている感じ。書籍を参考に記述してくと写経が少し面倒だと感じてしまう自分にとってはとても嬉しかった。
日本語対応しているので、スッとイケる。フランクな翻訳が良い。

## 3- Contractを実際に書いていく
amazonで購入した[堅牢なスマートコントラクト開発のためのブロックチェーン] (https://www.amazon.co.jp/%E5%A0%85%E7%89%A2%E3%81%AA%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%B3%E3%83%B3%E3%83%88%E3%83%A9%E3%82%AF%E3%83%88%E9%96%8B%E7%99%BA%E3%81%AE%E3%81%9F%E3%82%81%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%EF%BC%BB%E6%8A%80%E8%A1%93%EF%BC%BD%E5%85%A5%E9%96%80-%E7%94%B0%E7%AF%AD-%E7%85%A7%E5%8D%9A-ebook/dp/B076KYS4ZG/ref=sr_1_2?ie=UTF8&qid=1522552763&sr=8-2&keywords=%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3) を参考にしながらSolidityのサンプルコンタクトの写経をしていく。サンプル数が多いのとセキュリティを意識した記述方法が体験できて良い。webプログラミングとの違いをひしひしと感じる。
Remixがcompile ~ migrationを1画面でできちゃうので使えると、とても便利！
使い方の説明は、[ブロックチェーンアプリケーション開発の教科書] (https://www.amazon.co.jp/%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%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%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E5%8A%A0%E5%B5%9C-%E9%95%B7%E9%96%80/dp/4839965137/ref=sr_1_4?ie=UTF8&qid=1522552763&sr=8-4&keywords=%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3)と[Remixを使って、Smart Contractの開発環境を整えてみた] (https://qiita.com/shiki_tak/items/f169476ecace3bc8d4e4)の記事が丁寧。
## 4- Truffleを触っていく
DappsのフレームワークであるTruffleで実際にコントラクトを動かしていく。
[truffle petshop-tutorial] (http://truffleframework.com/tutorials/pet-shop)を元に学習していった。
合わせて[ブロックチェーンアプリケーション開発の教科書] (https://www.amazon.co.jp/%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%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%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E5%8A%A0%E5%B5%9C-%E9%95%B7%E9%96%80/dp/4839965137/ref=sr_1_4?ie=UTF8&qid=1522552763&sr=8-4&keywords=%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3)も用いた。シンプルなサンプルコードだが、テストやデプロイまで一通り出来るのが良い。説明が丁寧。
web3.jsに慣れるのに試行錯誤が必要。コンソールからコントラクトの関数を呼び出すのが少し慣れが必要。
functionとthen地獄でワタワタしちゃう。
簡単な構成のDappsだと作れそうだと感じるが、そこから応用させていくのが未だ自分には難しそうな印象。
Reactやるぞ〜〜という感じ。

## 5- その他
### Qiitaのアドベントカレンダーを読んでみる
[Qiitaのアドベントカレンダー] (https://qiita.com/advent-calendar/2017/ethereum)
一通り勉強してみるとアドベントカレンダーを読めるようになってくるので、読んでみるのがおすすめです。


### 自作コントラクトの作成
なんとなく理解ができてきたら、そろそろ自分でコントラクトを作っても良いかもしれない。
[今作っている] (https://github.com/oyaoyaoya/couplePromise)のは、
カップル間で約束を作成し、その約束にお互いにトークンを預けて、後日その約束が守れたらトークンを返却し、守れなかったら没収 or 守れた側に付与するDapps。
中々上手く行かないなあという感じ。

## 6- 1ヶ月で分かったこと
- スマートコントラクト面白い。
  - お金の流れを自然に、かつカジュアルにアプリケーションに組み込めるのが面白い。
  - アカウントを作る必要が無さそうなのが良い。addressがアカウント代わりっぽい。ユーザビリティのためのアカウント的なのはありそう。
  - 自分でルールを作れるのが面白い。webアプリケーションが現実の行為をインターネットにコピペするものだとすると、ルールをインターネットにコピペ出来るものだと実感。(スマートコントラクトの字面まんま)
- 慣れない事が多い
 - 当たり前だけど、RDBじゃないからデータの表し方がむずい。
 - どのデータをブロックチェーンに保存して、どのデータをDBに保存するのかとか。データの分け方も大事そう。
 - 情報の量があまり多くないので、なんだか楽しい。手探り感。

## 7- 今後
- 内定先に入社する9月まで暇なので、月に10万円ほど稼ぎつつフットワーク軽く勉強していきたい。(実家最高!!&感謝)
- なにか仕事がありましたら、ご紹介頂けるととても嬉しいです。真面目に働きます。
- 初Dapps作る
- [ethereum.rb] (https://github.com/EthWorks/ethereum.rb)をやる。Railsに組み込んでみるぞ〜
- オープンソースのプロジェクトをいじってみる。

## 参考ページ
[Ethereum入門] (https://book.ethereum-jp.net/) - ベーシックなEthereumを体験出来る。
[cryptozombies] (https://cryptozombies.io/jp/course) - Solidityを楽しく学べる。
[truffle petshop-tutorial] (http://truffleframework.com/tutorials/pet-shop) - Ethereumのフレームワーク

## 参考書籍
体系的に知識をつける事ができるので、一冊あると良いと思う。

[ブロックチェーンアプリケーション開発の教科書] (https://www.amazon.co.jp/%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%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%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E5%8A%A0%E5%B5%9C-%E9%95%B7%E9%96%80/dp/4839965137/ref=sr_1_4?ie=UTF8&qid=1522552763&sr=8-4&keywords=%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3)

- 表現が分かりやすく、初心者でも飲み込める印象。
- 技術とそれの周りの話があるので、気軽に読める感じ。
- マークルツリーが少し難しかった。
- コードを実行する部分は仕様変更等で自分で修正していく必要がある。対応出来る人にとっては問題ないが、そうではない人にとっては難しそう。[テックアカデミーの講座] (https://techacademy.jp/blockchain-special)とかが良さそう。

--- 
[堅牢なスマートコントラクト開発のためのブロックチェーン] (https://www.amazon.co.jp/%E5%A0%85%E7%89%A2%E3%81%AA%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%B3%E3%83%B3%E3%83%88%E3%83%A9%E3%82%AF%E3%83%88%E9%96%8B%E7%99%BA%E3%81%AE%E3%81%9F%E3%82%81%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%EF%BC%BB%E6%8A%80%E8%A1%93%EF%BC%BD%E5%85%A5%E9%96%80-%E7%94%B0%E7%AF%AD-%E7%85%A7%E5%8D%9A-ebook/dp/B076KYS4ZG/ref=sr_1_2?ie=UTF8&qid=1522552763&sr=8-2&keywords=%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3)

- 端的な説明でコンパクトにまとまっている印象。
- 技術の深そうな所まで説明がある。暗号鍵の章など、急に難しいような話が出てくるので"ウッ"となってしまう。
- セキュリティのサンプルが良いと思う。
- 上の本を読んでから読むのがオススメ。