Reacji Channelerを使って楽をしようとしたら情弱であることを晒してしまった…の巻

TL;DR

  • Reacji Channelerは便利なので積極的に使いましょう
  • ぼくのような凡ミスをするときちんと理解してないことがバレます、容量用法を守ってお使いください。
  • お役立ち機能を公式が用意してくれているのめちゃくちゃ最高ですね!

 

Reacji Channeler便利そう!わいもやりたい!!!

マネーフォワードには毎月 LGTM賞といってエンジニアの「それ、すごくいいね!」を集めてワイワイするイベントがあります。
LGTM賞にノミネートされるのはエンジニアだけの活動に限らず、経理のかたが素晴らしい熱量でまとめてくれた社内ドキュメントやPOのGoodな行いなどを推薦することもあります。

なお、LGTMとは「Looks Good To Me」……ではなく、「Looks Good Technology driven to Me」の略です。
もしかすると近々「Looks God To Me」に改名されるかもしれません(多分ない)

このLGTM賞は自薦他薦を問わず公募しているのですが、少しでも推薦のハードルを下げるため「LGTM賞へ」という絵文字をつけると勝手にLGTM賞に推薦されるという仕組みがあります。
この絵文字リアクションをつけるだけ、というハードルの低さがめちゃくちゃ個人的に体感がよすぎて真似したくなってみました。
きっとこの記事をみているかたも試したくなったことでしょう、うんうんぼくはしってるんだ!

続きを読む

AndroidアプリにおけるUIの状態保存と復元について調べてみた

こんにちは。
2020年新卒でAndroidエンジニアの宮本です。
マネーフォワード クラウド確定申告アプリの開発を担当しています。

マネーフォワードでは、全社のAndroidエンジニアが集い、月一で社内勉強会を開催しています。
(最近はオンラインにて開催)

この勉強会では、毎回Android開発に関するテーマを1つ決めて深堀り、発表・ディスカッションしています。
本記事では、2021年1月の勉強会で私が発表した『AndroidアプリにおけるUIの状態保存と復元』について紹介します。

 

はじめに

Androidアプリにおいて、ユーザーが端末の戻るボタンを押してActivityを閉じたり、「最近の画面」でスワイプしてアプリを終了するなどしてActivityの破棄が行われると、ユーザーが行った操作などによって変化したUIの状態は初期化され、再度ActivityやFragmentを開いた際は変更前のクリーンな状態から開始されます。

▼ 「最近の画面」のスクリーンショット(公式ドキュメント 最近の画面 より引用)

そのため、多くのアプリでは画面表示に必要なデータをAPIから都度取得したり、データベースに保存できるようにしていることが多いでしょう。

一方で、AndroidのシステムによってActivityが破棄されてUIの状態が初期化されることもあります。
そのため、AndroidフレームワークではUIの状態が保持されることを保証するために、必要なデータを保存・復元するための仕組みが用意されています。

今回はどのようなときにシステムによってUIの状態が初期化されるのか、UIの状態を保持・復元するべきケースやその方法について解説します。

続きを読む

マネーフォワードクラウド確定申告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を採用しました。

続きを読む

インフラ留学を糧に理想の開発を目指して組織を作るまでの話(Plus Ops でこんにちは)

マネーフォワードで 『Plus Ops グループ』と『わり算グループ』というグループに所属しつつ、バックエンドのエンジニアをしています 古濱 といいます、こんにちは。
お酒と Rust が好きです。最近良かった日本酒は茨城の松盛です。

少し前に『わり算グループ』の古濱として『さくっと各サービスのライブラリのバージョンを見ようの巻』という記事を投稿しました。趣旨は異なりますが宜しければこちらも是非読んでみてください。

余談はさておき、今日はマネーフォワード社内で約半年間にかけて行われたインフラ留学制度とそれを元に 『Plus Ops グループ』という新しい組織を作ることになった話をしようと思います。

免責事項

この試みはまだ始まったばかりなので特に成果というものはまだ出ていません。

しかし試みを行うきっかけとなったインフラ留学制度が素晴らしかったのでその紹介と、また僕たちがどういった開発組織を目指していてこの度どうして新しい組織を作ったのかという部分の紹介の記事と出来ればと思っています。

遡って 9 ヶ月ほど前

2020 年の 3 月頃、チームのチャットにこんなメッセージが投下されました。

ちょうどクラウドインフラに興味を持っていた僕はすぐに申し込むことにしました。僕はこの時以下のような期待値を留学に対して持っていました。

続きを読む

スクラムチームで実践するDiscordを活用したスウォーミング

Money Forward Kyoto Advent Calendar 2020、22日目担当です。

こんにちは!
京都開発拠点でエンジニアリングマネージャ 兼 バックエンドエンジニアをしている大倉(@okeicalm) です。
スクラム開発で マネーフォワード クラウド会計Plus の機能改善を実現するチームのマネジメントを担当しています。

私たちのチームではスクラムの価値観、プラクティスを取り入れながらプロダクトを開発しています。
スクラムガイド2020(pdf) でも以下のように言及されているスウォーミングについて、私たちのチームでも実践していますので、『やってみてどうだったか』についてお話していきます。

開発者が計画を調整できるのは、デイリースクラムのときだけではない。
スプリントの残りの 作業を適応または再計画することについて、より詳細な議論をするために、開発者は一日を通じて頻繁に話し合う。

スウォーミングとは

スウォーミングの概要については、こちらのブログ記事 の解説が大変よくまとまってらっしゃったので引用させて頂きます。

続きを読む

京都開発拠点におけるインターン生の活躍

こんにちは!
京都開発拠点でGoエンジニアをやっています @ysakura_ です。

今回は、京都開発拠点におけるインターン生の活躍について紹介します。
京都開発拠点にはインターン生が多数在籍しています。自分のチームでも兼務含めて9名のインターン生が所属しており、今回はGoやインフラ系のインターンを中心に紹介します。実際にインターン生にお願いしているタスクも紹介しますので、京都開発拠点でのインターンのイメージをつけて貰えると思います。

京都開発拠点のインターン生事情

現在、京都開発拠点では14人のインターン生が所属しています。うち13人が長期インターンで、内訳としては、ML4人, Rails4人, Go5人です。
就業時間は15 ~ 20時間前後の方が多いです。
就業時間があまり確保できない問題も一時期ありましたが、リモートでのインターンが促進された結果、この問題は比較的解決した様に思います。

インターン生を多数受け入れている背景

これは、関西では学生の就業機会が少ないため、優秀な学生との接点を持ちやすい事が大きな理由です。
京都開発拠点は京都の三条に位置しており、京都の大学からアクセスが良い事もあり、京都大学や同志社大学の学生が比較的多いです。

私個人として、関西の学生に活躍の機会を提供する事で、関西圏に就職する学生を増やしたい想いがあります。
私は京都大学出身かつ京都にUターンした身なので、就職やインターンの選択肢がほぼ東京に集中してしまう状況に辛いものを感じていました。関西の学生に活躍の機会を提供することで、学生も関西で成長できるWinWinな状態を目指しています。

続きを読む

開発チームで業務知識を獲得するための取り組み

Money Forward Advent Calendar 2020の20日目担当です。

こんにちは!
京都開発拠点でエンジニアリングマネージャ 兼 バックエンドエンジニアをしている大倉(@okeicalm) です。
スクラム開発でマネーフォワード クラウド会計Plusの機能改善を実現するチームのマネジメントを担当しています。ですので、チームの開発力を上げていくことも私の重要なミッションです。

私たちのチームでは会計システムを開発しているので、業務知識として会計に関する知識が必要となります。
入社時から会計に明るいエンジニアはほとんどいないため、基本的にはプロダクトオーナーの杉浦さん(経理部出身、会計のプロ)に解説をしてもらいながらキャッチアップしています。
これにより開発を進めることはできているのですが、
プロダクトオーナーへの依存度が大きい
プロダクトオーナーに質問・確認するコミュニケーションが必要になるのでスピードが上がらない
という課題が存在しています。

上記の課題を解決するために、チームで勉強会を開催していますので紹介させて頂きます。

続きを読む

拠点サイトを作って文化の発信源が生まれた

この記事はMoneyForward Kyoto Advent Calendar 2020 – Adventarの17日目の記事です!

こんにちは、マネーフォワード京都開発拠点のsatomariです。実は京都開発拠点には、拠点のWebサイトがあります。
この記事では、拠点サイトを作るとどんな事がおこるのか?実際に1年開発・運用してみたのでその振り返りを書きたいと思います!

なぜ作ろうと思ったのか?

続きを読む

インターンでの性能改善タスクの取り組み

初めまして!
京都開発本部テクニカルアーキテクトグループ(KTA)でインターンをしているonetkです。

この記事ではインターンを始める前に気になっていた「京都でインターンとしてどのようなことをしているのか」について、以前取り組んでいた性能改善のタスクを例に少し掘り下げた内容となっています。

概要

マネーフォワード クラウド会計Plusでは会計という大量のデータを扱うシステムの都合上、一部の機能が重くなることがあります。
そこで、KTAチームでは既存機能の性能改善を主に行っており、インターン生でも1タスクに丸々チャレンジさせて貰えます!

今回は丸々取り組ませていただいた1タスクが一段落したので過程も含めつつまとめています。内容は大量のRedisの読み込みの影響で特定条件下で2~3分かかっていた一機能の原因探索と改善です。

タスクについて

京都拠点では日々Datadogなどでパフォーマンスも改善できるよう監視しています。
今回課題となった機能の計測結果を覗いてみると、以下のように平均して2分ほど時間がかかっていることが分かりました。

その原因を見てみるとRedisの読み/書き回数が1.25万回と異常に多い事が分かったため、今回はこれを解決していくことになります。

続きを読む