PowerShell
chocolatey

Chocolatey にパッケージを公開する #1 全体手順

More than 3 years have passed since last update.

はじめに

Chocolatey とは?

Chocolatey は、Windows 向けのパッケージマネージャー及びレポジトリのデファクトスタンダードです。Windows 10 以降では、標準パッケージマネージャー OneGet の標準レポジトリとして採用されています。

Chocolatey に登録されているソフトウェアは、多くの有志によって登録され、メンテナンスされています。本記事では、Chocolatey のパッケージを実際に作って公開する方法を説明します。

対象とする読者

  • Chocolatey を使ったことがある
  • Chocolatey に新しく登録したいパッケージがある
  • 自作ソフトウェアを Chocolatey で公開したい
  • Chocolatey を使って社内レポジトリを構築したい

パッケージの作成から公開までのフロー

Chocolatey のパッケージには 審査 があります。この審査が結構厳しく、パッケージの命名規則から、インストールスクリプトまで見られます。また、Chocolatey 側が用意する VM でのテストにパスする必要があります (英語ロケールなので、日本語 Windows とは挙動が異なる部分があります)。

この審査にパスすると、パッケージ公開となります。パッケージが公開されたら、作ったパッケージは自分でメンテナンスする必要があります。パッケージを更新するときも、その都度 審査 が入ります。

flow2.png

パッケージの構成

Chocolatey のパッケージは次のような構成で作成します。

  • [パッケージ名のフォルダ]
    • [パッケージ名].nuspec
    • tools
      • chocolateyInstall.ps1

*.nuspec ファイルは、XML 形式でパッケージのメタデータを記述します。
chocolateyInstall.ps1 は、パッケージのインストール時に実行されるスクリプトで、PowerShell のスクリプトとして記述します。

nuspec ファイルの作成

*.nuspec は Chocolatey がバックエンドで利用している NuGet で利用されるファイル形式です。.NET の開発をしている人には馴染み深いと思います。

サンプル

以下は Opera Developer パッケージで用いている nuspec ファイルを、説明用に簡略化したものです。

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    <id>opera-developer</id>
    <title>Opera Developer</title>
    <version>29.0.1788.0</version>
    <authors>Opera</authors>
    <owners>Pine Mizune</owners>
    <summary>The Opera web browser makes the Web fast and fun, giving you a better web browser experience on any computer. Opera is the fastest browser on Earth, and is completely free.</summary>
    <description>
The Opera web browser makes the Web fast and fun, giving you a better web browser experience on any computer. Opera is the fastest browser on Earth, and is completely free.

Updated a few times per week, Opera developer gives you a sneak peek of upcoming features and experiments that might make their way into future products.
</description>
    <projectUrl>http://www.opera.com/developer</projectUrl>
    <tags>browser opera developer</tags>
    <iconUrl>http://cdn.rawgit.com/pine613/chocolatey-packages/master/opera-developer/opera-developer.png</iconUrl>
  </metadata>
  <files>
    <file src="tools\**" target="tools" />
  </files>
</package>

項目の説明

項目 内容
id パッケージインストール時に指定する ID です。かなり厳しい命名規則がありますので、要確認です (CreatePackages: Naming your package)。
title パッケージ名です。正式名称を指定します。
version バージョン番号です。数値のみで構成する必要があります。
authors ソフトウェア の作者です。
owners パッケージ の作者です。
summary 簡単な説明を書きます。
description ソフトウェアの説明を書きます。この説明が Chocolatey のページに表示されます。日本語のソフトウェア でも、英語で説明を書く必要があります。日本語の説明を加える場合は、英語の説明の下に書きます (任意)。ソフトウェアの対応言語が日本語のみな場合、そのことを説明に書く必要があります。
projectUrl ソフトウェアの公式サイトを指定します。
tags タグです。結構バラバラにつけられてます。
iconUrl ソフトウェアのアイコン画像を指定します。GitHub に画像をアップロードして指定するのが、一般的です。
files パッケージに含めるファイルを指定します。

nuspec リファレンス

インストールスクリプトの作成

インストールスクリプトの作成がパッケージ作成の肝となる作業です。

Chocolatey のパッケージは、PowerShell スクリプトを走らせることにより、インストールの自動化を行っています。スクリプトでは、インストールに必要なデータをダウンロードし、インストールするまでを行います。

これは、対象とするソフトウェアによって大きく異なりますので、分類別に別記事にて説明します。インストールスクリプトは、以下のように大雑把に分類できます。

script2.png

ZIP 形式タイプ

ZIP ファイルをダウンロードしてインストール先に展開するタイプです。専用のヘルパー関数が用意されているため、容易に作成可能です。

今後、別記事で作成予定です。

サイレントインストールタイプ

インストーラー (*.exe, *.msi) をダウンロードして、サイレントインストールオプションを付与してインストールするタイプです。大多数のソフトウェアが、このタイプに当てはまります。サイレントインストールオプションさえ分かれば、専用のヘルパー関数が用意されているため、容易に作成可能です。

今後、別記事で作成予定です。

自動化スクリプトタイプ

ZIP 形式でソフトウェアが提供されておらず、サイレントインストールオプションもないタイプです。オリジナルなインストーラーによって提供されているソフトウェアが、これに当てはまります。

このタイプのソフトウェアのインストールスクリプトの作成は、難航を極めることが多いです。本当にサイレントインストールオプションが存在しないか、今一度確認してください。

今後、別記事で作成予定です。

パッケージの公開

パッケージが作成できたら、パッケージの公開作業を行います。

今後、別記事で作成予定です。

パッケージの自動更新

今後、別記事で作成予定です。