【npmリリース】約2400種類の仮想通貨の価格情報をターミナルで取得できるnpmを公開しました

![紫　白　シンプル　リリース　note記事見出し画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714278/d5d68893-25a9-7420-cbef-a6906dd4d7c8.png)

# coinrateとは

coinrate は、暗号資産市場全体の市場取引情報や各銘柄の詳細な取引データをターミナル上で簡単に取得できるコマンドラインツールです。ターミナルを通じて、リアルタイムの市場の価格変動、銘柄ごとの価格情報へのアクセスが可能です。

このツールは、迅速かつ効率的な情報収集を可能にします。約 2400 種類の暗号資産銘柄に対応し、
トップに表示されていない銘柄については Ticker で検索が可能です。

<br>

# 公開先

https://github.com/hirano-vm4/coinrate




https://www.npmjs.com/package/coinrate


<br>

# 作った経緯

私は2022年5月から未経験スタートでプログラミングの学習をしています。

学習は[フィヨルドブートキャンプ](https://bootcamp.fjord.jp/welcome)（以降 FBC）のコミュニティ（**受け身で学ぶスクールではなく、自走に近い形で進めていく人たちの集まりのため、あえてコミュニティとします**）に参加していて、現役のエンジニアの方からレビューをもらいながら進めています。

現在の学習状況は以下を随時更新しているので興味ある方はご覧ください。

https://hirano-vm4.hatenablog.com/entry/2023/09/01/235236



FBCのJavaScriptのプラクティスの最後の課題は、「npm パッケージの作成」となっています。自分でテーマを考えてnode.jsでnpmを作り、それだけでなく実際に公開するところまでが終了要件です。

このプラクティスの一貫で[coinrate](https://www.npmjs.com/package/coinrate?activeTab=readme)を作成しました。

当初、何を作ろうかかなり迷いました。

考え抜いた結果、私は仮想通貨に限らず投資が趣味だったので「投資に役立つ実用的なnpmを作ってみたい」という想いから、ターミナルでサッと必要な仮想通貨のデータを取得できるnpmを作ることにしました。


投資の中でも仮想通貨をテーマにあげた理由は3つあります。


## ①ブロックチェーンに興味があってノードの運用をしていた

学習と並行して、元々ブロックチェーンにも興味があってブロックチェーンのノードをVPSに構築して運用・保守も始めました。


https://campfire-stake-pool.com


なので自分が興味があることで実用的なものを作ってみたかったのが理由の1つです。


## ②自分の怠惰な気持ちが需要になるかなと考えた


そんな感じなのでプログラミングの学習中もついつい値動きが気になってしまうことがあります（笑）

ブラウザで検索して価格を表示するのが面倒に感じることがあったのでターミナルで価格がサッと確認できたら便利だな〜という怠惰な気持ちからテーマを決めました（この怠惰が需要になるかな〜と淡い期待）。

そしてブラウザでサイトを見始めると脱線して学習が滞ってしまいがち（自分の問題）。そんなときにターミナルで完結すれば手早く、必要な情報だけ取得できて脱線しにくくなる、、、はずです。


## ③まだ新しい技術でライバルが少ない

あと仮想通貨（暗号資産）の分野だとまだテーマにするが人が少ないことで需要をとれるかなと考えてみました。

npmなので、これはあまり関係ないかもしれませんが、正式にウェブアアプリを近い将来ポートフォリオとして作るので、その時のテーマ決めの練習にもなるのでは？と考えてみました。

なのでREADMEも含めてしっかり作りました。




# 特徴

- **暗号資産市場全体の市場取引情報の取得**
- **約 2,400 種類の暗号資産銘柄に対応([Coinlore](https://www.coinlore.com/ja/cryptocurrency-data-api)の API を使用)**
- **フリーで解放されているAPIを使用しているため、個別にキーの取得は不要ですぐに利用可能**
- **ティッカー検索**

<br>

# 前提条件

coinrate をインストールする前に、以下の前提条件がシステムに満たされていることを確認してください：

- **Node.js:** システムに Node.js がインストールされている必要があります。coinrate に必要なバージョンは 10.0.0 以上です。Node.js は[Node.js 公式ウェブサイト](https://nodejs.org/en)からダウンロードしてインストールできます。
  さらに、coinrate は以下の Node.js パッケージに依存しており、ツールをインストールする際に自動的にインストールされます：

- **axios（バージョン 1.6.2 以上）:** 暗号通貨データの取得に使用する HTTP リクエストを行うために使用されます。
- **cli-table2（バージョン 0.2.0 以上）:** ターミナルでのテーブル表示に利用されます。
- **enquirer（バージョン 2.4.1 以上）:** 対話型コマンドラインインターフェースに使用されます。
  ここに挙げられているものを除いて、coinrate を実行するために特定のソフトウェアやライブラリが必要とされることはありません。インストールに進む前に、Node.js 環境が正しくセットアップされていることを確認してください。

<br>

# 使用方法

npx を利用して、mycrypto を実行します。

```javascript
$ npx coinrate
```

必要に応じてローカル環境にクローンし、実行ファイル`main.js`を`$ node main.js`で実行してください。

<br>

# 表示データの説明

coinrate は、暗号通貨の詳細な取引情報表にして提供します。以下は、テーブルの各行で提供される情報の概要です：

## 市場全体の概要

| タイトル                  | 説明                                             |
| ------------------------- | ------------------------------------------------ |
| Price Checked At          | 情報を取得した日時。形式: YYYY/MM/DD HH:MM:SS    |
| Total Market Cap          | 市場全体の暗号通貨の総時価総額                   |
| Market Cap Change (24h)   | 過去 24 時間での市場全体の時価総額の変動率       |
| Total Volume              | 市場全体の暗号通貨の総取引量                     |
| Volume Change (24h)       | 過去 24 時間での市場全体の取引量の変動率         |
| Bitcoin Market Dominance  | ビットコインが市場全体の時価総額に占める割合     |
| Ethereum Market Dominance | イーサリアムが市場全体の時価総額に占める割合     |
| All-Time High Volume      | 市場全体の暗号通貨で記録された史上最高の取引量   |
| All-Time High Market Cap  | 市場全体の暗号通貨で記録された史上最高の時価総額 |

<br>

## 個別通貨情報

| タイトル           | 説明                                          |
| ------------------ | --------------------------------------------- |
| Price Checked At   | 情報を取得した日時。形式: YYYY/MM/DD HH:MM:SS |
| Currency Name      | 暗号通貨の名前、例: Bitcoin                   |
| Ticker Symbol      | 暗号通貨の市場シンボル、例: BTC               |
| Market Cap Rank    | 時価総額における暗号通貨のランク              |
| Price              | 暗号通貨の現在価格、$43,376.11/BTC として表示 |
| Price Change (1h)  | 過去 1 時間の価格変動率                       |
| Price Change (24h) | 過去 24 時間の価格変動率                      |
| Price Change (7d)  | 過去 7 日間の価格変動率                       |
| Market Cap         | 暗号通貨の総時価総額                          |
| Volume (24h)       | 過去 24 時間の暗号通貨の総取引量              |
| Circulating Supply | 現在流通している暗号通貨の総量                |
| Total Supply       | 利用可能な暗号通貨の総量                      |

<br>

# 使用例

## 市場全体の概要を取得

`Cryptocurrency Market Overview`を選択
<br>
![市場全体の概要](https://gyazo.com/4db495281bd96e70922719f5d8ccd0db/raw)
<br>

## 個別の暗号資産の情報を取得

トップに表示されるティッカーを選択

<br>
![市場全体の概要](https://gyazo.com/c33fec491611f1cca9fa853314abc27a/raw)

<br>

## ティッカーで検索して情報を取得

`Other (Ticker Search)`を選択
<br>
![ティッカーで検索](https://gyazo.com/6b6750cb606d18ab009624f541f4843a/raw)

<br>

### カスタマイズ

#### 表示するテーブルのデザインを変更する場合

テーブルは[cli-table2](https://github.com/jamestalmage/cli-table2)を使用しています。
変更する場合は、`cli-table2`を参考に`CryptoTable`クラス(crypto_table.js)を変更してください。

<br>

## デフォルトで表示されるティッカーを追加・削除する場合

変更する場合は、`config/constants.js`の`cryptoChoices`の配列を変更してください。

<br>

# ライセンス

このソフトウェアは、MIT ライセンスの下で公開されています。LICENSE.txt を参照してください。


# さいごに

coinrateを作るまで2回くらいしかJavaScriptをまともに書いたことがなかったので、このnpm作成という実践を通じて学びが大きかったと感じています。

ただコードを書くだけでなくオブジェクト思考でクラスを分ける、命名をわかりやすいものにする、の重要性を改めて感じると同時に難しさを痛感しました。


1000時間を超える時間を費やしましたが全然足りない部分が多いので、引き続きコツコツ学習を継続していきたと思います！