プロジェクト

全般

プロフィール

GuideSkeleton » 履歴 » バージョン 6

NAITOH Jun, 2013/03/06 22:31
Redmine 2.x対応の記載に更新

1 1 Mitsuyoshi Yoshida
h1. プラグインのスケルトン作成
2
3
前置きが長くなりましたが、いよいよプラグインの実装を行っていきましょう。
4
5
6
h2. プラグイン名前を決める
7
8
最初にプラグインの名前を決める必要があります。
9 6 NAITOH Jun
サンプルなので何でもいいのですが、標準的なものということで *Redmine Standard* にしましょう。
10 1 Mitsuyoshi Yoshida
今回のチュートリアルでは簡単なものですが、このサンプルに今後フィルタや wiki などの機能を付けてもっと標準的なものにしたいと考えています。それでこの標準サンプルを少し変更するだけでちょっとしたプラグインが作れるようにできたらいいなと思っています。
11
12
13
h2. スケルトン
14
15 2 Mitsuyoshi Yoshida
Rails はフレームワークでその枠組みにあわせてアプリを作成する必要があります。 Rails ではこの枠組みにあったアプリを作りやすいようにスケルトン(雛形)を生成する機能があります。生成したスケルトンの中身を書き込んで実装することによってフレームワークにあったものとなります。
16 1 Mitsuyoshi Yoshida
17
Redmine でも同様にプラグイン用のスケルトンを生成する機能があります。
18
19
20
h2. スケルトン作成コマンドの実行
21
22
それでは実際にスケルトンを生成してみましょう。
23
Redmine のトップディレクトリに移動して、生成コマンドを実行します。
24
<pre>
25 6 NAITOH Jun
$ ruby script/rails redmine_plugin プラグイン名
26 1 Mitsuyoshi Yoshida
</pre>
27
28 6 NAITOH Jun
プラグイン名を Redmine Standard にしたので、実際のコマンドは以下のようになります。
29 1 Mitsuyoshi Yoshida
<pre>
30 6 NAITOH Jun
$ ruby script/rails generate redmine_plugin redmine_standard
31 1 Mitsuyoshi Yoshida
</pre>
32
33 6 NAITOH Jun
ファイル名にする場合は Pascal ケースをスネークケースにするという決まりがありました。
34
そのため Redmine Standard の大文字で形式を redmine_standard と小文字形式で指定しています。
35
RedmineStandardと大文字のまま指定も可能ですが、後で述べるコントローラのスケルトン生成時にファイル名がスネークケースにならない場合があるので推奨しません。
36
37 1 Mitsuyoshi Yoshida
実行結果
38
<pre>
39 6 NAITOH Jun
      create  plugins/redmine_standard/app
40
      create  plugins/redmine_standard/app/controllers
41
      create  plugins/redmine_standard/app/helpers
42
      create  plugins/redmine_standard/app/models
43
      create  plugins/redmine_standard/app/views
44
      create  plugins/redmine_standard/db/migrate
45
      create  plugins/redmine_standard/lib/tasks
46
      create  plugins/redmine_standard/assets/images
47
      create  plugins/redmine_standard/assets/javascripts
48
      create  plugins/redmine_standard/assets/stylesheets
49
      create  plugins/redmine_standard/config/locales
50
      create  plugins/redmine_standard/test
51
      create  plugins/redmine_standard/test/fixtures
52
      create  plugins/redmine_standard/test/unit
53
      create  plugins/redmine_standard/test/functional
54
      create  plugins/redmine_standard/test/integration
55
      create  plugins/redmine_standard/README.rdoc
56
      create  plugins/redmine_standard/init.rb
57
      create  plugins/redmine_standard/config/routes.rb
58
      create  plugins/redmine_standard/config/locales/en.yml
59
      create  plugins/redmine_standard/test/test_helper.rb
60 1 Mitsuyoshi Yoshida
</pre>
61
62 6 NAITOH Jun
コマンドを実行すると @plugins/redmine_standard@ 以下にスケルトンが生成されます。
63
Rails の概要のところでも説明しましたが、 @plugins@ 以下の各ディレクトリがプラグインとして扱われます。ここにスケルトンが生成されたことになります。
64 1 Mitsuyoshi Yoshida
65 6 NAITOH Jun
あと プラグインの名称を先頭に redmine_ と付く形の名称にしましたが、これは Redmine 1.x のプラグインスケルトン生成ルールを踏襲した形にしてあります。命名規則として必須のものではありません。
66 1 Mitsuyoshi Yoshida
67
68
h2. プラグインのディレクトリ構成
69
70
生成されたプラグインの構成をみていきましょう。
71
<pre>
72
init.rb
73
app/
74
├ controllers/
75
├ helpers/
76
├ models/
77
└ views/
78
db/migrate/
79 6 NAITOH Jun
lib/
80 1 Mitsuyoshi Yoshida
assets/
81 6 NAITOH Jun
├ images/
82
├ javascripts/
83
└ stylesheets/
84
config
85
├ locales/
86
└ routes.rb
87 1 Mitsuyoshi Yoshida
test/
88 6 NAITOH Jun
├ fixtures/
89
├ unit/
90
├ functional/
91
├ integration/
92
└ test_helper.rb
93 1 Mitsuyoshi Yoshida
README.rdoc
94
</pre>
95
96
*init.rb* はプラグインで一番最初にロードされるファイルです。ここにプラグインの基本情報を書いていきます。これは[[GuideInitRb|次章]]で説明します。
97
98
*app* にはプラグインの主な中身を記述することになります。 *controllers*, *views*, *models* のそれぞれがそのまま MVC 構造の対応する部分を格納するディレクトリです。helpers はライブラリのようによく使われる共通的な処理を格納する場所になります。helpers を除いた 3 つの部分がプラグインの主要な部分ですので、これから一つづつ説明していきます。
99 5 Mitsuyoshi Yoshida
100 1 Mitsuyoshi Yoshida
lib も共通処理のファイルを置くところです。プラグイン中で未定義のクラス(FooBar)を使うと、スネークケースに変更して(foo_bar.rb)、そのファイルをロードしますが、その検索場所がこの lib です。
101
lib も app/helpers も同じような用途のものを格納しますが、大きな違いは development モードでの動作が変わってきます。 development モードでは redmine の再起動なしで変更が反映されますが、それは app 以下のものだけです。 init.rb や lib 以下の変更は redmine の再起動が必要となります。
102
だったら、全部 app/helpers に書けば、ということになるかと思いますが、 helpers は app の他の部分からしか呼び出せないので、 init.rb から呼び出したいものは lib に書く必要があります(私がやり方を知らないだけかもしれませんが)。また、自分で作成したクラスなども lib に書きます。
103
(init.rb から呼び出しができるようにする方法がありました。 "プラグイン開発記 - init.rb から Helper メソッドの呼び出し":http://yohshiy.blog.fc2.com/blog-entry-13.html )
104
105
*db/migrate/* はデータベースの操作する処理を記述します。ここは model とあわせて説明します。
106
107
assets/ にはそれぞれプラグイン独自に作成した 画像、 JavaScript, スタイルシート(CSS) をそれぞれ格納します。こちらの使用はちょっと応用的な内容ですので、 [[TipsOriginalImage|プラグイン Tips]] の説明を見てください。
108
109
*config/locales* は国際化のためにそれぞれの言語ごとのラベルやメッセージなどをおきます。こちらは [[GuideI18n|国際化]] のところで説明します。
110
111 4 Mitsuyoshi Yoshida
test/ には、テストコードを記述します。 test も重要ですが、なくても作れるのでテストについては説明は書いてません。単に私がよく知らないので書けないというだけですが。
112
113
README.rdoc にはプラグインのインストール方法などの説明を書いておきます。よくオープンソースのアプリケーションには readme.txt のようなファイルがあると思いますが、そういったものになります。
114
rdoc というのは wiki のようなフォーマットで書く ruby のドキュメントで、これを元に html ファイルを生成できたりします。また、Rails のトップディレクトリで以下のコマンド実行すると各プラグインのソースコードを解析してドキュメントを生成してくれます。 Doxygen の Ruby 版のようなものです。
115
116
<pre>
117
$ rake doc:plugins
118 1 Mitsuyoshi Yoshida
</pre>
119
120
しかし、rdoc で書いていなければ動かないということはないので、気にせず自由に書いてもかまわないと思います。私も最近は README.rwiki という名前で wiki 形式で書いて、それをサイトなどにすぐ貼り付けられるようにしています。
121
122
---
123
124
| [[プラグイン開発ガイド|^]] | [[GuideSampleSpec|<<]] | [[GuideInitRb|>>]] |