gasでユニーク(uuid)なidを生成の覚書です。スクリプトプロパティの保存・取得に便利です。
Contents
GASでユニークなuuidを生成!スプレッドシートのスクリプトプロパティの保存取得!getUniqueId() とUtilities.getUuid() の違いは?
Utilities.getUuid()
ユニークなIDを作る際に便利です。
const triggerId = "Trigger_" + Utilities.getUuid();
console.log('triggerId', triggerId)
- UUIDは一意性が要求される多くの場面で使用されます。
- 連番よりセキュリティやプライバシーの観点から有益です。
- スクリプトプロパティにユニークなIDを保存する場合、UUIDは便利な選択肢です。
32桁の16進数で表される文字列です。
Trigger_a8a45740-9661-4094-8397-9a666d29f523
getUniqueId();
こちらもユニークなIDを作る際に便利です。
const trigger = ScriptApp.newTrigger("tweets")
.timeBased()
.at(triggerTime)
.create();
const triggerId = trigger.getUniqueId();
// スプレッドシートやスクリプトプロパティに保存
文字列は以下のような形式になります。
rSdpwzAkB1UM5Rcyu3bvpfIJNxWtlEqV9j7oZXiCHLGKQ0mY46D2OTshF8nPaVXg
使い分けやどっちがいいの?
- setもgetも、getUniqueId() で統一する
- setもgetも、Utilities.getUuid() で統一する
いずれかを選択して一貫性があるコードが重要です。
getUniqueId()
:ScriptApp
クラスのメソッドであり、ユニークなIDだけど他のトリガーや他のスクリプトとの間で一意ではない可能性があります。トリガーに関連する一意の識別子を生成する必要がある場合や、スクリプト内の特定の処理やオブジェクトの識別子として使用する場合に適しています。Utilities.getUuid()
:Utilities
クラスのメソッドであり、ランダムな一意の識別子 (UUID) を生成します。同じスクリプトや他のスクリプトとの間で一意な値を生成することができます。
基本的には、一意性の要件に応じて適切なメソッドを選択すれば良いです。ただし、同じスクリプト内で一意性が必要な場合は getUniqueId()
を使用するのがおすすめっぽい。
GASのスクリプトプロパティのエラー!
An error occurred: Exception: DNS error: http:
An error occurred: Exception: DNS error: http:
凡ミスですね。スクリプトプロパティの取得コードが抜けているだけという気がします。
const scriptProperties = PropertiesService.getScriptProperties();
const apiUrl = scriptProperties.getProperty('WP_CATEGORY_API_ENDPOINT');
GASのスクリプトプロパティの上限や制限
リファレンスにのっていないぽいのでCahtGPT君に聞いてみました。どこまで信頼できるかわかりませんが(^^;、この上限なら個人的に困ることはなさそうです。困ったらちゃんと調べてみようと思います。
キーと値の制限: スクリプトプロパティのキーと値の組み合わせは最大で 9,000 件までです。
値の制限: 1 つのスクリプトプロパティの値は最大で 9,000 文字までです。
ChatGPT君
スクリプトプロパティの合計サイズ: スクリプトプロパティの合計サイズは最大で 500 KB までです。
GASで別ファイルの呼び出し
Google Apps Scriptでは、すべてのスクリプトファイルは同じグローバルな名前空間を共有しているようです。a.gs
ファイルからb.gs
に定義されている関数は普通に呼べるようです。
bFunction();
GASのスプレッドシートのダイアログボックス作成にpromptは使うな!?
GASにはポップアップを作成するpromptがある。楽でいいんだけど、フォントサイズなどカスタマイズできないっぽい。楽だけど応用力が効かないものは個人的に使いたくない。
すぐ使うのを辞めた…。
function inputTwitterApiInformation() {
const ui = SpreadsheetApp.getUi();
const keys = [
'CONSUMER_API_KEY',
'CONSUMER_API_SECRET',
'ACCESS_TOKEN',
'ACCESS_TOKEN_SECRET',
'CLIENT_ID',
'CLIENT_SECRET',
'Bearer_Token',
];
for (const key of keys) {
const result = ui.prompt('Twitter API情報を入力', key, ui.ButtonSet.OK_CANCEL);
if (result.getSelectedButton() === ui.Button.OK) {
PropertiesService.getScriptProperties().setProperty(key, result.getResponseText());
} else if (result.getSelectedButton() === ui.Button.CANCEL) {
break;
}
}
}
Htmlベースの実装に切り替えました。
バリデーションのエラーメッセージ
2パターン紹介します。
input.setCustomValidity('カスタムエラーメッセージ'); // カスタムのエラーメッセージを設定
error.innerText = input.validationMessage;
- 入力欄が空である場合や、メールアドレスの形式が正しくない場合などブラウザが自動的に提供するバリデーションメカニズム。
- validationMessageは読み取り専用のプロパティであり、直接変更することはできません。エラーメッセージを変更するにはsetCustomValidity()メソッドを使用します。
- デメリットはブラウザによって挙動が変わる。コードが複雑になる。
クリアも必要そうです。
input.setCustomValidity(''); // バリデーションが通った場合はメッセージをクリア
もうひとつの方法はこちらです。
error.innerText = '入力が短すぎます。'
- シンプル
入力されているか否かだけなど単純な場合はこちらの方法はよさそうです。
コメント