長期エンジニアインターンで得た学び

こんにちは。松本と申します。

2020年8月から2021年5月までの約10ヶ月間、クラウド横断本部のわり算グループという技術的負債を解消するチームでエンジニアとしてインターンをしていました。

メインタスクとして社内向け管理画面のリプレイスを担当しつつ、他にも実際にユーザーに使われているサービスの一部機能を改修したり、共通基盤のコードを数千行消してリファクタリングするなど本当に多くのことを経験させてもらいました。


(共通基盤のコードを数千行消した PR)

今回は振り返りの意味も兼ねて、インターンで得た学びを書き残しておこうと思います。

  • 具体的な技術の話をすると収まりきらないので、今回は省略します。
  • 記事にする関係上、詳細を割愛・簡略化している部分もあります。

要求の裏にある「やりたいこと」を常に意識する

続きを読む

Rails のモデルのコールバックを削除したら、とある処理を 33 倍速くできた話

こんにちは!
マネーフォワード クラウド経費 というサービスでサーバサイドエンジニアをやっている 福岡拠点 (九州・沖縄支社) の野田 (@quanon_jp) と申します。
最近は 狩猟 に勤しむ日々で、ハンターランクは 333 を超えました 💪

先日、クラウド経費で大規模な事業者 (ユーザ) 様の環境で実用に耐えないほどのパフォーマンスの劣化が発生しました。
そのときに行ったパフォーマンス改善についてお話します。

モデル構造と問題点

ユーザ (User) モデルとプロジェクト (Project) モデルがあり、1 人のユーザに対して複数のプロジェクトを割り当てることができます。
その割り当てをプロジェクト割り当て (ProjectAssignment) モデルで表現します。

続きを読む

マネーフォワードCTOが考えていること(2021年6月)

こんにちは。
マネーフォワード CTOの中出(なかで)です。

CTOの私が、普段「なにを感じて、どんなことを考えているか」について、四半期に一回社内へ共有している内容を一部編集し、エンジニアブログに公開したいと思います。

前回はこちら:マネーフォワードCTOが考えていること(2021年3月)

 

目次

  • 技術的負債からの脱却
  • リードエンジニアへの期待値
  • 採用へのコミット

 

技術的負債からの脱却

多くの企業が抱えているであろう技術的負債を、例外でなくマネーフォワードも抱えています。技術的負債からの脱却は、マネーフォワードの多くのエンジニアにとっての悲願です。先日9周年を迎えたマネーフォワードは、2016年12月頃からその負債を解消するプロジェクトをスタートし、実に歴史の半分をかけて負債からの脱却を図っています。
過去の判断はマネーフォワードが成長していくために最善のものであり、負債であると同時に資産でもあります。その結果、今も多くのユーザーに価値を提供できています。

続きを読む

Magic Podの導入

マネーフォワード MEのiOSエンジニアの椎名です。
今回は、MEにテストツール Magic Pod を導入した時の話と、そこで得た知見やMEでの活用方法をお話できればと思います。
テストでお悩みの方は是非御覧ください。

導入の経緯

MEではユニットテストのコードがほとんど無く、うまく自動テストが運用できているとは言えない状況で、品質の担保はQAテスターに頼っていました。
とはいえ、人によるテストには限界があります。テストのスコープが広がれば工数も大きくなりますし、その分ミスも増えます。

そこで、MEではE2Eテスト導入導入の試みがされることになりました。
なぜE2Eテストなのかというと、以下の理由があります。

  • MEの運用ではユニットテストを網羅的に書く事は、過去の知見から得策ではなさそう
  • そもそもQAの負荷を減らす事が発端なので、QAがしているテストに近い方法が良さそう

はじめにE2Eテストツールを自前で実装する事を考えましたが、想像以上に機能が複雑になる事と、WebViewは対応が難しい事、導入後のメンテが大変という課題がありすぐに断念…
そんな時、Magic Podの記事を見つけました。

Magic Podとは

TRIDENTさんが提供する、WebとモバイルアプリのE2Eテストをノーコードで自動化するクラウドサービス です。
(MEではWebへの導入はまだしていませんので、以下モバイル前提、主にiOSでの導入の話となります)

続きを読む

OpenAPIでスキーマ駆動開発してみた

こんにちは!
マネーフォワードでインターンをしている伊藤巧です。

社内向けAPIの開発をスキーマ駆動開発で行いました。
本記事では、それについて紹介します。

「スキーマ駆動開発はなんとなくわかるけど、いまいち進め方のイメージが湧かない。。。」といった方にとって参考になる内容になっています!

※今回はあくまでスキーマ駆動開発の一例を紹介することに留めており、ツールの設定や使用方法等に関する細かい部分は説明していません。

 

技術スタック/ツール

  • OpenAPI Specification 3
  • openapi-generator (コード生成ツール)
  • Rails
  • RSpec
  • Committee
    • ReDoc (ドキュメント生成ツール)
    • Stoplight Studio (OpenAPI用のGUIエディタ)

 

OpenAPI Specificationとは

OpenAPI SpecificationとはRESTful APIの仕様書の記述法で、これに準拠して機械可読な仕様書を作ることで様々なツールを利用して開発の生産性を高めることができます。以降ではOASと呼ぶことにします。

続きを読む

【Rails】トランザクションを張るときにSQLキャッシュで気にすべきこと

こんにちは!
マネーフォワードでインターンをしています、鈴木寛史です。

この記事では、私たちのチームで提供しているAPIで起こった1つのエラーに関して、調べたりしても似たようなケースの記事がなかったので紹介したいと思います。
トランザクション、SQLキャッシュで困ってる方やデータベースにあるはずのレコードが何故か見つからないという状況の方は参考になるかもしれないです!

エラーが起きた背景

APIで行っている処理

以下のコードはエラーが起きたエンドポイントで行っている処理を一部抜粋したものです。
(※ 以下のコードは実際のものとは異なります。また、無駄に思えるような処理がありますが、説明のため今回起こったエラーと関係しているものだけを載せています。)

return if User.find_by(params)

ApplicationRecord.transaction do
  User.create!(params)
rescue ActiveRecord::RecordNotUnique
  # ほぼ同時にリクエストが来た場合は別リクエストで対象ユーザが作られているはずなのでそのレコード取得する
  User.find_by!(params)
end

リクエストパラメータで渡された条件と一致するUserが見つかればプログラムを終了し、見つからない場合は渡されたパラメータのUserを新しく作成するという処理です。

続きを読む

Nuxt v2 のSPAモードが起動するまでの流れを追ってみた

こんにちは。
マネーフォワード クラウド勤怠」エンジニアの ktmouk です。

最近、社内でも個人的にも Nuxt.js の名前をきく機会が増えたのですが、内部でどのように動いているのか気になったのでコードを読んで流れを追ってみました。

なお、Nuxtのバージョンは v2.15.4 時点で、SPAモードで実行した場合の流れを見ていきます。

今回見ていく題材

コードを追う前に、とりあえずNuxtを起動してみます。

Nuxtのリポジトリには簡単なサンプルコードも含まれているので、その中からSPAのサンプルコードを動かしてみます。

続きを読む

輪読会「Go言語による並行処理」を行いました

こんにちは。
Goを推進するGolang推進グループに所属してGoエンジニアをしている @yoskeoka です。

2020年11月〜2021年5月まで、書籍「Go言語による並行処理」(日本語翻訳版) の社内輪読会を全20回×60分かけて行いました。
この書籍の内容が気になっている人や、輪読会の題材としてどうなの?ということについて、得られた知見を共有したいと思います。

Goでは基礎的な文法を説明した入門的な書籍以外はあまり多く出版されていません。2018年にこの書籍の和訳が出版されたときはGoを高度に使いこなしていくためには必須の一冊ではないかと思い購入して一読した記憶があります。

それから月日は経ち、あるマイクロサービスの開発で、並行処理が有効な場面で、並行で通信する実装をする機会がありました。コードレビューで並行処理が正しく行えているのかわかりにくいfan-in, fan-outパターンを使えばもっと上手くやれるのでは 等々の激しい議論が交わされました。
その結果ですが、Goの並行処理を語る上での共通言語は身につけておいた方がいいよねということになり、改めてしっかりと本を読む機会として、社内輪読会を主催することにしました。

書籍について

こちらの日本語翻訳版を使用しました。
日本語翻訳版は、訳者による訳注や補遺が追加されていたりするので、おすすめです!

続きを読む

社内エンジニア生産系可視化ツールで個人のメトリクスを見れるようにした話

こんにちは。
CTO室でインターンをしてるtakuanです。

今回は私たちが開発している社内のエンジニア生産性可視化ツール「Fadil」に個人のメトリクスを見れる機能を追加したので紹介したいと思います。

Fadilとは

FadilはMoney Forward社内のエンジニアの生産性を可視化することができるweb アプリケーションです。
詳しくはこちらの記事に書かれているので今回は省略します。

個人のメトリクスを可視化できるようにした背景

phase1 リリースで Repository ごとの Commit, Monthly Active Developers, Pull Request Countなどのメトリクスを表示する機能は実装しました。
fadilプロジェクトの定例ミーティングの中で「phase2では個人のメトリクスも見れるようになったら面白いね」という話が出たので実装することが決まりました。(fadil開発チームではこのような雰囲気で、比較的自由に機能追加などを決めることができます。)

(phase1 時点でのメトリクスの画面)

続きを読む

Story of being a speaker at a tech panel discussion

Hi, I’m Son (ソン), software engineer @ Startup Studio, CEO Office.
As a title, I will share the story of my first chance of being a speaker at a tech panel discussion.

Context

This march, our CTO Nakade was looking for a speaker for the webinar about How should engineers utilize design patterns effectively which was co-organized by Money Forward and Mekari. Even though I’m definitely not an expert in that field, I believe I have some valuable perspectives to offer, therefore I have voluntarily registered.
To be honest, that topic can be challenging for experienced engineers. This is not the kind of knowledge that you can absorb overnight but requires a certain degree of experience in the software industry.
I personally did some public speaking before in both Vietnamese and English, but never in the QA or Panel discussion, where speakers usually have a ton of expertise. Actually, except me, all other speakers attending that event are already the Tech Lead or Engineering Manager.
In addition, I had only one week for preparation from the day I told our CTO I’m going to the stage to give a speech.

続きを読む