開発チームの文化を支えるkintone

[kintone Advent Calendar 2015](http://qiita.com/advent-calendar/2015/kintone) 最終日です。

こんにちは！今日が仕事納めの[@ama_ch](https://twitter.com/ama_ch)です。kintoneを開発して飯を食っています。

# 開発者にこそkintone!

[kintone](https://kintone.cybozu.com/)はビジネス系部門でご利用いただくことが多いのですが、開発にも幅広い用途で役立てることができます。kintone開発チームではドッグフーディングも兼ねて業務全般でkintoneを活用しています。

今回はkintone開発チームの使い方を例に挙げながら、開発者目線でkintoneを紹介してみます。

# 気軽にデータを蓄積できるアプリ

kintoneの一番の特徴は、何と言ってもD&Dでフォームを配置するだけで作成できるアプリです。数分でデータを溜める箱を作って運用開始できます。

このような「気軽にデータを溜める箱」は意外と登場機会が多く、開発チーム内でもさまざまなアプリが運用されています。代表的なアプリを2つ紹介します。

## タスク管理アプリ

いわゆるBTSと同じようなものです。世の中には数えきれない程の類似ツールが存在しますが、kintoneで作る場合の大きな特徴は**スモールスタートできること**です。

例えば、次のような流れでアプリにフォームや機能が増えていきます。

1. 「タイトル」と「説明」だけの最低限のアプリを作る
1. 開発メンバーが増えたので「担当者」フィールドを追加
1. QAメンバーがジョインし試験対象のタスクが分かるようにするため、「プロセス管理」機能を有効化
1. 登録される不具合が増えて機能追加と区別したくなり、「種別」フィールドを追加

<img width="1130" alt="タスク管理アプリ" src="https://qiita-image-store.s3.amazonaws.com/0/19620/1ecc10af-0aa5-8e0d-2550-24207ae2c6d3.png">


kintone開発チームで利用しているタスク管理アプリもこのように変更を重ね、これまで約2200回の設定更新がありました。

業務の変化に合わせて柔軟にアプリの構成を変更できるため、気軽に使い始めることができます。ありがちな問題として、開発チーム内のツールは他チームのメンバーには使いにくいというのがありますが、kintoneは開発者以外の利用も想定しているので、そのような問題は起きにくくなっています。

## ふりかえりアプリ

kintone開発チームでは2週間に1回ふりかえりを行っています。開発者にはおなじみの[KPT](http://kuranuki.sonicgarden.jp/2013/05/kpt.html)を使っており、KeepやProblemはkintoneで作成したふりかえりアプリで管理しています。

<img width="363" alt="ふりかえりアプリ" src="https://qiita-image-store.s3.amazonaws.com/0/19620/cb4cafdb-5d53-04c9-ddfd-438549610432.png">


最初は付箋やホワイトボードを使った方法も検討しましたが、次のような事情がありうまく機能しませんでした。

* 他拠点や自宅からリモートで参加するメンバーもいる
* Problemに対する議論の結果を残したい
* Tryの達成状況を管理したい

自分たちの要件を満たすサービスを探したり既存のサービスを無理して別用途に使うのに比べると、kintoneを使うことで簡単に欲しいシステムを実現できました。

こちらのふりかえりアプリは使いながら改善を重ね、現在はクローンアプリが社内のいたるところで作成・使用されています。

# カスタマイズでアプリをハックする

kintoneアプリはただのデータを溜める箱に留まりません。コードを書いて表示や動きを色々カスタマイズすることができます。

## JSカスタマイズ

任意のJSファイルをアップロードしてコードを実行することができます。JS APIを使って、次のような処理が記述できます。

* レコード保存時に特定の値が入力されていたらエラーにする
* 入力値によってフォームパーツの表示/非表示を切り替える
* 外部サービスから値を取得してフォームに入力する

具体的なカスタマイズの流れは[こちらの記事](https://cybozudev.zendesk.com/hc/ja/articles/201755040-%E7%AC%AC1%E5%9B%9E-kintone-javascript-API%E3%81%AE%E3%82%A4%E3%82%B8%E3%82%8A%E3%81%8B%E3%81%9F)がわかりやすいです。

先述のふりかえりアプリでは、「K/PフィールドでPが選択されたらTryが入力可能になる」などのカスタマイズがされています。

## プラグイン

JSカスタマイズをパッケージングして配布できるようにしたものが[プラグイン](https://kintone.cybozu.com/jp/feature/plugin.html)です。

kintone開発チームでは、ふりかえりアプリに登録されたレコードに「いいね！」がしたくてたまらないメンバーがJSカスタマイズで実現しました。

<img width="766" alt="いいね!プラグイン" src="https://qiita-image-store.s3.amazonaws.com/0/19620/1a6b22fc-58ba-daba-bac1-a224ad1ea37f.png">

このカスタマイズはプラグインになり、現在は[cybozu.com developer network](https://cybozudev.zendesk.com/)の[プラグインサンプル](https://cybozudev.zendesk.com/hc/ja/articles/203711920)として配布しています。

## REST API

CLIプログラムでkintoneアプリにレコードを追加したい？

安心してください！[REST API](https://cybozudev.zendesk.com/hc/ja/categories/200147600-kintone-API)がありますよ！

社内で稼働中のシステムからkitnoneにレコードを突っ込んだり、バッチプログラムでレコードを一括処理して集計したりできます。

### 開発チームによるREST APIの使用例

kintoneは日英中の3言語に対応しており、翻訳作業のため文言をkintoneアプリで管理しています。ソースコード内の文言リソースを変更したらkintoneアプリの文言も一緒に変更する必要があります。

この作業を自動化するため、Chrome拡張を使ってGitHubのプルリクエストからワンボタンでリソースの変更差分をアプリに反映できるようにしました。

![文言の自動反映](https://qiita-image-store.s3.amazonaws.com/0/19620/c2c21ac7-a46d-e0c9-b99e-685de126afe3.png)


ボタンをクリックするとJenkinsジョブがキックされ、ジョブの中で実行されるスクリプトでREST APIが叩かれます。[APIトークン](https://cybozudev.zendesk.com/hc/ja/articles/202463840-API%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86)もあわせて利用すると、認証情報をプログラムにベタ書きせずに実装できます。

# 開発チームのやりすぎカスタマイズを紹介

最後に、中の人たちによるちょっと変わった使い方を紹介します。

## Jenkinsビルド結果の通知

![jenkins.png](https://qiita-image-store.s3.amazonaws.com/0/19620/8d99a973-5066-73c5-a441-cead7f88f9ed.png)

ビルド結果をkintoneのスレッドに通知するJenkinsプラグインです。ビルドを落とした疑いのある人にメンションを送信する機能もあります。

※ 現在スレッド投稿用のREST APIは未提供です。今後にご期待ください。

## バーンダウンチャート

<img width="643" alt="バーンダウンチャート" src="https://qiita-image-store.s3.amazonaws.com/0/19620/b92804ed-60a6-e22c-35f3-60da6812f6ce.png">


開発の進捗を可視化するためのバーンダウンチャートもkintoneアプリのレポート機能で作成しています。

グラフだけ見ても分かりませんが、このグラフを出力するために

* 事前に理想線を引くためのデータをCSVで登録
* タスク管理アプリからREST APIでデータを抽出
* 抽出したデータを集計用アプリに登録
* 集計用アプリからグラフを表示

といった処理が行われています。結果として**Jenkinsジョブが5分に1回走っていて、頑張ってる感がすごいです**。でも、我々はkintoneでやりたいんです。

## いろんな集計アプリ

<img width="885" alt="いろんな集計" src="https://qiita-image-store.s3.amazonaws.com/0/19620/b540fdc8-859e-ab55-67da-a70b05118713.png">


コードの行数やテスト数・カバレッジなど、いろんなメトリクスをグラフ化するためのアプリです。

アプリの構造はとてもシンプルで、基本的に日付、種別、集計値の3フィールドしかありません。

毎日データを登録して、種別で絞り込んでグラフ化すると、日々の変化が確認できます。集計値は**Jenkinsのデイリージョブで入力されます**。

## おやすみカレンダー

<img width="1279" alt="おやすみカレンダー" src="https://qiita-image-store.s3.amazonaws.com/0/19620/df35a045-0222-8e86-2249-0af47a868192.png">

チームメンバーの休暇を確認できるアプリです。全社で利用している休暇申請アプリからチーム内のメンバーのデータだけ抽出し、カレンダー形式で確認できるようにしました。**データの抽出はもちろんJenkinsジョブで実行されています。**

上の画像は今月のおやすみカレンダーですが、サイボウズはホワイト企業なので28日休む人がめっちゃ多いですね。

# まとめ

開発チームで活用するkintoneについて紹介しました。

手軽にアプリが作成でき、JSカスタマイズやREST APIもあるので、開発者にとっても遊びがいのあるサービスではないかと思います。開発チームのさまざまな業務にも役立てることができるので、興味を持っていただけた方は[無料お試し](https://kintone.cybozu.com/jp/)からぜひご利用ください。

それではみなさん良いお年を！