独学学生プログラマがサマーインターンに参加してから新卒入社するまで

 こんにちは。4月にfreeeの2017年新卒エンジニアとして入社したtaiyoです。私はfreee新卒エンジニア一期生であり、freeeが2015年に初めて実施したエンジニアサマーインターンの参加者でもあります。今回は、freeeの新人エンジニア育成の特徴を含めながら、私がサマーインターンに参加してから新卒入社した現在までについてお届けします。

我流でプログラムを書いていたインターン参加前

 freeeのサマーインターンに参加する以前は、サークルでのLaravel(PHP)を使ったWebサービスの運営やScrapy(Python)を使ったWebスクレイパーを開発したりしているエンジニア初学者でした。 ザ・我流で作っていたスクレイパーなどはお世辞にも分割されているキレイなコードと言えず、コードや開発プロセスのお作法的なことも全く知らなかったため、ただ動くものを愚直に作っていたという感じでした。

 そんな「とりあえず動くけど決して綺麗とは言い難いし、何より改善を入れづらい」ものが手元にあって、何から手をつけていいのかモヤモヤしていた中で、freeeのサマーインターンの募集を見つけました。

 募集要項には、「実際に本番で動いているサービスの改善をしてもらいます。」とあり、私は「これだ!」と思い、即座に応募しました。本職のエンジニアが作るプログラムはどうなっているのか知りたい、そこから今手元にあるプログラムの改善のヒントを得ることができないだろうかと考えたからです。後日参加承認のメールが来て、参加することになりました。

改めて井の中の蛙であることを知る

 私が参加した2015年のfreeeのエンジニアサマーインターンは、参加人数3人、実施期間3日間で、freeeが提供する「会社設立freee」の機能追加や改善タスクをそれぞれがこなし、出したプルリクエストをメンターにレビューしてもらうという内容でした。

 RubyもRailsも初心者だった私ですが、さすがに別言語だけどWebフレームワーク使ったことあるし、全く分からないということはないだろうと思っていました。しかし現実はそう甘くはありませんでした。

 初めて見る、企業が提供するサービスのコードに対して初めに抱いたことは、とにかくデカイということです。そこまで大きなプログラムに触れたことがなく、特にエディタの機能を使いこなせていた訳でもなかった当時の私は、タスクに関係するコードの箇所を特定するのに時間を費やしてしまいました。Rails初心者であったことも作用してたのかもしれませんが、それでも時間をかけすぎだと強く思っていました。

 次に思ったことは、当時の自分が想像していた以上に、様々なことを考慮して開発を進めていく必要があるということです。インフラ、パフォーマンス、設計、コード規約など、ボトルネックや割れ窓を作らないために工夫してやっていく必要がある訳ですが、当時のタスクでは今も迷うことがある”命名”に関してかなり突っ込まれていました。

 個人で開発しているものでは「自分さえ分かれば」「動きさえすれば」と心のどこかでおざなりにしていたところがありましたが、チーム開発となるとそうはいきません。他にも多くの観点でレビューをもらって、学びに繋がりました。

 そして、最終的にリリースまでたどり着いた私のタスクは2つでした。3日で2つです。もらったレビューの数はそこまで大きくないPR3つの合計で60を超えていました。コードとは少し離れたチーム開発でのお作法的な部分も含まれています。私は完全に打ちのめされました。「全然何も知らないやん僕」と率直に感じました。

インターン成果発表ギリギリまで作業を続ける様子

弟子入りから現在

 サマーインターン後、打ちのめされた私は弟子入りするような形でfreeeの長期インターンとして入社させてもらいました。ビクビクしながらも必死で喰らいついていったところ、段々とレベルアップしていく形で多くのタスクを任せてもらえました。

 スタイル崩れを修正するものから始まり、メインサービス外のフォームのUX改善や機能追加、会計freee内の新機能の要件定義からReact + Fluxを使ったSPAでの機能実装&リリースまで、Go製のサードパーティのエンジンバージョンアップと機能追加などなど。1年半で数多くのタスクをやってきましたが、まさかRubyやJavascriptだけでなくGoまで触ることができるとは思っていませんでした。

 freeeのインターンのよいところは、上記のように大きなタスクをインターンでも任せてくれるところだと思います。これは、エンジニアチーム内でレビューをしっかり通す体制だからこそ実現できていることであり、freeeのインターンの大きな特徴です。

 サマーインターンでも同様ですが、実際に稼働している大規模サービスを触るからこそ得られる知識&経験があり、さらにそれに受けるレビューからも多くのことを学ぶことができるのだと思っています。これは学生という環境ではなかなか得ることのできない機会なのではないでしょうか。

 この記事を書くためにサマーインターンの時のプルリクエストから振り返っていたんですが、全然できない頃の自分がそこにはいて、その自分と今の自分比べると少なからずのギャップが感じられました。もちろんエンジニアとしての力は圧倒的に足りませんが、少なくともここまでやってきた分の成長を感じることができています。

新卒入社式

 そんなfreeeの短期&長期インターンを経て新卒入社した現在は、会計freeeのコアなエンジンをエボリューションするプロジェクトチームに配属され、主にGoとRubyを書いています。

 このプロジェクトは少し前に立ち上がった新規プロジェクトで、エンジニアチームを含め全社から注目されています。優秀なエンジニアに囲まれ、再び打ちのめされている日々ですが、これまでのインターンで経験したことのない経験を更に得ることができています。ここでの経験は自分のエンジニアとしてのキャリアにとって大きな財産になると確信もしています。やっていくぞーー!

社内でチームを組んで参加した駅伝大会

パワーアップした2017年サマーインターン

 そんなわけで、今年もfreeeではエンジニア/デザイナーサマーインターンを実施します。今年のサマーインターンは一昨年や去年のものからパワーアップしたところが2つあるんです。

 一つは配属チームです。これまでは基本的に会計freeeや会社設立freeeの開発チームがメインでしたが、今回はエンジニアのチーム全てで受け入れる体制を作ります。人事労務freeeの開発チーム、モバイルチーム、インフラチーム、デザイナーを含めたエンジニア内の全チームに配属される可能性があります。

 自分はモバイルアプリの開発はできるつもりだけどどれだけ通用するのか試したい、自分の専攻はインフラだけどアプリケーション側の実装もしてみたいなど、多くの学生の要望に応えられるよう準備を進めています。

 二つ目はメンターの数です。これまでのサマーインターンではインターン生3人につきメンター1人がついていましたが、今回はインターン生1人につきメンターが1人つくようになります。マンツーマンです。一週間という期間で可能な限りワザを盗んでください。

 最後になりますが、freeeが提供するインターンは、学生の期間では中々得られない経験を提供できる機会だと思っています。皆さんの成長機会としてぜひ活用していただければ幸いです。ご参加お待ちしております!

応募はこちら

jobs.freee.co.jp