【非エンジニアが挑む】仮想通貨の価格監視Botを作る前に準備したこと

【非エンジニアが挑む】仮想通貨の価格監視Botを作る前に 成功の鍵!準備したこと(APIキー取得・実行頻度・環境設定)
Tomoya

Node.jsの導入が済み、土台ができあがりました!!

ここからは、いよいよ実際に何かを作っていく開発の段階に移っていきます。

Tomoya

何を作ろうか、正直かなり悩みました。

AIに相談して候補をいくつか挙げてもらい、そこから自分でも考えを重ねていきました。

せっかくVPSを使うのだから、その利点(24時間動き続けられること)を活かしたシステムにしたい、自分にとって実際に役立つツールにしたい、という思いがあったので、それを踏まえて提案してもらった候補の中から決めていきました。

Tomoya

もう一つ、自分の中で条件にしたのが「シンプルなシステムであること」です。

これまで、複雑さゆえに挫折してしまうことが何度もありました。良いものを作ろうとするあまり、時間がかかったり、ある程度の専門知識が前提になっていたりして、学習コストの高さに踏ん張りきれずフェードアウトしてしまう——そんな経験があったので、

今回は「やったことはないけれど、構造はシンプル」というものを条件に加えました。


目次

何を作るか:ビットコインの価格監視+Discord通知

最終的に、ビットコインの価格を監視し、条件を満たしたらDiscordに通知する24時間システムに決めました。

定期トリガーからCoinGecko APIでのデータ取得、条件判定、Discord通知までの仕組み全体を示すフロー図
定期的なトリガーからCoinGecko APIでの暗号資産データ取得、条件判定、Discordアラート通知までの処理の流れを図解しています。
Tomoya

理由は2つあります。

1つは、ビットコインの市場にこれまで参入したことがなく、自分にとって未知の領域だったこと。

もう1つは、「価格を監視して、条件を満たしたら通知する」という構造自体が、非エンジニアの自分にもシンプルで理解しやすかったことです。

使うものも、仮想通貨のAPI(CoinGecko)とDiscordのWebhook、この2つを用意すればいい、というシンプルな構成です。

もっと詳しい分野だったら、あれもこれもと機能を足したくなって複雑化しがちだったと思いますが、仮想通貨についてあまり知らないからこそ、今回のシンプルな構成でも「完成させられた」という達成感につながっている気がします。

Tomoya

また、コスト面でも安心感がありました。

Discordは無料で通知を受けられますし、今回初めて使うCoinGeckoも、無料枠(100コール/分・1万コール/月)の範囲内で進められます。

APIの料金プラン比較表でコールクレジット月10kやレート制限毎分100などのデモ版と有料プランの仕様一覧
APIサービスのプラン比較一覧表で、無料のデモ版と有料プランにおける月間呼び出し回数や毎分のリクエスト制限を確認できます。
Tomoya

準備段階の時点で、コストの見積もりに不安が少なかったのは良かったです。

準備

Discord Webhookの発行

Discordはもともと通話やチャット用のアカウントを持っていたので、新しくチャンネルを作り、そこに通知を送れるようにするためのWebhook URLを発行しました。ここはスムーズにできました。

準備

CoinGeckoのAPIキー発行

CoinGeckoのサイトを触るのは今回が初めてだったので、APIキーの取得はもっと手間がかかるものだと身構えていましたが、実際は意外なくらいすんなり進められました。

アカウントを作り、開発者用のダッシュボードからAPIキーを発行するだけで完了しました。

補足

なお、有料プランに進むと利用できる枠がさらに増え、より自由度の高い使い方ができるようです。仮想通貨を普段からよく触るような方であれば、そちらのほうがリアルタイムの情報を見やすく使えるかもしれません。

CoinGecko API画面で「最初のAPIキーの作成はここから」の表示と「APIキーを作成」ボタンがある画面
CoinGeckoのダッシュボード画面にて「APIキーを作成」ボタンをクリックし、新しいAPIキーの発行手順を開始します。
準備

プロジェクト用のフォルダと必要なパッケージのインストール

① プロジェクト用のフォルダを作る

mkdir ~/crypto-watcher
cd ~/crypto-watcher
npm init -y ※「Node.jsのプロジェクト」として認識させるための初期設定ファイルを自動生成するコマンド

② 必要なパッケージをインストール

npm install dotenv node-cron 

※dotenv: .envファイルに書いた内容を、プログラムから読み込めるようにするパッケージ
※node-cron: 「○分おきに実行する」という定期実行の仕組みを作るパッケージ
npm init -yコマンドを実行してcrypto-watcherプロジェクトのpackage.jsonを初期生成した画面
コマンドラインでnpm init -yを実行し、プロジェクトフォルダ内にNode.jsの設定ファイルであるpackage.jsonを自動作成した状態です。
準備

環境変数の作成と外部に漏らさないための設定

環境変数ファイルを設定

nano .env ※環境変数ファイルを作成

以下の内容を入力

DISCORD_WEBHOOK_URL=実際のWebhook URL
COINGECKO_API_KEY=実際のAPIキー
なぜ直接書いてはいけないのか

もしコードの中にconst apiKey = "実際のキー文字列"のように直接書いてしまうと、後でこのコードをGitHubなどに公開した際、そのままキーが世界中に漏れてしまいます。

代わりに使うのが環境変数という仕組みです。「秘密の情報だけを別のファイルに切り分けて、コードからはその中身を呼び出すだけにする」という考え方です。

nanoエディタで.envファイルを編集し、DISCORD_WEBHOOK_URLとCOINGECKO_API_KEYを設定する画面
テキストエディタのnanoを使用して.envファイルを作成し、DiscordのWebhook URLとCoinGeckoのAPIキーを設定します。

ファイルを外部に漏らさないための設定

nano .gitignore ※GitHubにアップロードする際、このファイルだけは除外する為のファイル

以下の1行だけ入力して保存

.env

今後このプロジェクトをGitHubに保存しても、.envの中身(秘密の情報)だけは自動的に除外されるようになります。


どのくらいの頻度でチェックするか

1分1秒単位のリアルタイム性を求めてしまうと、あっという間にコール数が膨れ上がってしまいます。ここはAIに見積もりを出してもらい、無料枠に収まる範囲で、なるべく実用的な頻度がどれくらいかを一緒に計算してもらいました。

5分おきのチェックで月間約8,640回となり無料枠(月1万回)に収まることを示す頻度計算のテキスト
5分間隔でデータチェックを実行した場合の月間アクセス回数と、無料枠上限の計算内訳を示しています。
気づいた事

もし枠を超えてしまっても、無料利用の範囲であれば単に取得が止まるだけだとは思いますが、24時間動かし続けることを前提にするなら、事前にある程度の感覚を計算した上で頻度を決めておくことが、効率よく運用するために大事なことなのだと感じました。


環境変数という考え方

ここは「重要の中の重要」だと今回痛感した部分です。

コードの中に直接APIキーやURLを書かないこと。そして、その情報をまとめた環境変数ファイルを公開しないこと。

Tomoya

これは開発における大前提なのだと理解しました。

以前の失態

正直に書くと、非エンジニアの自分は、最初この重要さが全くわかっていませんでした。

実際に、コードの中に直接APIキーを貼り付けてしまっていたこともありますし、それをそのままGitHubのリポジトリに登録してしまったこともあります。(注意!

幸い、Privateリポジトリだったので他人の目に触れにくかったことと、APIキー自体も無料枠の学習用のものだったので、実害としてのリスクは小さかったと思います。

これから非エンジニアとしてプログラミングの世界に入って何かを開発してみたい、という方には、いきなり従量課金のAPIやリスクの大きいサービスを使わないことをおすすめします。もしどうしても使うなら、先に環境変数について学んでからにするのが安全です。

勢いで進めることも大事だとは思いますが、リスクを取るなら、きちんと調べた上でにするのが良いと、今回身をもって感じました。


次回予告

準備が整ったので、次回はいよいよ実際にコードを書き、24時間稼働するシステムを開発していきます!!

次回予告実装・稼働編「仮想通貨24時間監視システム構築 VPSで完全自動化!ついに稼働!」の案内

前回の記事のこちらも参考に:

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

始めまして。このブログを運営するTomoyaです。
未経験個人開発者。AI×個人開発(Vibe Cording)で学習して参入してくれる人が増えて広がっていくと良いなと思って始めました。

実際に作成→デプロイ(公開)→運営を行ってそれについての問題や疑問を記録していきます。
また行っていく上で内容(セキュリティ・制限など)にもこだわっていきたいなと思っています。

コメント

コメント一覧 (1件)

コメントする

目次