freeeの開発情報ポータルサイト

freee関西支社で内定者インターンに参加した話

こんにちは、2022年新卒入社の横塚です。 僕は内定から入社までの間にfreeeで内定者インターンをしていました。 今回は、関西支社に配属され10ヶ月間プロダクト開発に携わった話を書きます。

freeeの内定者インターンはこんな感じだった!ということで、今後インターンに参加する方やfreeeに興味を持っている学生の方の参考になれば幸いです。

freeeプロジェクト管理について

僕は主に、freeeプロジェクト管理というプロダクトの開発に携わりました。 freeeプロジェクト管理は、従業員が工数を入力し、管理者が従業員の工数を分析できるようにするプロダクトです。

freeeプロジェクト管理のイメージ画像
freeeプロジェクト管理
今回のインターンでは「工数入力」という、freeeプロジェクト管理の中核をなす機能について、改善に取り組みました。

まずは不具合改修から

内定者インターンの最初の課題は、freeeプロジェクト管理の不具合改修でした。
さて、早速コードを...といきたいのですが、実際にコードを書き始めるまでにも一苦労ありました。

今まで単一のレポジトリでの開発経験しかない自分にとって、freeeプロジェクト管理の環境構築は容易いものではありませんでした。
freeeプロジェクト管理はfreee会計や認証基盤、課金基盤など様々なプロダクトに依存しており、それら一つ一つをセットアップしていく作業が中々大変...
過去のインターン生が環境構築した時の記事を参考にfreeeプロジェクト管理を動かすことに成功しますが、しばらくは開発環境のトラブルシューティングに時間を取られる状態でした。

余談ですが、現在のfreeeプロジェクト管理では Docker イメージを用いた開発環境の標準化・セットアップの効率化が実現されています。 その結果、なんと1コマンドで開発環境が立ち上がるようになっています!

開発環境を手に入れてからは、比較的難易度の低い不具合改修に取り掛かりました。 不具合改修を通して、freeeの開発文化に少しずつ馴れ親しんでいくことができました。

インターン生でチーム結成

不具合改修に取り組んで2ヶ月程経過した頃、関西支社のインターン生4名でチームを結成することになりました。

チーム名も自分たちで決めるようにとのお達しがあり、議論の末「サラダボウル」に決定しました!!

サラダボウルという単語は様々な人種から構成されるアメリカやカナダが「人種のサラダボウル」と形容されることに由来しています。
集まったメンバーの専攻が多種多様(医学、言語学、ロボット工学、情報工学)で、色々な背景を持った人がいるなーという思いからこの名前になりました。

サラダボウルのミッション

さて、そんなチームサラダボウルに与えられたミッションは工数入力機能の改善でした。

ミッション:工数入力の改善
サラダボウルに与えられたミッション

マネージャーから伝えられた課題はこれだけで、どのように改善するか?という点は自分たちで考えます。

企画の決定

ミッションを伝えられた僕たちサラダボウルは、まず課題を出し合いました。 インターン生もfreeeプロジェクト管理を使って工数入力を日々行っていたので、様々な課題が挙がりました。

その課題を、スプレッドシートにまとめ、各課題について以下の観点で点数を付けました。

  • 課題を解決することによるインパクト
  • 技術的な難易度
  • 既存の要望がどれくらいあるか
  • 課題に対する熱意

課題一覧シート
課題一覧シート

各課題の合計点数は拮抗しており、すんなりと決定することは出来ず。 そこで僕たちは課題に対する熱意を最重要項目に設定することを決めました!

自分たちがやりたいことをやるのが最も良い体験になるし、良いものが出来上がるだろうという考えです。

そうして決定した最初の企画がドラッグアンドドロップによる工数の時間変更でした。

最初の企画

チーム内で議論した結果、ドラッグアンドドロップによる工数の時間変更という新機能を追加することになったチームサラダボウル。

当時の仕様では、工数の時間を変更するためには以下の3ステップが必要でした。

  1. 工数を編集するためのダイアログを開く
  2. キーボード入力で時間を変更する
  3. 保存ボタンを押す

そこで、一覧画面からドラッグアンドドロップで時間を変更できるようにしたらダイアログを開く回数が減って、工数入力が楽になるんじゃないかと考えたのです。

ちなみに、同様の機能を持つ他社プロダクトとしてGoogleカレンダーがあります。

freeeプロジェクト管理の工数入力をGoogleカレンダーみたいにしてやろう!という意気込みがチーム内ではありました🔥

Googleカレンダーはドラッグアンドドロップで予定の時間を変更できる

企画決定後は4人で分担して開発を進めていきます。

freeeでフロントエンド開発に使用されている TypeScript をほとんど触ったことがないメンバーもいたので、ペアプログラミングをしたり、メンバー間で積極的に知識の共有をしたりするようにしました。こうしたチーム開発における助け合いを経験できたこともインターンの重要なポイントでした。当初は TypeScript に詳しくなかったメンバーもどんどんフロントエンドのコードが書けるようになり、チームサラダボウルにとって欠かせない存在になっていきました。

開発が完了した後は、QAチームにリリースして問題ないかテストしていただきました。 QAによって洗い出された不具合を修正して無事リリースです🎉(リリース情報にも掲載されました

ミッション開始から初リリースまで約2ヶ月程かかりましたが、freeeの開発サイクルを余すことなく経験でき、充実した時間でした!

工数入力ダイアログを大改造

一つ目のリリースを達成した我々サラダボウルは、工数入力機能に対してよりインパクトのある変更を加えることができないだろうかと、画策し始めます。

チーム内では、既存の工数入力の問題点は「ダイアログを開いて保存ボタンを押す回数が多い」ことにあると考えていました。 工数の数だけダイアログを開いて保存ボタンを押さなければならないので、少ない人でも1日1-3回、多い人だと1日10回くらいはダイアログを開くことになります。

そこで既存の工数入力ダイアログを根本から見直し、1日の工数をまとめて保存できるように改修することになりました!

文章だけではイメージしづらいと思うので、先に完成品をお見せいたします。

before after
既存の工数登録ダイアログ
既存の工数登録ダイアログ
工数一括登録ダイアログ
工数一括登録ダイアログ

ダイアログとはいうものの情報量が多く、一つのページをまるごと改修する感覚でした。

設計

今回は前回以上に影響範囲が大きい変更であるため、設計にも時間をかけました。ユーザーにとって真に価値がある機能を作るために、利用状況を調査したり、freeeプロジェクト管理に関わる全ての職種の方々にフィードバックをいただきました。

また、本企画では当初からUXデザイナーの方とのミーティングを重ね、デザインが完成した段階で、ユーザーテストを実施するなど、実装に入るまでにかなりの時間を使いました。

ユーザーテストではfreeeの社員の方に新しいダイアログを試験的に使ってもらったのですが、「この機能すごく欲しい!」と言ってくれる人がいて、俄然やる気になったことを覚えています。

実装

実装自体のボリュームも最初の企画と比べてかなり大きくなりました。 更に複数のチームメンバーが卒論の準備などでインターンに時間を割くことが難しくなっていたことも重なり、開発自体はかなり難航しました。

それでもコツコツと開発を進め、QAチームによるテストを経て社内リリースまでこぎつけました。 ですがインターンとしてはここで時間切れ。本リリースまで辿り着くことは出来ませんでした。

本リリースに到達しなかった悔しさはありましたが、チームとしてベストを尽くせたので後悔はしていないです。

その後、新卒入社し研修を受けている最中、サラダボウルで作り上げた工数一括登録ダイアログがリリースされました!!! 実際に掲載されたリリース情報がこちらです

まとめ

freeeの内定者インターンは、大きな裁量権を与えられ、自分たちが何をするべきかは自分たちで考えるというのが基本方針でした。 といっても完全に放置されるわけではなく、社員の方々には毎日のように助けられていました。

  • エンジニアの方には技術的な相談をする場を設けていただいたり、コードレビューでお世話になりました
  • マネージャーの方には毎週の定例会議で開発の方向性や悩んでいることを相談しました
  • デザイナーチームやQAチームの方々も声をかけると喜んで協力していただけました

このように非常に恵まれた環境だったと思います!

freeeには開発プロセスの全ての段階にエンジニアが関与するという開発文化があり、まさにそれを体現するようなインターンでした。 自律的な行動や、他チームを巻き込んで協力してもらうような動きが求められたため、今後に役立つ非常に有意義な時間だったと思います。

現在は新卒研修でチーム開発に取り組んでいるのですが、インターンの経験が活きているなと実感することが非常に多いです!

謝辞

インターン中にお世話になったfreeeの社員の方々、当記事の執筆を手伝ってくれたサラダボウルのチームメンバーの方々に感謝の意を表します。