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.

続きを読む