Money Forward Developers Blog

株式会社マネーフォワード公式開発者向けブログです。技術や開発手法、イベント登壇などを発信します。サービスに関するご質問は、各サービス窓口までご連絡ください。

20230215130734

ビジネス職内定者(プログラミング初心者)がエンジニアインターンで学んだこと

はじめに

こんにちは!わり算チームの成田です。2022年9月15日より約6ヶ月の間、クラウド横断本部のわり算チームでインターンをさせていただきました。この記事ではどのようなことに取り組んだのか、わり算チームとの関わりも含めて紹介したいと思います!

自己紹介

理系大学の修士1年生(23新卒)の成田雄貴です。生命科学専攻でがん治療を目的とする免疫細胞作製法の確立というテーマで研究をしていました。プログラミングは1年ほど勉強していましたが、アプリケーションを開発した経験は少なく、つまり初心者です。2023年4月からはマネーフォワードのビジネス職として働きます!

わり算チームとは

マネーフォワード クラウドシリーズのプロダクトにある技術負債を解消するチームです。この技術負債をマネーフォワードでは「桃園の誓い」アーキテクチャと呼んでいます。以下に詳細記事を載せます。

マネーフォワードは創業初期からデータベースをプロダクト毎に用意するのではなく、共通データベースを用いていました。しかし、会社規模の拡大に伴って様々な問題が見えてきました。これがマネーフォワード クラウドシリーズの技術負債であり、我々わり算チームが先陣を切って解消を目指している課題になります。わり算チームの名前は、共通データベースや既存のプロダクトの仕様を分割していく(わり算する)ところから来ています。

かなり特殊で独自のプロダクトを持たず、横断的なプロジェクトを進めています。つまりマネーフォワード クラウドシリーズの数多くのプロダクトを開発することができるということです!これは拡大フェーズのマネーフォワードだからこそのチームで、わり算チームじゃないとできない経験が多くあると思います。

わり算チームのことをもっと知りたい!という方は僕の先輩であるコットンさんが書いた記事も読んでみて下さい!

インターン挑戦の経緯

就職活動でIT系を志望するにあたってプログラミングの知識が必要だろうと思い(ゲーム好きなのもあってプログラミングにはもともと興味がありました)、就活中に勉強を始めて、楽しくなりオンラインスクールを短期で受講していました。結局、就活ではエンジニア職を受けずに、将来的にこの知識が役立てばいいな程度に考えていました。しかし、最終面接でCEOの辻さんに「キャリアに悩んでいるなら、エンジニアに挑戦してみれば?」とアドバイスをいただき、エンジニアインターンに挑戦してみることなりました。

ちなみにエンジニアインターンを受けるにあたってコーディングテストを受験しました。2回目で合格したのですが、1回目はほぼ0点で正直何もわからなかったですw。1回目は、コーディングテスト特有の標準入力を受け取り関数に組み込んでいく初めの一歩がどうにもできませんでした。正解の出力をするための関数を作製する以前の問題でしたね。

このままではまずいと思ったので必死に対策を考えました。ただ、この標準入力の対策には苦戦しました。理由は、ランダムに数字を変数に入れるような似たような仕様の再現はできても、特殊な実行環境が必要なのか本番と全く同じような仕様の再現はできなかったからです。結局、とにかく検索して役立ちそうなコードを確認して、本番でそのコードに手を加えながら、標準入力を受け取れるように調整する。ということをやりました(2回目でもかなりここに時間を使ってしまいました)。

他に役に立ったのは、動画学習です。今では様々な動画が配信されています。動画のような動的な学習ツールは実際に人がどのように考え、どのような順番で、コードを記述していくのかを現在進行形で見ることができる点がとても身になりました。自分が実際にこの時勉強に使用していたのはUdemy現役シリコンバレーエンジニアが教えるアルゴリズム・データ構造・コーディングテスト入門です。もちろん静的な学習ツールも利用しました。僕が使用していたのはprogateです。プログラミングの勉強は基本的にこれを使って進めていました。静的な学習ツールは基本事項を学ぶのに適していると思っています。

そんなこんなで必死に対策して、なんとか2回目で合格をいただけました!このテスト結果を見た方には「1回でここまで点数を上げられる人は多くない」と言っていただけました。

インターン経験で特に印象に残っていること

様々なタスクに取り組ませていただきましたが、一番は「共通管理画面の機能追加や機能削除」をメインに取り組みました。その中で特に印象深いものの詳細を書いていきます。

まずは環境構築

Ruby、RailsもMacも初めましてで、GitHub 関連の知識は座学で学びましたが実際に使用したことがなかったので、最初は何もわかりませんでした。新しく入った人のためのドキュメントが整備されていたのですが、知識がなさすぎて、読んでもよくわからないところが多くあったので、とにかく検索して、先輩に聞きまくっていました。 環境構築はエラーとの戦いで、よくわからないところでエラーが発生して、困惑していました。とにかく意識したのは、言われたことは些細なことでもメモする、悩みすぎず先輩に聞くということです。またGoogleや社内Slackで調べれば解決法がわかることが多いということも学びました。先輩の力なくしてこの環境構築を完遂することはできなかったと断言できるほど、助けられました。

また、初心者である自分だからできる初心者のためのドキュメント整備をすればよかったなと、今では思います。ただその時はそんな余裕が全くなかったですw。

ログアウト機能を作る

これを僕が作りました。これだけ?って感じだと思いますが、初心者の僕には結構大変でした。

確かに経験者であれば数時間?数分?で終わるようなタスクだと思います。自分はたっぷりと時間をいただいて、Rails の勉強をしながら実装しました。初めて自分で書いたコードが画面に表示されて純粋に嬉しかったことを覚えています。

このボタンを作るだけでもやることはそれなりにあります。まずは画面にボタンを表示させます。しかし表示させただけでは何も動作しないので、このボタンを押した際にどのような処理が行われるのかを記述します。

ここでチーム開発を初めて経験しました。苦労したのは、すでにプロダクトとして成り立っているコードを読み解くことです。自分一人で開発するのとは異なり、コードの書き方を既存のコードに習って記述する必要がありました。やはり座学で学んだことがそのまま使えるわけではないので、現場の実装を経験することができてよかったです。

クラウドパートナー管理画面の別サービス移管についての調査

これは共通管理画面に存在する機能を削除し、必要であれば別のサービスへ機能を移管するタスクでした。そのために、他チームとコミュニケーションをとり、どの機能を削除するのか、どの機能は残すのか、別のサービスへの移管方法はどのようにするのかを決定しました。これらを僕が主体となって進めました。

具体的には、まず Slack で質問し、機能の使用状況の調査を簡単に行いました。他チームへ連絡をしたのは初めてだったので言葉遣いや質問の意図が伝わるのかなどを、まず先輩に念入りに確認しました(コットンさんありがとうございます)。その後、MTG を設定し、使用する資料の作成から、MTG のファシリテートを行いました。インターンという立場でありながら、大きめの仕事を任せていただきました!資料の作成では MTG 議題を明確化し、何を決めなければいけないのかを意識しました。MTG 後は内容を整理して、自分でできるものに関しては自分でタスクを設定して、プロダクトに変更を加えていきました。

この経験はとても成長に繋がったと思います。エンジニアはコミュニケーションが少なく、ひたすらコードを書くというイメージを持っていましたが、他チームとコミュニケーションを取り、連携しながらタスクを進めていくものなんだなと改めて実感しました。そして、エンジニアサイドの人がどのようにビジネスサイドの方と連携をとるのかを学ぶことができました。

他のプロダクトの開発も経験しました!

入社当初は一つのプロダクトを開発することが多かった自分ですが、他のプロダクトの開発も行いました。久しぶりに環境構築を行って、最初はあんなに何もできなかったのに自分で進めることができて、改めて成長を感じました。

プロダクトごとにコードの書き方やレビューの仕方が異なりました。それも様々なプロダクトに触れることができるわり算チームだからこそ感じることができたことだと思っています。エンジニアサイドとビジネスサイドのコミュニケーションについても触れましたが、エンジニア同士でもコミュニケーションが盛んで、会社という集団に属していると連携のためには重要なんだと改めて気付かされました。

インターンを通して

感じたこと

まず率直にみんな優しいです。基本的なこと、当たり前のこと、しょうもないこと、なんでもしっかりと答えてくれました。タスクも同じような内容の繰り返しではなく、常に新しい経験ができるように調整して下さいました。ただ必要なタスクを割り振るのではなくて、僕が成長するためには、飽きないようにするにはどんなタスクをやってもらうのがいいのかを考えながらタスクを調整してくださったのがよくわかりました。

マネーフォワードには他人に感謝などを伝える文化があるのですが、チームの方々から下の写真のように送られてきて、とても温かさを感じました。これはとても良い文化ですね。

※ 多くのメッセージをいただきました

わり算チームの話しとは離れますが、社内にシャッフルランチという文化があって、希望者がランダムにチームに分けられて、初めましてでランチに行く。というものがあります。僕もこれに参加させていただきました。他職種の方など普段話す機会のない方との交流の場になりますし、他の会社で働いたことのない自分は中途入社の方から色々なお話を聞くことができてとても楽しかったですし、学びも多かったです。

学んだこと

プログラミングの知識経験はもちろんのこと、質問の仕方のようなビジネスの基本的なことから、エンジニアの方々がどのように仕事をしているのかなど、ビジネスサイドからでは見えにくいエンジニアの実情を知ることができました。

もう少し具体的にすると、

質問の仕方

質問は「どうすればいいですか」とか「何をすればいいですか」みたいな自分で考えていない質問はしないようにしました(研究室生活でも大切だった)。実際にどうすればいいのかわからなくても、まずある程度は自分で調べて、「僕はこう思うのですが、合ってますか」など自分の考えを伝えながら質問することが大切であると感じました。この方が自分の成長にもつながるし、質問される相手も何をどう答えればいいのか明確になるので答えやすいと思います。

コミュニケーションの取り方

他チームへのコミュニケーションで特に指摘されたのは、何故そのようなことをするのかの前提条件、前提理由の簡単な説明をつけること。まずは目的や背景、課題を共有することが大切だと学びました。

エンジニアの仕事

エンジニアの仕事は、見える結果、成果よりも見えない部分が多いと感じました。自分の「ログアウト機能を作る」タスクでもそうでしたが、見た目以上にコードレベルでやることが多く、バックエンドエンジニアは(見た目ではなく)内部の機能を作っていくことがメインになるので、なかなかエンジニアではない人には理解されにくいなと感じました。

特に大変だと感じたのは障害対応です(インターンの自分は実際に業務で経験したわけではないですが)。障害が起きた時の対応は迅速に解決しなければいけないのでスピードが求められ、そんな状況下で障害の原因を解明し解決するのは自分にはまだ難しいと感じました。

障害を起こさないためにも、あらかじめ起こりうる状況を想定しコードを記述します。稀有な例まで想定しなければいけないので一苦労です。

このようにプロダクトを管理しつつ、開発するエンジニアの方々は本当にすごいなと尊敬の念がより一層強まりました!

そして最後に、考えていたよりもコミュニケーションが多いということです。何か仕様を変更するときも他チームとの連携をとっていかなければいけないですし、その仕様を決めるのも他チームとの意思疎通が必要でコミュニケーションベースでタスクを進めていくんだなと感じました。

もう少しできたらよかったこと

もっとエンジニア職にコミットしたかったです。自分は理系の大学院生ということで、研究もかなり忙しくてインターンにコミットしきれなかったなと感じました。もっと時間を持ってもっとできることを増やして、エンジニアとしての経験を深いものにしていきたかったです。

上記の内容にもつながりますが、もっとスキルをつけてタスクの初めから終わりまで一通り経験したかったです。自分は基本的にこれをやってほしいと具体的なものを言われてそれを実行していくことが多かったのですが、やる内容を決めるところからの経験をもっとしたかったなと思いました。

今後

4月からは23新卒のビジネス職としてマネーフォワードで働きます。チームの人と一旦お別れになってしまうのはとても寂しいですが、新たな場所、仕事内容でも頑張ります。 自分はエンジニアサイドとビジネスサイドを繋げるような人材として活躍していきたいです。目下の目標はカスタマーサクセスになることです。僕が目指すのは、「提案できるカスタマーサクセス」です。これはお客様に対してという意味もありますが、お客様の課題を解決できる新機能などを社内に向けても提案できるという意味も込めています。これにはコードレベルでのプロダクトへの深い理解が必要だと思っています。

まだ実際の業務を経験していないので抽象度が高いものになってしまいますが、エンジニアの経験を最大限に生かしていきたいです!

最後に

マネーフォワードにして良かった!!

理系の大学院生である自分の周りはメーカーの開発や研究職を目指す人が多かったです。そんな中で、就活を通して自分がやりたいことを見直したところ、このような業界を選ぶことになりました。悔いのない就活をして、悔いのない選択をしたと思っていますが、インターンを通して会社の文化、中の人に触れて、改めてマネーフォワードにしてよかったなと心から思えました。

これからも、この選択を正しいものだったと胸張って言えるように、引き続き頑張りたいです!

感謝!!

わり算チームの皆様には本当に感謝です。初心者を受け入れてくれて、悩み相談に乗ってもらったり、自分ができるタスクを考えてくれたり、自分の挑戦を応援してくださったりと、本当に助けられました!

特に、メンターのコットンさんは近い距離で指導してくださったので、感謝してもしきれないです。リーダーのしげるさんには多くの相談に乗っていただいたり、挑戦を後押ししてくださったりと、とても助けていただきました。同じチームのHiroVodkaさんは常に自分のことを気にかけてくれて、必要な時に必要なフォローをしていただきました。

部長の原田さんは親しみやすく帰りの電車で色々なお話をしたことをよく覚えています。新卒入社で僕の4ヶ月前に入社したチエンさん、新卒でほんの数ヶ月前に入社したヴィンさん、勤続年数で言ったら大先輩だけどまだ高校生の春貴くん、みんな仕事をどんどんこなしていて、とても刺激になりました。マネーフォワードにしてよかったなと改めて思えたのはチームがよくしてくれたからだと思ってます。ありがとうございました!

人事の佐藤里美さんにも大変感謝しています。ビジネス職の選考でお世話になり、エンジニアインターンへの挑戦を応援していただいたり、途中自分の無理なお願いにも対応していただいて、ご迷惑もおかけしたなと思いますが、最後まで応援してくださいました。ありがとうございました!

そして、そもそもこのような挑戦を応援してくれた会社に感謝です。あくまで自分はビジネス職採用なので、このような挑戦をさせてもらえること自体がありがたいことだなと常々感じていました。

まとめ

9月15日より始めた約6ヶ月のエンジニアインターンはここで終了し、4月からは心機一転してビジネス職として頑張ります。ここまで本当にありがとうございました。そしてこれからもよろしくお願いいたします!

最後に、送別会を企画していただいた時の写真を載せます!とても暖かいチームでした!ありがとうございました!