プロジェクト

全般

プロフィール

プラグインをgem化する » 履歴 » バージョン 1

Haru Iida, 2009/10/24 08:04

1 1 Haru Iida
h1. プラグインをgem化する
2
3
"r2904":http://www.redmine.org/projects/redmine/repository/revisions/2904 よりRedmineはgemでインストールしたプラグインを使えるようになりました。
4
5
プラグインをgemとしてインストールすることにより1台のサーバに複数のredmineを構築している場合でもそれぞれにプラグインを入れる必要がありません。また、プラグインのバージョンアップも非常に楽です。
6
7
gemでインストールしたプラグインをredmineにロードするためにはenvironment.rbに以下のように記述します。
8
9
<pre><code class="Ruby">
10
Rails::Initializer.run do |config|
11
...
12
config.gem 'プラグイン名'
13
end
14
</code></pre>
15
16
ではプラグインをgemに変換する方法です。jewelerというツールを使ってgemを作成する方法を説明します。
17
18
h2. 準備
19
20
以下の2つのツールがインストールされている必要があります。
21
22
* jeweler
23
* git
24
25
gitはリポジトリとしてgitを使っているかどうかにかかわらず必要です。jewelerが内部で使っているためです。
26
27
jewelerは以下のコマンドでインストールできます。
28
29
<pre>
30
gem install jeweler
31
</pre>
32
33
gitは"本家":http://git-scm.com/ のサイトなどを参考にプラットフォームにあったものをインストールしてください。
34
35
h2. Rakeファイルを作る
36
37
gem化したいプラグインのトップフォルダにRakefileがあれば、以下の記述を加えてください。無ければ新規にRakefileを作成してください。
38
39
<pre><code class="Ruby">
40
#プラグイン名は適宜変えてください。
41
@plugin_name = 'code_review'
42
43
begin
44
  require 'jeweler'
45
  description = 'TODO'
46
  author = 'TODO'
47
  url = 'TODO'
48
49
  redmine_init_content = File.read('init.rb')
50
  if redmine_init_content.match(/description (.*$)/)
51
    description = $1.gsub("'",'').gsub('"','')
52
  end
53
54
  if redmine_init_content.match(/author (.*$)/)
55
    author = $1.gsub("'",'').gsub('"','')
56
  end
57
58
  if redmine_init_content.match(/[^ \t]*url ['"](.*)['"]/)
59
    url = $1
60
  end
61
62
  if redmine_init_content.match(/[^ \t]*url ['"](.*)['"]/)
63
    url = $1
64
  end
65
66
  Jeweler::Tasks.new do |s|
67
    s.name = "#{@plugin_name}"
68
    s.summary = "#{description}"
69
    s.homepage = "#{url}"
70
    s.description = "#{description}"
71
    s.authors = ["#{author}"]
72
    s.rubyforge_project = "#{@plugin_name}" # TODO
73
    s.files =  FileList[
74
      "[A-Z]*",
75
      "init.rb",
76
      "rails/init.rb",
77
      "{bin,generators,lib,test,app,assets,config,lang}/**/*",
78
      'lib/jeweler/templates/.gitignore'
79
    ]
80
  end
81
  Jeweler::GemcutterTasks.new
82
  Jeweler::RubyforgeTasks.new do |rubyforge|
83
    rubyforge.doc_task = "rdoc"
84
  end
85
86
rescue LoadError
87
  puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
88
end
89
90
task "create-version" do
91
  # VERSION
92
  File.open('VERSION','w') do |version_file|
93
    redmine_init_content = File.read('init.rb')
94
    if redmine_init_content.match(/^[ \t]*version (.*$)/)
95
      version = $1.gsub("'",'').gsub('"','')
96
      version_file.puts version
97
    end
98
  end
99
end
100
101
task "create_init_rb_for_gem" do
102
  Dir.mkdir("rails") unless File.exist?("rails")
103
  FileUtils.cp "init.rb", "rails/init.rb"
104
end
105
106
task "build-gem" => ["create-version", "create_init_rb_for_gem", "gemspec:generate", "gemspec:validate", "build"] do
107
108
end
109
</code></pre>
110
111
そして以下のコマンドを実行してください。
112
113
<pre>
114
rake build-gem
115
</pre>
116
117
pkgというディレクトリの下にgemファイルができます。
118
119
また、gemをインストールする場合には
120
121
<pre>
122
rake install
123
</pre>
124
125
でインストールできます。