coiai Logo
Featured

フロントエンドのアーキテクチャについて最初から考える

これは何?

この記事は基本に立ち戻りアーキテクチャの選定を試みた際の備忘録です。
Feature-Sliced Design(FSD)や Vertical Slice Architecture など、モダンなアーキテクチャがありますが、どのような判断をもとに選定するのかを考え直します。

アーキテクチャの地図

アーキテクチャを理解するために、以下のような学習のための地図を作りました。
設計原則、アーキテクチャ、個別の設計パターンへと詳細になっていきます。

ソフトウェア設計
│
├── 設計原則
│   ├── Separation of Concerns
│   ├── 高凝集・低結合
│   ├── コロケーション
│   ├── Dependency Inversion
│   ├── SRP
│   └── DRY / KISS / YAGNI
│
├── アプリケーション全体の構造
│   ├── Layered Architecture
│   ├── Feature-Based Architecture
│   ├── Vertical Slice Architecture
│   ├── Clean Architecture
│   └── Feature-Sliced Design
│
├── UI・Presentationの設計
│   ├── MVC
│   ├── MVP
│   └── MVVM
│
└── より細かな設計パターン
    ├── Repository
    ├── Factory
    ├── Adapter
    └── Dependency Injection

そもそも、、、

このコードは何を担当しているのかを考えるのが最初の問です。

商品一覧画面を作るときに

商品を取得する
商品を表示する
商品を検索する
商品を並び替える
商品を編集する

といったタスクを書き出します。

これら全てを一つの巨大なコンポーネントとして作ることもできますが、管理が大変になるのは皆さんもお分かりだと思います。
参考:https://blog.cleancoder.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html?utm_source=chatgpt.com

ここからどこまでを同じモジュールとして管理するのか?という設計の問題が始まります。

Cohesion と Coupling

CohesionとCouplingはそれぞれ、凝集度、結合度というようです。https://qiita.com/dsudo/items/ee3fee1f558c7f1b359f

Cohesionは関係するコードがまとまっているか?

Couplingは別のコードにどれだけ依存しているか?

です。

例えば以下のようなコードがあります。

components/
  ProductList.tsx

hooks/
  useProducts.ts

api/
  products.ts

types/
  product.ts

tests/
  ProductList.test.tsx

技術的な種類ごとに整理されていますが、商品一覧のコーディングをするのにそれぞれ別のディレクトリを行き来する必要があります。
一方で、以下のように書いた場合はどうでしょうか?

features/
└── products/
    ├── ProductList.tsx
    ├── useProducts.ts
    ├── api.ts
    ├── types.ts
    └── ProductList.test.tsx

この書き方なら、商品に依存するコードがまとまっています。

この書き方が Feature-based Architecture, Vertical Slice Architecture に繋がっていきます。

コロケーションについて

colocation

Place code as close to where it’s relevant as possible

同じ種類のコードを集めること
ではなく、
一緒に変更されるコードを近くに置くこと
です。

https://kentcdodds.com/blog/colocation?utm_source=chatgpt.com

Layered Architecture について

ここからアーキテクチャの話です。

Layered Architectureでは、技術的責務でアプリケーションを分離します。

Presentation
↓
Application
↓
Domain
↓
Infrastructure

これのメリットは責務がわかりやすいところです。

しかし、この方法では前述までとは変わり、機能を変更するときに、横断して変更する可能性があります。

つまり、技術的には分かれている一方で、機能は複数に分散するわけです。

Vertical Slice Architecture について

Layered Architecture に対して、異なる方法がVertical Slice Architecture です

変更の軸に沿って関連する処理をまとめる考え方です。

features/
├── create-order/
├── cancel-order/
├── get-order-list/
└── update-order/

このようにしたり、

create-order/
├── UI
├── validation
├── application logic
├── database access
└── tests

このように書けます。

これは機能(ユースケース)で縦に切る。という方法です。

https://www.jimmybogard.com/vertical-slice-architecture/?utm_source=chatgpt.com

Feature-Sliced Design について

React界隈で盛り上がっている?ように感じているFSDについてです。私がReactを業務で描き始めた頃はAtomicデザインが出始めていた頃だったと思うのですが、こちらの方が優位では?みたいな流れな気がしています。

FSDは公式のドキュメントがあるので、それを一読すると良さそうです。

私も完全に理解しているわけではないのですが、備忘録として、、、。

app
pages
widgets
features
entities
shared

このようなレイヤーを用意します。

Layer
  ↓
Slice
  ↓
Segment

という段階で整理するようです。

features/
└── add-to-cart/
    ├── ui/
    ├── api/
    └── model/

この場合であれば、

features: Layer
add-to-card: Slice
ui, api, model: Segment

と対応するようです。

責務について

またUI周りの責務をどう分けるかの話で、MVC, MVP, MVVMの話があがります。

まずソフトウェアでの責務とは

コードが何を担当し、何を決定する責任を持つか

といった意味になります。

例えば商品一覧なら、

1. 商品データを取得する
2. 商品データを保持する
3. 検索条件を管理する
4. 商品を絞り込む
5. HTMLとして表示する
6. ボタンが押されたときの処理をする

といった処理があります。

これを全部同じコンポーネントに書くこともできますが、API仕様の変更やデザインの変更、検索ロジックの変更など、いろいろな理由でこのコンポーネントが変更されるます。
この状態が責務が多すぎる状態です。

MVCであれば、Model, View, Controller に分けて、

Model

商品
価格
在庫
検索処理

View

商品名を表示
価格を表示
ボタンを表示

Controller

検索ボタンが押された
    ↓
Modelに検索させる
    ↓
結果をViewへ反映

のように責務を分けます。

MVVMも同様に責務を分離します。

View
↓
「productsを表示するだけ」

ViewModel
↓
「products、isLoading、errorをView用に準備する」

Model
↓
「商品データやビジネスルール」

参考記事

FSD公式ドキュメント

このドキュメントではFSDは他のアーキテクチャとの違いが述べられていて参考になりました。

https://feature-sliced.design

Vertical Slice Architecture についてのReditの記事

コロケーションについて着目して有用性を説いている点が参考になりました。

Vertical Slice Architectureについて

https://zenn.dev/shotaro_tsuji/articles/82596f1f66ac0a

この記事をシェア

投稿日: 2026年8月18日
カテゴリ: 未分類
タグ:
coiai

coiai

この記事もおすすめ

デフォルトサムネイル

【WSL入門】Ubuntu on WSL2 に開発ツールを一式そろえる — Git / nvm / pnpm / AWS CLI / Terraform

前回の記事では、Windows に WSL2 を導入して Ubuntu が動くところまでを扱いました。ただ、素の Ubuntu はあくまで「まっさらな Linux」です。ここから実際に開発を始めるには、バージョン管理・ランタイム・クラウド操作のツールを自分で入れていく必要があります。 この記事では、すべて公式ドキュメントに載っている手順だけを使って、次のツールを順番にセットアップします。 各セクションの末尾に出典 URL を置いてあるので、手順が古くなったと感じたらそこを見に行ってください。記事末尾には出典一覧もまとめています。 検証環境Windows 11 / WSL2 / Ubuntu 24.04 LTS(x86_64)確認日:2026年7月28日 バージョン番号は執筆時点のものです。インストールコマンド自体は基本的に「常に最新を取ってくる」形になっているので、そのまま実行して問題ありません。 はじめに:WSL開発の大原則 コマンドに入る前に、ひとつだけ。Microsoft の公式ドキュメントが繰り返し書いている重要な原則があります。 使う予定のツールと同じ OS 側にファイルを置く。Linux ツールで Linux コマンドラインから作業しているなら、最速のパフォーマンスを出すためにファイルは WSL ファイルシステムに格納します。 具体的には、プロジェクトは次の場所に置きます。 /mnt/c/ 配下はファイルシステムをまたぐため、npm install や git status が体感でわかるほど遅くなります。第2弾でこれから入れるツールも、すべて Linux 側のホームディレクトリを前提に使ってください。 出典:WSL 開発環境を設定する — Microsoft Learn 1. まずは基本ツール Ubuntu を起動したら、最初にやることはパッケージの更新です。Microsoft の公式ドキュメントにもこう書かれています。 ディストリビューションの優先パッケージ マネージャーを使用して、パッケージを定期的に更新およびアップグレードすることをお勧めします。Windows […]

デフォルトサムネイル

WindowsでWSL2をセットアップしてUbuntuを使えるようにする

TerraformやAWS CLI、Dockerを快適に使うために、WindowsにWSL2を導入しました。 この記事では、実際に行ったセットアップ手順と、途中で遭遇したエラーへの対処方法をまとめます。 なぜWSLを使うのか? WSL(Windows Subsystem for Linux)は、Windows上でLinux環境を動かすための仕組みです。 AWSやTerraform、Dockerなど、多くの開発ツールはLinux環境との相性が良いため、Windowsで開発する場合でもWSL2を利用するのが一般的です。 今回の開発環境では以下のような構成を想定しています。 1. WSLをインストール PowerShell(管理者)を開き、以下を実行します。 2. Ubuntuの初回セットアップ Ubuntuを起動すると、Linuxユーザー名とパスワードの設定を求められます。 例 好きなユーザー名を入力します。 続いてパスワードを設定します。 ※入力中は文字が表示されませんが正常な動作です。 3. パッケージを更新 Ubuntuを起動したら、まず最新状態へ更新します。 4. エラーが表示された アップグレード中に次のようなメッセージが表示されました。 一見エラーに見えますが、今回は最後まで と表示され、更新自体は正常に完了していました。 WSLではsystemd関連の処理で、このような警告が表示されることがあります。 5. WSLの状態を確認 PowerShellで以下を実行します。 今回は となっていました。 6. Docker DesktopとUbuntuの違い ここで少し混乱しやすいポイントがあります。 Docker Desktopをインストールすると、docker-desktopというWSLディストリビューションが作成されます。 しかし、これはDockerが内部で利用するためのもので、普段の開発を行う場所ではありません。 おすすめの構成は次の通りです。 開発はUbuntuで行い、Docker Desktopはコンテナ実行基盤として利用します。 7. Ubuntuを既定のディストリビューションに変更 現在登録されているWSLを確認します。 Ubuntuがインストールされていることを確認したら、 を実行します。 これで だけでUbuntuが起動するようになります。 今後インストール予定 WSL環境では今後以下を導入していきます。 この環境をベースに、AWS Organizations、IAM […]

AWS IAM Identity Centerとは?IAM Userを使わないAWS認証・権限管理のベストプラクティス

AWS IAM Identity Centerとは?IAM Userを使わないAWS認証・権限管理のベストプラクティス

AWS Organizationsによるマルチアカウント環境を構築した後、次に設定したのがAWS IAM Identity Centerです。 以前はAWSへログインするためにIAM Userを作成することが一般的でしたが、現在AWSでは、人がAWSへログインする場合はIAM Identity Centerの利用を推奨しています。 今回は、IAM Identity Centerを導入した理由と、実際の設定内容についてまとめます。 IAM Identity Centerとは IAM Identity Center(旧 AWS Single Sign-On)は、複数のAWSアカウントやAWSアプリケーションへの認証・認可を一元管理するサービスです。 従来のように各AWSアカウントへIAM Userを作成する必要はなく、 というメリットがあります。 AWS Organizationsと組み合わせることで、マルチアカウント環境の運用が大幅に容易になります。 なぜIAM UserではなくIdentity Centerなのか 以前は、このような構成が一般的でした。 しかし、この方法では といった課題があります。 Identity Centerを利用すると、ユーザー情報は一元管理され、各AWSアカウントには必要な権限だけを割り当てる運用になります。 AWS Well-Architected Frameworkでも、人によるアクセスにはフェデレーション認証を利用し、長期認証情報(IAM Userのアクセスキーなど)をできる限り利用しないことが推奨されています。 今回の構成 今回は次のようなシンプルな構成にしました。 グループ Administrators AWS環境全体を管理するメンバーです。 現在は を所属させる予定です。 Developers アプリケーションやインフラ開発を行うメンバー向けです。 今回はまだ利用していませんが、開発メンバーが増えた際に使用します。 将来的には などを割り当てる予定です。 ReadOnly 閲覧専用グループです。 監査やレビュー、外部アドバイザー向けとして利用します。 今回は技術メンターにReadOnly権限を付与することを想定しています。 Permission […]

この記事を書いた会社

株式会社coiaiは、「想像できることを美しく実現」を掲げ、XR・Web・アプリ・システム開発およびDX支援を行う会社です。 創業2022年、東京都練馬区に本社を置き、要件のヒアリングからPoC(概念実証)、本番運用まで一貫して伴走します。 まずはお気軽にご相談ください。

商号株式会社 coiai創業2022年1月設立2025年1月23日資本金1,500,000円(設立時点)本社所在地東京都練馬区関町北 3-6-9代表者代表取締役 竹村 啓佑 / 代表取締役 服部 陽良

主なご相談内容

会社概要・役員紹介を見る

詳しい会社情報は会社概要ページでご覧いただけます。

資料請求・無料相談

導入要件のヒアリングからPoC、本番運用まで伴走します。まずはお気軽にご相談ください。

お問い合わせの前に 個人情報保護方針 をご確認ください。