2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

「ブロックチェーン技術を学びたい」と思いながらも、これまでなかなか行動に移せずにいました。
ローカル環境で 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 gem を入れた Ruby イメージをビルドし、IRB(対話環境)を起動。
  • 起動時に $client が自動で生成され、すぐにノードと RPC でやり取り可能。

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
  • tapyrus を読み込んだ IRB セッションが起動。
  • 起動時に $client が定義されており、すぐに RPC を試せます。

3. 何か試してみる

ノードのブロックチェーン情報が表示されれば接続成功です。

irb
$client.getblockchaininfo

4. クリーンアップ

以下のコマンドで、コンテナとボリュームを削除して、環境を初期化できます。

ターミナル
docker compose down --volumes --remove-orphans

おわりに

本記事では、Tapyrus の dev モードを使ってローカル環境に最小構成のブロックチェーンノードを立ち上げ、Ruby クライアントから接続して簡単な RPC を試すところまでを紹介しました。

Docker Compose を使うことで、複雑なビルドや依存関係を気にせず、手元でブロックチェーンの挙動を確認できるのはとても便利だと感じました。

今回は「まずは Tapyrus を動かしてみる」ことを主な目的としましたが、今後はトランザクション生成など、もう一歩踏み込んだ内容にも挑戦していく予定です。

Tapyrus を通じて、ブロックチェーンの基本を一緒に学んでいきましょう!


資料

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?