SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

自分自身で課題を解決するDX事例紹介

Qiitaのフォロワー数を毎週定期的にスプレッドシートに記録する作業の自動化を目指そう!

自分自身で課題を解決するDX事例紹介 第1回

実装方法の解説

 本章では、Googla Apps Scriptの利用方法や、実際に動作するソースコードを紹介しながら、実装する手順を説明します。

Google Apps Scriptの概要と初め方

 Google Apps Script(以下、GASとする)とは、Google社が提供しているJavaScriptをベースとしたプログラミング言語で、スプレッドシートなどとのサービスと連携が簡単にできます。それだけではなく、Googleのサービス以外のWeb APIとの通信や定期的な実行が可能なため、さまざまな用途で利用されています。ちなみに今回は、V8ランタイムを使用した方法になります。

 利用方法は、Googleスプレッドシートのページへ行き、「Googleスプレッドシートを使ってみる」から新規に作成します。

図3:GASの利用方法(1)
図3:GASの利用方法(1)

 ファイルに名前をつけた後、メニューの「ツール」内の「スクリプトエディタ」をクリックします。すると以下の画面になります。

図4:GASの利用方法(2)
図4:GASの利用方法(2)

 こちらにGASを書き込み、実行していきます。

QiitaのWebAPIから情報を取得

 まずはGASで、QiitaのWebAPIから情報取得を試してみます。ソースコードは以下です。

js
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);
}

 こちらをコピーペーストして保存をしたら、以下の実行ボタンを押してソースコードを実行します。

図5:GASの利用方法(3)
図5:GASの利用方法(3)

 ソースコードにはフォロワー数をログに表示と書かれています。そのログを見るためには、メニューの「表示」内の「ログ」を押します。

図6:GASの利用方法(4)
図6:GASの利用方法(4)

 すると、以下のポップアップが表示され、フォロワー数が表示されています。

図7:GASの利用方法(5)
図7:GASの利用方法(5)

 次に、生徒全員のフォロワー数を取得していきます。

js
// 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;
}

 同じようにログを表示すると以下の通り生徒全員のフォロワー数を取得することができました。

図8:生徒全員のidからフォロワー数を取得し、出力されたログ
図8:生徒全員のidからフォロワー数を取得し、出力されたログ

スプレッドシートに書き込む

 次に、ログに出力するだけでなく、スプレッドシートに書き込んでいきます。ソースコードは以下です。

js
// 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列の最終行の数値を取得しています。

図9:ある一定の列の最後の行を取得する説明
図9:ある一定の列の最後の行を取得する説明

 もちろん最終行を取得しているので、追加する箇所は、フォロワー数を追加していくたびに自動的に1行ずつ下に移動していきます。実行すると、以下の通り追加されるようになりました。

図10:上記のGASを実行した後のスプレッドシート
図10:上記のGASを実行した後のスプレッドシート

定期的な実行

 週1回こちらの実行ボタンを押すのもよいですが、GASを自動で実行してくれる機能も備わっているので、そちらを実装していきます。以下の虫眼鏡アイコンをクリックするとトリガーの管理画面へ遷移します。トリガーとは、プログラムを実行するきっかけになります。

図11:GASを定期的に実行する手順(1)
図11:GASを定期的に実行する手順(1)

 今回は、毎週木曜日の11時頃になったことをトリガーにします。右下のトリガー追加ボタンをクリックします。

図12:GASを定期的に実行する手順(2)
図12:GASを定期的に実行する手順(2)

 トリガーを追加するポップアップがでてくるので、「イベントのソースを選択」内の「時間主導型」を選びます。

図13:GASを定期的に実行する手順(3)
図13:GASを定期的に実行する手順(3)

 今回は週1回のトリガーにしたいので、「週ベースのタイマー」を選択します。

図14:GASを定期的に実行する手順(4)
図14:GASを定期的に実行する手順(4)

 以下の通り、「毎週木曜日」の「午後11時〜午前0時」を選択します。実行されるタイミングは最大1時間ほどの誤差がありますが、今回はそれほど影響はないので心配はありません。

図15:GASを定期的に実行する手順(5)
図15:GASを定期的に実行する手順(5)

 作成し、先ほどの管理画面に追加されていることが確認できれば準備完了です。

図16:GASを定期的に実行する手順(6)
図16:GASを定期的に実行する手順(6)

 時間になったら実行され、スプレッドシートにフォロワー数が無事追加されていれば成功です。ここまでで実装作業は完了となります。お疲れさまでした。

まとめ

 今回は、プロトアウトスタジオが毎週行っている生徒全員のQiitaのフォロワー数をスプレッドシートに記録していく作業を自動化しました。また、GASでQiitaのWebAPIから生徒全員のフォロワー数を取得し、スプレッドシートに記録していくソースコードもご紹介しました。結果、毎週行っていた作業がなくなり、その時間をデータから考察する時間に割り当てることができました。

 今後の発展として、プロトアウトスタジオでは宿題にQiitaだけでなく、noteへの投稿もしていますし、それらを紹介するツールとしてTwitterを利用しています。それらのフォロワー数やいいね数などの計測をすることで、各プラットフォームで比較し、それぞれに合わせたアウトプットも可能になります。ここまでご覧いただきありがとうございました。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
自分自身で課題を解決するDX事例紹介連載記事一覧

もっと読む

この記事の著者

小野 隆之(オノ タカユキ)

 都内大学院を修了後、某ベンチャー企業にてゲーム開発に携わる。その後、卒業した大学へ指導員として務める。非常勤講師として授業を受け持ったり、学生の研究の指導に携わった。IoT、ゲーム、教育を融合した取り組みを模索する中、日本初のプロトタイピング専門スクール「プロトアウトスタジオ」の第1期生として入学...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/13190 2020/11/25 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー