ターミナルからgoogleスプレッドシートを編集する方法

#成果物
googleスプレッドシートの項目をターミナルから追加するプログラムを作りたいと思います！
![スクリーンショット 2020-08-30 12.33.01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663834/1537a9da-e3a0-35b6-51ae-963da0fc568f.jpeg)
　↓
![スクリーンショット 2020-08-30 12.32.04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663834/6fc32b97-0433-a757-a2e9-cb7a6aaeaac4.jpeg)

![スクリーンショット 2020-08-30 12.40.14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663834/aaf628a1-6a3b-7a86-b764-b9b3b44ef419.jpeg)



#前提知識
・javascript関数の基礎
・ターミナルの基本コマンド


#gasで関数を作成する
googleのツールの編集や連携をするための言語、gas(Google Apps Script)を使用します。スプレッドシートに、ターミナルから送られてきた情報を受け取り、スプレッドシートに書き込むプログラムを作ります。

まずスプレッドシートの１行目に受け取るデータの項目を作ります。
シート名も任意の名前に変更しておきます。ここでは"monster"としました。
![スクリーンショット 2020-08-30 12.33.01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663834/4a75e8ce-3a84-43ee-90be-ec3adf1d55b1.jpeg)

ツールからスクリプトエディタを開きます。
![スクリーンショット 2020-08-30 12.43.49.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663834/894e6e55-368d-290c-9368-07b19a27e907.jpeg)

スクリプトエディタにgasでプログラムを書いていきます。

```.js:.gas
//doPostという関数を作ります。通信を受け取る関数名は必ずこの名前にします。
const doPost = (e) => {
  const data = {
  name:e.parameter.name,
  hp:e.parameter.hp,
  attack:e.parameter.attack,
};
　//下のappendMonsterの関数が実行されたら、OK!というテキストを返す（この場合はターミナルへ返します。この一文がないとプログラムは実行できているのにターミナル側にはエラーと返ってきてしまいます）
  appendMonster(data);
  return ContentService.createTextOutput("ok!");
}

//appendMonsterという関数を作ります。
const appendMonster = (data) => {
　　　//アクティブなスプレットシートを取得
    const spreadsheet = SpreadsheetApp.getActive();　
　　　//monsterというシートを取得
    const monsterSheet = spreadsheet.getSheetByName("monster");
　　　//それぞれの項目の情報を一番下の列に挿入する
  monsterSheet.appendRow([data.name,data.hp,data.attack]);
}
```

#関数をAPIとして公開
関数をAPIとして公開し、ターミナルから接続できるようにします。

先ほどのスクリプトエディタの
公開からウェブアプリケーションとして導入を選択します。
![スクリーンショット 2020-08-30 13.00.38.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663834/5bdf89dd-8056-d8c2-f9eb-b6580cc14b43.jpeg)

注意点
プロジェクトバージョンは毎回newで、任意の名前を入れ更新してください。（こうしないと変更が反映されないことがあります）
![スクリーンショット 2020-08-30 13.03.32.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663834/69a6fbbe-3a0e-294c-b203-0a6700f4cca0.jpeg)

appにアクセスできるのは、anyoneを選択してください。
![スクリーンショット 2020-08-30 13.03.39.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663834/27e8ff19-7554-26a9-b165-53acff57c343.jpeg)

これらの設定が済んだら、更新を押し、![スクリーンショット 2020-08-30 13.07.41.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663834/264c35ef-8c39-c344-178f-ce63b7e2c0ae.jpeg)
このURLをコピーしておきます。
これでスプレッドシート側の準備は完了です！

#ターミナルから通信
makefileを使ってターミナルから通信していきます。
makefileとは：https://qiita.com/seihmd/items/42996d5abb14badf775e
ホームの中に、makefileを入れるための任意のフォルダを作っておきます。

まず以下のコマンドをうち、makefileのファイルを作っていきます。

```.command
touch makefile
```
makefileの中は以下のように書いていきます。

```.makefile
API_URL = 先ほどスプレッドシート側でコピーしたURL
appenddata:
        curl -L  $(API_URL) \　
        -F 'name=炭治郎' \
        -F 'hp=50' \
        -F 'attack=10'
```

appenddataという関数の中では、まずcurlという通信コマンドを使って、URLにアクセスし、以下のデータを受け渡します。
curlについて：https://qiita.com/yasai10reta/items/472cdc7fa15e99038f96?fbclid=IwAR1R3nRBNHqpId9bCXYeJ-YF9xAZCESJNPqhLAhRAbtaM1pNvPxdm90VgRM

最後に以下のコマンドでappenddataを呼び出します。

```
make appenddata
```
スプレッドシートに以下のように行が追加されました！
![スクリーンショット 2020-08-30 12.32.04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663834/dd552070-5157-868e-577d-588194ba4189.jpeg)