PHP

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


自己紹介

@pugiemonn といいます。

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

シナプス画面



今日の話

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



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



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


  • 1人で走るのはつらい

  • 突然ユーザー数が増加しはじめピンチに

LGTM_tamuken.png



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

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

DSC_4888.jpg



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



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

image.png



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


  • まずはSourceTreeから :sparkles:

  • 作業ログがわかるようになった :sparkles:

  • 問題発生箇所の調査が容易に :sparkles:



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



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


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

image.png



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


  • 何の作業かわかるようになった :sparkles:

  • 現在はBacklogを使用 :sparkles::sparkles:

  • Githubとの連携で調査が容易に :sparkles::sparkles::sparkles:



デプロイがSFTP問題 :no_good:



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


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

image.png



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


  • ひとまずgit pullでデプロイするように✨

  • 後にシェルを作ってデプロイ✨✨

次はElastic Beanstalkかも✨✨✨



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



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


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

image.png



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


  • ローカル開発環境が誕生✨

  • 開発環境をチームで統一化✨✨

  • 開発環境の自動化✨✨✨

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



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



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


  • MySQLもストレージも全部入っている

  • 10GBのHD使用率が90%越え

  • HDが溢れてしょっちゅう止まる

image.png



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


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

s3.jpeg



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



手動でたまにdump


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

image.png



MySQLをRDSに変更 :blush:


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

rds.png



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



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


  • チーム開発経験が少ない

  • 1日は72時間あるから大丈夫など迷言増加

image.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:

image.png



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


  • JsonSchemaを導入 :sparkles:

 APIの不具合が減少😘

参考 : JSON SchemaとPHP



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



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


  • 1テーブルのカラム数多すぎる :poop:

  • 型が適当で正規化されていないテーブル :poop::poop:

  • 必要なカラムだがぱっと見で意味不明なカラム名 :poop::poop::poop:

image.png



正規化して型を指定 :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へ緊急対応依頼がとぶ

  • 手動テストの限界?

image.png



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


  • CircleCIを利用 :sparkles:

  • PHPUnitとSeleniumでカバー :sparkles::sparkles:

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



色々ありました



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



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

IMG_2573.jpg



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



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



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

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

_DSF8486.jpg



ありがとうございました


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