Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Bot de Monitoramento para SushiSwap V3 em Go — Parte 1

2025年10月01日に「Dev.to」が公開したITニュース「Bot de Monitoramento para SushiSwap V3 em Go — Parte 1」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Go言語でSushiSwap V3向け監視ボットの基礎を構築するガイド。トークン価格を監視し、設定に基づきシミュレーションで売買を判断する。オンチェーン取引はせず、ロジック検証とパラメータ調整が目的。SQLiteでボットの状態を永続化し、中断・再開時にコンテキストを保持する。

ITニュース解説

このニュース記事は、Go言語を使って分散型金融(DeFi)プラットフォームの一つであるSushiSwap V3の価格を監視し、仮想的な取引を行うボットを構築する第一歩を解説している。システムエンジニアを目指す初心者にとって、実際のアプリケーションがどのように設計され、実装されるかを理解するための良い手本となるだろう。

このボットの主な目的は、実際の資金を投入するリスクなしに、特定のトークンの価格変動を監視し、設定した条件に基づいて売買の判断をシミュレーションすることにある。さらに、ボットが途中で停止しても、それまでの取引状況(状態)を失うことなく再開できるように、データベースを使って情報を永続的に保存する仕組みも導入されている。

具体的な動作の流れは非常にシンプルだ。まず、ボットは起動時に設定ファイルから様々なパラメータを読み込む。次に、インターネット経由で定期的にSushiSwapのAPIから、指定したトークンの現在のドル建て価格を取得する。取得した価格はコンソール画面に表示され、同時にボットの「脳」とも言える意思決定ロジックが働く。

もし現在の価格が、あらかじめ設定しておいた「購入目標価格」以下で、かつまだ何もトークンを保有していない状態(ポジションがない状態)であれば、ボットは「買い」の判断を下す。この際、実際にトークンを購入するわけではないが、「買い」の判断をした時点の価格を「エントリー価格」として記録し、ボットが「トークンを保有している」という状態に更新してデータベースに保存する。

反対に、もしボットがすでにトークンを保有している状態(ポジションがある状態)で、現在の価格が「エントリー価格」に「利益目標」の倍率をかけた「利益確定目標価格」以上になった場合、ボットは「売り」の判断を下す。この場合も実際の売却は行わないが、ボットの状態を「トークンを保有していない」に戻し、データベースに保存する。それ以外の状況では、ボットはただ価格を監視し、次の判断のタイミングを待つだけだ。このように、実際の取引を伴わないシミュレーションを行うことで、リスクなく取引戦略のロジックやパラメータを調整できる利点がある。

このボットを開発するために必要な準備としては、まずGo言語の最新版をコンピュータにインストールすることが挙げられる。その後、プロジェクト用のフォルダを作成し、Goのモジュールを初期化する。モジュールとは、Go言語で開発するプロジェクトの単位のようなもので、これによって他の人が作った便利なプログラム(ライブラリやパッケージと呼ばれる)を自分のプロジェクトで利用できるようになる。このボットでは、設定ファイルを扱うためのgodotenvと、データベースとして使うSQLiteをGoから操作するためのmodernc.org/sqliteという二つの外部パッケージを導入する。modernc.org/sqliteは、C言語で書かれたSQLiteのライブラリに依存しないため、プログラムの配布がより簡単になるという特徴がある。

ボットの設定は.envというファイルで行う。このファイルはプロジェクトのルートディレクトリに作成し、ボットが動作するために必要な様々な情報を記述する。例えば、接続先のブロックチェーンネットワークの種類やAPIキー、監視対象となるトークンのアドレス、そして「購入目標価格」や「利益目標の倍率」といった取引戦略に関する数値などが含まれる。将来的に実際の取引を行う際に必要となるウォレットのアドレスや秘密鍵も、このファイルに記述するが、この部分の情報は非常に重要なので、通常はプログラムのソースコードとは別に管理し、バージョン管理システム(Gitなど)には含めないようにするのが一般的だ。また、ボットの状態を保存するSQLiteデータベースファイルのパスもここで指定する。

コードの実装は、それぞれの役割に応じて複数のファイルに分割されている。

config.goというファイルは、.envファイルから設定値を読み込み、Goプログラム内で扱いやすい形式に変換する役割を担う。例えば、.envファイルに文字列として書かれた「購入目標価格」や「利益目標の倍率」を、Go言語の数値型(float64)に変換したり、必須となる設定項目が漏れていないかを確認したりする。これにより、ボットが常に正しい設定で動作することを保証する。

database.goは、SQLiteデータベースの初期化と、ボットの状態(「トークンを保有しているか否か」と「エントリー価格」)をデータベースに保存したり読み出したりする機能を提供する。ボットが初めて起動される際には、データベース内に必要なテーブルを作成し、初期状態(ポジションなし)を登録する。これにより、ボットを途中で停止しても、次に起動したときに以前の状態を正確に復元し、中断したところから処理を継続できる。これは、アプリケーションの「永続性」を確保するための重要な部分だ。

prices.goは、SushiSwapの公開APIを利用して、指定されたトークンの現在のドル建て価格を取得する機能を担当する。ウェブから情報を取得する際には、ネットワークの遅延や一時的なエラーが発生する可能性があるため、このファイルでは通信のタイムアウトを設定したり、APIからの応答が正常であるか(HTTPステータスコードが200 OKであるか)を確認したりといった、堅牢なデータ取得のための配慮がなされている。

そして、これらすべての部分を統合し、ボットの全体的な流れを制御するのがmain.goファイルだ。このファイルは、ボットが起動すると最初に実行される。main.goconfig.goを使って設定を読み込み、database.goを使ってデータベースを初期化し、以前の状態を読み出す。その後、prices.goを使って定期的に価格を監視し、その価格と現在のボットの状態、そして設定に基づいて売買の判断シミュレーションを行う。判断が下されたり、状態が変更されたりした場合は、database.goを通じてその新しい状態をデータベースに保存する。この一連の処理は、time.NewTickerというGoの機能を使って、定期的に(例えば10秒ごとに)繰り返されるように設計されている。コンソール画面を定期的にクリアして最新の情報だけを表示する機能もここに含まれており、ユーザーにとって見やすい表示を実現している。

すべてのファイルを作成し、.envファイルに必要な情報を記述したら、プロジェクトのルートディレクトリでgo run .コマンドを実行することでボットを起動できる。ボットはコンソールに価格を表示しながら、設定した購入目標価格や利益目標価格に応じて、「買い(Swap in)」や「売り(Swap out)」のシミュレーション結果を表示する。もしボットの実行中にプログラムを停止しても、次回起動時にはデータベースから前回の状態が復元され、ボットは中断した時点から監視を再開する。

この第一段階で構築されたボットは、価格監視、意思決定ロジック、そして状態の永続化という、自動取引システムの中核となる部分の骨格を提供している。記事の最後では、今後の発展として、実際のオンチェーン取引を組み込む次のステップについても触れられている。次のフェーズでは、Goクライアントが直接ブロックチェーンとのやり取りを行うのではなく、gRPCという高速な通信プロトコルを使って、実際の取引処理を担当する別のサービスと連携するアーキテクチャが提案されている。これは、取引に関する複雑なロジックや、秘密鍵のような機密情報の管理を専門のサービスに任せることで、メインのボットをよりシンプルかつ安全に保つための設計思想に基づいている。このように段階的にシステムを構築していくアプローチは、複雑なシステム開発における良い実践例と言えるだろう。

関連コンテンツ

関連IT用語