拡張機能を公開する

このページでは、Extensions Hub に拡張機能を公開する方法について説明します。

始める前に

拡張機能を公開するには、まず拡張機能のパブリッシャーとして登録する必要があります。

検証可能なソース

Extensions Hub で公開される拡張機能には、公開された検証可能なソースが必要です。拡張機能のソースコードを Extensions Hub に直接アップロードするのではなく、ソースの場所を指定すると、Extension Hub がそれをダウンロードしてビルドします。

現時点では、GitHub の公開リポジトリに拡張機能のソースコードを公開します。

検証可能なソースからアップロードする場合、次のようなメリットがあります。

  • ユーザーは、インストールされる拡張機能の特定のリビジョンのソースコードを検査できます。
  • 作業中のものや、開発段階から残っているファイルなど、アップロードに不要なものを除き、目的のものだけをアップロードできます。

推奨の開発サイクル

Firebase Extensions 開発ツールでは、プレリリースの拡張機能をアップロードできます。最終的にリリースされるのと同じ環境で拡張機能とインストール プロセスを簡単にテストできます。

この機能により、次のような開発サイクルが可能になります。

  1. Firebase Emulator Suite を使用して、拡張機能の開発とイテレーションを迅速に行う。

  2. ローカルソースから拡張機能をインストールして、実際のプロジェクトで拡張機能をテストする。

    firebase ext:install /path/to/extension
    firebase deploy --only extensions
  3. Extensions Hub(以下を参照)にプレリリース版をアップロードする。広範なテストに向けてインストール リンクを配布し、必要に応じて追加のプレリリース版をアップロードしてイテレーションを行う。

  4. 最終的な安定版を Extensions Hub(以下を参照)にアップロードして審査を受ける。審査に合格すると、拡張機能が Extension Hub に公開されます。

  5. extension.yaml のバージョン番号を増やし、拡張機能の次のバージョンにこのサイクルを繰り返す。

新しい拡張機能をアップロードする

拡張機能を初めてアップロードする場合:

  1. 省略可: 公開の GitHub リポジトリにコードを commit します。

  2. Firebase CLI の ext:dev:upload コマンドを実行します。

    GitHub

    firebase ext:dev:upload your_publisher_id/your_extension_id

    ローカルソース

    cd /path/to/extension
    firebase ext:dev:upload your_publisher_id/your_extension_id --local

    コマンド呼び出しで、次のものを指定します。

    • 登録したパブリッシャー ID。

    • 拡張機能を識別する ID 文字列。拡張機能の名前は、firebase-product-description-of-tasks-performed という形式します。例: firestore-bigquery-export

    このコマンドを実行すると、追加情報の入力を求められます。

    • GitHub からアップロードする場合:

      • GitHub にある拡張機能のリポジトリの URL。それぞれの拡張機能に固有のルートがあれば、リポジトリに複数の拡張機能を追加できます。

        新しい拡張機能を初めてアップロードする場合、そのリポジトリが拡張機能の正規のソースとして登録されます。

      • 拡張機能が存在するリポジトリのディレクトリ。

      • 拡張機能バージョンのソースをビルドする commit の Git リファレンス。commit ハッシュ、タグ、ブランチ名を指定できます。

    • アップロードするバージョンのリリース ステージ。

      alphabetarc(リリース候補)ステージには、テスター向けのプレリリース バージョンをアップロードできます。新しい拡張機能を初めてアップロードする場合は、これらのステージのいずれかを使用します。

      stable ステージは、Extensions Hub で公開リリースを公開するために使用されます。stable リリースをアップロードすると、自動的に審査が開始し、合格すると拡張機能が公開されます。

    バージョン番号を指定しません。この値は extension.yaml ファイルから取得されます。プレリリースの拡張機能のバージョンをアップロードすると、ステージとアップロード番号がバージョンに追加されます。たとえば、extension.yaml でバージョン 1.0.1 を指定してリリース候補をアップロードすると、バージョンは 1.0.1-rc.0 になります。同じバージョンの別のリリース候補をアップロードすると、自動的にカウントが増え、1.0.1-rc.1 のようになります。

拡張機能のプレリリース バージョンがアップロードされたので、テスト用に他のユーザーと共有してみましょう。ユーザーは次のいずれかの方法で拡張機能をインストールできます。

  • コンソールを使用: ユーザーは、次の形式のリンクをクリックして拡張機能をインストールできます。

    https://console.firebase.google.com/project/_/extensions/install?ref=your_publisher_id/your_extension_id@version

    テスターと直接リンクを共有できます。

  • CLI を使用: 拡張機能 ID の文字列を ext:install コマンドに渡すことで、拡張機能をインストールできます。

    firebase ext:install your_publisher_id/your_extension_id@version \
        --project=destination_project_id
    

更新されたバージョンをアップロードする

拡張機能の最初のバージョンをアップロードした後、さらに更新をアップロードして修正、機能の追加、次のリリース ステージへの移動を行うことができます。新しいバージョンをアップロードすると、古いバージョンの拡張機能がインストールされているユーザーの Firebase コンソールにプロンプトが表示され、アップグレードが求められます。

更新をアップロードするには:

  1. 省略可: 公開 Git リポジトリにコードを commit します。

  2. Firebase CLI の ext:dev:upload コマンドを実行します。

    GitHub

    firebase ext:dev:upload your_publisher_id/your_extension_id

    GitHub リポジトリまたは拡張機能のルート ディレクトリは、拡張機能用にすでに構成されているため、今回はディレクトリを指定するように求められません。リポジトリ構造をリファクタリングしたり、新しいリポジトリに移行した場合は、コマンドの引数 --root--repo を使用して変更を行うことができます。

    ローカルソース

    cd /path/to/extension
    firebase ext:dev:upload your_publisher_id/your_extension_id --local

公開する拡張機能を送信する

拡張機能を公開する準備ができたら、次の操作を行います。

  1. 公開 Git リポジトリにコードを commit します(公開リリースの場合は必須)。

  2. リリース ステージに stable を指定して、Firebase CLI の ext:dev:upload コマンドを実行します。

    firebase ext:dev:upload your_publisher_id/your_extension_id
  3. 以前に拡張機能のバージョンを公開したことがある場合は、新しい安定版リリースをアップロードすると、審査のために拡張機能が自動的に送信されます。

    拡張機能の最初の安定版リリースをアップロードした場合は、パブリッシャー ダッシュボードで拡張機能を探して、[Extensions Hub で公開] をクリックします。

送信後、審査に数日かかることがあります。承認されると、拡張機能が Extensions Hub に公開されます。拒否された場合は、その理由を説明するメッセージが届きます。報告された問題を解決して再度審査を依頼できます。

審査をスムーズに進めて、最初の審査で合格する可能性を高めるには、送信前に次の点を確認してください。

  • 拡張機能とインストール プロセスを十分にテストしている。
  • ドキュメントが完全かつ正確で、Firebase コンソールで適切にレンダリングされている。
  • パブリッシャーの名前とブランディングが、パブリッシャーであることを明確かつ正確に表している。
  • 拡張機能の名前、説明、アイコンが拡張機能の目的を明確かつ正確に表している。
  • 正確で役立つタグを設定している。
  • 使用するすべての Google API と Google 以外の API、拡張機能が出力するすべてのイベントタイプが extension.yaml で宣言されている。
  • 拡張機能が機能するために必要なロールのみへのアクセス権を要求し、そのようなアクセスが必要な理由をユーザーに明確に説明している。
  • Apache-2.0 の条件に基づいてソースファイルに明示的にライセンスが付与されている。

アップロードされて公開された拡張機能を管理する

アップロードされた拡張機能の一覧を表示する

自社のパブリッシャー ID でアップロードした拡張機能のリストを表示するには、次のいずれかを行います。

パブリッシャー ダッシュボード

パブリッシャー ダッシュボードで表示します。

Firebase CLI

ext:dev:list コマンドを実行します。

firebase ext:dev:list your_publisher_id

アップロードされた拡張機能の使用状況を確認する

自社のパブリッシャー ID でアップロードした拡張機能の使用状況を確認するには、次のいずれかを行います。

パブリッシャー ダッシュボード

パブリッシャー ダッシュボードには、すべての拡張機能の使用状況の累積指標と、拡張機能ごとの個別の指標が表示されます。

Firebase CLI

ext:dev:usage コマンドを実行します。

firebase ext:dev:usage your_publisher_id

拡張機能のバージョンを非推奨にする

ある時点で、古いバージョンの拡張機能を非推奨にする必要があります。たとえば、重大なバグの修正や依存関係の重要な更新を含む新しいバージョンをリリースする場合は、新しいユーザーが古いバージョンをインストールしないようにし、既存のユーザーにアップグレードを促すことが重要です。

拡張機能のバージョンを非推奨にするには、次のいずれかを行います。

パブリッシャー ダッシュボード

  1. パブリッシャー ダッシュボードで、拡張機能をクリックして詳細ビューを開きます。
  2. 非推奨にするバージョンを選択します。
  3. [バージョンのサポートを終了する] をクリックします。

Firebase CLI

ext:dev:deprecate コマンドを実行します。

firebase ext:dev:deprecate your_publisher_id/your_extension_id versions \
    [--message "deprecation_message"]

1 つのバージョンを指定することも、バージョンの範囲を指定することもできます。例:

  • 1.0.2
  • 1.1.0-1.1.7
  • <1.2.0
  • 1.1.*

非推奨の拡張機能は Extensions Hub に表示されないため、インストールできません。プロジェクトに非推奨のバージョンがインストールされているユーザーには、アップグレードを促すメッセージが表示されます。その間も、その拡張機能を引き続き使用したり、再構成したりできます。

拡張機能のすべてのバージョンが非推奨になると、その拡張機能は非推奨となり、Extensions Hub から除外されます。非推奨の拡張機能の新しいバージョンをアップロードすると、自動的に審査が開始します。承認されると Extensions Hub に再度公開されます。

非推奨を解除するには、パブリッシャー ダッシュボードを使用するか、Firebase CLI の ext:dev:undeprecate コマンドを実行します。

firebase ext:dev:undeprecate your_publisher_id/your_extension_id versions

付録: ビルドエラーのトラブルシューティング

拡張機能をアップロードすると、バックエンドが次のプロセスでソースコードをビルドします。

  1. GitHub リポジトリのクローンを作成し、指定されたソース参照を確認します。

  2. extension.yaml に指定されたすべての関数のソース ディレクトリで npm clean-install を実行し、NPM の依存関係をインストールします(Cloud Functions のリソースsourceDirectory を参照)。

    次の点にご注意ください。

    • package.json ファイルに対応する package-lock.json ファイルが必要です。詳細については、npm-ci をご覧ください。

    • 依存関係のインストール中は、インストール後のスクリプトは実行されません。ソースコードのビルドがインストール後のスクリプトに依存している場合は、アップロードの前にリファクタリングします。

  3. extension.yaml に指定されたすべての関数のソース ディレクトリで npm run build を実行して、コードをビルドします。

共有される最終的な拡張機能パッケージには、拡張機能のルート ディレクトリのみが保存されます。

拡張機能のアップロード中にビルドエラーが発生した場合は、エラーがなくなるまで、上記のビルドステップをローカルの新しいディレクトリに複製し、その後、もう一度アップロードを試してください。