📊

Google Apps Scriptでのスプレッドシート操作をシンプルに!gas-db ライブラリの紹介

2025/01/04に公開

はじめに

Google Apps Script (GAS) を利用して Google スプレッドシートを操作することは、さまざまな業務プロセスの自動化に役立ちます。たとえば、データの取得、更新、条件付きのデータ操作など、多岐にわたる操作をスクリプト化することで、日々の手作業を効率化することが可能です。しかし、GAS を使ったスプレッドシート操作では、コードが煩雑になりがちです。

たとえば、以下のような課題に直面することがあります:

  • コードが冗長で、単純な操作でも多くの記述が必要になる。
  • 範囲指定やデータ取得の手動操作が複雑でエラーの原因になる。
  • 条件付き検索やデータ更新などを手動で実装する必要がある。

こうした問題に対応するために、私は gas-db というライブラリを開発しました。このライブラリを使うことで、スプレッドシートの操作をより直感的かつ効率的に行えるようになります。本記事では、gas-db の機能や使用例を通じて、スプレッドシート操作をどのように簡素化できるかを解説します。

gas-dbのリポジトリのREADMEに詳細も記載しています。

gas-db とは?

gas-db は、Google Apps Script 環境で Google スプレッドシートを操作するためのラッパーライブラリです。GAS の標準 API をさらに簡素化し、日常的なスプレッドシート操作を短いコードで実現することを目指しています。

gas-db の特徴を簡単にまとめると、以下のようになります:

  • 直感的な操作性
    • スプレッドシートのデータを JSON のようなオブジェクト形式で操作できるため、コードの可読性が向上します。
  • 効率的な CRUD 操作
    • データの取得(Retrieve)、挿入(Insert)、更新(Update)、削除(Delete)を、シンプルな API で実現します。
  • 条件検索や Upsert をサポート
    • 特定の条件にマッチするデータの取得や、存在しない場合は挿入、存在する場合は更新を一行で実現可能です。
  • カスタマイズ可能なヘッダ行
    • ヘッダ行(データのキーとなる列名)がデフォルトで 1 行目に設定されていますが、カスタマイズすることも可能です。

なぜ gas-db を使うのか?

Google Apps Script の標準 API を使用してスプレッドシートのデータを取得する場合、以下のようなコードを書く必要があります:

function getDataWithoutGasDb() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Stories");
  const data = sheet.getDataRange().getValues();
  Logger.log(data); 
  // 想定される出力: 
  // [
  //   ["Title", "Author"],
  //   ["Adventure", "John Doe"],
  //   ["Mystery", "Jane Doe"]
  // ]
}

このコードには、データを二次元配列形式で取得する処理が含まれています。しかし、このままではデータの操作が煩雑で、列名をキーとして使用することができません。そのため、特定の行を操作するには、列番号に依存したり、ヘッダ行を自前で処理する必要があります。

gas-db を使用すると、このような冗長なコードを簡潔に書き換えることができます:

function getDataWithGasDb() {
  const spreadsheet = new gasdb.Spreadsheet();
  const sheet = spreadsheet.at("Stories");
  const data = sheet.findAll();
  Logger.log(data); 
  // 想定される出力:
  // [
  //   { Title: "Adventure", Author: "John Doe" },
  //   { Title: "Mystery", Author: "Jane Doe" }
  // ]
}

gas-db を使うことで得られるメリット

  1. データをオブジェクト形式で操作可能
    • gas-db を使うと、ヘッダ行を基に列名をキーとしたオブジェクト形式でデータが返されます。これにより、列番号ではなく列名でデータを操作できるようになります。
  2. コードの可読性が向上
    • 二次元配列形式ではなく、JSON オブジェクト形式でデータを扱えるため、コードの可読性と保守性が向上します。
  3. 作業効率の向上
    • 標準 API では必要だったデータ変換処理や手動のヘッダ行管理が不要になり、開発時間を短縮できます。

gas-db の導入方法

gas-db を既存の Google スプレッドシートから Google Apps Script (GAS) に追加する方法を解説します。このライブラリを導入することで、スプレッドシート操作が簡潔になり、開発の効率が向上します。

1. Google Apps Script エディタを開く

  1. Google スプレッドシートを開きます
    • 操作したいスプレッドシートを Google ドライブなどから開いてください。
  2. Apps Script エディタを開く
    • スプレッドシートのメニューから以下の手順でアクセスします:
      • メニューの「拡張機能」 → 「Apps Script」をクリックします。
      • 新しいタブで Apps Script エディタが開きます。

2. ライブラリを追加

  1. ライブラリの追加画面を開く
    • Apps Script エディタで、左側のナビゲーションバーにある「ライブラリ」をクリックします。
  2. スクリプトIDを入力
    • 以下のスクリプトIDをコピーして、「ライブラリを検索」ボックスに貼り付け、「ライブラリを検索」をクリックします:
1-oNObQAV_UrShtdZWEy8FwqmjGpD0-kVxWw-VdZdg0Dmx4xPs9Jp0-5Z
  1. ライブラリを選択
    • 検索結果に表示される gas-db ライブラリを選択し、最新バージョンを選択して「追加」をクリックします。

3. 必要なスコープを確認

gas-db を使用するには、Google スプレッドシートの操作に必要なスコープがプロジェクトに含まれている必要があります。

必須スコープ
以下のスコープが含まれていることを確認してください:

https://www.googleapis.com/auth/spreadsheets

スコープを確認する方法

  1. Apps Script エディタの左側メニューから「プロジェクト設定」を開きます。
  2. 必要なスコープが含まれているか確認します。
    • スコープが不足している場合、プロジェクトの appsscript.json ファイルに以下を追加してください:
{
  "oauthScopes": [
    "https://www.googleapis.com/auth/spreadsheets"
  ]
}

4. 動作確認

gas-db のセットアップが正しく行われたか、以下のコードを使って確認します。

コード例 :

function testGasDbSetup() {
  // gas-db をインスタンス化
  const spreadsheet = new gasdb.Spreadsheet();

  // アクティブなスプレッドシートの最初のシートを取得
  const sheet = spreadsheet.at("Sheet1"); // "Sheet1" はシート名に置き換えてください

  // データを取得
  const data = sheet.findAll();

  // 結果をログに出力
  Logger.log(data);
}

期待される出力

スプレッドシートに以下のようなデータが含まれている場合:

Title Author
Adventure John Doe
Mystery Jane Doe

実行結果として、以下のような JSON オブジェクト形式のデータがログに出力されます:

[  { Title: "Adventure", Author: "John Doe" },  { Title: "Mystery", Author: "Jane Doe" }]

5. gas-db の準備完了!

これで gas-db の導入は完了です。次は、gas-db を活用してスプレッドシートのデータを簡単に操作する方法を学んでみましょう!

gas-db を使った実践例

ここでは、gas-db を活用して Google スプレッドシートを操作する実践的な例を紹介します。基本的なデータ取得(Retrieve)から、CRUD 操作(Create, Read, Update, Delete)まで、具体的なコードとともに解説します。


1. データをすべて取得する(Retrieve)

スプレッドシートからデータを取得する基本操作です。gas-db を使用することで、スプレッドシートの内容を JSON オブジェクト形式で簡単に取得できます。

function getAllData() {
  // gas-db を使用してスプレッドシートにアクセス
  const spreadsheet = new gasdb.Spreadsheet();
  const sheet = spreadsheet.at("Stories");

  // シート内のすべてのデータを取得
  const data = sheet.findAll();
  Logger.log(data);

  // 想定される出力:
  // [
  //   { Title: "Adventure", Author: "John Doe" },
  //   { Title: "Mystery", Author: "Jane Doe" }
  // ]
}
  • ポイント:
    • sheet.findAll() を使用することで、シートのすべてのデータをオブジェクト形式で取得できます。
    • ヘッダ行が自動的にデータのキー(列名)として利用されます。

2. 条件付き検索を行う (Read with Conditions)

特定の条件に一致するデータのみを取得したい場合、sheet.find() を利用します。

function findData() {
  const spreadsheet = new gasdb.Spreadsheet();
  const sheet = spreadsheet.at("Stories");

  // 条件を指定してデータを検索
  const conditions = { Title: "Adventure" };
  const results = sheet.find(conditions);

  Logger.log(results);

  // 想定される出力:
  // [
  //   { Title: "Adventure", Author: "John Doe" }
  // ]
}
  • ポイント:
    • 条件はオブジェクト形式で指定します(例: { Title: "Adventure" })。
    • 複数条件も指定可能です(例: { Title: "Adventure", Author: "John Doe" })。

3. データを挿入する(Create)

新しいデータをスプレッドシートに追加します。

function insertData() {
  const spreadsheet = new gasdb.Spreadsheet();
  const sheet = spreadsheet.at("Stories");

  // 新しいデータを挿入
  sheet.insert({ Title: "Sci-Fi", Author: "Alice Smith" });
}
  • ポイント:
    • 挿入するデータはオブジェクト形式で指定します。

4. データを更新する(Update)

条件に一致するデータを更新します。

function updateData() {
  const spreadsheet = new gasdb.Spreadsheet();
  const sheet = spreadsheet.at("Stories");

  // 更新するデータと条件を指定
  const newData = { Author: "Jane Doe Updated" };
  const conditions = { Title: "Mystery" };

  sheet.update(newData, conditions);
}
  • ポイント:
    • 条件に一致するすべてのデータが更新されます。
    • 存在しない条件の場合は何も変更されません。

5. データの Upsert を行う (Insert or Update)

データが存在しない場合は挿入し、存在する場合は更新します。

function upsertData() {
  const spreadsheet = new gasdb.Spreadsheet();
  const sheet = spreadsheet.at("Stories");

  // データの Upsert
  const data = { Title: "Adventure", Author: "Updated Author" };
  const conditions = { Title: "Adventure" };

  sheet.upsert(data, conditions);
}
  • ポイント:
    • sheet.upsert() を使うことで、挿入と更新を一括で実行できます。
    • 重複チェックや存在確認のコードを書く必要がありません。

まとめ

gas-db は、Google Apps Script (GAS) を使用して Google スプレッドシートを操作する際の効率を大幅に向上させるライブラリです。標準 API では煩雑になりがちなデータ操作をシンプルにし、コードの可読性と保守性を高めることができます。

この記事を通じて、以下のポイントについて理解していただけたかと思います:

  • gas-db の基本的な機能:CRUD 操作や条件検索、Upsert、ヘッダ行の指定など。
  • gas-db を導入する方法:スプレッドシートから簡単にライブラリを追加できる手順。
  • gas-db の実践例:実際の業務でどのように活用できるか具体的なコード例で解説。

gas-db は、シンプルな操作性と柔軟なカスタマイズ性を兼ね備えたツールです。特に、日々のスプレッドシート操作を効率化したい方や、GAS の学習コストを下げたい方にとっては非常に有用なライブラリだと思います。


次のステップ

もし興味を持っていただけたら、以下のリンクから gas-db を実際に試してみてください!

GitHub リポジトリ:https://github.com/shunta-furukawa/gas-db
スクリプトID:1-oNObQAV_UrShtdZWEy8FwqmjGpD0-kVxWw-VdZdg0Dmx4xPs9Jp0-5Z

さらに、使ってみた感想やフィードバックをいただけると嬉しいです。これからも gas-db を始め、スプレッドシート操作が楽しくなるツールを提供できたらいいなと思っています!

Discussion