実装方法の解説
本章では、Googla Apps Scriptの利用方法や、実際に動作するソースコードを紹介しながら、実装する手順を説明します。
Google Apps Scriptの概要と初め方
Google Apps Script(以下、GASとする)とは、Google社が提供しているJavaScriptをベースとしたプログラミング言語で、スプレッドシートなどとのサービスと連携が簡単にできます。それだけではなく、Googleのサービス以外のWeb APIとの通信や定期的な実行が可能なため、さまざまな用途で利用されています。ちなみに今回は、V8ランタイムを使用した方法になります。
利用方法は、Googleスプレッドシートのページへ行き、「Googleスプレッドシートを使ってみる」から新規に作成します。
ファイルに名前をつけた後、メニューの「ツール」内の「スクリプトエディタ」をクリックします。すると以下の画面になります。
こちらにGASを書き込み、実行していきます。
QiitaのWebAPIから情報を取得
まずはGASで、QiitaのWebAPIから情報取得を試してみます。ソースコードは以下です。
function getQiitaFollowersNum() {
// QiitaAPIから情報取得
const id = 'tkyko13';
const res = UrlFetchApp.fetch('https://qiita.com/api/v2/users/'+id);
const content = res.getContentText();
const data = JSON.parse(content);
// フォロワー数をログに表示
console.log(data.followers_count);
}
こちらをコピーペーストして保存をしたら、以下の実行ボタンを押してソースコードを実行します。
ソースコードにはフォロワー数をログに表示と書かれています。そのログを見るためには、メニューの「表示」内の「ログ」を押します。
すると、以下のポップアップが表示され、フォロワー数が表示されています。
次に、生徒全員のフォロワー数を取得していきます。
// 4期生のQiita id
const ids = ['UhRhythm','kaiser355','Toshiki0324','canonno','tatsuya1970','twtjudy1128'];
function writeQiitaFollowers() {
// idの数分だけ処理を繰り返す
ids.forEach((id, index) => {
// 各生徒のフォロワー数を取得
const followerNum = getQiitaFollowersNum(id);
// フォロワー数をログに表示
console.log(followerNum);
});
}
function getQiitaFollowersNum(id) {
// QiitaAPIから情報取得
const res = UrlFetchApp.fetch('https://qiita.com/api/v2/users/'+id);
const content = res.getContentText();
const data = JSON.parse(content);
// フォロワー数を返す
//console.log(data.followers_count);
return data.followers_count;
}
同じようにログを表示すると以下の通り生徒全員のフォロワー数を取得することができました。
スプレッドシートに書き込む
次に、ログに出力するだけでなく、スプレッドシートに書き込んでいきます。ソースコードは以下です。
// 4期生のQiita id
const ids = ['UhRhythm','kaiser355','Toshiki0324','canonno','tatsuya1970','twtjudy1128'];
function writeQiitaFollowers() {
// シート取得
const sheet = SpreadsheetApp.getActiveSheet();
// 追加する行を取得
const lastRow1 = sheet.getRange(1, 3).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
// idの数分だけ処理を繰り返す
ids.forEach((id, index) => {
// 各生徒のフォロワー数を取得
const followerNum = getQiitaFollowersNum(id);
// スプレッドシートの各生徒のカラムの最後に書き込み
sheet.getRange(lastRow1+1,3+index).setValue(followerNum);
});
}
function getQiitaFollowersNum(id) {
// QiitaAPIから情報取得
const res = UrlFetchApp.fetch('https://qiita.com/api/v2/users/'+id);
const content = res.getContentText();
const data = JSON.parse(content);
// フォロワー数を返す
//console.log(data.followers_count);
return data.followers_count;
}
注意点はsheet.getRange(1, 3)あたりでは、スプレッドシートの作りによっては変更しなければいけません。今回、私たちの管理しているスプレッドシートは以下の通りで、C列の最後にフォロワー数を追加したい箇所になっています。
C列は左から3番目になっているので、sheet.getRange(1, 3)の数値は3とし、C列の最終行の数値を取得しています。
もちろん最終行を取得しているので、追加する箇所は、フォロワー数を追加していくたびに自動的に1行ずつ下に移動していきます。実行すると、以下の通り追加されるようになりました。
定期的な実行
週1回こちらの実行ボタンを押すのもよいですが、GASを自動で実行してくれる機能も備わっているので、そちらを実装していきます。以下の虫眼鏡アイコンをクリックするとトリガーの管理画面へ遷移します。トリガーとは、プログラムを実行するきっかけになります。
今回は、毎週木曜日の11時頃になったことをトリガーにします。右下のトリガー追加ボタンをクリックします。
トリガーを追加するポップアップがでてくるので、「イベントのソースを選択」内の「時間主導型」を選びます。
今回は週1回のトリガーにしたいので、「週ベースのタイマー」を選択します。
以下の通り、「毎週木曜日」の「午後11時〜午前0時」を選択します。実行されるタイミングは最大1時間ほどの誤差がありますが、今回はそれほど影響はないので心配はありません。
作成し、先ほどの管理画面に追加されていることが確認できれば準備完了です。
時間になったら実行され、スプレッドシートにフォロワー数が無事追加されていれば成功です。ここまでで実装作業は完了となります。お疲れさまでした。
まとめ
今回は、プロトアウトスタジオが毎週行っている生徒全員のQiitaのフォロワー数をスプレッドシートに記録していく作業を自動化しました。また、GASでQiitaのWebAPIから生徒全員のフォロワー数を取得し、スプレッドシートに記録していくソースコードもご紹介しました。結果、毎週行っていた作業がなくなり、その時間をデータから考察する時間に割り当てることができました。
今後の発展として、プロトアウトスタジオでは宿題にQiitaだけでなく、noteへの投稿もしていますし、それらを紹介するツールとしてTwitterを利用しています。それらのフォロワー数やいいね数などの計測をすることで、各プラットフォームで比較し、それぞれに合わせたアウトプットも可能になります。ここまでご覧いただきありがとうございました。
