STORES Tech Blog

こだわりを持ったお商売を支えるプラットフォーム「STORES」の開発チームによる技術ブログです。

こだわりを持ったお商売を支えるプラットフォーム「STORES」の開発チームによる技術ブログです。

STORESメンバーで冬の千葉に開発合宿に行ってきました

はじめに

はじめまして!

STORES ECでフロントエンドエンジニアをしています、 @daitasu です。

2020年2月上旬(ずいぶん経ってしまいましたが)、STORESの開発メンバーで南房総 金谷へ1泊2日の開発合宿に行ってきました!!!

この記事では、そこに至るまでの準備や実際の活動の様子をお話ししていこうと思います。

f:id:daitasu:20200607155408j:plain

合宿の目的

今回、この開発合宿を行うにあたり、2つの目的を定めました。

1. 技術力の向上

まず第一に、技術力を上げることを目的としました。

普段の業務ではなかなか触れない技術に挑戦するもよし、もっと掘り下げたかった技術を追ったり、個人開発するもよし、積ん読の解消に当てるもよし。

1人だとなかなか学習のためのまとまって時間を作りにくいものですし、周りに人がいればその分壁打ち相手になってくれたり、相談に乗ってくれたりと様々な面で学習のショートカットが得られます。

2. コミュニケーションの促進

次に、チーム内外のエンジニア同士のコミュニケーション促進を期待していました。

STORESのメンバーはそれぞれ気軽に相談しあったり、フロントエンドやバックエンドなどの垣根を超えて仕様検討などしっかり議論できるチームです。

筆者ももうすぐ入社1年が立ちますが、エンジニア間の心理的安全性の高さにはいつもとても感謝が止まない毎日です。


とはいえ、我々はエンジニア。つまりはクリエイターです。

いつもの業務の中での会話だけだと、業務から横道外れたトレンドの話や雑談などがなかなか出てこないもので、もっと色んな技術に対してカジュアルに相談できる場があれば、今後もっと色んなアイデアを広げやすくなるかと思います。

時には同じ釜の飯を食い、お互いのバックグラウンドや考え方の根っこを少し知れるだけでも、お仕事の場の居心地の良さが変わるものです。

同じ釜の飯

概要

では、合宿をどんな形で進めていったかを見ていきましょう!

基本的には、もくもくタイムがメインになります。

合宿の前に事前MTGとして、合宿で行うことの宣言を行い、合宿中は2日間ひたすらもくもくと作業に勤しみます。 (夜はお楽しみタイムとしてボードゲームやったりもします)

そして、最終日に成果発表会を行い、それぞれ宣言した内容を達成できたかどうか、実際に2日間やってみてどうだったかの振り返りを行います。


合宿場所は、千葉県の房総半島南部にある浜金谷です。

こちらには、 インキュベーションキャンプ voido という開発合宿に特化した貸切型の施設があり、今回はそちらにお邪魔させてもらいました。

voido.space

ここからは、実際の開発合宿の様子を見ていきましょう!

合宿に向けて

事前宣言MTG

まず始めに、合宿前にどんなことを各々やっていくのか、宣言を行う「開発合宿でやること発表ランチ」を行いました。

これは、「開発合宿によくあるアンチパターン」を防止するためでもあります。

開発合宿によくあるアンチパターン

  1. 何をやろうか考えていたら合宿が終わってしまった
  2. 開発環境の構築で終わってしまった


いざ始まってから何をやろうか考えてしまうと、せっかく捻出した時間の大半を案出しと準備で終えてしまいます。

これを回避するため、事前に2日間の作業の目標を定め、イメージを温めておくことで当日は作業に集中できるようにしておきます。


宣言した内容はこんなものがありました

  • 個人開発サービスのアップデート
  • Graqhqlの積読を解消する
  • Nuxt.js + Firebaseでチームの目標管理に使えそうな目標管理ツール作成
  • SwiftとKotlinに触れて、モバイルアプリ入門する
  • TestCafe E2E入門
  • Rubyクラス/モジュールの依存関係dumpツール作成
  • Rubyのメモリアロケーションを理解してスライドにまとめる
  • Haskell 製のライブコーディングフレームワーク TidalCycles で MIDI 信号を送りたい
  • 以前Haskellで作成したforemanクローンをGo言語で作成する

旅のしおり

開発合宿に向けて、旅のしおりを作成しました (by @inouetakuya)

f:id:daitasu:20200607172943p:plain


また、食事や銭湯など迷子にならないよう、浜金谷駅周辺のスポットまとめも作成し、準備は万端です。 (by phayacell)

f:id:daitasu:20200624182232p:plain

合宿スタート!

いよいよ旅の始まりです。

旅の始まり

冬もど真ん中、朝の秋葉原に続々とメンバーが募ります。

集合時間の9:00には全員が集結し(すごい!)、駅弁を買って電車を待ちます。 f:id:daitasu:20200607174252j:plain

秋葉原駅から浜金谷駅までは特急1本で行くことができます。

鋸山が側にあったり、魚料理のお店が豊富にありご飯も充実、また閑静な住宅街が広がっているので、集中して合宿に取り組む環境としてとても良い場所です。

f:id:daitasu:20200607180503j:plain f:id:daitasu:20200607180506j:plain

合宿所へ

駅に到着後、早速合宿所 voidoへと向かいます。

voidoはコミュニティスペース・コワーキングスペース「まるも」によって管理されている合宿所になるので、まずは「まるも」さんへとお邪魔し鍵を受け取ります。

marumo.net

鍵を受け取ったら、いざvoidoへ。

f:id:daitasu:20200607181148j:plain

お洒落な青塗りの2階建て、これを見るだけでもうワクワクが止まりません。

中はこんな感じ。

f:id:daitasu:20200607181757j:plain f:id:daitasu:20200607182104j:plain

1階には角テーブルが2つ、丸テーブルが1つ、ホワイトボードやキッチンがあり、2階にもボードゲームができるような机とソファ、2段ベットがある部屋が2部屋あります。

お昼

さて、開発を始める前にお昼に向かいます。 f:id:daitasu:20200607182721j:plain f:id:daitasu:20200607182742j:plain f:id:daitasu:20200607182919j:plain

オレンジデイズを彷彿とさせる光景ですね。

なんでしょう。僕たちが心のどこかにそっと閉じてしまった青い1ページ、それが今ここで開かれたのかもしれません。

メンバーの平均年齢は30歳くらいですが、この時の僕らは二十歳の頃の青春を肌に感じていました。

f:id:daitasu:20200607183606j:plain f:id:daitasu:20200607183610j:plain

お昼は海鮮丼やカキフライです。

見るだけで唾液がこぼれそうですね。

ほっぺたが落ちる、あごが落ちるどころでない。おいしさに体が震えた。舌が踊り、胃袋が歌いだした。(もの食う人々)

至福が全身に響き渡り、自然と笑みがこぼれます。

f:id:daitasu:20200607184356j:plain

もくもくと...

さて、我々は何をしに金谷までやってきたのか。

開発合宿 です。

危うく忘れるとこでしたが、ご飯にばかりうつつを抜かしているわけにもいきません。

まだ時刻は13時。ここから夜まではしっかりと開発タイムです!

voidoに戻り、それぞれ準備を始めます。

各々のスタイルのキーボードやスタンドを準備したり、

MIDI信号を送って演奏するために、音響機材の持ち込みなどもありました。

f:id:daitasu:20200614230012j:plain

f:id:daitasu:20200614230016j:plain

準備が出来たら改めて、宣言タイム!!!

2日間でそれぞれやることと目指すゴールを宣言し、もくもくタイムが開幕!!!

f:id:daitasu:20200614230601j:plain

f:id:daitasu:20200614230620j:plain

ひたすら夜までもくもくタイムが続きます......

f:id:daitasu:20200614231038j:plain

そして、夕刻へ

f:id:daitasu:20200614231932j:plain

メキシカンな千葉の夜

千葉の夜は早く、お店も18~19時ごろにはほとんど閉まってしまいます。

そのため、18時前には一度切り上げ、行けるメンバーから近くの旅館の温泉と、晩ご飯へ向かいました。

晩ご飯はメキシコ料理!

goo.gl

タコスの辛さに舌を痺らせながら、メキシカンなお酒も嗜みつつ、

普段の業務中だとなかなか話す機会がない、思い出話や趣味の話など、しっぽりと語り合いました。

f:id:daitasu:20200614232925j:plain

STORESでは、全社定例が毎月あり、その後にアルコール飲み放題の全社懇親会があります。(今はフルリモートなので休止中)

そこでもワイワイみんなで話す機会はあるのですが、少人数でゆっくり畳に座って話す、というのも粋なもの。

知らない一面や互いの関心ごとなど、色々と知ることが出来てとても良い機会になりました。

もくもく夜パート

さて、時刻は20:00。1日目最後の大詰めです。

21:30頃の各々のキリのいいところまで、ひたすらもくもくしていました。

f:id:daitasu:20200614234001j:plain

お楽しみ会

さて、1日目の最後はお楽しみ会!

せっかく千葉まで1泊2日で来ているので、遊ぶ時間も取りたいもの。交流タイムを設けました!


Switchを持ち寄りゲームを行ったり、ボードゲームをしたり...

f:id:daitasu:20200614234620j:plain


1日目は朝早くから集合し、移動/準備に丸一日の開発と、詰めに詰めた内容でみんな疲労困憊でしたが、非常に充実した1日になりました。

ラストスパート

さあ、いよいよ2日目。ラストスパートです!

2日目は朝8時ごろに各々起床し、成果発表会に向け最後の仕上げに取り掛かりました。

成果発表会

お昼からは成果発表会。

Slack callで発表者が画面共有し、出来たものややったことをまとめて発表していきました。

f:id:daitasu:20200614235411j:plain

せっかくなので、出来たものを一部ご紹介しようと思います!!

Array#+とArray#concatのメモリの使い方の違い

@morihirok

Rubyのメモリアロケーションについて、Rubyの実装を読み進めてまとめて下さいました。 メモリ消費量の数値の違いもですが、実装としてこうなっている、というところも分かりとても面白かったです。

speakerdeck.com

Golangでforeman clone

@fujimura

Golangでforeman cloneを作成。

以前Haskellで一度foreman cloneを作られたとのことですが、1泊の間で出来てしまうのとてもすごい。

今回Go言語で実装してみて、Go言語の直観的な挙動や仕様のシンプルさを感じ、人気の理由を改めて理解したとのことでした。

github.com

Nuxt.js + Firebaseで目標設定アプリの作成

@daitasu

私です。チームなどで簡易に使える目標設定アプリが作れるといいなと思って作りました。作りたかった全体のレイアウトや認証機構までは出来ましたが、1泊で完成まで持っていこうとすると機能など色々削らないと難しいなぁと感じました。

https://github.com/daitasu/aim-cyclegithub.com

個人開発で溜まっていたタスクの消化(FYI Stocker)

@phayacell

個人タスクで解消したかったタスクの消化。テンポ良く一通りのPRを作成し、スマートに目標を達成しておりました!

github.com

Ruby製の依存関係チェッカー

@upinetree

個人開発で進めていた依存関係チェッカーのツール。この合宿で、途中だった不具合修正などを一気に解消しました!

github.com

TidalCycles から MIDI 信号を送って Volca Beats を演奏する

@tttttahiti

ライブコーディングでコードによってどんな風にリズムが変わるかなどを演奏頂きました。どんどんその場で音が変わりゆく様はとてもカッコ良かったです!

tttttahiti.hatenadiary.jp


おわりに

今回、有志で開発合宿を実施してみて、普段関わらないメンバーとしっかり話すことができ、また、1人ではなかなか踏み込めない、業務で挑戦できないことに挑戦し、一気に開発を進めることができました。

日常を離れての親睦や挑戦、コミュニケーションの密度も深まり、非常に良い会でした!

今では大変なご時世となり、しばらくは再び開発合宿にいける機会を作れそうにないですが、またこういった機会を定期的に作っていけるといいなと思っています。


STORESでは、現在フルリモートでも読書会や勉強会などを定期的にオンライン開催しています。

開発合宿も、オンラインもくもく会などとしてやってみるのもいいかもしれないですね。

これからも様々な企画をエンジニア同士で出し合い、このブログにも活動の様子など起こしていけたらと思っています!