【Flutter】pubspec.yamlでscriptsを定義する方法

Flutter

こんにちは。趣味グラマのNobu(@nm_aru)です。

npmのpackage.jsonには「scripts」と言う、実行したいコマンドに別名を付けておける機能があり、長いオプションが必要になる時など、予め定義しておく事で簡単に実行出来るようになります。

scripts | npm Docs
How npm handles the "scripts" field

flutterでも例えばbuild_runnerのように、オプションが長くて毎回打つのが大変かつ、頻繁に実行しないものはオプションも忘れがち…。

シェルのaliasで指定しても良いのですが、出来ればプロジェクト単位で管理したいと思い、npmと同じように出来ないのかなと探したところ、素晴らしいパッケージがあったので紹介したいと思います。

pubspec.yamlにコマンド定義が出来る「rps」パッケージ

検索すると似たような事が出来るパッケージはいくつか見つかりました。

rps | Dart package
rps (Run Pubspec Script) allows you to define and run scripts from pubspec.yaml.
derry | Dart package
A script manager to help you define script shortcuts and use them effortlessly, and performantly.
flutter_scripts | Dart package
Run dart/flutter scripts defined in a pubspec.yaml

最初はメジャーバージョンがリリースされているderryを試したのですが、M1 Macだと正常に動かず断念しました。

Failed to load dynamic library executor_mac64.dylib - incompatible architecture (have 'x86_64', need 'arm64e') (mac m1) · Issue #58 · frencojobs/derry
Hello there 👋 Thanks your derry! Such a cool tool. I'm having issues running it on my m1 macbook: Invalid argument(s): F...

flutter_scriptsは、この記事執筆時点でバージョンが0.0.3と低く、機能的にも他2つより劣っていたので、最終的にrpsを試してみたところ、大満足の結果になりました。

  • npmのpre〜、post〜と同じ事が、before〜、after〜で出来る
  • コマンドをネストして定義する事ができる
  • rps自体が3文字ですぐ打てる

こんな感じの内容を、pubspec.yamlに定義し、

rps prod build ios

こう実行すると、before-ios → iosという順番で実行してくれます。

まとめ

困った事があると、大抵誰かが同じ悩みを抱えていて、更に解決法を作ってくれているのは感謝でしかありません。

ありがたく使わせていただきつつ、アプリ開発を頑張りたいと思います!

コメント

タイトルとURLをコピーしました