プラグインをgem化する

r2904 よりRedmineはgemでインストールしたプラグインを使えるようになりました。

プラグインをgemとしてインストールすることにより1台のサーバに複数のredmineを構築している場合でもそれぞれにプラグインを入れる必要がありません。また、プラグインのバージョンアップも非常に楽です。

gemでインストールしたプラグインをredmineにロードするためにはenvironment.rbに以下のように記述します。

1Rails::Initializer.run do |config|
2...
3config.gem 'プラグイン名'
4end

ではプラグインをgemに変換する方法です。jewelerというツールを使ってgemを作成する方法を説明します。

準備

以下の2つのツールがインストールされている必要があります。

  • jeweler
  • git

gitはリポジトリとしてgitを使っているかどうかにかかわらず必要です。jewelerが内部で使っているためです。

jewelerは以下のコマンドでインストールできます。

gem install jeweler

gitは本家 のサイトなどを参考にプラットフォームにあったものをインストールしてください。

Rakeファイルを作る

gem化したいプラグインのトップフォルダにRakefileがあれば、以下の記述を加えてください。無ければ新規にRakefileを作成してください。

 1#プラグイン名は適宜変えてください。
 2@plugin_name = 'code_review'
 3
 4begin
 5  require 'jeweler'
 6  description = 'TODO'
 7  author = 'TODO'
 8  url = 'TODO'
 9
10  redmine_init_content = File.read('init.rb')
11  if redmine_init_content.match(/description (.*$)/)
12    description = $1.gsub("'",'').gsub('"','')
13  end
14
15  if redmine_init_content.match(/author (.*$)/)
16    author = $1.gsub("'",'').gsub('"','')
17  end
18
19  if redmine_init_content.match(/[^ \t]*url ['"](.*)['"]/)
20    url = $1
21  end
22
23  if redmine_init_content.match(/[^ \t]*url ['"](.*)['"]/)
24    url = $1
25  end
26
27  Jeweler::Tasks.new do |s|
28    s.name = "#{@plugin_name}" 
29    s.summary = "#{description}" 
30    s.homepage = "#{url}" 
31    s.description = "#{description}" 
32    s.authors = ["#{author}"]
33    s.rubyforge_project = "#{@plugin_name}" # TODO
34    s.files =  FileList[
35      "[A-Z]*",
36      "init.rb",
37      "rails/init.rb",
38      "{bin,generators,lib,test,app,assets,config,lang}/**/*",
39      'lib/jeweler/templates/.gitignore'
40    ]
41  end
42  Jeweler::GemcutterTasks.new
43  Jeweler::RubyforgeTasks.new do |rubyforge|
44    rubyforge.doc_task = "rdoc" 
45  end
46
47rescue LoadError
48  puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com" 
49end
50
51task "create-version" do
52  # VERSION
53  File.open('VERSION','w') do |version_file|
54    redmine_init_content = File.read('init.rb')
55    if redmine_init_content.match(/^[ \t]*version (.*$)/)
56      version = $1.gsub("'",'').gsub('"','')
57      version_file.puts version
58    end
59  end
60end
61
62task "create_init_rb_for_gem" do
63  Dir.mkdir("rails") unless File.exist?("rails")
64  FileUtils.cp "init.rb", "rails/init.rb" 
65end
66
67task "build-gem" => ["create-version", "create_init_rb_for_gem", "gemspec:generate", "gemspec:validate", "build"] do
68
69end

そして以下のコマンドを実行してください。

rake build-gem

pkgというディレクトリの下にgemファイルができます。

また、gemをインストールする場合には

rake install

でインストールできます。