2024 freeeサマーインターン!!! freeeの開発文化を肌で感じた熱い2週間
はじめに
自己紹介
現在新潟の大学で修士1年をしているiwakkii (freeeで使用していたニックネーム)です。
先日freeeで2週間のインターンに参加させていただいたため、インターンでの経験や学びについて"熱く"語っていきたいと思います!
今回のインターンでは、財務会計チームというfreee会計を扱うチームに配属され、ある新機能に関する開発タスクを任されました (実際の業務に関わる話なので詳しくは割愛)。
最初にチームメンバーの3人で実装の設計を考え、そのあとはそれぞれフロントとバックに分かれて実装作業を行いました。
メンター陣のお力を借りながら2週間全力で走り切った結果、いくつかのPRをdevelop branchにマージしていただくことができました!!!
また、最終発表会ではメンターの方々の"多大なる"サポートのおかげでデモ版をお見せすることができました!(発表数分前にデプロイを間に合わせてくれたMさんやZさんには本当に感謝です!)
なぜfreeeのインターンに?
自分は元々インフラ系の技術が好きで、研究室のサーバー監視基盤などを開発していました。(過去記事)
サーバー監視基盤の開発により、研究室のメンバーがいつでも簡単に全てのサーバーの稼働状況を簡単に確認できるようになり、インフラ担当者 (主に自分)が障害対応する時に原因特定が非常に楽になりました。
この経験を通じて、ちょっと面倒なことをITの力で簡単にし誰でも手軽に利用できるようにするということに楽しさを感じるようになり、そういう観点でインターン先企業を探していました。
そんな中で、スモールビジネスのバックオフィス業務の手間を減らし、誰でも自由に経営ができるようにするというfreeeのミッションと自身の価値観がマッチしていると感じたため、インターンに申し込んでみました。
freeeってどんな会社?
概要
「スモールビジネスを、世界の主役に。」をミッションに掲げ、"だれもが自由に経営できる統合型経営プラットフォーム"の開発・提供している会社です。
個人事業や中小企業における、会計作業の煩雑さをなくし、誰もが気軽にビジネスが始められるようになる世界の実現を目指しています。
現在提供中のプロダクトは、帳簿や決算書を作成するfreee会計、給与計算などを行うfreee人事労務、税務申告書などを作成するfreee申告などがあり、新規プロダクトも多数リリースされています (サービス一覧)。
また、freee独自の開発文化 (「あえ共」、「世話を焼いていくスタイル」)やユーザーの本質的価値を追求する「マジ価値」など、ユーザーに最速で価値を届けることに重きを置いた社風を大切にしています (会社説明資料)。
インターン前の印象
エンジニア面接では、今までに開発したプロダクトについてなぜ作ったのかやそれによってどのような価値を提供したかったのかなど、プロダクトの表面上のことだけでなく内的な動機も含めて、非常に深い部分までお話しすることができました。
面接を通じて、自分の持つ価値観とfreeeの「マジ価値」に近いものを感じたため、ぜひインターンに参加し実際の開発を体験してみたいと思いました。
そのような面接だったこともあり、能力を測られているという感じはあまりせず、いい意味でリラックスして自分のことを伝えることができました!
インターン後の印象
漠然とした言い方になりますが、freeeっぽい人がたくさんいるのがfreeeだと感じました!
「あえ共」や「世話を焼いていくスタイル」が当たり前のレベルで浸透していて、社員の皆さんはそれらを意識しているというよりも、良いものを作るために必要だから自然とそうなっているという雰囲気を感じました。
インターンの中では、Slackで質問するとすぐに返信が来て対応してくださったり、PRのレビューを貰うために別のチャンネルに入ってお願いした時もすぐに「いついつまでに対応します!」との返信をしてくださったりしたため、とても快適に開発を進めることができました!
懇親会でも多くの社員さんが気さくに話してくださり、社員さんの技術的なバックグラウンドやプロダクトに対する熱い思いを伺うことができ、非常に楽しい時間を過ごすことができました!
インターンについて
概要
- 日時: 8/19 - 8/30 (10days)
- 時間: 10:00 - 19:00 (一応フレックスも可らしい?)
- 体制: 1つのチームにインターン生が1~3人配属されていた
- 自分のチームのインターン生は3人でした
- 配属チーム: 財務会計
- freeeの根幹であるfreee会計を扱うチーム
- コードベースは巨大かつ、理解には高度なドメイン知識が必要
- とにかくキャッチアップが大変だった、、、
- 技術スタック
- React
- Rails
ざっくりとしたスケジュール (財務会計チーム)
- day1: 全体説明、PCセットアップ、環境構築
- day2: 環境構築
- freee会計が非常に巨大なプロダクトだったということもあり、環境構築でほぼ2日費やしました。
- day3 - day5: インターン課題の説明とDesign Doc (DD)の作成
- DDとは、実装目的や実装方針、セキュリティ上の懸念事項など多くの点を考慮し、まとめた設計書のことです。
- DDの作成にはコード理解やドメイン理解、メンター陣やセキュリティチームとの話し合いなど多くの工程を必要としたため、作成には多くの時間 (最初の1週間!)がかかりました。
- day5: 中間発表
- 週の終わりにはそれまでの成果を報告する発表会がありました。
- day6 - day10: 相談、実装、PR作成
- 後半は、DDからタスクの切り出し、朝会でその日のタスクを共有、夕会で進捗報告をひたすら繰り返しました。
- わからないことはSlackで質問し、実装が終わればPRレビューをお願いするという慌ただしい1週間でした。
- day10: 最終発表と懇親会
- 最終発表では自分たちのタスクと達成度を発表しました。
- 自分たちはメンターの方々の助けもあり、発表の中でリアルタイムデモを見せることができました!
- 最後の懇親会では、社員さんやインターン生と交流できて楽しかったです!
懇親会での集合写真
自分は懇親会以外オンラインだったため、最後にインターン生 (特にチームメンバー!)と対面で会えてとても楽しかったです!
台風さえなければ大阪の方とも会えたので、それだけが残念でした、、、
インターンの前
こんなことが学べたらいいなリスト
インターンに行く前は漠然と以下のようなことを学べたらいいなと思っていました。
- freeeという会社やそこで働く人々について知る。
- freee会計というプロダクトの技術やドメイン知識を得る。
- 実際の開発を通じて、freeeでの開発体験を知る。
- 「あえ共」や「マジ価値」などfreeeの文化を体験する。
本記事を読んでいただいた方にはすでに伝わっているかと思いますが、以上については十二分に学び取ることができました!
インターンを終えて
インターンに行かなきゃわからないことリスト
- チームからのサポートがとても手厚い!
- 本当に実際のチームメンバーの一員として2週間扱っていただけていたと感じています。
- 「世話を焼いていくスタイル」を肌で感じた2週間でした!
- DD作成は大変だけど超重要!
- DD作成の段階からセキュリティリスクを考慮することで、最速の価値提供と品質の保証が同時に満たせる。
- 思った以上に「あえ共」は大事だし、freeeに文化として根付いている。
- freee会計は想像絶するほど巨大。今回はフロントとバックの一部しか触れていないけれど、DBも巨大らしい、、、
- 1日にとんでもない数のPRが出されては処理され、そのまま本番環境に実装されていく。
- 自分を含めたインターン生のPRもいくつかマージされました!
Design Doc (DD)の作成について
freee会計が巨大なプロダクトということもあり、自分のチームではDDの作成に最初の1週間を全て使いました。おそらく全チームの中でDD作成にかけた時間は一番長いのではないかと思います。
DDを作成する中で得た大きな学びは、少し考えて分からないことはSlackで聞いてみるということとこまめに今やっていることを報告するということです。(つまりあえ共!)
なぜかというと、業務に関する知識は自力で答えを見つけることが困難なものもあるため、自分1人で抱え込んでしまうと大きなタイムロスにつながってしまうからです。
また、今自分が行なっていることをこまめに報告することでメンターの方達が自分たちがどこに向かおうとしているのかを知ることができます。知識が浅い状態では正しいつもりで間違った方向に進んでしまい、作業を進めているつもりが実は全く進んでいなかったということもあり得ます。
実際自分も作成したDDの大部分が不要になってしまったこともあり、あえ共の重要性を痛感しました。
DDは、エンジニアメンバー以外も読むドキュメントであるため技術的な知識がない方でも読める部分と技術的な知識を要する部分を明確に分ける必要があり、それにも最初は苦労しました。
またDDに含める内容には、想定される用途を列挙したユーザーストーリーや起こりうるセキュリティリスクを列挙した重篤度など多くのものがありました。
そのため、最終的なDDのページ数は40ページを超え、大変だったものの大きな達成感を感じました。
DD作成後も、チーム内レビューやセキュリティチームからのレビューがあり、問題がある場合には都度修正を行いました。
メンター陣からのサポートについて
チームメンバーの方々は非常に手厚くサポートしてくださり、問題が長い時間解決しない場合にはGoogle MeetやHuddleで通話しながら問題解決をサポートしてくださいました (世話を焼いていくスタイル!)。
freee会計は巨大なプロダクトで、コード理解が難しかったため都度メンター陣の力を借りながら実装を進めていきました。
自分はインターン中オンラインでしたが、朝会と夕会がMeet上で行われ毎日進捗確認をしていたため、問題なく業務を進めることができました。
チームは非常に和やかな雰囲気で、朝会の前の雑談や昼食会の時の雰囲気などが自分はとても好きでした!
ReactとStorybookを用いたコンポーネント開発
今回初めてコンポーネント開発にStorybookを活用したのですが、コンポーネント単位でレンダリングできるためデバッグが高速で、非常に開発体験が良かったです!
freeeではvibesという共通のデザインシステムが用いられており、freeeのプロダクトのUIはこれをベースに構成されています。
用意されたコンポーネントを組み合わせるだけで、プロダクトレベルのUIが組み上がっていくので書いていて非常に楽しかったです。(どのようなコンポーネントがあるのかひと目でわからなかったので、欲しいコンポーネントを探すのは少し難しかった)
今回はvibesを用いて2つのコンポーネントを作成し、無事PRがマージされました。
もっとできたなーと思うポイント
環境関連エラー
仕方がないことだとはわかっていても、環境関連のエラーは精神的に結構参りました。ドキュメントがきっちり整備されているからこそ、自分が何かいらんことやってしまっているんだろうなーと思ってしまい、歯痒い気持ちになりました。
そんな中でも、メンターの方々は根気よくエラー解消に付き合ってくださり、本当にありがたかったです (世話を焼いていくスタイル!)。
自分と同じような思いを他のインターン生にはできるだけしてほしくないため、社内ドキュメントにブログを書き、詰まったポイントを"あえ共"しました。
LintエラーとCIエラー
これも慣れていないという部分はあるものの、pre-commitやpre-pushが通らないために多くの時間を費やしてしまったことも非常に悔しいポイントでした。
やりきったと思えるポイント
時間はかかったけれどDDを書き上げた!
私たちのチームは、DDの作成に1週間という時間をかけましたが、その分良いDDを仕上げられたと思っています。
特に、私たちのチームはフロントとバックで開発が分かれていたため、DDを通じてお互いの進捗を把握することで、理解の乖離が起こりませんでした。
また、セキュリティに関するレビューが入った際も担当者の方からわかりやすかったと言っていただけました。
最初にDDをきちんと書いていたおかげでチーム全員が一つの意識を持って開発に臨めたことが非常によかったと感じました!
フロントで動きの部分を実装しPRを通した!
今回の開発で私は、2つのコンポーネントを開発しました。それぞれのコンポーネントについて、PRを投げ無事通ったことは今回の成果の1つだと思っています。
また、他のインターン生が作ってくださった更に2つのコンポーネントと合わせてフロントで動きの部分を実装し、そのPRも通すことができました!
私が動きを実装したあと、バックエンド担当の方がそこにロジックを当ててくださり、無事デモ版完成という運びになりました。
今回はキャッチアップが本当に大変で、開発の中でも至らない部分や悔しいことはたくさん感じたものの、チームとして見える成果を出せたという部分は1つやり切れたのかなと感じています。
他2人のインターン生もそれぞれの仕事をやり切ってくれてなんとか成果に繋げることができました。
良きメンターといい仲間に恵まれたインターンで本当に楽しかったです!
おわりに
感想
今回のインターンを通じて、freeeの雰囲気や開発を実際に経験することができ、学びの多い2週間でした。
DDの作成から実装、そしてPRまでfreeeにおける開発の全てを2週間の中で経験し、技術者として大きく成長することができました。
一方で、慣れない大規模開発で多々つまづいてしまうこともあり、そんな時に支えてくださったメンター陣やインターン生には本当に感謝しています。
メンター陣の「世話を焼いていくスタイル」には精神的に本当に助けられました!!
また、あえ共の大切さを何度も感じた2週間でもあり、高いレベルであえ共が浸透しているfreeeは本当に良い組織だと感じました。
本当に楽しくて一瞬で終わってしまった2週間でした。
最後に、ここまで読んでいただきありがとうございました!
Discussion