まえがき/やりたいこと
・一人開発でGAS/JavaScriptのスクリプトを毎月書いている
・開発部署ではない+社内でGASを書いている人がほぼ自分のみのため、コーディングルールがまともに存在しない
→自分だけでもコーディングルールを統一して、今後の開発や、万一人が増えたときに対応できるようにしておきたい
参考URL
この記事を作るときに参考にしたURL
Qiita: 変数/クラス名の命名規則に使われる記法の分類
キャメルケースとかスネークケースとかのやつ
Qiita: 定数を大文字にするのはどんなときか
コーディングルールで大文字小文字がどうのこうので悩んだときに
よく見るサイト
なんか困ったときによく見るURL
Google Apps Script: Reference
まずはこれを見よう
Google Apps Script: Guides > Quotas for Google Services
GASが一日に実行できる特定動作(ドキュメント作成とか、Gmail読み取りとか)の制限について
Qiita: GoogleAppsScriptのチートシート
基本的な関数の使い方や組み合わせ例
myコーディングルール
基本方針
・変数系はローワーキャメルケースを使う
test1_methodHogeHoge
最初は小文字、あとは単語ごとに頭文字を大文字で使う
意味のまとまり(?)をもたせたい場合は、アンダースコアでつなぐ
アンダースコアの後ろの頭文字は小文字
・定数系はconstで定義、グローバルに置いて何度も使う定数は大文字でアンダースコアつなぎ
IDとかSTRとかでグループ分けする
const ID_FOLDER_MASTER = "hogehoehoge";
・頭文字を大文字にするとIDEで補完表示ができるので、ほしいときは使う
const Ss = SpreadsheetApp.getActiveSpreadsheet();
const Sheet_main = Ss.getSheetByName("メイン");
→こうすると補完で出てくる
・ある程度のまとまりのある定数はオブジェクトで定義すると便利
セル番地の定数とか
const startRange = {row:2,column:2}
自分はセル番地の定数をまとめてオブジェクト化している
const rangeValue = {
data:{row:2,column:2,width:3},
getDate:{row:1,column:1}
}
セルの読み取りしてることがわかりやすくて良い
コメント・メモ・感想的なアレ
function main1_createFolder(){}
的な
コーディングルール_個別
main系関数以外(引数が必要でなんか処理して返り値を返すタイプの関数)にはできるだけJSDocコメントを書く
参考
GASの新エディタで自動補完を効かせて快適にプログラムを組もう
【初心者向けGAS】Google Apps Scriptのドキュメンテーションコメントの書き方
stackoverflow: Autocomplete for my functions in the google-apps-script editor
JSDocコメントを書くと関数を呼んだときに型の推論が効いたり、ヒントを出したりできる
/**
* @param {number} a
* @param {number} b
* @return {number} result
*/
function test(){
let a = 1;
let b = 2;
result = a + b;
return result;
}
画像:GASエディタ内で関数を呼び出すときに、引数と型が表示される
constとletについて
・「var」は使わない、「const」ですむところはできるだけconst、他は「let」
・スコープはできるだけ小さく、スプレッドシート・シートはグローバルで宣言しちゃう
参考:JavaScriptで書く「var,let,const」の違いと使い分け方法
Date型データのフォーマット
参考:TF SYNNEX:GASでのDate型データのフォーマット
日時情報 | 形式 | 例(2021年1月2日(土) 午前0時3分4秒(JST)の場合) |
---|---|---|
年(西暦4桁) | yyyy | 2021 |
年(西暦2桁) | yy | 21 |
月(数字1~2桁 | M | 1 |
月(数字2桁) | MM | 01 |
月(英語短縮) | MMM | Jan |
月(英語) | MMMM | January |
日(数字1~2桁) | d | 2 |
日(数字2桁) | dd | 02 |
曜日(英語短縮) | E | Sat |
曜日(英語) | EEEE | Saturday |
曜日(数字) | u | 6(月曜:1、火曜:2、…日曜:7) |
第n◯曜日(数字) | F | 1(=第1土曜日) |
午前/午後 | a | AM |
時(1~12時表記、数字1~2桁) | h | 12 ※1時のとき:1 |
時(1~12時表記、数字2桁) | hh | 12 ※1時のとき:01 |
時(0時~11時表記、数字1~2桁) | K | 0 ※昼12時のとき:0 |
時(0時~11時表記、数字2桁) | KK | 00 ※昼12時のとき:00 |
時(1時~24時表記、数字1桁~2桁) | k | 24 ※1時のとき:1 |
時(1時~24時表記、数字2桁) | kk | 24 ※1時のとき:01 |
時(0時~23時表記、数字1桁~2桁) | H | 0 ※昼12時のとき:12 |
分(数字1桁~2桁) | m | 3 |
分(数字2桁) | mm | 03 |
秒(数字1桁~2桁) | s | 4 |
秒(数字2桁) | ss | 04 |
タイムゾーン(英語短縮) | z | JST |
タイムゾーン(英語) | zzzz | Japan Standard Time |
タイムゾーン(数字) | Z | +0900 |
ネーミングルール
ファイル/フォルダ
- ID…「ID_…」const、大文字で管理
const ID_FOLDER_MAIN = "hogehogehoge";
const ID_DOC_TEMPLATE = "hogehogehoge";
- フォルダと各サービスを識別子で分ける
フォルダ…FOLDER
ドキュメント…DOC
スプレッドシート…SS
など
スプレッドシート
- スプレッドシート…「Ss」1個しか使わないときは基本的にこれ
const Ss = SpreadsheetApp.getActiveSpreadsheet();
2個以上だったらSs_main
とかにする
Ssはグローバルで宣言していい…だいたいどの関数でも最初に呼び出すでしょ、と仮定
##シート
- シート…「sheet_hogehoge」で複数管理
const sheet_main = Ss.getSheetByName(NAME_SHEET_MAIN);
必要な関数ごとの最初に宣言
- シート名…「NAME_SHEET_HOGE」でconstでグローバルに置く
const NAME_SHEET_MAIN = "main";
- よく使うシート名メモ
シート名 | 備考 |
---|---|
マスタ(△master) | データを読み込んだり書き出したりするシート |
設定(or setting) | 設定項目のうち、使用者が設定できるものを記載 |
使い方 | ツールの使い方を同じSS内に記載したいとき |
properties | 設定項目のうち、使用者に変更させたくないものを記載 |
master_xxxx | 参照用になんかのマスタをimportrangeしてくるときに使用 |
・人向けにスプレッドシートを作成するときのシート名は、使用者が使うシートは基本的に日本語にしておく
参考:Qiita: 技術英語 Options, Settings, Properties, Configuration, Preferencesの違い
よく悩むので参考にしている
※自分の場合は「作業者/使用者に自由に設定させていい項目→setting」「管理者/作成者が設定する項目→properties」あとはconfigを必要に応じて使う
関数名
- 関数…「testHogeHoge」ローワーキャメルケース+アンダースコアで記載
ある程度意味の区切りでグループ化する
main1_createFolder()
main2_createFile()
とか
変数
- 変数…「targetHoge」ローワーキャメルケース
よく使う単語
業務上で使う単語
日本語 | 英語(コード) | 略したいとき |
---|---|---|
送付状 | CoverLetter | - |
請求書 | Invoice | - |
都道府県名 | prefecture | - |
市区町村名 | city | - |
自治体名(都道府県名+市区町村名) | municipality | - |
郵便番号 | postcode | - |
住所 | address | - |
部署名 | department | dept |
担当者名 | name_staff | - |
年度 | fisxalYear | fy |
置き換え(差し込み印刷) | replace | rep |
接頭詞・接尾詞系
日本語 | 英語 | 略したいとき |
---|---|---|
◯◯名 | name_ | |
シート | sheet_ | |
ID | id_ | |
フォルダ | folder_ | |
額(金額) | amount_ | |