ソフトウェアエンジニアがChainlinkを導入するメリットとサンプルコード


ソフトウェアエンジニアがChainlinkを導入するメリットとサンプルコード

smartcontractkit/chainlink

2025-09-26

さて、今回は「smartcontractkit/chainlink」について、ソフトウェアエンジニアの視点から、どういうときに役に立つのか、どうやって使うのか、といったことを、キャンプのコントを演じているつもりで、分かりやすく解説していきますね。

ベテランキャンパー(私)
Chainlinkを使いこなす、頼れるエンジニア。

初心者キャンパー(あなた)
ブロックチェーンは知ってるけど、Chainlinkはよく知らないエンジニア。

ベテランキャンパー(私)
よう!今日のキャンプ、いい感じだな!

初心者キャンパー(あなた)
はい!でも、ちょっと聞きたいことがあって...。スマートコントラクトって、ブロックチェーンの外にある情報を使えないんですよね?例えば、今日の天気とか、株価とか...。

ベテランキャンパー(私)
お、いいところに気づいたな!そうなんだ。ブロックチェーンは閉鎖的な世界だから、外の情報は直接持ってこれない。まるで、このキャンプ場の中にいる俺たちが、外のスーパーの今日の特売情報を直接知ることができないのと同じだ。

初心者キャンパー(あなた)
えー、じゃあ、スマートコントラクトで「今日の天気予報が晴れだったら、キャンプ参加者にボーナスを配る」みたいなことはできないんですか?

ベテランキャンパー(私)
普通はできない。でも、それを可能にする「橋」があるんだ。それが、この「Chainlink」ってやつさ!

「smartcontractkit/chainlink」は、分散型オラクルネットワークのノードを動かすためのソフトウェアなんだ。

オラクルっていうのは、スマートコントラクトに外部の情報(オフチェーンデータ)を安全に提供する役割を持つ、いわば「情報伝達役」だ。

Chainlinkは、このオラクルを単一の信頼点(Single Point of Failure)にしないように、複数のオラクルが協力して情報を検証・提供する仕組みになっている。だから、誰かが不正な情報を送ろうとしても、他のノードがそれを検知して、正しい情報をブロックチェーンに届けられる。

例えるなら、このキャンプ場(ブロックチェーン)の「村長さん」(スマートコントラクト)に、外の天気予報(外部データ)を伝えるために、何人もの「メッセンジャー」(オラクルノード)を派遣するようなものだ。一人が嘘を言っても、他のメッセンジャーが「いや、本当は晴れだよ!」と教えてくれるから、村長さんは正しい情報を受け取れる、ってわけ。

この「橋」があることで、これまでブロックチェーン単体では実現できなかった、たくさんの面白いアプリケーションが作れるようになるんだ。

金融アプリケーション

デリバティブや先物取引
株価や仮想通貨の価格データをChainlink経由で取得して、契約を自動で実行できる。

分散型保険
飛行機の遅延情報や、作物の収穫量データを取得して、保険金を自動で支払うスマートコントラクトを作れる。

ゲーム

NFTゲーム
ゲーム内アイテムの価格を外部の市場価格と連動させたり、乱数を生成して希少なアイテムを公平にドロップさせたりできる。

サプライチェーン管理

商品の出荷状況や、温度・湿度データなどを取得して、契約条件が満たされたら自動で決済を行うスマートコントラクトを組める。

初心者キャンパー(あなた)
なるほど!じゃあ、さっきの「天気予報が晴れだったらボーナス」も、Chainlinkを使えば作れるんですね!すごい!

ベテランキャンパー(私)
そうだ!そして、この「smartcontractkit/chainlink」は、そのためのノードを立てるためのソフトウェアなんだ。Golangで書かれているから、Golangに慣れているエンジニアなら、わりと簡単に触れると思うぞ。

実際にChainlinkノードを立てて、データを提供してみるぞ。準備はいいか?

Golangの実行環境

Docker(コンテナ環境)

イーサリアムテストネットのノード(Goerliなど)に接続できる環境

ウォレット(MetaMaskなど)

Chainlinkのノードは、Dockerコンテナで動かすのが一般的で簡単だ。

まず、設定ファイル config.toml を用意する。

# config.toml
# イーサリアムテストネットのURLを設定
ETH_URL = "wss://goerli.infura.io/ws/v3/<あなたのInfura APIキー>"
# ウォレットの秘密鍵を設定
EVM_CHAIN_ID = 5 # GoerliテストネットのChain ID
EVM_CHAIN_ID_5_ETH_KEY_STORE_PASSWORD = "your_password"
# Chainlinkのウォレットパスワードファイル
KEY_STORE_PASSWORD = "your_password"

次に、Docker Composeファイル docker-compose.yml を作成する。

# docker-compose.yml
version: "3.7"
services:
  chainlink:
    image: smartcontractkit/chainlink:latest
    container_name: chainlink_node
    env_file:
      - .env
    volumes:
      - ./chainlink:/chainlink
    ports:
      - "6688:6688"
    command: chainlink node start -p /chainlink/.password -a /chainlink/.api

そして、以下のコマンドで起動!

# Dockerコンテナの起動
$ docker-compose up -d

これで、あなたのPCでChainlinkノードが動き始めた!まるで、キャンプの道具を組み立てるみたいだな!

次は、このChainlinkノードを使って、実際に外部のデータ(ここではBitcoinの価格)を取得するスマートコントラクトを書いてみよう。

このコントラクトは、ChainlinkのAggregatorV3Interfaceというインターフェースを使って、価格フィードにアクセスする。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

contract PriceConsumerV3 {
    // Chainlinkの価格フィードコントラクトのアドレスを定義
    // ここでは、GoerliテストネットのBTC/USDフィードアドレスを使用
    // 実際のアドレスはChainlinkの公式ドキュメントで確認
    AggregatorV3Interface internal priceFeed;

    /**
     * @dev コンストラクタで、Chainlinkの価格フィードコントラクトを初期化
     */
    constructor() {
        // GoerliテストネットのBTC/USD価格フィードのアドレスを指定
        priceFeed = AggregatorV3Interface(0x6A6bE49c3A5a4A3C4A5A4A3C4A5A4A3C4A5A4A3C); // 仮のアドレスです!
    }

    /**
     * @dev 最新の価格情報を取得する関数
     */
    function getLatestPrice() public view returns (int256) {
        // Chainlinkから最新の価格データを取得
        (
            /*uint80 roundID*/,
            int256 price,
            /*uint256 startedAt*/,
            /*uint256 timeStamp*/,
            /*uint80 answeredInRound*/
        ) = priceFeed.latestRoundData();
        
        return price;
    }
}

このコントラクトをデプロイすれば、ブロックチェーンの外にある最新のBitcoin価格を、スマートコントラクトから安全に取得できる!

初心者キャンパー(あなた)
わあ!これなら、これまでできなかったことが、どんどん作れそうですね!

ベテランキャンパー(私)
そうだろ?Chainlinkは、ブロックチェーンの世界を、もっと広くて、現実世界と繋がった場所に変えてくれるんだ。まるで、このキャンプ場にインターネットを引いたようなものさ!

何に役立つか
スマートコントラクトに外部(オフチェーン)の情報を安全に取り込むための「橋渡し」役。

導入方法
Dockerを使って、Chainlinkノードを簡単に立てられる。

サンプルコード
スマートコントラクトから、Chainlinkの価格フィードにアクセスして、最新の価格情報を取得できる。

ベテランキャンパー(私)
さあ、これで君もChainlink使いの仲間入りだ。一緒に、もっと面白いスマートコントラクトの世界を冒険しようじゃないか!

初心者キャンパー(あなた)
はい!ありがとうございます!キャンプ飯でも作りながら、もっと色々教えてください!


smartcontractkit/chainlink




【Go言語バックエンド】PocketBase:一杯入魂!高速開発を叶える秘密の屋台

PocketBaseは、例えるなら「一杯入魂のこだわりラーメン屋台」のような存在です。「一杯入魂」 これ一本で認証、データベース、ファイルストレージ、リアルタイム同期まで、バックエンドに必要な機能がギュッと凝縮されています。まるで、店主が一人で麺打ちからスープ作り、盛り付けまでこなすようなイメージです。


「太陽光でタダ充電」を叶えるEVCCの仕組み:ソフトウェアエンジニアが解説する設定と互換性

ここでご紹介する evcc-io/evcc は、まさにその悩みを解決してくれる、ソフトウェアエンジニアから見て「これは使える!」と思える素晴らしいオープンソースプロジェクトです。evcc("Electric Vehicle Charge Controller"の略)は、電気自動車(EV)の充電を賢くコントロールするためのエネルギー管理システムです。


Go言語エンジニアのためのWhatsApp連携術:whatsmeow徹底解説

whatsmeow は、Go言語(Golang)で書かれた、WhatsApp Web のマルチデバイス API を扱うためのライブラリです。「マルチデバイス API」というのがポイントで、スマートフォンがオフラインでも機能する、新しいWhatsAppの仕組みに対応しています。つまり、これを使えば、プログラムからWhatsAppのメッセージを送受信したり、アカウント情報を管理したりといった操作が可能になります。


【爆速】autobrr/qui で実現する、qBittorrent 複数管理の極上体験

autobrr/qui を一言で表すなら、まさに「職人が注いだ、雑味のない生ビール」のようなツールです。余計なものを削ぎ落とし、必要な機能だけを最高速で提供してくれます。エンジニア的な視点で見ると、このツールがいかに洗練されているかが分かります。


牛丼一筋の心意気で学ぶ、Go言語とgRPCによる高速RPC通信

一言でいうと、「Go言語でサクッとマイクロサービスを構築するための、うまい、早い、安いRPCフレームワーク」です。RPC(Remote Procedure Call)とは、ネットワーク越しに別々のプログラムの関数を呼び出す仕組みのこと。簡単に言えば、サーバーの機能(関数)を、クライアントからまるで自分のプログラム内の関数のように呼び出せるようにしてくれる技術です。


【コントで学ぶ】彼女の下着は何色?で LiveKit を知る

はい、承知いたしました。ソフトウェアエンジニアの視点から、LiveKit がどのように役立つのか、導入方法、そしてサンプルコードの例を、コント形式で、わかりやすく丁寧にご説明しますね。登場人物佐藤 ソフトウェアエンジニア。最近、リアルタイムコミュニケーション機能の実装に頭を悩ませている。


冒険心をくすぐるFocalboard:自社運用型プロジェクト管理ツールの魅力

まるで、あなたのチームを救う「秘宝の地図」のような存在になるかもしれませんよ。Focalboard は、一言で言えば「自分だけの秘密基地」で作れる、高機能なプロジェクト管理ツールです。TrelloやNotion、Asanaのようなツールのオープンソース版で、自分たちのサーバーに設置して使うことができます。つまり、データの保管場所も、機能の拡張も、すべて自分たちの手の中にあるんです。まるで、自分たちだけの特別なギルドハウスを築き上げるような感覚ですね!


【脱Electron】Go製TUIクライアント「Discordo」が開発環境を最適化する理由

Discordoは、Discordのクライアントをターミナル上(TUI Terminal User Interface)で動作させるための軽量かつセキュアなソフトウェアです。言語・環境 Go言語 (Golang) で書かれており、Linux環境での利用が想定されています。


Goエンジニアへの道:「go-interview-practice」で実践的スキルアップ!

こんにちは!Go言語での転職やスキルアップを考えている皆さん、RezaSiさんの「go-interview-practice」という素晴らしいプロジェクトをご存知ですか?これは、Go言語を使ったコーディング面接の練習問題集なんです。まるでビールを飲み比べながら味の違いを楽しむように、様々なコーディング問題を解いて、あなたのGoスキルを磨き上げることができます。


メディアサーバーの決定版!bluenviron/mediamtxで君のプロジェクトにモジョを注入!

オースティン・パワーズだぜ!今回は君たちソフトウェアエンジニアの悩みを解決する、とびっきりクールなツールを紹介するぜ!その名も「bluenviron/mediamtx」!君たちのプロジェクトに、こう、なんていうか…「映像と音声のセクシーな魔法」をかけることができるんだ!この「mediamtx」は、まるで僕のモジョみたいに、あらゆる種類のメディアストリームを自由自在に操れる、まさに究極のメディアサーバー&プロキシなんだ!