# 【Melos】Flutter/Dartモノレポを効率化！使い方・メリット・デメリット

> MelosはFlutter/Dartの複数パッケージを一括管理できるモノレポツールです。Melosの特徴、インストール方法、メリット・デメリット、導入に適したプロジェクト例まで解説します。

- 公開日: 2025-08-12
- 著者: Matsu
- タグ: Flutter
- URL: https://tech.anycloud.co.jp/articles/flutter-melos

---

## **Melosとは？**

<div class="link-card-wrap"><a class="link-card" href="https://melos.invertase.dev/" target="_blank" rel="noopener noreferrer"><span class="link-card-body"><span class="link-card-title">Melos</span><span class="link-card-description">A tool for managing Dart projects with multiple packages.</span><span class="link-card-meta"><img class="link-card-favicon" src="./linkcard-01-favicon.webp" alt=""><span class="link-card-domain">melos.invertase.dev</span></span></span><img class="link-card-image" src="./linkcard-01-image.webp" alt=""></a></div>

Melos（メロス）は、**複数のFlutter/Dartパッケージをまとめて管理できるツール**です。

「モノレポ管理ツール」と呼ばれ、1つのリポジトリ内にある複数パッケージをビルド・テスト・バージョン管理まで一括で行えます。

## **Melosの主な機能**

### **1\. パッケージ管理**

-   依存関係の一括更新
-   全パッケージでコマンド実行
-   パッケージ間の依存関係を自動解決

### **2\. バージョン管理**

-   セマンティックバージョニングのサポート
-   パッケージのバージョン一括更新
-   CHANGELOGの自動生成

### **3\. スクリプト実行**

-   複数パッケージ間で並列コマンド実行
-   フィルタリングによる特定パッケージのみ実行

### **4\. パブリッシング**

-   pub.devへ一括公開サポート
-   依存関係に基づいた公開順序の決定

## Melosのインストール方法

### **インストール**

Melos をグローバル パッケージとしてインストールし、 システム上のどこからでも使用できるようにします。

```plaintext
% dart pub global activate melos
```

### モノレポディレクトリ構成

※Melos を使用する場合、ワークスペースのルートにプロジェクトを配置しないでください。

```plaintext
my_project
├── apps
│   ├── apps_1
│   └── apps_2
├── packages
│   ├── package_1
│   └── package_2
├── melos.yaml
├── pubspec.yaml
└── README.md
```

### パッケージの追加

モノレポ構成の場合、プロジェクトディレクトリのルート（ワークスペース）はDartパッケージではありませんが、 pubspec.yamlを配置する必要があります。

<div class="link-card-wrap"><a class="link-card" href="https://pub.dev/packages/melos" target="_blank" rel="noopener noreferrer"><span class="link-card-body"><span class="link-card-title">melos | Dart package</span><span class="link-card-description">A tool for managing Dart &amp; Flutter repositories with multiple packages (monorepo). Supports automated versioning via Conventional Commits. Inspired by JavaScripts Lerna package.</span><span class="link-card-meta"><img class="link-card-favicon" src="./linkcard-02-favicon.ico" alt=""><span class="link-card-domain">pub.dev</span></span></span><img class="link-card-image" src="./linkcard-02-image.webp" alt=""></a></div>

```yaml
name: name
...
dependencies:
  melos: ^6.3.3
```

### **melos.yaml ファイルの作成**

Melosを使用したいワークスペース（リポジトリ）のルートに `melos.yaml` ファイルを新規作成します。

```yaml
name: name
packages:
  - apps/**
  - packages/**
```

### **melos bootstrapの実行**

Melosのインストールと `melos.yaml` の作成が完了したら、以下コマンドを実行します。

```plaintext
% melos bs
（melos bootstrapでも可）
```

-   全パッケージの依存関係インストール（内部的には `pub get` が使われる）
-   全パッケージがローカルにリンク

他にも様々なコマンドやHooksも用意されています。

<div class="link-card-wrap"><a class="link-card" href="https://melos.invertase.dev/commands/bootstrap" target="_blank" rel="noopener noreferrer"><span class="link-card-body"><span class="link-card-title">Bootstrap Command</span><span class="link-card-description">Learn more about the `bootstrap` command in Melos.</span><span class="link-card-meta"><img class="link-card-favicon" src="./linkcard-03-favicon.webp" alt=""><span class="link-card-domain">melos.invertase.dev</span></span></span><img class="link-card-image" src="./linkcard-03-image.webp" alt=""></a></div>

## **Melosを使うメリット**

Melosを使うメリットとして以下の4点があります。

### 1\. **複数パッケージをまとめて操作できる**

-   `melos run test` で全パッケージのテストを一気に実行
-   1つ1つ手動でコマンドを叩く手間がなくなる

### 2\. **依存関係が明確になる**

-   各機能を独立したパッケージにすることで、「何がどこに依存しているか」が`pubspec.yaml`で一目瞭然
-   無駄なimportや循環参照を防げる

### 3\. **チーム開発の効率化**

-   Aさんは`feature_a`、Bさんは`feature_b`を触る…と独立作業が可能
-   Gitのコンフリクトが減る

### 4\. **共通パーツの再利用がしやすい**

-   UIコンポーネントやAPIクライアントなどを別パッケージ化して、別アプリでもそのまま使える

## **Melosを使うデメリット**

Melosを使うデメリットとして以下の4点があります。

### 1\. **小規模プロジェクトではオーバーエンジニアリング**

-   1〜2人開発や小さなアプリでは、わざわざパッケージ分割する手間の方が大きい

### 2\. **学習コストがある**

-   `melos.yaml`やワークスペース構造など、最初に覚えることが増える

### 3\. **CI/CD設定が少し複雑になる**

-   複数パッケージをビルド・テストする設定をCIに組み込む必要がある

## **Melosはどのようなプロジェクトに向いているか？**

-   大規模アプリ（機能ごとにチーム分業する場合）
-   自社Flutter SDKやUIコンポーネント集を作っている場合
-   複数アプリで共通ロジックを使い回す場合（例：`auth`モジュール）
-   リリースの粒度を機能単位で分けたい場合

逆に、小規模アプリや短期開発ではメリットが薄く、導入しなくても困らないケースが多いです。

## まとめ

Melosは、複数のFlutter/Dartパッケージを効率的に管理・運用できるモノレポ管理ツールです。

依存関係の整理やテスト・ビルドの自動化、パッケージの再利用性向上など、大規模開発やチーム開発で大きな効果を発揮します。

一方で、小規模プロジェクトでは設定や構造が過剰になる可能性もあるため、開発規模や運用方針に応じて導入を検討しましょう。

もし複数アプリや共通モジュールを抱えるプロジェクトであれば、Melosの導入によって開発効率と保守性を大幅に向上させられるはずです。
