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

エンジニアになりたかった6年前のわたしへ

カバー画像:タイトル「エンジニアになりたかった6年前のわたしへ」 この記事は freee Developers Advent Calendar 2024 の7日目です。

adventar.org

みなさん、こんにちは!freee 外部連携基盤エンジニアのおっそーです。

最近、採用イベントや面接などで、学生の方・社会人の方どちらともお話する機会が増えてきました。その中には、未経験からエンジニアを目指す方やまだ経験が浅い方も多くいらっしゃいます。

わたしは25歳で社会人になると同時に未経験からエンジニアになり、ポテンシャル枠(※自称)でフリーに転職してきましたので、そんな6年間を振り返りつつ、どうやって一人前に近づいてきたかや、フリー*1に来たらどのような成長が得られるのかを書いていきたいと思います。

※フリーの募集ポジションに「ポテンシャル枠」があるわけではありません。募集ポジションは https://jobs.freee.co.jp/entry/career/ をご覧ください。

わたしのキャリア

まずは簡単にわたしの経歴を紹介させてください。

  • 大学・大学院では農学部で衛星リモートセンシングの研究
    • 先生のコードを真似てちょっとJavaのコードを書きかえたことはある程度。ここまで開発経験はない
  • 新卒でスタートアップに就職
    • 最初の1年くらいはプロジェクトマネジメント(要件/仕様の確認や開発・QAを含めたリリーススケジュールの調整など)がメイン業務
    • 次の1年半くらいはフロントエンドの開発がメイン業務。開発に従事したのはこのタイミングが初めてだったかも。プロダクトと社内向けデザインシステムを開発
  • フリーに転職
    • バックエンドの比率が高いチームに所属となり、フルスタックエンジニアとして早3年

実質フリーに入社する前に業務として開発に従事していたのは1年半かもしれません。しかも業務としてはフロントエンドのみといっても過言ではありませんでした。

エンジニアになるためにどのくらい勉強したの?

わたしがどういった学習タイプの人間かというと、解答・解説を見ながら何度も問題集を解いて教科書を理解するタイプ。1回教科書を読むだけでは理解できないし、問題が解けるようにもならない。でも、決めたことをコツコツやるのは嫌いじゃない。開発は楽しいけど、寝食を忘れてやるのは無理です。

どんな勉強をしてきたの?

時系列は無視して、わたしがやってきたことをパッと思い出せる限りで書き出してみます。

  • Ruby on Rails
    • 一番最初に Ruby on Rails チュートリアル をやりました。最終的に3周くらいしたと思います。最初は理解できませんでしたが、Rails の開発だけではなく、Webアプリケーション開発に大事なエッセンスがたくさん詰まっていて最高の教材です
    • フリーに入社後、復習を兼ねて「個人開発を毎日1コミットする」を目標に Rails API モード + React で Todo アプリを作りました
  • React
    • React はフリーに来てから初めて触れるフレームワークだったので、上の Rails の思い出しと合わせて React も書いてました
    • りあクト! という本をチームの方に紹介してもらい、毎日読書+Slack投稿。分かりやすくてすごく良かったです
  • Go
    • Tour of Go を最初に1周やりました。1日1題を目標に、進捗とその日の学びをメモ。業務で詰まったところは適宜戻って復習しています
    • つばめ図書館*2から本を1冊借りましたが、業務に直結する部分だけかじって終えてしまったのでタイトルを忘れてしまいました…
  • Ruby
    • 独習Rubyという本を最後まで読んで毎日 Slack に投稿!
  • SQL
    • 最初は Progate で基本を学習しました
    • フリーに入社後、SQL 100本ノック をやりました。毎日1題を目標に進めました
  • デザイン
    • デザインシステムの開発に携わっていたこともあり、最初はデザイナーに質問しまくって一般的な知識をポツポツと覚えました
    • 体系的な知識の整理のため、本を1冊読みました(Amazonプライム会員で無料で読めた本だったことしか覚えてない…)
  • テスト手法
    • 2冊くらい読んだ
  • AWS/GCP
    • それぞれ1冊ずつ読んだけど、あまり覚えてない(読んだ当時、並列してやりすぎて頭に入らなかった)
  • 設計関連(広義)
  • その他

ちなみに、候補者様との会話をインタビューの短い時間の中でなるべく正しく理解するために、PHP や Next.js や Python などのチュートリアルをサクッとやってみたりもしています。

どう進めてきたの?

ひとつ上の見出しのサマリになってしまいますが、学習を進める上で以下の3点を特に意識しています。

  • 1日の目標を決める
    • 1日1コミット、1日1題など、少し頑張れば絶対に達成できる目標にする
    • 並列度を上げすぎない(GoとReactとRubyとTypescriptでそれぞれ〇〇を...というのは、本業と並行してやるのは難しい)
    • 平日しか計画を立てない(土日はズレた分を取り返すための時間。意外と丸1日以上あるのがちょうど良い)
  • アウトプットをする
    • Slackに投稿、読書メモを取る、LTで話すなど
    • インプットだけでは理解できないという自分の特性を理解したうえで、Slackに投稿したりLTで話したりと人に見せられるレベルで自分の言葉に直すようにしています
  • 手を動かす
    • 読書メモを取る、チュートリアルをやる
    • 概念ややり方を理解したつもりでも、実際にやってみると意外とできないことが多く、この「あれ?」という感情が記憶への定着に関係すると感じます

継続と焦らないことが大事だったと感じています。

エンジニアになりたての頃は「フロントも分からないしバックエンドも分からない、そもそもソースコードを書くお作法も分からない…一体何からやればいいんだ」と不安でいっぱいでしたが、不安に負けてアレコレ手を出すとどれも中途半端になることは大学受験で経験済みなので、業務上すぐに必要な知識は先輩に聞いて補いながら、自分の学習はいまやっているコンテンツに集中して”毎日やる”ことに努めました。


勉強の際に取っていたメモやLTにつかった資料のキャプチャ
勉強の際に取っていたメモやLTにつかった資料のキャプチャ

フリーに入ってからどう成長したか

もともとフリーに入る前はほぼフロントエンドしかやってこなかったわたしですが、いまではバックエンドもできるようになったことはもちろん、PdLエンジニア*3という役割をいただいて働けるまでになってきました。

フリーは開発文化( https://jobs.freee.co.jp/engineers/ )を非常に体現している組織なので、これを交えて自分が得られた成長について話したいと思います。

フリーの開発文化(失敗して攻めよう・何でもやれる、何でもやる・必殺技・カッとしてシュッとやる・世話を焼いていくスタイル)のイラスト
フリーの開発文化

失敗して攻めよう

学びのある失敗をして最速で成長しよう。学びのある失敗とはチームやプロダクトの成長につながる失敗。学びのある失敗をしていないのは挑戦が足りない。

フリーはなんでも挑戦させてくれる文化です。

「分からないけどとりあえずやってみたい!」という気持ちをJM(ジャーマネ)*4に相談し、入社直後からバックエンド開発のアサイン、設計、問い合わせの対応など、とりあえずいろいろとやらせてもらいました。ユーザーさんへの価値提供を優先しているため、要望に合う開発アイテムがすぐにないことももちろんあります。

着手してもひとりでやりきれないことも多々あり、チームにはたくさん迷惑をかけましたが、「この経験から学んでくれれば良いよ」と全員が温かくフォローしてくださいました。フリーに入社して最初の頃に出したPR*5で、100件以上のコメントのやり取りをしたのは今でも懐かしいです。一回で理解できなかったのに、理解できるまで付き合い続けてくださって本当に感謝しかありません。

また、会計チーム全体の Prettier のバージョンアップ案件で、進め方がうまくなかったせいで、いくつものPRがマージできなくなる問題を起こしてしまった際も、謝罪と周知のSlack投稿に対して、責められる反応ではなく「失敗して攻めよう」というスタンプがたくさんついたこともとても嬉しかったです(笑)

皆様ご迷惑をおかけして大変申し訳ありませんでした 感謝8 失敗して攻めよう17 ほんまに感謝です5
「失敗して攻めよう」というスタンプがたくさんついた Slack 投稿

たくさんの機会を作っていただいた結果、フリーに入社時点で最低目標としていた「バックエンドもフロントエンドもできるエンジニア」は1年以内には達成できました。

何でもやれる、何でもやる

チームで扱う課題について、特定の技術や領域に固執せずオールラウンドに取り組めているか。アプリもインフラも、サーバーサイドもフロントエンドも、早さも正確さも。

自分が書いたコードが原因でデータベースに負荷がかかり、アラートが鳴るという経験から、自分がデータベースについて何も知らないことに気づきました。 フリーには自発的に生まれたたくさんの委員会がありますが、タイミングよく、データベース管理組合という freee会計のデータベースを横断的に見ていく委員会が発足したため、この委員会に参加することにしました。委員会での活動を通じ、データベースの負荷を下げるための工夫を学べただけでなく、実際に大規模障害を未然に防いだ事例もつくることができました。

また、QAエンジニアのやっていることをアプリケーションエンジニアチームでやってみる挑戦もしました。 ymty さんたちQAエンジニアのサポートをもらいながら、障害可能性の低い開発プロジェクトでQAをやってみることで、QAエンジニアがどの段階で何を考えているかや品質を保証するためのテストケース作成の手法を学びました。 エンジニアでやることでコミュニケーションコストが若干削減されるため、最速で品質の高いリリースをすることにもつながりました。

こういった取り組みの結果、ただのアプリケーションエンジニアから、自分の担当機能以外も含めた横断的なデータベースのパフォーマンスを見ることができたり、QAエンジニアの真似事ができたりする「何でもやる」エンジニアに近づけたと思います。

障害を未然に防いだ取り組みの共有で社内イベントに登壇しているようす
障害を未然に防いだ取り組みの共有で社内イベント登壇をしているようす

わたしはこういった活動を通常業務の一部の時間を使って実施してきましたが、フリーには留学*6という制度があり、これを活用して学びを得ているメンバーも多数いるため、わたしも近くモバイルやインフラを学んでみたいと密かに考えています。

世話を焼いていくスタイル

チーム内外問わず周囲を自分の知見で助けられているか。レビューしているか、システムor人間のアラートに疾風迅雷のごとく反応しているか。

自分が世話を焼いた話ではなく、焼いてもらった話なのですが(苦笑)。

Slack に毎日学習記録を投稿していましたが、間違えた理解をしていたら訂正してくれたり、関連情報も追加で教えてくださったりと、わたし個人の勉強に対しても温かいサポートをいただきました。

通常業務でも、委員会活動でも、そして個人的な学習でも、フリーで多くの方に温かく世話を焼かれ助けられたことが、効率よく学びを深められただけでなく、できない自分に負けずに頑張り続けられることにつながりました。

React学習時、Slackに投稿した学習内容に対してコメントをくれているキャプチャ
React学習時の毎日Slack投稿と投稿にコメントをくれている様子

さいごに

まだタイトルを回収していませんね。 それでは最後、6年前の自分に言いたいことを書いていこうと思います。


6年前のわたしへ

あのとき、エンジニアへの道を進んでくれてありがとう。

プログラミングとの最初の出会いは小学生だったかな? 自分のブログかホームページかを作るのが少し流行ってて、そのときに書いたHTMLで、いろいろな文字の表現ができたのがすごく楽しかったんだよね。

その後、エンジニアへの道を選べたかもしれない場面は何度かあったけど「難しそう」「自分には無理」って遠ざけて来たよね。大学の学部選択で選ばなかったのは特に印象に残っているよ。

でも、ベンチャーでを中心に就職活動を進めていく中でプロダクト作りをしている企業を見て、コードが書けるようになりたい気持ちを思い出しちゃったね。 行きたかった企業から内定をいただいて、そこからエンジニアに向けての勉強を本格的に開始したけど、最初は本当に苦しかったね。内定者期間、全員エンジニアの研修を受けたけど、エンジニア志望じゃない同期よりも開発ができなかったね。入社して希望通りエンジニア配属になったあとも開発の仕事ができず、「遅いからもう別の人にお願いして」って言われちゃったこともあったね。あの頃は成長していないことが悔しくて、毎日泣きながら仕事してたね。

でも、エンジニアになりたかったから、自分に負けずに頑張ったね。1年くらいかかったかな…少しずつ開発ができるようになって、仕事も少しずつ難しいものがもらえるようになって。フロントエンドの開発経験が積めたね。

社会人3年目でフリーに転職してからは、バックエンドの開発ができなくてまた苦戦したね。内定者時代に買った初心者用のRubyの本を引っ張り出して毎日読んで、覚えたことのサマリーをSlackに投稿したら、関連知識のレスをたくさんもらえたね。勉強のための個人開発のレビューまでしてくださって。技術力が高いだけでなく、本当に優しくて温かい素敵な方々とお仕事ができています。

そうやってたくさんの人に気にかけてもらいながらコツコツ勉強を続けてきた結果、社会人6年目のわたしはエンジニアとして心から楽しく仕事をしています。ストレッチングなプロジェクトを任せてもらえたり、未経験の分野に片足出して挑戦してみたり、イベントに登壇してみたり、こうやってエンジニアブログを書いてみたり。 それもこれも、あのとき一歩踏み出す勇気を持てた、エンジニアの道を選んだ6年前の自分のおかげ。できないときも辛い時も、自分に向き合って頑張り続けてくれたおかげだよ。

もっともっと開発が楽しくなるように、そして使ってくださるユーザーさんに便利さを最速で届けられるように、これからも頑張るぞ!

6年後(2024年12月)のわたしより。


まともに開発の仕事ができるようになるまでわたしの場合は数年かかってしまったため、辛い期間もそれなりに長かったように感じますが、それでも今は楽しいと感じられることを仕事にできる幸せを毎日感じながらお仕事ができています。

エンジニアという仕事に興味はあるけど、本当にできるようになるかな?大変じゃないかな?と、エンジニアになりたいけど迷っている方へ。

なるまではとても大変だったということは正直にお伝えしつつ、それでもエンジニアになりたい方の背中を押したいと思ってこの記事を書きました。なにか参考になれば幸いです。

そして、フリーの開発文化に乗っかって爆発的に成長したい方!成長して freee プロダクトをより進化させ、スモールビジネスを世界の主役にしていきたい方!ぜひ一緒に働きましょう。

*1:会社の正式名称は「フリー株式会社」のためカタカナでフリーと記載しています。また、記事中の freee はプロダクトを指しています。

*2:フリー社員が使える図書館。みんなといるのに、ひとりになれるfreeeの図書館|秋山詩乃

*3:プロダクトリードエンジニア。フリーの開発組織の中で、PdM(プロダクトマネージャー)と一緒にプロダクトを推進していく開発側のロールです。

*4:マネージャーのこと。マネージャーはメンバーと並走して成長させる役割を持っているため、芸能界のジャーマネのような存在であってほしいという意思が込もっています。

*5:Pull Request(プルリクエスト)の略です。

*6:自分のチームにも生かせるナレッジを持ち帰ることを目的とした、他のチームへの短い期間限定(数週〜数か月)の異動制度のこと。