見出し画像

Lisk SDK を使ってブロックチェーンアプリを作りたい ~環境構築編~

はじめに

はじめまして。おひさしぶりです。万博おじです。
今回からブロックチェーンアプリを作ることを目標として記事を書いていきます。
わりとまじめな開発の話とかすると思いますが、どうぞお付き合いください。
※不定期更新


今回の内容

Lisk SDKを使ったアプリを作るための環境構築とサンプルプログラムでの動作確認

記載する環境構築方法は万博おじのやり方なので、慣れている人は随時好きにカスタマイズしてください

開発環境はこの記事を書いている 2019/12/2 時点の内容です。
Lisk SDKのバージョンアップなどにより、環境が変わる可能性があります。
公式ドキュメント:https://lisk.io/documentation/lisk-sdk/setup.html


そもそもLisk SDKってなんぞ?

ブロックチェーンアプリケーションプラットフォームであるLiskのサイドチェーン開発キットです。
[参考]
公式:lisk.io
github:lisk-sdk

Node.jsを使用して開発が可能なので、JavaScriptを使ったことがある人であればすぐに慣れるかと思います。


公式推奨環境

推奨環境は以下の通りです。
[OS]
・Ubuntu 16.04 (LTS) x86_64
・Ubuntu 18.04 (LTS) x86_64
・MacOS 10.13 (High Sierra)
・MacOS 10.14 (Mojave)

[環境]
Node.js 10.15.3
PostgreSQL 10+
Redis (optional) 5+
Python 2

以下から抜粋
https://lisk.io/documentation/lisk-sdk/setup.html

Windows 公式サポートしてないですが、環境が作れれば問題なし。
ちょっとだけ環境構築めんどくせーのと、実際にアプリケーションとして外部公開する際のサーバーレンタル費用がちょっとお高いくらいだよ。


事前準備 (各OS共通)

以下が必要です。
・パソコン (Windows, Mac, Linux系)
・エディタ (Visual Studio Code, IntelliJ IDEA, Atomなど)
Lisk Desktop
・やるぞという気持ち

エディタとLisk Desktopはパソコンにインストールしておきましょう。
やるぞという気持ちは自身にインストールしておきましょう。

※万博おじは Mac & Visual Studio Code を使って開発します。
 開発前はイケイケな気持ちです。


Mac での環境構築

[はじめに]
ターミナルと書かれているものは、標準アプリのターミナルでもエディタに付属のターミナルでもどちらでもOKです。

[注意]
Macのシェルが zsh になっている場合があるので bash コマンドを zsh に置き換えることが出来ない人は bash に戻しときましょう。

※zsh か bash かの確認と変更の方法は以下のQiita記事が分かりやすいです
 catalinaでterminalがzshになったのを一旦bashに戻す方法

1. bash_profile の作成
 ターミナルで以下を入力

ls -a ~

 .bash_profileが表示されなければ以下を入力

touch ~/.bash_profile
.bash_profile が嫌な人は .bashrc
zsh の人は .zshprofile や .zshrc とか好きに作ってください。

2. Xcode を導入
 Mac App Store から Xcode をインストール
 https://apps.apple.com/jp/app/xcode/id497799835

めっっちゃ時間がかかるので、空いている時間にやっておくのを推奨。
最低限の開発環境を自分で導入できるような詳しい人は Xcode は入れなくてもOK
※サイズでかすぎなので、入れなくていいなら入れたくない!

3. Command Line Tools for Xcode の導入
 ターミナルで以下を入力

xcode-select --install
インストールするか聞かれるので素直にインストールしましょう。

4. homebrew の導入
 ターミナルで以下を入力

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
最新のコマンドは https://brew.sh/ の Install Homebrew の下に記載されているコマンド

5. 必要なライブラリの導入
 
ターミナルで以下を入力

brew install autoconf automake libtool
command not found と言われたらターミナルで source ~/.bash_profile と入力。または、ターミナルを終了して再度起動

6. Docker IDを登録
 
Dockerのサイトで登録

「Sign Up for Docker Hub」ボタンから登録

ID、パスワード、メールアドレスを入力すると登録メールアドレス宛に確認メールが届くので認証を行って下さい。
その後、名前や目的の入力を行い登録完了です。

7. Docker Desktop for Macを導入
 
Onboarding Tutorial画面からダウンロード&インストール
スクリーンショット 2019-12-04 23.21.47

※画面右下にNext Stepというボタンがありますが、あくまで使い方の説明なので必ず行う必要はありません。
インストールが終わったら画面を閉じてOKです。

 ※ユーザー登録後にサインアウトしてしまっていたら、Dockerのサイトの右上にあるSign Inをクリックしてサインインしてください。スクリーンショット 2019-12-04 23.28.25
※Docker Hub画面が表示された場合は「Get Started with Docker Desktop」ボタンをクリックするとOnboarding Tutorial画面が開きます。
スクリーンショット 2019-12-04 23.19.47
※DockerイメージファイルがOSと同じ領域に作成されるのが嫌な人は設定からイメージの作成場所を別ディスクにしましょう。 スクリーンショット 2019-12-04 23.41.25
※Dockerのコンポーネントの開始・終了などコマンドでやるのが億劫なひとはKitematicを入れるといいかも。  
スクリーンショット 2019-12-04 23.42.49

8. PostgreSQLを導入
 ターミナルで以下を入力

docker run --name lisk_db -p 5432:5432 -e POSTGRES_USER=lisk -e POSTGRES_PASSWORD=password -e POSTGRES_DB=lisk_dev -d postgres:10
DockerにPostgreSQLを設定します。
コマンドのPOSTGRES_USER, POSTGRES_PASSWORDは本来変えるべきですが、開発環境なのでそのままでもOKです。

9. Node.jsのバージョン管理ツールを導入
 ターミナルで以下を入力

brew install nodebrew
バージョンを変えての開発をするつもりがなければ Node.jsのサイトから直接推奨バージョンを入れてもOKです。

※Lisk公式では NVM を使用していますが、万博おじはnodebrewが好きなのでnodebrewで説明します。

※Node.jsを以前入れたことがある場合はバージョン管理する前に削除する必要があります。方法は以下のQiita記事が分かりやすいです
macにnodebrewをインストールする

10. Node.jsを導入
 ターミナルで以下を入力

nodebrew install-binary 10.15.3
nodebrew use v10.15.3
node -v と入力して 10.15.3 と表示されたらOK
command not found と言われたらターミナルで source ~/.bash_profile と入力。または、ターミナルを終了して再度起動

11. PM2を導入
 ターミナルで以下を入力

npm i pm2 -g
command not found と言われたらターミナルで source ~/.bash_profile と入力。または、ターミナルを終了して再度起動

※npmが一向にcommand not foundとなる場合はNode.jsの導入に失敗している可能性があります。node -vで導入できているか確認しましょう。
それでもだめならとりあえずMac再起動(笑)

12. アプリケーションのソースファイルを入れる為のフォルダを作成
 好きな場所で好きな名前でフォルダを作成

例:デスクトップ/tutorial

13. Visual Studio Codeを起動し、上記で作成したフォルダを開く
 アプリケーションの一覧から起動

別のエディタを入れた人はそのエディタを起動

14. Node.js初期設定
 Visual Studio Code内のターミナルで以下を入力

npm init
色々入力を求められますが、とりあえずEnter連打でOK

※公開することを考えて開発する場合はちゃんと入力しましょう。
もちろん、後から変えられます。

※Visual Studio Code内のターミナルでやる必要はありませんが、開いたフォルダパスが初期パスになるので何かと便利です。

15. Lisk SDKの導入
 Visual Studio Code内のターミナルで以下を入力

npm i lisk-sdk
ようやくLisk SDKにたどり着きました(`・ω・´)

16. Lisk SDKのサンプルコンフィグを元にコンフィグを作成
 1. lisk_sdkフォルダ内のsampleフォルダをコピー
  コピー元
  tutorial
   └ node_modules
     └ lisk-sdk
       └ src
         └ samples  ← コレを

 2. コピーしたフォルダを作成したフォルダの直下にペースト
  コピー先
  tutorial
   └ node_modules
   └ samples ← こう

 3. 名前変更
  tutorial
    └ node_modules
    └ config ← そしてこう

公式ドキュメントにはsamplesのコンフィグをそのまま使用するようになってますが、ずーっとsamplesを使用するのも微妙なので初めて開発する段階からコンフィグは独自で作成する癖をつけましょう。

17. コンフィグの内容を変更
 上記でコピーしたコンフィグファイルには最低限以下の変更をする
 1. config_devnet.json
  "label": "devnet-alpha-sdk",
  → "label": "あなたのアプリケーション名",

 2. genesis_block_devnet.json
  "recipientId": "16313739661670634666L",
  → "recipientId": "好きなLiskアドレス",

genesis_block_devnet.jsonの好きなLiskアドレスは、パスフレーズがわかるアドレスにしましょう。

※DockerにPostgreSQLを導入した際、IDとパスワードを変更している場合はconfig_devnet.json の "storage": { ・・・ } 内にある、 "user" と "password" をそれぞれ変更しましょう。
 "user": "lisk", → "user": "変更したID"
 "password": "password", → "password": "変更したパスワード"

メインネットで使用しているLiskアドレスは使用せず、Lisk DesktopやLisk Mobileなどで別のアカウントを作成しておきましょう。(パスフレーズはメインネット、テストネットで特に分かれているわけではないので、何で作ってもOK)

18. サンプルプログラムを作成
 index.jsを作成し、以下のコードをコピペ

const { Application } = require('lisk-sdk'); 
const { genesisBlockDevnet, configDevnet } = require('./config');
const app = new Application(genesisBlockDevnet, configDevnet); 

app 
   .run()
   .then(() => app.logger.info('App started...'))
   .catch(error => {
       console.error('Faced error in application', error);
       process.exit(1);
   });

フォルダ内は以下のようになっているはず
tutorial
 └ config
 | └ config_devnet.json
 | └ genesis_block_devnet.json
 | └ index.js
 └ node_modules
 └ index.js ← 今作成したのがこれ
 ・・・

19. サンプルプログラムを起動
 Visual Studio Code内のターミナルで以下を入力

pm2 start --name tutorial index.js 
--name の後ろはなんでもいいですが、アプリケーション名やフォルダ名に合わせておくとよいです。
うまくいくと、PM2の稼動状況リストがターミナルに表示されます。

※Modeがforkとなっていても、forkモードでPM2がアプリを起動しているという意味であり、ブロックチェーンがforkしてるわけではないので安心してください。

[PM2のコマンド]
アプリ一覧確認: pm2 list
アプリ停止: pm2 stop リストの番号
アプリ起動(初回起動後): pm2 start リストの番号
ログ参照: pm2 logs リストの番号 ※tailいらずで便利
ログ参照から抜ける: command + C

20. Lisk Desktopで稼働確認
 1. Lisk Desktopを起動後、設定からネットワークスイッチをONスクリーンショット 2019-12-04 23.50.47

 2. サインイン画面に戻る
 3. 画面右上にリストボックスが出現するのでそれをクリック
 4. Custom Nodeのテキストボックスに 127.0.0.1:4000 と入力
 5. Connectedボタンクリックスクリーンショット 2019-12-04 23.54.26

 6. パスフレーズを入力してサインイン

genesis_block_devnet.jsonの変更時に記載したアカウントのパスフレーズを入れた場合、1億LSK保持しているはずです。

アカウントの作成も自由にできますが、メインネットと同じように、そのアカウントで送金を1度行う必要があります。

作成したアカウント宛てにLSKを送金する役割はgenesis_block_devnet.jsonの変更時に記載したアカウントからやりましょう。


Ubuntu での環境構築

lisk-sdk-installer を使って環境構築できます。
使い方はReadme参照

万博おじお手製の環境構築スクリプトです。
スクリプトが正常終了したらMacでの環境構築の
12. アプリケーションのソースファイルを入れる為のフォルダを作成
13. Visual Studio Codeを起動し、上記で作成したフォルダを開く

16. Lisk SDKのサンプルコンフィグを元にコンフィグを作成
以降を実施してください。


Windowsでの環境構築

[はじめに]
Windows Server ですか?
 → 「はい」の方はこの構築方法をご覧ください。
Windows 10 pro ですか?
 → 「はい」の方はこの構築方法をご覧ください。

上記どれでもない方は、Virtual Boxをインストール後、推奨環境にあるUbuntuを導入しUbuntuでの環境構築を参考に構築してください。

1. Hyper-Vの導入
 以下の公式ドキュメントを参考に有効化してください。
 Windows 10 上に Hyper-V をインストールする

2. Docker Desktop for Windowsを導入
 Macでの環境構築の以下を参考に導入してください。
 ・6. Docker IDを登録
 ・7. Docker Desktop for Mac

以降は Macでの環境構築の8. PostgreSQLを導入~ を参考に構築してください。

[Node.jsについて]
バージョン管理する場合、NVM for Windows などを使用
※導入は以下のQiitaの記事がわかりやすいです
nvm-windows 導入

バージョン管理しない場合、Node.jsの公式サイトから10.15.3をインストール


おわりに

これで、Lisk SDKを使ったアプリケーションの開発環境が構築できましたね。
良い開発ライフを! (`・ω・´)b


万博おじについて

万博記念公園と新しいものが好きなプログラムやさん
お金がなくていつもこまっているので支援おねがします(;^ω^)
Twitter:@ys_mdmg
github:lisknonanika
Discord:@mdmg
Lisk:mdmg(5380827711560203827L)

その他加入している非公式コミュニティ
Lisk Japan
・Lisk 情報システム部 (Twitter内グループ)
・Lisk ゲーム部 (Twitter内グループ)

この記事が気に入ったらサポートをしてみませんか?