RedashとGASを使って毎日自動で更新されるスプレッドシートを作った話

## はじめに
[Qiita Advent Calendar 2021](https://qiita.com/advent-calendar/2021/qiita)シリーズ２の25日目の担当は、6日目と16日目に引き続き[Qiita株式会社](https://qiita.com/organizations/qiita-inc)プロダクトマーケティングGの中泉（@zumi0）が担当します！最終日に投稿させていただき、大変恐縮です。

今回は、RedashとGASを使った話をしようと思います。
弊社ではBIツールに[Redash](https://redash.io/)を導入しています。Redashで様々なデータを抽出し日々注視しているのですが、それらのデータが日次など時間を区切った形式で集計できていないものがあったりします。また、非エンジニアがRedashを使ってデータの抽出・可視化が難しく、スプレッドシートを使った方が簡単なことが多いです。

上記の問題を解決するために、RedashとGASを使って毎日自動で更新されるスプレッドシートを作りました。
非エンジニアの方でもできる内容だと思いますので、興味がある方はやってみてください。

## [Redash](https://redash.io/)とは
Redashは、オープンソースのBIツールです。SQLを書くことで、社内のデータベースからデータを抽出して可視化したり、ダッシュボードを作成することが可能です。

https://redash.io/

## [GAS](https://workspace.google.co.jp/intl/ja/products/apps-script/)とは
Google Apps Script、通称GAS（ガス）は、Googleが提供しているプログラミング言語です。JavaScriptベースで作られているので、JavaScriptがわかっている方は難なくできると思います。

https://workspace.google.co.jp/intl/ja/products/apps-script/

## RedashとGASを使って毎日自動で更新されるスプレッドシートを作った話
今回毎日自動で更新されるスプレッドシートを作成するために、以下の手順を踏みました。

1. Redashでクエリを作成
1. クエリを定期実行されるように設定
1. GASでクエリの結果をスプレッドシートに書き込むスクリプトを作成
1. スクリプトを定期実行されるように設定

### Redashでクエリを作成
まずはじめにRedashでクエリを作成します。
今回は、以下のような結果が返ってくるクエリを作成したと仮定して話を進めたいと思います。

| 日付 | Qiitaの登録ユーザー数 | Qiitaの記事投稿数 |
|:-:|:-:|:-:|
| 2021/12/25  |  X |  Y |

### クエリを定期実行されるように設定
クエリを作成したら、そのクエリを定期実行されるように設定します。
設定の仕方は、定期実行をしていない場合クエリの画面の左下に「Never」と記載されているので、そこをクリックして設定します。
GASでも定期実行を行うので、GASよりも早い時間を設定しておきましょう。

![redash.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581736/053e1e0b-9226-1771-0444-b4d414fa9317.png)

### GASでクエリの結果をスプレッドシートに書き込むスクリプトを作成
Redashの設定が完了したので、次はGASでスクリプトを作成します。
データを書き込みたいスプレッドシートを作成し、タブから拡張機能 > Apps Scriptでスクリプトのエディタ画面を開くことができます。

今回は、Redashの結果を毎回スプレッドシートの最終行に記載するスクリプトを用意します。Redashの結果は、RedashからAPIを利用して取得します。今回はCSV取得していきます。APIを利用するためには、クエリ画面からCSV形式のデータを取得する用のURLを使います。

![gas_redash.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581736/5fa5e8f3-0127-cded-de7d-edc2830e8738.png)

![redash_api.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581736/427a417a-67fc-0596-85c5-4a0908180ee0.png)

Redashの結果を毎回スプレッドシートの最終行に記載するスクリプトはこちらです。ヘッダーに関しては、事前に記載しておくようにしてください。

```js
function getData() {
  // 書き込むスプレッドシートをidを使って指定
  const sheet = SpreadsheetApp.openById('SHEET_ID').getActiveSheet();
　// Redashのデータを取得する
  const res = UrlFetchApp.fetch('REDASH_API_URL');
  const data = Utilities.parseCsv(res.getContentText("UTF-8"));
  
  // スプレッドシートにRedashのデータを書き込む
  sheet.getRange(sheet.getLastRow() + 1, 1, 1, data[1].concat().length).setValues([data[1].concat()])
}
```

### スクリプトを定期実行されるように設定
スクリプトを定期実行させるためには、エディタ画面のサイドバーにある時計マークをクリックします。クリックすると右下に「トリガーを追加」が出てくるので、次はそちらをクリックします。

![スクリーンショット 2021-12-24 12.10.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581736/a60d9141-c37d-a1f8-7416-a6206df2040c.png)

クリックすると定期実行の設定ができるモーダルが表示されるので、そこで設定します。定期実行したい場合は、「イベントのソースを選択」の欄で、「時間主導型」を選択します。そうすると、どのスパンで設定するか選択できるようになるので、自分がやりたいスパンを選択して完了です。

![スクリーンショット 2021-12-24 12.11.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581736/c6372169-75b1-2498-308b-28875bebc0a5.png)


## さいごに
今回は、RedashとGASを使って毎日自動で更新されるスプレッドシートを作った流れを紹介させていただきました。非エンジニアの方でもかける内容になっていると思いますので、興味がある方はやってみてください！