Zeitwerkとrequire_dependency

こんにちは、ぽっけです。マネーフォワード クラウド会計Plusでエンジニアをしています。

Rails 6.0から、新しいAutoloaderとしてZeitwerkが導入されました。Rails 7.0からは旧来のAutoloader (Classicと呼びます)は使えなくなり、Zeitwerkが必須となりました。

Railsでソースコードを読み込むメソッドにrequire_dependencyがあります。require_dependencyは、Zeitwerkでは使う必要がなくなりました。 この記事では、require_dependencyがなぜZeitwerkで必要ないのかを深堀りしようと思います。

require_dependencyとは

そもそもrequire_dependencyとは何でしょうか? このメソッドは、Rubyデフォルトのrequireloadの代わりにRailsが提供しているメソッドです。

続きを読む

Railsのnew_framework_defaultsとの向き合い方

こんにちは、ぽっけです。マネーフォワード クラウド会計Plusでエンジニアをしています。

この記事ではRailsのnew_framework_defaultsとの向き合い方を整理します。私は最近Railsアップグレード業をしています。その中でこの設定との向き合い方を考える機会があったため、それを記事にしたためました。

new_framework_defaults とは

まずはnew_framework_defaultsとは何か、について説明します。

この記事では便宜上、以下の2つの要素をまとめてnew_framework_defaultsと表現しています。

  • Rails::Application::Configuration#load_defaultsメソッド
  • config/initializers/new_framework_defaults_*.rb ファイル

これらはRailsのアップグレードをよりスムーズに行うために用意されています。

では、これら2つの要素についてより詳しく見ていきましょう。

続きを読む

【クラウド勤怠】爆発する組み合わせテストと真摯に向き合う

この記事について

こんにちは。「マネーフォワード クラウド勤怠」のエンジニアをしています katuo です。直近、自分が担当する新機能開発プロジェクトで影響範囲が広範囲でかつ複雑な条件が混ざり合うテスト設計が求められる場面がありました。その過程で苦しみながら得たテストケース作成の知見などを一部抜粋して本記事にて共有できればと思っております。

なお、業務の関係上、具体的なテスト対象の公開が難しいため、一部表記を控えさせていただいています。

combinatorial testing

テスト対象となる機能の1つにユーザーからの入力を受けて保存処理を行う機能のテストを実施する場面があり、combinatorial testing(組み合わせテスト)を用いてのテストケース作成を試みました。この機能をテストするにあたっての因子と水準を考えると、初期状態や操作などを合わせて、7つの因子で構成されており

exhuastive testing(全網羅テスト)をする場合、テストケース数が各水準の種類を掛け合わせた12960件になってしまうようなテストでした。広範囲でかつ複雑な条件が混ざり合うテスト設計が求められている状況において、限られたリソースで効果的で十分なテストを設計するかということを考慮した結果、必要性が低いと判断されるテストケースを削減する方針でテストケースを作成していくことにしました。

続きを読む

[ノーコード] Zapier × Slack × asanaでタスク管理とユーザーコミュニケーションを効率化する

こんにちは。

マネーフォワードビジネスカンパニー所属の下村です。
ビジネスサイドエンジニアとして、日々業務自動化や、効率化を推進してます。
(以前はCIO室に所属していましたが、ビジネスサイドの業務をテクノロジーで効率化したい!と思い異動しました。)

本日は、社員からの問い合わせや作業依頼についての対応を効率化してみた記事を書いてみます。

この記事の要約

  1. Slackとasanaを併用するうえで、両者のメリットを最大限活かしつつ、デメリットを消せる運用を自動化してみた。
  2. 依頼者とのコミュニケーションはSlackに統一。
  3. 対応者はタスク管理はasana、依頼者とのコミュニケーションをSlackで行いつつ、スレッドでのやり取りをasanaタスクのコメントに記録するようにした。
  4. 上記方法の実現にZapierを使ってノーコードで実現した。

なぜやったか

下記のような課題があったため、Slackやasanaの良いところを最大限、活かしつつタスク管理したいなーと思ったためです。

  • 依頼者とのコミュニケーションはSlackで行うのが便利なのでSlackで行いがち。
  • ただ、Slackはタスクの優先度付けやToDo管理には向いていない…。
    • 「あれ?あの質問内容どのスレッドでやりとりしてたっけ…」となりがち。
  • そこでasanaでタスク管理をしようとするが、下記のような問題点が起きがち。
    • Slackの投稿内容をasanaに転記するの漏れがち。
    • asanaのタスクだけを見ても何やってたか忘れてしまい、Slackのスレッドの内容を再確認して時間を無駄にしがち。

続きを読む

DogStatsDを使った独自メトリクスのDatadog取り込み検証をローカル環境で実施する

クラウド勤怠とクラウド給与で一人プロダクトSREをしているVTRyoです。いつの間にかプロダクトを兼任していて人手が足りません、助けてください

Datadogに独自メトリクスを取り込むために最初はStaging環境などで検証しようとしたのですが、動くかわからないもののためにエンジニアのコードレビュー時間を取っても勿体ないです。

ローカルでDogStatsDを検証する方法があったので紹介します。

前提

Datadog側が提供している既存のメトリクスでは取得できない、アプリケーション独自のメトリクスを集計する必要がありました。
プロダクト固有の問題に寄り添ったSLIを設定するためには、もはや必須の条件です。

独自のメトリクスをDatadogに送信する方法はいくつかあります。

  • カスタムAgentチェック
  • DogStatsD
  • PowerShell
  • DatadogのHTTP API

今回はDogStatsDを利用します。
アプリケーション側で制御できることや、Datadog Agentに付属するメトリクス集計サービスであることによる導入コストの低さが理由です。

続きを読む

アプリケーションロジックを見直してマネーフォワードMEのとあるAPIを約50%高速化しました

マネーフォワード ME のサーバサイドエンジニアの taka.naoga です。
ME が提供するとある機能のアプリケーションロジックを見直すことで、エンドポイント単位でパフォーマンスを改善した話を紹介しようと思います。

改善した機能紹介

はじめに、改善の対象となった機能について概要をご紹介します。

画像赤枠で囲われているアプリホーム画面の「お知らせ」機能です。

ここに表示されているお知らせは、ユーザの属性ごとに任意のセグメントを設定することで、リクエストしたユーザに合わせたキャンペーンや関連サービスの紹介などをすることができます。
社内からアクセスできる管理用のwebアプリケーションを使ってマーケティングチームなどが設定、運営をしています。

設定できるユーザ属性には、年齢や性別といったプロフィール情報から、「証券口座を連携しているユーザ」のようにユーザの連携口座に基づいたものなど多岐にわたります。

改善したアプリケーションロジックは、リクエストしたユーザがどのセグメントに属するかを判定し、表示するお知らせを抽出する部分です。

続きを読む

OSS Forwardするエンジニアにインタビュー!なぜOSS開発文化が育っていないマネーフォワードで活動をおこなうのか?

企画概要

今回は最近マネーフォワードが公開したOSS開発の消費税計算GemJctを主導したTaKOBKiさんに、なぜ社内ライブラリをOSSで公開しようと考えたのか、を根掘り葉掘り聞いてみたいと思い、インタビュー企画を実施しました。

jct

OSSとは?

オープンソースソフトウェア(英: Open Source Software、略称: OSS)とは、利用者の目的を問わずソースコードを使用、調査、再利用、修正、拡張、再配布が可能なソフトウェアの総称である[1]。

wikipedia参照

それでは早速インタビューしていきたいと思います!
聞き手は技術広報の luccafort です。

プロフィール: 株式会社マネーフォワード CTO室付 前田 喬之(TaKO8Ki

luccafort: まずは自己紹介からお願いします

TaKO8Ki:2019年11月からマネーフォワードの京都開発拠点にインターンとしてジョインしました。
『マネーフォワード クラウド会計Plus』(以下、会計Plus)のスクラムチームに入って、開発をしていました。
経歴を全て話すと長いのですが、『会計Plus』のパフォーマンス改善をおこなったり、現在も本番環境で動いているマイクロサービスの設計と開発をしていました。

続きを読む