2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
事業成長を加速させるフロントエンド改善のお話(全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.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略