スプレッドシートと連携!claspでGAS開発を効率化する方法

GAS のclaspがどうたらこうたらって係長が話してたんだけど…なんのことだろう?
猫男
猫男
catman
catman
よし、catmanが、スプレッドシートと連携させてGASを効率的に開発するための「clasp」について教えてやろう。

claspとは何か?

まずは、claspについて説明しよう。

 

claspとは、

Command Line Apps Script Projects

の略だ。単刀直入にいえば、

ローカル環境でGASを開発するためのコマンドラインツール

ってわけだな。

Google の開発者が中心となって開発・公開しているオープンソースだから、まあつまり、Google公式の CLI ツールさ。

なぜclaspを使うのか?

GASをブラウザのエディタで直接編集するのも悪くはない。

だが、claspを使うことで、以下のような利点があるぞ。

  • バージョン管理が容易になる
  • 複数のファイルを扱いやすい
  • エディタの選択肢が広がる

claspのインストールから始める

claspを使うためには、まずNode.jsをインストールしておく必要がある。その上でclaspをインストールする流れだ。

Node.jsのインストール

最初に、公式サイトからNode.jsをダウンロードし、インストールしよう。

Node.jsにはnpmというパッケージマネージャが含まれているので、それを利用する。

claspのインストール

claspをインストールするコマンドは以下の通りだ。

 npm install -g @google/clasp 

このコマンドを実行すると、claspがグローバルにインストールされる。これで準備が整った。

スプレッドシートとGASを連携する

さて、次はGASスクリプトをスプレッドシートにデプロイして連携する方法についてだ。

プロジェクトの準備

まず、claspを使って新しいプロジェクトを作成しよう。

 clasp create --type standalone --title "Spreadsheet Automation" 

このコマンドで、新しいGASプロジェクトが作成される。

スプレッドシートへのアクセス

次に、スプレッドシートのデータにアクセスするための簡単なGASコードを書いてみよう。


function readData() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();
  Logger.log(data);
} 

このスクリプトでアクティブなスプレッドシートの全データを取得してログに出力する。

スクリプトをデプロイ・実行

claspを使用してスクリプトをデプロイし、実行してスプレッドシートとの連携を確認しよう。

clasp push
clasp run readData 

「clasp push」でGoogleのサーバーにスクリプトをアップロードし、「clasp run」でスクリプトを実行する。

なるほど!スプレッドシートのデータを自由に扱えるようになるんですね!
猫男
猫男

まとめ:claspで効率的にGAS開発を進める

  • claspを使ってローカル環境でGASを開発しよう。
  • バージョン管理や複雑なプロジェクトに強い。
  • スプレッドシートとの連携も容易に行える。
catman
catman
これで君もスプレッドシートとGASの達人になれる道が見えてきたさ。

 

練習問題

claspで新しく「スプレッドシートと連携する」プロジェクトを作り、スプレッドシートのデータを「シート名」と共に取得しログに出力するスクリプトを書いてみよう。

 

解答・解説

新しいプロジェクトを作成し、以下のスクリプトを作成・実行します。


function logSheetData() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const sheetName = sheet.getName();
  const data = sheet.getDataRange().getValues();
  Logger.log("Sheet Name: " + sheetName);
  Logger.log(data);
}

このスクリプトは、アクティブなシートの「シート名」を取得し、シート内の全データをログに出力する。getName()メソッドでシート名を取得し、getDataRange().getValues()でデータを二次元配列として取得できる。