nemのゲーム APIGをwebデザイナーが触ってみた

![ogp.png](https://qiita-image-store.s3.amazonaws.com/0/85765/d268bbc1-b1e1-56d5-456a-f6d9cbb409f6.png)




[@koma2hiroki](https://twitter.com/koma2hiroki)氏が開発したゲーム[APIG](https://apigmining.xyz/)を触ってみました。

ネムのモザイクが1分に1回の間隔で、100万x100万x100万（単位はなんだろ？ピクセル？バイト？ｗ）の仮想空間中のどこかに現れます。ユーザーはそのモザイクを探すために用意されたいくつかのAPIを叩いて、モザイクの座標[x,y,x]の位置を探し出し、座標位置を当てたユーザーが1モザイクをもらえるというルールとなっています。1分に1回、誰かがAPIGモザイクをひとつもらえるのですね。

要するに、**「ターミナルからAPIを叩きモザイクを掘る」**という、エンジニアにステータス全振りのゲームとなっておりますｗ

私はAPIをjavascriptからしか叩いたことがありませんので「ターミナル api 叩く」とググってみるところからはじめましたw
「完全に非中央集権のゲーム」というコンセプトでゲームマスターが不在という点がおもしろポイントだと思います。

なんと、作者がゲームをリリースした次の日に、[@c_rtx](https://twitter.com/c_rtx)さんが[こんなツール](https://c-rtx.com/tmp/apig.html)を作成されていました。仕事はえー！そしてSNSってスゲーｗ
ブラウザから叩くことができればエンジニアでなくともゲームに参加しやすくなりますよね。

ただし！ターミナルからAPIを叩くってエンジニアにとっては息をするように当たり前のことですが、初心者もやってみると、謎の緊張感に包まれて妙に楽しいです。一度、エンジニアではない方でも、macのターミナルで通信する面白さを伝えてみたい・・・
ということで、ターミナルでAPIGの使い方（コマンド）を解説してみよーとおもいます！（macユーザー前提となっています）
これであなたもホワイトハッカー！！！

#遊ぶ前の準備
##nemのウォレットから1xemを送信
まずこちらのアドレスにnano walletから1xemを送るだけ。
*`NBWH24-3MPSXC-3FGWKS-OTGWX5-5QX425-JGUGA7-LA2N`*

するとウォレットのメッセージに認証キー（20文字のランダム）が送られてきます。
このキーをコマンドに含めて、APIを叩きまくるという流れでゲームを進めます。

##ターミナルを起動
![たーみなる.jpg](https://qiita-image-store.s3.amazonaws.com/0/85765/a672d185-20b0-a803-c2b2-6a931ca89eae.jpeg)

まずはmacのターミナルを開いて下さい。上記のようなソフトですね。
この中に入っています。【アプリケーション→ユーティリティー→ターミナル】
いわゆる黒い画面ってやつです（macはデフォルトだと白い画面かな？ｗ）。ターミナルは、linux（リナックス）というサーバーで使用する仕組みで自分のPCを操作したりネットでごにょごにょしたりするソフトです（ぼやっとした説明）。
普通、macの画面をキーボードやマウスで操作しますが、ターミナルでコマンドを打ち込むことで、通常の画面操作と全くおなじことができます。
なんでわざわざ画面でもできるのにこんな文字をわざわざ打つのかって？
**それは、カッコイイからです！**キリッ　（エンジニアの方、雑でごめんなさい）


#APIGのAPIを叩いてみよう

##そもそもAPIとはなんぞや？
APIとは「アプリケーションプログラミングインタフェース」のことです！はい、意味がわかりませんね！
簡単に言うと・・・
**アプリケーションの機能を共有できる仕組み**のことです。
システムは、サーバーで動いていますよね。そのプログラムをweb上に表示するときに使用する仕組みのこと、と捉えてください。
APIがあるwebサービスって、とても身近なんです。たとえば皆さんよく使用するツイッター。ツイッターももちろんAPIを公開しています。ツイッターのAPIを利用することで、トゥギャッター等のツイッター関連サービスが作られているんです。サービスがコラボレーションしやすい仕組みと捉えていただければOKです。

APIGがAPIを簡単に利用できるように作られているため、[@c_rtx](https://twitter.com/c_rtx)さんが[こんな素敵ツール](https://c-rtx.com/tmp/apig.html)をサクッとつくることができるってことなんですね〜！

##APIGのAPIリスト
[APIGのAPIリストはこちら](https://apigmining.xyz/#api)

##APIを叩くためのコマンド、curlとはなんぞや？
さて、APIGはターミナルから【APIを叩いて】遊ぶゲームと言いました。
このAPIを叩くコマンドが、【curl】です！！カールです！お菓子のカールは最近見ないけどターミナルでいつでも会えます！
本来は、サーバーへデータを転送するためのコマンドですが、今回はAPIを叩くために使います。curlはmacに標準装備されたソフト（コマンドも立派なソフト！）なのです。

##はじめてのコマンド
というわけで、まずはこのcurlで、さきほど届いた認証キーを使って、APIGにコマンドを送信してみましょう！

```bash
$ curl -H 'Authorization: Bearer 認証キー' https://apigmining.xyz/api/user
```
※認証キーの部分に、ご自分のキー（nano walletのメッセージに送られてきた20文字の文字列）を入力してください

かたまりごとにコマンドをみていきましょう。
**まずコマンドの先頭には、$マークがついています。これは、ターミナルでコマンドを打つ際に、必ずターミナル上の入力欄の先頭に自動で表示されるものです。
ですから、以後、この記事のコマンドをコピペする際は【$マーク+半角スペース】はコピーしないでください！**
ターミナルで叩くコマンドを紹介する際は、パッと見で【ターミナルのコマンド】なんだなと理解できるように$から表示するのがお約束となっています。ややこしくてすみません。

では、コマンドの本体はここからです。
APIを叩いてくれる張本人、curlの登場ですね。
半角スペースを空けて、-H
これは、オプションといって、curlで通信するときにどんな目的か？を指示する文字列です。-Hとやることで、その後の半角スペースに続くものを送りますよーという指定をする、ということです。

-Hの後
半角スペースをあけて、'Authorization: Bearer 認証キー'
とあります。ここでは難しく考えず、自分の認証キーを送るという意味です。
認証キーを送らないと、どのアカウントかがわかりません。APIGのシステムは俺だよ俺！で認識しないのできちんと自分を証明しないいけないのです。なので、curl -H で自分のキーを送ります。
そして認証キーのあと半角スペースをあけて、URLが含まれています。これは末尾がuserとなっており、APIGのサイトのAPIリストに掲載されていますが、ユーザー情報を取得するAPIを叩くことになるんですね。
どの機能のAPIを叩くのかを指定してあげないといけません。

まとめると、このコマンドは、
**curlさん、俺はこういう名前でAPIGのユーザーだよ、俺の情報をおしえてくり！　っていう意味なんです！**
名前のところは認証キー、自分の情報は、https://apigmining.xyz/api/user に置いてあるわけですね。
そして、**curlさんが仲介者としてAPIGのサーバーにAPIを叩きにいってくれるという仕組みなのです。**

なんとなく、コマンドの役割をわかっていただけたでしょうか？？？（わからない方はDMください。私の解説力の無さを反省しつつ開発者におつなぎします。）

##はじめてのAPIG ~自分の情報を見る~
さてさて、コマンドで何をするかがわかったら早速、上のコマンドをターミナルにうちこんでみましょう！
コマンドを一旦メモ帳にコピペして、認証キーをご自分のキーに置き換えて、メモ帳からターミナルにコピペします。
そしてエンターキーをバーーーーーーーーーン！

すると、こんなデータが帰ってきます。こんなデータのことをjson（ジェーソン）と言います。

```javascript
{
  "address": "あなたのnemアドレス",
  "apikey": "あなたの認証キー",
  "coin": 0,
  "memo": ""
}
```
**APIを叩いたら返事がｷﾀ━━━━(ﾟ∀ﾟ)━━━━!!**
userのAPIは、自分の情報を返してくれる機能です。私の情報がのっていますねー！coinもまだ掘り当ててないので0件です！

こんな感じで、コマンドを叩いてゲームをすすめていくんですねー

## ソナーを打ってみる
では！早速、探索を開始してみましょう

```bash
$ curl -H 'Authorization: Bearer 認証キー' https://apigmining.xyz/api/sonar
```
これを叩いてみて下さい。

このコマンドはx,y,zの座標のどれか１つが返ってくるというコマンドです。1分ごとにコインの座標が変更されるので、1分ごとに違う値が帰ってくると思います。
一番最初に叩いたコマンドとみかえしてみてください。ほぼおなじで、URLの最後が、userだったのがsonarになっていますね？

考え方はユーザー情報を返してくれるコマンドと全く同じです。
curlさん、俺はこういう名前でAPIGのユーザーだよ。コインの位置をおしえてくり！　っていう意味になりますね。
**自己紹介はどのコマンドでも必須です！あとは、実現したい機能によってURLが変わるという認識でOKです。**

叩いてみてください。下記のような応答があります。

```javascript
{
  "z": 161136
}
```
私はzの位置を教えてもらえました。
人によっては、yの位置だったりxの位置だったりするでしょう。

##他のユーザーのメモをのぞいてみる
さて。座標の位置がまだ１つしかわかりません・・・他の情報が欲しいですね。
APIGには、メモという機能があり、他のユーザーが残したメモを１つだけみることができます。他のユーザーでだれかヒントをのこしてくれてる人いるでしょうか？？メモのAPIを叩いてみましょう！もう、おわかりでしょうか？

```bash
$ curl -H 'Authorization: Bearer 認証キー' https://apigmining.xyz/api/memo
```
ユーザー情報、コインの位置　といったAPIを叩いてきました。メモも、URLの最後がmemo になっているだけですね！もう慣れたもんです。
叩いてみるとどうでしょうか、

```javascript
{
  "memo": "メモのログが見られれば良いのに"
}
```
wwwwwwwwwwww

メモに、運営へのメッセージがかきこまれています！！！まだ、ゲームがちゃんと開催されていないようですね。メモは上書かれる仕様です。最新のメモだけが見れるのですね。
このメモに、yは123456　等と書き込んでくれる人がいた場合、自分のソナーの情報とmemoの情報をあわせると、zとyの情報が入手できたことになります。
あとはxの情報をかきこんでくれる人がいたら、x,y,zのコインの座標が判明するのでは！！！！

##自分でもメモを残してみる
他のユーザーのために、メモを残してみましょう！メモを残すコマンドはこれです。

```bash
$ curl -H 'Authorization: Bearer 認証キー' -X PUT -d "memo=zは161136だよ" https://apigmining.xyz/api/memo
```
おや、認証キーまでは同じなのにその後が違う・・・
-X　という新しい命令がでてきました。
-X PUTで、こちらからデータを送信するよという宣言。-dで、その後に続くパラメーターを送信するという意味として手を打ちましょう！
"memo=●●●""の内容が、APIGに保存されるわけですね。この場合は【zは161136だよ】という文字列が保存されます。
コマンドの一番最後のURLは、メモを確認したときのURLと同じです。このURLは、メモの確認と、メモの上書きが同時にできる機能をもっているんですね〜。
というわけでメモを残すコマンドをうちましょう。エンターキーターン！！！！

```javascript
{
  "message":"success"
}
```
successが帰ってきました。メモを残すことに成功！

メモを確認するコマンドをうってみましょうか。

```bash
curl -H 'Authorization: Bearer 認証キー' https://apigmining.xyz/api/memo
```

```javascript
{
  "memo":"zは161136だよ"
}
```
きちんと保存されていますね！！！



#APIGは、ターミナルでやるとスリリング
はい。現状このゲームは、ソナーとメモで、コインの座標を探すという手順になっています。
ユーザーがメモを残し、そのメモを他のユーザーが見てピースを揃えていき、答えとなる座標にたどり着くというわけですねー。

**いやー、コマンドは、難しい！エラーが帰ってきたときに、どこが間違っているかを探すのが難しいｗ**
スペルミスなのか？はたまた半角スペースが入っていないとか？文法ミスなのか？最初のうちは、エラーが出ることが多いかもしれません。でも安心してください、間違ったコマンドを送っても壊れることはありません（多分）ｗ

##ゲームを触ってみて思ったこと。
メモは１つしか残せません。メモのログはもっと見たいですよね！ただ、ログ見てxyzの全部の情報が書かれていたら、それ見るだけで座標がすぐあてられてしまいますね。探す手順がなくなるとゲームとして成立しなさそうですね・・・
また、自分がメモを残して他のユーザーの手助けするという動機をもったユーザーがいないと、全員がmemoのAPIを叩いてだれかが書き込むのを待つだけという状況になることも考えられます。ソナーで１つの座標を知り、あとはだれかがかきこんだ内容を探すゲームですからね。

色々な改善点が見つかるゲームだとおもいます。ただ、非中央集権のゲームという観点でまずは作って出しちゃおうという作者の意気込みは面白いですよね。
このゲームがリリースされてから、ツイッターでは、どうしたらもっとよくなるかを色々な方が考えて議論しているようです。

まずはnemで不完全ながらも何か作って世に出してみる→意見をもらう→改善して育てていくか次のサービスにとりかかるか
制作者の方向性次第ですが、まず行動することって、いつもどんなときでも大事ですね。私もなにかゲーム作ってみたくなりました。





#そうえいば・・・
そういえば！大事なコマンドを書いていなかった・・・
x,y,zの全ての座標を見つけた人がモザイクをもらうためにAPIGに答えを送るコマンド・・・・
これだーーー！！！

```bash
curl -X PUT -d '{"x":824097,"y":829640,"z":688641}' -H 'Authorization: Bearer 認証キー' -H "Content-type: application/json" https://apigmining.xyz/api/dig
```
はい、超長いのでもう解説はしません！！！
答えを見つけた方は、x,y,zの数値をコピペで入れ替えて、認証キーを入れ替えて、このコマンドを送信してみてください。
successが帰ってきたら成功です、おめでとうございます。

userのAPIを叩いてみましょうか。きっとcoinの数が1増えていることでしょう。


#さいごに！
再度APIGのリンクをはっておきます！[APIGはこちら](https://apigmining.xyz/)
それでは良いnemライフを！長文失礼しました。