マネーフォワードクラウド確定申告Androidアプリの設計方針

こんにちは!
マネーフォワードクラウド確定申告アプリ のテックリードを勤めている須田です。

本記事では2020年3月〜本格開発開始して8月にリリース。現在継続運用中である、Androidアプリの設計方針を共有します。

 

設計方針を定めることで実現したいこと

  • 関心の分離がされている

    • ビジネスロジックの関心事と、技術的な関心事が適切に分離されるようにします。特に、Androidにおいては、UIの表示ロジックと、その他のビジネスロジックが適切に分離されていなければ、クラスの肥大化などの問題が発生します。
  • テストのしやすい設計にする

    • テストをしやすい状態であれば、コンポーネントの粒度が適切に保てている可能性が高く、疎結合に実装できています。新規立ち上げの段階なので、TDDは実践しませんが、グロースフェーズ、成熟フェーズになった際にいつでもTDDに移れるようにします。
  • 複数人でも素早く開発できる

    • 複数人で開発する際、設計方針がバラバラだとコードレビューにとても時間がかかり、ユーザーに価値を届けるまでの時間が長くなってしまいます。方針がある事で、コードを書く際にも読む際にも考える事を減らし、スピードを持って開発する事を可能にします。

 

設計の方針

  • Googleが勧めている設計があれば、原則それを採用する

    • AndroidアプリはGoogleが提供してくれたSDKのAPIを使用して作成するため、Googleが勧めているものを使用します。現時点ではMVVM + Repositoryパターンが推奨されてますので、それに従います。今回、参考にしたGoogleの推奨アーキテクチャはこちらです。
    • 上記の推奨アーキテクチャに合わせて Android Architecture Components を提供をしてくれているので、積極活用します。
  • Android Studio上でエラー表示される実装は原則NG

    • エラーとして表示される実装は安全性、メンテナンス性に乏しいと考えています。

続きを読む

S3のファイルをX-Accel-Redirectで配信する

こんにちは。
マネーフォワード クラウドBox (以下MFCBox)というサービスを開発しています、RailsエンジニアのReoです。

MFCBoxはその名の通りストレージのマイクロサービスなのですが、ファイルの配信方法においてセキュリティと処理の負担軽減を考慮した結果、NGINXの機能である X-Accel-RedirectAWSの署名バージョン 4 を利用することにしました。

 

X-Accel-Redirect

こちらが、公式ドキュメントの概要説明です。

X-accel allows for internal redirection to a location determined by a header returned from a backend.
This allows you to handle authentication, logging or whatever else you please in your backend and then have NGINX handle serving the contents from redirected location to the end user, thus freeing up the backend to handle other requests.
https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/

X-Accel-Redirectは、バックエンドサーバからのレスポンスヘッダーを用いて内部リダイレクトを可能にする仕組みです。
X-Accel-Redirectを用いることで、認証のみをバックエンドで行い、コンテンツ配信はNGINXに肩代わりさせることができるようになります。
コンテンツ配信は一般に大量のメモリを必要としバックエンドサーバの負荷を高めます。コンテンツ配信に優れたNGINXへその処理を移譲し、高速配信を実現するとともにバックエンドサーバの負荷を低減させることができるのが大きなメリットです。

MFCBoxでは

  • 認証されたユーザーにのみファイルを配信する
  • 多数の社内サービスからAPI経由でファイルを配信する

これらの要件が求められていたため、サーバ負荷を低減し高速配信を可能にするX-Accel-Redirectを採用しました。

続きを読む