freeeサマーインターン参加記
はじめに
こんにちは。GoRuGooです。
今回はあの!freeeさんのインターンに参加させて頂きました!
めちゃめちゃいいインターンでしたので体験記として残したいと思います。
インターンの概要
いわゆる"就業型"というインターンで、学生用のタスクがあるわけではなく実際に社内で動いているチームに配属され、社員さんが普段行っているような業務を行うという内容でした。
選考から合格までの流れ
私の場合、以下のような流れでした。
- Wantedlyでメッセージを頂く
- 会社説明会に参加
- コーディングテスト
- 面接
Wantedlyで頂いたメッセージについて
元々「freee技術の日」などで技術的な取り組みを積極的に行われている会社ということで興味を持っていました。
インターンの存在も知っており、Wantedly経由でメッセージを頂いたことがきっかけで選考に参加することになりました。
コーディングテストについて
言語自体はRuby,PHP,Go等主要なところはすべてOKで、自分はGoを使ってテストに挑みました。
テストの内容は控えますが、普段から開発を行っている人ならばクリアできる内容だと思います。
また、読みやすいコードを書くことが重要とのことでしたので、単にクリアするだけではなく、既存システムに組み込む機能の一つだと捉え、データの持たせ方などを考えながらコードを書くことがポイントかもしれません。
面接
面接は堅苦しくなくリラックスした雰囲気でした。
面接官の方とは意気投合して、自作PCや自作キーボードの話もしたりしました(笑)
質問内容は覚えている限りでは以下のとおりです。
- 自己紹介
- 学校で頑張っている勉強
- これまで行ってきた開発
- 逆質問
- リリース頻度とか業務以外での技術勉強部的なのはあるのか等
合格通知から参加まで
自分のスペックは
- 個人開発でGo,他社のインターンでPHP1年ほど
- インフラ少し
- フロントはNext.jsで軽いポートフォリオ作った経験がある。
なのですが、配属されたチームはRuby&Reactでした。
Reactに関してはまだしも、Rubyに関してはほとんど触ったことがなかったので少し不安でした。
会社側から提案された事前学習内容は以下の通りです。
- Ruby on Railsの習得
- React&Vibes(freee社内で用いられているOSSのUIライブラリ)
私の場合はRailsはチュートリアルを一周し、軽くバックエンドを実装してみました。
React&Vibesに関しては参加前最後の土日に習得しようと思っていたのですが、運悪く発熱。
気合でドキュメントだけ読み込みました。
インターン開始
1日目
午前中にオンボーディング、午後は環境構築という流れでした。
入ってはじめの印象としては
「社内元気すぎるだろ!!」
でした。
というのも、Slackに投稿するとたくさん絵文字が付くんです。しかもめちゃめちゃ動く(笑)
学生の立場からすると、「投稿してもいいのかな...」と少し不安になることもありますが、そうした壁が少なくなるのでとても良かったです。
また、投稿しやすい環境だと作業中スレを気軽に立てられたり、文章を整える必要がないちょっとした疑問も気軽に共有できます。
その結果、後で振り返る際にも役立ちますし、投稿を見た社員さんとのコミュニケーションが生まれるなど、良いことばかりでした。
環境構築は社員さんサポートで、初日に8割ほど完了。翌日から開発環境をいじれるかな?というところまで持っていけました。大感謝。
2週間といっても、Mtgや昼休憩などを含めると時間は限られてくるので初日で環境構築をほぼ終わらせれたのは激アツでした。
2日目
午前中に環境構築が終了し、午後からはタスクに向けてfreee会計の調査を行いました。
肝心のタスクの内容は「freee会計の解約率を下げてほしい」とのことでした。
?????????????
最初は理解が追いつきませんでしたが、解約率を下げるために何でも開発していいという自由度の高い内容でした。
が、いざ!タスクに着手しようとすると、開発以前に問題提起が非常に難しかったです。
理由は2つあります。
- 改善案を思いついてもインパクトがあるか確信が持てない
- 思いついた案それぞれデータを収集する必要がある
1つ目に関しては文字通りで、ジャブ程度の改善案はいくつか出てくるのですがそれらが本質的な問題を解決できるようなパンチがあるかと言われると自信が持てませんでした。
また、主観でなくその改善案がユーザーにとってどれだけインパクトが見込めるのか数値で裏付けをしないといけないので難しかったです。
2つ目に関しては1つ目と関連しているのですが、データの取得が難しかったです。
というのもSQL自体を書く経験はあったのですが、freeeのテーブル定義などのドメイン知識が必要になってくるのでそこのキャッチアップが課題となりました。
3日目
自分たちの感覚と、実際のデータを基になんとか改善するお題決めができました。
freeeでは開発をするときにDesignDoc(以降DDと表記する)を書く必要があるのですが、その実装を進めました。
4日目
午前中はコードの調査を行いました。
幸い1年ほどPHPの会社でアルバイトをしていたこともあり、手も足も出ないということにはならなかったです。コードが読めなくて何もできない、ということを一番恐れていたので本当によかった。
Railsの独特な記法に戸惑いましたが、実際のAPIの返す値などを確認しながらなんとか読み解きました。
調査の結果バックエンドの変更は不要で、経験がほぼ無いReact部分のコード変更が必要だとわかりました。
午後はDDを愛でる会に参加しました。
社員さんが私達にDDのフィードバックをくれる会で、エンジニアだけでなくPD・PMなどのビジネス側からのフィードバックも頂けました。
様々なフィードバックを頂いたのですが、その中でも一番印象的だったのは「ユーザーへのアプローチの仕方がエンジニア目線になっている」ということでした。
確かに後から振り返ってユーザー目線に立ってみると、提案した機能が少しユーザーにとって不親切になっていると感じました。
一度エンジニア思考で舵を切ってしまうとそこから修正が必要だと気付くのは難しいため、業務を行う上ではPD・PM等のビジネス側の方に細かく確認を取りつつ企画を行うことが大事だと学びました。
技術目線でしかものづくり(工学のみの意味ではなく、なにかを創造することの意)をして来なかった私にとっていい経験になりました。
5日目
引き続きDDの修正を午前中は行い、午後に同様に愛でる会がありました。
このとき、理想ドリブンで開発を行ったほうが良いという言葉を頂きました。
理想ドリブンとは開発期間等のリソースでやることを決める(制限する)のではなく、やりたい・つくりたいものを最初に持ってきて、そこからリソースも加味して決めていくというもののことを指すようです。
たしかに自分がDDについて説明するときに、「今回は二週間だから~」という言葉を多用しているように振り返って感じました。
このやり方だともしかしたら実装過程を工夫することで実現できたかもしれない機能を最初に切り捨てることになるのでできるだけ使わないほうがいいと感じました。
6日目
中部ネスト(オフィスのこと)に出社しました。
ハッカソンとかコンテストとかで企業さんのオフィスに入ったことはありますが、実際に9h業務を行うことはなかったので朝からめちゃワックワクでした。
WeWorkのようなシェアオフィスでいろんな会社さんが入っているようで、自転車で通勤している人も沢山いました。
お昼にペッパーランチとクレープをごちそうになりました。とても美味しかったし、社会人の方と一緒に御飯を食べる機会があまりないので新鮮でした。
これまで経験してきたインターンもフルリモートですしね。
また昼食の際に東京に本社を構える企業での地方での働き方のリアルな声も聞けたのですが、個人的には地方でもサテライトオフィスに出社できる環境があれば全然働けそうかなと感じました。
ただ、東京のメンバーと通話をつなぎなららゆるく作業していると周りの人にMtgをしていると思われ、オフィス内でのコミュニケーションのタイミングが失われることもあるから「はなしかけOK」などの札を掲げるなどの対策は必要だと感じました。
開発に関しては午前中に実装タスクの細分化を行い、午後から行いました。
ただ、ここでなぜかgit fetchがうまくいかない問題に遭遇して時間を使ってしまいました。
なぜかワカラナイが、git remoteにhttpsとsshの2つが登録されているとうまくfetchできないっぽい?ので再登録して解決しました。
肝心の実装は1割ほどしか進められませんでした。
7日目
先日に引き続き開発を行いました。この日は具体的なUIを描画するcomponentでなく、Hook関数を9割方完成させました。
8日目
この日は実際に描画している部分のUIの改善を行いました。
ただコンポーネントを追加するだけではなく、既存の状態変数も考慮しながら内部ロジックを組まないといけなかったのでとても難しかったです。
9日目
8日目に引き続き同様の格闘。
格闘の末、なんとか目的としていた機能の実装までこぎつけました。
セキュリティチームのチェックやQA、テストなどの兼ね合いで自分の手でマージまでは行けなかったのが少し悔しかったです。
10日目
この日は朝から全体発表に向けて、スライド作成を行いました。
freeeの文化の一つにアウトプット思考というものがあり、その名の通り最終的な成果物が重要視されます。
自分たちが行った開発に関しても最終的な発表が成果物となるので一生懸命作成しました。
全体発表では他チームに配属されたインターン生の話を聞けました。
これまで自分はアプリケーションの開発をメインに行っていたのですが、全体発表ではSREやセキュリティチームなどの業務内容も聞けてエンジニアという仕事の解像度が高まりました。
感想・学び
技術面
- 技術設計は少しやったことがあるが、ユーザーインパクトなどを考えて企画・設計する経験はなかったのでいい経験になった
- 会計など専門性の高いシステムを扱っている会社なので、ドメインが複雑で開発し甲斐のある環境だった
- QAに加えてセキュリティチームが常時チェックを行っているので常に安全なシステムを提供しているように感じた
- バックエンド・フロント等の専門分野の壁はないように感じた
- バックエンド専門でもメインのタスクとは別にフロントの仕事を振ってくれる機関があるらしい
組織面
- 気軽にSlackに投稿しやすい環境なので心理的安全性が高く、疑問点や困っていることなどを共有しやすかった
- 社内の雰囲気がガチガチで堅苦しい感じではなくて、仕事を楽しみながら成果を出そうという雰囲気を感じた
- 理想ドリブンやアウトプット思考など、会社が掲げているカルチャーを普段から意識的に使っているように感じた
2週間というとても短い期間ですが沢山のことを学ばせて頂きました。皆さん本当にありがとうございました!
Discussion