ゴミの回収スケジュールは各自治体毎に異なるため、転居するとゴミ回収のスケジュールが変わり、都度自治体が配布する資料を確認しなければならなくなることがあります。そこで、ごみ回収のスケジュールをGoogleカレンダーに入れておくと、簡便に回収スケジュールを確認することができます。
Googleカレンダーでは入力した予定を、定期的に繰り返す機能が用意されており、下図のようにカスタム繰返しを用いることで様々な条件で予定を繰り返すことができます。
この繰り返し機能を用いることで、ごみ捨て予定を比較的簡単にGoogleカレンダーに入力することができますが、GAS(Google App Script)を用いてGoogleカレンダーを操作すると、祝日の場合は回収が無いなど、より柔軟なごみ回収予定を入力することができます。
ここでは、以下のようなごみ回収スケジュールを例として、GASを用いてGoogleカレンダーにゴミの回収予定を入力する方法を紹介します。
ゴミの種別 | 回収日 |
---|---|
可燃ごみ | 毎週月・金曜日 |
不燃ごみ | 第一・三木曜日 |
プラスチックごみ | 毎週水曜日(祝日を除く) |
段ボール | 第一・三火曜日(祝日を除く) |
新聞・チラシ | 第二・四火曜日(祝日を除く) |
全体の流れ
- ごみ回収スケジュール用のカレンダーを作成
- ごみ回収スケジュールをカレンダーに入力するためのスクリプトを作成
- 作成したスクリプトにトリガーを設定して定期的にスクリプトを実行
個々の手順については以下で詳細を解説します。紹介するコードの詳細な解説は別記事をご確認ください。
カレンダーを作成
まず、はじめにゴミ回収予定を入力するためのカレンダーを作成します。
Googleカレンダーを開き、左側のメニュー下部にある「他のカレンダー」ー「+(他のカレンダーを追加)」を選択し、「新しいカレンダーを作成」を選択します。
新しいカレンダーの「名前」を入力し、「カレンダーを作成」を選択します。
これで、スケジュール入力用の新しいカレンダーを作ることができます。続いて、このカレンダーをGASから操作するためにカレンダーのIDを取得します。
Googleカレンダーのトップにもどり、左側のメニューで作成したカレンダーの「三点リーダー」ー「設定と共有」を選択します。
左側のメニューで「カレンダーの統合」を選択し、「カレンダーID」に記載されている文字列をコピーします。
スケジュール入力用のスクリプトを作成
続いて、スケジュール入力用のスクリプトを作成します。GASのスクリプトにはスタンドアロンスクリプトとコンテナバインドスクリプトがあります。コンテナバインドスクリプトは何らかのファイルに付帯するスクリプトであり、今回はGoogleカレンダーと連携させますが、カレンダーIDをもとに連携されるため、スタンドアロンスクリプトとして単独のスクリプトを作成します。
Google Driveにアクセスし、左上の「+新規」を選択します。
メニューから「その他」ー「Google App Script」を選択します。
スクリプトエディタが開くので、プロジェクト名を入力し、以下のコードを入力します(初期に入力されている “function myFunction() { }”は削除してください)。
// カレンダーのIDを設定 取得したカレンダーのIDを入力してください。
const calendar_id="*****************@group.calendar.google.com";
// カレンダーを設定
const calendar=CalendarApp.getCalendarById(calendar_id);
// 当日を設定
const today=new Date();
// 祝日かどうかを判定
const is_Holiday=(day)=>{
// Googleの祝日カレンダーを取得
const calendar_h=CalendarApp.getCalendarById("ja.japanese#holiday@group.v.calendar.google.com");
// 祝日カレンダーの内容を取得
const events=calendar_h.getEventsForDay(day);
if (events.length>0){return true;}
else{return false;}
};
// 特別に除外する日を設定
const is_SpecialDay=(day0)=>{
const day=new Date(day0);
const m=day.getMonth();
const d=day.getDate();
let flag=false;
// 三が日を除外
if(m==1 && d==1){flag=true;}
if(m==1 && d==2){flag=true;}
if(m==1 && d==3){flag=true;}
return flag;
};
const add_event=(day,title,start,end)=>{
// 同一名称の予定の重複入力を回避
let flag=true;
const events=calendar.getEventsForDay(day);
for (const event of events){
if (event.getTitle()==title){flag=false;}
}
// 予定の入力
if (flag){calendar.createEvent(title,start,end);}
};
// 可燃ごみの予定を追加 月・金
const add_BurnableGabage=(day0)=>{
const day=new Date(day0);
// 予定時間をam 6:00~8:00に設定
const start=new Date(day.setHours(6));
const end=new Date(day.setHours(8));
// スケジュールのタイトルを設定
const title="可燃ごみ";
// 月曜・金曜
if (day.getDay()==1 || day.getDay()==5){
add_event(day,title,start,end);
}
};
// 不燃ごみの予定を追加 第1・3木曜日
const add_NonBurnableGabage=(day0)=>{
const day=new Date(day0);
// 予定時間をam 6:00~8:00に設定
const start=new Date(day.setHours(6));
const end=new Date(day.setHours(8));
// スケジュールのタイトルを設定
const title="不燃ごみ";
// 木曜
if (day.getDay()==4){
// 第1, 3週
if (Math.floor(day.getDate()/7)==0 || Math.floor(day.getDate()/7)==2){
add_event(day,title,start,end);
}
}
};
// プラスチックごみの予定を追加 水曜日(祝日を除く)
const add_Plastic=(day0)=>{
const day=new Date(day0);
// 予定時間をam 6:00~8:00に設定
const start=new Date(day.setHours(6));
const end=new Date(day.setHours(8));
// スケジュールのタイトルを設定
const title="プラスチックごみ";
// 水曜
if (day.getDay()==3){
if (!is_Holiday(day)){
add_event(day,title,start,end);
}
}
};
// 段ボールごみの予定を追加 第1・3火曜日(祝日を除く)
const add_CardBoard=(day0)=>{
const day=new Date(day0);
// 予定時間をam 6:00~8:00に設定
const start=new Date(day.setHours(6));
const end=new Date(day.setHours(8));
// スケジュールのタイトルを設定
const title="段ボールゴミ";
// 火曜日
if (day.getDay()==2){
// 第1, 3週
if (Math.floor(day.getDate()/7)==0 || Math.floor(day.getDate()/7)==2){
if(!is_Holiday(day)){
add_event(day,title,start,end);
}
}
}
};
// 新聞・チラシごみの予定を追加 第2・4火曜日(祝日を除く)
const add_Newspapers=(day0)=>{
const day=new Date(day0);
// 予定時間をam 6:00~8:00に設定
const start=new Date(day.setHours(6));
const end=new Date(day.setHours(8));
// スケジュールのタイトルを設定
const title="新聞・チラシゴミ";
// 火曜日
if (day.getDay()==2){
// 第2, 4週
if (Math.floor(day.getDate()/7)==1 || Math.floor(day.getDate()/7)==3){
if(!is_Holiday(day)){
add_event(day,title,start,end);
}
}
}
};
// スケジュールを追加
function add_schedule(){
// 時間を0:00:00:00にして日時を取得
const day=new Date(today)
day.setHours(0);
day.setMinutes(0);
day.setSeconds(0);
day.setMilliseconds(0);
// 40日分予定を処理
for(let i=0;i<40;i++){
if (!is_SpecialDay(day)){
// 可燃ごみの予定を追加
add_BurnableGabage(day);
// 不燃ごみの予定を追加
add_NonBurnableGabage(day);
// プラスチックごみの予定を追加
add_Plastic(day);
// 段ボールごみの予定を追加
add_CardBoard(day);
// 新聞・チラシごみの予定を追加
add_Newspapers(day);
}
// 日付を更新
day.setDate(day.getDate()+1);
}
}
コードに関する解説は以下の記事をご確認ください。
コードを入力したら、実際に実行し、動作を確認します。コードの初回実行にはGoogleカレンダーへのアクセス許可が求められますので、スクリプトの内容をよく理解した上で許可を出してください。
スクリプトを実行するには、「実行する関数を選択」を押し「add_schedule」を選択し、実行を押します。
Googleカレンダーへのアクセス許可は、表示される内容をよく確認して、自己責任で行ってください。
【注意】著者は公開したスクリプトの実行に関して如何なる責任も負いません。よく、スクリプトの内容を理解して自己責任で活用してください。
スクリプトの詳細については、別途解説します。”add_schedule()”がメインの関数で、”add_schedule()”を実行することによって、実行日から40日分の予定が入力されます。各ゴミの回収予定は、”add_BurnableGabage()”~”add_Newspapers()”で記述しており、この関数の処理を変更することで任意の条件でゴミ回収の予定を入力させることができます。
トリガーを設定して自動的にスクリプトを実行
上記のスクリプトでは、実行日から40日分の予定が入力されるため、トリガー設定を行い、月に一回自動的に実行されるようにすることで、途切れることなくゴミ回収予定がGoogleカレンダーに入力されるようになります。
スクリプトエディタの左側のメニューから「トリガー」を選択し、「トリガーを作成」を選択します。
トリガーの内容を以下のように設定し、「保存」を選択します。
項目 | 内容 |
---|---|
実行する関数を選択 | add_schedule |
イベントのソースを選択 | 時間主導型 |
時間ベースのトリガーのタイプを選択 | 月ベースのタイマー |
日を選択 | 任意の日 |
時間を選択 | 任意の時間 |