プラグインをgem化する

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

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

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

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

ではプラグインを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 
 4 begin
 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 
47 rescue 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" 
49 end
50 
51 task "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
60 end
61 
62 task "create_init_rb_for_gem" do
63   Dir.mkdir("rails") unless File.exist?("rails")
64   FileUtils.cp "init.rb", "rails/init.rb" 
65 end
66 
67 task "build-gem" => ["create-version", "create_init_rb_for_gem", "gemspec:generate", "gemspec:validate", "build"] do
68 
69 end

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

rake build-gem

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

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

rake install

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