見出し画像

GWの終わりにFlutterの自作Widgetをpub.devに公開してみよう

こんにちは。最近クローゼットの書斎化DIYに挑戦しました。
エンジニアのhoriです。

普段開発をしていると今後使い回せそうなモジュールなど、ライブラリとして公開しておきたいことってありますよね。使うのは未来の自分かもしれないし、世界の誰かかもしれないし、ひょっとするとその筋のデファクトスタンダードになってしまうかもしれません。

今回は、Flutter開発(Dart)におけるパッケージ管理システムであるpub.devへの公開がとても簡単で感激したので手順を追ってご紹介したいと思います。

ゴールデンウィークの終わりにさくっとできてしまうくらい簡単でした。

1. パッケージを作る

先に今回作成したパッケージに含まれるWidgetのご紹介です。

event_schedule_calendarと名付けました。
Googleカレンダーの1ヵ月単位表示のようなカレンダー上に、スケジューリングされた何かしらのイベントが存在することを提示できるUIのWidgetです。

画像1

3~4時間くらいでババっと作ったので粗いですが、ソースコードはこちらです。カレンダーの生成ロジックとかはちゃんとテスト書いてみました。

パッケージのファイル構成は、主なところをピックアップすると以下のようになっています。

event_schedule_calendar_package
|-- CHANGELOG.md
|-- LICENSE
|-- README.md
|-- example
|   |-- lib
|   |   +-- main.dart
|-- lib
|   |-- event_schedule_calendar.dart
|   |-- src
|-- pubspec.yaml
+-- test

CHANGELOG.md
更新履歴のドキュメント。pub.devのページでもコンテンツとして表示されます。

LICENSE
公開するパッケージのライセンス。FlutterではDartのライセンスに合わせてBSD-3Clauseが推奨されているそうです。

README.md
ご存知READMEですが、pub.devではパッケージのメインページとして扱われます。

example/lib/main.dart
公開するパッケージを参照したサンプルアプリを格納します。ドキュメントの代わりになるのと、後述するPUB POINTSに影響します。

lib/[package_name].dart, lib/src
パッケージのソースコードです。[package_name].dartに記述されたコードが公開されます。src以下のディレクトリは非公開なので、参照元のプロジェクトからは参照することができなくなります。

pubspec.yaml
npmでいうpackage.jsonのようにname,description,version,repositoryなど、パッケージのメタ情報などを記載します。

1-2. 検証済みPublisherの登録

必須ではなく推奨とされていますが、検証済みPublisherに登録することで以下のような公式マークが付きます。欲しいじゃないですか、公式マーク。

スクリーンショット 2021-05-09 8.51.51

登録手順は、pub.devにGoogleアカウントでログイン後、ヘッダー右上のメニューから Create publisher を選択し、有効なドメインを入力します。
このドメインはGoogle Search Consoleで認証されていないといけないので、事前に認証して使用しました。

スクリーンショット 2021-05-09 8.53.28

2. パッケージ公開

公開前に以下のコマンドで公開可能かテストします。

dart pub publish --dry-run

公開できない場合、または公開前に確認した方が良い警告があればその旨がメッセージで表示されます。

問題なければ、

dart pub publish

でパッケージを公開します。公開前に必ず

Do you want to publish event_schedule_calendar 1.0.2 (y/N)? 

のように最終確認が表示されるので、一呼吸してからy→enterしましょう。

また、公開できるパッケージの最大容量は100Mバイトまでです。
それを超えると、以下のようなメッセージが表示されアップロードが完了しません。

 * Your package is 565.8 MB. Hosted packages must be smaller than 100 MB

アップロード完了後、以下のようにpub.dev上でパッケージが確認できるようになります🎉🎉

番外編. pub.devの注意点

Publishing is forever
Keep in mind that publishing is forever. As soon as you publish your package, users can depend on it. Once they start doing that, removing the package would break theirs. To avoid that, the pub.dev policy disallows unpublishing packages except for very few cases.

公式参考:https://dart.dev/tools/pub/publishing

pub.devに公開されたものは永久に残り続けるという思想のため、
・間違えてシークレットな内容をアップした
・非公開のつもりで実装したAPIが公開された状態でアップした
というものが古いバージョンとして残り続けるようなので注意が必要そうです。

3. 公開後

公開してみるとパッケージのヘルシーさがスコアリングされるようです。これに感激しました。

スクリーンショット 2021-05-09 9.13.42

PUB POINTSに関してスコアが低い部分は、「descriptionが短いよ」とか「ドキュメントが少ないよ」ということが指摘されていました。ここでいうドキュメントはファイルではなく、公開APIに対するdocコメントが少ないということでした。

確かに、ライブラリを使う側からすれば必要不可欠であり、選定時の判断がこのスコアによって左右される場合もあるなと感じました。チェックリスト形式でライブラリの不備を消して、あるべき姿にできるのは良いですね。

あとLIKESが0なのでLIKEしてください...ぶえん。

まとめ

npmなど使ったことがあれば同じような感覚で公開できるのではと思いました。

所感ですが、マルチプラットフォームのライブラリを公開すると、何となく生産性高いことをした気持ちになれたりします。

また、今後の課題としてCIと連携してタグ付け〜パッケージ公開などを自動化するということも挑戦したいなと思います。
widget自体の機能改善だと、現在は月表示のみですが、当日表示や週表示などの改善もしていこうかなと思います。

エンジニア募集中!

スペースマーケットでは現在アプリエンジニアを積極採用中です。
アプリで社会課題を解決しながら、あたりまえの世界を作っていきたい方がいらっしゃれば、ぜひお話しさせていただきたいです!


この記事が参加している募集

休日のすごし方

この記事が気に入ったらサポートをしてみませんか?