Lazybonesのテンプレートを配布する

TL;DR

Lazybonesのテンプレートを共有するには、つぎの3つの方法があります。

一般に公開できないテンプレートは2番目の方法で共有するのがよいです。 インターネットで公開してよいテンプレートであれば、3番目の方法で共有するのがよいです。

出来上がったサンプルはGitHubに置いてあります。 また、JFrog Bintrayで公開しています。

zipファイルをLazybonesのローカルキャッシュへ置く

Lazybonesのローカルキャッシュは、~/.lazybones/templatesディレクトリーにあります。 そのディレクトリーにビルドしたテンプレート(zipファイル)をコピーします。

ビルドしたテンプレートは、build/packagesディレクトリーに出力されています。 そのディレクトリーにあるzipファイルは <template-name>-template-<template-version>.zip と名前が付いています。

※下記のコマンド実行例はGradleタスクを使って、ビルドしたテンプレートをローカルキャッシュへインストールした結果を表示しています。 Gradleタスクを使ってインストールしたり、公開すると、zipファイル名は <template-name>-<template-version>.zip となるようです。

$ tree -a .lazybones/templates/
.lazybones/templates/
├── gradle-java-app-1.0.0.zip
├── gradle-java-lib-1.0.0.zip
└── lazybones-project-1.1.zip

0 directories, 3 files

ローカルキャッシュにzipファイルをコピーしたら、lazybones list --cachedを実行し、Lazybonesが把握しているキャッシュ済みテンプレートを一覧してみます。

$ lazybones list --cached
Cached templates

    gradle-java-app               1.0.0
    gradle-java-lib               1.0.0
    lazybones-project             1.1

ファイルシステムやHTTPでアクセスできる場所に公開する

Lazybonesは、設定されたリポジトリーからテンプレート名称を探し、該当するテンプレートがあれば、それをプロジェクト生成に用います。 Lazybonesのcreateコマンドにはテンプレート名称を渡せますが、zipファイルのパス(URL)は渡せません。 そこで、テンプレートエイリアス設定を用いて、テンプレート名称とzipファイルのパス(URL)を紐付けます。

適当な場所にzipファイルを置いたら、lazybones config set templates.mappings.<alias> <zip file url>を実行して、テンプレートのエイリアスを設定します。

$ lazybones config set templates.mappings.example https://github.com/ohtomi/lazybones-templates/releases/download/v1.0.0/gradle-java-app-1.0.0.zip

テンプレートのエイリアスを設定したら、lazybones list --cachedを実行し、Lazybonesが把握しているキャッシュ済みテンプレートを一覧してみます。

$ lazybones list --cached
Cached templates

    gradle-java-app               1.0.0
    gradle-java-lib               1.0.0
    lazybones-project             1.1

Available mappings

    example  -> https://github.com/ohtomi/lazybones-templates/releases/download/v1.0.0/gradle-java-app-1.0.0.zip

テンプレートのエイリアスは、設定ファイルに保存されています。

設定ファイルは、~/.lazybones/managed-config.jsonです。

$ cat ~/.lazybones/managed-config.json
{
    "bintrayRepositories": [
        "pledbrook/lazybones-templates"
    ],
    "templates": {
        "mappings": {
            "example": "https://github.com/ohtomi/lazybones-templates/releases/download/v1.0.0/gradle-java-app-1.0.0.zip"
        }
    }
}

JFrog Bintrayに公開する

まず、Bintrayに任意の名前でGenericタイプのリポジトリーを作ります。 つづいて、テンプレートをビルドするためのGradleプロジェクトのビルドスクリプト(build.gradle)にBintrayへ公開するための情報を書き加えます。

# build.gradle
buildscript {
    repositories {
        maven {
            url "http://dl.bintray.com/pledbrook/plugins"
        }
    }

    dependencies {
        # 更新
        classpath "uk.co.cacoethes:lazybones-gradle:1.2.4"
    }
}

apply plugin: "uk.co.cacoethes.lazybones-templates"

lazybones {
    # つぎの3行は更新
    repositoryName = "ohtomi/lazybones-templates"
    repositoryUsername = "ohtomi"
    repositoryApiKey = "<bintray api key>"

    # つぎの3行は新たに加える
    licenses = ["MIT"]
    vcsUrl = "https://github.com/ohtomi/lazybones-templates"
    publish = true
}

LazybonesのGradleプラグインのバージョンを1.2.1から1.2.4へ上げておかないと、vcsUrlへ設定できないので、要注意です。 APIキーは、Bintrayのユーザー設定の編集画面から取得して、repositoryApiKeyへ設定します。 (ビルドスクリプトにパスワードの類をハードコードするのは好ましくないため、ソースコードを公開する場合はgradle.propertiesを使ったほうがよいです)。

ビルドスクリプトを編集したら、テンプレートをBintrayへパブリッシュします。

Gradleプロジェクトのルートディレクトリーへ移動して、gradle publishTemplate<task-name>を実行します。

※<task-name>の部分はテンプレートのディレクトリー名をキャメルケースに変換した値を指定します。 (例: gradle-java-lib -> GradleJavaLib)。

$ gradle --daemon publishTemplateGradleJavaLib
:packageTemplateGradleJavaLib
:publishTemplateGradleJavaLib
Streaming artifact /Users/ohtomi/localrepo/lazybones-templates/build/packages/gradle-java-lib-template-1.0.0.zip to Bintray at URL https://api.bintray.com/content/ohtomi/lazybones-templates/gradle-java-lib-template/1.0.0/gradle-java-lib-template-1.0.0.zip;publish=1

BUILD SUCCESSFUL

Total time: 5.097 secs

パブリッシュしたテンプレートは、http://bintray.com/<user-name>/<repository-name>から確認できます。 正しくパブリッシュされていれば、テンプレート名と同じ名前のパッケージが表示されます。

最後に、パブリッシュしたテンプレートのBintrayリポジトリーをLazybonesに設定し、テンプレートを探す対象に含めます。

設定ファイル(~/.lazybones/managed-config.json)を開いて、bintrayRepositoriesへビルドスクリプト中のrepositoryNameと同じ値を加えます。

$ cat ~/.lazybones/managed-config.json
{
    "bintrayRepositories": [
        "ohtomi/lazybones-templates",
        "pledbrook/lazybones-templates"
    ]
}

リポジトリーを設定したら、lazybones listを実行し、Lazybonesが把握しているリポジトリーごとのテンプレートを一覧してみます。

$ lazybones list
Available templates in ohtomi/lazybones-templates

    gradle-java-lib

Available templates in pledbrook/lazybones-templates

    aem-multimodule-project
    afterburnerfx
    afterburnergfx
    angular-grails
    ..(snip)..

参考情報