はじめに
今回はGoogle Apps Scriptでデータを保存する方法についての記事になります!
データを保持すると聞いてこんな感じのコードはどうでしょうか。
var count = 0; function hoge(){ count = count + 1; Logger.log('count: ' + count); }
ところが残念、これでは常に「count: 1」になってしまいます。
いくつかデータの保持をする方法を調べたところ、この2つの方法がかなり実用的かなと思いました。
- PropertiesServiceクラスを用いる
- スプレッドシートを用いる
早速みていきましょう。
PropertiesServiceクラスを用いる
PropertiesService
というスクリプト毎に簡単なデータを保存できるGASのAPIが提供されています。
https://developers.google.com/apps-script/reference/properties/properties-service
UnityでいうPlayerPrefs
と同じ感覚で、key
とそれに対応するvalue
を保存します。
ただ注意点としてkey
,value
共にstring型
で扱われます。
〇保存
PropertiesService.getScriptProperties().setProperty("key","value");
〇取得
var value = PropertiesService.getScriptProperties().getProperty("key");
〇削除
var value = PropertiesService.getScriptProperties().deleteProperty("key");
複数回用いる場合はキャッシュすると良いでしょう。
var properties = PropertiesService.getScriptProperties(); properties.setProperty("key", "value"); //保存 properties.getProperty("key"); //取得 properties.deleteProperty("key"); //削除
保存されたデータはファイル -> プロジェクトのプロパティ― -> スクリプトのプロパティ
から確認することができます。
スプレッドシートを用いる
こちらはいわずもがな思いつく方法の一つでしょう。簡単にデータの確認,保守がしやすいので有効な手段だと言えます。
スプレッドシートの取得にはContainer Bound Script(スプレッドシートに紐づくもの)とStandalone Script(ドライブ上に単独で存在するもの)で方法が少し異なります。
Google Apps Script で Spreadsheet にアクセスする方法まとめ - Qiita
○Standalone Scriptでの取得方法
var spreadsheet = SpreadsheetApp.openById('<Id>');
Idは以下の画像の通りです。
〇Container Bound Scriptでの取得方法
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
スプレッドシートを取得できたら、その中から操作したシートを選択します。
〇名前で取得
var sheet = spreadsheet.getSheetByName('<シート名>');
〇何番目かで取得
var sheet = spreadsheet.getSheets()[0];
最後にセルの取得・書き込みについてです。
〇セルの取得
var value = sheet.getRange("A1").getValue();
〇セルへの書き込み
sheet.getRange("A1").setValue("変更後の値");
さいごに
お手軽さでいうとPropertiesService
が群を抜いていますが、データベースのようなものを作りたいときはスプレッドシートの方が良いでしょう。
この2種類をうまく使い分け、是非色んなものを作ってみてください!