freeeへの闘争 〜営業でも職業エンジニアに育て上げるfreeeの文化〜

こんにちは！freee ソフトウェアエンジニア @toshi0607 です。
この記事は freee Engineers Advent Calendar 2015 14日目です。

# 自己紹介
## 去年かいたもの
* 見積書
* 契約書
* 提案書
* 稟議書
* はじ

## 今年かいたもの
* Ruby
* C#

freeeに転職してもう少しで1年。それまではIT業界で営業をしていました。
週末にコードを書いていたものの、実務レベルにはほど遠い…。そんな僕は今でもまだエンジニアとしてお仕事させてもらっています。
今日はそんな風に生き延びることができた所以やエンジニアを育てるfreeeの文化について順番に紹介していきたいと思います。

# 営業でも職業エンジニアに育て上げるfreeeの文化
## 恐怖の入社前課題

内定から数日後、食い気味にやる気をアピールしたかった僕はCTOにお願いして入社前課題を求めました。結果、以下全てを3ヶ月でマスター勉強することに…！

* [Ruby on Railsチュートリアル](http://railstutorial.jp/)
 * 当時はまだ第2版でした。とにかく最初はわからないなりに書いて動かしました。
* [Ruby on Railsガイド](http://railsguides.jp/)
 * MVC+αを中心に読み込みました。 
* [Webを支える技術](http://www.amazon.co.jp/Web%E3%82%92%E6%94%AF%E3%81%88%E3%82%8B%E6%8A%80%E8%A1%93--HTTP%E3%80%81URI%E3%80%81HTML%E3%80%81%E3%81%9D%E3%81%97%E3%81%A6REST-WEB-PRESS-plus/dp/4774142042/ref=sr_1_1?ie=UTF8&qid=1449580587&sr=8-1&keywords=Web%E3%82%92%E6%94%AF%E3%81%88%E3%82%8B%E6%8A%80%E8%A1%93)
 * 全体の仕組みを頭に入れつつ。
* [チーム開発実践入門](http://www.amazon.co.jp/%E3%83%81%E3%83%BC%E3%83%A0%E9%96%8B%E7%99%BA%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-~%E5%85%B1%E5%90%8C%E4%BD%9C%E6%A5%AD%E3%82%92%E5%86%86%E6%BB%91%E3%81%AB%E8%A1%8C%E3%81%86%E3%83%84%E3%83%BC%E3%83%AB%E3%83%BB%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89-WEB-PRESS-plus/dp/4774164283/ref=sr_1_1?ie=UTF8&qid=1449580617&sr=8-1&keywords=%E3%83%81%E3%83%BC%E3%83%A0%E9%96%8B%E7%99%BA%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80)
 * はじめてのチーム開発に備えて。
* [リーダブルコード](http://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theory-practice-Dustin-Boswell/dp/4873115655/ref=sr_1_1?ie=UTF8&qid=1449580663&sr=8-1&keywords=%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89)
* [はじめてUNIXで仕事をする人が読む本](http://www.amazon.co.jp/%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6UNIX%E3%81%A7%E4%BB%95%E4%BA%8B%E3%82%92%E3%81%99%E3%82%8B%E4%BA%BA%E3%81%8C%E8%AA%AD%E3%82%80%E6%9C%AC-%E3%82%A2%E3%82%B9%E3%82%AD%E3%83%BC%E6%9B%B8%E7%B1%8D-%E6%9C%A8%E6%9C%AC-%E9%9B%85%E5%BD%A6-ebook/dp/B00J4KDYV4/ref=sr_1_1?ie=UTF8&qid=1449580702&sr=8-1&keywords=%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6UNIX%E3%81%A7%E4%BB%95%E4%BA%8B%E3%82%92%E3%81%99%E3%82%8B%E4%BA%BA%E3%81%8C%E8%AA%AD%E3%82%80%E6%9C%AC)
 * コマンドこわい…
* [安全なWebアプリケーションの作り方](http://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9%E3%80%80%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8-%E6%B5%A9/dp/4797361190/ref=sr_1_1?ie=UTF8&qid=1449580734&sr=8-1&keywords=%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9)
 * ユーザもプロダクトも守りたい。
* [パーフェクトRuby](http://www.amazon.co.jp/%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88Ruby-PERFECT-6-Ruby%E3%82%B5%E3%83%9D%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%BA/dp/4774158798/ref=sr_1_1?ie=UTF8&qid=1449580768&sr=8-1&keywords=%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88Ruby)
 * 一度通して読んでからは辞書代わり。
* [パーフェクトJavaScript](http://www.amazon.co.jp/%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88JavaScript-PERFECT-4-%E4%BA%95%E4%B8%8A-%E8%AA%A0%E4%B8%80%E9%83%8E/dp/477414813X/ref=sr_1_1?ie=UTF8&qid=1449580886&sr=8-1&keywords=%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88JavaScript)
 * 重い…
* [セオリー・オブ・スタイルシート](http://www.amazon.co.jp/%E3%82%BB%E3%82%AA%E3%83%AA%E3%83%BC%E3%83%BB%E3%82%AA%E3%83%96%E3%83%BB%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%82%B7%E3%83%BC%E3%83%88-Quick-Master-Web-Technique/dp/4774127833/ref=sr_1_1?ie=UTF8&qid=1449580907&sr=8-1&keywords=%E3%82%BB%E3%82%AA%E3%83%AA%E3%83%BC%E3%83%BB%E3%82%AA%E3%83%96%E3%83%BB%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%82%B7%E3%83%BC%E3%83%88)
* [SQLゼロからはじめるデータベース操作](http://www.amazon.co.jp/CD%E4%BB%98-SQL-%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%93%8D%E4%BD%9C-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AD%A6%E7%BF%92%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E3%83%9F%E3%83%83%E3%82%AF/dp/4798118818/ref=sr_1_1?ie=UTF8&qid=1449580942&sr=8-1&keywords=SQL%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%93%8D%E4%BD%9C)
* [世界一ラクにできる確定申告](http://www.amazon.co.jp/%E4%B8%96%E7%95%8C%E4%B8%80%E3%83%A9%E3%82%AF%E3%81%AB%E3%81%A7%E3%81%8D%E3%82%8B%E7%A2%BA%E5%AE%9A%E7%94%B3%E5%91%8A-~%E5%85%A8%E8%87%AA%E5%8B%95%E4%BC%9A%E8%A8%88%E3%82%BD%E3%83%95%E3%83%88%E3%80%8Cfreee%E3%80%8D%E3%81%A7%E6%89%8B%E9%96%93%E3%81%AA%E3%81%8F%E5%AE%8C%E7%B5%90-~-%E5%B9%B3%E6%88%9027%E5%B9%B4%E7%89%88-%E5%B0%9A%E7%BE%8E-x/dp/4774168068/ref=sr_1_1?ie=UTF8&qid=1449580965&sr=8-1&keywords=%E4%B8%96%E7%95%8C%E4%B8%80%E3%83%A9%E3%82%AF%E3%81%AB%E3%81%A7%E3%81%8D%E3%82%8B%E7%A2%BA%E5%AE%9A%E7%94%B3%E5%91%8A)
 * 業務知識もしっかり！
* [Code School](https://www.codeschool.com/)
 * 設問ありの動画です。特にRspecのセクションでお世話になりました。
* [ドットインストール](http://dotinstall.com/)
 * 言わずと知れた動画サイト。各分野の本を読む前にさっと見ました。
* 端末管理アプリ
 * 動くものを作ってみよう第一弾。
* 書籍管理アプリ
 * 動くものを作ってみよう第二弾。バーコードリーダーで読み取ったISBNから非同期で楽天APIをたたき書籍名等をとってくる感じにしました。正月は震えながらこれを書いて過ごしました。
* [jnchitoさんのRspecに関するQiitaまとめ](http://qiita.com/jnchito/items/42193d066bd61c740612)
 * @jnchito さんがいらっしゃったからこそrspecの一歩目を踏み出せた感があります。
* [Everyday Rails（Rspec関連）](https://leanpub.com/everydayrailsrspec-jp/read)
 * こちらも@jnchito さん繋がりでだいぶお世話になりました。

その後も繰り返したものや今でも参照するものも多くマスターしたとは恥ずかしながらまだまだ言えないですが、入社を楽しみにやりきりました。

毎週「これだけやってくる！」を宣言して進め方も[KPT](http://kuranuki.sonicgarden.jp/2013/05/kpt.html)で改善、順番はとりあえずRailsチュートリアルをやって疑問に思ったものから手をつける、という感じで会社に通っていました。
わからない部分も随時教えてもらえ、スタートアップなのにしっかり教育コストを割いてくれるいい会社やなぁと感動したのを今でも覚えています忘れられません。


## 仁義なき辻レビュー
いよいよ入社！期待7割不安3割くらいで職業としてのエンジニア生活が始まり、最初に驚いたのは辻斬りならぬ辻レビューでした。

freeeではレビュアーをslackにいるbotへassigneeのチームとプルリクエストのURLを投げることで基本的にランダムに決めています。駄菓子菓子！チャットに通知されたプルリクエストのURLを辿り、assignee以外の方も多くのコメントを残してくれます。

結果、一部のプルリクエストは行数に対してすごいコメント数に…

|PR|行数|コメント数|
|:-:|:-:|:-:|
|#9707|+147<br> -2|85|
|#10898|+1041<br> -2|106|
|#10727|+219<br>-43|62|
|#10398|+33<br>-5|49|
|#12044|+763<br>-151|306|
|#13138|+402<br>-5|58|
|#15456|+628<br>-3|51|
|#28|+486<br>-98|47|

経験豊富な方からいただける実務的なアドバイスを糧にキャッチアップの日々が続きました。

## 怒涛のペアプログラミング
チーム編成が変わるとき、チームによってドキュメントがしっかりしていることもあれば、ペアプログラミングで実践的に関連する箇所の知見を継承してもらえることもあります。
普段書くことが多いRubyから離れてC#をがっつり触るときには短期間のリリース目標を定めた上でVisual Studioの使い方からデバッグ、リリースまでみっちり仕込んでもらいました。

## 日報がスルーされない！
freeeではエンジニアの情報共有ツールとして[Qiita:team](https://teams.qiita.com/)を活用しています。（いつもお世話になってます！）。
最近は新人の方が日報を書く、そうでもなくてもたくさん書く、というのが以前に増して定着してきました。
そして、投稿数が増えても記事がスルーされることなくいいね！やコメントがつきます。詰まったことを書くと必ず誰かが助けてくれました。

## 狂ったように素振りする
写経！写経だよ。写経！！！という言葉をメンター（後述）からもらい、信じるか信じないかはっきりしないタイミングで一度やってみました。実際よかったなぁと思ってます。今でも時間を見つけてよくやります。

|題材|愛の深さ|
|:-:|:-:|
|[Railsチュートリアル](http://railstutorial.jp/)|4周|
|[Everyday Rails（Rspec関連）](https://leanpub.com/everydayrailsrspec-jp/read)|3周|
|[実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング](http://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5Ruby-Rails-4-%E7%8F%BE%E5%A0%B4%E3%81%AE%E3%83%97%E3%83%AD%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E6%9C%AC%E6%A0%BCWeb%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E9%BB%92%E7%94%B0/dp/4844335928/ref=sr_1_1?ie=UTF8&qid=1449583973&sr=8-1&keywords=%E5%AE%9F%E8%B7%B5Ruby+on+Rails+4+%E7%8F%BE%E5%A0%B4%E3%81%AE%E3%83%97%E3%83%AD%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E6%9C%AC%E6%A0%BCWeb%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)|2周|
|[パーフェクトRuby on Rails](http://www.amazon.co.jp/%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88-Ruby-Rails-%E3%81%99%E3%81%8C%E3%82%8F%E3%82%89-%E3%81%BE%E3%81%95%E3%81%AE%E3%82%8A/dp/4774165166/ref=sr_1_1?ie=UTF8&qid=1449583997&sr=8-1&keywords=%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88Ruby+on+Rails)のサンプル|2周|
|[Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例](http://www.amazon.co.jp/Ruby%E3%81%AB%E3%82%88%E3%82%8B%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E9%96%8B%E7%99%BA%E6%8A%80%E6%B3%95-%E5%B7%A1%E5%9B%9E%E3%83%BB%E8%A7%A3%E6%9E%90%E6%A9%9F%E8%83%BD%E3%81%AE%E5%AE%9F%E8%A3%85%E3%81%A821%E3%81%AE%E9%81%8B%E7%94%A8%E4%BE%8B-%E3%82%8B%E3%81%B3%E3%81%8D%E3%81%A1/dp/4797380357/ref=sr_1_1?ie=UTF8&qid=1449583644&sr=8-1&keywords=ruby+%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC)|2周|
|[JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック](http://www.amazon.co.jp/JS-Node-js%E3%81%AB%E3%82%88%E3%82%8BWeb%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC-%E3%83%8D%E3%83%83%E3%83%88%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E9%96%8B%E7%99%BA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-%E3%82%AF%E3%82%B8%E3%83%A9%E9%A3%9B%E8%A1%8C%E6%9C%BA/dp/4883379930/ref=sr_1_1?ie=UTF8&qid=1449584048&sr=8-1&keywords=JS%2BNode.js%E3%81%AB%E3%82%88%E3%82%8BWeb%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%2F%E3%83%8D%E3%83%83%E3%83%88%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E9%96%8B%E7%99%BA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF)|1周目|

[実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング](http://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5Ruby-Rails-4-%E7%8F%BE%E5%A0%B4%E3%81%AE%E3%83%97%E3%83%AD%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E6%9C%AC%E6%A0%BCWeb%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E9%BB%92%E7%94%B0/dp/4844335928/ref=sr_1_1?ie=UTF8&qid=1449583973&sr=8-1&keywords=%E5%AE%9F%E8%B7%B5Ruby+on+Rails+4+%E7%8F%BE%E5%A0%B4%E3%81%AE%E3%83%97%E3%83%AD%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E6%9C%AC%E6%A0%BCWeb%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)はチュートリアルの次のレベルの進むためにもってこいな本でservice、form、presenterといった責務をMVCの上に重ねていく様を順を追って見ていくことができます。

既に巨大になっているコードベースを真似して書くだけだとわからない設計にも少しずつ親しみがわくようになっていきました。

写経も周回を重ねると愛が増すのでこれからも回を重ねていきたいです。

あとは半分趣味ですが、[Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例](http://www.amazon.co.jp/Ruby%E3%81%AB%E3%82%88%E3%82%8B%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E9%96%8B%E7%99%BA%E6%8A%80%E6%B3%95-%E5%B7%A1%E5%9B%9E%E3%83%BB%E8%A7%A3%E6%9E%90%E6%A9%9F%E8%83%BD%E3%81%AE%E5%AE%9F%E8%A3%85%E3%81%A821%E3%81%AE%E9%81%8B%E7%94%A8%E4%BE%8B-%E3%82%8B%E3%81%B3%E3%81%8D%E3%81%A1/dp/4797380357/ref=sr_1_1?ie=UTF8&qid=1449583644&sr=8-1&keywords=ruby+%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC)で得た知見を活かしてたくさんたくさん情報収集するコードを書きました。

## 厳しさと、優しさと、メンタリング
これが一番大きかったなぁと思います。freeeでは入社と同時にメンターがついてくれ、日頃の疑問の解消に始まり、望めば定期的な面談にも乗ってくれる頼もしい存在になってくれます。チームが変わっても引き続き面倒は見てもらえますが、新しいチームでもメンター的な人が助けてくれます。

最初は特にモデルとコントローラに書くべきコードの違いすらわからず途方に暮れていました。内部的に決めたリリースの日もなかなか守れず、不甲斐なさや情けなさで人に気軽に質問するのも気が引ける時期もありました。しかしそれも、

**「もっと人に頼れ！ある程度調べてわからなかったら周りに頼って聞く。自分で調べてどうにかするのが大事なんじゃなくて、ちゃんとリリースすること、聞くことを通じて爆速で成長することが大事！」**

というお話で吹っ切れました。

最初、ほとんど何も開発できない裸一貫の状態で飛び込み、1ヶ月 -> 6ヶ月の契約社員も何とか働き切りこうしてエンジニアとして働いていられるのも今回紹介した文化やそれを作る人があってのことでした。

# 宣伝
そんなfreeeでは[一緒に未来を作るフルスタックエンジニアを募集中](https://www.wantedly.com/projects/31487)です！もしご興味を持たれた方はカジュアルにお話するところからぜひぜひよろしくお願いします！

明日は奥様へのほとばしる愛情、嫁タグ記事が2本ある @tetsuwada です。お楽しみに！