TECH PLAY

Findy/ファむンディ

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

å…š210ä»¶

こんにちは、あるいはこんばんは。 @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の開発組織の玹介をしたした。 面談や面接、むベントなど含め様々な機䌚でお䌚いできるこずを楜しみにしおいたす