Findy/ファむンディのブログ - TECH PLAY

TECH PLAY

Findy/ファむンディ

Findy/ファむンディ の技術ブログ

å…š218ä»¶

こんにちは。 FindyのFreelance開発チヌムの久朚田です。 今回は 自慢の䜜業環境を倧公開 のPart3になりたす。 前回たでの蚘事はこちら ↓ 👉 自慢の䜜業環境を倧公開シリヌズ Part3は関西特集ずいうこずで、倧阪ず京郜からフルリモヌトでJOINしおいる゚ンゞニアたちの䜜業環境を公開したす 䜜業環境を倧公開 久朚田 たずは倧阪から JOIN しおいる久朚田の䜜業環境から玹介しおいきたす。 䜜業環境の党䜓像はこんな感じになっおいたす。 ディスプレむ3台PC2台おいおも広々スペヌス 䌚瀟支絊の MacBook Pro 14むンチ をノヌト甚スタンドに茉せお䜿っおいたす。 ディスプレむはノヌトPCのディスプレむを含めお4枚䜿っおいお、巊からブラりゞング甚・コヌディング甚・Slack甚・Datadog等の監芖ツヌルのダッシュボヌド閲芧甚ずしお䜿っおいたす。 このデスクですが、工務店を営む父芪に頌んで、䞀緒に手䌝い぀぀、倩板の朚材から切り出しお、取り付けおもらったものになりたす。 音声環境呚りですが、自分は Anker PowerConf S3 ずいうスピヌカヌフォンを䜿っおいたす。 スピヌカヌフォンAnker PowerConf S3 マむクも色々詊したしたが、途䞭で耳を塞ぐのが個人的に奜きじゃなかったのに気が぀いおから、このスピヌカヌフォンを愛甚しおいたす。 ミュヌトボタンが Zoom ず Google Meet のミュヌトず連動しおくれおいるのもお気に入りポむントです。 ちなみにカメラは MacBook のカメラの方が、垂販されおいる廉䟡なWebカメラより性胜が良いず思っおいるので、そのたた䜿っおいたす。 キヌボヌドは HHKB Professional2 を䜿っおいお、トラックボヌルは Kensington スリムブレヌドトラックボヌル を䜿っおいたす。 HHKBのUS配列が奜みです ボヌルを暪回転させおするスクロヌルが慣れるず快適 キヌボヌドは倧孊院生の頃からHHKBが奜きで圓時は廉䟡版のHHKB Lite2 for Macでしたが、この画像のキヌボヌドは瀟䌚人になった7幎前くらいからずっず䜿っおいるものです。 トラックボヌルは前職の䞊叞の方からお䞋がりずしおもらっお以来、このKensingtonのスリムブレヌドを䜿っおいお、今䜿っおいるものは2代目になりたす。 トラックボヌルも芪指タむプのものなど色々詊した結果、このデバむスに萜ち着きたした。 広い画面を移動するのに、トラックボヌルはおすすめです。 そしお䜿っおいる怅子もこだわっおいるものの1぀になりたしお、ハヌマンミラヌの ゚ンボディゲヌミングチェア を䜿っおいたす。 背面の青いデザむンも気に入っおいたす 倧阪に ハヌマンミラヌストア心斎橋 があり、そこぞ行っお色々な怅子を詊した結果、この怅子を遞びたした。 背もたれが背骚のカヌブにフィットしおいるので䜓重重めの自分も快適に座れおいたす。 埌ろにデスクトップPCが芋えおいたすが、これは私甚のPCで巊のディスプレむの入力切替をしお䜿っおいたす。 ディスプレむの奥にあるのが自分でパヌツを取り寄せお組み立おたPC 前回や前々回の䜜業環境玹介では私甚ず仕事甚でデバむス共甚しおいる人が倚かったですが、自分はmacずwindowsでOSが違っおいたり、トラックボヌルだずゲヌムがやりづらかったりするので、手元のデバむスも党く別のものを甚意しお䜿っおいたす。 最埌に机の角に食っおいる奜きなものごちゃたぜディスプレむを写しお自分の䜜業環境玹介は終わりたす。 攻殻機動隊・りマ嚘・ガンダム・にじさんじ 金侾 次に京郜から JOIN しおいる金䞞の䜜業環境を玹介したす。 䜜業環境の党䜓はこのようになっおいたす。 ディスプレむずノヌトPCを最小限のスペヌスで蚭眮しおいたす 䌚瀟支絊の MacBook Pro 14むンチ をノヌトPC甚アヌムに茉せお䜿っおいたす。 デスクの幅が120cmのためノヌトPCを宙に浮かせるこずでスペヌスを節玄しおいたす。 デスクには COFOの昇降デスク を利甚し、定期的に立ち䞊がっお䜜業をするようにしおいたす。 倩板の裏がマグネットになっおいるため、マグネットフックで雑に収玍できるずころが気に入っおいたす。 ディスプレむは HP瀟の曲面ディスプレむ を利甚しおいたす。 ディスプレむに蚭眮したラむトで垞に明るい WQHD、USBハブ機胜、USB-C(USB PD) に察応しおいるため、絊電 + USB ケヌブル1本で出来るずころが気に入っおいたす。 りルトラワむドなディスプレむですが曲面になっおいるため違和感なく䜿えおいたす。 スピヌカヌにはクラりドファンディングで賌入した ovo を利甚しおいたす。 マットな金色がデスクに映えたす コンパクトな本䜓でも音割れが少なく、気に入っおいたす。 通話には eMeet Luna を利甚しおいたす。 有線/Bluetooth切替可胜で取り回し◎ 本䜓にノむズキャンセリング機胜が぀いおいるため、タむピング音などが軜枛されるずころが気に入っおいたす。 キヌボヌドは分割キヌボヌドの 7sPro を利甚しおいたす。 レトロっぜいキヌキャップが奜み 「HHKBの配列で分割キヌボヌドを䜿いたい」ずいう芁望を満たしおいるキヌボヌドで、キヌスむッチを倉えながら3幎くらい䜿っおいたす。 ホットスワップに察応しおいるのでキヌスむッチの倉曎が出来るずころもお気に入りポむントです。 珟圚は alpacaスむッチ をセットしお利甚しおいたす。 マりスは MX MASTER 3S を利甚しおいたす。 勢いよく動かしおもカヌ゜ルがブレない点がお気に入りです トラックパッド、トラックボヌルず詊しおみたのですが、結局マりスに戻っおきお以来、このマりスを利甚しおいたす。 最埌に掚しを詰め蟌んだディスプレむを玹介しお、䜜業環境玹介を終わりたす。 カニさん・ガブモン・幜遊癜曞・ズヌトピア 西村 最埌に、京郜からフルリモヌトで Findyの転職サヌビス を開発しおいる西村の䜜業環境を玹介したす。 劻ず同じ郚屋でリモヌトワヌクをしおいるため、机を向かい合わせるように蚭眮しおいたす。奥に芋えるのが劻偎のデスクです。 あたり広くない郚屋なので、䜜業スペヌスもコンパクトです ディスプレむは DELL U2720QM を䜿甚しおいたす。4K 27むンチのディスプレむなので、これ1぀でも十分に䜜業が可胜です。 MacBook Pro 16 をスタンドに茉せお、デュアルディスプレむずしおいたす。MacBook は䞻に Slack 専甚ずしおいたす。 こだわりポむントずしおは、目線を䞋げないためにディスプレむをスタンドの䞊に眮いおいるこずです。 猫背気味で銖や肩に負担を掛けがちなので、それを軜枛できないかなず考えおこのようにしおいたす。 たた、ディスプレむず正察するように座るこずも意識しおいたす。 リモヌトワヌクを始めた初期に、目線を巊右どちらかに寄せ続けお銖や腰の片偎だけが痛くなっおしたった。ずいう苊い経隓から、このような工倫をしおいたす。 ただ、少し目が疲れやすく感じるので、本来であればもう少しディスプレむずの距離を取りたいず考えおいたす。 しかし郚屋の広さの関係で、これ以䞊奥行きのあるデスクを眮くこずができないので、この状態で我慢しおいたす。 キヌボヌドは Keychron K2 を䜿甚しおいたす。 Keychron K2 のキヌボヌドず朚補のパヌムレスト 元々は HHKB を䜿っおみたいなず思っおいたのですが、倀段が高くおなかなか手が出せおいなかったずころに前職時代の先茩に勧められお賌入したした。 比范的安䟡だったので詊しに䜿っおみたずころ、ずおも打ちやすく非垞に気に入っおいたす。かれこれ3幎以䞊経ちたした。 マりスは Apple の Magic Trackpad を䜿っおいたす。マりスに察するこだわりはなく、友人からプレれントしおもらったものをずっず䜿い続けおいたす。 たた、手銖から先の負担を枛らす目的で、 FILCO のパヌムレスト を䜿っおいたす。肌に優しそうずいう理由で朚補のものを遞びたした。 今回はデスクの写真を撮るタむミングだったのでかなりスッキリずしおいたす。Findyでは瀟内茪読䌚も行っおおり、業務時間䞭にもチヌムで同じ曞籍を読み゚ンゞニアのレベルアップを図っおいたす。日垞的には、その茪読䌚甚の曞籍が眮いおあったりすぐに読み返したりできるようにしおいたす。 賌入しお1幎ほど経っおから成長の兆しが芋え始めたお気に入りのサボテン たずめ いかがでしたでしょうか やはり、キヌボヌドにはそれぞれこだわりがありたしたね たた、今回の蚘事を通しお意倖にもスピヌカヌマむクを䜿っおいるのが自分だけではないこずに驚きたした。 自分の環境でも蚘茉したしたが、マむクの物理スむッチはおすすめなので是非詊しおみおください 珟圚、ファむンディでは䞀緒に働くメンバヌを募集䞭です。 興味がある方はこちらから ↓ herp.careers
こんにちは、ファむンディ株匏䌚瀟でフロント゚ンドのリヌドをしおおりたす 新犏( @puku0x )です。 この蚘事では、転職サヌビス Findy の開発チヌムにおける開発生産性の向䞊に察する取り組みをご玹介したす。 以前の状況 モノリスの解䜓 開発基盀の刷新 コンポヌネント蚭蚈の刷新 テストの拡充 CI の高速化 改善の効果 たずめ 以前の状況 2020幎頃の Findy は Ruby on Rails ず React のモノリス構成で䜜られおいたした。 機胜の増加に埓いコヌドが耇雑化し、しだいに開発スピヌドが䌞び悩むようになりたした。 ここで Findy Team+ で算出した圓時のリヌドタむムを芋おみたしょう。 2020幎のFindyのリヌドタむム 䞊蚘のグラフから次のこずがわかりたす。 改修が本番に適甚されるたで 箄1週間 かかる プルリク゚ストがレビュヌされるたで 箄5日 攟眮される プルリク゚ストのレビュヌ完了たでに 箄2日ず半日 かかる 1幎を通しおプルリク゚スト数の平均が2.0を超える日が無かったこずからも苊しい状況であったこずが掚枬できたす。 モノリスの解䜓 前述の通り Findy は Rails モノリスで䜜られおおり、CI にフロント゚ンドずバック゚ンドの䞡方が含たれおいるこずから、画面の文蚀を1぀曎新するだけでも長い CI 埅ちが発生したす。 この状況を打砎するために、Findy で最初に行われた取り組みは「Rails モノリスの解䜓」でした。 箄3ヵ月かけおバック゚ンド偎を Rails の API モヌド、フロント゚ンド偎を Next.js で再実装するずいう倧掛かりなプロゞェクトでしたが、これによりフロント゚ンドずバック゚ンドで独立しお動けるようになったため、先述した CI 埅ちを倧幅に短瞮できたした。 実際の効果は note の蚘事 にお匊瀟 CTO が玹介しおおりたすので、そちらも是非ご䞀読ください。軜埮な改修であれば1日で修正するスピヌドを実珟し、最速でナヌザヌに䟡倀を届ける基盀を䜜ったのがモノリス解䜓の倧きな効果ず蚀えるでしょう。 開発基盀の刷新 2021幎5月、モノリス解䜓埌のフロント゚ンドが晎れおリリヌスされたした。倧きな䞍具合もなく無事に終わったず安心したいずころですが、ただ残っおいる課題を解決しなければなりたせん。 フロント゚ンド偎に残された課題は次の通りです。 バヌゞョンの叀いツヌル・ラむブラリが倚数 コンポヌネントの曞き方が叀い 型Flowはあるがうたく動䜜しおいない テストが曞かれおいない 芋通しの悪いフロント゚ンド蚭蚈 最初に、䟝存ラむブラリのアップデヌトや䜿われなくなったラむブラリを削陀しおいきたした。たた、Dependabot を導入し定期的に曎新する䜓制を敎えたした。 次に Nx を導入し、モダンな開発環境ぞ移行しおいきたした。Nx は前職で利甚した経隓があり、コマンドひず぀で TypeScript + React + Jest + ESLint + Prettier が揃った開発環境を䜜成できるため移行は短期間で枈みたした。ここで導入した Nx は、埌の CI 高速化ぞの垃石ずなりたす。 Findy には開発圓初から React が甚いられおおりたしたが、この時はただコンポヌネントが Class Component で曞かれおありたした。今埌の React ゚コシステムの発展に远埓するべく Function Component ぞの曞き換えも同時に進めたした。 Flow から TypeScript ぞの移行は盎接曞き換えるのが難しかったため、䞀床党おの゜ヌスコヌドから Flow の型アノテヌションを倖しお玔粋な JavaScript にし、その埌 TypeScript で曞き盎したした。移行の早い段階で strict: true で曞くようにしたため、Null チェック挏れによる䞍具合を倧幅に削枛できたず思いたす。 圓時は API レスポンスに察しおも手䜜業で型付けを行っおいたしたが、API の仕様が耇雑であったりドキュメントず同期するのが難しかったこずから、埌に REST API から GraphQL に移行し、 GraphQL Code Generator による型生成が採甚されるようになりたす。 コンポヌネント蚭蚈の刷新 圓時の実装では、コンポヌネントは Container Component / Presentational Component のパタヌンで曞かれおありたした。メンバヌの習熟床やテストのしやすさを考慮し、基本蚭蚈は螏襲し぀぀、䞋蚘に瀺すようなデヌタの流入元に着目した䞉局構造ぞず拡匵したした。 コンポヌネント名 カスタムフック名 扱うデヌタ Page Component Params Hook ブラりザURL Container Component Facade Hook API や ストレヌゞ等 Presentational Component Presenter Hook フォヌム 各局での責務が明確になったこずで実装時の混乱が少なくなったず思いたす。 䜙談ですが本蚭蚈は筆者が Angular コミュニティから埗られた知芋を React アプリケヌションに転甚したものずなりたす。䞍思議な瞁もあるものですね。 *1 テストの拡充 プロゞェクト進行䞭にいく぀かの䞍具合に遭遇するこずがありたしたが、それらのほずんどはテストがあれば防げたものでした。将来的な倉曎に耐えられるよう、テストの拡充は早期に着手したした。幞いバック゚ンド偎では既に「テストを曞くのは圓たり前」ずいう文化が根付いおいたため、フロント゚ンドのテスト導入のハヌドルは高くありたせんでした。 圓時はただメンバヌ党員がフロント゚ンドのテストに慣れおいる蚳ではなかったため、テストのお手本ずなるような実装䟋を増やしおいくこずから始めたした。たず、ナヌティリティ等の入出力の関係が明らかなものからナニットテストを曞き、次にコンポヌネントのスナップショットテスト、それからむンタラクションテストや結合テストずいったように範囲を広げおいきたした。 たた、テストを曞くモチベヌションを向䞊させる工倫ずしお Wallaby.js のような可芖化ツヌルを導入したした。Wallaby.js に぀いおは次の蚘事もご参照ください。 tech.findy.co.jp 今では党員が圓たり前のようにフロント゚ンドのテストを曞くようになりたした。テストによっお守られおいるずいう安心感もさるこずながら、テストを曞くこずが習慣化したこずによっお「テストを曞きやすいように蚭蚈が掗緎される」ずいった副次的な効果が埗られたのも嬉しいずころでした。 CI の高速化 コヌドベヌスが増え、ビルドやテストの実行時間が増えおいくず、CIの埅ち時間も長くなっおいきたす。CI 時間の増加はリヌドタむムの増加に盎結するため、改善は必須でした。 開発基盀を刷新するにあたり、CI 時間の増加は予め想定されおいたため Nx を導入し、 nx affected コマンドによる倉曎怜知によっお必芁なゞョブのみ実行するこずで CI の高速化を図りたした。ゞョブの再実行ずいった倉曎怜知だけでは高速化が難しいものに察しおは Nx Cloud を導入し、リモヌトキャッシュを掻甚した高速化を実斜したした。 結果は次の通りです。CI 時間は平均6分で、キャッシュヒットしない堎合は16〜17分かかるこずもありたすが、早い時は2〜3分で終わるようになりたした。 ゞョブ単䜍の詳现を次の図に瀺したす。 Nx Cloudによる高速化の内蚳 Nx Cloud 導入により300時間以䞊の CI 時間を削枛できたした。ここではフロント゚ンド偎のCI高速化を取り䞊げたしたが、バック゚ンド偎の取り組みも蚘事にされおおりたすので、ご興味のある方は是非ご䞀読ください。 tech.findy.co.jp 改善の効果 それでは、モノリス解䜓をはじめずした様々な取り組みの成果を芋おいきたしょう。次の図は2023幎における転職サヌビスの Findy のフロント゚ンドずバック゚ンドそれぞれのリヌドタむムを蚈枬した結果を瀺しおいたす。 フロント゚ンド バック゚ンド リヌドタむムが100時間を超えおいた状況から倧幅な改善ができたした。特にフロント゚ンドに関しおはマヌゞたでの時間が8時間を切っおいるこずから、高速な開発を実践できおいるず蚀えたす。 フロント゚ンドのアクティビティの倉化に぀いおも芋おいきたしょう。モノリス解䜓が実斜された2021幎ず比范するず、近幎のアクティビティ量は著しく増加しおいたす。 2021幎 2023幎 もちろんこれはメンバヌの増加が䞻な芁因ずしお考えられたすが採甚チヌムの皆さんい぀もありがずうございたす、それだけでなく、䞀人あたりのアクティビティが増えた=䞀人あたりのパフォヌマンスが向䞊したこずも結果に貢献しおいるず思いたす。 2021幎1人あたり 2023幎1人あたり 2021幎圓時の倍のアクティビティを瀺しおいるので、単玔蚈算で開発生産性も倍になっおいるず蚀えたすね頑匵った甲斐がありたした 💪 たずめ ファむンディでは「モノリスの解䜓」「開発基盀の刷新」「CI の高速化」を実斜し、開発生産性を向䞊させるこずに成功したした。 数幎前たではファむンディも開発スピヌドに䌞び悩んでいたず知っお驚いた方も倚いかもしれたせん。ここ数幎で倧きく成長できたのは瀟内の優秀なメンバヌの協力あっおのものだず感謝しおいたす。 ここたでご芧いただいた方は、 ファむンディはそこたで特別なこずをやっおいる蚳ではない ずお気付きになられたかず思いたす。 1぀1぀の積み重ねが今の私達の開発を支えおいたす。 日々の改善を倧事にしおいきたしょう。 ファむンディは積極的に゚ンゞニアを採甚しおいたす。CI/CD を始め、Four Keys、開発生産性、技術トレンド、転職垂堎など興味のある方は、お気軜にカゞュアル面談を受けおみおください。 ファむンディの採甚情報はこちら ↓ herp.careers *1 : https://dev.to/puku0x/angular-react-2h4j
こんにちは、あるいはこんばんは。 @gessy0129 です。 ファむンディは昚幎に続き RubyKaigi 2024 でPlatinum Sponsorsずしお協賛したす。RubyKaigi 2018からここたで継続しお協賛できおいるのは、様々な埡瞁のおかげだず感じおいたす。Rubyコミュニティおよびファむンディを応揎しおくださる方には感謝の気持ちでいっぱいです。 Platinum Sponsorsずしお実斜するこず 今幎のファむンディは、ブヌス出展ずDrinkupを2件実斜させお頂く予定です。 Drinkupはconnpass䞊にオヌプンさせお頂いおいたす。 findy.connpass.com findy.connpass.com ほがほが埋たっおしたいたしたが、ぜひご参加頂けるず嬉しいです ブヌスには、Findy Team+の開発リヌダヌである @ham0215 をはじめ、 @yuichiro826 、CTOの @ma3tk やVPoEの @kxmxyx が参加したす。僕もいる予定ですので、ぜひ遊びに来おください ブヌスはこちらです ブヌス内容の党貌に぀いおは、珟圚、最終の内容をFixさせるための䜜業を実斜䞭です。ご期埅頂ければ幞いです 䞀郚、公開させお頂きたすず、Ruby Code Quizずいうクむズを甚意しおおりたす。開催期間䞭は内容が毎日倉わるので、ぜひ毎日挑戊しにきおください 前幎からの振り返り 昚幎のRubyKaigiから早䞀幎が経過したした。この間のファむンディの倉化を、䞀幎前ず比范しながらご玹介したす。䞻にRubyに関係するこずをメむンにピックアップさせお頂きたした。 プロダクト開発状況倉化 Findy Team+ を䜿っお、匊瀟がRubyで開発しおいる䞻芁バック゚ンドリポゞトリの確認をしたした。 2023幎4月ず2024幎4月の察比です。 盎感的に分かりやすく増加しおたすよね グラフだけだず分かりにくいかもしれないので、具䜓的な数字で衚珟させお頂きたす。 コミット数 1.49 倍 PR数 1.56 倍 コミット人数 1.34 倍 オヌプンからマヌゞたでの平均時間 13 削枛 人数が増えるず開発時間が長くなったり指暙が悪化するこずもあるのかなず思いながら芋おいたら䞻芁スタッツが軒䞊み向䞊しおいお正盎蚀っお驚きたした。 普段はこういうグルヌピングで芋るこずがないのでなかなかに新鮮な図です。 Ruby biz Grand prix 2023 ゜ヌシャルむンパクト受賞 rubybiz.jp RubyKaigi 2023の参加をきっかけにRuby bizにも応募させお頂きたしお、゜ヌシャルむンパクト賞を受賞するこずが出来たした。本圓にありがずうございたす。 今回のRubyKaigiにも参加予定の @ham0215 からのRubyに関する熱いコメントもあり、これから先、Rubyぞの貢献をより䞀局匷めおいきたいず考える事が出来たした。 この床は゜ヌシャルむンパクト賞をいただくこずができ、誠に光栄に思いたす。゚ンゞニア組織の開発パフォヌマンス向䞊を支揎するSaaS「Findy Team+」が、日本発の「Ruby biz Grand prix 2023」で受賞をできたしたこず、倧倉喜ばしい限りです。圓瀟では、今回受賞した「Findy Team+」だけではなく、倚くのプロダクトでRubyが䜿われおおり、Rubyコミュニティや「Ruby on Rails」をはじめずした倚くのラむブラリなどのおかげでナヌザヌぞ爆速で䟡倀を届けるこずができおおりたす。今埌も「Ruby」ぞの恩返しの意味も蟌めお、Rubyを掻甚したサヌビス開発や゚ンゞニア向けのむベントや事䟋蚘事の公開などを行い、Rubyコミュニティの発展に寄䞎しおたいりたす。 ( エンジニア組織支援SaaS「Findy Team+」が「Ruby biz Grand prix 2023」でソーシャルインパクト賞を受賞 | ファインディ株式会社のプレスリリース の受賞コメントから匕甚) Rubyを䜿甚した新しいプロダクトFindy Toolsがリリヌス Findy Tools は数ヶ月でプロダクトリリヌスができ、珟圚も着実に成長䞭のサヌビスです。プロダクトずしおは未成熟な郚分もありたすので、皆様からのフィヌドバックも数倚くお聞きしながらプロダクトに反映しおいきたいず考えおいたす。ブヌスなどでぜひお聞かせ頂ければ幞いです Findy Toolsに関する具䜓的な内容はテックブログに蚘茉をさせお頂いたのでそちらもぜひご参照ください tech.findy.co.jp いかがでしたかファむンディのこの䞀幎の歩みをダむゞェストでお届けしたした。 ファむンディ瀟は匕き続きRubyずずもに成長しおいければず考えおおりたす。 そしお、䞀緒に働くメンバヌを絶賛募集䞭です。 興味がある方はこちらから ↓ herp.careers おたけ ファむンディは4月29日にオフィス移転をしたした移転埌のオフィスの䌚議宀にもRubyがありたすRubyでファむンディ株匏䌚瀟が倧きくなったこずもあり、䌚議宀サむズは比范的倧きめです
こんにちは、2024/3/18 からファむンディに入瀟した本田です。 ファむンディでは、Findy Team+ ずいう、゚ンゞニア組織の開発生産性を可芖化し、開発チヌムや゚ンゞニアリングメンバヌのパフォヌマンスを最倧化するためのサヌビスの開発に携わっおいたす。 今回は、入瀟しお䞀ヶ月ちょっずが経ったので、入瀟しお新メンバヌずしおいいなず思ったこずをご玹介したいず思いたす。 オンボヌディングがわかりやすい 入瀟するず初めにオンボヌディング甚 Issue が䜜成、アサむンされおいお、い぀たでにどういうこずができるようになっおいるために䜕をしおくのか、ずいうのが䞀通りたずたっおいお、すごいわかりやすかったです。 オンボヌディング甚 Issue には、次のようなこずが蚘茉されおいたす。 新メンバヌがキャッチアップすべき事項の䞀芧 環境構築手順や必芁なツヌルのセットアップ手順、蚭定項目など コヌディング芏玄やその元ずなる思想 携わる各リポゞトリの圹割や、各アプリケヌションのアヌキテクチャ 各皮定期ミヌティングの䞀芧やその内容 い぀頃たでにどういう業務ができるようになっおいるかの期埅の目安 メンバヌの経隓、スキル、やっおいきたいこずなどを鑑みおマネヌゞャヌず個別にすり合わせもしおいる こんな感じにオンボヌディングのゎヌルず期間が定矩されおいお、 この埌にこれらのゎヌルに向けお知るべきこずやそのための資料が蚘茉されおいる感じです。 初日からこの Issue を芋぀぀メンタヌの方ず密にコミュニケヌションを取りながら環境構築や携わるプロダクトの理解をスピヌド感持っおキャッチアップできたした。 個別に知るべきこずを逐次教えおもらうのではなく、党䜓ずしお䜕を知っおどういう状態になるべきかがわかるず、必芁に応じお胜動的に情報をキャッチアップする動きもでき、非垞にやりやすく感じたした。 good first issue からコヌドで貢献できる 急ぎでない簡易か぀新しく参画した人向けの Issue を good first issue ずいうラベルを付けお管理しおいお、新メンバヌはたず good first issue から着手しお、開発の流れや携わるプロダクトのコヌドベヌスを理解、習埗しおいきたす。私もこの流れで開発を始めたした。 各 good first issue の Description は新メンバヌでも理解できるようちゃんず曞かれおいお、前述のオンボヌディング Issue で玹介されおいるドキュメントも読み぀぀理解しながら Issue を察応しおいきたす。 実際私も他のオンボヌディングプログラムを受け぀぀3週間ほど good first issue を察応しおいきたしたが、15営業日で 34 PR を出しおコヌドで貢献できたした。 他のオンボヌディングプログラムもあっお波はありたすが平均しお3PR/日くらいできおいたす もちろんオンボヌディング期間はしっかりむンプットするこずが倧切ではありたすが、それもやり぀぀入瀟しおすぐに䜕かしら貢献できるこずは自信にも繋がりたしたし、いいバランスでむンプットずアりトプットを䞡立できたした。 レビュヌがすごく速い めちゃくちゃ速いです。 PR のレビュアヌをアサむンしおだいたい 10 分以内、遅くおも 1-2時間以内にレビュヌされたす。 もちろんレビュアヌの方の状況にもよりたすが、䜓感7-8割くらいの PR は 10 分くらいでレビュヌされる印象です。 レビュアヌ䞀人圓たり4ä»¶/日、平均しおも1h以内にレビュヌされおたす これにはいく぀かの芁因がありたすが、䞀番倧きいのはバッチサむズを小さくしおリヌドタむムを短くするこずで手戻りやコンフリクトを防ぐ、ずいうこずが文化ずしお根付いおいるこずが倧きいず感じおいたす。 そのために、 PR の粒床を極力小さくする レビュアヌは極力優先しおレビュヌする ずいったこずが培底されおいたす。 なお、ここらぞんの話は先日開催された Qiita Conference での匊瀟CTO䜐藀の発衚で詳しく觊れおいたすので、ご興味ある方はぜひご䞀読ください。 speakerdeck.com たずめ 他にもご玹介したいこずはたくさんありたすが、今回は特に新メンバヌにずっおの開発者䜓隓に぀いお3぀ピックアップしお玹介させおいただきたした。 入瀟しお1ヶ月経過しおの感想ずしおは、ファむンディは開発スピヌドを倧切にする組織文化が根付いおいるなず思いたした。 より良いプロダクトを䜜っおより倚くのナヌザヌに良いプロダクトを提䟛するためにも、開発スピヌドはその源泉になるものだず思っおいたす。 それを゚ンゞニアずしお各々が理解しお䜓珟しおいる組織なので、私にずっお新しい挑戊ができる環境だず感じおいたす。 このスピヌド感を自分も䜓珟し、プロダクトの成長ず自分の成長を重ねながら良いプロダクトを䜜っおいきたいです。 ファむンディでは䞀緒に働くメンバヌを絶賛募集䞭です。 興味がある方はこちらから ↓ herp.careers
こんにちは。 FindyのTeam+を開発しおいる西村( sontixyou )です。 【゚ンゞニアの日垞】゚ンゞニア達の自慢の䜜業環境を倧公開 Part1 ず題しお、公開したブログが奜評でした。 それに続いお、匊瀟゚ンゞニア達の䜜業環境を芋おいきたしょう 䜜業環境を倧公開 西村 私は、珟圚週3日ほど出瀟ず残りはリモヌトワヌクしおいたす。そんな私の䜜業環境をご玹介したす。 デスクの党䜓像はこのような感じです。 デスクは新卒時代の先茩からおさがりです。幅120cmのものを䜿甚しおいたす。 ディスプレむはDELLの27むンチ 4Kモニタを2枚䜿っおいたす。1枚だけ瞊眮きにしおいる理由は、省スペヌス化ず銖の振り向きが倧倉だからです。 暪眮きのディスプレむでは、゚ディタずSlack専甚になっおいたす。 瞊眮きのディスプレむでは、ブラりザ専甚になっおいたす。りィンドりを垂盎に2枚眮いお掻甚しおいたす。 ディスプレむぱルゎトロンのアヌムで支えおいたす。ディスプレむの瞊眮きを実珟するために欠かせないアむテムです。たた、ディスプレむの台座があるず堎所を取るためです。 Webカメラは10幎前に買ったlogicoolのものを䜿甚しおいたす。マむクが内蔵されおいるため、倖付けマむクは甚意しおいたせん。そろそろ買い替えしたいので、乗り換え先を探し䞭です。 USBハブには、 サンワサプラむのUSBハブ を䜿甚しおいたす。このハブは、HDMI(4k/60Hz察応)1本ずUSB3.0 2本ずUSB Type-Cの充電ケヌブルを指すこずができたす。 キヌボヌドは keychronのK6 Pro を䜿甚しおいたす。 キヌスむッチは Keychron Silent K Pro Switch を䜿っおいたす。打鍵感がずおも良いため、自宅甚ずオフィス甚で2台賌入しおしたいたした。 マりスは、 logicool ERGO M575S を䜿甚しおいたす。 手銖を動かさせずに、カヌ゜ル移動ができたす。そのため、手銖の疲れは党然ありたせん。たた、ボヌルを取り倖すこずができるため、マりス内郚の枅掃やボヌル亀換が楜々です。 自分が奜きなものをデスクに眮くこずで、仕事終わりたでモチベヌションをキヌプし぀぀仕事ができたす。 たずは、フィギュアです。私は 海掋堂 制䜜のフィギュアが奜きなため、ガチャポンで圓おた怪獣ネロンガず恐竜を眮いおいたす。瞊に長いものはミむラ展で圓おた猫のミむラを題材にしたフィギュアです。 デスク暪には、PS5を眮いおいたす。仕事終わった瞬間に、ゲヌムプレむできるためずおも快適です。 仕事を快適か぀集䞭できる堎所になるように意識しお、デスク環境を敎えおいたす。 浜田 次は浜田( ham )の䜜業環境を玹介したす。 コロナ犍のずきにリモヌトワヌクを始め、コツコツリモヌト環境を敎えたした。 私のポリシヌは「日々䜿うものは良いものを」なので、予算の蚱す範囲で劥協せずに自分が良いず感じるものを遞ぶようにしおいたす。 ディスプレむは2枚ないず開発効率がガタ萜ちするタむプの゚ンゞニアなのでデュアルディスプレむです。 右偎は4Kで31.5むンチ、巊偎は27むンチです。 4Kディスプレむは、ブラりザやZoomやGoogle Meetなどを衚瀺しおいたす。 27むンチディスプレむは、Slackやメヌル、゚ディタヌなど文章を扱うツヌルを衚瀺しおいたす。 4Kディスプレむはメヌカヌなどにこだわりはないのですが、USB Type-Cで出力ずPC本䜓ぞの絊電ができるものを遞びたした。ケヌブルが少ないのは正矩 たた、こちらのディスプレむは足が倧きかったのでモニタヌアヌムを䜿っおいたす。 デスクスペヌスを拡げるためにモニタヌアヌムを買ったのですが、モニタヌの角床を簡単に倉えられるため、モニタヌの背面の配線を倉えたり、モニタヌ呚りの掃陀もしやすくなり地味にストレスだったこずも解消されたした。 27むンチディスプレむは解像床などのスペックは劣りたすが、文章を曞く堎合に4K解像床だず文字が小さくお䜿いづらいので、必芁十分なスペックだず感じおいたす。 リモヌトワヌクにおいおオンラむン䌚議は生呜線です。こちらの画質や音質が悪い堎合は盞手にストレスを䞎えおしたう可胜性がありたす。 そのため、 Webカメラ / マむク は良いものを遞ぶように心がけたした。 たた、自宀では前からの光が圓たらず、顔が暗く芋えおいたためラむトも買いたした。芋た目の印象も倧事です。 怅子は Ergohuman PRO2 Ottoman を䜿甚しおいたす。足を䌞ばせるようにオットマンが぀いおいるものにしたしたが、党然䜿わないので䞍芁でしたw なお、足眮きず䞀緒に䜿うこずで怅子の高さ調敎がやりやすくなるので、足眮きずセットで䜿うこずがお勧めです。 冒頭に曞いた「日々䜿うものは良いものを」のキヌボヌドから始たりたした。 REALFORCE から始たり、HHKB Professional(手元にないので写真なし)、 HHKB Professional Hybrid Type-S 、そしお今は HHKB Studio を䜿っおいたす。 たた、分割キヌボヌドを䜿っおいたこずもありたした。 Corne Cherry V3 はキヌが少ない代わりにレむアヌを掻甚するのですが、䜿いこなせず挫折したした・・・ HHKBラむクな 7sPro は、気に入っおいたのですがキヌの反応が鈍いこずが倚々ありストレスを感じたのでHHKBに戻りたした。 髙橋 週に2日皋床リモヌトしおいる髙橋 @nokv です。 オフィス勀務が䞻䜓のため自宅はシンプルな環境にしおいたす。 デスクの党䜓像はこんな感じです。 200cm皋床の倧きいデスクを劻ず半分ず぀䜿っおいたす。 劻はリモヌトワヌクが倚いため、MTGが被った際はどちらかが移動しないずいけないなど䞍䟿なこずもありたすが、䜜業の合間に䌚話がしやすくリフレッシュできるので1぀のデスクにしお良かったず感じおいたす。 自分の䜜業環境はMacBook Proず倖郚ディスプレむを瞊䞊びに配眮したシンプルなデュアルディスプレむ構成で䜜業しおいたす。 以前はもう1枚ディスプレむがあり暪に配眮しおいたしたが、銖や目に負荷がかかるず感じたため珟圚の構成にしたした。 倖郚ディスプレむは DELLの27むンチの4Kモニタ を䜿っおいお、PCぞの絊電もケヌブル1぀で可胜な点がお気に入りです。 ゚ディタやGitHubなど閲芧頻床の高いものは倖郚ディスプレむに衚瀺し、銖ぞの負荷を軜枛するため芖点がなるべく䞋がらないようにしおいたす。 キヌボヌドはNuPhyの Halo75 で、スむッチはNight Breezeを䜿っおいたす。打鍵感ず静音性のバランスが良く、長時間䜿甚しおも疲れにくいのが気に入っおいたす。 MacBook Pro本来の配眮に慣れおいるため、マりスやトラックパッドを別で甚意するこずはなくいわゆる尊垫スタむルにしおいたす。 怅子はHerman Millerの セむルチェア を䜿っおいたす。怅子の遞択は䜓の負荷に盎結するので機胜性の高さを重芖したした。それに加えお普段はhamさんず同じように足眮きを䜿っおいたす。 性栌的にものが倚いず萜ち着かないので、必芁最䜎限のものだけを配眮しお䜜業に集䞭できるような環境を䜜っおいたす。 たずめ いかがでしたでしょうか 珟圚、ファむンディでは䞀緒に働くメンバヌを募集䞭です。 興味がある方はこちらから ↓ herp.careers
こんにちは。 Findy Freelance の開発チヌムで゚ンゞニアをしおいる 2bo です。 この蚘事では私が開発生産性を䞊げるために開発をする前に考えおいるこずに぀いお曞きたす。 ここで「開発をする前」ずいうのは次のようなタむミングを指したす。 PdMなどから新芏斜策の仕様に぀いお盞談を受けたずき 起祚された開発Issueを最初に確認するずき 自分がIssueを䜜成するずき なぜこのタむミングで考えるかずいうず、開発を進める䞊での方向性を間違える可胜性を枛らし埌から軌道修正をしやすくするためです。 なおこの蚘事においおは、開発生産性を「開発成果物の提䟛䟡倀を投入リ゜ヌスで割ったもの」ずしたす。 いくら頑匵っお開発をしおも、そもそもやるべきこずの方向性を倧きく間違えるず提䟛䟡倀が0に近づくため開発生産性が䜎䞋したす。 特に開発が高速なチヌムで方向性を誀るず高速に間違った方向ぞ進んでしたうこずになりたす。 そのような事態を避け、提䟛䟡倀を少しでも䞊げるために考えおいるこずを蚘したす。 なぜ、い぀、だれが぀かうか 開発する必芁があるかしなくお枈む方法はないか シンプルにできないか リリヌスを分割できないか 実䟋の玹介 プロゞェクトの抂芁 請求フロヌの理解 蚭蚈の芋盎しによるシンプル化 スコヌプの決定ずリリヌスの分割 終わりに なぜ、い぀、だれが぀かうか 倧前提にはなるのですが、たずは以䞋を考えたす。 なぜなぜその機胜が必芁なのかナヌザヌはなぜこの機胜を぀かうのか い぀い぀その機胜を䜿うのかそのずきナヌザヌはどういう状況にいるのか だれどういう属性のナヌザヌかナヌザヌが瀟内にいる堎合、どの郚眲/圹割の人か これらの情報はありがたいこずに PdM から普段提䟛しおもらえおいたす。しかしながら自分でも考えるようにしおいたす。 ゚ンゞニアの芖点からも考えるこずで、それを実珟するための別の圢の機胜やアプロヌチが良いのではないかず提案できるこずがありたす。 たずえ提案が採甚されなかったずしおも珟行案の劥圓性を確認できるため、方向性を間違える可胜性を枛らすこずができるず考えおいたす。 開発する必芁があるかしなくお枈む方法はないか 提䟛䟡倀を極力倉えないたた、投入リ゜ヌスを枛らせるアプロヌチがないか次のこずを考えたす。 既に同じ機胜が存圚するか、たたは党く同じではないものの実質的に同じ提䟛䟡倀を持぀機胜があるか 既存の機胜を利甚、たたは組み合わせお実珟できるか 倖郚サヌビスやラむブラリを぀かうこずで実珟できるか 䟋えば、画面Aで情報の衚瀺远加を芁望された際、その情報をすでに衚瀺しおいる画面Bがあるため、画面Aぞの盎接远加ではなく、画面Bぞのリンクを蚭けるだけで十分ずいうケヌスがあったりしたす。 このように芁望機胜そのたたでなくおも必芁十分をみたせば問題ないずいうケヌスでは、開発リ゜ヌスを枛らせるこずがありたす。 シンプルにできないか 機胜が耇雑になるずその埌のメンテナンスや改修の工数が増加したり、䜜り盎しが発生したりしおトヌタルで芋るず生産性が萜ちるずいうこずが起きがちです。 そのため次のこずを考えたす。 耇数の関連性のない異なる目的を担う機胜になっおいないか その堎凌ぎでワヌクフロヌや凊理の分岐を増やすこずになっおいないか、たたはそれらを極力枛らしお開発できないか 過床に自動化、抜象化するこずでなにをしおいるかわからなくなったり、むレギュラヌケヌスに察応しづらくなっおいないか 私は過去にシンプルさよりもリヌドタむムを優先しお機胜远加をしたこずがありたす。その時は本来異なる目的をも぀既存機胜に付け足す圢で機胜远加をしたした。 最初のリリヌスたでのリヌドタむムは短瞮できたしたが、凊理の分岐ずデヌタのパタヌンが増えおメンテナンスずデヌタ集蚈がしづらくなり、結局は䞀から䜜り盎すこずになりたした。 トヌタルで考えるず最初からシンプルに別の機胜ずしお蚭蚈/開発をしたほうがよかったず考えおいたす。その反省も螏たえおの内容になりたす。 ただし、特にベンチャヌ䌁業においおはどうしおもリリヌスたでのリヌドタむムを短くしなければならない状況もあるず思いたす。 そのため完党に吊定できるこずでもないですが、単にそのほうが楜だからずいう理由ではやらない方がよいず考えおいたす。 リリヌスを分割できないか ナヌザヌぞの䟡倀提䟛を考えお立案された斜策や機胜が、本圓に有効かどうかは実際に提䟛しおみないずわかりたせん。 たた、倧きな斜策の堎合は必須なものず必須ではないがあれば嬉しいずいうものが混圚しがちだず考えおいたす。 それらすべおの内容を぀くっおからリリヌスする堎合、期埅通りの結果が埗られなかったずきに投入した開発リ゜ヌスを無駄にしおしたう可胜性がありたす。 これを避けるため、今回の開発で䞀番実珟したいこずはなにかを考えお、もっずも重芁なものから段階的にリリヌスするこずを考えたす。 いわゆるMVP(Minimum Viable Product)を開発ごずに考えるようなむメヌゞです。 次のメリットがあるず考えおいたす。 ナヌザヌに玠早く䟡倀提䟛ができる 効果やナヌザヌのフィヌドバックを早く埗られる 結果が玠早く埗られるため、軌道修正や撀退の刀断が早期にできる リリヌスあたり開発ボリュヌムを枛らせるため芋積もりのブレを枛らせる ゚ンゞニアのモチベヌションの芳点からも、早期にリリヌスするこずで開発者のモチベヌション向䞊に぀ながりやすく、すべお䜜り蟌んで無駄になった堎合のモチベヌション䜎䞋も回避しやすいず考えおいたす。 実䟋の玹介 ここからはこれたで玹介した考え方を実際に掻かした「請求フロヌのシステム化」プロゞェクトの事䟋を玹介したす。 プロゞェクトの抂芁 Findy Freelanceではナヌザヌの皌働埌サポヌトずしお請求曞の䜜成代行ず業務委蚗報酬の代理城収を行っおいたす。 そのため、ナヌザヌ個々の皌働状況を確認し、内容に応じお請求曞を䜜成しお䌁業に送信する必芁がありたす。 これらの䜜業の倚くは手䜜業で行われおいたした。サヌビス利甚者の拡倧に䌎い運甚の限界が芋えたため、請求フロヌをシステム化するプロゞェクトが立ち䞊がりたした。 請求フロヌの理解 私は開発リヌダヌずしおプロゞェクトを途䞭から匕き継ぎたした。その時点で請求業務のドメむン知識がほずんどありたせんでした。そのためPdMにヒアリングしながら請求フロヌの図を䜜成し、どの圹割の人がどのタむミングで䜕をするのかを把握したした。぀たり「なぜ、い぀、だれが」の芳点を確認したした。 情報を敎理するこずで゚ンゞニアナヌザヌ、䌁業担圓者、瀟内の営業担圓者および経理など倚くのステヌクホルダヌが関䞎しおいるずわかりたした。以埌の開発で各々の芖点を意識でき、先を芋据えながら起案時よりもさらに䟡倀のある仕様に繋げるこずができたした。 蚭蚈の芋盎しによるシンプル化 次に、蚭蚈の芋盎しを行いたした。プロゞェクト匕き継ぎ前は、手䜜業で管理されおいた情報をそのたたデヌタベヌスに移す圢で蚭蚈が進んでいたした。 䟋ずしお、Findy Freelanceの契玄スキヌム䞊「䌁業ずファむンディ間の契玄条件」ず「ナヌザヌず䌁業間の契玄条件」の2皮類の契玄情報が必芁です。 圓初はこれらを1぀のテヌブルで管理する蚭蚈でしたが、本来は別の情報であり、それぞれの契玄倉曎のタむミングも異なるため、別のテヌブルで管理するこずにしたした。 これによりテヌブルずモデルクラスの圹割が明確になり、シンプルになりたした。 たた、2皮類の契玄情報がそれぞれい぀倉曎されたのかも管理できるようになりたした。 蚭蚈の芋盎しには時間がかかりたしたが、その埌の改修や運甚コストを考慮するず、芋盎しお良かったず考えおいたす。 スコヌプの決定ずリリヌスの分割 プロゞェクト匕き継ぎ時、システム化に必須な機胜ず䟿利な機胜がIssueに混圚しおいたした。 せっかくシステム化するならず倚くの芁望が積み䞊がっおいたしたが、スコヌプが䞍明確でした。 そのため、PdMを䞭心に関係者ず協議しおスコヌプを決めたした。 早期の運甚開始を目指し、必須機胜のみを最初にリリヌスしたした。䟋えば、次の機胜は最初のリリヌスから陀倖したした。 瀟内管理画面の利䟿性向䞊 ダッシュボヌドの䜜成初回リリヌスではBigQueryからのデヌタ参照で代替 ナヌザヌがログむンペヌゞから報告した皌働時間の確認報告時にナヌザヌぞメヌル送信しおいるため これらの機胜は実運甚埌に必芁性を再怜蚎するこずにしたした。スコヌプを決定し、リリヌスを分けるこずで運甚開始たでのリヌドタむムを短瞮したした。 たた、実運甚をしたこずで発芚した必芁ずなる機胜や改修があり、最初からすべお䜜りこたなくおよかったず考えおいたす。 終わりに 以䞊が開発をする前に私が考えおいるこずずその実䟋です。誰かの参考になれば幞いです。 ここに曞いおあるようなこずは普段から考えおいるずいう方も倚いのではず思いたす。 読んでくださった方々が開発に際しお考えおいるこずなど是非コメントをいただけるず嬉しいです。 たた、ファむンディでぱンゞニア領域のプロダクトの開発をするため、開発゚ンゞニアが提䟛䟡倀を考えるにあたり自然ずナヌザヌの芖点にたっお考えるこずがしやすい環境であるず感じおいたす。 ゚ンゞニアぞの䟡倀提䟛に少しでも興味を持っおいただけた方は、ぜひカゞュアル面談のお申し蟌みをお埅ちしおおりたす。 ファむンディの採甚情報はこちら↓ herp.careers たた、ファむンディの開発メンバヌが登壇するむベントを4/24氎12:00~13:00で実斜したす 開発生産性や開発のパフォヌマンス向䞊にご興味ある方はconnpassペヌゞより是非お申し蟌みください developer-productivity-engineering.connpass.com
こんにちは。 Findy で Tech Lead をやらせおもらっおる戞田です。 先日、匊瀟から Findy Tools がリリヌスされたした。 今回は、そのFindy Toolsがどのようにしお開発されたのか、開発の背景や工倫点などを玹介しおいきたす。 それでは芋おいきたしょう Findy Toolsの抂芁 玹介 Findy Tools は開発ツヌルに特化したレビュヌサむトです。第䞉者の芖点で実際にツヌルの遞定をした䌁業の生の声を集めるこずで、ツヌル遞定に関する䞍安を解消し、導入怜蚎に必芁な情報を提䟛したす。 「Findy Tools」を開発ツヌルの導入怜蚎をしおいるナヌザヌが利甚するず、実際にツヌル遞定をした倧手䌁業やメガベンチャヌ䌁業の技術責任者や゚ンゞニアによるレビュヌを集めるこずができ、導入怜蚎がスムヌズになりたす。 たた、開発ツヌルを掲茉するベンダヌには、実際の利甚䌁業の声を掻かしたコミュニティマヌケティングによる新芏顧客の獲埗や、認知向䞊をご期埅いただけたす。 システム構成 システム構成は次の通りになっおいたす。 Ruby on Rails React Next.js App Router bulma GraphQL AWS S3 CloudFront Aurora Fargate 䞊で挙げた構成に特に匷いこだわりはなく、既存資産の流甚をしやすかったこずず、リプレむスや倉曎しやすいずいう理由でこの構成になっおいたす。 APIずフロント゚ンドを疎結合で蚭蚈し、どちらか䞀方を䜜り盎しやすくしたり、GraphQLを甚いるこずでqueryそのものを倉曎するこずなく、呌び出し先の゚ンドポむントを切り替えるこずでアプリケヌションの振る舞いを倉えずにAPIを切り替えるこずができるような構成にしおいたす。 開発 スケゞュヌルずリ゜ヌス 今回の開発はα版、β版ず2回に分けお段階的にリリヌスしたした。 α版は2023幎9月から2023幎10月で開発し2023幎11月䞊旬にリリヌス、β版は2023幎11月から2024幎1月たで開発し、2024幎1月䞋旬くらいにリリヌスしおいたす。 開発リ゜ヌスはα版は1人、β版は2024幎に入ったあたりから2人で、それに加えおむンフラ担圓1人で開発をしたした。 基本的にβ版リリヌスたではアプリケヌション偎の1人で開発しおいたした。 新芏サヌビスが圓たるかどうかは実際に䞖に出しおみないずわからないので、「最小限のリ゜ヌスで最速でリリヌスする」ずいう方針でした。 開発のポむント 既存資産を掻甚 最小限のリ゜ヌスで、最速でリリヌスするずいう方針だったので、たず「党おを1から䜜る」ずいう遞択肢は可胜な限り避けたした。 幞い匊瀟には既に運甚されおるシステムがあり、そこからの流甚を決めたした。 具䜓的には次の内容を流甚したした。 アプリケヌションの実行基盀たわりの共通コヌド フレヌムワヌクの各皮蚭定ファむルや蚭蚈思想 デプロむやCIのワヌクフロヌのコヌド 共通コヌドや各皮蚭定ファむル、蚭蚈思想は既存の各サヌビスでほずんどが統䞀されおおり、コピペしお少しいじったらすぐに䜿えるような状況に敎備されおいたす。 たたデプロむやCIたわりは党おGitHub Actionsに統䞀されおおり、こちらもワヌクフロヌのファむルをコピペしお少しいじるだけですぐに䜿えるようになっおいたす。 これらの既存資産を流甚するこずで、コヌドを曞き、テストで守り、動䜜環境にデプロむし、最䜎限動くものを確認できる環境をすぐにセットアップできたした。 れロからモノを䜜るうえで動くものを甚意するこずは非垞に重芁です。動くものをメンバヌず共有しお確認するこずで、認識の霟霬を防ぎ、䜙蚈な修正䜜業を枛らすこずが出来たす。 デヌタ投入を簡略化 デヌタ投入は開発の䞭でも時間を取られる䜜業の1぀です。 レビュワヌの方から頂いたレビュヌデヌタや、各皮マスタヌデヌタをデヌタベヌスに投入する必芁がありたす。 α版の時点ではデヌタ投入を簡略化するために、党おのデヌタをseedで投入するこずにしたした。 本来であればデヌタ投入甚の管理画面を䜜るのがベストなのですが、α版のリリヌス前に1人で開発しおる状況で管理画面を䜜るようなリ゜ヌスはありたせんでした。 機胜の取捚遞択 初期リリヌスの目的は倚くのナヌザヌを獲埗するこずではなく、「サヌビスが受け入れられるかどうかを可胜な限り早い段階で刀断する」こずにありたす。 そのため、「サヌビスが受け入れられるかどうかの刀断に必芁のない機胜」を初期リリヌスのスコヌプから倖したした。 具䜓䟋を挙げるず、β版リリヌスたでは画像アップロヌドの機胜を倖したした。 レビュヌデヌタやアバタヌ画像などをアップロヌド出来るようにしたかったのですが、画像アップロヌドを実珟しようずするず、色々ず考えないずいけないこずがありたす。 画像のアップロヌド先はどうするのか削陀は蚱可するのか画像サむズはどこたで蚱すのかなどなど色々出おきたす。 今回は画像のアップロヌドを蚱可せず、運営チヌムが甚意した画像をS3に盎接アップロヌドしお、そこぞのパスをseedに盎接曞くこずで画像ファむルの管理を単玔、簡略化したした。 この機胜を簡略化するだけだず良くお1,2日皋床の開発工数削枛に留たるず思いたす。しかし、このような取捚遞択をいく぀かするこずによっお、結果的に半月や1ヶ月皋床の工数削枛に繋がりたした。 この機胜を削枛しお倧量に工数削枛、ずいったものではなく、ミニマムな削枛の意思決定を倧量に行うこずによっお実珟しおいるのです。 テストコヌド 色々な取捚遞択の意思決定の䞭で、テストコヌドだけは切らずに必ず甚意しおいたした。 「時間が無いからテストを曞かないのではなく、テストを曞かないから時間が無い」ずいうのは事実で、結果的にテストが守っおくれおいるおかげで、䜙蚈なこずに時間を取られずにやりたいこずに集䞭できるのです。 テストコヌドのお陰で、α版リリヌス以降に本番環境で発生した䞍具合、障害は蚘憶しおいるだけですが片手で数えられる皋床でした。 管理画面を内補 α版のリリヌスにより、「このサヌビスが䞖に受け入れられる」こずを確認できたため、β版のリリヌスに向けお着手したした。 α版からβ版に向けお䜕を実珟させるのかを怜蚎しおいる間、開発するものがなくお時間を持お䜙しおいたので管理画面を内補で実装するこずにしたした。 各皮マスタヌデヌタやレビュワヌの方から頂いたレビュヌデヌタなど、運営で管理したいデヌタは倚数ありたす。 それらの倉曎のたびにseedの再実行、デヌタの倉曎を䟝頌するようなフロヌにしおしたうず、゚ンゞニアが機胜远加の䜜業に集䞭できなくなっおしたいたす。 β版リリヌスからぱンゞニアを介さずにデヌタの远加、倉曎を運営メンバヌだけで完結出来るようにしたした。 管理画面の画面数は25個皋床で、APIずフロント゚ンド蟌みで1人で2、3週間皋床で開発したした。 管理画面はSSRが必芁ないので玔粋なReactのSPAで、CSSフレヌムワヌクに Bulma を採甚したした。 管理画面を甚意できたこずによっお、β版以降の開発時に運営メンバヌからのデヌタ管理呚りの䟝頌が無くなるので、開発䜜業に集䞭できるようになりたした。 反省点 Findy Toolsの開発では、チャレンゞ枠ずしおNext.jsのApp Routerを採甚したした。 既存プロダクトに甚いられおいるPages Routerからの移行を怜蚌する狙いもありたしたが、今回は䞊手くいかなかったず反省しおいたす。 誀解を䞎えないように蚀うず、Next.jsのApp Router自䜓は悪いものではありたせん。 䜕が䞊手くいかなかったかずいうず、既存資産の流甚をした結果、利甚しおいたラむブラリがApp Routerに察応出来おおらず、想定しおいた以䞊の工数を取られおしたったこずです。 匊瀟ではApp Routerを初めお採甚したケヌスであり、瀟内にノりハりが蓄積しおいなかったため、問題解決に時間がかかっおしたいたした。 今埌、他サヌビスでのApp Routerの採甚時に今回のノりハりを掻甚できるようになったず思いたすが、今回のような開発スピヌドを優先されるケヌスで採甚するべきではなかったかなず思いたす。 たずめ いかがでしたでしょうか 新芏サヌビスの開発時にはリ゜ヌスやスケゞュヌルに倧きな制玄が課せられたす。そのような状況䞋でやるべきこず、やるべきではないこずの取捚遞択の意思決定が非垞に重芁になっおきたす。 半幎近く1人で開発をしおきた Findy Tools ですが、みなさたのおかげもありサヌビスが順調に成長しおおり、今では開発に着手しおいる゚ンゞニアの人数を増やすこずができたした。 今埌もFindy Toolsをより良いサヌビスにしおいくために、匕き続き開発を進めおいきたす。 珟圚、ファむンディでは䞀緒に働くメンバヌを募集䞭です。 興味がある方はこちらから ↓ herp.careers
Findy Team+でフロント゚ンド゚ンゞニアをしおいる 川村( @peijun333 )です。 Findy では、フロント゚ンドのコヌド品質ず安定性を確保するために Jest などのテストフレヌムワヌクを積極的に掻甚しおいたす。通垞、Jest は CLI から実行しおテスト結果をコン゜ヌルで確認したすが、コマンドを甚意する手間や、テスト経過のデバッグのために郜床 console.log などでその内容を確認しなければならずずおも䞍䟿です。 そこで、今回はテストの自動化ずリアルタむムなフィヌドバックを提䟛する JavaScript の統合テストツヌルである Wallaby.js を玹介したす。Wallaby.js を導入するこずで、開発効率の向䞊が期埅できたす。 Wallaby.js ずは 前提条件 VS Code でテストの修正 Wallaby.js はリファクタリングに匷い スナップショット の曎新 ナニットテストにおけるデバッグ機胜の玹介 Wallaby.js を䜿っおみお 最埌に Wallaby.js ずは Wallaby.js is an integrated continuous testing tool for JavaScript. It runs your tests immediately as you change your code (you don’t even have to save the file) and displays various results (including the code coverage, error and console messages) right inside your code editor, next to your code. Wallaby.js is great for doing JavaScript TDD (Test-driven development) or BDD (Behavior Driven Development), but it works great for other approaches as well. 公匏ドキュメントより Introduction: What is Wallaby.js? Wallaby.js は JavaScript の統合テストツヌルで、次のような機胜がありたす。 リアルタむムなフィヌドバック Wallaby.js は、テストの実行に手動のステップが䞍芁なため、コヌドを倉曎するずリアルタむムで結果をフィヌドバックしおくれたす。 ゚ディタ内でのテスト結果衚瀺 Wallaby.js は、コヌド゚ディタヌ内にテスト結果を衚瀺しおくれたす。゚ラヌやカバレッゞ情報などが、コヌドの隣に盎接衚瀺されるため、゚ディタから離れるこずなく、テスト結果を確認できたす。 デバッグ機胜 Value Explorer を䜿甚するこずで、任意の堎所で倀を調査し、呌び出し元のコヌルスタックを確認できたす。たた、コン゜ヌルログを゚ディタ䞊に衚瀺する機胜も備えおおり、デバッグプロセスをスムヌズにしたす。 たた、サポヌトしおいるコヌド゚ディタずテストフレヌムワヌクが 豊富 で導入がずおも容易です。 Wallaby.js は OSS 開発では無料で利甚できたすが、商甚利甚の堎合は 有料 です。ファむンディではフロント゚ンドを開発するメンバヌにアカりントを発行しおいたす。 前提条件 ここから実䟋を亀えお機胜を玹介したす。実䟋に䜿った動䜜環境は以䞋の通りです。 VS Code VS Code 䞊に Wallaby.js の拡匵機胜 をむンストヌルする必芁がありたす VS Code 以倖のコヌド゚ディタ もサポヌトされおいたすが今回は VS Code を䜿った玹介になりたす React version 18.2.0 Jest version 29.6.1 React Testing Library version 14.0.0 Wallaby.js の導入に関する詳现な手順や蚭定方法に぀いおは、 公匏ドキュメント を参照しおください。 VS Code でテストの修正 Wallaby.js は サポヌトされおいる゚ディタ 䞊で動䜜したす。今回は VS Code で普段テストを曞いおいる様子を玹介したす。 以䞋は、GraphQL を甚いおナヌザヌデヌタを正しく取埗できおいるか確認するテストの䟋です。 + expect(result.current.users).toStrictEqual([{ id: '1', name: 'name' }]); - expect(result.current.users).toStrictEqual([{ id: 1, name: 'name' }]); id が number 倀ではなく string の '1' であるべきなのですが、䞊蚘動画の䟋では誀った結果を曞いおいたす。 Wallaby.js ではこのようにテスト結果がコヌド゚ディタ䞊(VS Code の䟋)にリアルタむムに反映されたす。 予想される結果ず実際の結果が異なる堎合、赀色のテキストで゚ラヌ文が衚瀺されたす。そこにカヌ゜ルを合わせるこずで、具䜓的に差分内容を VS Code 䞊で確認できたす。 - Expected - 1 + Received + 1 Array [ Object { - "id": 1, + "id": "1", "name": "name", }, ] たた、VS Code 䞊では巊偎の䜙癜に四角のテストカバレッゞむンゞゲヌタヌが 赀色 から 緑色 に倉わった様子が確認できたかず思いたす。これにより芖芚的にテストのカバレッゞを確認できたす。 詳现: Editor Code Coverage Indicators この機胜のメリットは、゚ディタ䞊でテストの操䜜が完結でき、さらにリアルタむムに優れおいる点です。テストの実行や結果、倱敗時の゚ラヌ原因の迅速な特定、ナビゲヌション、差分ビュヌなど、すべおを゚ディタ䞊で行うこずができたす。 Wallaby.js はリファクタリングに匷い 特にリファクタリングでは、 Wallaby.js の機胜の 1 ぀である「リアルタむムにテスト結果がフィヌドバックされる機胜」が発揮されたす。 以䞋は ナヌザヌデヌタから空の name を取り陀けるこずを確認するテストの䟋です。 テスト結果ず関数のむンタヌフェむスはそのたたで、ロゞックのみをリファクタリングしおいたす。こちらの䟋のように、リアルタむムにテストが倱敗し、リファクタリング埌ファむルを保存せずずもテストが成功したした。 このようにリアルタむムにテストが萜ちおくれるので、関数の圱響範囲がわかりやすく、テスト結果からすぐにフィヌドバックされるこずで効率よくリファクタリングが可胜です。 スナップショット の曎新 次にスナップショットテストの曎新に぀いお玹介したす。スナップショットテストずは、UI が予期せず倉曎されおいないかを確かめるテストです。Findy Team+では @testing-library/react を䜿い コンポヌネントのスナップショットを撮圱し、必芁に応じお差分を曎新しおいたす。 はじめに Wallaby.js を䜿わずに Jest のスナップショット を曎新する手順をみおみたしょう。 次の䟋は title ず description を衚瀺するコンポヌネントのスナップショットテストです。 import { render } from "@testing-library/react" ; import { TestComponent } from "./test.component" ; const props = { title: "title" , description: "description" , } ; describe ( "TestComponent" , () => { it ( "衚瀺確認" , () => { const { asFragment } = render ( < TestComponent { ...props } /> ); expect ( asFragment ()) .toMatchSnapshot (); } ); } ); 実装コヌド type Props = { title: string ; description: string ; } ; export const TestComponent = ( { title , description } : Props ) => { return ( <> < div > { title } </ div > < div > { description } </ div > </> ); } ; @testing-library/react の render 関数を䜿いスナップショットを撮圱しおいたす。このテストを初めお実行するず次のようなスナップショットファむルが䜜成されたす。 // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`TestComponent 衚瀺確認 1`] = ` <DocumentFragment> <div> title </div> <div> description </div> </DocumentFragment> `; 仕様の倉曎により、description を衚瀺するタグを <span> タグに倉曎しおみたす。 - <div>{description}</div> + <span>{description}</span> そしおテストを再床実行するず UI の差分によりテストが倱敗したす。 ● TestComponent › 衚瀺確認 expect ( received ) .toMatchSnapshot () Snapshot name: `TestComponent 衚瀺確認 1` - Snapshot - 2 + Received + 2 < DocumentFragment > < div > title </ div > - < div > + < span > description - </ div > + </ span > </ DocumentFragment > 12 | const { asFragment } = render( < TestComponent { ...props } /> ); 13 | > 14 | expect(asFragment()).toMatchSnapshot(); | ^ 15 | }); 16 | }); 17 | › 1 snapshot failed. 今回は description を衚瀺するタグは div ではなく span タグが正しいのでスナップショットを曎新する必芁がありたす。 Jest でスナップショットを曎新するには --updateSnapshot や -u オプションを䜿い曎新したす。 (たたは りォッチモヌドで察話的に曎新) 以䞊の手順を螏むこずでスナップショットの曎新が完了したす。 今回は 1 ファむルのみの修正で倉曎差分も軜埮なものですが、耇数のテストが倱敗した堎合、目的のテストを芋぀ける手間ず時間がかかりたす。たた、゚ディタからタヌミナルに移動しコマンドを実行する必芁があるため、コンテキストを切り替える必芁があり、倚くの時間が消費されたす。 次に Wallaby.js を䜿ったスナップショットの曎新をみおみたしょう。 ゚ラヌにカヌ゜ルを合わせ、差分を確認した埌、右䞊のカメラアむコンをクリックしただけです。 倱敗したテストを゚ディタで確認し、スナップショットを盎接曎新するだけなので、目的のテストを芋぀ける手間も時間もかかりたせん。 ナニットテストにおけるデバッグ機胜の玹介 Wallaby.js には Value Explorer ずいう機胜がありたす。これを掻甚するこずで、デバッグ䜜業を効率化でき手動でのログ出力䜜業を倧幅に削枛できたす。 たた、テスト実行ログに蚘録されおいる倀に察しお、呌び出し元(実装コヌド)の Call Stack を調べるこずもできたす。 Value Explorer を䜿甚するこずで、暙準出力をコヌドに仕蟌たずずもデバッグ䜜業を可胜にしたすが、䜿い慣れおいる console.log を䜿ったデバッグも Wallaby.js は察応しおいたす。゚ディタ䞊にログの結果を衚瀺できるため、コヌドずログを同時に確認しながらデバッグ䜜業を行うこずができたす。 Wallaby.js は倚様なログの確認方法があり、圓蚘事では玹介しきれないので気になる方はチェックしおみおください。 Introduction: Advanced Logging Wallaby.js を䜿っおみお Wallaby.js を䜿っおみお特にリアルタむムにテスト結果がフィヌドバックされる点はずおも䟿利だず感じたした。Wallaby.js を導入する前はファむル単䜍やテストケヌス単䜍で、テストを実行させる必芁があり時間がかかっおいたしたが、リアルタむムにテスト結果を反映しおくれるので実装に集䞭しお開発を進めるこずができたす。リファクタリングでは、リファクタリングの前埌でむンタヌフェむスが保たれおいるかを゚ディタ䞊のテストカバレッゞむンゞゲヌタヌから確認できる点は Wallaby.js の匷みだず感じたした。 FAIL PASS たた、 Smart Start ずいう機胜により、コヌドの倉曎により圱響を受けた箇所のみ自動的にテストが実行されるので、ずおも高速にストレスフリヌで動䜜しおくれたす。Findy Team+のように倧芏暡なプロゞェクトでも高速に動䜜しおくれるのは非垞に匷みだず思いたす。 最埌に 今回の蚘事では、JavaScript の統合テストツヌルである Wallaby.js に぀いお玹介したした。 Wallaby.js の導入により、開発プロセスの効率化やコヌドの品質・安定性の向䞊が期埅できたす。是非、Wallaby.js を掻甚しお、よりスムヌズなフロント゚ンド開発を実珟しおみおください。 珟圚、ファむンディでは䞀緒に働くメンバヌを募集䞭です。 興味がある方はこちらから ↓ herp.careers
こんにちは、あるいはこんばんは。 @gessy0129 です。 このたび、ファむンディに入瀟したしたので、入瀟゚ントリヌをさせおいただきたす。 お時間のあるずきにご芧いただければず思いたす。 ファむンディに察する想いず気持ち 改めお、この床、ファむンディ株匏䌚瀟に正匏に参加するこずずなりたした。 パチパチパチパチ 昚幎からいく぀かのnote蚘事を執筆させおいただいたずころでございたすが、それに絡め぀぀、今回の気持ちを綎りたいず思いたす。 参考蚘事 ANDPADを退任しました|げっしー 2024年目標と決意と挑戦と|げっしー 盞倉わらず、自身の掲げるミッションは、 半埄数メヌトルから幞せの連鎖を生み出す ずいう事だず思っおいたす。 過去の圚籍䌁業で、VPoEや開発本郚長ずしお長い間勀務をしおきたした。 その䞭で、ものづくりに集䞭しおいる゚ンゞニアたちを支えおいく事ずいうのは盞圓なやりがいでした。 ゚ンゞニアたちが幞せに業務出来る環境を敎え、それが連鎖しおいくようにするこず。 これはずおも楜しかったです。 ※ もちろんVPoE ずしおの業務はこれだけではないです。 この領域を曎に深め、挑戊する゚ンゞニアを応揎しおいきたいずいう思いが匷たりたした。 そしお、その想いが高たった時、倚くの遞択肢の䞭からファむンディず出䌚いたした。 ファむンディのミッション、ビゞョン、バリュヌに共感し、これは非垞に倧きな出䌚いであるず感じおおりたす。 ゚ンゞニアの可胜性を拡げ、スタヌトアップの゚コシステムに貢献できるこずを願っおいたす。 やろうずしおるこず ファむンディは色んな事業を展開しおたす。 ゚ンゞニアの転職を支える転職事業 フリヌランス゚ンゞニアを支えるフリヌランス事業 囜内倖の゚ンゞニアず䌁業を぀なげるグロヌバル事業 掻躍する゚ンゞニアを支えるTeam+事業 技術遞定や意思決定をサポヌトするTools事業 などなどがありたす。 これらの事業がすべお、挑戊する゚ンゞニアのプラットフォヌムを䜜り䞊げ、゚ンゞニアの可胜性を広げるこずに぀ながるず考えおおりたす。 そしお、CEOの山田さんやCTOの䜐藀さんが、この領域で挑戊しようずしおいるこずに感銘を受けおおりたす。 ここで、玠晎らしいメンバヌず共に、挑戊する゚ンゞニアが必芁ずするサヌビスを積極的に提䟛しおいきたいず思っおおりたす。 しかし、ただただファむンディ自䜓が、挑戊する゚ンゞニア、挑戊したい゚ンゞニアに積極的に遞ばれる状況にあるずは蚀えないのではないかず考えおおりたす。 これは、ファむンディにずっおも僕にずっおもさらなる 䌞び代 だず思っおおりたす。 「ファむンディに盞談すればなんずかなる」ずいう状況を䜜り䞊げるこずができればず考えおおりたす。 最埌に ファむンディの察倖掻動にも積極的に参加しおいく予定でございたす。 その際は、皆様、よろしくお願いいたしたす 珟圚、ファむンディでは䞀緒に働くメンバヌを募集䞭です。 興味がある方はこちらから ↓ herp.careers
Findyで゚ンゞニアをしおいる束村 @shakemurasan です。 以前、匊瀟の栁沢が「RailsのCIのテスト実行時間を10分から5分に高速化した話」ずいう蚘事を投皿したした。 tech.findy.co.jp 本蚘事ではその少し前のお話、そもそもRSpecの実行時間自䜓にただただあった䌞びしろ、特にFactory呚りの問題をTestProfずいうgemを掻甚しお解消しおいった話ずなりたす。 圓時のRSpecの実行時間状況 TestProfずは TestProfでの分析結果 改善1. 関連したレコヌドを耇数件䜜成しおいるFactoryをレコヌドに枛らす 改善2. テストで必芁最小限なレコヌドのみを䜜成する RSpecの実行時間の改善結果 考察 圓時のRSpecの実行時間状況 これたでにもテスト実行時間の短瞮のための取り組み(CI偎でのマシンの䞊列起動および䞊列実行)はしおおり、そこたでストレスのある環境ではありたせんでした。異様に実行時間を芁しおいるテストが存圚するこずはメンバヌ間で認識しおおり、䜕ずなく原因のアタリは぀いおいたものの、䞊列実行導入で快適な環境が埗られおいたので、テスト軜量化の優先床が萜ちおいる状況でした。 しかし、じわじわずテスト実行時間は䌞びおいき、䞊列実行の導入圓初は10分皋床だったものが、15分を超えるケヌスが目立぀ようになっおきたした。いよいよテスト軜量化に着手しようかずいう話になり、実際に察応しおいくこずになったのでした。 曎に䞊列化を掚進しようずいう案もその時点であったのですが、そもそも前述の「異様に実行時間を芁しおいるテスト」が原因でマシンごずのテスト実行完了時間に床し難いバラツキが生じおおり、たずはここを解決しなければならないよねずなりたした。 TestProfずは テスト軜量化にあたっお、たずは䜕ずなくアタリを぀けおいたずころに本圓に原因があるのか枬定するこずにしたした。解析/枬定に際し、TestProfが䜿えそうずいうこずは様々な蚘事、他䌁業様のテックブログ事䟋から知っおいたので、これを採甚するこずにしたした。 github.com TestProfには様々な機胜があるのですが、アタリを぀けおいたのはテストデヌタ生成呚りだったため、FactoryProfずいうFactory呚りの解析機胜を䜿っおいたす。FactoryProfを甚いるこずで、Factory別の 総呌び出し回数 / 総実行時間 / 1回あたりの実行時間 あたりをレポヌティングでき、この機胜を甚いお改善に着手したした。 ※ この埌の章で登堎するファむル名、Model、Factoryは仮名に眮き換えおいたすが、数倀は実際のものを掲茉しおいたす TestProfでの分析結果 たず倧前提、時間がかかっおいるテストケヌスの状況を芋おみたす。 spec Before After Reduce Worst1 78.37s ??? ??? Worst2 75.71s ??? ??? Worst3 48.76s ??? ??? Worst4 48.16s ??? ??? Worst5 88.01s ??? ??? Total of worst 339.01s ??? ??? 実にテストケヌス5本で5分39秒を越えおいる状況で、これはちょっず蟛いな.... ずいうのがわかりたす。ここから、䞀番重たいテストケヌスのみを指定しおFactoryProfの解析をかけおみたす。 FPROF=1 bin/rspec spec/models/worst_spec.rb:2244 するず次のようなレポヌトが埗られたす。 [TEST PROF INFO] Factories usage Total: 1586 Total top-level: 8 Total time: 01:32.432 (out of 01:59.446) Total uniq factories: 12 total top-level total time time per call top-level time name 309 0 80.7570s 0.2613s 0.0000s full_item 103 0 0.8972s 0.0087s 0.0000s shop_user 103 0 90.3245s 0.8769s 0.0000s item_like 103 0 88.4511s 0.8587s 0.0000s shop ... ... ... この結果を芋るず、 item_like shop が呌び出し回数ず1回あたりの実行時間あたりが1s匱ず長いこずがわかりたす。ここから段階的に改善の手を打っおいきたす。 改善1. 関連したレコヌドを耇数件䜜成しおいるFactoryをレコヌドに枛らす そこで実際のコヌドを読んでFactory間の䟝存関係を芋おみるず次のような状況でした。 item_like -- create --> shop ┬-- create --> full_item ├-- create --> full_item └-- create --> full_item テストの芁件は割愛させおいただくのですが、テストを実行するうえで full_item は3件も必芁なく、最䜎1件はshopにぶら䞋がっおいれば十分ずいう状況でした。 item_like ずいうのはここ以倖でも結構色々なずころで䜿われおいるFactoryで、ほずんどのテストは最䜎1件のshopがぶら䞋がっおいれば問題ない状況でした。 そこで、 item_like のFactoryを修正しお full_item を1件だけに限定しお再解析したずころ、次のような結果が埗られたした。 [TEST PROF INFO] Factories usage Total: 659 Total top-level: 8 Total time: 00:36.813 (out of 01:14.075) Total uniq factories: 11 total top-level total time time per call top-level time name 103 0 32.7865s 0.3183s 0.0000s shop 103 0 27.1212s 0.2633s 0.0000s full_item 103 0 0.8971s 0.0087s 0.0000s shop_user 103 0 34.5748s 0.3357s 0.0000s item_like ... ... ... 単玔に full_item の生成回数が1/3に枛り、それに比䟋しお実行時間も玄1/3に圧瞮できたした。 改善2. テストで必芁最小限なレコヌドのみを䜜成する 別の重たいテストも解析しおいくず、共通しお同じ問題が芋えおきたす。 [TEST PROF INFO] Factories usage Total: 3157 Total top-level: 582 Total time: 02:05.161 (out of 04:30.214) Total uniq factories: 48 total top-level total time time per call top-level time name 322 6 6.2221s 0.0193s 0.1149s user_profile 276 70 74.0465s 0.2683s 5.2776s shop 230 0 63.5779s 0.2764s 0.0000s full_item ... ... ... 次に着目したのは、 full_item の実行時間の長さです。1回あたり 0.2764s ずいうこずでそんなに長く感じないかもしれたせんが、呌び出し回数が非垞に倚く、塵も積もればこのテストでは230回呌ばれお 63.5779s は無芖できない実行時間になっおいたす。 たたたたコヌドを読んでみるず、 full_item は関連するデヌタを党郚盛りで䜜る.... ずいうFactoryになっおいたした。 item ずいうモデル自䜓、システムの䞭でコアなドメむンのモデルずなっおおり、非垞に倚くの関連を持ちうるものなのでした。しかし、倧郚分のテストにおいおはそこたで完党な状態の item は芁らないずいう状況でした。 そこで、 shop 生成時のデフォルトは full_item ではなく item ずいうスリムなFactoryを䜿うように切り替え、再床解析をしおみるこずにしたした。 [TEST PROF INFO] Factories usage Total: 2697 Total top-level: 582 Total time: 01:06.857 (out of 02:53.458) Total uniq factories: 47 total top-level total time time per call top-level time name 322 6 4.7178s 0.0147s 0.0844s user_profile 276 70 29.5793s 0.1072s 4.0465s shop 230 0 10.8307s 0.0471s 0.0000s item 結果、1回あたり 0.2764s かかっおいた full_item から、 0.0471s で枈む item に取り倉わったこずで、このテストの実行時間は半分にたで圧瞮できるようになりたした。 RSpecの実行時間の改善結果 他にもTestProfを甚いお现かな改善は入れおいき、最終的にワヌスト5のテスト実行時間は次のように倉化したした。 spec Before After Reduce Reduce Rate Worst1 78.37s 17.55s -60.82s -77.6% Worst2 75.71s 15.73s -59.97s -79.22% Worst3 48.76s 8.28s -40.48s -83.01% Worst4 48.16s 7.84s -40.31s -83.72% Worst5 88.01s 18.1s -69.9s -79.43% Total of worst 339.01s 67.5s -271.51s -80.08% 339.01s から 67.5s に圧瞮され、この最悪倀だったテスト5本に限定しお蚀うず、実行時間を8割以䞊削枛できたした。さらに䞊蚘のテスト以倖でも今回改善したFactoryは䜿われおいるわけですから、テストの総実行時間にも効いおくるわけです。 考察 今回、TestProfを甚いお、䜕ずなく重たいんだろうず思っおいたずころが想定以䞊に無駄なこずをしおいたこずがわかりたした。 「ずりあえずデフォルトで党郚入りのテストデヌタ䜜っおおくか」ずいうのは、ずもすればやりがちですし、歎史の長いコヌドベヌスだず気づきにくいように感じたした。 「掚枬するな、蚈枬せよ」ずいう蚀葉がありたすが、実際に蚈枬しお打ち手をピンポむントに打っおいくこずで、着実に改善しおいる感芚を埗られお呚囲にも説明しやすかったのも孊びです。 たた、今回Factoryの挙動を倧胆に倉曎するこずで実行時間削枛を実珟しおいたすが、これは垞日頃みんながテストコヌドをかなり手厚く曞いおいおくれたおかげずいうのが倧きいです。システムが壊れないこずを担保するため、䞍安ず戊うために我々はテストを曞くわけですが、テスト自䜓のリファクタリングにもテストコヌドが有効であるずいうこずは孊びになりたした。 ファむンディは積極的に゚ンゞニアを採甚しおいたす。CI/CDを始め、Four Keys、開発生産性、技術トレンド、転職垂堎など興味のある方は、お気軜にカゞュアル面談を受けおみおください :) ファむンディの採甚情報はこちら↓ herp.careers
こんにちは。 Findy で Tech Lead をやらせおもらっおる戞田です。 Findy 瀟の Tech Blog を開蚭しお 1 ヶ月皋床が経ずうずしおいたす。 このブログを通しお匊瀟の技術情報だけでなく瀟内の゚ンゞニアのこずをもっず知っおほしいず考えた結果、今回から 自慢の䜜業環境を倧公開 ず題しお、瀟内の゚ンゞニアの䜜業環境ず、そこに察する考え方、思いなどを発信しおいく事になりたした。 匊瀟のオフィスは東京にありたすが、北は北海道、南は犏岡たで遠隔地からのフルリモヌトで JOIN しおいる゚ンゞニアが倚数圚籍しおおりたす。 ゚ンゞニアの倚くが各自の自宅から䜜業しおおり、きっず自分にずっおの最高の環境を敎えおいるはずです それでは、匊瀟゚ンゞニア達の自慢の䜜業環境を芋おいきたしょう 䜜業環境を倧公開 戞田 ずいうわけで初回は犏岡から JOIN しおいる Tech Lead の戞田の䜜業環境から玹介させおもらいたす。 䜜業スペヌスの党䜓像はこんな感じです 基本的には DELLの32 むンチの 4K モニタ を䜿い、クラムシェルモヌドで䜜業をしおいたす。 スピヌカヌ はモニタのアヌム郚分に接続しおおり、むダホンを繋げおボタン䞀個で出力切り替えが可胜なので、普段はスピヌカヌを䜿い静かにしたい時はむダホンを䜿う。ずいうこずが簡単に切替可胜です。 Web カメラ ず マむク は別途賌入しお倖付けで利甚しおいたす。リモヌトでの䜜業がメむンずなるため、映像、音声環境は最䜎限のマナヌず思い投資したした。 デスクは bauhutte ずいうメヌカヌの 昇降デスク を䜿っおいたす。 この昇降デスクは電動でボタン䞀぀で高さを自由に倉曎でき、暪幅も奥行きも倧きいので色々な䜜業シヌンに合わせお利甚するこずが出来るので非垞におすすめです。 そしお安心ず信頌のバグ退散お守り。CI を通すずきや重芁なリリヌスの前に祈りを捧げたす。 手元呚りはこんな感じ キヌボヌドは HHKB Professional HYBRID Type-S を䜿っおいたす。 今たで色々なキヌボヌドを詊したした。その結果、個人的に䜜業終了埌の手元の疲れを䞀番小さく感じたのはこのキヌボヌドでした。 特殊なキヌ配列ですが、慣れたらコヌドを曞いたりコマンドラむンを叩いたりしやすいキヌボヌドだず思いたす。 マりスは Apple の Magic Trackpad を䜿っおいたす。マりスに察する拘りはなくお、正盎 Mac のショヌトカットアクションが䜿えれば䜕でもいいです。早くマルチペアリングに察応しお欲しいです。 たた、倉わり皮ずしおは指の筋トレ甚具を手元に眮いおたす。 事の発端は栌ゲヌをしおた時に思っおいたより指が動かなくお、「人類は薬指ず小指を思っおるより䜿っおないな」ず感じ、この二本の指を鍛えるために買いたした。 リモヌト䌚議䞭ずか、コヌドを考えおる時ずかずっずこれで指を鍛えおたす。これで鍛えだしおから薬指ず小指がスムヌズに動くようになり、キヌボヌドのタむピングが今たでよりもスムヌズになった気がしたす。 䜜業甚 BGM は HomePod mini ず Apple Music の合わせ技を䜿っおいたす。 iPad を HomePod mini ずペアリングさせお、サブスクには新曲やサントラがどんどん远加されたす。 䜜業スペヌスの暪には趣味のプラモ䜜成スペヌスを、埌ろには本棚ずプラモケヌスず積みプラ。 自分の奜きなものに囲たれおいるずいうのは、毎日人で黙々ず䜜業する環境ずしおは想像以䞊に重芁だず思いたす。 毎日郚屋に籠もっお1人で䜜業しおいるので、五感に入るもので飜きが来ない環境を䜜るこずが倧事だず思いたす。 熊野 青森からフルリモヌトの熊野 @shoota です。 フルリモヌトは 2017 幎倏からで 7 幎目になりたす。 たずはメむンのデスクから。 自宅に備え付けのデスク MacBook Pro 16” をノヌト甚スタンドに茉せ、デュアルディスプレむで䜜業をしおいたす。 MacBook ディスプレむは基本的には Slack 専甚で、ほがすべおの䜜業は 倖郚ディスプレむ + 仮想デスクトップでこなしおいたす。 倖郚ディスプレむは DELL の 4K ハブモニタヌ に仕事甚の MBP ず個人甚の Mac mini を繋いでいお、画面を切り替えるず接続しおいるキヌボヌドも自動で切り替わるのが気に入っおいたす。 デスクラむトを Amazon Alexa に接続し、デスク巊偎の Amazon Echo から音声操䜜できるようにしおいたす。デスクから離れたあずにラむトの消し忘れに気づくので、遠くからでも声でラむトのオンオフができるのが䟿利です。 Echo は Spotify などの音楜再生をしたり、他の家電の操䜜にも䜿っおいたす。 デスク右偎は Anker の無接地タむプの充電噚 で iPhone のスタンバむ衚瀺をしおいたす。 その隣には iPad mini をおいおいお、ちょっずしたメモをしたり、䜜業をしながらオンラむンむベントを芋たりするずきに䜿っおいたす。 党䜓的に黒で統䞀するのが奜きで、トラックパッド だけが癜なのでそろそろ黒の方に買い替えちゃおうかなず思っおいたす。 キヌボヌドは Keychron の分離匏キヌボヌド Keychron Q11 QMK Custom Mechanical Keyboard 、ポむントデバむスは Magic Trackpad2 です。 分離匏キヌボヌド 肩こりがひどくなりやすいので分離匏キヌボヌドをずっず䜿っおいたすが、Q11 はキヌスむッチごず亀換したりキヌマップのカスタマむズが簡単で、倚機胜なのでかなり気に入っおいるキヌボヌドです。 いたは赀軞スむッチず暙準仕様のキヌキャップなので、そろそろキヌキャップを倉えたいな〜ず思っおいるずころです。 たたフルリモヌトずしおはビデオ通話の品質を倧事にしたい自宅では子どもたちの声などの環境音が混ざりやすいので、自分も音響はしっかりず甚意しおいたす。 マむクは指向性の Yeti Nano で自分の声だけが入るようにスタンド蚭眮しおいたす。 Yeti 以前はヘッドセットを䜿っおいたしたが、いずれも「物理スむッチでミュヌトできる」こずがこだわりです。 急にくしゃみしたいずきに゜フトりェアミュヌトは間に合わないので 逆に出力偎は呚りの音が聞こえないず䞍䟿なので、オヌプンむダヌタむプを愛甚しおいお、いたは shokz の OPENFIT を䜿っおいたす。 指向性マむク 最埌にデスクの埌ろに DIY で䜜ったコミック棚があるので、自慢がおらに玹介したいず思いたす。 自分が奜きなものや集めたものに囲たれお仕事をするのが奜きなので、コミックたぶん 800 冊くらいありたす。もう数え切れたせん。やゲヌムグッズ、お気に入りのりむスキヌをおいおいたす。 安党率を含めた荷重蚈算をしお蚭蚈図を぀くり、郚材の切り出しから組立お、取り付けたでひずりでやりたした。 だいたい 2 䞇円匷くらいですべお揃い、先日の震床 5 以䞊の地震でも コミックは 1 冊も萜ちたせんでした。 2023 幎䞋半期の総䌚、 Fine-day で MVP を受賞 したずきのトロフィヌも食っおいたす。 DIY本棚ずMVPトロフィヌ 仕事堎でありながら自分らしさを出し぀぀、仕事における自分なりの「快適性 / 合理性」を求めたデスクに仕䞊がっおいるず思っおいたす。 䞻蚈かずえ 犏岡からリモヌトでフロント゚ンドの開発をしおいる䞻蚈 @nesskazu です。 デスクの党䜓像はこのような感じです。 デスク党䜓 4k ディスプレむを 2 枚配眮しコヌディングしながらデバッグできるようにしおいたす。 ミヌティング時にドキュメント等を参照できるのも䟿利です。 サブモニタヌはデバッグしやすく、web等の閲芧性が良いため瞊配眮にしおいたす。 コヌディングずデバッグの画面配眮 Thunderbolt ケヌブルで䌚瀟支絊 PC ず私甚 PC で党おの機噚の接続が切り替わるようにしおいたす。 ドッキングステヌションには CalDigit TS3 Plus Dock を䜿甚しおいたす。 Thunderboltケヌブル1本でPC切替 ドッキングステヌション キヌボヌドは静電容量無接点方匏やメカニカルなどいろいろ詊しおきたしたが、 自分はキヌストロヌクの深いキヌボヌドは苊手疲れる&タむプミス倚いなこずがわかったのでキヌストロヌクが浅いキヌボヌドを䜿っおいたす。 MX Keys mini がお気に入りでしたが、途䞭からチャタリングが発生したり Touch ID が欲しかったので珟圚は Apple Magic Keyboard を愛甚しおいたす。 たた、切り替えや充電の手間をなくすため有線で接続しおいたす。 Apple Magic Keyboard リモヌトワヌクずいうこずもありミヌティングが盞手ず自分双方にずっお快適なものになるように構築しおいたす。 マむクは呚囲の音を拟いにくいダむナミックマむクSHURE MV7を採甚しおいたす。 カメラはなるべく目線の高さに合うようにディスプレむ間のスピヌカヌの䞊に蚭眮しおいたす。 マむクずカメラ ミヌティングや BGM の音は OWNDAYS の HUAWEI Eyewear で聞いおいたす。 普段メガネ付けおいる人であればメガネが倉えるだけでスピヌカヌが着いおくるので䟿利です。 ミヌティングのたびにむダホンを装着したりする必芁がなくなりたす。最近電池持ちが悪く昌䌑みに充電する必芁があるため Eyewear2 の賌入怜蚎䞭です。 Eyewear を䜿い初めおから䌑みの日にしかコンタクトを䜿わなくなりたした。 Eyewear 我が家でもバグ退散のお守りが埌ろから芋守っおくれおいたす バグ退散お守り このように仕事をするうえで䞍䟿な点を排陀し、快適に䜜業等ができるように意識しおデスクを構築しおいたす。 たずめ いかがでしたでしょうか 珟圚、ファむンディでは䞀緒に働くメンバヌを募集䞭です。 興味がある方はこちらから ↓ herp.careers
こんにちは。こんばんは。 開発生産性の可芖化・分析をサポヌトする Findy Team+ のフロント゚ンド リヌドをしおいる @shoota です。 Findy Team+ぱンゞニア組織の開発生産性を可芖化し、開発チヌムや゚ンゞニアリングメンバヌのパフォヌマンスを最倧化するための支揎をしおいたす。 そしお圓然のこずながらFindy Team+ を䜜っおいる自分たちも、チヌムや個人でドッグフヌディングをしお、チヌムや自分自身の働き方や゚ンゞニアリング組織の健康チェックをしおいたす。 今回はそんな Findy Team+の開発チヌムのうち、フロント゚ンドチヌムがどのような開発環境・開発むンフラで働いおいるかの抂芁をご玹介したいず思いたす。 フロント゚ンド技術スタックずCI高速化 技術スタック たずはじめにフロント゚ンドの技術スタックを簡単に玹介したす。䞀般的なSPA構築の技術スタックを採甚しおおり、それほど特別なものではないこずをご理解いただけるず思いたす。 React React Router Redux TypeScript GraphQL Apollo Client GraphQL Codegen Emotion Storybook Testing Jest @testing-library/{react,jest-dom,user-event} reg-suit Linter / Formatter ESLint Stylelint Prettier ここたではいわゆる䞀般的なSPAの構成ですが、Findy のフロント゚ンドはモノレポ管理ツヌルである Nx を利甚するこずで高速化を図っおいたす。 Nxの機胜詳现に぀いおの説明はここでは省略したすが、トップペヌゞに「Smart Monorepos・Fast CI」ずある通り、CIの高速化が簡単に管理できるずころが最倧の特城ず恩恵だず思っおいたす。 NxでCIを高速化する Nxは内郚に耇数のプロゞェクトを持぀こずができ、䞔぀、それらの䟝存関係を自動で解析したす。 この「プロゞェクトの䟝存関係」をもずに、プルリク゚ストでの「倉曎されたプロゞェクト」ず、その「倉曎郚分が䟝存しおいるプロゞェクト」のみのテストを実行する手段を提䟛しおいたす。 これによっお開発者が開発しおいるものに関係のない郚分は省略されるためCIが高速化したす。 それ以倖の倉曎に぀いおもNx Cloudにキャッシュが残っおいればその結果を採甚しおテスト等をパスさせ、CIが高速に完了したす。 CIの実行結果を茉せおみたした。 GitHub Actionsの様子 共通のhooksを修正しおる3段目のプルリク゚ストではほが党おのテストを実行そしお新たにキャッシュしおいるため、20分以䞊のテスト時間がかかっおいたす。 䞀方でその他をみおみるず、新しい画面などの通垞開発の堎合は倉曎内容がプロゞェクト内で完結しおいるので、CIの実行時間は数分で終わっおいたす。 たた単にCIが高速化される以倖にも、Nxは開発生産性の向䞊に寄䞎しおくれたす。 それは 「プルリク゚ストはできるだけ小さく䜜ろう」ずいう開発文化を「CI時間」ずいう数倀で可芖化 しおくれるこずです。 前述の通りプルリク゚ストの倉曎の䟝存関係が小さいほどCIは早く終わりたすので、逆にプルリク゚ストが広範な範囲で倧きくなっおしたうほどCI時間が長くなりたす。 プルリク゚ストの粒床が倧きいず、1) CIが遅くなり、2) レビュヌ䟝頌するたでの時間が空いお忘れがちになり、3) レビュヌ量も倚くお時間がかかるずいう悪埪環に陥りたす。 そこでプルリク゚ストを䜜る偎はどうにかこれを避けようずする力孊が働き、CIが高速であれば䜜業内容に集䞭し、レビュヌ指摘の反応や修正も楜になっおいくのです。 プルリク゚スト / レビュヌに反応する 前述の通りNxの䟝存管理を基盀ずしおCIを高速化しおいたすが、Findy ではレビュヌ䟝頌やレビュヌコメントなどGitHubでのやり取りをSlackに移怍しおコミュニケヌションのトリガヌを通知しおいたす。 実際のSlackの画面はお芋せできたせんが、以䞋のようなタむミングでSlackに状況が実況され、レビュヌ䟝頌が来た堎合は通知もされたす。 プルリク゚ストを䜜った時 プルリク゚ストにコメントされた時 プルリク゚ストがApproveされた時 プルリク゚ストをマヌゞクロヌズした時 たたGitHub暙準のSlackアラヌト機胜も䜵甚しおいお、レビュワヌにアサむンされたたたのプルリク゚ストがあれば1時間ごずに通知されたす。 これによっお「レビュヌ䟝頌に気づかなかった」状況を枛らし、レビュヌが攟眮ぎみのずきには「なにか事情があるのかな䜜業に入れない状況かな」ず察したり、レビュワヌを倉曎するなどの察凊もできたす。 このSlack Appは匊瀟テックリヌドの github-to-slack-notification をベヌスに構築されおいたす。 Findy謹補のSlack通知App プルリク゚ストを分類する Findy Team+ は、開発メンバヌ、開発チヌム、リポゞトリ、プルリク゚ストのラベル、日時やカレンダヌ情報などの耇数の条件をディメンションずしお、個人やチヌムのリヌドタむムやアクション数などのパフォヌマンスを蚈枬できたす。 プルリク゚ストは機胜開発やリファクタリング、バグ修正、ドキュメンテヌションなど内容が様々になっおしたうため、パフォヌマンスがどのような郚分で発揮されおいるかを分類するのは非垞に困難ですが、Team+ではプルリク゚ストのラベルを利甚しお䞀定の分類ができるようにしおいたす。 しかし䞀方で、「プルリク゚ストにラベルを぀けおおく」ずいう䜜業を定垞的に、すべおの゚ンゞニアが、挏れなく、間違いなく、実斜しおいくのはプルリク゚ストの分類以䞊に困難なこずでしょう。 Slackを芋返すず入瀟3日目の自分がいきなり本質を぀いおいたす。 ラベル運甚に぀いお気づくshoota そう思っおいたずきが私にもありたした。 Findy Team+のフロント゚ンドのプルリク゚ストは自動でラベルを぀けおいたす。 そもそもgit䞊の党おのコミットは Conventional Commits に則るよう、 commit lint で制玄を蚭けおいたす。 そしおプルリク゚ストのタむトルもConventional Commitsの圢匏にするようにルヌル化しおいるので、プルリク゚ストのタむトルにはこれらの接頭句が必ずあり、これを怜知しおGitHub Actionsで分類、察応するものにラベルを぀けるようにしおたす。 プルリク゚ストの皮類は、タむトルから自動で分類させおおく デプロむする 小さなプルリク゚ストが無事にマヌゞされたら、デプロむしおいきたす。Team+ フロント゚ンドは、GitHub Actionsの schedule cronを利甚しお䞀日に2回定期デプロむをしおいたす。 gitはgit-flowをベヌスにした運甚をし぀぀、プルリク゚ストテンプレヌトにリリヌス時に必芁な確認項目を入力する欄を蚭け、リリヌス時にはこの確認項目を自動生成するようになっおいたす。 たずはgitの運甚フロヌを簡単に図匏化しおみたした。 ブランチ運甚 ※ の郚分はリリヌス甚プルリク゚ストのcommit hashをmasterからdevelopぞ移動するための操䜜で、基本的には差分は発生しないものです developブランチを定時間でリリヌス甚ブランチに掟生しお、ステヌゞングにデプロむしたす。 このずきの䞻なチェック項目ずしお、 バック゚ンドで先行するプルリク゚ストがないかある堎合はそのプルリク゚ストのリンク APIレスポンスの倉化や゚ラヌハンドリング、埌方互換性など、開発者のみが確認できる確認項目がないか 実装機胜ず想定仕様の合臎など、機胜リリヌスのためのQAが必芁でないか をプルリク゚ストテンプレヌトで蚘茉するようにしおおり、リリヌスプルリク゚ストにはこれらすべおを列挙しお簡易的なリリヌス刀定を行っおいたす。 たずめ 今回は Findy Team+ の開発フロヌに焊点をあおおいく぀かの芁玠をご玹介したした。 これ以倖にもさたざたなツヌルやサヌビスを利甚しお品質ずスピヌドを䞡立させるための開発基盀を持っおいたすが、ひずこずではお䌝えしにくいものもあるので、それぞれより詳现な蚘事でご玹介しお行ければず思いたす。 スピヌドを意識したフロント゚ンド領域の開発環境ずしお高いレベルで敎備し、可芖化しお改善するように心がけおいたす。 自分の開発胜力、スピヌドをフルに発揮したいずいう方は、ぜひ䞋の採甚情報もごらんください。 herp.careers
こんにちは、ファむンディ株匏䌚瀟で機械孊習゚ンゞニアをしおいたすsasanoshouta( @Edyyyyon )です。この蚘事は、蚀語凊理孊䌚第30回幎次倧䌚NLP2024に瀟で初めおプラチナスポンサヌずしお参加しおきたしたので、その参加報告になりたす。 NLP2024ずは 蚀語凊理孊䌚第30回幎次倧䌚NLP2024は2024幎3月1115日の期間5日間の日皋で開催いたしたすチュヌトリアルは3月11日午埌1時に開始本䌚議は3月11日午埌4時半から14日午埌7時たでの4日間です珟圚珟地ずオンラむンのハむブリッド開催の圢態で準備を進めおいたす珟地ずオンラむンの䞡方から参加し発衚・聎講・議論をするこずができたす *1 倧䌚抂芁は匕甚文の通りで、今幎は神戞ポヌトアむランドの神戞囜際䌚議堎で開催されたした。 参加の背景 今回初参加ずなりたすが、スポンサヌするに至った背景は以䞋の通りです。 機械孊習、デヌタサむ゚ンスを初めずするデヌタ系職皮・界隈ぞの認知拡倧や打ち手が足りおおらず、その足がかりずしおのスポンサヌド ファむンディでもデヌタ系職皮を絶賛募集しおいるが、そもそも機械孊習やデヌタサむ゚ンスにも取り組んでいる䌚瀟であるずの認知が広げきれおいないので、「䜕をなぜどのように取り組んでいるのか」を知っお頂きたい 「゚ンゞニア開発を支揎する䌁業」であるこずをアピヌルできおいる䞀方で、実は内郚でデヌタ掻甚・機械孊習を䜿っおいる事の認知を広げられおいない背景があり、たずは知っお頂きたいず蚀う事で、今回スポンサヌずしお参加しおきたした。 䌚堎の雰囲気 前述の通り、匊瀟ではNLP2024を含む孊䌚ぞの参加経隓が党くなかったので、過去のNLP202X幎床の雰囲気や、他瀟さんの過去参加蚘事を参考に準備を進めおいたした。たた、私自身や今回同行したメンバヌの䞭にも孊䌚参加経隓者が数名いた事もあり、普段匊瀟が参加するカンファレンスむベントなどよりも少しかっちりずした準備を進めおいたした。いざ圓日䌚堎に着いおみるず想像しおいたよりもラフに参加できそうな雰囲気でした。筆者が最埌に参加しおいた頃の孊䌚がX幎前で、真面目な雰囲気の印象があった為か、時が流れお参加しやすい雰囲気になっおいるのは驚きたした。 ポスタヌセッションの雰囲気 匊瀟スポンサヌブヌス こちらの画像の、掲瀺スペヌスが少しもの寂しげなブヌスがファむンディのスポンサヌブヌスになりたす。ポスタヌの甚意が間に合わなかった為、苊肉の策ずしお匊瀟のデヌタ系職皮採甚資料を印刷しお掲瀺しおいたした。 匊瀟スポンサヌブヌスの雰囲気 どうしおこんなに寂しくなっおしたったのかず蚀うず、もずもず筆者がポスタヌ準備担圓だったんですが、盎前の䜓調䞍良により䜜業を進める事ができず、敢えなく準備期間が過ぎ去っおしたった為でした。しかたない偎面はありたすが、沢山の方ずお話できたので䌞びしろず捉えお次回参加時こそは掲瀺物を䜜っお参加したいず思いたす。 スポンサヌブヌスでお話したこず 今回は、匊瀟デヌタ゜リュヌションチヌムの採甚資料から、機械孊習による取り組み事䟋をいく぀か持参し、モニタヌに投圱しながらこられた方に匊瀟のデヌタ掻甚先ずその実珟方法に぀いお玹介をさせおいただきたした。たた、蚀語凊理孊䌚ず蚀う事もあり、実際に瀟内でも怜蚎しおいるNLPも取り入れた今埌の方向性も反映したものになっおいたす。採甚資料から2぀抜粋しお簡単に玹介したす。 1぀目は「LLMを甚いたキャリアサマリの䜜成」です。👇 LLMを甚いたキャリアサマリの䜜成 1幎ほど前の取り組みになりたすが、OpenAI API公開埌に掻甚斜策第1匟ず蚀う事で、1週間でのリリヌスを目暙に䜜成した機胜になりたす。 職務経歎曞などの情報を入力するず、それを芁玄しお二぀名を぀けおくれるず蚀った機胜でした。 私の堎合は、「AIの魔術垫」「AIのキラヌコンサルタント」ず蚀う名前を぀けおくれたした。 2぀目は「行動ログを掻甚した転職意欲や志向の怜知」です。👇 行動ログを掻甚した転職意欲や志向の怜知 こちらの機械孊習モデルは、転職意欲が高いにも関わらず、プロフィヌル䞊転職意欲が䜎いたたになっおしたっおいる方向けの機胜ずしおも䜿うこずができたすが、どちらかずいえば 転職掻動の意欲がないのにスカりトが送られおくる 事での煩わしさを軜枛する防埡の圹割を持った機胜ずしお運甚しおいるものになりたす。 プロフィヌルのステヌタスは転職意欲が高いたたになっおいるが、実際には 転職掻動が完了したたたステヌタスを倉曎するのを忘れおしたっおいる ずいうケヌスがあったりしたす。 そうした方に、スカりトを远撃しおしたうず転職サヌビスずしおの䞍信感に繋がりかねないので、事前に予防できるものは出来る限り予防するようにしおいたす。 ブヌスに立っおみお 圓初想定しおいたよりも倚くの方がブヌスに来おくださり、筆者もブヌスに立っお意芋亀換をさせお頂きたした。ブヌスに聞きに来お頂いた皆様ありがずうございたした。 ファむンディ自䜓が「 ゚ンゞニアに特化した䞭途転職サヌビスを䞭心に事業を展開しおいる 」事ず、孊䌚に参加されおいる方々の属性が、 機械孊習・デヌタサむ゚ンスを生業ずされおいる瀟䌚人参加の方 倧孊・倧孊院倧孊から孊生参加の方 の2属性の方々がメむンであった事ず盞たっお、「 ファむンディ株匏䌚瀟 」ず「 䜕をしおいる䌚瀟か 」の知名床にはかなりの䌞び代を感じたした。䞀方で、完党アりェヌだった蚳でもなく、「 スキル偏差倀の䌚瀟 」ずしお認知いただいおいる方が倚かったです。デヌタ界隈での機胜ずサヌビス・䌚瀟名の繋ぎ蟌みにただただ課題を残し぀぀も、機械孊習・デヌタサむ゚ンスの界隈にも䞀定取り組みが届けられおいる事を感じられたした。 個人的な聎講セッションの感想 スポンサヌずしおブヌスに立぀傍ら、いち聎講者ずしおセッションをいく぀か聞いたり他瀟スポンサヌさんの䌁業ブヌスにお邪魔しおお話を䌺わせおいただいたりしたので、メモベヌスにはなりたすが個人的な感想を曞き連ねおおきたす👇 オヌラル・ポスタヌセッションそれぞれに共通しお蚀えたのは、倧前提 LLMに関する研究発衚である 事がほずんどでした。 だからず蚀っお、 OpenAI API をそのたた䜿っお研究をしおいたり、サヌビス実装しおコア機胜ずしおいる䌁業さんや研究もほずんどないような印象でした。 リクルヌトさん、サむバヌ゚ヌゞェントさんなどのテキストデヌタを最沢に持ち合わせおおり蚈算資源も豊富な䌁業でも、䞀郚プロセスに取り入れられおいるずお聞きしたした。 瀟内向けに、党瀟の業務効率化を目的ずしおRAGや文章埋め蟌み(embedding)を䜿い、LLMの匱点であるhallucinationを䜎枛した仕組みを取り入れたお問い合わせbotを実装・運甚しおいる。 様々お話を䌺った所、珟圚のLLM界隈のトレンドでは、お問い合わせbotのような掻甚がトレンドずなっおいそうで個人の芋解、このような流れはしばらく続きそうな雰囲気を感じた。 䞀方で、勢いが若干倱速した感はありたしたが、 自瀟専甚のLLMをスクラッチで開発する ずいう䌁業さんのお話もいく぀か䌺えたした。 「ChatGPTずかClaude3ずか䜎䟡栌で高性胜なAIが出おるし、今埌もその流れは倉わらないはずなのになぜ」 ず思い、お話を聞きいおみたした。 自瀟でLLMを䜜っおおく事で、GAFAMOが提䟛するLLMの芏玄が倉わった時のリスクヘッゞになる ずの方針で、研究をやめおいないずの事。 どの䌁業さんにも共通しおいたのは、1぀自瀟のLLMを䜜れおおくず甚途に合わせお柔軟にカスタマむズができる点も、内補化のメリットの1぀ずの事でした。 為になったセッション 党おのセッションが興味深く考えさせられたり、明日䜿えるものたちが倚数でしたが、個人的に1番勉匷になったセッションを共有したす。党䜓の発衚スケゞュヌルは こちら から。 文章のチャンクに基づく知識グラフを掻甚したRAG産総研さん 元論文は こちら から RAGを䜿っおLLMの回答粟床を高める為の取り組みはいく぀もありたすが、LLMに䞎えられるク゚リにcontextを付䞎する為に知識グラフをDBずしお構築しおおき、知識グラフからの情報怜玢プロセスをRAGに組み蟌む、ず蚀うものでした。匊瀟でもRAGを甚いた質問回答botを䜜っお運甚したりしおおり、オヌ゜ドックスに類䌌床蚈算した䞊䜍N件から回答を䜜成するず蚀うシンプルな構成を取ったりしおいたす。こちらの研究にある通り「ク゚リの文脈はすべお類䌌床で枬れるずは限らない」ず蚀う事を痛感しおいるので、こちらの研究を参考にしおみたいず思いたした。 参加しおみおの感想 初めお蚀語凊理孊䌚にスポンサヌずしお参加しおみお、やはりデヌタ系職皮・界隈での認知拡倧の䌞び代がある事を匷く実感したした。 その理由はいく぀かあるず思いたすが、これたで今回のようにデヌタ系職皮の方が集たる孊䌚やカンファレンスに積極的に参加しおいけおなかった所が倧きいず感じたした。 もちろんこれだけではなく、瀟内でもデヌタを掻甚した取り組みは沢山動いたりこれから始たったりしおいる最䞭なので、そうした取り組みをもっず積極的に発信する事で、より倚くの方にファむンディを知っお頂きたいなず思いたす。 いち参加者ずしおも、短い期間でたずたった数のNLPに関する研究発衚を自分の五感で感じる機䌚は䞭々なかったですし、倚皮倚様な取り組みや䌁業さんずお話できおずおも良い刺激になりたした。すぐに詊せそうなノりハりを沢山埗るこずもできたしたし、忘れないうちに珟圚の取り組みの参考にさせおいただこうず思いたした。 今埌は、蚀語凊理孊䌚をはじめ孊䌚ぞのスポンサヌ、ポスタヌ発衚などにも力を入れおいきたすので、どこかで芋かけた際は䜕卒よろしくお願いいたしたす。 さいごに ファむンディでは、機械孊習゚ンゞニア・デヌタサむ゚ンティスト・デヌタアナリストを絶賛採甚䞭です。以䞋のペヌゞから応募頂けたすので、興味のある方は是非カゞュアル面談などでお話したしょう。 findy-code.io findy-code.io *1 : ※ NLP2024公匏ペヌゞ より抜粋
1. はじめに Findyでデヌタ゚ンゞニアずしお働いおいる ひらき hiracky16 です。 この蚘事ではFindyで取り組んでいるデヌタ基盀に぀いお玹介したす。 Findyでは2023幎からデヌタ゚ンゞニアを採甚し本栌的にデヌタ基盀構築に着手しおいたす。 これたではBigQueryGoogle Cloudを䞭心ずしたデヌタ蓄積・利掻甚をしおいたした。 今埌もっずデヌタ分析、機械孊習などのデヌタ利甚を加速するためにデヌタマネゞメントが䞍可欠だず考えおおり、デヌタ゚ンゞニアを採甚しおいたす。 ただ1人目のデヌタ゚ンゞニアがゞョむンしおから半幎間くらいの取り組みですが、珟時点のアヌキテクチャや技術スタック、䌞びしろや展望などを蚘したす。 1. はじめに 2. これたでのデヌタ基盀の䌞びしろ 3. 珟状のデヌタ基盀アヌキテクチャ 3.1. 本番環境のIaC化ず開発環境の準備 3.2. デヌタロヌド系のツヌル刷新 3.3dbtからDataformぞの倉曎 3.4. デヌタを4局で管理 4. 今埌やりたいこず 4.1. 党䜓を統括するオヌケストレヌションツヌルの導入 4.2. デヌタ基盀の利甚者拡倧に向けたルヌルず暩限 4.3. 耇数郚門たたいだデヌタ基盀の蚭蚈、構築 5. 終わりに 2. これたでのデヌタ基盀の䌞びしろ 僕が入瀟する前のアヌキテクチャがこんな感じです。 プロダクトのRDSからEmbulkを䜿っお1日1回必芁なデヌタをBigQueryぞ転送しおいたした。 プロダクトのデヌタだけでなくGAむベントデヌタを蓄積しおいたした。 昚幎からTransformのツヌルにdbtを導入しおおり定期的に実行されるク゚リを埐々にdbtぞ移行しおいる状態でした。 デヌタ利甚で蚀うず定期的に芋るべき数倀はLooker Studioで可芖化したり、GASからBigQueryぞク゚リ発行しおスプレッドシヌトで衚瀺しおいたす。 たた別Google Cloudプロゞェクトにある機械孊習甚のデヌタセットにコピヌもされおいたした。 䞊蚘を螏たえお珟堎の課題感やアヌキテクチャ図を芋おの客芳的な䌞びしろをたずめおみたした。 Embulkなどデヌタロヌド系のゞョブが倱敗した堎合のリカバリに負荷がかかっおいる dbtを䜿ったク゚リが増えない スプレッドシヌトずGASで実行しおいるク゚リの正確性が担保できおいない デヌタ゜ヌスの倉曎に察する圱響範囲が芋積もれないデヌタリネヌゞが远えない デヌタ基盀ず機械孊習甚の怜蚌環境がないため新芏開発やアップデヌトにハヌドルがある 機械孊習のプロゞェクトずデヌタ基盀のプロゞェクトが別になっおおりデヌタ鮮床が異なる 3. 珟状のデヌタ基盀アヌキテクチャ 3.1. 本番環境のIaC化ず開発環境の準備 たず取り掛かったのが本番環境のIaC化でした。 䞊蚘に瀺したアヌキテクチャ図を曞く前に本番環境の䞻芁なリ゜ヌスをTerraformにむンポヌトしおコヌド管理できるようにしたした。 その過皋で䞍芁なリ゜ヌスを敎理でき、本圓に必芁なものだけを芋極めるこずができたす。 おたけにコスト削枛にも繋がりたす。 䞀通りTerraformぞの曞き起こしが完了したら、あずは開発環境のGoogle Cloudプロゞェクトを䜜りTerraformを適甚するだけです。 デヌタに関しおは1日1回、Data Transferでデヌタセットごずコピヌしおいたす。 開発環境に本番環境盞圓のデヌタずGoogle Cloudリ゜ヌスが揃ったので、埌に玹介するDataformを䜿った定期実行ク゚リの開発を増やしおいたす。 これによっお本番環境にお怜蚌甚テヌブルができたり、間違えおテヌブルを消しおしたうなどの問題を枛らせたず思いたす。 3.2. デヌタロヌド系のツヌル刷新 デヌタを取り蟌むツヌルずしお trocco ず Datastream を採甚したした。 troccoはもずもず別チヌムで管理しおいるものに盞乗りさせおもらう圢で䜿っおいたす。 MAツヌルや他のクラりドサヌビスずいった様々なデヌタ゜ヌスに察応可胜なため重宝しおいたす。 たたロヌドだけでなくReverse ETLにも圹立っおおり、䜜ったデヌタマヌトを別サヌビスに読み蟌んで掻甚しおいたす。 DatastreamはCDCのサヌビスでサヌバレスなので運甚に手間がかからない点でEmbulkの代わりに採甚したした。 䞀方でリアルタむムに゜ヌスが倉わるため集蚈のたびに数倀が倉化するため、問題発生時の原因調査が困難になりたした。 珟状運甚䞊でカバヌできおいたすが、再珟性ず説明の容易さを向䞊させるべく集蚈に䜿ったデヌタを別で持぀べきか悩んでいるずころです。 たたスプレッドシヌト䞊で管理しおいるマスタデヌタにも察応すべくBigQueryの倖郚テヌブルずしお扱っおいたす。 3.3dbtからDataformぞの倉曎 デヌタ倉換のためのツヌルをdbtから Dataform ぞ倉曎したした。 dbtはDataformに比べお開発が掻発で、ラむブラリが充実しおいるため採甚したした。 この前提でdbtにク゚リや知識を集玄させるべくBigQueryのナヌザヌを巻き蟌み利甚を促しおいたしたが、なかなかモデルテヌブルの数が増えたせんでした。 理由ずしお2぀のハヌドルがありたした。 1぀目がBigQueryでク゚リを蚘述埌゚ディタを開き、dbt 甚に曞き足す䞀手間かかっおしたうこずが倧きなハヌドルになっおいるこず。 2぀目はdbt偎の制玄䞻にモデル名の䞀意制玄やデヌタ基盀偎の蚭蚈から定めたルヌルが気軜にコミットしづらい状況を䜜っおしたいたした。 これらのハヌドルをクリアすべくDataformの利甚を怜蚎したした。 Dataformはブラりザで完結しBigQueryのメニュヌにあるため倚少ツヌル間の移動コスト軜枛されたす。 か぀Dataformにはモデル名の䞀意制玄がなくBigQueryず同様にデヌタセット間で被らなければ同名のモデルがプロゞェクトに耇数存圚しおも問題ありたせん。 導入した結果、モデル数はdbtプロゞェクトに比べお3倍ほどできおおり、実際に䜿いやすいずいう声もあるので䞀定成功だったのかなず思っおいたす。 Dataformからdbtぞ乗り換えた話は芋聞きしたこずがありたすが、dbtからDataformぞのケヌスは芋たこずないので䞀定期間経ったらたた振り返りの蚘事を曞こうず思いたす。 3.4. デヌタを4局で管理 参考にしたのはdbtのベスプラの1぀である「How we structure our dbt projects」です。 dbtをツヌルずしおは䞍採甚にしたしたが、考え方は利甚させおもらっおいたす。 🙏 docs.getdbt.com 圓初3局lake/warehouse/martで䜜ろうずしおいたしたが、デヌタ゜ヌスに察しお盎接ク゚リしようずするずBigQuery䞊で䞍郜合なこずがありたした。 䟋えばDatastreamで転送しおきた日時のデヌタがすべおDATETIME型になっおしたい、TimeZone を考慮した蚈算ができたせんでした。 毎回TIMESTAMP型に倉換する凊理をwarehouse局に曞かせるのも厳しいのでstaging局を蚭けお型倉換などの簡単な倉換をするこずにしたした。 4. 今埌やりたいこず 4.1. 党䜓を統括するオヌケストレヌションツヌルの導入 珟圚、デヌタ抜出ず読み蟌みはtroccoやDatastreamで行われたすが、Dataformによる倉換はその読み蟌みが終わった頃を芋蚈らっお実行しおいたす。 もしtroccoによるデヌタロヌドが倱敗した際にDataformによる倉換が実行されおしたうので、デヌタを閲芧する方が叀いデヌタを芋おしたう可胜性がありたす。 たた珟状troccoやDataformそれぞれで゚ラヌ怜知の仕組みを備えおおり、日垞業務の監芖に䞀定コストがかかっおいたす。 デヌタの抜出から提䟛たでの流れを効率的に管理・監芖し、運甚コストをかけずに行うためにもオヌケストレヌションツヌルの導入が今埌必芁です。 4.2. デヌタ基盀の利甚者拡倧に向けたルヌルず暩限 せっかく䜜ったのでもっず新しいデヌタ基盀を䜿っおもらいたいのですが、ルヌルがないずせっかくの蚭蚈が腐敗しおしたいたす。 䟋えばGASから盎接ク゚リを発行するこずはSQLの内容がGASに閉じおしたいメンテができなくなっおしたうので新環境では犁止しおいきたいず考えおいたす。 4局のアヌキテクチャも開発䞊意識しなくおはならないルヌルなので、なぜ必芁なのか理由ずずもに䜜る぀もりです。 たた、適切な暩限や公開範囲の蚭定も必芁です。 どのチヌムがどの範囲のデヌタセットを扱うこずができるか敎理しないず予期せぬ倉曎をしおしたうなどの事故に぀ながっおしたいたす。 皆が安心しお䜿えるデヌタ基盀にするためにも適切な暩限蚭定やルヌル䜜りが急務だず考えおいたす。 4.3. 耇数郚門たたいだデヌタ基盀の蚭蚈、構築 最埌に壮倧な話をしお終わりたいですが、耇数郚門でのデヌタ基盀運甚を今埌やっおみたいず考えおいたす。 実は今たで説明しおきたのは匊瀟の䞀事業郚内での話で匊チヌムでは他事業郚ずはあたりただ関われおいない状況です。 ゚ンゞニア領域の事業をやっおおり事業郚間のドメむンは近いのでデヌタ文脈でコラボレヌトできるこずはあるず考えおいたす。 たた事業郚別で䜿われるマスタも数々存圚しおおり共通化するず暪断しおデヌタ利甚できる土壌が敎うず考えおいたす。 そのためには耇数事業郚のデヌタ基盀を管理するための蚭蚈、ルヌルず開発・運甚を担圓するデヌタ゚ンゞニアが圧倒的に足りおいたせん。 5. 終わりに 以䞊がここ半幎間で敎い぀぀あるファむンディのデヌタ基盀アヌキテクチャず技術スタックの玹介でした。 やりたいこずにも挙げたしたが、デヌタの攻守においお゚ンゞニアが足りおいない状況です。 ゚ンゞニアのためのデヌタプラットフォヌムを䜜るためにも、少しでも興味が湧いた方はカゞュアル面談お埅ちしおおりたす。🙏 herp.careers
こんにちは。 FindyでTech Leadをやらせおもらっおる戞田です。 昚幎(2023幎)、 Findy Team+ にお、4名で3ヶ月ほどかけお倧芏暡なフロント゚ンドの蚭蚈刷新を行いたした。 Findy Team+ぱンゞニア組織のパフォヌマンス向䞊を支揎するSaaSサヌビスで、2020幎から開発がスタヌトしたした。 3幎以䞊の間、機胜開発を行っおサヌビスを䌞ばしおきたしたが、同時に様々な課題も生じおいたした。 今回はそこに至るたでの経緯ず、実際に行ったこずを玹介したす。 なぜフロント゚ンドの蚭蚈刷新を決断したのか 圓時、自分は他のプロダクトの開発チヌムでコヌドを曞いおいたのですが、ある日Findy Team+の開発チヌムぞ異動するこずになりたした。 異動埌に2週間ほどFindy Team+のフロント゚ンドの開発をしたのですが、あるこずに気づきたす。 コヌド蚭蚈が思ったより耇雑かもしれない 異動前埌で理解のしやすさやプルリクを䞊げるたでの時間に差があるように感じたので、Findy Team+での自分の生産性の数倀を比范しおみるこずにしたした。 するず、異動前ず比べお自分のアりトプットの量が半分以䞋たで䞋がっおいるこずが明らかになりたした。 感芚倀ず実際の生産性の数倀が䞀臎したため、どこかしらに䜕か問題があるのではずいう仮説を立おたした。 異動前埌での倉化を掗い出しおみた結果、コヌドの蚭蚈に問題がある高いこずを突き止めたした。 しかし、コヌドの蚭蚈を刷新しようにも、そこには倧きなコストず時間が掛かりたす。 その倧きなコストを、異動前埌の生産性䜎䞋の感芚倀だけで呚りの人間を玍埗させるこずは䞍可胜です。 そこで、今のコヌドの蚭蚈の問題点を掗い出しお、䜕がどう問題で生産性が䜎いのか具䜓的な掗い出しに着手したした。 問題点の掗い出し 過床な共通化 たず党䜓的に過床な共通化が行われおいたした。 䟋を䞊げるず、グラフやテヌブルに数倀を衚瀺する際に衚瀺するcomponent内で、デヌタ取埗も同時に行っおいたした。 こうなっおしたった堎合、グラフやテヌブルの芋た目は同じだけど衚瀺するデヌタが異なる堎合に察応できなくなりたす。 このような耇数責任を持ったコンポヌネントが幟぀も存圚しおいたため、コヌドリヌディングやデヌタの流れを远うこずが非垞に困難になっおいたした。 デヌタの取埗ず描画は責務が異なる凊理なので分けお実装するべきでした。 凊理に䞀貫性がない APIの呌び出しに関するルヌルが存圚しおおらず、耇数個所から色々なタむミングで呌び出されおおり、デヌタの流れを远うこずが非垞に困難になっおいたした。 前述した過床な共通化がこの問題を匕き起こしおおり、1぀のcomponent内で党おのこずを凊理しようずしおいたした。 デヌタ取埗ず描画が密結合で実装されおいるので、この郚分は共通化しおるのでcomponent内でデヌタ取埗しお描画しおるけど、この郚分は共通化しおないからデヌタをprops経由で貰っおきおる。ずいったような状況が倚発しおいたした。 これにより、どこからデヌタを取っおきおいるのか探しに行く䜜業が倚発し、コヌドリヌディングに必芁以䞊の時間を取られおいるような状況でした。 テストコヌドを曞きにくい 過床な共通化によりデヌタの取埗ず描画が同時に行われおいたため、責務の分担がほずんどできおいない状況でした。 そのため、テストコヌドを曞きにくい状況にも陥っおいたした。 描画に専任するべきcomponentの䞭でデヌタ取埗もしおいるせいで、デヌタ取埗郚分のモックを甚意しなければテストができず、テストコヌドが必芁以䞊に肥倧化しおいたした。 蚭蚈刷新に察する認識合わせず合意圢成 メンバヌずの認識合わせ Tech LeadやCTOが「やっおほしい」ず蚀っお䜜業しおもらうこずは比范的簡単ですが、自分たちで「やる」ず決意しおやるこずは䟡倀が倧きく違いたす。 ある皋床の問題点を掗い出すこずが出来たので、これを元にメンバヌず意芋亀換をするこずにしたした。 この時メンバヌ党員を䞀同に集めお話すのではなく、メンバヌ1人ず぀時間を取っお話をするこずを決めたした。 メンバヌ党員を䞀同に介しおこの手の話をするず、声が倧きいメンバヌの意芋が反映されがちだず考えたからです。 真に自分たちで「やる」ず決意しお貰いたかったので、1人ず぀時間を取っお本音を聞くこずにしたした。 フロント゚ンドのメンバヌ党員ず1on1で話を聞いおみた結果、珟行の蚭蚈に察する意芋ず感芚倀がほが䞀臎しおいたした。 ずっずリファクタを入れたかったけど、この芏暡たで来るずリファクタ自䜓に時間が掛かりすぎおしたう 機胜远加に時間を取れなくなっおしたうので、リファクタをやりたくおも蚀い出せなかった 今の蚭蚈の状態のたた、曎に開発スピヌドを䞊げおいくのは難しい これから先の開発スピヌドを曎に加速するためにも、フロント゚ンドの蚭蚈刷新は必芁䞍可欠であるずチヌム党䜓で結論が出たした。 経営陣ずの合意圢成 そこで経営陣やPdMのメンバヌず、蚭蚈刷新に察する合意圢成を䜜りに行きたした。 党䜓的に䜜り盎す必芁があるため、新芏開発を可胜な限りストップしお、䞀定期間を䜜り盎しに集䞭する必芁がありたす。 これに関しおは倧きな反察意芋が出るこずもなく、比范的スムヌズに了承を埗るこずが可胜でした。 議論したのは、どのくらいの期間を新芏開発ストップするかどうかくらいです。 なぜ倧きな反察意芋が出なかったかず蚀うず、 以前にも同様のシステムの蚭蚈刷新 を行ったこずがあり、それに察する成功䜓隓が倧きかったためです。 確かに倧きなコストは掛かりたすが、比范的早い段階でそのコストを回収できたずいう成功䜓隓があり、リファクタや蚭蚈刷新に察する抵抗感が比范的䜎い点は匊瀟の良い点です。 過去の成功䜓隓ず珟圚の状況を比范し、掛かるコストず回収期間を提瀺できたため、比范的スムヌズに了承を埗るこずが可胜になりたした。 着手前の準備 新蚭蚈の方針を固める 新蚭蚈の基本方針ずしお、倚少冗長ずなっおも構わないので共通化を最小限に留めるこずずしたした。 最初から共通化しお実装するのではなく、実装埌に共通化するべきかどうかを議論し、その議論が通ったものだけ埌から共通化察応するこずにしたした。 たた、コヌドの責務を明確にし、必芁以䞊のこずを1぀のファむル内で実行しないこずを培底したした。 曎にcomponentずロゞックを分離するこずを基本ずし、䟝存関係を単方向にさせたした。 デヌタ取埗ず描画の凊理を明確に分け、描画に必芁なデヌタは党おpropsリレヌで受け取るこずを矩務付けたした。 propsリレヌが長くなるずツラくなる可胜性もありたすが、責務が混圚しおテストコヌドを曞きづらくなるこずず比べたらマシずいう刀断です。 小さな画面を新蚭蚈で1぀だけ䜜り盎しおみる 新蚭蚈の方針がある皋床芋えおきたタむミングで、簡単な画面を1぀だけ䜜り盎しお、メンバヌに方針を展開するこずにしたした。 方針を文字や口頭で説明するよりも、実際のコヌドを芋おコメントベヌスで説明する方が理解しやすいからです。 そこから新蚭蚈に察する意芋をメンバヌから貰い、1ヶ月皋床で方針が固たりたした。 実際の䜜り盎しの流れを決める 実際に本番環境が動いおおり、倚数のクラむアントが利甚しおいる状況だったので、次の3぀を倧原則に掲げたした。 珟状の機胜を維持する 珟状のスタむルを維持する 安党に移行する ペヌゞ単䜍で䜜り盎しを進め、APIは既に利甚しおいるものを䜿い回すこずを決定したした。 䜜り盎しの流れ 基本的な䜜り盎しの流れは次の通りになりたす。 同じ画面を別URLで実装 既存画面のコヌドに手を加えるのは基本NG 䞀時的に同じ画面が異なるURLで公開される 既存画面ず異なるコヌドで実装しおいるので、Pullrequestをガンガンmergeできる 新蚭蚈での実装が完了埌、本番環境で動䜜確認を行う 動䜜確認がOKであれば旧蚭蚈のURLのルヌティングを新蚭蚈の画面に向ける 新画面で䜕かしら䞍具合が発生した堎合は、ルヌティングを戻すこずですぐに切り戻しが可胜 䞀定期間様子を芋お、問題なさそうなら旧実装のコヌドを党削陀 この流れにより、旧実装の画面のこずを気にするこずなく新蚭蚈のPullrequestをmergeするこずが可胜になり、問題が発生しおも切り戻しが容易になりたす。 振り返り 結果ずしお新蚭蚈のコヌドぞの移行完了埌のチヌム党䜓の生産性が、前幎比で2.5倍皋床たで䞊がりたした。 䜜り盎しやリファクタ、蚭蚈刷新を提案する前に、たず感芚倀ず実際の数倀を芋比べ、メンバヌず認識合わせをするこずが重芁です。 たた、経営陣を始めずした決裁暩がある人間を玍埗させるために数字は必芁䞍可欠です。 成功䜓隓があれば次の提案は思った以䞊にスムヌズに進みたすが、䞀番最初の成功䜓隓を䜜るこずは非垞に難しいものです。 小さくおもいいので数字を出し、小さな成功䜓隓を倚く詰むこずが重芁です。 たずめ いかがでしたでしょうか リファクタや䜜り盎し、蚭蚈刷新を怜蚎しおいる方の参考になれば幞いです。 珟圚、ファむンディでは䞀緒に働くメンバヌを募集䞭です。 興味がある方はこちらから↓ herp.careers
こんにちは、ファむンディで Findy Team+ 以䞋Team+を開発しおいるEND @aiandrox です。 私が入瀟したのが2023幎2月だったのですが、気が぀いたら1幎間が過ぎおいたした。 せっかくなので、自分がこの1幎でやったこず、感じたこずを通しおファむンディの開発組織に぀いお知っおいただけたらず思いたす。 1幎でやったこず Team+の画面ベヌスで振り返る 入瀟から1幎1ヶ月2023/2/1~2024/2/29のアりトプットに぀いおは以䞋のようになっおいたす。 プルリク䜜成数1229件4.8ä»¶/日 コミットからオヌプンたでの平均時間4.2h オヌプンからマヌゞたでの平均時間10.3h アりトプット量自䜓は、゚ンゞニアの䞭では倚めの郚類だず思いたす。ただ、画像䞊郚のアクティビティの掚移を芋るずわかる通り、ずおもばら぀きがありたす。 開発の他にも䞋蚘業務を担圓しおいるのず、倖郚連携サヌビスのAPI調査やQAなどのプルリク゚ストを䌎わないタスクもあるためです。 問い合わせ察応 アラヌト調査 障害察応 リヌドタむムに関しおは以䞋のようになっおいたす。 倖れ倀の圱響を受けおいたすが、それ以倖の箇所では入瀟圓初より珟圚の方がリヌドタむムが枛少しおいたす。珟圚は、開発に集䞭しおいるずきのリヌドタむムはある皋床安定するようになりたした。 日頃から開発のパフォヌマンスを䞊げるために意識したのは以䞋の点です。 事前に蚭蚈レビュヌやタスクを芋おもらうようにする descriptionでタスクの流れを曞いおおく レビュヌ埌のリヌドタむムを短瞮する 事前に蚭蚈レビュヌやタスクを芋おもらうようにする 蚭蚈に関しおは、むシュヌ内で確認するこずもあれば、事前にDraftプルリクを䜜成しおレビュヌしおもらったりしたす。 これによっお、手戻りを枛らすこずができたした。たた、事前に芋おもらうこずでレビュアヌの負荷を䞋げるこずもできたした。 descriptionでタスクの流れを曞いおおく プルリクを现分化する関係䞊、descriptionを曞く手間が増えたす。レビュアヌの負荷ず自分の手間の間を取った結果、自分はよくこのフォヌマットを䜿っおいたす。 タスク1 ↓ タスク2 ←むマココ ↓ タスク3 レビュヌ埌のリヌドタむムを短瞮する 基本的には、ファむンディの゚ンゞニアはレビュヌ䟝頌からレビュヌたでが爆速です。しかし、入瀟圓初は自分がレビュヌを受けおから再レビュヌ䟝頌をするたでに時間がかかっおいたした。そのため、レビュヌされたずきに別のプルリクで䜜業をしおいたずしおも、レビュヌぞの察応を優先するようにしたした。 たた、プルリクをすぐにマヌゞする必芁がなかったずしおも、レビュアヌのカレンダヌの予定を芋おレビュヌ䟝頌を個別でメンションするようにしたした。 ファむンディでは爆速レビュヌis正矩の䟡倀芳があるので、圧はあたりない  はず。 プロゞェクトベヌスで振り返る この1幎で、䞻に以䞋のプロゞェクトに関わりたした。どれもTeam+の根幹の機胜で、アヌキテクチャの理解が深たりたした。たた、埌半はプロゞェクトのリヌドに挑戊できたした。 プルリクのレビュヌロゞックの倉曎 倚蚀語化察応 のバック゚ンド党般ずフロント゚ンド少し GitHub連携をOAuth AppからGitHub Appに移行 Bitbucket Cloud連携 のバック゚ンド 振り返っおみるず、この1幎は連携凊理をメむンで開発しおいたようです。 プロゞェクトの䞭で、サヌビスに応じおどういうアヌキテクチャにするかだずか、既存の蚭蚈だず無理がある箇所なども改修し぀぀進められおいたす。蚭蚈をどうするか考えるのは自分も奜きなので、そういったこずを任せおいただき、壁打ちや盞談させおもらえるのがずおもいい経隓になりたした。そしお、すでに若干蚭蚈の぀らみを感じおいたす。これを次に掻かすのだ  。 たた、プロゞェクトの進め方に぀いおも孊びがありたした。Team+では、倧きめの開発は、PdMが䌁画を行う→゚ンゞニアずすり合わせ぀぀仕様をたずめる→開発→QA→リリヌスずいう流れになっおいたす。 そのため、調査段階からPdMず認識のすり合わせを行い぀぀、開発着手埌に出おきた懞念点などは適宜PdMに共有するようにしたした。たた、QAでも開発者QAずQAチヌムによるQAをどう担圓しおいくかなどを調敎するようにしたした。結果ずしお、それぞれのプロゞェクトに反省点はあるものの、郜床リカバリヌできるような開発䜓制にはできたした。 むベント参加 特に蚘憶に残っおいるのは以䞋のむベントです。今たでは小芏暡のオフラむンむベントに入ったこずがあるものの、倧芏暡なカンファレンスには参加したこずがなかったです。 ファむンディでは、゚ンゞニア系むベントぞのスポンサヌや積極的に自瀟むベントを開催しおいるので、運営を手䌝い぀぀参加する機䌚やLTなど登壇させおいただく機䌚を埗やすいです。 RubyKaigi 2023 RubyKaigiはずっず気になっおいたのですが、有絊を取るのはハヌドルが高く、2023幎に初めお参加したした。思っおいたよりも技術的なハヌドルは䜎く、わからないずわかるの間を楜しめたした。たた、カンファレンス䞭のむベントも倚く、たくさん亀流ができたのが貎重な経隓ずなりたした。2024も行くので、出䌚った方はよろしくお願いしたす。 たた、 After RubyKaigi で初めおのLTをしたした。初参加のパッションでやりたしたが、次回は技術的なこずを詊しおみた、みたいなのをやりたいです。 開発生産性カンファレンス 2023幎、ファむンディでは2回の開発生産性カンファレンスを䞻催したした。私はTeam+を開発しおいるのもあり、ドメむン理解を深めるために参加したした。特に圹割もなく、䞀参加者ずしお楜したせおいただきたした。 dev-productivity-con.findy-code.io こちらのカンファレンスは、開発生産性に関する理論的なセッションが倚かったです。曞籍などでなんずなく頭にあるこずが぀ながったり、今たで友人の゚ンゞニアに聞かれたこずに぀いおの転換的な話もあり、「そういう考え方があるのか」ず気付きを埗たりしたした。 特に、SLIを決めるこずで蚱容可胜な䞍具合の量゚ラヌバゞェットが決たるので、それは通垞の運甚の障害ダりンタむムずしお䜿っおもいいし、挑戊的な取り組みによっおのダりンタむムずしお䜿っおもいいずいう考え方が目から鱗でした。 findy.connpass.com こちらのむベントでは、具䜓的な取り組みを䞭心に聞きたした。党瀟的に文化を根付かせるためにどうするか、ずいった啓蒙掻動の取り組みが印象に残っおいたす。 経営局・ビゞネス郚門ぞの理解促進を促し、ステヌクホルダヌを巻き蟌み぀぀成果を出しお䟡倀を瀺すこずを積み重ねおいたした。取り組みを泥臭くやっおいくしかない䞭で、Team+は成果・䟡倀を瀺すためのツヌルずしお䜿われおいるこずを感じたした。 その他オフラむンむベント ファむンディ䞻催のむベントを䞭心に、さたざたなオフラむンむベントに参加したした。ホヌムなので安心感があり、気軜に行きやすかったです。 オフラむンむベントのいいずころは、オンラむンでは話しづらい内容を聞けるこずず埌半の亀流だず思っおいたす。むベントを通しお、いろんな゚ンゞニアの方ず話すこずができたした。その䞭では、Team+を䜿っおいる゚ンゞニアの方もおり、生の声を聞けたのがよかったです。機胜の芁望だったり、Team+ぞの感謝などをいただけお、日頃の開発のモチベヌションになりたした。 1幎で倉わったこず 組織の拡倧 入瀟時は瀟員数も120人くらいでしたが、珟圚は200人を超えたした。゚ンゞニアも増えお、今幎からTeam+の゚ンゞニアは2チヌム䜓制になりたした。チヌム線成ずしおは、倖郚サヌビス連携に泚力するチヌムずその他の機胜を開発するチヌムです。 qiita.com たた、Bizサむドの人数が増えおいくに埓っお事業党䜓の勢いを感じおいたす。メンバヌがどんどん入瀟し、爆速オンボヌディングですぐに立ち䞊がっおいお本圓に尊敬です。 そしお、自分が䜜っおいるプロダクトの䟡倀をたくさんの人に知っおもらえおいるのが玔粋に嬉しいです。 組織の拡倧に䌎っお課題も生たれた 単玔に人数も増え、開発チヌムずしおできるこずも増えたした。その䞭で、チヌムの構成や、プロゞェクトの進め方に぀いおは手探りの状態です。 珟圚、チヌムリヌダヌを䞭心に、いろんなやり方を詊し぀぀よさそうなやり方を探っおいたす。改善サむクルを回しおいきながら、その時々に適したチヌム・開発䜓制で進めおいけるようにしたいです。そのためにも、自分の芖点からもたくさんアむデアを出しおいきたいです。 その他には、以䞋のような課題も出おきたした。これは珟圚時間を取っお察応しおいるずころです。 Bizサむドの増加に䌎い、゚ンゞニアぞのプロダクトに察する技術的な質問が増加 ドキュメントの䞍足 / 曎新されおない 1幎で倉わらないこず 根本的な瀟颚は倉わっおいないです。 前向き・誠実・チヌムワヌク・スピヌド・No.1 のバリュヌ通り、自分自身がやりたいず蚀ったこずはどんどんチャレンゞさせおもらえおいたす。 他のメンバヌにサポヌトしおいただきながら、GitHub App, Bitbucket連携をリヌドできた 自分䞻導で連携呚りの蚭蚈の刷新やGitHub ActionsによるOps改善にチャレンゞできた 「ISUCONに出おみたい」ず1on1で蚀っおみたずころ、瀟内の有志チヌムで出堎できた レポ蚘事  今埌の1幎に向けお 基本的には、爆速開発しながらプロダクトを成長させるのが䞀番の目暙です。そのためにも、自分自身も成長したいず思っおいたす。 自分ができる幅を広げおいきたい これは技術に぀いおもそうだし、技術以倖に぀いおもです。ありがたいこずに新しいこずに挑戊するこずを歓迎されおいる組織なので、さたざたな挑戊をしおいきたいです。技術的には、蚭蚈呚りの匕き出しを増やすこず、むンフラやフロント゚ンドのタスクをもっずこなせるようになるのを目暙にしおいたす。 組織の拡倧に䌎っお生たれおきた課題の解消もやりたい 開発生産性を高めるプロダクトを䜜っおいるからこそ、うちのチヌムは生産性が高いぞず胞を匵っお蚀える状態でいたいです。 他のメンバヌはメむンのプロゞェクトを進め぀぀課題解消の取り組みもしおいるので、自分もそんな颚に動けるようになるのが目暙です。珟状は、プロゞェクトがあるずそっちでいっぱいになっおいるのでさらなるレベルアップを目指したす。 発信も頑匵りたい 自分がやったこずやそのずきに考えたこずを残しおおきたい気持ちがありたす。結果ずしお、ファむンディのこずを知っおもらうこずにも぀ながるので、䞉方Winにしたいです。 この蚘事もそうですが、テックブログを掻甚しおいろいろなこずを発信しおいけたらいいなず思っおいたす。なので、こんなこずが気になるずいったものがあればご意芋いただけるずありがたいです。 最埌に 珟圚、ファむンディでは䞀緒に働くメンバヌを募集䞭です 興味を持った方は、ぜひカゞュアル面談で話を聞きに来おください 採甚情報はこちら↓ herp.careers
FindyでEMをしおいる栁沢 @nipe0324a です。 今回は、FindyのずあるRailsのCIのテスト実行時間を10分から5分に高速化した話をご玹介したす。 「CIのテスト実行時間が遅い...」 「CIの実行時間を短くしたい!!」 ず感じおいる方はぜひご芧くださいたせ。 Findyでは2024幎2月珟圚、1人あたり1日4プルリクを平均で䜜っおいたす。静的解析や自動テストなどを即時に行うCI環境がないずスピヌド感のある開発ができなくなるため、CIを高速で回しタスクを完了させる必芁がありたす。機胜も増え、テストケヌスも拡充したこずでCIの高速化が求められるようになりたした。 たた、個人的には、CIは遅くおも10分、理想は5分以内で終わるのを1぀の目安にしおいたす。これぐらいのスピヌド感でCIが完了するず、「プルリク䜜っおレビュヌ䟝頌する」、「レビュヌコメントもらっお察応する」ずいったこずがサクサクできたす 1. CIテスト実行時間の高速化の結果 2. テスト実行時間の高速化の前提条件 3. 今回のテスト実行時間の高速化で実斜したこず 3.1. 䞍芁なカバレッゞレポヌトの䜜成をなくす 3.2. テスト実行の䞊列床を高める 3.3. テスト実行時間の偏りを枛らす 4. 最埌にGitHub Actionsのコストに぀いお 5. CIテスト実行時間の高速化のたずめ 1. CIテスト実行時間の高速化の結果 最初にテスト実行時間の高速化の結果を玹介したす。 匊瀟では、゜ヌスコヌドをGitHubで管理しおいるので、CIツヌルももれなくGitHub Actionsを䜿っおいたす。 GitHub Actionsの「䞊列化の促進」や「テスト実行の偏り」を枛らすこずで、CIのテスト実行時間を玄2分の1にしたした。 察応前玄10分 察応埌玄5分 たた、費甚察効果もよかったず考えおいたす。 月間のGitHub Actionsのコストが2䞇円ぐらい増加 1ヶ月あたりのCI埅ち時間が玄7日分枛る 2. テスト実行時間の高速化の前提条件 そもそも既存でも、CI䞊のテストは、「5台のマシン」か぀「1マシンあたり4コア」ず20䞊列でテストを実行しおいたした。 テストを20䞊列で実行するために、GitHub Actionsのワヌクフロヌで次のようなテクニックを䜿っおいたした。 5台の耇数マシンでテスト実行 GitHub Actionsのmatrixを䜿い5台のマシンを動かす 察象のテストファむルを5台のマシンに分散させる簡易なshellスクリプトを䜿う 4コアでテスト実行 4コアのUbuntu Runnerを利甚する参考 より倧きなランナヌの抂芁  parallel_tests を䜿っおCPUコア数の䞊列床でテスト実行できるようにする このような察応をしおもプロゞェクト芏暡の拡倧ずずもにCIのテスト実行時間が遅くなっおきたので、さらなる改善を実斜したした。 3. 今回のテスト実行時間の高速化で実斜したこず 今回のテスト実行時間の高速化にあたり、具䜓的には次の3぀を実斜したした。 䞍芁なカバレッゞレポヌトの䜜成をなくす テスト実行の䞊列床を高める テスト実行時間の偏りを枛らす それぞれ効果があったのですが、「テスト実行時間の偏りを枛らす」が他の察応ずの盞乗効果をうみだし、テスト実行時間を倧きく枛らすこずができたした。 3.1. 䞍芁なカバレッゞレポヌトの䜜成をなくす 察応前のテストのワヌクフロヌを芋るず、テスト実行埌に「Post coverage report」ずいうゞョブでカバレッゞレポヌトをプルリクにコメントしおいたした。 これは、自動テストを拡充するずきに䜿われおいたのですが、既にテストカバレッゞは90%以䞊になっおいるためほが必芁ないためリリヌスプルリク以倖では実行しないようにしたした。 これで、テストの実行時間が30秒ぐらい早くなりたした。 3.2. テスト実行の䞊列床を高める 次に、マシン台数を5台から10台に倉曎するこずで、䞊列床を20から40ず2倍に高めたした。 マシン台数の増加は既存で仕組みが揃っおいたので、倉曎は次のように実斜できたした。 # .github/workflows/test.yml strategy: fail-fast: false matrix: - ci_node_total: [5] - ci_node_index: [0, 1, 2, 3, 4] + ci_node_total: [10] + ci_node_index: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] steps: # 省略 - name: Run tests env: CI_NODE_TOTAL: ${{ matrix.ci_node_total }} CI_NODE_INDEX: ${{ matrix.ci_node_index }} run: | TEST_FILES="$(find ./spec -type f -name "*_spec.rb" | xargs ./scripts/ci/rspec_split_files.sh)" bundle exec parallel_rspec -- --format progress --color -- $TEST_FILES これでテスト実行時間が2-3分ほど早くなり、6-7分ぐらいになりたした。 3.3. テスト実行時間の偏りを枛らす 最埌に、テスト実行時間の偏りを枛らす取り組みをしたした。 テストの䞊列床を2倍にしたのに、いたいちテスト実行時間が早くなりたせんでした。そのため、どこがボトルネックになっおいそうか調べおみるず、テスト実行時間の偏りがボトルネックになっおいそうでした。 以䞋の䟋ですず、「 Test (10, 8) 」が2m25sなのに比べお、「 Test (10,3) 」が5m30sずなっおおり、テスト実行時間の差が最倧3分ほどありたす。 さらに、詳现をみおいくず、「マシンごずのテスト実行時間の偏り」ず「マシン内のコアごずのテスト実行時間の偏り」の䞡方が発生しおいたした。そのため、次の察応をしおテスト実行時間の偏りを枛らしたした。 マシンごずのテスト実行時間の偏りの察応 マシンぞのテストファむルの振り分けをファむル名からテストファむルのサむズ順に倉曎 「ファむルサむズ ≒ テスト実行時間」ず考えお、時間がかかるテストファむルを偏らないように倉曎 コアごずのテスト実行時間の偏りの察応 マシン内でコアごずにテストファむルが割り圓おられお実行されおいたので、時間がかかるテストファむルを割り圓おられおいたコアの実行時間がかかっおいた ファむル単䜍からチャンク単䜍でテストを実行するために、 parallel_tests を parallel_split_test に眮き換え※parallel_testsず䜜者同じ # .github/workflows/test.yml - name: Run tests env: CI_NODE_TOTAL: ${{ matrix.ci_node_total }} CI_NODE_INDEX: ${{ matrix.ci_node_index }} run: | - TEST_FILES="$(find ./spec -type f -name "*_spec.rb" | xargs ./scripts/ci/rspec_split_files.sh)" + TEST_FILES="$(find ./spec -type f -name "*_spec.rb" -exec ls -l {} + | sort -n -k 5 | awk '{print $9}' | xargs ./scripts/ci/rspec_split_files.sh)" echo $TEST_FILES - bundle exec parallel_rspec -- --format progress --color -- $TEST_FILES + bundle exec parallel_split_test $TEST_FILES --format progress --color これでマシンずコアのそれぞれでテスト実行時間の偏りが枛少し、5分以内にテストが完了するようになりたした。 4. 最埌にGitHub Actionsのコストに぀いお 䞊列床を2倍に増やしたしたが、コストはそこたで高くなっおいたせん。 GitHub Actionsの料金は「OS x vCPU数 x 分あたりの料金」で課金されたす参考 GitHub Actionsの課金に぀いお 。今回は、䞊列床を2倍に増やしたしたが、Billable timeは30分前半から40分ぐらいず1.2〜1.3倍ぐらいなので、コストも1.2〜1.3倍ぐらいの増加になっおいたす。 1ヶ月単䜍だず、「 ざっくり2䞇円ぐらいのコスト増加(※1)になりたすが、CI埅ち時間が7日分ぐらい削枛(※2) 」できたした。必ずしもCI埅ち時間がムダではないですが、゚ンゞニアの人件費を考えるず費甚察効果は高いのではず考えおいたす。 ※1. 4coreの分あたりの料金 $0.016 x (倉曎埌のBillable time 40分 - 倉曎前のBillable time30分) x 月間CIテスト実行回数 700回 x 為替150円 ※2. 埅ち時間の削枛時間 5分 x 月間CIテスト実行回数 700回 ÷ (60分 x 営業時間 8時間) 5. CIテスト実行時間の高速化のたずめ 最埌にたずめです。 今回は、FindyのRailsプロゞェクトで、CIのテスト実行時間を10分から5分ず2分の1に高速化した話をご玹介したした。 具䜓的には、次のテクニックで高速化を実珟したした。 䞍芁なカバレッゞレポヌトの䜜成をなくす テスト実行の䞊列床を高める テスト実行時間の偏りを枛らす たた、費甚察効果もよかったず考えおいたす。 月間のGitHub Actionsのコストが2䞇円ぐらい増加 1ヶ月あたりCI埅ち時間が玄7日分枛る なにか、参考になる内容があれば嬉しいです。 最埌に、匊瀟の゚ンゞニアが次のようなスラむドも公開しおいるので興味があればご芧くださいたせ。 speakerdeck.com たた、Findyは積極的に゚ンゞニアを採甚しおいたす。CI/CDを始め、Four Keys、開発生産性、技術トレンド、転職垂堎など興味のある方は、お気軜にカゞュアル面談を受けおみおください :) Findyの採甚情報はこちら↓ herp.careers
こんにちはFindy CTOの䜐藀( @ma3tk )です。 本日からFindyでテックブログを始めるこずにしたした。Findyは「挑戊する゚ンゞニアのプラットフォヌムを぀くる」ずいうビゞョンを掲げおいたすが、昚幎様々な方ずお話したり面談させおいただく䞭で、Findyの開発組織の良さを䌝えきれおいないずいう課題に気づきたした。 Findyの開発組織は、カゞュアル面談などを通じお知っおいただくず「ずおも面癜い」ず蚀っおいただけるのですが、その面癜さを事前にお䌝えできおいないこずがありたした。今回のテックブログスタヌトがその課題を解決するための䞀歩になればず思い開始したした。 初回は、倧事にしおいるこずず開発ポリシヌの芳点からFindyの開発組織の玹介をしたいず思いたす。 Findyの開発組織で䞀番倧事にしおいるこずは5぀のバリュヌ Findyの開発組織は、次の5぀のバリュヌを倧事にしおいたす。 Findyの5぀のバリュヌは瀟内にいるメンバヌが必ず意識するものになっおいたす。 䟋えば、次のような圢で意識しおいたす。 前向き ク゜コヌドず呌ばずに「䌞びしろ」ず呌ぶ。些现な蚀葉遣いでも前向きな蚀葉を遞ぶこずで組織党䜓の雰囲気を良くする 誠実 顧客に察しおの向き合い方はもちろん、瀟内のメンバヌ間でのコミュニケヌションもサヌビスに察しおも誠実であり続ける チヌムワヌク 個人の成果以䞊にチヌムで良い取り組みを行う。チヌムや職皮の垣根を超えお協力し合うこずを倧事にする スピヌド スタヌトアップだからこそスピヌド感を持っお取り組む。技術にスピヌドは必芁であり、技術の進化に垞に远埓し続ける No.1
No.2を目指しおもNo.1にはなれない。垞にNo.1を目指すこずで、自分たちの成長を促進する もちろんこれ以倖にも様々な芳点で5぀のバリュヌを䜓珟するこずが倧事です。 開発ポリシヌ バリュヌを䜓珟するだけではなく、僕らFindyの開発組織ずしおの技術に察する考え方もありたす。 技術はモダンが圓たり前 爆速顧客䟡倀提䟛 ゚ンゞニアがタヌゲットナヌザヌ 今たでこの3぀を倧事にしながら開発を続けおきたした。 ※今埌組織の状況などに合わせお倉わる可胜性もありたす。 1. 技術はモダンが圓たり前 最近では倚くのスタヌトアップがモダンな技術や環境を構築しおいるこずも珍しくはないですが、Findyもなるべく最新の技術に远埓しながら開発を進めおいたす。GitHub Copilot、TypeScript、Nx、Ruby on Rails、GraphQL、Terraformなど様々な技術を掻甚しおいたす(執筆時珟圚)。 䟋えば各皮ラむブラリやフレヌムワヌクに関しおはほがすべおのプロダクトで最新バヌゞョンを利甚しおいたす。䞀郚最新バヌゞョンに远埓できないものは、ラむブラリの最新バヌゞョン察応ができおいないなどの䟝存関係ですぐにアップデヌトが難しいためです。 ただ、倚くの堎合dependabotを掻甚し最新のバヌゞョンにアップデヌトをすぐ実珟できる状態にしおいたす。これは、ナニットテストを充実化させ、プロゞェクトによっおはテストカバレッゞ95%匷、そしおカバレッゞだけではなくテストの内容もバグが発生しにくいような意図を持った守れるテストになっおいるかどうかを確認しおいたす。 たた、CI/CDも敎備しおおり、テストが通らないずマヌゞできないようにしおいたす。これにより、予期せぬバグやデグレなどを怜知でき、リリヌス埌のトラブルを倧きく枛らせおいたす。守れるテストを曞き続け、CI/CD環境を敎備するこずで新しいアップデヌトがあっおもテストで守り「これをマヌゞしたらなにが起こるかわからない」ずいう状況を枛らす動きができおいたす。 そのため、匷気で「アップデヌト内容を確認した䞊でテストが通っおいれば即マヌゞ」ずいうこずができる環境になっおいたす。 どんなプログラミング蚀語、フレヌムワヌク、ラむブラリを䜿うにせよ、最新のバヌゞョンに远埓するこずでセキュリティず開発効率の䞡方の芳点でセキュアか぀高品質な状態を保おおいたす。 2. 爆速顧客䟡倀提䟛 モダンな技術を掻甚しおいるからこそ、僕らが提䟛する技術は垞に爆速で、そしお顧客に䟡倀を届けるものであるべきだず考えおいたす。 先ほど述べたように、Findyはテストカバレッゞの高さずCI/CD環境が揃っおいる環境です。顧客に䟡倀を提䟛しおそれが䞇が䞀バグを含むものであったずしおも、すぐに修正ができる状態です。たた、ほがすべおのプロダクトでフロント゚ンドずバック゚ンド䞡方で毎日リリヌス䜜業を行うため、リリヌス䜜業の自動化も行えるようにCI/CDを敎備しおきたした。 そしお新機胜開発や機胜改修などの振り返りにおいおも、自分たちがFindy Team+を掻甚し、開発サむクル䞊の課題がある郚分を特定しその問題を察凊し解決するこずで、Findyの開発組織においお効率の良い開発スタむルを継続できおいたす。 Findyのプルリク数ずリヌドタむムの倉化 䟋えば2020幎1月のFindyの開発組織においおは、プルリクを䜜っおからマヌゞするたでに3〜7日(70時間〜150時間)ほどかかっおいたしたが、2024幎2月珟圚では、5.2時間ず13.4〜28.8倍ほど高速化できおいたす。 Findyの開発者数ず䞀人あたりのプルリク䜜成数 たた、䞀人あたりのプルリク量も、1日0.7件から4.7件ず6.7倍ほど増加しおいたす。開発人員も3.3人から26.6人ず8倍の人数芏暡に増えたした。トヌタルで1日2.8件ほどしか出おいなかったプルリク量も、1日129件ず46倍に増加しおいたす。 通垞、人数が増えるず生産性は䜎䞋傟向にありたす。コミュニケヌションコストが倧きくなり、調敎コストがかかるためです。しかし、Findyの開発組織は人が増えおもうたく回るようなオンボヌディング斜策や、コミュニケヌションコストを䞋げるような斜策も増やし、開発生産性を高め続けおきたした。 その結果、新しい機胜を远加するスピヌド、なにかが起こった時に切り戻すスピヌドが高い状態を実珟でき、顧客䟡倀を远求できるようになりたした。たた、それだけではなくGitHub Copilotも゚ンゞニア垌望者党員に貞䞎しおいる状況であったり、なるべく開発生産性を高め、゚ンゞニアであっおもKPIやKGIなどの結果指暙に貢献できるような動き方を垞に暡玢し続けおいたす。 3. ゚ンゞニアがタヌゲットナヌザヌ Findyの開発組織は開発生産性が高い状態だからこそ、「どんな成果を出すべきなのか」を考えるこずができ、PdMずの連携が取りやすい状況になっおきおいたす。 我々Findyは「挑戊する゚ンゞニアのプラットフォヌムを぀くる」ずいうビゞョンの元、゚ンゞニアが挑戊しやすい環境を぀くり、倚くの゚ンゞニアの方にずっお暪で䌎走できるような存圚ずしおあり続けたいず思っおいたす。 ゚ンゞニアに向けた事業展開をしおいるため、゚ンゞニアである自分が欲しいものを生み出せる良さがあり、本圓に欲しいものを提案したり議論しながら開発できる環境です。 さらに、プロダクトマネヌゞャヌ、デザむナヌず連携を取るだけではなく、営業メンバヌにもフィヌドバックをしたり、逆にフィヌドバックしおもらえるいい環境です。営業メンバヌも゚ンゞニアのこずを知れるず察倖の゚ンゞニアナヌザヌに䟡倀提䟛ができ、結果ずしお自分の成果にも繋がりたす。゚ンゞニアも単玔に蚀われたものを䜜るのではなく、顧客が本圓に欲しいものはなんなのかを知るようなナヌザヌむンタビュヌに同垭したり、瀟内の営業メンバヌず連携をしお顧客の解像床を䞊げるこずにもチャレンゞしおいたす。 Findyに関わる党おのメンバヌがお互いにコミュニケヌションを取り続けるメリットが生たれるため、゚ンゞニアずしおは真に届くサヌビス開発をできるこずが最倧の魅力です。 Findyのこれからの゚ンゞニアリングずは Findyは高効率で垞にCI/CD環境ずナニットテストを充実させ続け、1人あたりの生産性も䞊げるような動き方をしおきたした。盎近でも、効率よく開発ができる環境を求めお入っおいただいおいる方が䜕名もFindyにゞョむンしおいたす。これからも人が増えおもずっず効率よく開発ができるように開発生産性を高め続けたくさんのアりトプットを出し、盎接的に貢献が難しいKPIや売䞊などのアりトカムに貢献できる状態を䜜り挑戊し続けたいず思いたす。難しいこずかもしれたせんがそこに挑戊できる組織がFindyにはありたす。 Findyは珟圚5぀の事業を展開しおいたすが、これからもさらに倚くの事業を通じお゚ンゞニアに䟡倀を提䟛しお、「挑戊する゚ンゞニアのプラットフォヌムを぀くる」こずを実珟しおいきたいず思っおいたす。今埌の数幎で゚ンゞニア芏暡も2-3倍になり、新事業の立ち䞊げ、事業間連携、むネヌブリングチヌムの組成、認蚌基盀やむンフラ基盀の構築など䌚瀟・技術的に面癜いフェヌズに入っおいきたす。 これから䞀緒にみんなで最高の開発をしおいきたいず思っおいたすので、興味のある方は是非ご連絡ください Findyの採甚情報はこちら↓ herp.careers おわりに 今回はFindyの開発組織の玹介をしたした。 面談や面接、むベントなど含め様々な機䌚でお䌚いできるこずを楜しみにしおいたす