突撃!隣の開発環境 パート10【ペロリ編】
こんにちは!おおはしりきたけです。今回も突撃!隣の開発環境という形でイケてる開発会社さんの開発環境についてインタビューさせてもらいました。第10弾として、ペロリさんに訪問させてもらいました。インタビューに答えていただいたのは、サーバーサイドエンジニアの朝香さん、Androidエンジニアの東海さんです。
突撃!隣の開発環境とは
技術事例やノウハウなどは、ブログや勉強会などで共有されることが多いと思います。しかし、各社の開発環境や開発体制などは意外と共有されていないこと多いと思います。ノウハウの流出になるかもしれませんが、それ以上に、より良い開発を目指している会社さん同士で情報交換を行い、良いチーム、良いプロダクトを作っていくという志の会社さんの為の情報共有のための企画になります。開発環境や開発体制なども技術領域によっても変わってくると思いますが、この突撃!隣のシリーズでは様々な会社さんのイケてるツールの使い方や、仕事が捗る開発体制についてインタビューを行っていく予定です。
ペロリ紹介
どんなことをやっているのか?
ペロリさんは「Human touch to Internet」というミッションを掲げており、“女の子の毎日をかわいく”をコンセプトに、女の子の生活に役立つ情報を発信するキュレーションプラットフォーム「MERY(メリー)」をリリース。月間UU(ユニークユーザー)数2000万 *1を突破(2015年8月時点)し、女性たちから圧倒的な支持を受けています。今回はMERYを支えているエンジニアの方々に貴重なお話を聞かせていただきました。
開発環境について
まずは、ペロリさんの開発環境について色々と伺っていこうかと思います。
開発環境
AWSについては、ELB、EC2、EDS、ElastiCache、S3、CloudFrontといったサービスを利用しており、AWSの王道的な使い方をしているとのことでした。iOS/Androidについては、両方ともネイティブで書かれており、Serverについては、Ruby(on Rails)を利用し、Capistranoを使ってデプロイしているとのことでした。
MERYのAWS構成
EC2周辺の具体的な構成
開発端末
ペロリさんは、基本的にMacを利用しており、MBA、MBP、iMacを選ぶことが可能ということです。デザイナーの方やビルドに時間のかかるエンジニアの方々は、MacBookProの15インチを利用している方が多く、ディスプレイはデュアルディスプレイ(基本的に2枚使っている)にしているということでした。キーボードなどは、自分好みの物がいいということで、個人で持ち込んでいる方も多く、Happy Hacking KeyboardやREALFORCEなどを使っている人も多いということでした。
コミュニケーションツール
プロジェクトを円滑にするために様々なコミュニケーションツールを使うことになります。チャットやチケットの管理、仕様の共有などどのように行っているのか聞いてみました。
チャットツール
ペロリさんでは、チャットツールとしてSlackを利用しています。プロダクト単位やビジネス単位でチャンネルが作らていたり、雑談系のチャンネル(ランチなど)やエンジニアの技術雑談チャンネルなどもあるそうです。CircleCI、github、Trello、NewRelicといったツールと連携していたりHubotでコードのレビュアーを決めたりなど、面白い使い方をしています。
プロジェクト管理ツール
チーム毎にちょっと使い方が異なるようで、サーバーチームは、githubにIssueを作成し、Trelloと連携して管理しており、アプリチームはZenhubを利用しチケットの管理を行っているとのことでした。タスクについては各チームで利用するツールを分けていたりしますが、MERYというサービスの横断的な機能については、ユーザストーリーをGoogle スプレッドシートで管理をしているということでした。もちろん最初にユーザストーリーを作成し、各チーム毎にタスクに落としているようです。
仕様の共有方法
APIの議論などはgithubのIssueで行ない、FIXしたものはQiitaTeamに書いてまとめていくということをやっているようで、JSONフォーマットなどはRspecのautodocを使ってドキュメントにしているとのことでした。アプリについては、インタラクションや細かい部分を文字で進めていくのは大変なので、対面で仕様の確認を行い、決まったものをQiitaTeamでまとめていくことが多いということでした。
リポジトリ
githubを使っており、リポジトリ数は35個程度あり、iOS、Android、Serverのコードは勿論のこと、gemや構成管理ツールとして利用しているitamae、TerraformやDockerなどインフラに関わる部分も管理しているとのことでした。ブランチの運用については、次のバージョン、バグフィックスのブランチを分けて、それぞれステージング環境で確認し、最終的にリリースブランチに取り込む運用をしており、機能毎にブランチを切って作っているとのことでした。レビューは上述したとおりHubotで担当者を決めてやっているということで、よくあるレビュアーが偏ってしまうという課題に対応しています。
自動化ツール
CI環境は、CircleCIを使っており、CIとしては、自動テスト、ステージングへのデプロイ、Deploygateへの配信などを行っているとのことでした。またAWS側でも自動化を行っており、Teraformビルドをしたり、DockerHubなどで利用しているとのことでした。
デザインツール
Sketch3を使っていることが多く、それをSkala Previewで表示させているそうです。プロトタイプの確認にはProttを使ってUIの確認を行ったりするそうです。デザインの確認はQiitaTeamにデザイン指示書を起こし確認することが多く、微調整などはデザイナーさんが直接行うこともあるということでした。デザインリソースのファイルのやり取りはboxを利用し受け渡しを行っているとのことでした。アプリでインタラクションの確認を行う場合は、デザイナーさんがFlashで作成したり、ムービーを作って細かいやり取りをすることも多いそうです。
開発体制
開発チームについて
ペロリさんのエンジニア構成は以下のようになっています。
- エンジニア:14名
- iOS/Androidエンジニア:4名
- フロントエンドエンジニア:2名
- サーバーサイドエンジニア:7名
- インフラエンジニア:1名
- デザイナー:5名
サーバーサイドエンジニアの方もAWSを触ることが多いとのことでした。
開発プロセスについて
裁量勤務制度が適用されていますが、チームごとの朝会もあるため、11時を目安に出勤されるそうです。朝会では、昨日やったことやその日やること、アプリチームはインストール数等を共有しており、サーバーチームは、サービス運用上でエラーなどが発生した場合は、障害情報なども共有しているそうです。アプリチームでは、バージョン単位で2週間〜1ヶ月の期間でマイルストーンを決めて、2週間の1スプリントで行っているそうです。バーンダウンチャートを作成し、ベロシティも計測している。見積もりについては、プランニングポーカーで見積もりをしており、もちろん全員で完了の定義を決めてから見積もりを行っているとのことでした。突発的な作業や予測できない作業などもあるため、20%のバッファをとって計画をしているとのことでした。
写真は、ミーティング風景とバーンダウンチャート
コミュニケーションについて
レスポンスがすぐに必要な物は対面で行うことが多く、非同期の確認で良い物についてはgithubでmentionを付けて確認したり、その中でも緊急度が高いものについては、Slackでmentionをつけたりと、用途により、コミュニケーションの取り方が工夫されています。会話などについてもログに残そう、ということで、Slack、github、Qiitaに必ず共有されるようにしているとのことでした。他チームとのコミュニケーションを活発にするために、シャッフルランチや月1の社員飲み会や、有志の部活などを行ない、他の部署との関わりも頻繁ということでした。サービスを作っていくうえでチームのみならず、全社的な意識を持って活動しているのだと感じました。
テストについて
Webでは、RSpecを使って機能テストを行い、今後はE2Eのテストなども導入予定とのことでした。AndroidはJunit、EspressoとSpoonを使って自動テストを行っており、もちろん実機のテストについても行っているそうです。また、大きなリリースについては、親会社のDeNAのQAチームに依頼をすることもあるそうです。基本的にリリース前などはdeploygateを社員全員が使ってテストを行うとのことでした。またUIなどのテストについては、グループインタビューを月に1〜2回行ない改善を行っていくとのことでした。
その他
ペロリさんでは、その他以下の様な活動も行っております。
TechTea
月1〜2回技術者がやっていること、やりたいことを5分〜20分程度の時間で発表を行うということで、18時から行われるので、LanchではなくTeaという名前がついています。
輪読会
パーフェクトRoRなどの良書の読書会を行っているそうです。
開発合宿
金曜日の出社後に夜22時から集まり開発合宿を行うこともあるそうです。会社でやることが多く仕事している感じになってしまうので、今後は場所を変えてやっていきたいとのことでしたw
写真は、合宿前のラジオ体操の風景です!
今回登場したツール
コミュニケーション
- チャット:Slack
- リポジトリ:github
- タスク管理:Trello
- タスク管理:ZenHub
- wiki:Qiita:Team
- API定義:autodoc
- ユーザストーリー:Google スプレットシート
サーバー周り
- 監視:NewRelic
- デプロイ:Capistrano
- オーケストレーション:Terraform
- 構成管理:itamae
自動化
- CI:CircleCI
- CI:Docker Hub
テスト
デザイン
- デザインツール:Sketch3
- プレビュー:Skala Preview
- プロト:Prott
- ファイル共有:Dropbox
※ペロリさんでは、上記以外にも様々なツールを利用しております。上記はインタビュー時に伺った内容のものを記載しています。
まとめ
第10回目は、ペロリさんにインタビューさせてもらいました。朝会でダウンロード数の共有や障害の報告などはサービスをやっている会社さんならではだと思いました。ババーンダウンチャートでスプリントの状況を可視化し、常にプロジェクターでサービスの利用状況などが分かるようになっているなど非常にオフィス内も工夫されています。取材させて頂いた皆さんも今以上に新しい技術をキャッチアップしてサービスの何処かで利用していきたいというお話を聞かせていただき、技術に貪欲なエンジニアの方々が集まっているという印象でした。
最後に写真を取らせていただきました。左からAndroidエンジニア東海さん、iOSエンジニア伊達さん、サーバーサイドエンジニア朝香さん、私です。お忙しいところありがとうございました!!
参考リンク
http://sssslide.com/speakerdeck.com/kajiken/meryfalseuragawa
https://www.wantedly.com/companies/peroli
脚注
- 月間UU(ユニークユーザー)は、Google Analyticsの集計による、のべ月間利用者数のことで、いちユーザーによるスマートフォンやPCなどからのデバイス横断でのアクセスの重複も一部含む。なおMERYのデバイス比率は、スマートフォン93.8%、PC6.2%。 ↩