こんにちは。趣味グラマの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という順番で実行してくれます。
まとめ
困った事があると、大抵誰かが同じ悩みを抱えていて、更に解決法を作ってくれているのは感謝でしかありません。
ありがたく使わせていただきつつ、アプリ開発を頑張りたいと思います!
コメント