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

scripts | npm Docs
Hownpmhandlesthe"scripts"field
flutterでも例えばbuild_runnerのように、オプションが長くて毎回打つのが大変かつ、頻繁に実行しないものはオプションも忘れがち…。
シェルのaliasで指定しても良いのですが、出来ればプロジェクト単位で管理したいと思い、npmと同じように出来ないのかなと探したところ、素晴らしいパッケージがあったので紹介したいと思います。
pubspec.yamlにコマンド定義が出来る「rps」パッケージ
検索すると似たような事が出来るパッケージはいくつか見つかりました。

rps | Dart Package
rps(RunPubspecScript)allowsyoutodefineandrunscriptsfrompubspec.yaml.

derry | Dart Package
Ascriptmanagertohelpyoudefinescriptshortcutsandusethemeffortlessly,andperformantly.

flutter_scripts | Dart Package
Rundart/flutterscriptsdefinedinapubspec.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
Hellothere👋Thanksyourderry!Suchacooltool.I'mhavingissuesrunningitonmym1macbook:Invalidargument(s):Failedtoloaddynamiclibrary'/Users/hugo/.pub-cache/hosted/pub.d...
flutter_scriptsは、この記事執筆時点でバージョンが0.0.3と低く、機能的にも他2つより劣っていたので、最終的にrpsを試してみたところ、大満足の結果になりました。
- npmのpre〜、post〜と同じ事が、before〜、after〜で出来る
- コマンドをネストして定義する事ができる
- rps自体が3文字ですぐ打てる
こんな感じの内容を、pubspec.yamlに定義し、
rps prod build ios
こう実行すると、before-ios → iosという順番で実行してくれます。
まとめ
困った事があると、大抵誰かが同じ悩みを抱えていて、更に解決法を作ってくれているのは感謝でしかありません。
ありがたく使わせていただきつつ、アプリ開発を頑張りたいと思います!
コメント