2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
事業成長を加速させるフロントエンド改善のお話(全1記事)
リンクをコピー
記事をブックマーク
山下功介 氏:「事業成長を加速させるフロントエンド改善のお話」というタイトルで発表させていただきます。
まずは自己紹介です。ヘイ株式会社STORES.jpでフロントエンジニアをしております、山下功介と申します。前職では、ベトナムのHRTech領域のスタートアップでフロントエンドとして働いておりました。主にVueとReactが好きです。
まず会社の紹介です。heyはSTORES.jpと、クレジットカード決済と電子マネーを提供しているCoineyの経営統合によって生まれた会社です。
STORES.jpは、誰でも簡単にオンラインが作れるサービスで、自分ではなかなか持ちづらい9種類の決済方法でしたり、独自ドメインの取得など多数の機能を提供しております。
本題に入りまして、昨年までのSTORES.jpのフロントエンド環境についてお話しいたします。
まずストアページとそのストアのオーナーさんが管理するストアオーナー用のページが主な機能になっており、それらが去年まではRailsのモノリシックな環境で構築されていました。その中でERBのテンプレートと、AngularJSもv1.3を使っておりました。
そこでAngularJSからVue.jsへの移行を始めました。
それと同時にフロントエンドチームの発足もされました。フロントエンドチームはもともと1人で発足されたので、約1年で7倍ですね。7人のメンバーが増えました。
まずはコアとなるストアデザイン機能というものがありまして、その機能の開発着手に進みました。約5ヶ月かけてストアデザイン機能をリリースいたしました。
当初の見積もりは2ヶ月だったのですが、それが5ヶ月と2倍以上に膨れ上がってしまいました。これはなぜか? 大きな理由は開発スタートとチームの誕生、そしてメンバーの急激な増加。これが一気に重なったことにあります。
今まで基盤が一切できていない中で進めていたので、開発スピードを上げるためには一定の基盤の構築やルールのところに時間のリソースを割いていかなければ、長期的な加速は見込めないと判断し、約3ヶ月を基盤の構築に費やすことになりました。
その中で見えてきた課題がだいたいこちらですが、今日は10分しかないのでこの3つに絞ってお話させていただければと思います。
ますコンポーネントルールです。コンポーネントはいろんなメンバーで開発をしているので似たようなコンポーネントが乱立していました。異なる粒度のコンポーネント……大きすぎたり小さすぎたりするコンポーネントがありました。STORES.jpは複数のリポジトリがあるので、他のリポジトリでも使いたいという課題がありました。
それに対してStorybookを使ったUIコンポーネントライブラリを作成しました。作った数は現状で30種類のコンポーネントで、主に複数のリポジトリで使えるようにライブラリ化をしました。あと、デザインが今まであまり揃っていなかったのですが、デザインシステムを構築し、デザイナーを巻き込んでそこから開発をするようにしました。
主に作ったコンポーネントはこのようになっております。ボタンやフォーム、ダイアログなどがあります。その他、ここに出ていないものも作りました。
主に改善とつらみですが、改善できたことは大幅な記述がいらなくなったことです。ロジックや各ドメインにリソースを割けるようになりました。そしてデザイナーともUIの共通認識もできましたので、ちょっとデザインが違うときに「ここどうなっているの?」という確認がし易くなりました。
つらみですが、100件以上の修正issue。これがプロジェクトを進めていく上でここを直さないと次に進めないことがけっこう起こってしまいました。あと長期的に運用するにあたって後方互換の考慮も必要です。このあたりはけっこうつらいですね。仕様もしっかり決めていかないとなかなか厳しいところがあります。
あとはバンドルサイズがものすごく肥大化してしまう問題もありました。今で116キロバイトあります。ElementUIがあると思うんですが、あれのコアファイルで140ぐらいですね。うちはそんなにまだ機能が揃っていないのにこれなので、ここに関してはこれから更に肥大化していくのでちょっと見直しをしていかないといけない部分になります。
次にレビュー環境の見直しです。レビュー環境はローカルのチェックアウトがとても面倒で、IEだったりスマートフォンの立ち上げはけっこう面倒くさいですよね。あとデザイナーに「ちょっと見せてよ」みたいなことを言うときにすぐに見せれなかったり、ローカルに立ち上げてもらう必要があります。
それをCircleCIとLambda@Edgeで解決しました。これで生成されるプレビュー環境はステージング環境で実装内容の確認ができます。そして1つのプッシュに対して1個のURLが発行されるような仕組みになっていまして、内容はこんな感じです。
GitHubのプルリクエストが作成されるとnuxt.jsのビルドが走って、その結果をプルリクのナンバーごとにS3に保存していきます。レビュアーはLambda@Edgeの認証を経てCloudfrontを経由しプレビュー環境にアクセスします。なお、サブディレクトリに直接アクセスすると404でエラーになってしまうため、Lambda@Edgeでデフォルトルートのマッピングを行う必要があります。
これによりレビューコストの軽減ができ、IE、SPで気軽なプレビュー環境が作成できました。先ほど申し上げたとおり、サブディレクトリへのアクセスには工夫が必要というところと、APIがデプロイされている必要があるので、そこが注意が必要です。
次に行ったことがテストの効率化です。UI周りのテストの書き直しが非常に面倒だったり進捗が遅れてくると、テストが後回しになりやすかったりします。そしてなるべく楽をしたいというところもあります。
そこで使ったのがREG-SUITを使ったVisual Regression Testingです。
左と右の画像を見比べていただくとこういったかたちで差分を表示してくれます。その内容をプルリクエストにコメントくれます。この赤い丸の数が主に変更になった、修正のファイル数になります。
こういった感じでスタイルの崩れチェックが可能です。
これもGitHubのプルリクエストを作成してStorybookのビルド、zisuiというライブラリでスクリーンショットの撮影をして、リグレッションテストでそのスクリーンショットとS3に保存しているマスターブランチの画像を比較します。その比較結果とスクリーンショットをS3に保存し、プルリクエストに比較結果をコメントしていきます。
これによって見た目関係のテストの簡略化やリファクタリング時の精神的負荷の軽減を得ることができました。導入も比較的容易にできると思います。ただ、イベントだったりのアニメーションのテストはできないというところ、あと差分が多い場合は人力でのチェックになるのでどうしても見落としが出てくるところはあります。
最後にまとめです。チームとしてのスピード感は改善を通してだいぶ上がってきました。ただ、まだまだ未解決の問題もあります。仕様書が揃っていないことでしたり、見積もりの精度が甘いところ。これはどう解決しようかと検討している最中です。あとパフォーマンス改善のところには、まだまったく手が回っていない状態になっています。
なので、どなたか良い知見があれば教えていただけるとすごい助かります。
最後に個人成長ができた点というところで、実は私は4月に入社したばかりで3ヶ月しか経ってません。
このBCUなんですけど入社5日目に社内で募集がありまして、ちょっと手を挙げてみたら意外とすんなり確定しちゃったんですね。
ドメインだったり技術だったり、歴史的背景もわからないことだらけだったので、社内ツールを遡りまくって先輩に聞きまくって手探りでやってきました。そのおかげで歴史を通しての課題感とかもわかりましたし、その乗り越え方も身についてきました。これがけっこう大きな個人成長だと思います。
最後に、まだ募集は常にしているので気になる方がいらっしゃいましたら、「Hello hey」という隔週で木曜日にイベントをやっております。これは誰でも参加できますので、ぜひ気になる方とかエンジニアと話したい方がいらっしゃいましたら、ぜひこちらに参加していただければなと思います。発表は以上になります。ありがとうございました。
(会場拍手)
関連タグ:
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05