Engineering from Scratch

エンジニア目指してます

マネーフォワードで1年間インターンをしてみて

この記事はMoney Forward 関西拠点 Advent Calendar 2021の24日目の記事です。

23日目は,大倉さんのスクラムとボクでした。大倉さんの今までの経験,普段の思考が垣間見える素晴らしいポエムでしたね。

初めまして!マネーフォワード関西開発拠点でエンジニアのインターンをしている吉岡です。2020年の10月からインターンをしており,早くも1年以上経過したので,1年間のインターンを通して,どれほど成長することができたのか書いていきたいと思います。

まずは,インターンを始めた時と現状のレベルをざっと比較していきます。

インターンを始めた時のレベル

現状

  • AtCoder
  • Rails,Reactでの実務経験(API開発からフロントの実装まで)
  • GoやPythonでの実務経験(他社で1ヶ月ほどですが)
  • Rspecでテストパターンの漏れが無いようにテストが書ける
  • 新機能の開発だけでなく,既存の機能の改修も経験
  • 一つのタスクを適度な粒度に分解して,適宜質問をしながら作業を進めることができる
  • オブジェクト指向がなんとなくわかる

こうしてみると,チュートリアルを終えたばかりの人間が1年で実務に携わることができていると思うと感慨深いですね。なんなら,今よりもインターンを始める前の方が,「俺はコードが書ける」と思っていたぐらいです。無知とは恐ろしい。。。

次に実際にインターンにジョインしてから今まで何を行ってきたのか紹介していきたいと思います。

研修期

最初に2ヶ月ほどの研修期間がありました。研修内容は,1つのWebアプリをメンターの方にコードレビューや壁打ちを行ってもらいながら開発を進めていくといったものです(なんとお給料まで出ます!)。僕のメンターは大倉さんでした。ここでの指導が今のエンジニア力につながり,成長速度を爆速にしてくれたなと感じており,師匠だと思っています!

具体的には,以下のようなことを学びました。

  1. アプリの作り方(仕様やDB設計,JIRAを使用した開発)
  2. Restfulとは,オブジェクト指向とは
  3. Qiitaやブログを鵜呑みにするのではなく,公式ドキュメントを必ず参照して,コードの背景まで説明できるようにすべき
  4. Rspecの流儀
  5. わかりやすい命名
  6. 責務の分割(サービスクラス,decoratorの導入)

などなど,ここには書ききれないぐらい学びました。また,Docker環境やCircleCIによるテストの自動化などインフラ領域を少し触れる機会もありました。

f:id:yuya333:20211222235736p:plain
めちゃくちゃコメントもらってます!

特に,3番の,「公式ドキュメントを必ず参照しなさい」というアドバイスは非常に貴重なアドバイスでした。普通のエンジニアならば当たり前のことかもしれませんが,初学者がついついやってしまうことで,最初にいい癖をつけてもらったなと感じています。また,ただレビューで指摘されるだけではなく,参考資料と一緒に指摘していただいたり,読むべき本をサッと薦めていただいたのもより理解につながったのかなと感じています。

www.amazon.co.jp

www.amazon.co.jp

www.amazon.co.jp

↑研修中に読んだ本(一部抜粋,マネーフォワードの京都拠点にある本を借りることができました)

実務期

研修を終えたあとはいよいよ実務に入りました。いきなり実務に放り出される....などということはもちろんなく,管理画面や小さいタスクから任せていただきました。その後は,新機能の開発,既存機能の改修など様々な領域にチャレンジできます!開発は,一人で実装を行い,わからないことがあれば適宜質問,そしてメンターともう一人のチームのメンバーにコードレビューをしてもらうといった流れです。実際にどんな開発を行ってきたのか書こうとも思ったのですが,ダラダラと書くのもあれなので,開発をしていく中でよかったことを書いていきたいと思います。

1.質問のしやすい環境

Slack上で非同期的にいつでも質問ができるので,わからないことがあれば気軽に質問ができます。また,必要があればDiscordを使って同期的に質問もできるため開発がしやすい環境です(1時間調べてもわからなかったことが一瞬で解決することも)。加えて,ただわかりませんと質問するのではなく,何を解決したくて,何を行っていて,何がわからないのかを踏まえて質問する癖もつきました。

2.週1の1on1で悩みや方向性を相談

メンターの方と週に1回,1on1を行っています。ここでは,開発で詰まっているところ,自分が挑戦してみたい技術はもちろんのこと,エンジニアとしてのキャリアの悩みなど非常に幅広い範囲の相談が行えます。「挑戦できる環境ってどこの会社でも言ってそう」,と当初は思っていたのですが,より大きなタスクに挑戦してみたい,RailsだけではなくReactにも挑戦してみたいといった相談をさせていただいたところ,僕ともう一人のインターン生で既存の機能を改修するReactのタスク(むしろ大きすぎるタスクでしたが。。。)を任せていただき,技術的に挑戦できる環境だなと感じています(関西拠点のGive it a try!という精神が体現されています!)。他にも,「Railsを理解して使っているというよりは覚えようとしてしまっている,CSやインターネットの知識が不足している」と言った悩みに対しても,「RailsではなくRubyを勉強すべき」と言ったアドバイスや本を紹介していただけたりなど,1on1が様々な悩みの解決につながっています。

www.amazon.co.jp

www.amazon.co.jp

↑アドバイスを受けて,最近読んでいる本

3.複数人によるコードレビュー

関西拠点のエンジニアはどの方もレベルが高く,その方々からレビューをいただけるという非常に恵まれた環境です。しかも,複数人の方からレビューをしていただき,多角的な意見をもらうことができ,実力UPにつながっています。最近では,バックエンド領域を得意とする大倉さん,フロント領域を得意とする上石さんの二人からDiscordを使ってリアルタイムでコードレビュー会をしていただくというとても贅沢な機会を設けていただいています。

4.実務経験を積むことができた

何と言っても実務経験を積むことができたというのはかなりいい経験になったと思います。個人開発レベルでは気にならないパフォーマンスの問題,運用・保守を意識した実装,ユーザのことを考えた開発など,実務では気にしなくてはいけないことが山ほどあり,その経験をサポート体制が整った中で積むことができたのは,成長に大きくつながったと感じています。

最後に

1年間のインターンを通して,とにかくエンジニアとして成長することができたなと感じるばかりです。ただ,まだまだ知識・経験ともに足りないことばかりなので,これからも成長し続けていきます!

このように,マネーフォワードの関西拠点では,成長したい,エンジニアとして強くなりたいという方に最適な環境が整っています! 正社員だけではなく,インターン生も絶賛募集中です!

kyoto.moneyforward.com

明日は,Money Forward 関西拠点 Advent Calendar 2021もいよいよ最終日!西村さんです!

クックパッドサマーインターンに参加してきた

 8/16~8/27にクックパッドのサマーインターンに参加してきました。

 

techlife.cookpad.com


 

 前半五日間はクックパッドの社員の方々による講義,後半五日間は実務に取り組みました。

 

 講義の内容としては,Next,GraphQL,SwiftUI,Rails,aws,サービス開発講義と盛りだくさんの内容でした。

 普段触れる機会のなかった,SwiftUI,awsを触れていい経験でした。今まではWeb開発に力を入れていこうという気持ちが強かったのですが,こういった新しい技術に触れることで,変に領域を縛る必要もないのかなと改めて思いました。

 サービス開発講義では,一日コードを書くことなく,実際にユーザーインタビューを行い,そこから価値仮説を立て,その仮説を元にFigmaでデモを作成し,もう一度ユーザーに触ってもらうのを観察して,フィードバックを頂くという内容でした。ユーザー自身が自分の欲しいものがわからない中で,価値あるものを作る難しさを学びました。また,僕自身,創造力や独創性がないから新しいサービスや機能を作り出すことにセンスがない,苦手だと感じていたのですが,実際に多くの価値を生み出している既存のサービスでも,いきなりパッと考えが浮かぶことは稀で,仮説を立て,それを検証し,ブラッシュアップしていくという,どちらかというと論理的な道筋で作られるものが多いのかなと感じました。

 

 後半五日間の実務では,お馴染みのレシピページのABテストの実装を行いました。社内ツールが豊富で,何をするにしてもスピード感を持って開発をすることができました。

 ABテストの実装に関して得た学びは以下です。

 

・ABテストは,一時的に開発するもので,終了後,削除等で管理しやすいように同じディレクトリにまとめておく

・ABテストのために,既存コードを変更しない

→wrapperコンポーネントを使用した

・ABテストで既存テストが落ちるべきではない

→既存のライブラリを使うことで解決しました。gemだとchankoというものが存在するみたいです。

 

github.com

 

 今まで,ABテストという名前を聞いたことはありましたが,その実態までは知りませんでしたが,デプロイまで完了することができてよかったです。

 

 また,インターン全体としては,以下のような学びがありました。

・自分が理解していること,理解できていないことをはっきりと相手に伝えるべき

・統計について勉強すべき

→どれだけ多くのデータが出てもそれを分析し,理解する能力がなければ宝の持ち腐れになってしまう。色々本を紹介していただいたので,順次勉強していく。

・サービス開発を主眼に置くことも大事だが,まずは技術を磨くべき

→一口にサービス開発といっても,マーケティングの勉強もしないといけないだろうし,すぐに身に付くノウハウではない(し,それが正しい方向性かもわからない?)から,技術力を磨いていきつつも,本で学んだり,実際の現場を横目で盗んでいくべき

・自分が与えられたタスクのただ漠然とこなすべきではない

→自分の上司から与えられたタスクの解像度をあげ,それが全体の仕事の中でどういう役割を持っていて,なぜ行う必要があるのか,何に繋がるのかといった全体のマップを頭の中に持っている必要がある

 

 

 

 前半の講義,後半の実務ともに非常に密度が濃いものであっという間の二週間でした。こんなに莫大な量をやり切ることができたもの,熱心にサポートしてくださったエンジニア,メンターの方々,運営に携わってくれた方々のおかげでした。ありがとうございました!

 インターン内で色々学べたのはもちろんのこと,これからの自分の成長速度を加速してくれるインターンだったと思います。