シェルスクリプトは「バルス」に勝てるのか、体を張って確かめた!!（タニタ予告付き）

2016年1月15日。あの、伝説のクジラを呼び覚ます禁断の呪文「バルス」をTwitter民に唱えさせる映画、[**「天空の城ラピュタ」**](http://www.ghibli.jp/10info/009891.html)が放送された！

その騒動に乗じて戦いを挑むべく、アイツが立ち上がった。

# [シェルスクリプトは「バルス」に勝てるのか、体を張って確かめたい！](http://qiita.com/richmikan@github/items/48f49473f46084c57701)

[Twitter REST API](https://dev.twitter.com/rest/public)の真の実力を知らされぬまま、[リンク先の記事](http://qiita.com/richmikan@github/items/48f49473f46084c57701)に書かれたとおりの準備を行い、戦いに挑むシェルスクリプト。

## **このボクに任せてください！！！**

上映開始前の19時30分、意気揚々と[REST APIを10並列でぶん回すシェルスクリプト](https://github.com/ShellShoccar-jpn/kotoriotoko/blob/master/APPS/comike_search.sh)を仕掛けた。

![barusu1.jpg](https://qiita-image-store.s3.amazonaws.com/0/9113/0633e677-e632-5bc4-3082-dc1a908895fa.jpeg)

## 奇襲開始！！

不安の色を全くうかがわせないシェルスクリプト。そして上映時間に突入。

戦績は終わってから集計するため、シェルスクリプトも[Twitterクライアント 小鳥男](https://github.com/ShellShoccar-jpn/kotoriotoko)を使って一緒になってバルス祭りに参加。

## 上映終了。

> **「では、戦果を見てみましょう！」**

そう言いながら、先程のプログラムで生成された大量のデータを捌き、1分当たりのツイート数の集計。

```sh:1分間のツイート数集計
#! /bin/sh

cd kotoriotoko/APPS/barusu_search.sh.data

find RES -type f                                        | #<全ファイルを開く
xargs cat                                               | #
awk '/^2016/  {gsub(/[^0-9]/,"");                       # #<時刻行と
               printf($0);                              # # ツイートIDを含むURL行のみ抽出し
               next;             }                      # # 1ツイート1列化
     /^- http/{sub(/^.*\//,"");                         # #
               print "",$0;                             # #
               next;             }'                     | #
grep -E '^[0-9]{14} [0-9]+'                             | #<ゴミ行を除去
sort -u                                                 | #<重複ツイートを除去
awk '{print $1}'                                        | #<ツイートID列の除去
sed 's/[0-9][0-9]/& /g'                                 | #<秒の桁も除去
sed 's/ //'                                             | #
awk '{print $1,$2,$3,$4,$5}'                            | #
uniq -c                                                 | #<同分の数を集計
awk '{printf("%s/%s/%s %s:%s %d\n",$2,$3,$4,$5,$6,$1);}'  #<時刻と数のデータに
```

結果をExcelにコピペしてグラフ化してみると……。

![vs_barusu.png](https://qiita-image-store.s3.amazonaws.com/0/9113/71be8a35-c626-3d5b-0f65-4a6634548efd.png)

> 「あぁ……、上映開始時点からもう収集の限界レートこえてますね……。」

### 解説

REST APIの[検索エンドポイント](https://dev.twitter.com/rest/reference/get/search/tweets)を高頻度アクセス可能なアプリケーション認証で回した時の最大呼び出し頻度は2秒あたり1回（厳密には15分間に450回）まで。そして1回で取得できる最大は100ツイート。従って1分間に取得できる最大ツイート数は3000個なのだ。

![barusu2.jpg](https://qiita-image-store.s3.amazonaws.com/0/9113/7292c528-3e76-67af-75ea-b251b875d6df.jpeg)

# 【追加企画】シェルスクリプトは「タニタ」に勝てるのか、体を張って確かめたい！

うなだれるシェルスクリプトに、スタッフが言った一言。

> こうなることは想像できててさ、もう一つ軽めの対戦カードを組んでおいたから。やって♥

その対戦カードとは「タニタ」!!!

> **株式会社タニタ（公式）**の[2016/1月14日17:27のツイート](https://twitter.com/TANITAofficial/status/687551597778317312)
>
> 「タニタ」が「バルス」を超えたら
> 1.破滅の呪文「タニタ」セット限定販売
> 2.ラピュタパンを作る
> 3.「君をのせて」体重計作成 
> 
> 超えなかったら社名を1日「バルス」にします。

タニタはこともあろうにこんな宣言をぶち上げていたのだった。

> **「何、他にも無謀な戦いを挑むやつがいたのか！！！」**

途端に目が輝き出すシェルスクリプト。

![tanita.jpg](https://qiita-image-store.s3.amazonaws.com/0/9113/5a0928b6-d7fc-483d-39ca-4d20ee4d438e.jpeg)

そういいながら、19時30分にタイムスリップし（え？）、再び戦いを挑むシェルスクリプト！

上映が終わり、今度は「タニタ」の分間ツイート数を集計することに。

## 果たして結果は!?

![vs_tanita.png](https://qiita-image-store.s3.amazonaws.com/0/9113/28e0a290-c705-dcf2-1c9f-ad5321858b62.png)

**驚きの結果は、CMの後で**

## CM

**たぶん世界唯一のシェルスクリプト総合誌[「月刊シェルスクリプトマガジン」](https://www.facebook.com/uspmag)**。毎月25日発売。

バルスに敗れたシェルスクリプト。果たして「タニタ」に勝つことはできたのか？気になる結果は、次回2016年3月号に、たぶん寄稿します。