AWS資格試験の勉強をサボらないように自分がやっていること

2021.01.30

どーもsutoです。

去年はAWS資格でCLF + アソシエイト3冠 + プロフェッショナル2冠を取得でき、今年は専門資格を取得していこうと思っています。

今回は試験勉強を毎日コツコツできずにサボりがちになる自分が、どのような対策をして少しでも勉強する時間を確保しているかをご紹介します。

こんな人にオススメ

  • 毎日業務で忙しいし、休日はゆっくりしたいからと自分に言い訳してしまう
  • お仕事の合間の10分くらいを問題集を解く時間に当てられるようにしたい
  • 資格試験勉強のモチベーションを下げないようにしたい

また、本記事では以下の内容はお話しません。

  • まとまった時間でガッツリ集中して試験対策する方法
  • どの問題集や資料で勉強すれば試験対策になるか

あくまで1~3ヶ月をコツコツ勉強する習慣を身につけるのに役立つ自分なりの方法をご紹介する記事となります。ではさっそく本題に入りましょう!

使用したツールと作成する仕組み

今回はGoogleスプレッドシート、Google Apps Script(GAS)、Slackを使って、シートに保存した練習問題をSlackの特定チャンネルに定期的に投稿するようにして、試験勉強する意識をつけるようにしました。

仕組み自体は「スプレッドシート内のセルをランダムに選択して、その内容をSlackに転送する」という簡単なものです。

弊社は業務も雑談もSlackをコミュニケーションツールとして使っていますので、こうしたチャンネルへの投稿なら半強制的に意識を向けるきっかけを作っていこうと考えました。この方法はSlackのメンション祭りに慣れている人だと、無意識に既読スルーしたり逆にウザいと感じていまう人もいるかと思いますので、自分に合うかどうかは皆さんでお試しいただければと思います。

SlackAppの作成

Slack apiにアクセスし、左メニュー「Start Building」をクリック。 「App Name」には任意の名前、「Development Slack Workspace」に「自身のワークスペース」を選択してください。

次にメニューからFeatures→「Incoming Webhooks」を選択。無効から有効に変えてあげると、画面下部に「Add new Webhook to Workspace」があるので選択。

次にどのチャンネルに投稿するかを選択できるので、任意のチャンネルを選択します。選択後にURLが発行されます。(これはGASのコード作成時に使いますのでメモしておきましょう)

Google Apps Scriptの作成

次はGoogleスプレッドシートと連携したGASを作成します。今回はスプレッドシートのA列のなかからランダムにセルを選択するので、A列には自分が解く問題集などを監修して記入しておきます。

対象のスプレッドシートを開いたらメニューのツール→「スクリプトエディタ」を選択。

App Scriptの画面が開くので任意のプロジェクト名を入力し、以下のコードで保存します。

function test()
{
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
  var lastRow = sheet.getLastRow();

//1行目~最終行の間で、ランダムな行番号を算出する
  var row = Math.ceil(Math.random() * (lastRow-1));
//ランダムに算出した行番号のテキストを取得
  var range = sheet.getRange(row, 1);
  var question = range.getValue();

  var header = '@here 第' + row + '問' + '\n';
  var postMessage = header + '```' + question + '```';

 //Slackに投稿
  postSlack(postMessage);
}

//Slackへメッセージ投稿する処理
function postSlack(text)
{
  var url = "https://hooks.slack.com/services/~~~~~/~~~~~~~~~~~~~~~~";
  var options = {
    "method" : "POST",
    "headers": {"Content-type": "application/json"},
    "payload" : '{"text":"' + text + '"}'
  };
  UrlFetchApp.fetch(url, options);
}

//毎日決まった時刻にトリガー設定させる処理
function setTrigger(){

//先に使用済の日時指定トリガーを削除
  delTrigger();

  var time1 = new Date();
  time1.setDate(time1.getDate() + 1)
  time1.setHours(12);
  time1.setMinutes(0);

  ScriptApp.newTrigger('test').timeBased().at(time1).create();
}

}

//test関数用の使用済トリガーを削除する処理
function delTrigger() {

  const triggers = ScriptApp.getProjectTriggers();
  for(const trigger of triggers){
    if(trigger.getHandlerFunction() == "test"){
      ScriptApp.deleteTrigger(trigger);
    }
  }
  
}

postSlack関数内の 'url' にはSlackで取得したWebhookのURLを記述しましょう。

@hereを記述して通知音をつけていますが、要らないひとは削除しましょう。

例として毎日12時ジャストにSlackへ投稿するように設定しました。

【補足】決まった時間ピッタリにスクリプトを起動させるために

GASのトリガー設定における日付ベースのトリガーは下の画面のようにスクリプト実行時間が60分の間で不定期実行となってしまいます。

そこで上記コードにある「setTrigger」関数で「翌日の日時指定のトリガーを新規作成する処理」を毎日実行させれば解決することができます。

また、このままだと実行済の日時指定トリガーが一覧に溜まっていくので、発火後のトリガーは自動で削除する処理も追加しています。

setTrigger関数用のトリガーを作成

GAS画面の左側メニューから「トリガー(目覚まし時計のようなアイコン)」をクリック。右下のトリガーの追加を選択し、以下のように必要項目を入力して保存します。

最後に

以上でSlack自動投稿の仕組みは完成です!

シートに保存する内容は問題集の問題だけでなく、勉強したけど忘れやすそうなこと、あとで復習したい内容などを書いておくのもよいと思います。もちろん1日1問じゃ少なすぎるという人は、setTrigger関数を編集して投稿時間を増やしたりすればOKです。

参考:GoogleスプレッドシートとGoogle Apps Scriptのタイムゾーン調整について

https://qiita.com/kawamurayuto/items/e98ce7f38cb572ae616a