古くはビルドするための定義として下記のようなものがあります。
-
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 |