Flutter/Dartで自作パッケージをpub.devへ公開する手順
はじめに
Flutter/Dartで開発していると、他の誰かが使えそうな汎用的なWidgetを作ることがあります。
こうした汎用的なWidgetは、pub.devへパッケージとして公開しておくと、pubspec.yaml
へ指定することで他の人が使うことができます。
この記事では、pub.devへ自作パッケージを公開するまでの手順を紹介します。
パッケージを公開する準備をする
パッケージ用プロジェクトを作る
パッケージを公開する際は、次のコマンドでパッケージ用プロジェクトを作成します。
$ flutter create --template=package your_app_project
このプロジェクトは、次のような構成となっています。
|-- .gitignore
|-- CHANGELOG.md
|-- LICENSE
|-- README.md
|-- lib
| '-- your_app_project.dart
|-- pubspec.yaml
'-- test
'-- your_app_project_test.dart
lib直下のyour_app_project.dart
は、次の一文から始まっています。
library your_app_project;
これは、そのファイルがライブラリのルートファイルであるということを示しています。
(2021/01/21追記)
上記に関して Kaboさんから指摘をいただきました。
library
directive が宣言されていない場合、ライブラリのパスとファイル名に基づいて一意なタグが生成されるようです。
なので、 ライブラリレベルでのドキュメント を生成する予定がなければ、寧ろ library
を省略することが推奨されているようです。(Kaboさんありがとうございました🙏)
Creating packages | Dart
(追記終わり)
また、lib/src
下のファイルに書いたコードはプライベートとなるため、ライブラリのAPIとして公開するコードは、lib
直下へ書いておく必要があります。
パッケージ公開での制限事項・メタ情報の公開方法
パッケージを公開するにあたっては、次の制限に従う必要があります。
- LICENSEファイルを含むこと(Dart自体が使っている、BSD-3-Clauseが推奨されている)
- gzip圧縮後のサイズが10MB以下であること(大きすぎる場合は、複数のパッケージに分割する等する)
- パッケージは他の
pub.dev
に存在するパッケージ、またはFlutter等のSDKにのみ依存していること - Googleアカウントを持っていること(アップロード権限管理に使用)
また、次のファイルにパッケージ公開に関するメタ情報等を含めることができます。
- README.md
-
README.md
に書いた内容は、パッケージのページで公開されるメインコンテンツとなる。
-
- CHANGELOG.md
-
CHANGELOG.md
に書いた更新履歴は、パッケージページのタブに表示される。
-
- pubspec.yaml
-
pubspec.yaml
には、パッケージの説明やホームページなど、パッケージページの右側にある、詳細情報を記入するために使用されます
-
検証済みパブリッシャーとして登録する
公式には、個人のGoogleアカウントより、検証済みパブリッシャーとしてパッケージを公開することが推奨されています。
検証済みパブリッシャーとして登録すると、個人のメールアドレス(Gmail)を公開せず、また次のような検証済みバッジが付きます。
検証済みパブリッシャーとして登録するには、次の手順を行います。
- Dart packages へアクセス
- Googleアカウントでログインする
- 右上メニューから「Create publisher」を選択
- パブリッシャーに関連付けるドメイン (
dart.dev
等)を入力し、「Create Publisher」をクリックする。
Google Domainsでドメインを取得していれば、そのまま自動でパブリッシャーとして登録されます。
他でドメインを取得している場合は、この後 Google Search Console でドメインの所有権を証明する必要があることがあります。
パッケージを公開する
では、いよいよパッケージを公開していきます。
注意点として、基本的に一度公開したパッケージは二度と削除することができません。
この辺りのポリシー(削除可能な例外も)については、Policy | Pub siteへ書かれています。
なお、次のファイルはパッケージ公開に際してアップロードされることはありません。
-
packages
ディレクトリ - lockfile (
pubspec.lock
) - Gitを使っていない場合
- 全ての隠しファイル
- Gitを使っている場合
-
.gitignore
で除外されているファイル
-
公開してはいけないファイルを含んでないかなど確認したら、次のコマンドで公開するテストをしてみましょう。
$ dart pub publish --dry-run
出力は次のようになります。
$ dart pub publish --dry-run
Publishing material_spacing_checker 0.1.0 to https://pub.dartlang.org:
|-- .gitignore
|-- CHANGELOG.md
|-- LICENSE
|-- README.md
|-- analysis_options.yaml
|-- lib
| '-- material_spacing_checker.dart
|-- pubspec.yaml
'-- test
'-- .gitkeep
Package has 0 warnings.
こちらがパッケージとして公開されるファイル一覧となるので、ダメなものを含んでいないか、再度確認しておきましょう。
確認したら、あとは—dry-run
を外して dart pub publish
でパッケージを公開します。
なお、パッケージ公開後、最初は個人のGoogleアカウントで公開されていると思いますが、
- パッケージのページへアクセス
- Adminタブを選択
- Select a publisher で検証済みパブリッシャーを選択
- 「TRANSFAR TO PUBLISHER」をクリック
とすることで、検証済みパブリッシャーへ所有権を移す(個人でなく、検証済みパブリッシャーとしてパッケージを公開する)ことができます。
参考資料
Developing packages & plugins - Flutter
Publishing packages | Dart
Dart Programming - Libraries - Tutorialspoint
Creating packages | Dart
ドメインホストの特定 - Google Workspace 管理者 ヘルプ
参考にさせていただいたパッケージ
mono0926/adaptive_dialog: Show alert dialog or modal action sheet adaptively according to platform.
hnvn/flutter_shimmer: A package provides an easy way to add shimmer effect in Flutter project
rrousselGit/river_pod: A simple way to access state while robust and testable.
table_calendar | Flutter Package
Discussion