はじめに
「ブロックチェーン技術を学びたい」と思いながらも、これまでなかなか行動に移せずにいました。
ローカル環境で Tapyrus ブロックチェーンを触ってみることで、「ブロックチェーンとは何か?」を体験しながら学んでいきます。
本記事では、Tapyrus の dev モードを使って、最小構成の Docker Compose 環境を構築する手順をまとめます。
Tapyrus とは
Tapyrus は、Bitcoin をベースにしたオープンソースのブロックチェーンプラットフォームです。日本の企業 Chaintope によって開発されており、企業や自治体での実用を想定した設計が特徴です。
主な特徴
- オープンソース: Bitcoin をフォークし、独自機能を追加
- ハイブリッド設計: 制御されたネットワークで運用しつつ、透明性も確保
- カスタムトークン:
OP_COLOR
による独自トークンの発行が可能
資料
手元の環境
今回の動作確認は、以下のローカル環境で行いました。
- OS:LMDE 6(Linux Mint Debian Edition)
- Docker:28.2.2
- Docker Compose:v2.36.2
- シェル:bash
- その他:インターネット接続(イメージ取得のため)
※ Docker 環境があれば、macOS や WSL2 でも同様に動くはずです。
Tapyrus 環境構築の概要
今回は Tapyrus の dev モード(開発・テスト用モード)を使って、単一ノード構成の最小ブロックチェーン環境を Docker Compose で構築します。
短時間でセットアップでき、動作確認や RPC の試行にも便利です。
以下のようなディレクトリ構成を前提として進めます:
├── docker-compose.yml # Tapyrus ノードと Ruby クライアントを定義
├── tapyrus.conf # ノードの設定ファイル(dev モード用)
├── data/ # ブロックチェーン・ウォレットの永続化領域
└── tapyrus-client/
└── Dockerfile.dev # tapyrus gem を含んだ Ruby IRB 環境
この環境はすべてローカルで完結しており、他のノードやインターネットへの常時接続も不要です。
外部ネットワークとつながない単一ノード構成なので、自分のマシンだけで安全にブロックチェーンを試せます。
docker-compose.yml
の内容
ここでは、Tapyrus ノード(tapyrusd
)と、Ruby 製クライアント(tapyrus-client
)の 2 つのサービスを定義しています。
services:
tapyrusd:
image: tapyrus/tapyrusd:v0.6.1
ports:
- "2377:2377"
environment:
GENESIS_BLOCK_WITH_SIG: |
0100000000000000000000000000000000000000000000000000000000000000000000002b5331139c6bc8646bb4e5737c51378133f70b9712b75548cb3c05f9188670e7440d295e7300c5640730c4634402a3e66fb5d921f76b48d8972a484cc0361e66ef74f45e012103af80b90d25145da28c583359beb47b21796b2fe1a23c1511e443e7a64dfdb27d40e05f064662d6b9acf65ae416379d82e11a9b78cdeb3a316d1057cd2780e3727f70a61f901d10acbe349cd11e04aa6b4351e782c44670aefbe138e99a5ce75ace01010000000100000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0100f2052a010000001976a91445d405b9ed450fec89044f9b7a99a4ef6fe2cd3f88ac00000000
volumes:
- ./tapyrus.conf:/etc/tapyrus/tapyrus.conf
- ./data:/root/.tapyrus
tapyrus-client:
build:
context: ./tapyrus-client
dockerfile: Dockerfile.dev
depends_on:
- tapyrusd
environment:
TAPYRUS_RPC_HOST: "tapyrusd"
TAPYRUS_RPC_PORT: "2377"
TAPYRUS_RPC_USER: "rpcuser"
TAPYRUS_RPC_PASSWORD: "rpcpassword"
tty: true
stdin_open: true
各サービスの役割
tapyrusd
(ノード)
- Tapyrus Core の公式イメージを使って、dev モードのノードを起動。
-
GENESIS_BLOCK_WITH_SIG
により、初期ブロック生成を省略し即起動。 -
tapyrus.conf
で各種設定を行い、ブロックチェーンデータは./data
に永続化。
tapyrus-client
(Ruby クライアント)
tapyrus-client/Dockerfile.dev
の内容
Tapyrus に接続するための Ruby クライアント用 Docker イメージは、以下のような構成になっています。
FROM ruby:3.4.2-slim
RUN apt-get update -qq && apt-get install -y --no-install-recommends \
build-essential \
libssl-dev \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
RUN gem install tapyrus -v "~> 0.3.9" --no-document
RUN cat << 'EOF' > /root/.irbrc
require 'tapyrus'
$client = Tapyrus::RPC::TapyrusCoreClient.new(
schema: 'http',
host: ENV.fetch('TAPYRUS_RPC_HOST') { abort "Missing ENV[TAPYRUS_RPC_HOST]" },
port: ENV.fetch('TAPYRUS_RPC_PORT') { abort "Missing ENV[TAPYRUS_RPC_PORT]" },
user: ENV.fetch('TAPYRUS_RPC_USER') { abort "Missing ENV[TAPYRUS_RPC_USER]" },
password: ENV.fetch('TAPYRUS_RPC_PASSWORD') { abort "Missing ENV[TAPYRUS_RPC_PASSWORD]" }
)
puts "→ $client ready (#{ENV['TAPYRUS_RPC_HOST']}:#{ENV['TAPYRUS_RPC_PORT']})"
EOF
CMD ["irb", "-r", "tapyrus"]
各ステップの説明
ベースイメージの選定
-
ruby:3.4.2-slim
を使用(軽量で必要最小限)。 - C 拡張ビルド用に
build-essential
,libssl-dev
を追加。
tapyrus
gem の導入
- RPC クライアントとして
tapyrus
をインストール。
.irbrc
による初期化
-
IRB 起動時に
$client
を自動生成。 - 接続情報は環境変数から取得。
IRB の起動設定
-
CMD
によりtapyrus
読み込み済みの IRB を起動。 -
$client.getblockchaininfo
などがすぐ使える状態に。
tapyrus.conf
の内容
Tapyrus ノードの dev モード動作用の設定ファイルです。
以下のような内容になっています:
networkid=1905960821
dev=1
[dev]
server=1
keypool=1
discover=0
bind=127.0.0.1
rpcuser=rpcuser
rpcpassword=rpcpassword
rpcallowip=0.0.0.0/0
rpcport=2377
各設定項目の説明
ネットワーク設定
-
networkid=1905960821
開発用ネットワーク ID。GENESIS_BLOCK_WITH_SIG
と一致させる必要あり。 -
dev=1
dev モードを有効化(ジェネシスブロック自動インポートなどが有効に)。
dev セクションの設定
-
server=1
JSON-RPC を有効化。外部からコマンドを受け付けられるように。 -
keypool=1
鍵を事前生成しておき、getnewaddress
の待ち時間を削減。 -
discover=0
ピア探索を無効化。単一ノード構成向け。 -
bind=127.0.0.1
ノードのバインド先。ローカルホスト内の通信のみ許可。
RPC 認証・接続設定
-
rpcuser
/rpcpassword
RPC のユーザー名・パスワード。Docker 側の環境変数と一致させる必要あり。 -
rpcallowip=0.0.0.0/0
全ての IP を許可(※ dev モード限定で想定)。 -
rpcport=2377
JSON-RPC の待ち受けポート。docker-compose.yml
のポートと合わせる。
動作確認・操作例
セットアップが完了したら、以下の手順で Tapyrus ノードを起動し、Ruby クライアントから接続してみましょう。
1. ノードを起動
docker compose up tapyrusd
- Tapyrus ノードが dev モードで起動します。
-
GENESIS_BLOCK_WITH_SIG
により、ブロックチェーンが即座に初期化されます。 - RPC サーバがポート
2377
で待ち受け状態になります。
2. Ruby クライアントを起動
別ターミナルで以下を実行:
docker compose run --rm tapyrus-client
3. 何か試してみる
ノードのブロックチェーン情報が表示されれば接続成功です。
$client.getblockchaininfo
4. クリーンアップ
以下のコマンドで、コンテナとボリュームを削除して、環境を初期化できます。
docker compose down --volumes --remove-orphans
おわりに
本記事では、Tapyrus の dev モードを使ってローカル環境に最小構成のブロックチェーンノードを立ち上げ、Ruby クライアントから接続して簡単な RPC を試すところまでを紹介しました。
Docker Compose を使うことで、複雑なビルドや依存関係を気にせず、手元でブロックチェーンの挙動を確認できるのはとても便利だと感じました。
今回は「まずは Tapyrus を動かしてみる」ことを主な目的としましたが、今後はトランザクション生成など、もう一歩踏み込んだ内容にも挑戦していく予定です。
Tapyrus を通じて、ブロックチェーンの基本を一緒に学んでいきましょう!