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


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

- [Qiita: windowsの開発環境は一瞬で整うwith chocolatey](http://qiita.com/himinato/items/11f4dc9a23afebbc242c)
- [Qiita: Windows用パッケージ管理ソフトChocolateyは神](http://qiita.com/hachi8833/items/5f7412e3daddddc60574)

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

## 対象とする読者

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

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

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

![flow2.png](https://qiita-image-store.s3.amazonaws.com/0/51394/b7ab9c61-9d72-3cd5-02f9-1df4386a9a84.png)


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

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

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

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

## サンプル
以下は [Opera Developer](https://chocolatey.org/packages/opera-developer) パッケージで用いている nuspec ファイルを、説明用に簡略化したものです。

```xml
<?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](https://github.com/chocolatey/chocolatey/wiki/CreatePackages#naming-your-package))。|
|title|パッケージ名です。正式名称を指定します。|
|version|バージョン番号です。数値のみで構成する必要があります。|
|authors|**ソフトウェア** の作者です。|
|owners|**パッケージ** の作者です。|
|summary|簡単な説明を書きます。|
|description|ソフトウェアの説明を書きます。この説明が Chocolatey のページに表示されます。**日本語のソフトウェア** でも、英語で説明を書く必要があります。日本語の説明を加える場合は、英語の説明の下に書きます (任意)。ソフトウェアの対応言語が日本語のみな場合、そのことを説明に書く必要があります。|
|projectUrl|ソフトウェアの公式サイトを指定します。|
|tags|タグです。結構バラバラにつけられてます。|
|iconUrl|ソフトウェアのアイコン画像を指定します。GitHub に画像をアップロードして指定するのが、一般的です。|
|files|パッケージに含めるファイルを指定します。|

## nuspec リファレンス
- [Nuspec Reference](http://docs.nuget.org/create/nuspec-reference)


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

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

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

![script2.png](https://qiita-image-store.s3.amazonaws.com/0/51394/ec2fd4f6-5f51-1ad7-2fd9-afb7a65e084c.png)


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

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

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

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

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

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

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

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

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

# パッケージの自動更新
今後、別記事で作成予定です。