2020-04-05

やたらやさしいNode.js!試しに bitFlyer Realtime API にアクセス!

大好評かどうか結構怪しい!やたらシリーズ!今回は初心者向け。なんでNode.jsなのか?

Article Image

前提

  • プログラムをちょっとかじったことがある(言語は何でも良い)

Node.jsとは

JavaScriptというプログラム言語を使った実行環境。

いままでブラウザ向けに作らていたプログラム言語が独立して実行できるようになったと思っておけばOK。

あまり難しいことは知る必要はない。ブラウザから独立しているのでブラウザ向けのHTMLやDOMなど面倒なものを全部省略して学習をスタートできる。

勉強を進めるとブラウザ上で動くアプリを作れたりする。

Node.jsのみならずPythonをやる上でも先ずは「パッケージ」という概念を知っておく。

パッケージとは

例えば「①画面のスクリーンショットを取ってきて②画像にある文字をテキストに起こす」というプログラムを作るとする。

このとき①のプログラムをゼロから作る必要はなく、世の中の誰かがスクリーンショットを取るプログラムの「部品」を用意してくれている。これを「パッケージ」と呼ぶ。

また②に関しても他の誰かがパッケージを用意してくれている。

あなたがやることは①と②用の「パッケージ」をインストールして、①を通して出てくるデータを②に渡してやるだけでよい。

これが乱暴だがパッケージの説明だ。

Python vs. Node.js

そもそも仮想通貨のトレードや分析においてNode.jsを選択する人間は少ない。

これには理由がありPythonは学術計算系のライブラリが豊富でAIや統計学による分析用の「パッケージ」が揃っているからだ。

Node.jsはPythonと比べて投資に役に立ちそうな「パッケージ」類が少なく劣っていると言える(といってもゼロというわけではない)

しかし、筆者はPythonはパッケージを乱暴にインストールしまくっていると別のプロジェクトを立ち上げた時にPC内のパッケージがバッティングし始め、作ったプログラムが動かなくなるなどというトラブルに見舞われる事が多々あったためPythonを使わなくなってしまった。

このあたりの理由でパッケージ管理のソフトウェアを使いこなす必要がある(が、筆者はこれすら上手く使いこなせなかったため解説はここまでとする)

Node.jsはパッケージ管理が単純明快で、フォルダごとにパッケージが切り分けられる。乱暴に言えば新しいフォルダを作ってしまえばすでにクリーンインストール状態と言っても過言ではないため初心者が理解しやすい。

また、Pythonはインデントと呼ばれる空白に重要な意味合いがあり、ちょっとでも無駄なスペースが入ったり、逆にスペースの数が足りないとエラーとなる(という筆者の経験である。もっと自動で補正してくれる楽な方法があるかもしれない)

この点から筆者個人的にPythonは「プログラミング」という学習観点とは違う「慣れ」が必要であり初心者にあまり易しくないのでは?と感じている。

目標

とりあえずサクっと動かすことを目指す。

今回はbitFlyerから配信されている価格などの情報「Ticker」を取得する。

まずはNode.jsのインストール

Webサイト(Node.js)からDLしてインストールする。

インストール

  1. 基本的には最新版でOK
  2. DL先はOSが違ってもWEBサイトが自動で判別した結果が表示されている(はず)
  3. インストールは基本的に全てデフォルトで変更必要なし

プロジェクトの新規作成

  1. プロジェクトを作りたいフォルダを作って開いておく

  2. Windowsであれば、フォルダのアドレスが表示されている「なにもない所」をクリックする

    1. なにもない所

  3. そのまま「cmd」と打ち込んでエンターキーを押す

    cmd
  4. コマンドプロンプトが立ち上がるのでそこで「npm init」と入力する

    目的のフォルダで上の作業をすることで最初からフォルダのアドレスが入力された状態でコマンドプロンプトが立ち上がってきている

    npm init

  5. あとは、コマンドプロンプトが色々聞いてくるのだが最初だけパッケージの名前を適当に入れてやる。今回は「test」

    あとは面倒なので全部エンターで初期値を入れていく。

  6. 同じフォルダに空の「index.js」を新規作成する。

    index.js

本題のプログラム

  1. 先程のコマンドプロンプトを開いて次のコマンドを入れる

    私の例だと D:test> と表示されているところに入力する。

    npm install socket.io

    これは「npmさん!(npmというプログラム)」「installしてね(このフォルダに)」「socket.io を」という文法である。socket.io とは「リアルタイム通信をするパッケージ」だ。

    非常に簡単なコマンドだがnpmというプログラムがネット上のライブラリから socket.io として登録されているものを引っ張ってきてくれる。URL等を記述する必要もない。

    今回使う「パッケージ」はこれだけ。もうこれでプログラム本文を書く準備ができた。

  2. index.js (プログラム本体)に次のプログラムをコピペする。

    // Node.js (JavaScript)
    const io = require("socket.io-client");
    
    const publicChannels = ["lightning_ticker_FX_BTC_JPY"];
    
    const socket = io("https://io.lightstream.bitflyer.com", {
        transports: ["websocket"] // specify explicitly
    });
    
    // connection handling
    socket.on("connect", () => {
        // subscribe to the Public Channels
        for (const ch of publicChannels) {
            socket.emit("subscribe", ch, err => {
                if (err) {
                    console.error(ch, "Subscribe Error:", err);
                    return;
                }
                console.log(ch, "Subscribed.");
            });
        }
    });
    
    // set event listeners for all channels
    for (const ch of [...publicChannels]) {
        socket.on(ch, message => {
            console.log(ch, message);
        });
    }

    今回は動かすのが目的なのでプログラム内部は説明しない。まだ初心者は理解しなくてよい。

    勉強する気になったら私が解説している記事があるのでそちらを参考にしてもらいたい。

  3. 先程のコマンドプロンプトに戻って次を入力してエンターキーを押す

    node index.js

    これが「プログラムを実行してね!」という合図だ。

  4. 次のような結果が表示されていれば成功。

    面白いのはbitFlyerとの通信が確立しており、終了するまで延々とデータが送られ続けてくる。

    . 結果

    ★ウィンドウを閉じるか「ctrl+c」キーで停止する。停止キーは今後もよく使うので覚えておく。

このデータはなに?

Tickerには定期的に現在のFX_BTCの価格やベストビッド、ベストアスク等が入ってくる。

また、プログラムの"lightning_ticker_FX_BTC_JPY"となっている所を書き換えることでティッカー以外の情報も色々手に入る。まずは公式ドキュメントを見て色々試してみるのも良い。

今日はここまで

今回はNode.jsを「動かす」ことができれば目標達成だ。

おまけでbitFlyerから価格情報を得ることができた。BOT作成をする場合はココをスタートに情報を取得・分析・トレードとつながっていくはずだ。

余談

Node.js x bitFlyer APIシリーズはタイトルが付けにくいのと、シリーズにすべきかどうか微妙な記事もつくってきているので連番にするのをやめた。



この記事のタグ

この記事をシェア


謎の技術研究部 (謎技研)