はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【GAS】データを保存する方法

はじめに

今回は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を保存します。
ただ注意点としてkeyvalue共に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");         //削除


保存されたデータはファイル -> プロジェクトのプロパティ― -> スクリプトのプロパティから確認することができます。
f:id:hanaaaaaachiru:20191028143840p:plain
f:id:hanaaaaaachiru:20191028143942p:plain

スプレッドシートを用いる

こちらはいわずもがな思いつく方法の一つでしょう。簡単にデータの確認,保守がしやすいので有効な手段だと言えます。

スプレッドシートの取得にはContainer Bound Script(スプレッドシートに紐づくもの)とStandalone Script(ドライブ上に単独で存在するもの)で方法が少し異なります。
Google Apps Script で Spreadsheet にアクセスする方法まとめ - Qiita

○Standalone Scriptでの取得方法

var spreadsheet = SpreadsheetApp.openById('<Id>');

Idは以下の画像の通りです。
f:id:hanaaaaaachiru:20191028155422p:plain

〇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種類をうまく使い分け、是非色んなものを作ってみてください!