Google Apps Scriptを利用してJIRAのAPIをたたいている話

freee Developers Advent Calendar の 2 日目です!

はじめまして、freee開発チームの岸本(satoshiks)です。
今Qから誕生したテクサポチームでプロダクトのバグや質問の情報整理を行っています。

はじめに

2014年の4月半ばにfreeeに来てからはやくも3年半ほどが経ちました。
入った当時は30名ほどだった社員数が今では10倍以上になり、社内の様々な情報整理の必要性を改めて感じています。
この記事ではその中で自分がやってきたことや、やっていることなどを軽く書いて行こうと思いますので、軽い気持ちでお付き合いいただけたらと思います。

以前のブログにも似た話がありましたが、今回は別の角度から

developers.freee.co.jp


freeeに来る以前にやっていたこと

本題に入る前に今回の記事を書くにあたって、自分がfreeeに来る以前にやってきたことを回想してみると、いろいろな場所でいろいろとやってきたことを思い出しました。過ぎたことはあまり振り返らないのでざっくりですが

「DTPに興味を持ってグラフィックデザイン的なことをしてみたり、DTMに興味を持って着メロの編集をしてみたり、オーストラリアのファームでワインのブドウを収穫していたり、新型の携帯端末の実機検証でバグを出しまくったり…等々。」

それらの仕事の過程で毎回同じ作業をやっていたり、同じ情報を別のファイルに転記したり、そもそもこれはやらなくても良いんじゃないだろうかと疑問に思うことが多くありました。そしてもう少し効率的に仕事を進めたくなり、そのために自動化する仕組みを作る手段を探っている内に、プログラミングに興味を持ってJavaScriptでコードを書くようになっていました。
現在書いているGoogle Apps Scriptは、前職の仕事の中でこれは絶対に自動化することができると思う作業があり、それをどうしても自動化したくて、ちょうど今くらいの時期だったので年末年始に文字通り朝から晩まで(もっというと朝から朝まで)没頭して自動入力ツールを作ったのが始まりでした。


あと全然関係ないですが、泳ぐのが好きで湘南の海で10kmを泳ぐオープンウォータースイミングに出たりしていました。今年はfreeeのトライアスロン部でスイムパートを担当して九十九里で泳いできました。

情報を可視化するためにやっていること

現在所属しているテクサポチームは今年の10月に立ち上げたばかりで、当初マネージャ以外の社員は自分だけでした。現在はメンバーも増えて様々な課題解決に取り組んでいるところです。
新チームでの自分のミッションは、以前のチームでやっていたことを横に広げつつ改善していくこと。
以前のチームでどんなことをやっていたかと言うと、所属しているチーム(開発チーム内に複数のチームがありその中のひとつのチーム)に来るバグや質問チケットの一次解析や回答をしたり、優先度をつけて起票から解決までのフローを最適化していくということをやっていました。
それによって開発チームのエンジニアが業務に集中することができて、全体の生産性が上がる。
最適化する方法のひとつとして自動化があり、自動化するための方法を考えてそれを実現するコードを書いていました。

具体的な例としては

1. 正確な情報を集める

バグや質問を管理するツール(現在はJIRAを使っています)に起票されるチケット内容の精度が起票者によって異なり、開発者側で調査するために必要な情報が欠けていたり間違っていたりして差し戻しのコストが発生していました。

常に新しいメンバーが入ってくる環境では、起票のルールを口頭で伝えてもドキュメントに書いても伝わりきらずに情報不足のチケットが起票されてしまう。
そこで、直接起票するのではなく、専用の登録フォームを作って必要な項目を予め用意しておき、起票時に必要な項目を埋めてもらうという仕組みを作りました。さらに、入力された情報をもとにそれに紐づく情報を裏で動くコードが自動取得することで、起票者が入力する項目数をできる限り減らし、開発者が欲しい情報をできる限り取得してから起票されるようにしました。

また、おそらくGoogleフォームの仕様で、質問の説明欄では改行が出来ず、以前は下のBefore画像のようにすべて一行で表示されていたところを、空白スペースを入れて強引に改行しているように見せるという裏技的な方法も編み出しました。

Before

f:id:satoshi-x-sea:20171130235501p:plain

After

f:id:satoshi-x-sea:20171130234500p:plain
(ちなみにfreeeではバグのことをハッピーと呼んでいます)

それでも直接起票や情報不足のチケットがゼロになることはない現実と向き合いながら、引き続き次の改善を進めています。

フォームからJIRAへ起票する際には、Goolge Apps ScriptのURL Fetch Serviceを利用してJIRAのAPIをたたいています。
起票フォーム自体は上の例のようにGoogleフォームを利用して作成したり、Goolge Apps ScriptのHTML ServiceでHTMLファイルを真っ白なところから作り込んでいったりしています。

2. 集めた情報を整理する

日々起票されるチケットがどれだけあって、そこにはどんな傾向があって、どうなることが理想なのか、そして理想に近づけるために何ができるか。それを知るために可視化されたデータを見たい。

チケットの数と傾向は起票されたデータから見ることはできますが、見やすくするための工夫は必要です。
探した限りだとJIRAの標準機能では実現する方法を見つけることができず、ないなら作ってしまおうということで、JIRAのAPIをたたいて起票時とは逆に必要な情報を取得することにしました。

データを取得してそれを集計してグラフで可視化したいので、JIRAから取得したデータを一度Googleスプレッドシートに書き出して、それをもとにピボットテーブルを必要なだけ作って集計し、その集計結果からグラフを作成して可視化するということをやっています。
そしてスプレッドシートのスクリプトエディタにあるトリガーの機能を利用して、定期的にJIRAのAPIをたたく仕組みを作って集計自体を自動化しています。

APIをたたいてわりと手の込んだことをやっているため、これももっとシンプルに実現する方法を考えています。

おわりに

今回は「Google Apps Scriptを利用してJIRAのAPIをたたいている話」と題して、自分がこれまでやってきたことや、今やっていることの一部をかいつまんで書いてみました。今の仕組みの中でやらなければいけないこともまだ多くありますが、やりたいことを確実に実現してくことも必要で、そのためには一緒に実現していく仲間が必要です。
freeeではエンジニアの採用活動を積極的に行っておりますので、ご興味がありましたら是非ご応募下さい!

www.wantedly.com

jobs.freee.co.jp

明日の3日目はfreeeAIラボの先駆者Kenji Usuiさんです。お楽しみに。