チーム開発で便利だと思ったツールのご紹介

# はじめに
[mixiグループ Advent Calendar 2017](https://qiita.com/advent-calendar/2017/mixi) 8日目の記事です。
2017年の6月に株式会社ミクシィに入社し、今は[みてね](https://mitene.us/)というサービスの開発をおこなっています。

# この記事はなに？
チームで仕事を進めていくと当たり前ですが、タスクの管理だったり、
情報の共有だったり、プログラミングをする上である程度のコードの統一が必要だと思います。
ですが今までは、進捗管理だったり情報の共有をスプレッドシート等の
特にタスク管理に特化したツール等は使わずに進捗管理をしていたので、
なんとなく使いづらさ・管理のしづらさを感じていました。
ですが、今のチームにジョインして
**「あーこのツールが便利だな…！」** **「こうすればコードの質が担保できたんだな…！」**
みたいなのが幾つもあり、その中でも**Trello**、**RuboCop・Danger**はかなり良かったので、
今回ご紹介したいと思います！

# [Trello](https://trello.com/)
![home-hero.png](https://qiita-image-store.s3.amazonaws.com/0/49347/1f96be5f-380b-7201-2c80-ebda20684033.png)

タスクの管理はTrelloを使っておこなっています。
こちらのツールを使って各人のタスクを把握するようにしています。
左から順番に優先度の高いタスクとし、スタンプを使ってタスクの状態を管理していきます。
今回は「設計」というタスクを例にしてタスクの作成から完了までの流れをご紹介します！

## まずはタスクを作成する
何か大きめの機能を実装する際、まずは設計から始めます。仮に**ほげ機能**を実装する場合、まずは
リストの作成と設計のカードを作成します。
<img width="283" alt="スクリーンショット 2017-12-01 11.44.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/49347/9970c996-94fa-1a38-dc82-f94629f71deb.png">

## 設計を始めたらロケットスタンプを乗せる
実際にほげ機能の設計を始めたら**ロケットスタンプを乗せます。**
これで他のメンバーは「あーほげ機能の設計を始めたんだな」とすぐに把握することが出来ます。
<img width="287" alt="スクリーンショット 2017-12-01 11.45.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/49347/78883e97-f6c6-17c1-daca-a7deebb6fa09.png">

## 設計完了・レビュー待ちになったら時計スタンプを乗せる
設計が完了したら他のメンバーにレビューをしてもらうために、時計スタンプを乗せます。
設計タスクの場合はこちらのスタンプを乗せてから、
関係者を集めて作成した設計を確認してもらうために、レビュー会を開きます。
そのレビュー会でフェードバッグを貰い、再度修正をおこない、関係者のOKが出るまで繰り返します。
<img width="279" alt="スクリーンショット 2017-12-01 11.45.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/49347/ddbb71f5-a241-3b25-9395-db947c81c2a4.png">

## タスクが完了したらチェックスタンプを乗せる
タスクが完了したらチェックスタンプを乗せてタスクを終了します。
<img width="282" alt="スクリーンショット 2017-12-01 11.45.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/49347/32a5c0bc-705d-a25d-49d9-d4e420e8875e.png">


## タスクを消すのは朝会等の共有会で
完了したタスクにはチェックスタンプを乗せますが、削除は朝会などの共有会でおこないます。
こうすることで、そのタスクに直接関係ない人でも
「あーこのタスクは完了したんだな」というのを全員で把握することが出来ます。

## 上記をやって感じたこと
今まで「あれ？あのタスクどうなってるんだっけ？てか誰かやってる？」みたいなことがちょくちょくあったのですが、
Telloを上記のフローで運用することでタスクの発生から終了までを、関係者が把握することが出来るなと思いました！
タスクを消化していく快感も味わえるので、個人的に凄く良いタスクの管理方法だなと感じました！



# コードの質を担保する
一つのプロジェクトを複数人で運用していると、各人のコードの癖だったりが出てしまい、
ソースコードの一貫性が保てなくなることがよくあります。
それらを防ぐためにRuboCopとDangerを使い、コードの一貫性を担保するようにしています。


## [RuboCop](https://github.com/bbatsov/rubocop)
RuboCopはRubyの静的コードアナライザです。設定したコードスタイル以外の書き方をすると注意してくれるので、
プロジェクト全体である程度統一した書き方をすることが出来ます。

こちらの記事が参考になります。[RuboCop でコーディングスタイルを矯正する](http://momota.github.io/blog/2016/06/17/rubocop/)


### Rubymineとの連携
僕は普段RubyMineを使って開発をしているのですが、RubyMineとRuboCopを連携することが出来ます。
連携することで、自動的にコードを修正してくれたり、
Rubyっぽくないメソッド名をその場で指摘していくれるので、導入をオススメします！
　
![変換.gif](https://qiita-image-store.s3.amazonaws.com/0/49347/3cacb2bf-3688-85d1-c46a-2e2653d10df2.gif)
（自動的でコードを修正してくれる！便利！）
## [Danger](https://github.com/danger/danger)
手元の環境でRuboCopを使って開発していても、漏れてしまうこともあります。
ですがDangerを使えばGithub上でPRを作った際に注意してくれるので、
手元の開発で漏れていても、PR上で気づく事が出来るようになります。

<img width="983" alt="スクリーンショット 2017-12-01 11.53.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/49347/9372e6f4-59ce-87b7-3802-46350fbaaa3c.png">

上記の例ではRailsでCronを管理するWheneverの設定ファイルのタイポを指摘してくれています。

## 上記をやって感じたこと
RuboCop・Dangerを使うことで細かいコードの指摘はDangerがやってくれるようになったので、
良い意味で人がコードに対しての細かい指摘はレビューの中で少なくなり、
エラーハンドリング等の大枠の実装に集中して、レビューがおこなえるようになりました！

# おわりに
Trelloを導入することで、タスクの作成から完了まで一貫して管理・共有することが出来るようになり、
RuboCop・Dangerでコードの質を機械的に担保することが出来るようになりました！
今のチームにジョインして上記のようなツールを使うようになり、
人数が多い・少ない関係なくチーム開発を進め上で積極的に使っていったほうがいいなと強く感じました！