Money Forward Developers Blog

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

20230215130734

クラウド会計を支えるマイクロサービスをインターン生中心でリリースしました!

こんにちは。今年の4月に新卒入社した廣瀬です。 私は3月までインターンとしてマネーフォワードビジネスカンパニー 経理財務プロダクト本部 プラットフォーム開発部 業務基盤グループに勤務していました。

先日、マネーフォワード クラウド会計は証憑自動取得機能をリリースしました。 今回は、当該機能の実現に向けて、インターン生が中心となって開発したマイクロサービスについて紹介します。

目次

  • 証憑自動取得機能とは
  • 利用イメージ
  • リリース後の反応
  • 開発したマイクロサービスのソフトウェアアーキテクチャ
  • インターン生の多い開発体制での難しさ
  • 感想

証憑自動取得機能とは

証憑自動取得機能は、マネーフォワードの強みであるアカウントアグリゲーション(金融機関等との連携を行う技術)の仕組みを活用して、外部のサービスから証憑(領収書・請求書)を自動でダウンロード・保存することで、会計業務の工程を簡略化し、本来やりたい作業に集中できるようにすることを目的とした機能です。 ※詳細はこちら

当機能は、財務担当の方が取引のたびに実施しなければならない、証憑データのダウンロード・及び指定の形式でのアップロードを自動化しました。

利用イメージ

証憑自動取得機能の利用イメージについて紹介します。

また、本記事で紹介するマイクロサービスを証憑アップローダーと呼びます。 証憑アップローダーの責務は、アカウントアグリゲーション(以降、アグリ)サービスから取得した証憑データを取得し、電帳法に対応したストレージサービスであるマネーフォワード クラウドBOXへ保存することです。

  1. ユーザはクラウド会計上で証憑自動取得に関する連携設定を行う。
  2. 設定情報は証憑アップローダーに伝えられる。(同時に、アグリサービスにも伝わる)
  3. (2)の状態でユーザがECサービスを利用すると、アグリサービスは、証憑ファイルを自動でダウンロードする。
  4. 証憑アップローダーはダウンロードされた証憑ファイルを取得する。
  5. 証憑アップローダーはダウンロードした証憑ファイルをクラウドBOXに保存する。
  6. ユーザはクラウド会計上で仕訳登録(決算書作成のための、金融取引内容の入力)を行う。ただし、アグリサービスによって仕訳登録のための元データも連携されるため、ユーザの操作は殆ど必要ありません。

リリース後の反応

 リリース直後から現在まで、たくさんのコメントやご好評いただきました! インターン生という立場であっても、ユーザに価値を届けることができたとわかり、素直に嬉しかったです。

証憑アップローダーのソフトウェアアーキテクチャ

証憑アップローダーのソフトウェアアーキテクチャは以下のようになっています。 (処理内容については、重要な内容のみ抜粋しています)

図のように、証憑アップローダーはクラウド会計・クラウドBox・アグリサービスと連携します。 また、sync_db(データベース)やSQS(メッセージキュー)といったミドルウェアと、gateway, detector, uploader の3つのプロセスによって構成されます。 ここでは、3つのプロセスについて簡単に紹介します。 ※連携サービスについては省略します。

gateway

  • 連携に関する設定など、外部入力を受け付けるプロセスです。

detector

  • 証憑ファイルに更新(作成・上書き・削除等)が発生したユーザを検知するプロセスです。
  • 証憑ファイルのアップロードが必要なユーザを特定し、uploaderに処理を依頼します。
  • detectorによって、全てのユーザの更新差分を定期的に取得することもできますが、アグリサービスの負荷抑制のために、証憑ファイルに更新が発生したユーザの検知のみ実施しています。

uploader

  • detectorからアップロード対象ユーザ一覧を受信し、ユーザ単位で証憑ファイルの更新を行うプロセスです。
  • 高スループットが求められ、ファイルなどの大容量データを並列アップロードするなど、処理特性や求められる拡張性がdetectorと異なるため、別プロセスにしています。
  • 最終同期時刻を更新することで、データの整合性を保つための、べき等性に配慮した設計になっています。

インターン生の多い開発体制での難しさ

証憑アップローダーは、私を含むインターン生3人がメインとなって開発しました。 開発時に特に難しいと感じたことを2つと、それに対して意識したことについて紹介します。

  1. インターン生ごとに勤務頻度や勤務日が異なること。
  2. 開発スピードが求められていたこともあり、数日休むだけで、現状の把握に時間がかかり、プロジェクトに追いつけなくなってしまうこと。

インターン生ごとに勤務頻度・勤務日が違うことに対して意識したこと

これについては、下記をチームとして意識することでメンバー同士の進捗把握、コミュニケーションがより取りやすくなったと感じています。

  • タスク同士の依存関係を理解し、ブロック要因になるようなタスクを事前に予測して役割分担をすること
  • レビューが滞留しがちになるため、積極的にレビューを拾うこと
  • Working out Loudを意識すること
    • 自分が今何をしているのかをチャットなどに呟きながら作業をすることです。
    • これによって、勤務日の異なるメンバーが当日何をしていたのか把握できるほか、お互いにサポートしやすくなるといったメリットがあります。
    • 私のチームでは、開発用Slackチャンネルに作業ごとにスレッドを立てて、つぶやく文化ができました。

※ STG: staging環境(本番環境と同様の構成のテスト用環境)

数日休むだけでプロジェクトに追いつけなくなることに対して意識したこと

私はこの課題に対して、自分がどこまで理解する必要があるのかを見極め、状況に応じて焦点を合わせることが重要であると感じました。

例えば、システムの全てのコードを1行1行細かく理解すると、開発スピードやキャッチアップ速度に限界があります。 実際に、自分の実装範囲やレビュー対象範囲以外は概要の理解だけで十分な場合が多く、詳細を知りたいときにだけ焦点を絞ることが重要だと学びました。

これは、実装だけではなく、設計やプロジェクト管理でも同様のことがいえると考えています。 概要の理解と詳細な理解を使い分けることで、お休み中にプロジェクトが一気に進んでも、より素早くプロジェクト全体や開発のキャッチアップ、追加タスクへの着手ができるようになりました。

感想

今回、初めて立ち上げからリリースまで一つのマイクロサービス開発に関わることができました。 また、冒頭で紹介したように、リリース後にはユーザの皆様からご好評いただき、業務効率化に貢献できたことを嬉しく思っています。

開発の中では、特に品質を意識したシステム作りについて多くの学びがありました。 例えば運用・監視のためのテストやメトリクスの設計、負荷テストの設計・実装など、機能要件・非機能要件共に、これまでのインターンでは体験したことのなかったタスクに着手することができました。

私が所属する業務基盤グループでは、マネーフォワード クラウド会計における、技術的な課題解決を目的としたマイクロサービス開発を行っています。

今回紹介した証憑アップローダーは、アグリサービスのような、既に稼働中で多くのプロダクトから利用されているサービスに接続するため、その設計思想や技術的制約などに合わせる形で開発する必要があるという難しさがありました。 私は、ただ0→1でシステムを作るのではなく、マネーフォワードのコア技術であるアグリサービスを活用し、ユーザに大きな価値を提供できたことに面白さ、やりがいを感じました。 引き続き新卒入社後も、同グループでクラウド会計の技術的課題の解決、及び税務業務の効率化に貢献していきたいです!


マネーフォワードでは、エンジニアを募集しています。 ご応募お待ちしています。

【会社情報】 ■Wantedly株式会社マネーフォワード福岡開発拠点関西開発拠点(大阪/京都)

【SNS】 ■マネーフォワード公式noteTwitter - 【公式】マネーフォワードTwitter - Money Forward Developersconnpass - マネーフォワードYouTube - Money Forward Developers