リアズの開発環境の続きと開発体制について

こんにちは、リアズエンジニアチームの和田です。
12月ということで、Advent calendarで色んな方のアウトプットが拝見出来て勉強になりますね。
リアズでも来年はこのブログでAdvent calendarをやりたいなと密かに企んでおります。
 
さて前回の続きでリアズの開発環境と開発体制について紹介させて頂きます。

開発チーム体制

現在リアズのエンジニアチームには、現在12人が所属しています。
2年ほど前は今の半数ほどでしたが、この2年で体制を強化しています。結構増えましたね。
デザイナーチームを含めると、以下のような人員になっています。 

リアズ開発体制

 
リアズでは基盤システムごとに事業が分かれており、エンジニアも事業ごとにアサインされています。
大きく下記の3つに分かれています。

 

各事業ごとにセクションが分かれていますが、もちろん同じ社内ですので、手伝ったりということは多くあります 😉  

エンジニアランチ

隔週金曜日にエンジニアチームで集まって弁当会をやっています。
上記の通り、事業ごとに担当が分かれているので知識・知見の分断が生じてしまいがちなので、2週に1度のコミュニケーションの場として設けています。
使い始めた新しいツールや、最近の技術トレンド、たまに技術に関係無い話題なども話したりします。
「最初に触れた言語・注目している言語は?」という話題の時は、やはりエンジニア。組み込み出身だった・Perl CGIをやってたというような昔話も出たり、GolangやKotlinが気になるという話も出て多いに盛り上がりました。
最近では、VRは面白そうだし何かやりたいね、と話したりもしました。  

開発フロー・プロセス

自社サービスの開発になりますので、社内の人間から依頼を受けての開発になります。ここはなんといっても自社サービスは、エンジニアにとって魅力的だということを強調してお伝えしたいです。
その機能を欲している人間は社内にいるので圧倒的にやりとりし易いですし、自分の実装が事業として売上に響いてくるダイナミズムは自社サービスならではかと思います。
 
基本的には、運営・ビジネスサイドよりタスク管理ツールBacklogへ依頼が登録され、各セクションのリーダーによってメンバーにタスクが振り分けられます。
それを基に仮スケジュールを組み、毎週月曜午前中に各事業の担当者(依頼側)と社長、エンジニアセクションのリーダーとで調整を行います。
調整に関わるコストが一見大きいように見えますが、社内の色んな人から依頼がありそれぞれのポジションでの価値がありますので、会社全体俯瞰で見た価値観での優先順位を調整する必要があります。
リアズではエンジニアが事業やロールの兼任することがありますので、当面必要な調整かと思います。今のところこのフローで上手く回っています。
 
1週間のスケジュールを決めたら、各エンジニアと依頼者でコミュニケーションを取りながらタスク進めていきます。
実際の開発・実装においては、事業ごとに異なります。
 
Vagrant + VirtualBoxの仮想環境で開発し、ステージング環境で確認
Jenkinsやシェルスクリプトでデプロイを実行という事業があれば… 
 
本番環境にFTPでテストページをアップロードして確認しながら開発
リリース時は本番ファイルを上書きアップロード、
というスタイルもまだ実施しています。
リアズでは長いことこのスタイルを続けてきましたので一気に変えることは出来ず、少しずつ移行に取り組んでいます。
 

スクラム開発

また、ライブでゴーゴーのPHPシステムをモダンに刷新していくプロジェクトを進めています。
このプロジェクトでは、Scrumの導入にチャレンジしています。 
Scrum iteration
  • スプリントは1週間
  • 毎週月曜にスプリントの計画を立てて
  • 毎日朝15分間デイリースクラムを実施
  • 毎週金曜夕方に1時間のふりかえりを実施
  • スプリントレビューは組み込めていません…
 
リアズ初の取り組みで、手探りで進んできました。プロダクトバックログ作りと見積もりが甘かったり、既存プログラムの仕様やドキュメントが無かったりと色々ありましたが、何とか最終局面へと漕ぎ着けました。
厳密にいうとスクラムの定義を満たせておらず、「理解は容易、習得は困難」を身をもって実感したプロジェクトでした。今後の課題でもあります。詳しくはまた別の機会に失敗談も含めて書こうと思います。 
 

テスト

基本的に手動でやっています 😥
依頼側も開発側も手動で実行して確認しています。
が、手動の場合ユニット単体でのテストが出来ず結合した状態でのテストになってしまうので、先述のモダン化プロジェクトではPHPUnit、Codeceptionを使用してテスト駆動開発に取り組んでいます。 
 

サーバー監視・分析ツール

new relic
長らくCactiだけでしたが、これだけでは情報が足りませんので昨年頃からパフォーマンス監視にNewrelicを一部サイトで使用しています。Newrelicは無料プランでもアプリケーション側、Webブラウザー側でどの部分が時間掛かっているのか分かるので凄く有り難いツールです。エラー率やApdexというパフォーマンス指標が閾値を超えるとSlackでアラートを通知するように設定しています。
 
blackfire
その他、LogglyというログサービスやBlackfireというプロファイリングサービスを利用しています。Blackfireはボトルネックとなる部分がどこかメソッドが何回呼ばれているかが分かるのでリファクタリングの際に重宝します。

その他ツール

Browser stack 
色々なWebブラウザ環境をリモートで試せるサービスです。Win7とWin10のIE11の違い、Android 4.xでの表示等あまり気の進まない 笑 検証も簡単に出来ます。スマホブラウザも対応しています。便利ですが、リモート操作なのでかなり重いのがツラいところです 🙁 
 
フローチャートやダイアグラムを書くのに便利なドローツールです。Chrome拡張と、Confluenceのプラグインで利用しています。
 
他にも便利なサービス、ツールなどがあれば随時ご紹介したいと思います。
 

リアズでは、サービスをもっと成長させる仲間、レガシーな開発環境をモダンに刷新させる仲間、iOS/Androidのアプリを作っていく仲間を募集しています。
特にPHPエンジニア・アプリエンジニア・フロントエンドエンジニアの方は大歓迎です。
採用に関する情報と応募はコチラから
夕方面談、Skypeでの遠隔面談にも対応しています。お気軽にどうぞ!