GASを用いた便利ツール2点 「Google Calendarから各タスクの工数確認」「Google Driveのファイル一覧確認」

この記事は、[Supershipグループ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/supership)の 16日目の記事になります。

去年は[Googleスプレッドシートのタスクリストをslackへ通知](https://qiita.com/suzukitheseventh/items/82008db9ce0f4c7b3bea)についての記事を作成しましたが今年は、GAS(Google App Script)を用いた便利ツールの記事にしようと思います。

「参考サイトのコードを一部カスタマイズしたもの」ではありますが、2種類紹介します。



# 目次

[1. Google Calendarのイベントから各タスクの工数確認ツール](#1-google-calendarのイベントから各タスクの工数確認ツール)
[2. Google Driveのファイル一覧確認ツール](#2google-driveのファイル一覧確認ツール)


<a id="sec1"></a>
# 1. Google Calendarのイベントから各タスクの工数確認ツール


##  目的
Googleカレンダーに登録したイベントとそれぞれの時間をGASによりスプレッドシートへ集計します。


## 背景
2019年に「タスク名を実際に稼働した時間帯にGoogleカレンダーに入れておくことであとからどのタスクにどれくらい時間を使ったかがわかるツールを作成する取り組みがありました
(余談ですが、この時にGoogle Calendar APIをいじることで、[一昨年のアドベントカレンダーで紹介したツール](https://qiita.com/suzukitheseventh/items/58e29fba080f44630d5a)の作成にも繋がりました)。
この試みは完成しないまま終了したのですがその後、このツールをほしいと思い、去年(2021年)の12月頃に再び作成を試みたところ、[こちらのサイト](https://codelife.cafe/entry/gas-get-google-calendar)を見つけたため参考にして作成しました。


## 用いるもの
 - Googleカレンダー
 - Googleスプレッドシート
 - Google App Script


## 内容


基本的に[こちらの参考サイト](https://codelife.cafe/entry/gas-get-google-calendar)のコードとなります。
変更点としましては、
99行目あたり(`isExclusion`の中)に、

```javascript
// 「工数管理用」を含まないものはスキップしたい
if (/工数管理用/.test(event.getTitle())) return false;
```
という一文を追加しています。

### 変更点の意図
「カレンダー上で30分で設定されていたミーティングが15分で終わったが主催者が他の人で変更権限が無いため時間変更できない」というようなケースがある場合に対応するためです。
工数管理用に実際にかかった時間で自分で別途カレンダーにイベントを入力します。
例：「タスクA MTG 工数管理用event」


### コード外の工夫
 - PCの辞書ツール(私の環境はMacで、Google日本語入力辞書ツールを利用しています)で
「こうすう」に「工数管理用event」を紐付けることで入力時間は少し短縮しています。



<a id="sec2"></a>
# 2.Google Driveのファイル一覧確認ツール

##  目的
Google Drive内のファイルの一覧をGASによりスプレッドシートへ集計します。

## 背景
「Drive内の条件に一致するファイルについて一つ一つ中身を確認していきたい」という目的です。
Google Drive検索だと一つ一つ見ていった時に「どこのファイルまで確認済みだったか」が途中でわからなくなったり、スクロールして下の方まで行っていたものが、誤ってリロードしてしまうと上に戻ったりしてしまうため、チェックシートの役割も担うようなものが欲しかったです。
Google Drive検索の結果のexportが調べても方法を見つけることができなかったためGASを利用しようと思い、[こちらのサイト](https://qiita.com/pkino/items/99da15a71040763d467c)を参考に作成しました。
対象のDrive内のファイルをすべて表示後、スプレッドシート上でフィルターをかけるという考えです。


## 用いるもの
 - Googleスプレッドシート
 - Google App Script

## 内容

基本的に[こちらのサイト](https://qiita.com/pkino/items/99da15a71040763d467c)のコードとなります。


変更点① 54行目
```javascript
const fileValueEn = '=HYPERLINK("' + file.getUrl() + '",' + 'GOOGLETRANSLATE("' + file.getName() + '", "ja", "en")' + ')';
    sheet.getRange(row, 3).setValue(fileValueEn);
```
部分をコメントアウトし

```javascript
sheet.getRange(row, 3).setValue(file.getMimeType());
```
としています。

変更点②
56行目
(`sheet.getRange(row, 4).setValue(file.getLastUpdated());`の下)に


```javascript
var parents_folders_list = [];
    parent = file.getParents();
    while (parent.hasNext()) {
      parent = parent.next();

      parents_folders_list.push(parent.getName());

      parent = parent.getParents();
    }

    sheet.getRange(row, 5).setValue(parents_folders_list.reverse().join('/'));
```

を追加しています。
[参考サイト](https://www.labnol.org/code/19946-get-folder-path-of-files)



### 変更点の意図
変更点①
ファイルの形式を合わせて出力確認するために追加しました。
スプレッドシート上でフィルターすることでほしい形式のファイル一覧を取得することが可能です。


変更点②
ファイルの置き場所までのパスを表示する目的で追加しました。
変更前の状態でもA列にファイルが置かれているフォルダ名が表示されますが、さらにその上の階層も含めてフルパスが知りたかっため追加しました。


### 感想
1.Google Calendarのイベントから各タスクの工数確認ツール
毎週上長との1on1があるのですが、こちらのツールでスプレッドシート上で円グラフで表示することで、今週どんなタスクにどのくらい時間を使っていたかがわかるようになり、必要以上に時間を使っているタスクがある場合は相談できたりするため作成してよかったと思っています。


2.Google Driveのファイル一覧確認ツール
用いたのは1度ですが無事動いて、やりたいことができたため良かったです。
Google Drive用CLIツールもあるようですので、そちらも試してみようと思いました。




### 最後に宣伝
Supershipではプロダクト開発やサービス開発に関わる人を絶賛募集しております！
ご興味がある方は以下リンクよりご確認ください！
 [Supershipグループ 採用サイト](https://supership.jp/recruit/)






### 参考書籍&サイト
 - [詳解！ Google Apps Script完全入門 ～GoogleアプリケーションとGoogle Workspaceの最新プログラミングガイド～](https://www.shuwasystem.co.jp/book/9784798064741.html)

 - https://codelife.cafe/entry/gas-get-google-calendar
 - https://qiita.com/pkino/items/99da15a71040763d467c
 - https://www.labnol.org/code/19946-get-folder-path-of-files