プログラミングの第一歩にGASをはじめてみよう！

こんばんは、おおさき（[@massa_potato](https://twitter.com/massa_potato)）です。

こちらは **沖中塾(初心者向け記事)のカレンダー | Advent Calendar 2022** の10日目の記事です。

https://qiita.com/advent-calendar/2022/okinakajyuku

「初心者向けのやさしい記事」というテーマのアドベントカレンダー。本記事では、モノづくり・プロトタイピングにも便利なプログラミング言語GASの魅力を伝えたいと思い、書いてみました。

初学者向けにGASのメリットとはじめ方を紹介し、最終的に「**Googleスプレッドシートを使ったカンタンな打刻プログラム**」を作って、GASの便利さを体験してもらえるような内容にしています。お時間のある方はぜひ一緒に手を動かしてみてください。

:::note warn
本記事では、GASのコードが出てきますがあまり解説することができていません。GASの書き方などについて詳しく知りたい方は、また別の記事を探してみてくださいね。
:::

## なぜプログラミング学習で挫折するのか

プログラミング初学者が挫折してしまう原因のひとつに**目的に対してハードルが多すぎる**ということがあると思います。

たとえば皆さんが「プログラミングで何かを作ろう！」と思ったときは、まずは言語（PythonやRubyなど）に応じた開発環境を用意して、学習しつつコードを書いて機能を作っていくことになります。

そしてそれを実際に活用するためには、どこかのサーバーにデプロイしたりデータベースを用意して、本番環境へ移す必要があります。

これは、初学者には結構長い道のりですよね。「動くモノ」を作ってプログラミングの便利さを体感する前に、やってることの意味を見失って挫折してしまうことも多いのかなと思います。

実際に僕も最初はRubyの学習を初めてWebアプリ制作を学んだのですが、何もわからない中で「作りたいものを考えて」「エラーと戦いながら開発環境を用意して」「言語の基礎を学んで」「エラーと戦いながら本番環境に…（ところでいまこれ何してんの？）」というように、目的に対して手順が膨大でとてもストレスがかかった記憶があります。

そこで、**そのハードルを少なくできてとてもオススメなのが、GAS（Google Apps Script）というJavaScriptをベースにしたプログラミング言語**です。

もちろん、GASを使うのが適切かどうかは作りたいモノにもよりますし、本格的にプロを目指すとかであればハードルに向き合って挑戦することは大切だと思います。ですがせっかく便利なものがあるなら、これを利用しない手はありません！

## GASについて

GAS（Google Apps Script）とは、Google社が提供しているプログラミング言語です。公式ページを見ると「ローコード プラットフォーム」と表記されていますね。

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/9286239e-2c6a-6d28-80b2-759185d59cc5.png)

プラットフォームなので、正確にいうと「プログラミング環境」と呼んだ方がしっくりくるかもしれません。言語だけでなく、コードを書いて実行するための環境など必要なものが一通り用意されているためです。

ではなぜGASがプログラミング初学者にとってハードルが少ないのか、僕が実感しているのは次の3点です。

1. すぐに開発が始められる
2. すぐに実運用ができる
3. Googleサービスとの連携で成果を実感しやすい

**1. すぐに開発が始められる**

GoogleアカウントがあればすぐにGAS開発を始められます。そしてGASはブラウザ上で扱うことができるので、手持ちのPC（WindowsだろうがMacだろうが）に依存するような環境構築が必要なく、手順に沿ってやればエラーも起きづらいため、初学者でもさほど難しくありません。

**2. すぐに実運用ができる**

GASで作成したプログラムは、Googleが用意してくれているクラウド上でそのまま動かして実運用することができます。外部サーバーやクラウドにアップする…という作業を省くことができるため、開発環境構築と同様に手順に従ってやればOKです。またこれにより、時間でのトリガー設定などの非常に便利な機能を手軽に実装することもできます。

**3. Googleサービスとの連携で成果を実感しやすい**

そして、GASはGoogleスプレッドシートやGoogleドキュメント、GmailなどのGoogleサービスとの連携・自動化が得意なのが特徴です。これにより、数行程度のちょっとしたコードを書いただけでも目に見える実行結果が得られ、プログラミングの便利さを実感しやすくなっています。

以上が、GASがプログラミング初学者にとってハードルが少ない理由です。

GASを使うことで、言語の学習やプログラムで目的を達成することに集中することができるんですね。またGASで一通りプログラム制作の流れを体感することで、他の言語やサービスを利用するときにも習得しやすくなるので、学習の費用対効果もとても高いと思っています。

:::note info
GASは **「JavaScript」** というプログラミング言語をベースにしています。これはWebなどで広く使われている言語のため習得すると汎用性も高く、情報も多く困ったときに調べやすいというのもオススメポイントです。
:::

## GASの環境構築のやり方

では、実際にGASでプログラミングを行う開発環境を用意してみましょう。

ここからの操作は「Google Chrome」のブラウザを利用しています。PCはMacを使っていますが、Windowsの場合でもブラウザの操作は大きく変わらないはずです。

また無料のGoogleアカウントが必要になりますので、もしアカウントを持っていない方は先にアカウントを取得しておいてくださいね。

### Googleドライブにスプレッドシートを用意する

まずはブラウザでGoogleアカウントにログインした状態で、[Googleドライブ](https://drive.google.com/drive/)を開きます。はじめてドライブを使う場合は、以下のような画面が出てきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/a0d6c471-0796-192b-8a31-8ff1aa769559.png)

次にページの左上にある 「＋新規」 をクリックして、出てくるメニューの「Googleスプレッドシート」から「空白のスプレッドシート」を選択します。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/12f9e10e-5a48-a99a-3744-eef427e328c4.png)

するとブラウザに新しいタブが開かれて、このような表計算ソフトの画面が出てきます。これで、スプレッドシートの新規作成が完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/fc7ac2d6-6c3c-7eac-492a-cb1720152c12.png)

本来ならば、このスプレッドシート名（ファイル名に相当します）をちゃんとわかりやすい変更しておいたり、必要であればプロジェクトごとにフォルダ管理したりした方が良いのですが、今回はこのまま説明していきますね。

### GASスクリプトエディタを立ち上げる

次に、このスプレッドシートからGASを書くためのエディタを開いてみましょう。

スプレッドシートのメニューバーにある「拡張機能」から「Apps Script」を選択します。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/7a425402-325f-ab65-3a0f-cbf70bc60342.png)

ブラウザに新規タブで以下のような画面が起動したら、準備完了です。とてもカンタンですね！

![2_スクリプトエディタの画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/6adef10e-f6d8-a2cf-b1ed-5d9a7c98ae59.png)

この画面は「スクリプトエディタ」といいます。GASで書いたコードは「スクリプト」と呼ばれ、このエディタ上で実際の開発を行っていくことになります。

:::note info
GASのエディタを開く方法は他にもあり、スプレッドシートを経由しないでドライブから直接開くこともできます。これはスクリプトが独立しているので「**スタンドアロンスクリプト**」と呼び、一方で先ほど説明したのはスプレッドシートに紐づいているので「**コンテナバインドスクリプト**」と呼びます。

コンテナバインドスクリプトは、他にもGoogleドキュメントやGoogleスライドにも存在します。今回のように操作したい対象（スプレッドシート）が明確な時に便利なので、違いをちらっと紹介してみました。
:::

## カンタンなプログラムを作って動かしてみよう

それではここからは「スプレッドシートにデータを記録する処理を作る」ことを目標に、段階を追ってスクリプトを書きながらエディタの基本操作を見ていきましょう。

### ログを表示するスクリプト

まずは「Hello, World!」というログを画面上に表示するだけのスクリプトを書いてみます。

スクリプトエディタの右側のグレーの領域に、以下のように書いてみましょう。最初に記述されているfunction myFunction() { }の波括弧の間を補完する形で記述してください。

```javascript
function myFunction() {
  const text = 'Hello World!';
  console.log(text);
}
```

詳細な解説はできませんが、このスクリプトのイメージを簡単に説明します。

- `text`という箱（変数）に、表示したいデータを入れて
- 最後の行で、そのデータを画面上に表示する！

…非常に雑ですみませんが、このくらいのイメージで進めてみてください。

### スクリプトの保存と実行

次に、スクリプトの保存を行います。ツールバーの「プロジェクトを保存」アイコンをクリック（もしくは`Ctrl+S` / `Cmd+S`）して、変更したスクリプトを保存します。

![2_スクリプトの保存.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/dfd277c2-e679-7ab4-662b-6caeb1d76070.png)

保存ができたら、実行ボタンを押してみましょう。上部ツールバーに「myFunction」が表示されているのを確認した上で、「▷実行」をクリックしてみてください。

![2_スクリプトの実行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/ed7ee662-5451-1372-f7fd-c1237a8b3a08.png)

このように「実行ログ」に「Hello World!」が表示されていれば成功です！

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/6fdc5431-0199-588f-e4d7-e30976d49921.png)

もしスクリプトが間違えていたりすると、保存時や実行時に赤文字でエラーや警告文が現れます。タイプミスなどがないか確認してみてくださいね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/9536dcdb-6499-a19f-69f3-061984fbdf63.png)

## スプレッドシートにデータを追加してみよう

では次に、スプレッドシートとの連携を試してみましょう。

先ほどは画面上に自分だけが見えるログを表示するだけでしたが、ここからは実際に現実のデータ（＝スプレッドシート上のデータ）に変更を加えたり追加したりすることになります。

### スプレッドシートのA1セルに記入するスクリプト

先程の「ログを表示するスクリプト」で書いたように、エディタに以下のように記述してみましょう。

```javascript
function myFunction() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
  const text = 'Hello World!';
  sheet.getRange(1, 1).setValue(text);
}
```

ある程度わかる方には良いのですが、初見ではだいぶ難しそうに見えますよね。このスクリプトのイメージを簡単に説明します。

- `sheet`という箱（変数）に、データを読み書きしたいシートをとってきて
- `text`という箱（変数）に、書き込みたいデータを入れて
- 最後の行で、シートのセルを指定して書き込む！

### 実行してアクセスの許可を行う

先ほどと同じように保存して実行してみます。すると今度は何やら「承認が必要です」というウィンドウが表示されるので、素直に従って「権限を確認」をクリックします。

![2_アクセス許可の手順01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/83513618-ff03-3d8b-cbd9-a91384d46ed5.png)

少し戸惑うかもしれませんが、これはGASを使ってスプレッドシートなどのサービスにアクセスするために必要な操作になります。

次にGoogleアカウントへのログインのためのウィンドウが表示されるので、自身のアカウントを選択してログインします。

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/92eea826-4564-d8f6-b7d4-512d2ab95b29.png)

すると、無料のGoogleアカウントを使っている場合は「このアプリはGoogleで確認されていません」の画面が表示されます。左下に小さく表示されている「詳細」をクリックしてください。

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/a01f8343-06dd-ce6d-e05e-5455c039fda3.png)

続いて一番下の「無題のプロジェクト（安全ではないページ）に移動」をクリックします。

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/194513cf-d0c1-f9f1-361d-c1f1f7247240.png)

最後に以下のような画面が表示されるので、右下の「許可」をクリックします。

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/58ec2a92-a8e1-e95e-8dab-69eac25d7faa.png)

するとスプレッドシートへのアクセス許可が完了し、スクリプトエディタの実行ログに「実行完了」と表示されているはずです。

![2_スクリプトの実行ログで実行完了.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/5987dd4a-fd8a-e681-ed38-4c1de7cc60b1.png)

実際にスプレッドシートを見に行くと、このように「A1」セルに「Hello World!」という文字が入っているはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/01bf96bb-d3ba-de3d-fe17-46db8cb29a06.png)

無事に、スプレッドシートに書き込むスクリプトを作ることができました！

### スプレッドシートに現在時刻を打刻するスクリプト

さて、これが最後。少し手を加えて、カンタンな打刻プログラムを作ってみましょう。

まずはスプレッドシート側を少しいじります。先程のA1セルに入った「Hello World!」の文字を削除して、1行目に「名前」「日時」という文字を用意しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/bef8468f-b356-5ad0-a627-1080d54285a9.png)

この行が見出し行となり、その下にデータが追加されていくような仕組みです。

それではスクリプトエディタに戻り、今度は以下のように`myFunction`の中身を記述してみます。

```javascript
function myFunction() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
  const name = 'おおさき'; // ※自分の名前を入力！
  const time = new Date();
  sheet.appendRow([name, time]);
}
```

「※自分の名前を入力！」と書いている行の「おおさき」の部分は、皆さん自身の名前に変更してみてください。スクリプト中に文字列を入力する場合はシングルクォート`'`（もしくはダブルクォート`"`）で囲む必要があるので、そこだけ注意が必要です。

このスクリプトのイメージを簡単に説明します。

- `sheet`という箱（変数）に、データを読み書きしたいシートをとってきて
- `name`という箱（変数）に、書き込みたい名前のデータを入れて
- `time`という箱（変数）に、書き込みたい現在日時のデータを入れて
- 最後の行で、2つのデータをシートの最終行に一気に書き込む！

### 実行するとシートに行が追加される

スクリプトを保存して実行してみます。エラーが出ずに実行完了したことを確認したら、スプレッドシートを見にいってみましょう。

このように、2行目に新しくデータが入っていれば成功です！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/8f2de452-0f97-3007-880d-3e97ffd99c1e.png)

何度も実行してみると、下にどんどんデータが追加されていきます。面白いですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/0ec79b73-e584-b9d4-9e48-38cc11947bc9.png)

この状態で、たとえばスクリプト上で打刻する名前を変更して実行してみると、それに応じたデータが追加されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499640/857a4b6a-f572-1fea-052e-26d2a271c159.png)

これだけだとまだ実用が難しそうですが、ひとまず超シンプルな打刻プログラムを作ることができました！

## おわりに

初学者向けに、GASの魅力やはじめ方、またスプレッドシートを使ったカンタンなプログラムを作ってみました。GASの便利さを体感していただくことはできたでしょうか？

実際にもっと実用的なプログラムを作るには、もっと文法やエディタの活用のやり方などの学習が必要になります。ですが「GASを使うとあまりストレスなく動くモノが作れるんだ」ということを実感していただけていたら良いなと思います。

本記事が、皆さんの良きモノづくり・プロトタイピングの第一歩につながれば嬉しいです！