【シェル】かっぱ寿司のメニューを表示するsushi(寿司)コマンド作ってみた

### 【概要】
下記リンク先のかっぱ寿司のメニューから、欲しい寿司情報を取得するsushiコマンドを作成しました。
[メニュー | かっぱ寿司 | 回転寿司](https://www.kappasushi.jp/menu2)

### 【環境】
Cygwin（Linuxでも実行可能です）
jqコマンドが使用可能である

### 【コード】
[Github](https://github.com/nobu12/sushi)にアップロードしてあります。

```bash:sushi
#!/bin/bash

title=`printf "%-40s %-20s %s" 名前 カロリー\(kcal\) 店内価格税込\(円\)`

sushi_info=`curl -s https://www.kappasushi.jp/master_data/json/menulist.json | jq -r '.Product[] | select(.name | contains ("'$1'")) | [.name, .cal, .sell_price_tax10per]| @tsv' | awk -F '\t' '{printf "%-20s%-10s%s\n", $1, $2, $3}' | sed -e 's/<br>/　/g' -e 's/ /  /g'`
echo -e "${title}\\n${sushi_info}"
```
### 【コード説明】
#### 1. メニュー表示用のjsonを取得する
```bash
curl -s https://www.kappasushi.jp/master_data/json/menulist.json
```
　jsonのURLは、[メニュー | かっぱ寿司 | 回転寿司](https://www.kappasushi.jp/menu2)のページソースを見れば発見できます。

#### 2. jsonから必要なオブジェクトを抽出する
```bash
jq -r '.Product[] | select(.name | contains ("'$1'")) | [.name, .cal, .sell_price_tax10per] | @tsv'
```
　1. rオプションは不要なダブルクォーテーションを出力しないようにするためです。
　2. Productキー内のオブジェクトを抽出します。
　3. nameキーに引数で与えられた文字列が含まれるオブジェクトを抽出します。
　4. 実行結果に必要なnameキー、calキー、sell_price_tax10perキーの値を抽出します。
　5. tsv形式で抽出します。

#### 3. 実行結果が見やすくなるように、抽出した情報を整形する
```bash
awk -F '\t' '{printf "%-20s%-10s%s\n", $1, $2, $3}' | sed -e 's/<br>/　/g' -e 's/ /  /g'
```
　1. 区切り文字をタブに指定して、nameキー、calキー、sell_price_tax10perキーの値を整形します。
　2. \<br>を全角スペースに、半角スペース1つを半角スペース2つに変換します。

### 【実行結果】
#### 引数なし
引数なしの場合、メニューが全て表示されます。
"アサヒドライゼロ"など、寿司以外も表示されていますが想定通りの結果です。
```terminal
$ ./sushi
名前                                   カロリー(kcal)   店内価格税込(円)
海のフォアグラ　あん肝ポン酢ジュレ115              110
まぐろ                                  71                110
びん長まぐろ                            73                110
まぐろ二種盛り　（まぐろ・びんちょう）73                110
オニオンサーモンマヨ                    117              110
えんがわ(大葉)                        65                110
アボカドサーモン                        136              110
わさびなす                              62                110
赤貝                                    63                110
天然〆いわし                            71                110
かにみそ                                77                110
卵黄とろろ軍艦                          81                110
なっとう軍艦                            98                110
なっとう巻                              154              110
本鮪三昧                                148              363
さくさくイカ天にぎりマヨ                168              110
えび天にぎりマヨ                        134              110
えび天にぎり                            119              110
卵黄納豆軍艦                            91                110
生搾りレモンサワー                      112              429
浜焼き風  玉子                          156              110
テリヤキハンバーグ                      123              110
テリヤキハンバーグマヨ                  152              110
からだすこやか茶Ｗ                      0                  165
松竹梅　豪快　辛口（熱燗）              182              539
アサヒドライゼロ　（ノンアルコール）0                  429
(以下省略)
```

#### 引数あり
引数に"とろ"を指定した場合、名前に"とろ"を含むメニューが表示されます。
```terminal
$ ./sushi とろ
名前                                   カロリー(kcal)   店内価格税込(円)
卵黄とろろ軍艦                          81                110
ねぎとろの山かけ                        79                110
ねぎとろ軍艦                            81                110
本鮪中とろ                              57                242
ねぎとろ　ザク旨ラー油包み              62                110
とろ〆さば                              118              110
卵黄ねぎとろ軍艦                        95                110
ねぎとろ納豆                            90                110
中とろ                                  57                242
肉厚とろ〆さばの押し寿司                184              187
肉厚とろ〆さばの炙り押し寿司            184              187
とろサーモン                            113              187
中とろ塩炙り                            58                242
柚子塩とろ〆さば                        111              110
ねぎとろ巻                              148              187
三陸産とろいわし                        85                187
肉厚とろ〆さばの押し寿司（９切れ）      0                  836
すし㐂邑監修　三陸産とろいわしの　ねぎ塩ごま油仕立て115              187
三陸産とろいわし塩炙り                  99                187
大切りとろびん長                        83                242
柚子塩とろサーモン　はらす包み    97                110
オニオンとろサーモン　はらす包み  98                110
```