古くはビルドするための定義として下記のようなものがあります。
-
Make の
Makefile -
Ant の
build.xml -
Gradle の
build.gradle -
Maven の
pom.xml -
Visual Studio の
*.vcxproj、*.csproj
現代ではビルドというよりはパッケージを管理するために「パッケージ定義ファイル」を作るように変わってきています。
多くの言語や環境において、パッケージを公開するためのホームページ(レポジトリー)が1つあり、ここに公開するためには次のようなパッケージファイルを作ることになります。
-
Dart における pub.dev の
pubspec.yaml -
Lua における LuaRocks の
Rockspeck -
Node.js における npm の
package.json -
Python における PyPl (pip) の
setup.py、__init__.py、__main__.py -
Rust における create.io (cargo) の
package.toml -
Ruby における RubyGems の
gemspec -
Swift における Swift Package Manager (SwiftPM) の
Package.swift
サードパーティ製としても以下のようなものもあります。
-
CocoaPods の
*.podspec -
Carthage の
Cartfile - Libraries.io (他のいろんなパッケージ管理を取り込む形)
-
Linux の Snapcraft の
snapcraft.yaml
パッケージ管理レポジトリーの役割
パッケージが公開され、それが管理されていると次のような利点があります。
- 公開されているパッケージを検索できる。
- このため、各開発環境があらかじめ用意している標準ライブラリ以外を「あたかも公式のライブラリ」のように扱うことができる(実質的な審査は皆無だけれど)。
- 使用者のコメントや、ダウンロード数、評価数などを用意しているレポジトリーも多い。
- パッケージのバージョン管理ができる。
- バージョンアップされた際に、使用者にバージョンアップを促せる。
- 開発時に使用していたバージョンに固定させる設定を有するシステムもある。
パッケージ定義ファイルの内容
レポジトリーに登録する際には、いくつか決まり事がありますが、
代表するファイルにいくつかの情報を記入します。
使う人向けの情報
まず使う人向けの情報として、下記の情報があります。
| 要素 | 例 | 説明 |
|---|---|---|
| ID | com.example.asoft |
パッケージを識別するための ID |
| Name | Awesome Software |
パッケージの名称。16文字以内程度。Title ということも。 |
| Descriptioin | C library for each and every platform |
パッケージの説明。40文字以内程度。より詳しい説明は README.md で説明。 |
| Version | 1.0 |
現在のバージョン。 |
| Homepage | https://www.example.com/ |
パッケージのホームページ |
| Licenses | proprietary |
パッケージのライセンス |
| Author | Example Author |
パッケージの開発組織 |
| Contributors | Example |
パッケージへの寄稿者 |
| Docs | README.md |
ドキュメントへのリンク |
| Category | Middleware |
パッケージ製品の種類。ネット、ファイルシステム、といったもの |
| Icon | example.ico |
アイコン |
| Deprecated | N/A |
廃止予定であり、他のパッケージに移行すべきことを示す |
| TAG | Audio, Compression |
パッケージの種類を示すタグ |
作る人向けの情報
次に作る人向けの情報として、下記のような情報があります。
| 要素 | 例 | 説明 |
|---|---|---|
| Import Dependency | N/A |
他のパッケージを取り込むことを意味する |
| Dev Dependency | Platform SDK |
他のパッケージに依存していることだけを示し、内包しない |
| Runtime Dependency | VC2019 Runtime |
実行時のパッケージ依存 |
| DevEnv Dependency | CMake |
OS や言語への依存性を示す |
| Language | C |
使用するプログラミング言語 |
パッケージ定義ファイルの内容
パッケージをレポジトリーに登録する際にも用いるファイルを「パッケージ定義ファイル」と勝手に読んでいますが、
各種システムで登録するファイル名やその形式、情報源となる URL を下記にまとめます。
| システム | 公式レポジトリー | パッケージ定義ファイル名 | ファイル形式 | 情報源 |
|---|---|---|---|---|
| Dart | https://pub.dev/ | pubspec.yaml | YAML | https://dart.dev/tools/pub/pubspec |
| Lua | https://luarocks.org/ | rockspec | https://github.com/luarocks/luarocks/wiki/Rockspec-format | |
| Node.js | https://www.npmjs.com/ | package.json | JSON | https://docs.npmjs.com/files/package.json |
| Python | https://pypi.org/ | setup.py | Python | https://packaging.python.org/tutorials/packaging-projects/ |
| Rust | https://crates.io/ | package.toml | TOML | https://doc.rust-lang.org/cargo/reference/manifest.html |
| Ruby | https://rubygems.org/ | gemspec | Ruby | https://guides.rubygems.org/specification-reference/ |
| Swift | N/A | Package.swift | Swift | https://developer.apple.com/documentation/swift_packages/package |
| CocoaPods | N/A | *.podspec | Ruby | https://guides.cocoapods.org/syntax/podspec.html |
| Carthage | N/A | Cartfile | OGDL | https://github.com/Carthage/Carthage |
| Snapcraft | https://snapcraft.io/ | snapcraft.yaml | YAML | https://snapcraft.io/docs/snapcraft-yaml-reference |