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

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

Melosとは?

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

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

Melosの主な機能

1. パッケージ管理

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

2. バージョン管理

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

3. スクリプト実行

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

4. パブリッシング

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

Melosのインストール方法

インストール

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

% dart pub global activate melos

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

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

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

パッケージの追加

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

name: name
...
dependencies:
  melos: ^6.3.3

melos.yaml ファイルの作成

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

name: name
packages:
  - apps/**
  - packages/**

melos bootstrapの実行

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

% melos bs
(melos bootstrapでも可)
  • 全パッケージの依存関係インストール(内部的には pub get が使われる)
  • 全パッケージがローカルにリンク

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

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の導入によって開発効率と保守性を大幅に向上させられるはずです。

記事を書いた人

Matsuura

エンジニア

Matsuura

Anycloudでエンジニアしてます!主にFlutter・Typescript