This page is intended for users in Hong Kong. Go to the page for users in United States.

1人目のエンジニアとしてユニオンテックにジョインした1年をCTOになって振り返ってみる

こんにちは。ユニオンテック CTOの井上です。

2018年4月にユニオンテック1人目のエンジニアとして入社して、SUSTINA, CraftBankの開発とエンジニアの組織作りをやってきました。

今年の1月末にSUSTINAの作り替えとDCMベンチャーズからの資金調達を終え、ひとつの区切りとなったので入社してから約1年の間どのように開発を進めたのかを振り返ってみようと思います。

※資金調達はいろいろなメディアで取り上げてもらいました!


目次

・入社してみてぶち当たった壁

・サービスの統合

・SUSTINAの作り替え

・最後に

入社してからぶち当たった壁

2018年4月、1人目のエンジニアとして入社しました。

当時はまだまだ本社の人数も少なくガラガラのテーブルに数人で座っていたのをよく覚えています(今では本社も人がいっぱいで活気に溢れています笑)

ユニオンテックは当時、SUSTINAとそれに紐づく13個のサービスとCraftBankのアプリ(iOS, Android)を運営していました。1人でいきなりすべてを開発していくのは無理だなと感じ、売上が立っているSUSTINAから手をつけることに決めました。プロダクトの開発・運用は外部の会社に委託していたので、まずはコード一式とサーバーの認証情報をもらうこと。バックエンドは全てPHPで書かれており、使われているフレームワークはサービスによってCodeigniter, Zend, Fuelと様々でした。それらのアプリケーションが、さくらのクラウド上にアプリケーション, DB, メールなど用途にわかれて8台設置してあるといった構成でした。


どのように動作しているのかを調べようと思った矢先、もらったコード、ステージング環境に配置された資材、プロダクション環境に配置された資材、そのすべてが異なっていることに気づきました...

状況がまったくわからず、ひたすらファイルとにらめっこして紐解いていくと、PHPのコードは同一でapacheのドキュメントルートとなっているディレクトリが環境ごとにぐちゃぐちゃであることが判明。ステージングでテストされたものがプロダクションにリリースされるものと思っていたのですが、どうやらそのような運用はされていない...

仕方ないのでプロダクション環境のコードを正しいものとしステージングとローカルの環境を整えることに。dockerで環境を作り始めたのですが、仕様書がなかったためプロダクション環境のサーバーの中を調べながら、サービスごとにコンテナを立てていく方針で進めていました。これがとても大変で、サーバーに何がインストールされていて、どのような設定がされているのかを設定ファイルやコードを追いながらひとつずつ紐解くという途方ない作業。これではいつまでたっても終わらないと感じ、dockerの作法に反して、ひとつのコンテナですべてのアプリケーションのプロセスを実行するように方針変更しました。そこから紆余曲折あったものの、方針変更後には比較的スムーズに構築が完了しました。ひとつのコンテナでプロダクションの環境を再現したことによって、サーバー上で試したいことの一部をローカルで再現できるようにもなり、結果的に使いやすい環境となりました。

入社して間も無くてキャッチアップのために様々な会議に出席していたこともあったのですが、結局ローカル環境で動作するまでに1ヶ月もかかってしまいました...

その後、GitHubを導入し、git flowにならってmasterブランチをプロダクション環境、developブランチをステージング環境に対応させ、webhookで自動的に資材をpullする仕組みを構築。これでやっと開発、テスト、リリースといった運用が回せるかなといった状態になりました。

サービスの統合

開発を進める環境が整ったので、2018年6月ごろからはエンハンス・バグ修正などを少しずつ開始していました。この頃にはフリーランスの方数名に手伝ってもらい、チームとなり開発を進めていました。サービスの仕様理解も進んできてはいたのですが、密結合な設計かつ正規化されず欲しいデータがどこにあるのかわからないテーブル構成だったため、バグが絶えませんでした。また、テストコードもなかったため、人力で確認しながらひたすらに修正をしていました(これは委託先が悪かったというよりも度重なる仕様変更と無理な納期設定が常習していたことによる負債でした)。

そんな中、SUSTINAに紐づくサービスのひとつである建設コネクトをSUSTINA本体に統合しよりユーザーのUXを高めていくことを決めました。建設コネクトは工事会社どうしをマッチングするサービスで、いまとなってはSUSTINAのコアとなる機能なのですが、当時は別のサービスとして提供されていました。

  • SUSTINA → Coddeigniter
  • 建設コネクト → Fuel PHP

というフレームワーク構成で、DBのスキーマも別だったため、データ移行とコードの書き換えが必要な比較的規模の大きな開発でした。統合後のサービスの仕様を決め、機能ごとに役割分担して開発を開始したのです、ここからが地獄でした。

共通化されていたコードが過去の度重なる仕様変更によりスパゲッティコード化しており、統合後の仕様にそって開発していくとバグが出てくる出てくる。また、スマホ対応も独自のやり方で実装されており、レイアウト崩れも頻発しました。そこで、共通のスタイルやviewのパーツなどは私が一人で整理し、新たに統合されるコードに関しては、なるべく既存のコードとは別に新規でクラスを作っていくことにしました。書かなければいけないコード量は増えたのですが、バグやレイアウト崩れの量が少しずつ減り、なんとか開発を進められる状況に。

データ移行の方も大変で、正しく登録されていないデータ、歯抜けになっているデータ、サービス連携のバグで増殖した無駄なデータなどが入り混じっていて、データクレンジングが必要に。少しづつ過去の経緯などを紐解き、営業に確認をとってもらいながら自動で移行できないデータは人力で移行する手順を作りました。

なんとか開発とデータ移行の手順作りを終え、無事リリースすることができました。

SUSTINAの作り替え

サービスの統合も完了し、それを乗り越えたことによってメンバーの仕様理解も深まったので以前に比べると格段にスムーズに開発できると感じるようになりました。

と思った矢先、朝起きると30件ほどのインフラのアラートメールが...

はい、次はインフラが火を吹き始めました。

2019年9月に受け取ったアラートメールの数が200件近くになり、サーバーが落ちるといったこともしばしば起きていました。サイトのレスポンスも遅く、ひどいときにはページの表示に10秒ほどかかることも。インフラ構築時では1000社ほどが利用できる規模のインフラとして設計していたとのことでしたが、当時6500社が会員として登録されていたので落ちて当然です笑。まずは、さくらのクラウドでスケールできないか模索してみたのですが、

  • アプリケーションのセッションをRDBで保存している
  • 自前のLinux上にインストールしたMySQLを利用している
  • NFSでファイルを共有している

ことから、当時のインフラでスケールしていくよりも、早めにアプリケーションとインフラを一から構築し直した方が長期的にみて効果的であるという結論にいたりました。これに合わせて、紐づくサービスを利用状況に応じてクローズや運用停止し、提供すべきサービスをSUSTINA一本にフォーカスしました。

クローズ対応、当時の積み残しの開発を完了させ、エンジニア全員で作り替えを実施することに。

作り替えでは、素早くリリースすることを第一優先とし、それに合わせた技術選定を行いました。

  • 言語: PHP 7系
  • フレームワーク: Laravel
  • インフラ: ECS
  • DB: RDS
  • アップロードファイル: S3
  • メール: SES
  • スタイリング: bootstrap, sass
  • jsライブラリ: jQuery

フロントエンドはVue.jsやReactなどを使っていきたいという想いはあったのですが、インタラクティブな機能はほとんどなく、SEO対策をする上でSPAだとコストが大きいことから、我慢してjQueryを使うこととしました。ここは将来的に変えていこうと考えている部分です。

作り替えでは、素早く開発するために工夫したことがたくさんあるのですが、そちらはJAWS DAYS 2019のセッションで発表させていただく予定ですので割愛させてもらいます(https://jawsdays2019.jaws-ug.jp/session/1136/)。また別途記事にしようかなと思います。

2019年1月30日に無事作り替えたアプリケーションのリリースは完了し、レスポンスも10秒から300ミリ秒と劇的に改善され、アラートメールもなく安定稼働しています。開発のスピードも格段にあがり、以前と比べてバグの数も減りました。まだまだ、やるべきことはたくさんあるのですが、入社当時には想像できなかったほど開発チームのできることの幅が広がりました。

最後に

ユニオンテックでの開発の1年を振り返ってみましたが、実際にはもっと色々なこともありました。例えば、入社してしばらく、解像度のめちゃくちゃ低い小さいディスプレイで開発をしていたりとか笑(今ではエンジニアは全員EIZOのディスプレイを使っています)。

1年間、なかなかスムーズに開発できなかったのですが、やっとマーケットに向き合って開発に集中できる環境が整いました。はじめは1人しかいなかったエンジニアも、いまでは優秀なエンジニアが続々とジョインし、スピード感をもって開発に取り組めています。

まだまだ建設業界に変革をもたらすべく、攻めの開発をしていくので、ご興味ある方はぜひオフィスに遊びにきてください!

ユニオンテック株式会社's job postings
7 Likes
7 Likes

Weekly ranking

Show other rankings
If this story triggered your interest, go ahead and visit them to learn more