初めてプロジェクト開発に取り組んで1年掛かった話

こんにちは、リアズエンジニアチームの和田です。
リアズでは2015年12月から2016年12月までの約1年間、ライブでゴーゴーのユーザー様向けのサイトを刷新するプロジェクトに取り組んでいました。
社内では通称「モダン化プロジェクト」と呼んでいます。今日はその取り組みについて書きます。 
 

背景

弊社ならびに子会社のサービス エンジェルライブチャットピアライブでゴーゴーは、いずれも運営10年を越え、この業界では比較的老舗のサイトとなっています。
長い運営の中で増改築を繰り返していたために、内部は構造的ではなく散らかった状態でした。
ライブでゴーゴーは2014年にフルリニューアルを実施しましたが、時間が無い中でシステム統合・リニューアルで突貫だっため、比較的新しいけれど技術的負債も多い状態でした。
 

技術的負債のある状態の家


 抱えていた課題

  • OSやミドルウェアのバージョンが古い
  • FTPでアップロードを止めたい(ヒューマンエラー・セキュリティ)
  • バックエンドもフロントエンドもバージョン管理出来ていない
  • 複数メンバーが改変を繰り返してきたため複雑化している
  • 仕様が特定の人の頭の中にある
  • https化が時代的に迫られている
  • CSSについてもプリプロセッサもフレームワークも使っていない。更新が非効率になってきている。 

具体的な困った例

  • CSSも !important!important がかち合い何が優先されるか分かりにくい、血で血を洗う戦い(?)のような記述がある
  • リリースしたはずのものがいつのまにか前のバージョンに巻き戻っていた
  • 退職者が作ったプログラムなので追加変更作業についてもまずは解析からで時間が掛かった
  • リリースの際、一部ファイルの更新漏れ
  • 変更した際、他のページで影響が出た
  • SDK・ライブラリを導入したいけれど、OS・ミドルウェアが古くて使用できない
  • 画像・CSSを更新したのに反映されない(クライアントのキャッシュを読み込んでいるページ一括で無効化出来ない) 

 このままでは
・開発が遅くなる、保守コストが増大する
・表示速度が世間と相対的に遅くなりユーザー体験を損ねてしまう
ため、2015年11月から下準備を始め、12月から開発が始まりました。  
 
ちなみに1~2ヶ月程度突貫作業をすることは過去ありましたが、それ以上の規模でしかもサービスを続けながらというのは弊社では経験がありませんでした。

 やったこと

 
・PHPはフレームワークを採用
 流行りや機能の豊富さから、Laravelを採用しました。
 フロントエンドもLaravelのテンプレートエンジンBladeを採用しました。
 結果的に正解だったと思いますが、もう少し詳しく検討しても良かったかもしれません。
 
・Gitでのバージョン管理
 以前から部分的にBitbucketを使用していたのでBitbucketを引き続き利用することにしました。
 
・デプロイシステム設置
 本番環境・ステージング環境ともに Deployer でデプロイします。
 タスクの実行にJenkinsを使用しています。
 
・CSSはSCSS形式のSASSで
・CSS設計はBEMを採用
 一部BEMのルールがあまり好きになれないという意見も出ましたが、以前より格段に保守・再利用しやすいCSSとなりました。 
 
・タスクランナーの使用
 Gruntを採用し、フロントエンド高度化による手動作業を自動化しました。
 後にプラグインの多さ、処理速度の速さからGulpに変更しました。
 
・スクラム開発への挑戦
 もともと1週間単位でスケジュール決める風土だったので、イテレーションスタイルに移行しやすい。
 少しずつ少しづつリリースするスタイルもリアズに向いていると思いScrumにチャレンジしました。 
 

リリースは、機能ごとに1つずつリリースと言う形をとりました。
本来はサブドメインを切ってやるべきかと思いますが、https化進める側面もありましたのでポート80番と443番でサーバーを振り分けました。
ネットワークルーティング概要図
リリースした機能の古いURLをリクエストしたら新しいサーバーへ301リダイレクト。
まだリリースしていない、新サーバ(https)に無いコンテンツをリクエストされたら現行サーバ(http)に302リダイレクト。
という棲み分けで進めていきました。
 

そして炎上。

設定された期限までに終わりそうに無い!
 
 プロジェクト炎上

 なぜなら見積もりと計画がきちんと出来ていなかった…

  • 開発工数のみの見積もりだった。
    フロント・バックの連携、テスト、リリースの工数が考慮されていなかった。
  • 会社として初めて取り組むプロジェクト開発・アジャイル開発だったので、挑むのには規模が大きすぎた。
  • 現行の仕様についてまとまった情報がなく、把握しきれていない部分が多かった。
  • 要求をわかったようで分かっていなかった。よく分からないまま見切り発車してしまった。
  • 途中で要求が変わったが期限はそのままだった。
 
さて、どうやって続けたのかは次回に続きます。 

We’re hiring!

リアズでは、力を合わせてともにハードルを越える仲間を募集しています。
PHPエンジニア・フロントエンドエンジニアの方は大歓迎です。
エンジニアも一緒にサービスを作り上げていく、自社サービスならではダイナミクスにご興味がある方はぜひ!
 
採用に関する情報と応募はコチラから
夕方面談、Skypeでの遠隔面談にも対応しています。お気軽にどうぞ!