【自作のDartパッケージ公開!】pub.devへパッケージを公開してみた学び

はじめに

こんにちは、株式会社メンバーズ Cross ApplicationOpen in new tabカンパニーの田原です。

この度、プライベートで開発した Dart Package を pub.devOpen in new tab に公開しました。
作成したパッケージを pub.dev に公開することで、世界中の開発者がそのライブラリを利用できるようになります。
パッケージをただ公開するだけではなく、適切な準備・設定を行うことで高評価に繋がり、多くの開発者に届けることができます。

この記事では、パッケージの作成から公開、品質を高めるポイントまで解説します。

自作パッケージ:「cacherineOpen in new tab」の紹介

  • FIFO, LRU, MRU, LFU などのキャッシュアルゴリズムを、シングルスレッド/マルチスレッドに対応して提供するパッケージです。
  • キャッシュのメトリクス分析をしてアルゴリズム最適化の助けとなるモニタリング機能付きのキャッシュも用意しています。
  • 命名は、cache(キャッシュ)+ catherine(キャサリン:女性の名前)を組み合わせてキャッチーで愛らしいパッケージのイメージにしました。漫画家・うすた京介先生の作品『セクシーコマンドー外伝 すごいよ!!マサルさんOpen in new tab』の登場人物「キャシャリン」とは一切関係ありません。

公開手順

Dartパッケージの作成

Dart のライブラリパッケージを作成するには、以下のコマンドを実行します。

dart create -t package <PACKAGE_NAME>

<PACKAGE_NAME> には、作成したいパッケージ名を指定してください。これにより、基本的な Dart パッケージの構造が自動生成されます。

Flutterパッケージの作成

この記事では詳しく扱いませんが、Flutter の UI コンポーネントを含むパッケージを作成する場合には、前述のコマンドの代わりに次のコマンドを実行します。

dart create -t package:flutter <PACKAGE_NAME>

Flutter パッケージには、Flutter 固有の依存関係やコード構成が含まれます。

参考:Creating packagesOpen in new tab

必要ファイルの作成


パッケージを公開するためには、いくつかの重要なファイルを適切に準備する必要があります。

pubspec.yaml

パッケージのメタデータや依存関係を記述します。特に以下の点を確認してください。

  • name、version、description を適切に設定する
  • description は 60文字以上180文字以下 にする
  • ホームページ や リポジトリ の URL を記載する(GitHub など)

README.md

パッケージの概要、使い方を詳しく説明するファイルです。pub.devOpen in new tab のパッケージページにも表示されます。

CHANGELOG.md

各バージョンの変更履歴を記録します。

LICENSE

OSI 承認のオープンソースライセンス(MIT、BSD 3-Clause など)を指定します。

これらのファイルが適切に設定されていないと、pub.dev でのスコアが下がるため、しっかり整備しましょう。

公開

パッケージは公開後、基本的に削除できません。パッケージを使用する側にとっても重要なため、公開前に設定の不備がないか確認することが大切です。

パッケージを公開する前に、設定の不備をチェックするため、以下のコマンドを実行してください。

dart pub publish --dry-run

問題がなければ、以下のコマンドで実際に公開します。

dart pub publish

初回公開時の認証


初めてパッケージを公開する際は、Google アカウントでの認証が求められます。コマンド実行後にブラウザが開くので、指示に従って認証を完了させましょう

参考:Publishing packagesOpen in new tab

評価項目

pub.dev では公開されたパッケージに対して評価が行われます。以下の項目に基づいて最大 160点 が付与されます。
評価項目と配点は次のとおりです。

☑️ 基本的な要件(30点)

  • pubspec.yaml が適切に記述されている(10 点)
  • README.md が存在し、内容が充実している(5 点)
  • CHANGELOG.md に変更履歴が明記されている(5 点)
  • OSI 承認のライセンスを設定している(10 点)

☑️ ドキュメント(20点)

  • API の 20% 以上に DartDoc コメントがある(10 点)
  • サンプルコード(example/)が提供されている(10 点)

☑️ プラットフォームサポート(20点)

  • 6 つのプラットフォーム(iOS, Android, Web, Windows, macOS, Linux)すべてに対応している(20 点)

☑️ コード品質(50点)

  • 警告やエラーがなく、適切にフォーマットされている(50 点)

☑️ 最新の依存関係を使用(40点)

  • 最新の Dart SDK に対応(10 点)
  • 最新バージョンのパッケージを利用(10 点)
  • 依存関係の下限バージョンも互換性あり(20 点)

GitHub Actions で公開を自動化

パッケージの更新作業を効率化するために、GitHub Actions や Google Cloud を活用して、自動で pub.dev に公開することができます。

設定手順

  1. pub.devOpen in new tab の管理画面 から Automated publishing を有効にする。
  2. GitHub Actions に publish.yamlOpen in new tab を追加。
  3. pub.devOpen in new tab に公開する アクセストークン を GitHub Secrets に保存。

参考:Automated publishing of packages to pub.devOpen in new tab

パッケージの信頼性向上

公開したパッケージをより多くのユーザーに使ってもらうために、信頼性を示す指標を追加するができます。

Verified publishers

Verified publisher として登録することで、公開したパッケージに、その開発者が認証済みであることを示すバッジが表示されます。
公式認証を得ることで、利用者は安心してパッケージを利用しやすくなります。

Verified publisher の登録には「ドメイン」が必要です。持っていない場合は、お名前.comOpen in new tab などのサービスを利用して取得しましょう。

参考:Create a verified publisherOpen in new tab

OSSF Scorecard

OSSF Scorecard を利用して、セキュリティやメンテナンス状況を可視化 できます。

OpenSSF(Open Source Security Foundation)Open in new tab は、Linux FoundationOpen in new tab の傘下で オープンソースプロジェクトにおけるセキュリティのベストプラクティスを普及する団体です。

GitHub Actions で ossf/scorecard-actionOpen in new tab をセットアップすることで Scorecard の結果を得ることができます。

参考: OSSF ScorecardOpen in new tab

▼Scorecard の結果を README にバッジとして表示する例

[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/yordgenome03/cacherine/badge)](https://deps.dev/project/github/yordgenome03%2Fcacherine)

CodeCov

テストカバレッジを測定し、README にバッジを表示すると、品質の高さをアピールできます。

カバレッジの測定・表示には CodeCov を利用すると便利です。

GitHub Action で CodeCov を利用するには .github/workflows/api.ymlOpen in new tab のようにセットアップします。

参考: CodeCov Quick StartOpen in new tab

▼CodeCov を利用してテストカバレッジをREADME にバッジとして表示する例

[![codecov](https://codecov.io/gh/yordgenome03/cacherine/branch/main/graph/badge.svg)](https://codecov.io/gh/yordgenome03/cacherine)

まとめ

以上、Dart のパッケージ公開から評価・品質のポイントまでを解説しました。

パッケージを公開し、継続的に運用することは、OSSの開発やCI/CDの実践、セキュリティ対策など、幅広い知識とスキルを養う非常に有益な経験です。

私自身もまだ道半ばですが、今後も継続的に開発を行い、多くの開発者に評価されるパッケージにしていきたいと思います。

読者の皆さんも、ぜひこのような取り組みを通じてスキルを磨きつつ、一緒にコミュニティを盛り上げていただけると嬉しいです!

最後までお読みいただき、ありがとうございました。

この記事が役に立ったと思ったら、
ぜひ「いいね」とシェアをお願いします!

リンクをコピーXでシェアするfacebookでシェアする

この記事を書いた人

田原 葉
田原 葉
2024年にメンバーズに中途で入社。前職はiOSエンジニア。現在はCross ApplicationカンパニーでFlutter技術をメインにモバイルアプリ開発支援を担当。
詳しく見る
ページトップへ戻る