RAKSUL TechBlog

ラクスルグループのエンジニアが技術トピックを発信するブログです

HackWeek 体験記

こんにちは。私は、HackWeekに学生インターンチームとして参加しました。 今回はHackWeek体験記と題して、今後参加される方の参考となれば幸いです。

HacWeekとは

ラクスルで年に一回開催される社内ハッカソンで、期間中エンジニアは通常業務を止めて参加します。社員同士でチームを組んで実装を行い、最終日には成果発表と表彰が行われるといった流れです。

1. ガチすぎるアイディア

一般的なハッカソンへのイメージは、アイディア重視で面白いもの・作りたいものを作る(実用性は問わない)というものでしたがHackWeekは少し毛色が違いました。どのチームの発表を見ていても明日から実用的に使えそうなプロダクトになりうるレベルでした。

2. マネジメント力の高さ

5日間という短い期間の中で実装しなければならないにも関わらず、発表した20チームのほとんど全てが実装まで完了させていました。ハッカソンでアイディアを練る時はあれも欲しいこれも欲しいになった結果、構想だけが膨らんで実装できないという光景をよく見かけますが、ラクスルのエンジニアの方々は本当に必要な機能が何かを考えて作っているという印象を受けました。そして、ちゃんと発表までに完成させるために作業計画や分担などを上手くチーム内で回しているからこそ実現されているのだと思います。

3. エンジニアカルチャーへの理解

Hack Weekの目的の一つにエンジニアの抱えている課題感や考え方を共有するというものがあります。発表の内容を見ていると業務改善やといった直接ビジネスには繋がらないけれど必要なものが多く、普段の業務と切り離して考えるからこそ出てくるアイディアだと感じました。それらを積極的に取り込むことでエンジニアが働きやすい環境になっているのだと思います。

4. みんな楽しそう

ここまでの話を聞いていると、それって結局業務をしているのと同じではないかという印象を抱くのですが、どのエンジニアの人と話しても楽しそうに取り組んでいたのが印象的でした。ラクスルには課題解決に取り組んだり、考えたりすることが本当に好きな人たちが集まっているのだと実感しました。

インターンチームについて

概要

インターン生はフロントエンド・サーバーサイド・データサイエンスの3つの枠で募集され、同じ枠の人同士でチームが組まれます。1チームの人数はインターン生2~4人+メンター1~2人という構成です。今回は計4チームがインターンチームとして参加しました。自分のチームはサーバーサイド枠で、インターン生4人+メンター2人という比較的大人数なチームでした。

進め方

事前に顔合わせ+テーマ発表の日が設けられており、環境構築などは事前に終わらせた状態で臨みます。最初の2日間はリモートでの作業で3日目から目黒のオフィスに出社して対面での作業が始まるという流れです。私たちのチームは大人しい人が多かったので、リモートの最初の2日間は会話が弾まず、思うように進められていなかった部分もあったと感じています。出社してからはお互いのことも少しずつ分かるようになり、徐々に発言も増えて最終的にはインターン生だけでも自発的に進められるようになりました。

メンターのサポート

メンターさんのサポートはとにかく手厚かったです。スタンスとしてはコーディングをインターン生に任せて、タスクの振り分けや環境構築といった部分を担当するという感じでした。しっかりマネジメントしてくれるのでチーム開発の経験が少ない私でも問題なく作業に取り組むことが出来ました。書いたコードは、メンターが現場目線でレビューしてくれるので普段のプログラミングでは意識しないような部分の指摘も貰うことができ、非常にためになります。難しい実装の部分についてはペアプロやモブプロの形式で進めることもあり、開発の中で手が止まる場面というのはほとんどなかったと思います。

今回実装したアプリケーションについて

背景

ラクスルでは多くのGitHub リポジトリを抱えており、それぞれが異なる技術スタックを使用しています。技術スタック毎にバージョン情報とEoL(End of Life)情報を管理するとその量は膨大になります。従来はこれらの情報をGoogleスプレッドシートに手入力する形で管理していました。しかし、この方法では更新するのに手間がかかるため、更新が疎かになりやすいという問題があります。

アプローチ

手入力で行っていたワークフローを完全に自動化することで、能動的に管理する必要をなくすことを目標としました。これによってエンジニアがEoLを気にかけておく心理的コストが削減される。より確実にアップデート計画が可能になります。

実装した画面

技術選定と設計

開発のフレームワークにはRuby on Railsを使用しました。選定意図は、今後ラクスル社内で開発を継続することを見越して、最も浸透しているフレームワークに併せるというものでした。各種リポジトリの技術スタックとバージョン情報の取得はGitHub APIから取得できるソフトウェア部品表(SBOM)を使用しました。SBOMには、リポジトリが依存しているパッケージの情報が含まれています。EoL情報の取得にはendoflife.dateのAPIを使用しました。 言語やフレームワークの名前を渡すとバージョンとEoL情報を返してくれます。

アーキテクチャ

難しかった部分

1. 言語バージョンの取得

GitHub APIのSBOM生成機能ではライブラリの一覧とバージョン情報は取得できますが、言語のバージョン情報を取得できません。そのため、言語のバージョンは.node-versionなどのファイルを確認する必要があります。しかし、リポジトリ毎にディレクトリ構造が異なるため、ディレクトリの中までファイルを見に行く必要があります。

2. EoL情報のデータ構造の違い

endoflife.dateから取得できるデータの構造はフォーマットが定められておらず、技術スタック毎に異なる結果が返って来ます。そのため、欠損値に対して適切な処理を行う必要がありました。

3. バージョンの一致検索

リポジトリから取得されるバージョン情報はマイナーバージョンやパッチバージョンを含んでいますが、EoL情報はメジャーバージョンやマイナーバージョンまでしか定められていない場合があります。そのため、バージョンの対応付けを行う必要がありました。

ラクスルグループの社員さんの印象

1. 技術力がとにかく高い

個人個人の技術力が高いのは言わずもがなですが、会社組織全体での技術力を上げようという意識が強いように感じました。常に新しい技術にキャッチアップして、社内の技術力を高いレベルに保っておくことで、解決したい課題を見つけた時に技術が足枷になることなく速やかに取り組むことが出来る環境を用意しているのだと思います。

2. 価値創造に対する意識の高さ

課題ベース、顧客ベースでの課題解決というのをすごく意識していて、誰のどういう課題を解決したいかを常に考えながら仕事をしていると感じました。その過程でエンジニアだけでなくbizやデザインの方とも密に連携を取りながら課題解決に対して取り組めているのも印象的でした。ラクスルの掲げる「仕組みを変えれば、世界はもっと良くなる」というヴィジョンがしっかりと社内に浸透している証拠だと思います。

3. 穏やかなのに熱意を持った人が多い

社員さんはみんな穏やかで、普段の会話は緩い文化部の雰囲気に近いかなと感じました。でも、課題が見つかると運動部ばりの熱意を発揮し、チーム一丸となって取り組める行動力も兼ねそろえています。全員が強い思いを持って取り組んでいるけれど、全員が課題解決という方向性を向いて揃っているからこそ衝突することなく円滑に進めることが出来るのだと感じました。

これからインターンに参加する人へのメッセージ

今回のインターンに参加して感じた、学びを最大化するために意識するべきポイントをいくつか共有します。

1. 主体性を持って行動する

各チームにメンターがついてくれるのは非常に心強い存在になりますが、それゆえに頼りっぱなしにならないように意識する必要があります。話し合いの場で積極的に発言したり、自分から新たなタスクを見つけて行動するなどの能動的なアクションを増やすことでよりフィードバックを得られると思います。

2. どんどん質問をする

作業で困ったことがあったり、手が止まってしまった時は迷わずに相談してみましょう。メンターの皆さんが手厚くフォローしてくれます。色々な役職の社員さんと話す機会も設けてくれていると思うので、少しでも気になることがあれば質問して会社に対する解像度を高めて行きましょう。

3. 全力でやる

想像している以上に5日間はあっという間です。終わった後に振り返りをして後悔を残さない為にも、全てに全力で取り組みましょう。

まとめ

自分にとっては学びながら楽しく成長できる最高の5日間でした。最後まで一緒に駆け抜けてくれたチームの皆さん、本当にありがとうございました。ラクスルは課題解決に真剣に向き合いたい人にとっては最高の環境が整っていると思います。もし、この考えに共感したのならばぜひインターンに参加することをおすすめします。