GitBucketプラグインを作ってみよう

GitBucketはプラグインシステムを備えており、プラグインで様々な機能を拡張することができます。このエントリではプラグイン開発の最初の一歩について説明します。内容的には以前GitBucket Newsで書いた以下の英語のエントリと同じものです。

gitbucket.github.io

プロジェクトの作成

まず初めに以下の内容のbuild.sbtScalaプロジェクトを作成します(gitbucketの依存関係は最新のバージョンにあわせて変更してください)。

name := "gitbucket-helloworld-plugin"

organization := "io.github.gitbucket"

version := "1.0.0"

scalaVersion := "2.11.8"

libraryDependencies ++= Seq(
  "io.github.gitbucket" %% "gitbucket"         % "4.3.0" % "provided",
  "javax.servlet"        % "javax.servlet-api" % "3.1.0" % "provided"
)

プラグインの定義

/src/main/scalaに以下のような内容でPluginクラスを作成します。このクラスではプラグインメタデータと、どのように拡張するかを定義します。ここではcontrollersという拡張ポイントを使用して/helloworldというパスに新たなコントローラを追加しています。

import io.github.gitbucket.solidbase.model.Version
import io.github.gitbucket.helloworld.controller.HelloWorldController

class Plugin extends gitbucket.core.plugin.Plugin {
  override val pluginId: String = "helloworld"
  override val pluginName: String = "HelloWorld Plugin"
  override val description: String = "First example of GitBucket plug-in"
  override val versions: List[Version] = List(new Version("1.0.0"))

  override val controllers = Seq(
    "/helloworld" -> new HelloWorldController()
  )
}

コントローラの実装

Pluginクラスで定義したHelloWorldControllerを実装します。コントローラはgitbucket.core.controller.ControllerBaseを継承し、/src/main/io/github/gitbucket/helloworld/controllerディレクトリに作成します。これは一般的なScalatraのコントローラです。

package io.github.gitbucket.helloworld.controller

import gitbucket.core.controller.ControllerBase

class HelloWorldController extends ControllerBase {

  get("/helloworld"){
    "Hello World!"
  }

}

このサンプルではHelloWorldControllerは文字列をレスポンスとして返却します。もちろんTwirlテンプレートを使用してHTMLを返却したり、JSONを返却したりすることもできます。

プラグインのインストールと実行

sbt packageを実行すると/target/scala-2.11/gitbucket-helloworld-plugin_2.11-1.0.0.jarが生成されるのでこのjarファイルを~/.gitbucket/pluginsディレクトリ(ディレクトリが存在しない場合は手で作成してください)にコピーします。

GitBucketを起動し、http://localhost:8080/helloworldにブラウザでアクセスするとHello World!と表示されるはずです。

次のステップ

このエントリで説明したプロジェクトは以下にありますので、これを雛形にGitBucketプラグインの開発を始めることができます。

github.com

また、gitbucket community pluginsには実用的なgitBucketプラグインのリストがあります。GitBucketプラグインの開発方法の詳細を知りたい場合はこれらのプラグインソースコードを参照してみてください。