Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

by pugiemonn
1 / 56

自己紹介

@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として発表予定のスライドです。

pugiemonn
GoogleTagManagerを利用してGAを操るようなマーケターとしてお仕事しています(☝ ՞ਊ ՞)
pugiemonn_com
pugiemonn.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした