[Flutter]dependenciesとdev_dependenciesの違い


こんにちわ　いせきです。どんどん記事を書いてアウトプットしていっています！

`pubspec.yaml`の中に記載されている

<b><b>・dependencies</b></b>
<b><b>・dev_dependencies</b></b>

の二つがあり、dart Packageを入れる時にどっちを入れればいいのか！となった経験はないでしょうか？

今回は、これらの違いだけでなく、この場合はどっちを入れるのが望ましいのかを記載していこうと思います。何度も確認しながら入れてみることで理解力が増すと思います。



# dependenciesとdev_dependenciesの違い

### dependencies

・<b><b>自分のプロジェクトを使う人にとっても必要になる</b></b>Packageを設定するのに記載する。
・直接の依存関係（<b><b>Packageが直接使用するソフトウェア</b></b>）のみを記載する。

### dev_dependencies

・あるPackageを<b><b>テスト</b></b>にだけ使う場合は、<b>`dev_dependencies`</b>に記載する。
・<b><b>自分のプロジェクトを作っている段階でのみ必要</b></b>なPackageであり、自分のプロジェクトをPackageとして他の人が使う場合に記載する


# 自分なりの解釈

#### dependencies
->チーム開発において、みんな使わないとエラーが出てしまうPackage

#### dev_dependencies
->チーム開発において、アプリのビルドの時に必要にならないPackage



:::note warn

僕の解釈も間違っている可能性があるのでご注意ください。あくまでも僕なりの解釈と思ってもらえると幸いです。
また、一人で開発する際もこの考え方はとても大切になるので気をつけながら入れてみましょう。
:::


# 使用例
せっかくなので色々なPackageを入れて確認してみましょう！！！！

### １、UIの作成で使用するPackageについて

試しに、`flutter_rating_bar`を入れてみましょう。このPackageは、評価を行うときに簡単に実装できるPackageです。とても便利なのでぜひ使ってみてはどうでしょうか？

さあ、この場合はどうなるでしょうか。今回は、`lib/`以降のファイルにコードを書いて反映させるため、みんな使えないといけませんね。そうなると`dependencies`に入れましょう。

事前にコメントアウトを削除して、綺麗な形にしておきました。

:::note warn
`pubspec.yaml`の内容をコピペする際にはインデントに注意してください
場合によっては、`Pub get`できない場合があります。
:::

<details>
<summary>pubspec.yamlの記載例を見る</summary>

```yaml
name: sample_app  #自分が作成したアプリの名前
description: A new Flutter project.

publish_to: 'none'

version: 1.0.0+1

environment:
  sdk: '>=2.18.4 <3.0.0'

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^1.0.2
  #ここに追加しましょう。
  flutter_rating_bar: ^4.0.1

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^2.0.0

flutter:
  uses-material-design: true

```
</details>

どうでしょうか？なんとなくなるほど〜〜となりましたか？まだ理解していない方へ
まだ記載例を示していこうと思います。

### 2、状態管理で使用するPackageについて

状態管理の説明は、また別の記事で記載していこうと思います。今回は、状態管理の一つの`freezed`と`freezed_annotation`、`build_runner`を使ってみようと思います。

まずは、`freezed_annotation`から見ていきましょう。

`freezed_annotation`は、`lib/`のファイルに追加する必要があるため、みんな使えないといけませんね。そうなると`dependencies`に入れましょう。さっきと同じ考え方ですね。


次に残りの`build_runner`と`freezed`を見てみましょう。


`build_runner`は、`freezed`で使用するコードを生成してくれる便利なPackageです。これは、`lib/`以降のファイルには記載する必要がありません。ということは、`dev_dependencies`に入れた方が良さそうですね！！！

`freezed`は、freezedは、FlutterでImmutableなクラスを扱うのに便利なPackageです。このPackageを使うときによく確認してもらいたいのですが、dartファイルにコードを書いていて、freezedを使うときは、このように記載します。

```dart
import 'package:freezed_annotation/freezed_annotation.dart';
part 'example.freezed.dart';

@freezed
class Example with _$Example {
  const factory Example(String name, int age) = _Example;
}

```

この場合は、importに`freezed_annotation`を記載するので、この場合は、`dev_dependencies`に入れた方が良さそうです。


では答え合わせです。



<details>
<summary>pubspec.yamlの記載例を見る</summary>

```yaml
name: sample_app  #自分が作成したアプリの名前
description: A new Flutter project.

publish_to: 'none'

version: 1.0.0+1

environment:
  sdk: '>=2.18.4 <3.0.0'

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^1.0.2
  flutter_rating_bar: ^4.0.1
  #ここに追加する
  freezed_annotation: ^2.2.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^2.0.0
  #ここに追加する
  build_runner: ^2.3.2
  freezed: ^2.2.1

flutter:
  uses-material-design: true

```
</details>

# 最後に

どうだったでしょうか？理解力は増しましたか？まだわかんないよと思う方もいるでしょう。まずはこのPackageは`lib/`以降のファイルに書く必要があるのかを考えるととてもわかりやすくなると思います。
また、dart Packageのページに参考例があるのでそちらを参考にしてもいいかもしれないですね。


# 参考文献

https://minpro.net/difference-between-dependencies-and-dev_dependencies

https://dart.dev/tools/pub/dependencies

https://dart.dev/tools/pub/pubspec#dependencies

https://zenn.dev/kazutxt/books/flutter_practice_introduction/viewer/65_chapter7_freezed



### 参考例で使用したPackage
rating_bar

https://pub.dev/packages/flutter_rating_bar

https://pub.dev/packages/freezed

https://pub.dev/packages/build_runner