2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
READYFORフロントエンドの黎明 DesignSystem導入/READYFOR Elements誕生(全1記事)
リンクをコピー
記事をブックマーク
江面陽一氏:では、私から「”READYFORフロントエンド” の黎明」というところで、分離に向かっていいサイクルに傾き始めたときのきっかけをお話ししたいと思います。よろしくお願いします。
まず簡単に自己紹介させてください。江面陽一と申します。SIerからWebをやりたいなと思って転向しまして、READYFORに2018年の11月に入社をしています。私生活では、バンド活動をしていたり、猫を飼っていたりしています。技術的なところでは、React、Netlify、CSS設計、component設計などが好きです。
(スライドの)最後に「要素セレクタ警察」と書いているんですけど、これは「CSSの要素セレクタをプロダクションコードで書くのは悪だ」というふうに考えていまして、日々のプルリクエストを見ているときに、要素セレクタを気軽に書いてくる者を見つけた場合には、すぐに笛を吹いて、CSSの治安を良くするための取り締まり活動をしています。
では本題に入りますが、「”READYFORフロントエンド” の黎明」というところで、アジャンダを4つ用意しています。それまでどうだったかという話と、2019年のUIのリニューアルプロジェクトで使った技術を紹介します。最後にまとめてシェアしていきたいと思います。
それまでのREADYFORのフロントエンドですね。Railsアプリケーションで稼働を開始した「READYFOR」は、現場の要望を実現するためにとにかくスピード重視の開発が繰り返されていて、将来を見据えた設計というより動作することをとにかく優先して、スピード重視で開発されていました。
そうすると、やっぱり本番に出したときに初めてわかる考慮漏れがあって、それを突貫で塞ぐと、さらにバグを生みやすくなるという、負のループを踏んでいたと思っています。
フロントエンドの話で言うと、フロントエンドのコードの一部だけにRubyの変数が埋め込まれていたり、ReactとCoffeeScriptなどのいろいろな技術がちょっとずつ入っていたりしました。他にも、Gulpとwebpackが両方入っていたりとか、「npmなの? yarnなの?」とパッとわからなかったりという状況があって、全体像がわからないことが大きな課題でした。
スピード重視で開発することは、立ち上げ期のアプリケーションのあるあるだと思っていて、しょうがない部分もあるのかなと思っているのですが、直近の開発ではつらいということで、なんとかよい方向に舵を切りたいなとみんなが思っていました。
そんな中、2019年5月のある日、弊社のCTOの町野から「UIリニューアルをやろう」という意思決定が降りてきまして、一同「やったぜ」とリニューアルプロジェクトが発足しました。次はそのリニューアルプロジェクトがどんな感じだったかをお話ししたいと思います。
このプロジェクトは「プロダクトの負債がとにかくやばいからリニューアルしようぜ」という話ではなくて。全社的にブランディングをリニューアルするプロジェクトが発足して、サービスのリニューアルはその一部であるというのがすごく大事なポイントだったと思います。
弊社の代表・米良がどのような思いでブランディングの刷新に踏み切ったのかが左側のnoteに記事でまとまっていますので、興味がある方はぜひ見てみてください。
一方、技術的な面としてやっぱり開発がつらかったのがあるので、なんとかいい方向に舵を切れるような施策を打ちたいなと考えました。ただ、ブランディングのプロジェクトは社内外が一丸となって進めるもので、どうしても期限は守らなきゃいけないものでした。
期限を守りつつもフロントエンドの開発がよくなっていくような攻めの側面も組み込みたいよねという話があり、このバランスをうまく取るためにどういう技術構成にするか、というのは、立ち上げときにすごく考えました。
最終的に無事決まった中身をちょっとシェアします。まずそのときにやると決めたことで、デザインシステムを入れました。今回対象じゃないほかのページや、プロダクトが今後分割していくにあたって、ブランドに紐づいた統一されたデザインの運用がどのみち必要になるだろうなという話があり、このタイミングで始めようということになりました。
他には、「UIライブラリの新規作成」というところで、デザインシステムから派生するライブラリを用意しました。機能の部分はどうしても仕様の戦いとなってしまうので、それならばデザインシステム文脈は最初から別のリポジトリで用意したほうがいろいろ開発もしやすいし、混ざらなくてよいだろうなと考えました。
こちらは「READYFOR Elements」と命名をて、社内限定ではあるんですけれども、npm installをすることによって利用が可能です。
一方で、先ほど「やると決めたこと」を紹介したんですけど、「やらないと決めたこと」もあって、それがReact on Railsからの脱却です。
こちらはつらかったのでやめたかったんですけど、当時、いくらブランディングが目的であったとしても、やっぱり対象ページの事業数字を落としてはいけないよねという話がありました。主にSEO観点なんですけれども、そうするとSSRを削る選択ってしにくいよね、という話になりました。
Node.jsのサーバーを新しく立てて、SSRするのでもいいのかなと思ったんですけど、ここに貼ったコードのとおり、コンポーネントを描画するときのパラメータでprerenderをtrueにするとSSRできるという仕組みがあったので、これはReact on Railsを使ったほうがいいよねという判断をしました。
他にもブランディングの刷新が目的なので、SPA化することによるUX向上などは、今回は必須ではないかなとなりました。API化するのであれば、バックエンドの工数も必要になってくるので、今回は現実的じゃないねという話をしました。
こんな感じで技術構成がいろいろ決まりて、2019年の10月に無事リリースできてよかったなと思っています。
では、そのときに使用した技術で、使ってみてどうだったのかという話も併せて紹介したいと思います。
最初に書いたのがReactですね。当時は、デザインシステムを新しく作るんだったら、スタイルが書きやすいVue.jsという選択肢もなくはないかなと思っていました。ただ先ほど言ったとおり、React on Railsを使い続けるのであれば、React以外にする理由もないよねというところもあり、当時技術顧問をしてくれていた方がReactが得意だったので、主にこの2つが大きな理由になってReactを使う決定をしました。
TypeScriptはこのときに初めて入れました。「Reactを使うんだったらTypeScriptを使ったほうがいいよね」という、もはや使わない選択肢はなかった雰囲気がありましたね。
使ってみてわかったんですけれども、やっぱりどんなデータをコンポーネントがもらっているのかが実行しなくてもわかる、propsの型を見ればわかる状態というのがすごく快適で、これが「コンポーネントとどういうふうに分けていこうかね」という設計の時点で、ものすごく役に立ったなと思っています。
RailsからReactの連携部分だけはどうしても型の補完が利かないところなので、そこは手動でがんばって気をつけて開発していました。
AtomicDesignも今回新しく入れていたものです。「デザイナーの方との意思疎通のために一定のフレームがあったほうがよさそうだろう」と考えました。コンポーネント指向で、ゴリゴリ開発するのが慣れていないエンジニアも多かったので、最初の分割の指標になったのもよかったのかなと思っています。とはいえ、「Moleculeなのか、Organismなのか?」というAtomicDesignのあるある問題はもれなくウチも踏んでまして、コンポーネント分割の「どっちが正しいんや?」という議論も生まれているので、随時改善していきたいなと思っています。
あとはStorybookですね。こちらも触ったことはなかったんですけど、コンポーネントライブラリを作るのであれば入れたほうがいいんじゃないかという技術顧問の勧めで使い始めました。Railsのビューを作るときと違って、いきなりそのビューの開発に取りかかれるというのはすごく快適だなと思いました。
他にも、使ったことある方も多いと思うんですけど、addon-knobsというブラウザで状態の変化をポチポチ確認できるプラグインもあって、これもすごく役に立っています。
スクリーンショットで紹介しますと、このリブランディングのときに生まれたデザインがこういったかたちで、状態に応じて4つありました。Storybookで、ラジオボタンやチェックボックスをポチポチすると、状態に応じて確認できます。
ボタンだと「このラベルのところが長くなったらどうなるの?」というところがデザイン段階ではけっこうわからないと思うんですけど……こんな感じで「2行には決してならないボタンなんだな」ということがその場でわかるというのが、すごくコンポーネント開発の役に立ちました。
駆け足で説明したんですけれども、まとめです。コンポーネントを設計・実装する基礎力が身について、その感覚をエンジニア間でレビューなどを通して共有できたのはすごくよかったなと思いました。
責務を考えることはどんなReactコンポーネントを作るにあたってもけっこう大事なことだと思っていて、これをUIライブラリを作ったことによって、みんなが同じレベルで話ができるようになったというのは、ものすごくよかったと思いました。
あとは、デザインシステムとUIライブラリの運用が開始できたというのも素直によかったことだなと思っています。始まっていないと改善もできないと考えているので、今後改善をしてブラッシュアップしていきたいなと話しているところです。
反省点として1点挙げます。「これをいま言うなよ」って感じかもしれないんですけど、いきなりUIライブラリを作ると、機能を開発しているときにライブラリ側とアプリケーション側のどっちも直さなきゃいけなかったりして、その往復の工数がけっこうかかっちゃったなと思っています。今振り返ると、これは別のスコープでもよかったのかなと思います。とはいえ、さっき言ったとおり強制的に設計力が鍛えられた面もあったと思うので、大変だったんですけど、結果的にはよかったかなと思いました。
最後に、当時の弊社と同じような状況で、モノリシックなアプリケーションのフロントエンドを変えていきたいという方がいましたら、お伝えしたいのが次の4つです。
まず、新しいことをするタイミングは改善のチャンスでもあると思いました。きっかけがあれば、それに全力で乗っかるというのはいいタイミングになるかなと思っています。
2つ目はTypeScriptですね。これはメリットだらけだから少しでも入れたほうが本当にいいと思っています。僕も今まではTypeScriptを書いたことがなかったので、最初は「型を書くのが面倒だな」と感じていたんですけど、わりとすぐに「開発を楽にしてくれるものなんだな」という感覚に変わっていきました。コンポーネント開発に慣れていないエンジニアがいれば、なおさら型を明示的に書くことによって、コードを見ただけでどんな使い方なのか共有できる状況になるので、少しでも入れるとすごくよいと思います。
3つ目に「外部のスペシャリストに協力を仰ぐ」って書きました。今回デザインシステムを始めたときにデザイナーが社内にいなくて、外部のすばらしいデザイナーや、技術顧問に協力してもらって前に進めたので、社内にスペシャリストがいなければ、社外に頼むことで進めるかもしれません。
最後は「スコープを切る勇気をもつ」です。やりたいことがすごくたくさんある状況なら、なおさら「ここまではやる」「ここまではやらない」ということを決めることがいい方向に転じるきっかけになるのかなと思っています。
以上で僕の発表を終わりたいと思います。READYFORフロントエンドがいい方向に転がり始めたということで、「黎明」というタイトルで発表しました。
それでは終わります。ご清聴ありがとうございました。
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