OmiseGoのeWalletのv1.0.0-pre.1がリリースされました。今回の記事ではeWalletの構築とRuby on RailsからeWalletを利用する方法についてまとめます。
github.com
- 1. eWalleのsetUp
- 2. Ruby on Railsから利用する
- まとめ
eWalletのsetUp方法は、Docker, Vagrant, Bare‑metalの3つ用意されています。今回はBare‑metalでsetUpしていきます。
また、今回の記事はMacOS上でのsetUp方法となります。
基本的には公式のsetUp方法に従って進めていきます。
ewallet/bare_metal.md at master · omisego/ewallet · GitHub
1. eWalleのsetUp
1-1. 必要なlibraryをインストール
homebrewでインストールするもの
PostgreSQL, ImageMagick, Git をhomebrewでインストールします。
$ brew install postgresql, imagemagick, git
nvmをインストールしてnodeの環境を整える
nvmとnode 8.7.0のインストール
以下の記事を参考にnvmとnodeをインストールします。nodeのバージョンは僕は8.7.0を利用しました。(というか他のプロジェクトで使っていたので流用)
qiita.com
yarnのインストール
homebrewでもインストールできますが今回はnpmでインストールします。
$ npm install -g yarn
exenvを利用してElixir 1.6.5をインストール
brewでインストールすると最新バージョンの1.7.1がインストールされますが、現状(2018/07/30)のeWalletはelixir 1.7.0以降でbuildするとcompile時にwarningが発生してbuildに失敗します。
バージョン1.6.5ではwarningが出ずにbuildが完了するので今回はElixirのバージョン管理ができるexenv経由でElixirを入れる事にします。
(warnings-as-errosオプションをoffにしてもこの問題を回避できます。)
という事で以下の記事を参考に、Erlangとexenvをインストールします。
qiita.com
elixir 1.6.5のインストール
上記記事を参考に以下のexenv経由でインストールします。
exenv install -l exenv install 1.6.5 exenv global 1.6.5
1-2. リポジトリのチェックアウト
必要なライブラリの準備は終わったのでeWalletをbuildしていきます。
公式の手順に従ってeWalletのリポジトリをチェックアウトします。
git clone https://github.com/omisego/ewallet && cd ./ewallet
1-3. Elixirの依存ライブラリをインストール
mix deps.get
1-4. admin panelの依存ライブラリをインストール
(cd apps/admin_panel/assets/ && yarn install)
1-5. 環境変数の設定
設定可能なパラメータは公式を参照してください。
1.3-configure-environment-variables
僕はデフォルトで問題なかったので特に設定変更はしていません。
1-6. DBのマイグレーション
DBマイグレーションをする前にpostgresqlを起動してください。postgresqlの起動方法等は以下の記事が参考になります。
qiita.com
その後、公式にある通り以下のコマンドでdb schemeの作成、テーブル作成を行います。
mix do ecto.create ecto.migrate
テスト用のDBも作成します。
MIX_ENV=test mix do ecto.create, ecto.migrate
1-7. testの実行
elixirのバージョンやDBのmigrationが正常かチェックするためにtestを実行します。
mix test
テストが実行できない場合はelixirのバージョンを確認してください。テストの失敗が多い時はDBの初期化に失敗している可能性が高いです。
1-8. 初期データを投入
seedデータを投入します。今回は以下のコマンドでsampleデータも一緒に投入します。
mix do seed --sample
注意:公式ではmix do ecto.seedとなっていますが、実際は mix do seed です。
mix do seedすると、admin panelへログインするためのメールアドレスとパスワードの入力を求められます。これは後で使うので覚えておいてください。
seedをやり直したい場合は以下のコマンドでdbを作り直してseedをやり直せます。
mix do reset mix do seed --sample
1-9. eWalletの起動
mix do omg.server
上記コマンドでewalletが起動します。
http://localhost:4000 を表示した時に、{status:true}が表示されたら正常に起動しています。eWalletでは以下の3つの機能にアクセスできます。
- admin panel: http://localhost:4000/admin
- eWalletの設定は全てここで行います。
- swagger of admin api: http://localhost:4000/api/admin/docs.ui
- eWalletのadmin用のREST apiのdocsです。主にserver側のアプリを作る時に利用します。
- swagger of client api: http://localhost:4000/api/client/docs.ui
- eWalletのclient用のREST apiのdocsです。主に専用walletを作成する時に利用します。
2. Ruby on Railsから利用する
OmiseGo eWalletは以下の3つの言語用のeWallet SDKが用意されています。
今回はRuby向けのSDKを用いて先ほど起動したeWalletへ接続してみたいと思います。
今回も公式のドキュメントを元に進めていきます。
github.com
ゴールとしてはsampleデータとして準備されているtransactionの一覧を表示するまでとします。
2-1. Ruby on Railsの環境構築
まずは以下の記事などを参考にしてRuby on Railsの環境を構築してください。
qiita.com
2-2. omisego のgemをインストール
Gemfileをひらいて以下の2行を追加します。
# use omiseGo SDK gem 'omisego'
その後、bundle installしてomisegoのgemをインストールします。
bundle install
これで、OmiseGo eWalletが用意しているREST APIとデータをオブジェクト経由で扱えるようになります。
2-3. access key, secret keyを発行する。
外部アプリからeWalletのadmin apiにアクセスするためには、eWalletで発行されたaccess keyとsecret keyが必要です。
ので、このaccess keyとsecret keyをeWalletから発行します。
eWalletにログイン
まずはeWalletのadmin panel(http://localhost:4000/admin)にログインしてdashboardを開きます。
2-4. Ruby on Rails App から eWalletへ接続するための設定ファイルを作成する
次にRuby on RailsからeWalletの各種REST APIを呼び出せるようにするために、接続設定を行っていきます。
config/initializers/omisego.rbを作成
以下の内容でconfigを作成します。この時に、2-3で生成したaccess keyとsecret keyを入力します。
# ここではとりあえず動かすことを目的にしてます。正式運用する場合は公式ドキュメントに書いてあるようにaccess keyとsecret keyは環境変数から読み込むようにしましょう。
# config/initializers/omisego.rb OmiseGO.configure do |config| config.access_key = 2-3で作ったaccess key config.secret_key = 2-3で作ったsecret key config.base_url = localhost:4000 end
2-5. 一覧ページの作成
routing, controller, viewを一から作るのは大変なので今回はrailsのscaffoldを利用して作成します。
scaffoldでtransaction用の各種ページを生成
bundle exec rails g scaffold transaction
db:migrateの実行
scaffoldではActiveModelも自動で作られるためdb:migrateをする必要があります。今回はDBは使いませんがエラーになるのでdb:migrateしてテーブルを作成します。
bundle exec rake db:migrate
controllerでeWalletのtransaction一覧を取得
app/controllers/transactions_controller.rbの7行目を以下のように変更します。
class TransactionsController < ApplicationController before_action :set_transaction, only: [:show, :edit, :update, :destroy] # GET /transactions # GET /transactions.json def index @transactions = OmiseGO::Transaction.all.data # これに書き換える end
index.html.erbでtransactionの内容を表示
app/views/transactions/index.html.erbの内容を以下のように書き換えます。
<p id="notice"><%= notice %></p> <h1>Transactions</h1> <table> <thead> <tr> <th>id</th> <th>idempotency_token</th> <th>from</th> <th>to</th> </tr> </thead> <tbody> <% @transactions.each do |transaction| %> <tr> <td><%= transaction.id %></td> <td><%= transaction.idempotency_token %></td> <td><%= transaction.from.address %>, <%= transaction.from.amount %>, <%= transaction.from.token["id"] %></td> <td><%= transaction.to.address %>, <%= transaction.to.amount %>, <%= transaction.to.token["id"] %></td> <!-- <td><%#= link_to 'Show', transaction %></td>--> <!-- <td><%#= link_to 'Edit', edit_transaction_path(transaction) %></td>--> <!-- <td><%#= link_to 'Destroy', transaction, method: :delete, data: { confirm: 'Are you sure?' } %></td>--> </tr> <% end %> </tbody> </table> <br> <%= link_to 'New Transaction', new_transaction_path %>
このページで表示するtransactionはOmiseGO::Transactionであり、ActiveModelを継承していないので、Show, Edit, Destroyのリンク生成に失敗するため、各種リンクをコメントアウトしています。
2-5. Transaction一覧をブラウザで表示してみる
編集が全て終わったら、rails sでサーバを起動してhttp://localhost:3000/transactionsにアクセスするとtransactionの一覧が表示されると思います。
まとめ
今回はbare-metalでeWalletの環境を構築しましたが、dockerやvagrantを使う方が環境差異に悩まされなくて済むのでオススメです。
運営としてもできるだけ簡単にテストしてfeedbackを得られるようにするために、stagingサーバを準備中とのことでした。なので運営が用意したstagingサーバを利用するのもありと思います。
今回はgetting startedな内容のみです。eWalletを使うとすでに運営中のECサイトにTokenでの支払い方法を追加したりといったことが簡単に行えるそうです。
eWalletのバージョンアップに伴い、仮想通貨だけでなく既存の電子決済の仕組みも統合されていくとのことで非常に楽しみです。