どうも、Shinyaです。
この記事では、Dart言語でモノレポ管理を行う際に非常に便利なツール「melos」が7.0.0からmelos.yamlを廃止したので、その際に必要なマイグレーション作業を備忘録として残しておきます。
melos 7.x.xへのマイグレーション
melosのバージョンを更新する
まずは、使用しているmelosのバージョンを7.x.xへ更新します。この記事では参考までに、次のようにv7.1.0
を使用します。
dev_dependencies:
melos: ^7.1.0
pubspec.yamlでWorkspacesを設定する
melosは7.0.0からmelos.yamlを廃止する代わりに、Dart 3.6から導入されたWorkspacesを使用するようです。
そのため、まずはルートのpubspec.yamlにモノレポで管理するパッケージを次のようにworkspaceに追加してください。
name: atproto_dart
publish_to: none
environment:
sdk: ">=3.8.0 <4.0.0"
workspace:
- packages/at_identifier
- packages/at_uri
- packages/atproto
- packages/atproto_core
- packages/atproto_oauth
- packages/bluesky
- packages/bluesky_cli
- packages/bluesky_text
- packages/did_plc
- packages/lexicon
- packages/multiformats
- packages/nsid
- packages/xrpc
dev_dependencies:
melos: ^7.1.0
次に、モノレポで管理する個々のパッケージのpubspec.yamlに次の定義を追加します。
resolution: workspace
例えば、次のように個々のパッケージのpubspec.yamlに追加していきます。
name: bluesky
environment:
sdk: ">=3.8.0 <4.0.0"
resolution: workspace
melosとWorkspacesの動作確認を行う
ここまで作業が完了したらmelos
コマンドがパッケージを認識するようになっているか確認してみましょう。
コマンドラインで次のmelos
コマンドを実行してください。
melos list
次のようにworkspaceに追加したパッケージが出力されればmelosの設定は完了です。
% melos list
at_identifier
at_uri
atproto
atproto_core
atproto_oauth
bluesky
bluesky_cli
bluesky_text
did_plc
lexicon
multiformats
nsid
xrpc
プロジェクトに依ってはコマンドの実行時に次のようなエラーメッセージが出力される場合があります。
Cannot override workspace packages.
Package `at_identifier` at `./packages/at_identifier` is overridden in `packages/bluesky/pubspec.yaml`.
これはWorkspacesが導入される前にローカルの依存性を上書きするために使用されていたpubspec_overrides.yamlと競合しているために発生します。
Workspacesを導入するに当たっては、これまで使用してきたpubspec_overrides.yamlについてもworkspaceに置き換えていく必要があります。
カスタムスクリプトを移行する
これまでmelos.yamlに定義していたscripts
などのカスタムスクリプトは、ルートのpubspec.yamlに次のように追加します。
melos.yamlは廃止されましたがmelosの基本コマンドは変更されることなく引き継がれています。
そのため、次のようにルートのpubspec.yamlにmelos
セクションを追加して、これまでmelos.yamlに定義していたscripts
セクションをコピペするだけでこれまで通りに動作します。
name: atproto_dart
publish_to: none
environment:
sdk: ">=3.8.0 <4.0.0"
workspace:
- packages/at_identifier
- packages/at_uri
- packages/atproto
- packages/atproto_core
- packages/atproto_oauth
- packages/bluesky
- packages/bluesky_cli
- packages/bluesky_text
- packages/did_plc
- packages/lexicon
- packages/multiformats
- packages/nsid
- packages/xrpc
dev_dependencies:
melos: ^7.1.0
melos:
scripts:
hello: echo 'Hello World'
上記のカスタムスクリプトを実行するには、次のようにmelos
コマンドを実行してください。
melos hello
上記のコマンドを実行すると、カスタムスクリプトが動作することを確認できました。
melos run hello
└> echo 'Hello World'
└> RUNNING
Hello World