Qiita Team API と Google Spread Sheet でチーム日報を生成する


チーム日報を活用する

MarketOne 開発チームでは複数拠点に分かれての開発を行っています。リモート開発が中心となると口頭でのコミュニケーションに限界があるため、テキストベースのコミュニケーションの比重が高い状態にあります。

チケットシステムやソースコード管理ツール上の議論はもちろんおこなっているのですが、日報や議事メモによるインフォーマルな情報共有についても日々の進捗や課題の可視化に役立つため、 Qiita Team にそれらの文章を公開してもらうようにしています。Qiita Team では Markdown 形式でリッチな HTML をプレビューしながら書くことができます。

これらの文章は個々に探していけば読めるのではあるのですが、前日に行われた MarketOne チーム全体の進捗を俯瞰で共有しながら朝会を行うために、「チーム日報」という形でまとめることを考えました。チーム日報をまとめるために毎回手動でコピペしてくるのも面倒ですし、非生産的です。Qiita Team にはAPIが公開されているため、こちらを利用して個々の日報を取得するようにしてみました。

Qiita Team API を利用する

Qiita Team APIの仕様はこちらに公開されています(※現在はv2まで公開)。

まずは「設定」 → 「アプリケーション」からアクセストークンを生成します。OAuth認証などの仕組みも用意されているため、作成するアプリケーションに応じて適切な認証が利用できます。

Google Spread Sheet でプログラミング

今回はGoogle Spread Sheet 上に Markdown 形式でチーム日報を生成するようにします。Google Spread Sheet には Google App Script と呼ばれるサーバーサイドの JavaScript が用意されており、APIから取得した結果を成形しながらスプレッドシートに反映することができます。

Google Spread Sheet 上の「ツール」→「スクリプトエディタ」から Google App Script を起動します。

Google Spread Sheet で Qiita API を使ってみる

まずは API を利用するための関数を作成しましょう。

http ヘッダに Authorization  Bearer {api_token}をセットすることで認証を行い、指定したリソースにクエリを発行してレスポンスを取得します。

チームの日報を取得する関数を作成

いよいよ Qiita Team からMarketOneに関係する日報を取得します。Qiitaチームでエントリを取得するには以下のリクエストを行います。

{api_endpoind}/items?query={検索条件}&sort={ソート項目}

今回ほしい条件は、 MarketOneチームのメンバー AND タグに「日報」を設定 AND 1日前のエントリ です。これをクエリストリングで表現すると以下の通りとなります。

user:{ユーザー名1} tag:日報 created:>-1d OR user:{ユーザー名2} tag:日報 created:>-1d

()による優先順位制御が行えれば、 tag:日報 と created:>-1d は一回でよいのですが、Qiita Team API では優先順位制御が行えないため、すべてのユーザーに対してこれらのAND条件を付与しています。またグループメンバーを取得するAPIもないため、get_group_members は単純な該当するユーザー名配列をそのまま返すようにしています。

検索条件では前日の日報を絞り込みこめなかったため、タイトルの正規表現でさらにフィルタしたJSONを生成します。

JSON を Google Spread Sheet に反映

つづいて指定したカラム名の配列で Markedown 形式でテーブルを表現する文字列を生成する関数を実装します。

そして、生成した JSON から以下のように任意の情報を取得して成形することで前日分の日報をサマリしたチーム日報を生成することができます。

 

さらに本文からMarkedownの「本日の作業内容」段落を取得します

黒魔術的な正規表現になってしまいましたが、やっているのは日報テンプレートの #本日の作業内容 と次の # 始まりの見出しまでの「改行を含む任意文字」を取得し、テーブル要素内で改行するために改行コードを <br/> タグに変換することです。

まとめ

以上の手順でメンバーの日報をまとめてチーム日報を生成するスクリプトが作成できました。あとは要件に応じて取得クエリや取得内容を調整できます。今回は Qiita Team APIを活用して手作業を減らす方法についてご紹介しましたが、MarketOneをはじめとするその他のサービスについてもAPIが公開されるようになってきています。APIを通じて必要な情報を自動でまとめる仕組みを作ることで、手間なく全体の状況をつかめるダッシュボードが作成できるようになるため試してみてはいかがでしょうか。

 

 

 


DACエンジニア採用情報

  関連記事

【未経験からのRuby on Rails – 第3回】変数と定数

こんにちは。新卒1年目のmatsuariです。 今回はRubyに限らずプログラミングを学ぶ上で非常に重要となる「変数と定数」について、ご紹介していきます。 変数とは・・・ オブジェクトを一時的に格納しておく箱で、オブジェクトを識別するために利用します。 言葉だけでは理解が難しいかと思いますので、まず …

no image
Angular.jsのvalueとfactoryの違いを考える

次のようなHTMLがあったとする。 [code language=”html”] <!doctype html> <html lang="jp" ng-app="App"> <head> <me …

SDKってどうやって作ってるの?【Android編】

こんにちは。4度目の投稿です。 現在私はAndroidのSDKを開発しています。 javaにもAndroidにもSDKにも手を出したのは初めてなので、最初はそもそもSDKのイメージが湧かず、ふわふわした状態で始めました。 SDKと調べても「あるソフトウェアを開発するために必要なプログラムや文書などを …

no image
【未経験からのRuby on Rails – 第1回】楽しく書けるプログラミング言語 “Ruby” とは

こんにちは、はじめまして。新卒1年目のmatsuari(女子)です。 この度、Rubyの勉強を始めることになりまして、 まずはたくさんあるプログラミング言語の中で、なぜ自分がRubyを学ぶのか? しっかりと把握した上で学習に取り組んでいきたいと考え、『Rubyとは何か?』調べました。 超基礎的なこと …

Vagrantの機能を使って開発環境の効率をあげてみた。

プラットフォーム・ワンのシステムの運用・保守担当のエンジニアです。 保守の仕事に関わると、 ユーザからのお問い合わせだったり、監視アラートによる検知から システムを調査することがあります。 ログとソースコードを見て、不具合を特定し改修する。 すぐできればカッコいいですが、 「本番環境に反映して別のエ …

【未経験からのRuby on Rails – 第2回】Rubyのプログラムを書いてみる(Mac)

こんにちは。新卒1年目のmatsuariです。 前回はRubyとは何か、簡単にご紹介をしましたが、 今回は実際にRubyファイルを作成して、プログラムを書いてみるところまでご紹介していけたらと思います。 Mac環境のプログラミング初心者向けです。 はじめに、Rubyのプログラムを書くためのファイルを …

プログラミング初心者がswiftでゲームアプリ的なものを作ってみた。

こんにちは、DAC2年目のkumataです。 普段は素敵な先輩方に囲まれてインフラ周りのお仕事をさせて頂いていますが、 今回は業務とは全く関係ないプログラミングをやってみました。 全く初心者なのですが、swift+Xcodeで簡単にスマホゲーム的なものが作れました。 初心者の目線から作成方法をつらつ …

Selenium × PHP でテスト自動化!【環境構築編】

はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 テスト自動化の背景 わたくしが担当するXmediaOneでは品質担保のために①コードベ …

【クラウド初心者向け】Google Cloud Platform(GCP)でWebサイトを公開してみよう!

はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 背景 わたくしは最近プライベートで開発したWebサービスをインターネット上に公開しまし …

GoogleスプレッドシートからTreasureDataへデータを取り込む

AudienceOneの開発を担当しています。skryoです。 またまたTreasureDataネタですが、今回はGoogleスプレッドシートからGoogleAppsScriptを使ってTreasureDataへデータを取り込む手順を紹介したいと思います。 なぜ? Googleスプレッドシート上でマ …