Blog\Assured公式noteを開設しました/2022-06-13Assuredの技術スタック紹介(アプリ編)こんにちは!エンジニアの内山です。今回は「Assured」のアプリ側(フロント/バックエンド)の技術スタックについてご紹介していきたいと思います。Scalaとは?)や、選定理由については触れません。選定理由については以下の記事で触れていたり、今後書いていくものもありますので合わせて見ていただけるとうれしいです。「Assured」では以下のような技術スタックになっています。今回の記事はアプリ編ということで赤枠部分について書いていきたいと思います。Application)を返すWebで構成されています。これらの他にバッチ処理を扱うアプリケーションなどもあります。アプリケーションの概要図これら複数のアプリケーションはMonorepoで運用しています。現時点ではエンジニアチームの人数も少なく、全員がフロントからインフラまで横断的に実装しているので分割する理由がないのですが、今後分割を検討するにしても依存関係のある各アプリケーションの変更を一括で扱えるというメリットがあります。Frameworkを利用しています。先ほど紹介した各アプリケーションに加えて共通のロジックを切り出すlib-apiというプロジェクトを各アプリケーションが参照する構成になっています。Injection)の仕組みを利用して、以下の様なシンプルなレイヤードアーキテクチャを採用しています。Bootなどをやっていた方はよく目にしたことがある構成かと思います。レイヤードアーキテクチャなお、「Assured」のエンジニアチームは各自得意な開発言語が異なり、私の様にScala初学者もいます。そのため、Scala初学者でもプロジェクトにジョインしやすいようにオンボーディングやコードなどを工夫しています。これらの取り組みについては以下の記事で書いていますので、ぜひこちらも合わせて見ていただけるとうれしいです。PostgreSQLデータベースはPostgreSQLを利用していて、現時点ではマイクロサービス化はしておらず各アプリケーションは同一のデータベースを見ています。データベースのスキーマ定義はマイグレーションツールを使っていて、データベースへの変更は差分をレビューしやすいようにしています。Diagram)もSchemaSpyを用いて現在のスキーマから生成するようにしています。アプリケーションからのデータベースへのアクセスはO/RマッパーのSlickを利用しています。テストについて新規事業では事業がピボットする可能性があったり、組織が大きくなるときにはチームメンバーのスキルセットの変化などもあるかと思います。その時にリライト・リアーキテクチャの選択肢を残して柔軟に対応できるように、捨てやすいコードというものを意識しています。捨てやすいコードの取り組みの1つとして、仮にリライト・リアーキテクチャとなった時にテストが仕様書となるため、少なくともビジネスロジックを扱うServiceレイヤーは正常系、異常系のテスト、Controllerレイヤーは正常系のテストを必須としています。Application(SPA)を作成しています。加えて静的型付けを行うためにTypeScriptを利用しています。packageがあり、各アプリケーションがlib-webを参照する形になっています。Libraryというと少し大げさかもしれないですが、先に触れたように複数のアプリケーションがあるため、buttonやinputなどの最小の単位や一定のスタイルを持たせたdivなど、アプリケーションに依存しない再利用性の高い共通Componentを定義しています。アプリケーションを作成する際はこの共通Componentを組み合わせて作成しています。propsで適用しています。社内向けのアプリケーションであるadminは共通コンポーネントは利用せず、MUIを利用しています。テストについてバックエンドほどではないですが、フロントでもJestを用いてテストを行っています。最低限、スナップショットを取得しておいて、意図しない変更が発生していないかを検知できるようにしています。機能として重要な箇所や複雑な箇所については実際に特定要素をクリックした際に、意図したAPIが呼ばれるか、意図した動作をするかまで詳細にチェックしているところもあります。加えて、コードフォーマットにはprettierを、コーディングルールの適用にはeslintを利用しています。hooksのトップレベル以外やReact関数外からの呼び出しなどの不適切な利用を検出できるようにしています。Request時には以上を必須のテストとして、以下をマージの条件としています。Request時のマージ条件まとめ今回は「Assured」の技術スタック(アプリ編)についてをお伝えさせていただきました。現在の技術スタックは現メンバーのスキルセットや開発体制、ビジネスの時間的な制約な上での最適解と思われるものを選択してきました。バックエンドのエコシステムも変化していくかと思います。その際は、必要とあれば開発言語やフレームワークについても柔軟に変更していきたいと思っています。09:05関連記事2024-06-13【2024年5月】今月の行動指針こんにちは、エンジニアの内山です。エンジニアのオリバーです。なんと、Assur...2023-09-27【2023年8月】今月の行動指針こんにちは、エンジニアの岩松です。最近引っ越しのために荷物...2023-02-02新機能「サービス(シャドーIT)検知」における技術選定こんにちは!エンジニアの内山です。12/16(金)に社内の利用サ...2022-07-19SAML認証開発で使えるIdP無料利用枠こんにちは、岩松です。Blog検索はてなブログをはじめよう!assuredjpさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。