Flutterで外部のパッケージ(ライブラリ)を追加する時に「pubspec.yaml」ファイルに依存関係の設定を行います。
その際に、
・「dependencies」欄に設定する場合と
・「dev_dependencies」欄に設定する場合
がありますが、この違いは一体何なのでしょうか。
「dependencies」に設定する場合
「dependencies」欄に設定する場合は、自分の作っているプロジェクト(パッケージ)を使う人にとっても必要となるパッケージを設定する場合に使います(こちらで設定する場合を「通常の依存関係(Regular dependencies)と呼ぶようです)。
these are packages that anyone using your package will also need.
(注)Flutterではプロジェクト自体も1つの「パッケージ」として扱われます。
例えば、上記の例でいうと、「dependencies」欄で設定された
cupertino_icons: ^1.0.3 drift: ^1.0.1 sqlite3_flutter_libs: ^0.5.0 path_provider: ^2.0.0 path: ^1.8.0 fluttertoast: ^8.0.8
これらのパッケージは、自分のプロジェクトをパッケージとして他の人が使う際にも必要になるパッケージということになります。
「dev_dependencies」に設定する場合
一方、「dev_dependencies」に設定する場合は、自分のプロジェクト(パッケージ)の開発段階でのみ必要となる場合に使うようです。
Dependencies that are only needed in the development phase of the package itself are listed under
dev_dependencies
.
ですので、上の例でいうと、
drift_dev: ^1.0.2 build_runner: ^2.1.1
は、自分がこのプロジェクトを作っている段階でのみ必要なパッケージなので、自分のプロジェクトをパッケージとして他の人が使う場合には、ここで設定したパッケージは不要となります。
「dev_dependencies」欄でパッケージを設定した場合は、自分のプロジェクト(パッケージ)を使う人にとっては不要となるため、アプリのビルドをより高速に出来たり、異なるパッケージ同士の依存関係のコンフリクトをより容易に発見できる効果があるようです。
(詳しくは、以下の動画で解説していますので、よろしければご覧下さい)