Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

パッケージの公開

💡 お知らせ: このドキュメントはAIによって翻訳されています。表現に違和感がある場合は、原文(英語)を参照するか、翻訳にご協力ください。

Flix パッケージは GitHub 上で公開されます。1 つのリリースは、build-pkg が artifact ディレクトリに残す 2 つのファイル、すなわちパッケージ自体である package.fpkg と、それを説明するマニフェストである flix.toml を保持します。そのパッケージに依存する側は、この両方をダウンロードします。

マニフェストの準備

GitHub 上で公開されるパッケージは、公開元のリポジトリを宣言しなければなりません:

[package]
version    = "4.0.0"
flix       = "0.76.2"
repository = "github:flix/museum"

Flix はパッケージのビルドとアップロードを代行してくれますが、マニフェストの内容が意図どおりかどうかまでは判断できません。開発者である私たちは、リリースする前に次の 3 点を確認しなければなりません:

  1. version フィールドが、リリースしようとしているバージョンであり、以前に同じバージョンをリリースしていないこと。バージョンは一度公開されると変更できません。
  2. repository フィールドが、公開先のリポジトリを表していること。これは、依存する側がそのパッケージに依存するために書く名前になります。
  3. check と test の両方が通ること。release コマンドはパッケージをビルドするため、プロジェクトがコンパイルできる必要がありますが、テストは代わりに実行してくれません。

release コマンドによる公開

release コマンドを使うと、Flix がパッケージ化とリリースの公開を代行してくれます。このコマンドには、対象リポジトリの Contents に対する読み取り・書き込みアクセス権を持つ GitHub トークンが必要です。これは GitHub の Settings > Developer settings > Personal access tokens から作成します。

その後、release --github-token <TOKEN> を実行します:

Found 'flix.toml'. Checking dependencies...
Resolving Flix dependencies...
Downloading Flix dependencies...
Resolving Maven dependencies...
  Running Maven dependency resolver.
Downloading external jar dependencies...
Dependency resolution completed.
Release github:user/repo v1.2.3? [y/N]: y
Building project...
Publishing a new release...

Successfully released v1.2.3
https://github.com/user/repo/releases/tag/v1.2.3

Flix はパッケージをビルドし、v1.2.3 というタグのリリースを作成し、そのリリースにパッケージの 2 つのファイル package.fpkg と flix.toml をアップロードします。

ヒント: Flix は、次の 3 か所を順番に GitHub トークンとして探します。--github-token オプション、プロジェクトディレクトリ内の .GITHUB_TOKEN ファイル、そして環境変数 GITHUB_TOKEN です。

ヒント: --yes オプションを使うと、確認プロンプトに自動で答えられます。スクリプトや CI からリリースする場合に便利です。

警告: トークンは必ず安全に保管してください。生成される .gitignore は .GITHUB_TOKEN を除外しているため、誤ってコミットしてしまうことはありません。

注意: 空の GitHub リポジトリに対してリリースを公開することはできません。

ヒント: GitHub 上で公開されているパッケージの例としては、Museum Project を参照してください。

パッケージのバージョン付け

マニフェスト内の 2 つのバージョン番号は、どちらも SemVer に従いますが、それぞれ異なる意味を持ちます。

version フィールドはパッケージ自体のバージョンです。どの部分をインクリメントするかによって、依存する側にどのような変更を期待させるかが決まります:

  • パッチリリース(1.2.3 から 1.2.4)は、何かを修正するもので API には手を加えません。
  • マイナーリリース(1.2.3 から 1.3.0)は、既存の API を壊さずに追加を行うものです。
  • メジャーリリース(1.2.3 から 2.0.0)は、依存する側が頼っているかもしれない何かを変更または削除するものです。

この区別は単なる慣習にとどまりません。依存関係解決の基準そのものです。Flix はパッケージを 1 つのバージョンでビルドし、そのバージョンはすべての依存する側が要求するバージョン以上であり、かつメジャーバージョンが一致していなければなりません。したがって、パッチリリースやマイナーリリースは依存する側が何も考えずに取り込めるものですが、メジャーリリースは、それぞれが意図的に踏み出す必要があるステップです。詳しくは バージョンとアップグレード を参照してください。これはまた、outdated の 3 つの列が区別しているものでもあります。

flix フィールドは、そのパッケージをビルドできる最も古い Flix コンパイラのバージョンです。Flix はこれを、現在実行中のコンパイラと比較し、より新しいバージョンを要求するパッケージのビルドを拒否します。そのため、このフィールドを引き上げると、まだアップグレードしていないすべての依存先を締め出すことになります。パッケージがより新しいコンパイラが提供する何かを必要とする場合にこのフィールドを引き上げますが、できればパッチリリースではなく、マイナーリリースやメジャーリリースの際に行うべきです。

注意: Flix 自体はメジャーバージョン 0 です。そのため、Flix 自身のマイナーリリースが言語を変更することがあります。flix フィールドはあくまで下限であり、Flix は、より新しいコンパイラであれば、より古いバージョンを要求するパッケージをビルドできると仮定します。

パッケージが約束すること

マニフェストの 2 つのフィールドは、そのパッケージに依存する側への約束です:

  • version フィールドは、パッケージが公開されているタグと一致していなければなりません。マニフェストが別のバージョンを宣言している v1.2.3 のリリースは、解決される際に拒否され、その作者だけがこれを修正できます。
  • flix フィールドは、そのパッケージをビルドできる最も古い Flix のバージョンでなければなりません。必要以上に新しいバージョンを宣言しているパッケージは、理由もなく依存先を締め出してしまいます。逆に必要より古いバージョンを宣言していると、依存先の環境ではコンパイルできません。

公開されたパッケージは、それに依存する側によってソースコードからコンパイルされます。そのため、pub 宣言のみが到達可能です。依存する側が使用することを意図しているすべてのモジュールは、pub と宣言しなければなりません。