プロジェクト

全般

プロフィール

GuideSkeleton » 履歴 » バージョン 3

Mitsuyoshi Yoshida, 2011/06/26 00:21

1 1 Mitsuyoshi Yoshida
h1. プラグインのスケルトン作成
2
3
前置きが長くなりましたが、いよいよプラグインの実装を行っていきましょう。
4
5
6
h2. プラグイン名前を決める
7
8
最初にプラグインの名前を決める必要があります。
9
サンプルなので何でもいいのですが、標準的なものということで *Standard* にしましょう。
10
今回のチュートリアルでは簡単なものですが、このサンプルに今後フィルタや 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
$ ruby script/generate redmine_plugin プラグイン名
26
</pre>
27
28
プラグイン名を Standard にしたので、実際のコマンドは以下のようになります。
29
<pre>
30
$ ruby script/generate redmine_plugin Standard
31
</pre>
32
33
実行結果
34
<pre>
35
      create  vendor/plugins/redmine_standard/app/controllers
36
      create  vendor/plugins/redmine_standard/app/helpers
37
      create  vendor/plugins/redmine_standard/app/models
38
      create  vendor/plugins/redmine_standard/app/views
39
      create  vendor/plugins/redmine_standard/db/migrate
40
      create  vendor/plugins/redmine_standard/lib/tasks
41
      create  vendor/plugins/redmine_standard/assets/images
42
      create  vendor/plugins/redmine_standard/assets/javascripts
43
      create  vendor/plugins/redmine_standard/assets/stylesheets
44
      create  vendor/plugins/redmine_standard/lang
45
      create  vendor/plugins/redmine_standard/config/locales
46
      create  vendor/plugins/redmine_standard/test
47
      create  vendor/plugins/redmine_standard/README.rdoc
48
      create  vendor/plugins/redmine_standard/init.rb
49
      create  vendor/plugins/redmine_standard/lang/en.yml
50
      create  vendor/plugins/redmine_standard/config/locales/en.yml
51
      create  vendor/plugins/redmine_standard/test/test_helper.rb
52
</pre>
53
54
コマンドを実行すると @vender/plugins/redmine_standard@ 以下にスケルトンが生成されます。
55
Rails の概要のところでも説明しましたが、 @vender/plugins@ 以下の各ディレクトリがプラグインとして扱われます。ここにスケルトンが生成されたことになります。
56
57 3 Mitsuyoshi Yoshida
あと プラグインの名称の先頭に redmine_ と付いてますが、これは必ずプラグイン名の先頭に付くものです。命名規則として必須のものではないですが、わざわざ変えるのも面倒なのでそのままにしておきましょう。
58 1 Mitsuyoshi Yoshida
59
ファイル名にする場合は Pascal ケースをスネークケースにするという決まりがありました。
60
そのため Standard と大文字で指定していたにもかかわらず、小文字に変換されています。もし StandardPlugin という名前にしていた場合には redmine_standard_plugin という名前になっています。また、プラグインの名前の指定で最初から standard_plugin というようにアンダーバー区切りで名前を指定してもかまいません。
61
62
63
h2. プラグインのディレクトリ構成
64
65
生成されたプラグインの構成をみていきましょう。
66
<pre>
67
init.rb
68
app/
69
├ controllers/
70
├ helpers/
71
├ models/
72
└ views/
73
lib/
74
db/migrate/
75
assets/
76
├ images
77
├ javascripts
78
└ stylesheets
79
lang/
80
config/locales
81
test/
82
README.rdoc
83
</pre>
84
85
*init.rb* はプラグインで一番最初にロードされるファイルです。ここにプラグインの基本情報を書いていきます。これは[[GuideInitRb|次章]]で説明します。
86
87
*app* にはプラグインの主な中身を記述することになります。 *controllers*, *views*, *models* のそれぞれがそのまま MVC 構造の対応する部分を格納するディレクトリです。helpers はライブラリのようによく使われる共通的な処理を格納する場所になります。helpers を除いた 3 つの部分がプラグインの主要な部分ですので、これから一つづつ説明していきます。
88
89
lib も共通処理のファイルを置くところです。プラグイン中で未定義のクラス(FooBar)を使うと、スネークケースに変更して(foo_bar.rb)、そのファイルをロードしますが、その検索場所がこの lib です。
90
lib も app/helpers も同じような用途のものを格納しますが、大きな違いは development モードでの動作が変わってきます。 development モードでは redmine の再起動なしで変更が反映されますが、それは app 以下のものだけです。 init.rb や lib 以下の変更は redmine の再起動が必要となります。
91
だったら、全部 app/helpers に書けば、ということになるかと思いますが、 helpers は app の他の部分からしか呼び出せないので、 init.rb から呼び出したいものは lib に書く必要があります(私がやり方を知らないだけかもしれませんが)。また、自分で作成したクラスなども lib に書きます。
92
93
*db/migrate/* はデータベースの操作する処理を記述します。ここは model とあわせて説明します。
94
95
assets/ にはそれぞれプラグイン独自に作成した 画像、 JavaScript, スタイルシート(CSS) をそれぞれ格納します。こちらの使用はちょっと応用的な内容ですので、 [[TipsOriginalImage|プラグイン Tips]] の説明を見てください。
96
97
*config/locales* は国際化のためにそれぞれの言語ごとのラベルやメッセージなどをおきます。こちらは [[GuideI18n|国際化]] のところで説明します。
98
Rails の国際化の方法は途中で変わりました。lang は前の国際化で利用されたもので、今は使う必要がないので、削除してかまいません(多分)。
99
100
test/ には、テストコードを記述します。 test も重要ですが、なくても作れるのでテストについては説明は書いてません。単に私がよく知らないので書けないというだけですが。
101
102
README.rdoc にはプラグインのインストール方法などの説明を書いておきます。よくオープンソースのアプリケーションには readme.txt のようなファイルがあると思いますが、そういったものになります。
103
特に規約としてファイル名や中身が決まっているものではないので、なんでもいいですし、なくてもかまいません(書いておくべきですが)。
104
rdoc というのは wiki のようなフォーマットで書く ruby のドキュメントで、これを元に html ファイルを生成できたりします。ただ、 gem のように rdoc にしていれば、プラグイン追加時に勝手に html を作ってくれたりといったことはしてくれないので、特に rdoc で書く必要はありません。私は最近 README.rwiki という名前で Redmine の wiki 形式で書いてサイトなどにすぐ貼り付けられるようにしています。
105
106
---
107
108
| [[プラグイン開発ガイド|^]] | [[GuideSampleSpec|<<]] | [[GuideInitRb|>>]] |