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|>>]] | |