パッケージ管理 (Flutter Roadmap Package Manager)

## はじめに
Flutterを網羅的に学習するにあたって[Roadmap](https://roadmap.sh/flutter)を使って学習を進めることにしました。

この記事では、Flutter初学者やこれからFlutterを学習し始める方に向けて、**パッケージ管理**についてまとめています。

RoadmapはFlutterだけでなく、他の言語やスキルのロードマップも提供されており、何から学習して良いか分からないと悩んでいる方にとって有用なサイトになっています。
ぜひ[Roadmap](https://roadmap.sh/)を利用して学習してみてください。

## Roadmapとは

簡潔に言えば、Roadmap.shは学習者にとっての**ガイドブック**であり、**学習の方向性を提供する学習ロードマップサイト**です。

初心者から上級者まで、ステップバイステップでスキルを習得するための情報が提供されています。

学習の進め方が分かりやすく示されているだけでなく、個々の項目に参考資料やリソースへのリンクも提供されているので、学習者は目標を設定し、自分自身のペースで学習を進めることができます。

## Package Manager
FlutterロードマップPackage Managerでは以下の5つのサイトが紹介されています。興味のある方はぜひお読みください。

- Packages and Plugins: https://docs.flutter.dev/packages-and-plugins
- Dart Package Manager (pub.dev) in Flutter: https://www.youtube.com/watch?v=F1VRO0_MKLs
- pub.dev: https://pub.dev/
- Using packages: https://docs.flutter.dev/packages-and-plugins/using-packages
- Overview of Dart pub: https://dart.dev/tools/pub/cmd

## Package Managerとは

**パッケージマネージャー**とは、名前の通り**パッケージ管理**を行うツールで、プロジェクトで使用される**外部パッケージ**[^1]（**ライブラリやモジュール**）の管理をすることができます。

Flutterのパッケージマネージャーを使うことで、提供されている**数多くのパッケージを導入**することができるため、**アプリ開発を効率化する**ことができるのです。

Flutterの**パッケージ**は、**pub.dev**から検索できます。

https://pub.dev/

## パッケージのインストール

今回は**google_fonts**を例に説明していきます。

### 1. 使用パッケージの検索
まず[pub.dev](https://pub.dev/)から使用したいパッケージ、今回は**google_fonts**を検索します。検索すると以下画像のように一番上に該当するパッケージが表示されるので、クリックします。

![スクリーンショット 2023-09-19 0.24.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3368449/ca248854-3c41-7d5c-9aad-e42147818ff1.png)

### 2. インストール方法を確認
パッケージの画面から、**Installing**をクリックして、インストール方法を確認します。

![スクリーンショット 2023-09-19 0.24.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3368449/231ccd6f-7e4b-fc02-9a12-fc9bc4cbaef2.png)

### 3. インストール
以下画像 ① のようにターミナルからコマンドを入力してパッケージをインストールすると②のように`pubspec.yaml`ファイルに、パッケージが追加されます。

パッケージが追加された後、**`flutter pub get`**コマンドを入力するか、`pubspec.yaml`ファイルを開いている状態で表示される**`Pub get`**(以下画像)をタップするとインストール完了です。

あとはインストールしたパッケージを使用したいファイルで③のようにコード内にインポートするとパッケージを使用できるようになります。

![スクリーンショット 2023-09-19 0.29.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3368449/5078aa89-ca73-ec4c-bbb5-4dcc5f0ffbb2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3368449/1a165e3b-c1d2-6542-9edf-c79868a42b4a.png)


## パッケージ管理の概要
先ほど述べた通り、Flutterのパッケージ管理は`pubspec.yaml`ファイルを開いている状態で表示される画面上部のボタンで行うかターミナルからコマンドを入力して行うかの2パターンがあります。

### pubの主な機能
- **`pubspec.yaml`ファイル**
Flutterプロジェクトのルートディレクトリにある`pubspec.yaml`ファイルに、プロジェクトが依存するパッケージのリストが表示されています。パッケージのバージョン指定もこのファイルで指定されています。

- **`flutter pub get`コマンド**
 `flutter pub get`コマンドを使用することによって、`pubspec.yaml`で定義されたパッケージをダウンロードしてインストールすることができます。このコマンドは**新しい依存関係を追加したり、プロジェクトをクローンしたりした後**に実行します。

- **`flutter pub upgrade`コマンド** 
`flutter pub upgrade`コマンドを使用することによって、依存関係の**バージョンをアップグレード**することができます。バージョンの制約に従って最新バージョンがインストールされます。

#### コマンドの使用例

- **パッケージの追加**
pubspec.yamlファイルにパッケージを追加した際に、`flutter pub get`または`pub get`を実行して新しいパッケージをインストールします。

- **パッケージのアップグレード**
pubspec.yamlファイル内のバージョンを変更した際に、`flutter pub upgrade`または`pub upgrade`を実行してバージョンを更新します。

- **パッケージの削除**
pubspec.yamlファイルからパッケージを削除した際に、`flutter pub get`または`pub get`を実行して不要なパッケージをアンインストールします。


### ドキュメント
**パッケージの詳細な使い方**は、ドキュメントから見ることができます。

使用方法がわからない場合や初めて使うパッケージの場合は「**Documentation**」から「**API reference**」を開いて確認してみましょう。

![スクリーンショット 2023-09-19 1.49.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3368449/b4a90a1a-16ae-f701-334e-9f93fe3beccc.png)

### バージョン
パッケージをインストールして、インポートしたけど、**使用できない**場合があります。こういうときは、パッケージのバージョンが**サポートする Dart SDK の最低バージョンを満たしていない**ことが考えられます。

パッケージの画面から、**Version**をクリックして、最低バージョンを確認してみましょう。

![スクリーンショット 2023-09-19 1.18.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3368449/cfada6ef-591f-41f6-9f8d-02826d7c77e9.png)

もし、最低バージョンより使用しているバージョンが下の場合、FVMなどを使用してバージョンを変更する必要があります。FVMの使い方について以下の記事で説明しているので、興味があれば、是非読んでみてください。

https://qiita.com/haru-qiita/items/ce67bd1c81f84f80f24b

### README
パッケージをインストールするために必要な手順や注意書きが記載されています。パッケージをインストールする前に読んでおきましょう。

![スクリーンショット 2023-09-19 1.52.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3368449/d66fbabc-8bb2-c019-9e5c-ad2a08e5cd53.png)


### Example
パッケージを使用するためのサンプルコードが載っています。実装イメージがつきやすいので、実装前に読んでおくことをお勧めします。

![スクリーンショット 2023-09-19 1.25.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3368449/493d3b4e-07eb-32c6-48d1-4fe447ff66e4.png)


### Score
パッケージの品質と人気を評価するための総合的な指標が表示されています。

#### Likes
**Likes**は、パッケージが**開発者コミュニティからどれだけ好評であるか**を示す指標です。
パッケージを気に入ったり、サポートしたりする開発者が「**Likes**」をクリックすることで、この指標が増加します。パッケージの**人気度やコミュニティの関心度を示す**ため、多くのLikesがついているパッケージは、**有用である**ことを示しています。

#### Pub Points
**Pub Points**は、**コード品質、セキュリティ、規約への準拠**など、パッケージの**品質を評価する**ためのポイントです。パッケージは、Dartの**静的解析ツールでスキャン**され、様々なルールに基づいてポイントが割り当てられます。これらのポイントは、パッケージの**品質向上に役立ち**、開発者による**良質なコードの作成**を促します。また、**パッケージが他のパッケージに依存している**場合、それらの依存関係も評価対象となります。

#### Popularity
**Popularity**は、パッケージの一般的な人気を示す指標です。この指標は、**ダウンロード数、Likes数、GitHubのスター数**など、さまざまな要因に基づいて計算されます。多くの人々に利用されているパッケージは信頼性が高いとみなされます。

![スクリーンショット 2023-09-19 1.25.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3368449/aa82d739-8139-be1c-5162-70f129f7fbb9.png)

## まとめ
パッケージマネージャを使用することによって、パッケージを利用できるようになります。パッケージを導入することで、特定の機能を開発するのにかかる時間と労力を削減でき、開発プロセスを加速させることができるのです。特定の技術に関する深い知識がなくても高度な機能を実装できるため、ぜひ活用してみてください。

## 参考資料

https://hiyoko-programming.com/1242/

[^1]: **パッケージ**
パッケージとは、外部に公開されている便利な機能を提供するプログラムで、様々な機能を簡単に導入して利用することができます。