スプレッドシートにカスタムメニューを追加して、拡張機能を実装する方法

## はじめに

![スクリーンショット 2018-12-17 23.22.37.png](https://qiita-image-store.s3.amazonaws.com/0/19698/2b7225df-e20e-1cbf-2882-db2093c25a7f.png)
こんなやつをスプレッドシートのカスタムメニューに追加して、いろんな便利系の処理ができるという話です。実際の処理は [Google Apps Script](https://developers.google.com/apps-script/) (JavaScript) で書く必要があります。

## 手順

以下の手順（ 1-2 分くらい）で拡張するところまでいけます。

### 1. スプレッドシートファイルを開く

Google Apps Script を使って特定の処理を行いたいスプレッドシートを開く。

### 2. ツール > スクリプトエディタ を選択

![スクリーンショット 2018-12-17 23.25.02.png](https://qiita-image-store.s3.amazonaws.com/0/19698/8605a06f-052f-7228-fd0d-0f630d61c978.png)
ツール > スクリプトエディタ を選択

### 3. スクリプトのプロジェクト名を入力

![スクリーンショット 2018-12-17 23.32.35.png](https://qiita-image-store.s3.amazonaws.com/0/19698/33674898-adbc-0a66-2df8-cb5125aac8c6.png)
Google Apps Script のスクリプトが開くので、 **無題のプロジェクト** の部分を選択して、プロジェクト名を入力。

![スクリーンショット 2018-12-17 23.34.14.png](https://qiita-image-store.s3.amazonaws.com/0/19698/025c51c9-fd79-2f9b-b984-04196e5fe03e.png)
ダイアログが出るのでプロジェクト名を入力して **OK** を選択。

### 4. メニューを追加するコードを書く（コピペ）

```JavaScript
function onOpen() {
  SpreadsheetApp
    .getActiveSpreadsheet()
    .addMenu('カレンダー連携', [
      {name: '一括登録', functionName: 'registerAll'},
      {name: '一括キャンセル', functionName: 'cancelAll'},
    ]);
}

function registerAll() {
  // 処理を書く
}

function cancelAll() {
  // 処理を書く
}
```

[onOpen](https://developers.google.com/apps-script/guides/triggers/) は、スプレッドシートを開いたときに呼びだされる、予約されたメソッド。 [SpreadsheetApp.getActiveSpreadsheet()](https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#getActiveSpreadsheet()) で連携しているスプレッドシートを取得する。 [addMenu](https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#addMenu(String,Object)) でメニューを追加している。addMenu の第 1 引数には追加するメニュー名、第 2 引数には、処理を走らせる関数名とサブメニューの名前を配列形式で指定する。

### 5. onOpen メソッドを実行

onOpen メソッドを実行、スクリプトに必要な許可を与える。

![スクリーンショット 2018-12-17 23.58.30.png](https://qiita-image-store.s3.amazonaws.com/0/19698/74dc4812-8134-260c-0065-1e5a4cab8554.png)
関数を選択 > onOpen メソッドを選択

![スクリーンショット 2018-12-17 23.58.41.png](https://qiita-image-store.s3.amazonaws.com/0/19698/1654a563-1e37-cd7a-29fb-1fa271b96384.png)
▶ で実行

![スクリーンショット 2018-12-18 0.00.22.png](https://qiita-image-store.s3.amazonaws.com/0/19698/b47e1ea4-5fd2-7008-1139-2031251360c3.png)
許可を確認 を選択

![スクリーンショット 2018-12-18 0.00.42.png](https://qiita-image-store.s3.amazonaws.com/0/19698/151b37ec-c1aa-fe2a-41a2-7bd33b1a5800.png)
実行中のアカウントを選択

![スクリーンショット 2018-12-18 0.00.48.png](https://qiita-image-store.s3.amazonaws.com/0/19698/6f8086a5-bddb-4c97-b64a-9479c31897dd.png)
この画面が出た場合は詳細を選択（出ない場合はスキップ）。

![スクリーンショット 2018-12-18 0.00.57.png](https://qiita-image-store.s3.amazonaws.com/0/19698/1f637d1d-2185-712e-4bc2-ad3a9641672f.png)
安全ではないページに移動（出ない場合はスキップ）。本当は安全なので気にしなくて大丈夫です;

![スクリーンショット 2018-12-18 0.01.10.png](https://qiita-image-store.s3.amazonaws.com/0/19698/d668bcea-c5b1-afa2-51c5-b3a0c3f176fe.png)
許可を選択。

### 6. スプレッドシートを確認

![スクリーンショット 2018-12-18 0.06.53.png](https://qiita-image-store.s3.amazonaws.com/0/19698/e9210a52-4894-5f27-f01f-103b096f930d.png)
メニューが追加されていて、サブメニューが実行できれば OK!


## 次にやること

サクッとスプレッドシートにメニューを追加できました。あとは、それぞれのメソッドに実行したい処理を書きましょう。

実際の処理例は最後のセクションの関連記事をご参考ください。

[グロービスのアドベントカレンダー](https://qiita.com/advent-calendar/2018/globis) で違う GAS ネタも書きました > [毎月 500 時間の社内ルーティンワークを GAS を使って自動化した話](https://qiita.com/tanabee/items/ce9c3cf9403c4f3f14a9)。こちらでも色んなサンプルを紹介してます。

## 関連記事
- [CSV 形式のイベント一覧情報を Google カレンダーに一括登録する 2 つの方法 ](https://qiita.com/tanabee/items/7ebcc63e5b561d18a582)
- [【決定版】GAS で Gmail の検索結果をスプレッドシートに抽出する方法](https://qiita.com/tanabee/items/17eb721801eff8d97db9)
- [Google Apps Script ハンズオン資料 ](https://qiita.com/tanabee/items/4a5056f468ae71d8d648)
- [GAS ビギナーが GAS を使いこなすために知るべきこと 10 選](https://qiita.com/tanabee/items/2c51681396fe12b6a0e4)