blog

【備忘録】アーキテクチャ、設計思想、フレームワーク、ライブラリの違いが曖昧なので調べてみた。

palm

概念マップ

  1. 設計思想(Design Philosophy)
    • どう考えるか
    • 一言で表すと「哲学者
  2. アーキテクチャ(Architecture)
    • どう作らせるか
    • 一言で表すと「法律
  3. フレームワーク(Framework)
    • どう動かすか
    • 一言で表すと「躯体 / OS / 婚姻💒」
    • ※ 制御フローの主導権を握る
  4. ライブラリ(Library)
    • 何を使うか
    • 一言で表すと「道具部品🔩」

この記事では、これらの技術を同列に比較するのではなく、
役割とレイヤの違いとして整理する。

【結論】どこまで「設計の決定権」を奪ってくるかの違い

設計思想(Design Philosophy)

  • 意味
    • どう考えるか
    • 設計時の思考の軸・価値観
    • コードや構造を直接は決めない
  • 役割:
    • 設計上の意思決定を助ける
    • 複数の選択肢があるときに判断材料を与える
    • チーム内で「なぜそうするのか」を共有する共通言語になる
  • 特徴
    • 複数のアーキテクチャに同時に適用できる
  • :
    • ドメイン駆動設計(ドメインの理解とモデリングを中心に据え、ビジネスドメインの要件を反映)
    • オブジェクト指向設計(オブジェクトをもとに現実をモデル化し、得られたモデルを元にソフトウェアを設計)
    • 関数型思考(プログラム全体を入力に対して出力を返す「関数」の組み合わせで構築する考え方)
    • SOLID 原則(保守性・拡張性・再利用性の高いオブジェクト指向ソフトウェアを設計するための5つの基本原則の頭文字をとったもの)

アーキテクチャ (Architecture)

  • 意味
    • 全体的な構造
    • 基本設計(ルール制約決定)
    • 「どう作らせるか」「そう作らないといけない」
  • 役割:
    • 高い視点での構造やルールを決めること
    • 構成要素がどのように連帯するか、どのように動作するかといった「骨組み」や「枠組み」を定義(ルール化)
    • システム全体の品質(拡張性、保守性、効率性)を高めるために不可欠
  • :
    • MVC(モデル・ビュー・コントローラー)
    • MVVM(モデル・ビュー・ビューモデル)
    • 3層アーキテクチャ(プレゼンテーション層・アプリケーション層・データ層)
    • マイクロサービスアーキテクチャ(ソフトウェアを小さく、独立して展開可能なサービスに分割)
    • クリーンアーキテクチャ(懸念事項の分離と依存関係の逆転に焦点を当て、コンポーネントを明確な境界を持つ明確なレイヤーに編成)
    • REST(通信の設計用。HTTPを前提に、リソース指向/ステートレス性などの制約条件を課すことで、疎結合で拡張性の高いシステム連携を実現する)

フレームワーク (Framework)

  • 概念:
    • アプリケーション開発の土台となる「骨組み」や「枠組み」を提供
    • フレームワーク決定は「結婚と同じ」と言われるほど、ソフトウェアと密に結合している
  • 役割:
    • アプリケーションの制御フローを定義
    • 開発者はその枠組みに沿って必要なロジックを「はめ込む」
    • ゼロから開発するより大幅に工数を短縮できる
  • 制御:
    • 呼ばれる
    • Inversion of Control(IoC):フレームワークが開発者のコードを呼び出す
  • :
    • TensorFlow(Googleが開発。機械学習/ディープラーニングのためのFW)※ 機械学習分野ではFWと呼ばれるが、WebFWほど強制しないものも含まれる。
    • Ruby on Rails(Rubyを基にWebAPIなどを効率的に開発するためのFW)
    • Next.js(Reactを基に高速でSEOに強い静的サイトやWebアプリケーションを効率的に開発するFW)
    • Astro(静的コンテンツ中心のWebサイトを高速かつ軽量に構築することに特化そたFW)
    • Angular(Googleが開発。TypeScriptを基に1枚のページで完結する動的なWebアプリ(SPA)の構築に強みがあるフルスタックFW)
    • FastAPI(高速で使いやすいAPIサーバーを構築できるFW)

➡️機能が豊富なものから、特定の用途に特化した軽量なものまで様々

ライブラリ (Library)

  • 概念:
    • よく使われる便利な機能や処理を「部品化
    • 同じコードを何度も書く手間を省き、開発時間を短縮
    • 用途に応じた多種多様なライブラリが存在
  • 役割:
    • 開発者が「この機能が欲しい」と思ったときに、自ら呼び出して利用する。
  • 制御:
    • 自分が呼ぶ
      • ライブラリは Callback などを通じて処理の一部を呼び返すことはあるが、制御フローの主導権は開発者側にある。
    • 部分的な拡張、必要な瞬間だけ呼び返す
    • 開発者のコードがライブラリの関数を呼び出す
  • :
    • numpy (数値計算) 
    • stdio.h(標準入出力)
    • React(UI構築ライブラリ)
    • Axios(HTTP通信)
    • Lodash(ユーティリティ関数) 

ありがちな疑問

GraphQL / gRPC はどこに入る?

  • GraphQL
    • アーキテクチャ(API設計スタイル)
    • APIのクエリ言語とランタイムのことで、クライアントが必要なデータを「必要な分だけ」「一度のリクエストで」取得できるように設計された技術
    • バックエンドとの連携がスムーズになる
  • gRPC:
    • アーキテクチャ(通信スタイル)+プロトコル
    • Googleが開発。オープンソースの高性能なリモートプロシージャコール(RPC)フレームワーク。
    • 異なるサービスやアプリケーション間で高速かつ効率的な通信をする
    • REST APIと比較でき、学習コストが高い

React はなぜライブラリなのにFWっぽい?

  • 混合しやすい理由
    • UIは全部 JSX で書くので「支配されている感じ」がする
  • React が「ライブラリ」である理由:
    • 自分で呼ぶ
    • 使う/使わないを選べる部分的
    • アプリ全体の制御フローは握らない
  • Next.jsとの違い
    • Next.jsは制御フロー(主導権)を握っている
    • Next.jsに従わないと作れない。
    • Reactは、Next.js に「呼ばれている」
    • Next.js がいつ・どう描画するかを決める
    • Reactは、主導権が開発者にある。Next.jsは主導権がNext.js側。

➡️人は「一番触っているもの」を「一番支配しているもの」だと錯覚する

まとめ

これらの違いは「何を提供しているか」ではなく、
「どこまで設計や制御の決定権を奪ってくるか
という視点で見ると整理しやすい。

スポンサーリンク
ABOUT ME
palm
palm
東京通信大学 42Tokyo
2002年生まれの学生です。 趣味は小説を読むことです。たまに技術書も読みます。
記事URLをコピーしました