注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Workshop、Actions、および Automate は、固定された関数バージョンまたはバージョン範囲に依存できます。バージョン範囲を指定すると、実行時に自動アップグレードが行われるため、開発作業を減らし、デプロイ済みの関数をダウンタイムなしでアップグレードできます。
バージョン範囲依存関係は強力な機能ですが、一定のリスクも伴います(たとえば、Actions 固有の権限への影響があります)。このドキュメントでは、バージョン範囲の解決の仕組みを説明します。これにより、リスクをよりよく理解し、バージョン範囲依存関係がアプリケーションに適しているかどうかを十分な情報に基づいて判断できます。
このドキュメントページは、下位互換性やセマンティックバージョニングシステムなどのトピックについて、事前知識があることを前提としています。これらのトピックに詳しくない場合は、関数のバージョニングに関するドキュメントを確認してください。
また、セマンティックバージョニング仕様 ↗で定義されているバージョンの優先順位のルールも理解しておく必要があります。つまり、異なる2つのバージョンが与えられたときに、どちらの優先順位が低いかを判断できる必要があります。たとえば、1.0.0-rc.1 < 1.0.0 < 1.0.1 < 1.1.0 < 2.0.0 です。
最も単純な形では、バージョン範囲はバージョンの不等式をまとめたものであり、バージョンがその不等式をすべて満たす場合、その範囲を「満たす」といいます。たとえば、バージョン 1.2.0 は範囲 >=1.0.0 <2.0.0 を満たします。
内部的には、関数のバージョン範囲の意味規則は、JavaScript エコシステムで広く使われているパッケージマネージャーである NPM から採用されています。厳密な定義については、バージョン範囲に関する NPM のドキュメント ↗を確認してください。
Workshop や Actions などのアプリケーションでは、現在、下位互換性のあるバージョンのみで構成されるバージョン範囲(つまり、マイナーまたはパッチアップグレード)のみを許可しています。この下位互換性のある範囲に相当する NPM の範囲は、キャレット範囲 ↗です。
デプロイ済みの関数を除き、バージョン範囲を指定して関数に依存する場合、実行時にその範囲を満たす具体的なバージョンが選択されます。特に、最終的には範囲を満たす最大のバージョンが選択されます(新しいリリースが反映されるまでに数分かかる場合があります)。
デプロイ済みの関数では、代わりに、現在デプロイされているバージョンが範囲を満たしていれば、そのバージョンが具体的なバージョンとして解決されます。デプロイ済みのバージョンが範囲を満たさない場合は、エラーが返されます。
関数の開発者には、セマンティックバージョニング仕様と一般的なベストプラクティスに従うよう案内していますが、メジャーバージョン以外のリリースでも、誤って互換性を損なう変更が導入される可能性は常にあります。関数の公開者は、[安定]のバージョンタグを制限することで、これらのタグを保護されたブランチに限定し、このリスクを減らせます。この制限により、下流のアプリケーションが自動的に利用する可能性のある[安定]のバージョンをリリースする前に、コードレビューが必要になります。
アプリケーションに破壊的変更が取り込まれると、実行時の失敗や予期しない動作など、さまざまな問題として現れる可能性があります。
破壊的変更に気づいた場合は、関数の開発者が修正をリリースできるよう、すぐに連絡してください。それまでの間は、関数の依存関係を最後に動作していたバージョンに固定してください。
デプロイ済みの関数への依存関係については例外があるものの、アプリケーションの稼働時間に厳格な要件があり、互換性を損なう変更を一切許容できない場合は、バージョンを固定した依存関係を使用してください。
関数ベースのアクションで関数のバージョン範囲を使用する場合、権限と来歴に関して、アクションの動作に影響する可能性のある重要な考慮事項があります。これらの影響について詳しくは、Actions の自動アップグレードに関するドキュメントを参照してください。