データエンジニア視点でGoogle Sheetsの推し機能を紹介します。

# はじめに
こんにちは（こんばんは、おはようございます）、M&Aクラウドでデータエンジニアをしている尾村です。弊社において、データ参照をするツールとして、主にgoogle sheetsを利用しています。一応、環境としては、Looker Studioが利用可能なのですが、そこまで浸透させられていません。ただ、個人的には、Google Sheetsもうまく利用すれば、Looker Studioよりも柔軟にデータの可視化が可能であると考えているので、せっかくなのでGoogle Sheetsの良い点を紹介しようと思います。普段から、使い慣れている方には、当たり前の機能も多々あるかと思いますが、ご容赦ください。良い点をアピールするために、いくつかのツールを引き合いに出しますが、決してそのツールが悪いと言っている訳ではありません。むしろ、私の勉強不足な点が多々あるかと思いますが、ご容赦ください。また、データエンジニア視点と謳っていますが、そこまで関係ありません。加えて、弊社の環境だからといった点も多々含まれていますので、ご注意ください。

# 推し機能
今回紹介する推し機能は、6つあります。どれも決して他のアプリで同じようなことができないわけではありませんが、googleの各種プロダクトとの連携のしやすさなどもあり、是非紹介したい機能としてピックアップしました。

## 推し機能1. Google BigQueryとConnected Sheet機能で簡単に接続できる
なんと言っても、[この機能](https://cloud.google.com/bigquery/docs/connected-sheets?hl=ja)がないと何も始まりません。それほど、重要、というより、弊社がBigQueryをデータ基盤の中心に置いたのは、この機能が全てであると言っても過言ではありません。僅か数クリックでBigQueryからデータを抽出できます。
![connected sheet.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091446/5a4becec-fca8-3385-beb0-6df02edfbb70.png)


また、抽出して開いたシート、その画面でpivotやグラフ化も可能なため、SQL等を書く必要なく、データ分析のハードルを大きく下げてくれると思います。実は、各列の統計情報（pandasなら、df.describe()）をみる機能あります。
![connected sheet2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091446/18ed6a47-a040-fd5c-eb92-943bf71809a2.png)

データの定期更新の設定もできるので、わざわざ手動で抽出し直すと言ったことも必要ありません。
![connectedsheet3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091446/c5c88b7a-3864-0a5b-e989-7ccf00aced37.png)

弊社の社員の中にも、データ分析がしたいために、SQLを勉強しようとしていた人がいましたが、やりたいことがそこまで、複雑ではなかったため、ピボットテーブルの機能を教えたところ、半日程度でやりたいことが実現できていました。

一つ難点を挙げるとするならば、「抽出」をクリックして、取り出したテーブルの上のセルをアクティブにすると、勝手に抽出データエディターのパネルが開いてしまう点です。もし、この機能をデフォルトでオフにできる方法を知っている方いたら、教えていただけると幸いです。

## 推し機能2. spreadsheetにあるデータを簡単にBigQueryから参照できる
今度は推し機能1とは逆方向のデータ参照のための機能です。[BigQueryからSpreadsheetのデータへのアクセス](https://cloud.google.com/bigquery/docs/external-data-drive?hl=ja)も簡単です。この記事を見られている皆様も経験あるかと思いますが、ビジネスサイドの方が作ったデータをデータ基盤側でも利用したいことってありますよね？データエンジニアがそのデータをBigQuery上で再現できれば、一番安心できるのですが、ロジックが複雑すぎて、再現が不可能、ロジックが頻繁に変更になるせいで、管理コストが膨れ上がるといった懸念点も存在します。そんな時、Google Sheetsで管理されているデータなら、BigQueryから簡単にアクセスすることが可能です。
BigQueryから該当のデータセットを選択し、「テーブルを作成」すると下記のような画面が現れます。「テーブルの作成元」をドライブに、「ドライブのURIを選択」にGoogle SheetsのURLを入力、「ファイル形式」をGoogleスプレッドシートにしましょう。送信先、スキーマ、詳細を適切に設定すれば、それだけで連携できます。一点、注意する点があるとすれば、外部テーブルとして参照するため、BigQuery内にコピーしているわけではないので、Google Sheetsのデータが壊れた場合、BigQueryが壊れる可能性があります。
![テーブル連携.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091446/b1e3db3f-07e3-9052-3d92-19d3a45d39f0.png)



## 推し機能3. 名前付き関数を定義できる
いわゆる、自分で関数を定義できる機能です。
Google Sheetsあるある（そして、excelあるある）なのですが、関数を利用する際、一つのデフォルトの関数では、うまくいかないので、複数の関数を組み合わせて使うことが多いかと思います。しかも、同じロジックが複数のセルで入力値だけ変えて利用されているなんてことも多々ありますよね？そのせいで、秘伝のスプレッドシート（excel)が多々、できているなんて状況は想像に難くありません。
そんな時に使えるのがこの機能です。
利用方法も下記のように簡単です。

[データ]→[名前付き関数]をクリック
![名前つき関数.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091446/3d1a7ae3-f528-760f-eed1-848e59591743.png)

[新しい関数を追加]をクリック
![名前付き関数2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091446/a20a814e-56bd-1da8-dc00-35358e4a2824.png)

関数名、関数の説明（省略可）、プレースホルダー（引数名：複数指定可能、省略可）、数式の定義を書きましょう。数式の定義を入力するエディターは範囲が狭く、使いづらいので別のエディターで書いておいた方が良いと思います。関数名は、デフォルトの関数と区別できるようにすると良いと思います。チームで話した時は、MYという接頭辞をつけようということになりました。
![名前付き関数3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091446/bc62780b-4110-7c25-e034-48c7e70d13db.png)


## 推し機能4. [GAS(Google Apps Script)](https://developers.google.com/apps-script/reference/spreadsheet?hl=ja)が利用可能である
これは「もう言わずもがな」な機能かと思います。[excelも最近、pythonが使えるようになった](https://support.microsoft.com/ja-jp/office/excel-%E3%81%A7%E3%81%AE-python-%E3%81%AE%E6%A6%82%E8%A6%81-55643c2e-ff56-4168-b1ce-9428c8308545)と聞きましたが、webアプリとして動いているGoogle Sheetsはサーバーも必要なく、簡単なバッチ処理タスクを定期実行させられるので、slack APIを使った通知のための連携や、データ取得がそのまま可能です。言語も、javaScriptなのでクセがなく、わからなくなった時に調べるのも容易です。（まあ、これはspreadsheetに限った話でもないのですが。。。）


## 推し機能5. 勝手にバージョンの情報をとってくれる
ファイルがWeb上に存在し、みんなが編集できるデータだからこそ、間違って壊れてしまうことってありますよね。そんな時に安心できるのがこの[バージョン管理機能](https://support.google.com/docs/answer/190843?co=GENIE.Platform%3DDesktop&hl=ja)です。下記のように、「ファイル」→「変更履歴」→「変更履歴を表示」で履歴が表示されます。
![バージョン管理.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091446/f2b899b5-222b-d1ba-a422-fa5c87f798ca.png)

## 推し機能6. スマートチップが便利
これは、この記事を書く中で知ったことなのですが、[スマートチップ](https://support.google.com/docs/answer/12319513?hl=ja)の機能を使うと、googleカレンダーに登録されている「カレンダーの予定」や「地図」をスマートチップとして追加できます。
![スマートチップス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091446/6aa3e191-78f7-fec0-ded3-7339045d3247.png)

「カレンダーの予定」のスマートチップなら、そのカレンダーの予定のメタ情報が抽出できますし、「地図」なら、下図のように、スプレッドシート内でgoogle mapsを開くことも可能です。Google Sheets上で、ビジネスサイドの人がアクションをすることができる簡易的なソリューションを作ることもできますね。
![地図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3091446/93a0b523-5a49-9242-c4bc-c4a61929a4c5.png)



# 終わりに
今回は、「データエンジニア視点」と銘打って、私の好きなGoogle Sheetsの好きな機能を紹介してきました。データエンジニアにとって、excelやGoogle Sheetsと言ったスプレッドシートのアプリは決して、積極的に使いたいものではないかもしれませんが、ビジネスサイドの方々と手軽にデータをシェアし、活用してももらえるアプリであると思います。どんどん便利な機能も追加されているので、食わず嫌いせずに使ってみてはいかがでしょうか。弊社では、今後、データ活用をこれまでより積極的にやっていくためにデータエンジニアを募集しているので、興味ある方はぜひ、私に連絡いただければと思います。