📖

Flutterパッケージマネージャー入門

2024/03/31に公開

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でパッケージを利用するには、以下の手順に従います:

  1. パッケージの検索

    pub.devで必要なパッケージを検索します。ここには、多くの公開パッケージがあり、必要な機能に合ったものを見つけることができます。

  2. 依存関係の追加

    欲しいパッケージを見つけたら、プロジェクトのpubspec.yamlファイルにそのパッケージを依存関係として追加します。例えば、HTTPリクエストを簡単に行うためのhttpパッケージを追加するには、以下のように記述します:

    dependencies:
      flutter:
        sdk: flutter
      http: ^0.13.3
    
  3. パッケージのインストール

    依存関係を追加したら、コマンドラインでflutter pub getを実行し、パッケージをインストールします。

  4. パッケージの使用

    パッケージがインストールされたら、コード内でそれをインポートして使用します。例えば、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