| この記事の要点 |
|
GAS とは
Google Apps Script(略して GAS)は、Google が提供するクラウド型のスクリプト実行環境です。JavaScript ベースの構文で書け、Google アカウントさえあれば無料で利用できます。サーバを用意する必要も、ローカルに何かをインストールする必要もありません。
| 項目 | 内容 |
|---|---|
| 言語 | JavaScript(V8 ランタイム、ES2015+ 対応) |
| 実行環境 | Google のクラウドサーバ(ローカル不要) |
| 料金 | 無料(実行時間・API 呼び出し回数に上限あり) |
| 必要なもの | Google アカウント(個人 / Workspace どちらも可) |
| 主な用途 | Spreadsheet 自動化 / Gmail 自動送信 / Web API / Slack 連携 |
STEP1: Google アカウントを準備
個人の Gmail アカウントでも、Workspace(旧 G Suite)アカウントでも構いません。2 段階認証を有効化しておくことを強く推奨します。

STEP2: script.google.com にアクセス
ブラウザで https://script.google.com/ を開きます。初回はログイン画面が出るので、利用したい Google アカウントでログインしてください。
ログイン後、左上の 「+ 新しいプロジェクト」 をクリックすると、空のプロジェクトが作成されます。

STEP3: コードエディタの構成
プロジェクトを開くと、左サイドバーに コード.gs(または Code.gs)というファイルが作られています。中央のエディタが JavaScript を書く場所です。

| エリア | 役割 |
|---|---|
| 左サイドバー | ファイル一覧 / プロジェクト設定 / トリガー / 実行ログ |
| 中央エディタ | JavaScript コードを記述 |
| 上部ツールバー | 保存 / 実行 / デバッグ / 関数選択 |
| 下部 / 別タブ | 実行ログ表示 |
STEP4: Hello World を書いて実行
デフォルトの空関数を以下の内容に置き換えます:
function myFunction() {
console.log('Hello, GAS!');
Logger.log('旧式のログ出力');
// 現行の V8 ランタイムでは ES2015+ が使える
const today = new Date();
const greeting = `今日は ${today.toLocaleDateString('ja-JP')} です`;
console.log(greeting);
// アロー関数 / 分割代入も使える
const users = [{name: '太郎', age: 20}, {name: '花子', age: 25}];
users.forEach(({name, age}) => console.log(`${name} さん (${age} 歳)`));
}
保存(Ctrl + S または上部のフロッピーディスクアイコン)→ ツールバーから関数名 myFunction を選択 → 「実行」をクリック。

STEP5: 初回の OAuth 承認フロー
初回実行時、Google から「承認が必要です」というダイアログが表示されます。これは GAS がユーザーのデータ(Spreadsheet / Gmail 等)にアクセスする際に必要な仕組みです。
- 「権限を確認」ボタンをクリック
- 使用する Google アカウントを選択
- 「このアプリは Google で確認されていません」と警告が出る場合は 「詳細」 をクリック
- 「<プロジェクト名> (安全ではないページ) に移動」をクリック
- 必要な権限スコープを確認して 「許可」

承認後、関数が実行され、画面下部の「実行ログ」に Hello, GAS! 等が表示されれば成功です。
STEP6: Spreadsheet と連携してみる
GAS の真価は Google サービスとの連携にあります。スプレッドシートを操作する最小サンプル:
function writeToSheet() {
// アクティブなスプレッドシートを取得
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// A1 セルに値を書き込み
sheet.getRange('A1').setValue('GAS から書き込み');
// 2 行目に複数値
sheet.getRange('A2:C2').setValues([['名前', '年齢', '都市']]);
// 既存セルから読み取り
const value = sheet.getRange('A1').getValue();
console.log('A1 の値: ' + value);
}
// スプレッドシートをトリガーで Spreadsheet メニューから実行する場合
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('カスタムメニュー')
.addItem('データ更新', 'writeToSheet')
.addToUi();
}
STEP7: トリガー(定期実行)の設定
左サイドバーの時計アイコン(トリガー)から、特定の関数を毎日 / 毎時間 / フォーム送信時 / シート編集時などに自動実行できます。
- 左サイドバー → トリガー → 「+ トリガーを追加」
- 実行する関数:
myFunction - イベントのソース: 時間主導型 / Calendar / Spreadsheet など
- 時間ベースのトリガータイプ: 分タイマー / 時タイマー / 日タイマー
- 保存
STEP8: Web アプリとしてデプロイ
GAS はHTTP エンドポイントとしても公開できます。Slack や外部システムからの Webhook 受け口に最適です。
// HTTP GET リクエストを処理
function doGet(e) {
const name = e.parameter.name || 'ゲスト';
return ContentService
.createTextOutput(JSON.stringify({message: `こんにちは、${name}さん`}))
.setMimeType(ContentService.MimeType.JSON);
}
// HTTP POST リクエストを処理
function doPost(e) {
const data = JSON.parse(e.postData.contents);
console.log(data);
return ContentService
.createTextOutput(JSON.stringify({status: 'ok'}))
.setMimeType(ContentService.MimeType.JSON);
}
デプロイ手順:
- 右上の 「デプロイ」 → 「新しいデプロイ」
- 種類: ウェブアプリ
- 次のユーザーとして実行: 自分 / アクセスしたユーザー
- アクセスできるユーザー: 自分のみ / Google アカウントを持つ全員 / 全員(匿名)
- 「デプロイ」 → ウェブアプリ URL が発行される
主要メソッドの早見表
| サービス | サンプル |
|---|---|
| Spreadsheet | SpreadsheetApp.openById('シートID').getSheetByName('Sheet1') |
| Gmail | GmailApp.sendEmail('to@example.com', '件名', '本文') |
| Calendar | CalendarApp.getDefaultCalendar().createEvent('予定', start, end) |
| Drive | DriveApp.getFileById('ID').getName() |
| UrlFetch | UrlFetchApp.fetch('https://example.com/api') |
| Properties | PropertiesService.getScriptProperties().setProperty('KEY', 'value') |
FAQ
Q: 旧 IDE と新 IDE の違いは?
A: 2020 年末に新しい IDE がリリースされました。現在は新 IDE のみ。V8 ランタイムもデフォルト有効です。
Q: ローカル開発したい
A: clasp(コマンドラインツール)を使うと VS Code 等で開発し、GAS にプッシュできます。npm install -g @google/clasp でインストール。
Q: 実行時間の制限は?
A: 1 回の実行で最大 6 分(個人)/ 30 分(Workspace 等)。長時間処理は分割して連続実行する設計が必要です。
Q: 「承認が必要です」が毎回出る
A: スクリプトを編集してスコープが追加されたタイミングで再承認が必要になります。最初に全機能を一度実行して承認しておくとスムーズです。
子ページはありません
- 導入手順
- GETリクエストする方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38