レガシー開発環境を今風の開発に近づけるために一年やってきたこと

  • 348
    いいね
  • 3
    コメント

自己紹介

@pugiemonn といいます。
オンラインサロンプラットフォームを手掛けるシナプス株式会社で開発とマーケティングを担当しています。

シナプス画面


今日の話

1年前にレガシー環境に参加したメンバーがレガシーな問題に対して、どのような取り組みを行ってきたかお話します。


開発チームメンバーゼロ問題 :no_good:


社長1人で3年開発していた

  • 1人で走るのはつらい
  • 突然ユーザー数が増加しはじめピンチに

LGTM_tamuken.png


求人がんばった結果 :blush:

チームメンバー10名(インターン生含む)になりました✨

DSC_4888.jpg


バージョン管理されてない問題 :no_good:


1人だったのでバージョン管理など無かった

sabaku1.jpg


GitとGithubを導入した結果 :blush:

  • まずはSourceTreeから :sparkles:
  • 作業ログがわかるようになった :sparkles:
  • 問題発生箇所の調査が容易に :sparkles:

作業がチケット化されていない問題 :no_good:


1人だったのでチケットなど無かった

  • 何のタスクかわからない :poop:

sabaku2.jpg


チケット管理した結果 :blush:

  • 何の作業かわかるようになった :sparkles:
  • 現在はBacklogを使用 :sparkles::sparkles:
  • Githubとの連携で調査が容易に :sparkles::sparkles::sparkles:

デプロイがSFTP問題 :no_good:


FTPクライアントTransmitでアップロード

  • ちょっときつい😓😓😓😓😓

shutterstock.jpg


デプロイの自動化を進めた結果 :blush:

  • ひとまずgit pullでデプロイするように✨
  • 後にシェルを作ってデプロイ✨✨

次はElastic Beanstalkかも✨✨✨


ローカル開発環境が存在しない問題 :no_good:


当時は本番環境が開発環境

  • 本番のEC2のコードをそのまま修正

3099.jpg


開発環境をVagrantで作成した結果 :blush:

  • ローカル開発環境が誕生✨
  • 開発環境をチームで統一化✨✨
  • 開発環境の自動化✨✨✨

ちょっとずつ改善されています😘


1つのEC2インスタンスに全部乗っている問題 :no_good:


LAMPが1つのEC2インスタンスに全部入っている

  • MySQLもストレージも全部入っている
  • 10GBのHD使用率が90%越え
  • HDが溢れてしょっちゅう止まる

grassforce.jpg


AWSのサービスに分散 :blush:

  • S3を使用することで、HDが溢れて止まることがなくなる ✨✨✨

s3.jpeg


DBを手動バックアップ問題 :no_good:


手動でたまにdump

  • EC2インスタンスが壊れたりするとまずい

bom.jpg


MySQLをRDSに変更 :blush:

  • もしものときも復帰可能に!

rds.png


1人でがんばっちゃう問題 :no_good:


3日くらい徹夜すればできるはず

  • チーム開発経験が少ない
  • 1日は72時間あるから大丈夫など迷言増加

bom2.png


大変なときはチームを頼ろう :blush:

  • 徹夜作業の減少✨
  • 負債の減少✨✨

チームに共有する文化ができてきました😘


無駄なコード多すぎ問題 :no_good:


過去のチャレンジの負債

  • CMSが何個もリポジトリに :poop:
  • 1つのコントローラが1万行以上 :poop::poop:

nayami_thumb.jpg


不要なものを削除したり分割中 :blush:

  • 不要なコード、CMSやライブラリを削除 :sparkles:
  • コントローラを分割 :sparkles::sparkles:

徐々に見やすくなってます😘

237万行削除


命名適当すぎ問題 :no_good:


読んでもわからないコード

  • stest1 のようなアクション名 :poop:
  • wpprpayment のような謎の変数名 :poop::poop:

headache.jpg


コーディング規約を入れたり勉強会した結果 :blush:

  • PSR-2を導入 :sparkles:
  • リーダブルコードの内容を一緒に勉強 :sparkles::sparkles:

 少しずつ読みやすくなっていますす😘


型が適当すぎ問題 :no_good:


何でもテキストで判定

  • Stringをキーにして判定 :poop:
  • Trueの代わりに1という文字列が返る :poop::poop:

bom3.jpg


APIで返す型だけは担保 :blush:

  • JsonSchemaを導入 :sparkles:

 APIの不具合が減少😘

参考 : JSON SchemaとPHP


DB管理と設計が適当すぎ問題 :no_good:


開発の度にカラムを足していた

  • 1テーブルのカラム数多すぎる :poop:
  • 型が適当で正規化されていないテーブル :poop::poop:
  • 必要なカラムだがぱっと見で意味不明なカラム名 :poop::poop::poop:

bom4.jpg


正規化して型を指定 :blush:

  • 正規化してテーブルを分割 :sparkles:
  • 命名を変更、型変更や制限を追加 :sparkles::sparkles:

日々の改善でだんだんわかりやすく😘😘😘


PHPやライブラリ古すぎ問題 :no_good:


バージョンが古い問題

  • 遅いだけでなくいろいろ大変 :poop:
  • 新しいライブラリが入れられない :poop::poop:

php.png


PHPもSDKもバージョンアップ :blush:

  • array() いらずなど :sparkles:
  • パフォーマンスも改善 :sparkles::sparkles:

CakePHP古すぎ問題 :no_good:


CakePHP1.3系がメインだった

  • 1.3 :poop:

cake.jpg


APIに切り出してCake2系に :blush:

  • 既存ソースを使いたかったのでCakePHPを選択
  • APIで主要機能を切り出しCakePHP2.X系に

バグ多すぎ問題 :no_good:


とにかくバグ多すぎ

  • 土日にSlackへ緊急対応依頼がとぶ
  • 手動テストの限界?

bom5.jpg


CIでテストを実行した結果 :blush:

  • CircleCIを利用 :sparkles:
  • PHPUnitとSeleniumでカバー :sparkles::sparkles:

休日の緊急依頼が減少 😘😘😘


色々ありました


まだまだレガシー感あります


1人で走るのは大変だったけど

IMG_2573.jpg


チームで走ればなんとかなるかも :blush:


すこしずつ楽になっています


一緒に環境をよくしてくれる人募集しています:sparkles:

シナプス株式会社 http://corp.synapse.am/recruit
_DSF8486.jpg


ありがとうございました


このスライドは 第103回 PHP勉強会@東京 でLTとして発表予定のスライドです。