Flutterパッケージマネージャー入門
Flutterとは、モバイルアプリを簡単に開発できるフレームワークです。
Flutterの魅力の一つは、豊富なパッケージが利用できることです。パッケージを使用することで、アプリ開発の速度を上げ、様々な機能を簡単に追加できます。
Flutterパッケージとは?
Flutterパッケージとは、再利用可能なコード、アセット(静的ファイル)、および機能の集まりです。これらは他のFlutterプロジェクトで使用できるように、一般に公開されています。パッケージは、UI要素、データベース、API連携など、様々な用途で利用できます。
パッケージとプラグインの違い
Flutterでは、パッケージとプラグインはアプリ開発に再利用可能なコードや機能を提供しますが、それぞれ異なる目的で使用されます。
パッケージ
パッケージとは、ダートのライブラリやリソースの集合体です。機能拡張やコード再利用のために利用されます。
Dartライブラリ、アプリ、リソース、テスト、画像、フォント、などを含むことができます。pub.devには、多くのパッケージがリストされており、Flutterアプリで使用できます。これらは主にDartで書かれており、プラットフォーム固有の機能は含まれません。
プラグイン
プラグインは、特定のプラットフォーム機能をアプリに提供する特殊な種類のパッケージです。そのため、プラグインはパッケージの一種となります。
Android(KotlinまたはJava)、iOS(SwiftまたはObjective-C)、web、macOS、Windows、Linuxなどのプラットフォーム向けに書かれたプラグインが存在します。例えば、デバイスのカメラ機能をFlutterアプリで使用できるようにするプラグインがあります。
一つ具体的な例として、url_launcher
がありますが、このパッケージは特定のプラットフォームに左右されるため、プラグインとも呼びます。
パッケージの利用方法
Flutterでパッケージを利用するには、以下の手順に従います:
-
パッケージの検索
pub.devで必要なパッケージを検索します。ここには、多くの公開パッケージがあり、必要な機能に合ったものを見つけることができます。
-
依存関係の追加
欲しいパッケージを見つけたら、プロジェクトの
pubspec.yaml
ファイルにそのパッケージを依存関係として追加します。例えば、HTTPリクエストを簡単に行うためのhttp
パッケージを追加するには、以下のように記述します:dependencies: flutter: sdk: flutter http: ^0.13.3
-
パッケージのインストール
依存関係を追加したら、コマンドラインで
flutter pub get
を実行し、パッケージをインストールします。 -
パッケージの使用
パッケージがインストールされたら、コード内でそれをインポートして使用します。例えば、
http
パッケージを使用するには、以下のようにインポートします:import 'package:http/http.dart' as http;
これで
http
パッケージの機能を使って、HTTPリクエストを行うことができます。
依存関係の競合を解決するには
依存関係の競合とは、我々がアプリで使いたい二つのパッケージが、同じものを必要としているけれども、それが異なるバージョンである場合に起こります。これを解決するためには、特定のバージョンではなく、幅広いバージョンを受け入れるように設定することが重要です。
たとえば、アプリで使用する二つのパッケージが、url_launcher
というパッケージを必要としていますが、一つはバージョン5.4.0を、もう一つは5.4.6を要求しているとします。こういった場合、url_launcher
のバージョンを5.4.0以上6.0.0未満の範囲で指定する(例えば^5.4.0と書く)ことで、両方のパッケージが動作するようになります。
それでも競合が解決しない場合、アプリの設定ファイルであるpubspec.yamlに特定のバージョンを強制する設定を追加することで、問題を解決できます。これは、「このアプリでは、たとえ他が違うバージョンを要求しても、url_launcher
のバージョン5.4.0だけを使う」という意味です。
おすすめのパッケージ
Flutterで開発を始める際に便利なパッケージをいくつか紹介します:
- Dio: HTTPクライアントで、Flutterでのネットワークリクエストを実現します。
- hooks_riverpod: 状態管理のパッケージです。通常のriverpodに加えてhooksでコードをより簡潔に書くことができます。
- sharedPreference: Flutterアプリのローカルデータベースとして、boolやString、intなどプリミティブ型のデータを保存できるパッケージです。(他にもisarといったものもあります。)
- isar:ローカルデータベースの中でも大量のデータを効率的に扱うことができます。
- freezed: コードを自動生成してくれて、簡単に不変なクラスを作成できます。
Discussion