🏝

Leaner開発合宿2022 in 沖縄

ハイサイ!
Leaner Technologies でプロダクト開発をしている @corocn です。

先日弊社の Dev チームで開発合宿に行ってきました。
沖縄で合宿をしたい方の参考になればいいなと思い、振り返りをチームで共同執筆しました。

🎯合宿の目的

Leaner は地方フルリモート勢が多く在籍していて、私が入社して 1 年弱経って一度もエンジニアで集まったことがない状態でした。エンジニアは基本的に自宅に引きこもって開発をしているので、

「たまには気分変えて集まって仕事しようぜ!」

ということで企画をぶちあげました。また、年明けから全力で開発していた大きめな機能リリースが終わったタイミングだったので、イベントをやるにはいいタイミングでした。


宿泊先近くのビーチ

💻合宿の内容

以前所属していた会社の合宿を参考に、ちょっとした採用観点をプラスしました。

  • ハッカソン的にプロダクトの改善をやる
  • 現地の知り合いのエンジニア誘ってご飯を食べに行く

特に地方エンジニアの方とご飯を食べられる機会はなかなかないので、中長期的な仲間探しの観点でも積極的にお誘いしてご飯を食べに行くのは良いですね。地元民オススメのお店を紹介してもらったりして、合宿全体の満足度も上がりました。


沖縄そば

🗓日程と場所決め

参加人数と居住地でプランが全然変わるので、2 ヶ月ほど前から動き始め日程を決め、参加者を確定、場所を確定の流れで決めていきました。

東京近郊に集まっても良かったのですが、Leaner は地方リモート勢が多いため、東京本社に集まると新幹線代とホテル代で実は結構お値段かかります。参考までに私の場合、新幹線と在来線の往復だけで 25000 円ぐらいかかります。 時期を外せば LCC 航空券で地方に格安で移動できるので、今回は沖縄にしました。

沖縄だと各地からのアクセスもよく、リゾート地なだけあって貸別荘などホテルの選択肢も豊富 & ホテル代も圧縮できるので、オススメですね。


何かの達成感に満ち溢れているCEO

👏チーム決め

家庭の事情でリモート参加なメンバーもいたので、現地 2 チームとリモート 1 チームで編成しました。現地組とリモート組を混在させようか迷ったのですが、チーム単位で行動しにくいので、割り切って現地とリモートで分けました。

本当はセールスサイドのメンバーも誘ってチームが組めるといいかなと思っていましたが、予定合わずで、CEO と COO が参加してくれました。翌週に那覇で別の予定があったらしく、ちょうど良かったみたいです。


仕事中の風景

💸予算取り

合宿用に予算を確保していたわけではなかったので、Employee Success 的な多用途のお財布から出してもらいました。事前にプランをある程度かためて「これだけお金使っていい?」と相談しにいきました。

交通費(飛行機代、レンタカー)とホテルが大部分を占めることになると思いますが、日程と場所が決まっていれば大きく料金も変動しないので、ある程度あたりをつけてプランを作り、「○万円〜○万円の間でやりくりしてね」と、範囲で承認を貰う形にしたので、管理が楽でした。


美味しいタコス

🏠宿泊場所

https://okiresort.com/makanalea-beach/

マカナレアビーチ沖縄さんをお借りしました。ホテルではなく貸別荘ですね。風呂、洗濯機、ガス乾燥機がそれぞれ 2 台ずつ完備、トイレは 3 箇所あってめちゃめちゃ快適でした。ネット環境も光回線が通っていて、全く問題ありませんでした。

レンタカーがないと厳しい位置にありますが、アメリカンビレッジ方面にも顔を出しやすく、静かでいい場所です。次回もここに泊まりたいです。オススメ。


広いテーブルがあり、個別MTG用のスペースもある

🍻食事

ここが良かった

沖縄のエンジニアに連れて行ってもらった「泡盛倉庫」の体験が良かったです。会員制の泡盛バーで、500 種類を超える泡盛を原価で楽しめるお店です。泡盛を楽しみたいなら絶対行くべき。

http://awamorisouko.jp/


泡盛


ヤギ刺し

那覇では締めラーメンならぬ締めステーキが台頭しているとのことで、飲んだ後にステーキを食べました。0 時回ってステーキ食べたのは生まれて初めてかもしれない。オリジナルスパイスを気持ちの 5 倍かけろと言われました。


深夜0時過ぎのステーキ

訪問したお店

オススメしてもらったけど、訪問できなかったお店

今回はハンバーガー、タコライスを食べ損ねたので次回こそは。

アクティビティ

せっかく沖縄に来たのでマングローブを見に早起きしてカヤックに乗ってきました。

正直、行く前はマングローブがなんなのかもわかってませんでしたが楽しかったです。

マングローブからの帰りに嘉手納道の駅に寄りました。

嘉手納基地を一望できる展望台があって、飛行機の爆音が聴ける、とのことでしたがタイミング悪く聴くことはできませんでした。

🧑‍💻合宿成果

ID基盤統合検討

Leaner では現在メインで開発しているプロダクトが 2 つありますが、認証機能をそれぞれで実装しておりユーザーデータベースもそれぞれが持っています。

今後さらに新しいプロダクトが増えることや複数プロダクトを使う顧客が出てくることが予想されるため、 黒曜(@kokuyouwind)ころちゃん(@corocn) の 2 人は ID 基盤を切り出して認証機能が統合できないかを試してきました。

結果、プロトタイプレベルですが ID 基盤のサービスを起動し、片方のプロダクトでログインを置き換えられることまで検証できました!

もう一方のサービスでは devise 依存が厳しく動かすところまで至らなかったこと、既存データのマイグレーションなどいくつか課題もあることなどから即座に置き換えとはいかないものの、 ID 基盤を切り出す筋道を立てられたので非常に有意義な合宿になりました。

フロントエンドの単体テスト・E2Eテスト整備

Leanerのテスト事情(2022年2月版)でも触れていますが、フロントエンドに複雑なロジックやインタラクティブな UI が増えてきているにも関わらず、手動テストに頼りっきりの状態でした。

石渡(@mishiwata1015)小久保(@yusuke_kokubo) の 2 人は「頻繁に手を入れるUI周りについて、安心して開発できるようにする!」を目的とし、以下2点をターゲットにテストを整備しました。

  • 複雑な Grid Layout の表示が崩れていないこと
  • 複雑な入力フォームが正しく動作すること

Grid Layout のあるべき style を単体テストで保証する

Grid Layout の style 生成ロジックに対する単体テストを Jest で実装しました。

対象の Grid は表示に関わる変数が非常に多く、縦にも横にも項目が増えたりネスト的表現もある複雑なものでした。

https://twitter.com/yusuke_kokubo/status/1524673851568713729

「このパラメータの組み合わせのときに、この style が生成されるべき」をテストコードとして可視化でき、安心して開発できるようになりました。また、テストコード実装時に不要な style が含まれていることを発見し、 style 生成ロジック全体のブラッシュアップにもつながりました。

複雑な入力フォームの正常動作を E2E テストで保証する

入力 UI に対する一連の入力・保存までの E2E テストを Playwright で実装しました。

入力項目の増減や CSV アップロードによる一括入力などもあり、手動テストでパターン網羅するにはかなり大変な部分でしたが、E2Eテストによって王道パターンは自動で保証できるようになりました。


作成したE2Eテスト

入力フォーム改修時のレビュー・テスト工数を削減しつつ、デグレードを自動で検出できるようになり、目的としていた「頻繁に手を入れるUI周りについて、安心して開発できるようにする!」を無事達成できました 🎉


合宿の成果をさっそく享受しています

テスト用データセットの整備

日々の開発効率を良くするため、開発環境用・デモ環境用にデータセットを生成する仕組みを整備しました。

  • 多岐にわたる入力項目に、実データに近い値が入ったレコード群を生成するseedファイルを整備
  • テストコードで実データに近い値を生成するためにカスタムFakerを作成

実データに近いデータセットを手軽に用意できるになったので、パフォーマンスの検証やデザインの検討・確認等に役立っています!

まとめ

どうせ集まるなら地方へ行って、地方のエンジニアとご飯を食べよう。

合宿先で社外のエンジニアを誘って食事する取り組みは初めてだったのですが、成功に終わってよかったです。 今後エンジニアの人数が増えると近場で集まるのに甘えてしまいそうですが、普段行かないようなところにまた行けるといいなーと思っています。

採用

Leaner Technologies では地方からフルリモートで働きたいエンジニアを募集しています!
https://careers.leaner.co.jp/engineering

リーナーテックブログ

Discussion