Redmineのプラグイン作成のための備忘録と、時々SQLite3
あらすじ
既に履歴つきCSVエクスポートプラグインは存在しているようです。履歴付チケット一覧出力プラグインを書いてみた - すえひろがりっっっっ! ただ、履歴の出方が1履歴毎に列を更新なんですよね。。
No, ... ,履歴 1, ... ,#1の履歴,#2の履歴,#3の履歴 2, ... ,#1の履歴,#2の履歴
今自分が抱えている縛り的にはこう出てほしい。
No, ... ,履歴 1, ... ,"#1の履歴 #2の履歴, #3の履歴" 2, ... ,"#1の履歴, #2の履歴"
吐き出したときにチケット1つの履歴を1セルの中に収めたい。CSVに改行はどうなんだとか1セルに改行しまくるのはどうなんだとか色々ありますがそこは縛りなので。。。
だもんで、これを機会にRedmineのプラグインはどう作るのかを調べてみました。
プラグインのスケルトン作成
まずはプラグインのスケルトンというものを作成する。テンプレートみたいなもの? 以下のコマンドで自動生成してくれます。*2
>ruby script\generate redmine_plugin extendCsv
するといきなりエラー。
!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.
さらに、
LIBMYSQL.dll が見つからなかったため、このアプリケーションを開始できませんでした。…
libmysqlが必要らしい。なんでmysqlなんだろう? SQLite3使うようにしてなかったっけ?
(略)
あーわかった。config/database.ymlがこうなっていた。
production: adapter: sqlite3 database: db/redmine development: adapter: mysql database: redmine_development host: localhost username: root password: encoding: utf8
productionは変えていたけどdevelopmentはデフォルト=MySQLのままだった。開発時はdevelopmentモードを使うようになっているからmysql探し出したのか。変えてみた。
production: adapter: sqlite3 database: db/redmine development: adapter: sqlite3 database: db/redminedev
再度。
>ruby script\generate redmine_plugin extendCsv
C:\redmine-1.0.0>ruby script\generate redmine_plugin extendCsv create vendor/plugins/redmine_extend_csv/app/controllers create vendor/plugins/redmine_extend_csv/app/helpers create vendor/plugins/redmine_extend_csv/app/models create vendor/plugins/redmine_extend_csv/app/views create vendor/plugins/redmine_extend_csv/db/migrate create vendor/plugins/redmine_extend_csv/lib/tasks create vendor/plugins/redmine_extend_csv/assets/images create vendor/plugins/redmine_extend_csv/assets/javascripts create vendor/plugins/redmine_extend_csv/assets/stylesheets create vendor/plugins/redmine_extend_csv/lang create vendor/plugins/redmine_extend_csv/config/locales create vendor/plugins/redmine_extend_csv/test create vendor/plugins/redmine_extend_csv/README.rdoc create vendor/plugins/redmine_extend_csv/init.rb create vendor/plugins/redmine_extend_csv/lang/en.yml create vendor/plugins/redmine_extend_csv/config/locales/en.yml create vendor/plugins/redmine_extend_csv/test/test_helper.rb
vendor/plugins下にスケルトンができた。この「vendor/plugins/今回作成したディレクトリ」というのがプラグインのルートになるようです。
C:\redmine-1.0.0\vendor\plugins>dir 2011/09/06 09:24 <DIR> . 2011/09/06 09:24 <DIR> .. 略 2011/09/06 09:24 <DIR> redmine_extend_csv 略
プラス、自動で頭に「redmine」付加+スネークケースにリネームしてくれている。これが規約か…? とりあえずフォルダ構成等は置いておいて、次の章へ。
init.rbの作成
プラグイン名、作者名などを記述できるが今は特になにも設定せず。後でプラグインを表示さす時に戻って来ます。
ここで一回起動してみる。
>ruby script\server
オプションに-e productionをつけないとdevelopmentモードで起動する。その前に、DBの初期化をしていない場合は初期化を……。(RAILS_ENV=productionを除外)
>rake db:migrate >rake redmine:load_default_data
そしてRedmine起動 -> 管理 -> プラグインを見に行くと…あった!(写真なし)
補足:SQLite3あれこれ
ちょっとSQLite3も使ってみる。コンソールから見ることもないだろうとexeはDLしていなかったので今回初。
- まずexe版SQLite3をDL
- 実行
# Redmineのconfig/database.ymlで定義し作成したDBへ接続 >sqlite3.exe REDMINE_DB_FILE SQLite version 3.7.7.1 2011-06-28 17:39:05 Enter ".help" for instructions Enter SQL statements terminated with a ";"
今回はとりあえず下記の2つのコマンドを覚えて帰る。
.table | テーブル一覧を取得する |
---|---|
pragma_table_info(TABLE) | テーブルのカラム情報を取得する |
- .table
sqlite> .table attachments news auth_sources open_id_authentication_associations boards open_id_authentication_nonces changes projects changesets projects_trackers changesets_issues queries comments repositories custom_fields roles custom_fields_projects schema_migrations custom_fields_trackers settings custom_values time_entries documents tokens enabled_modules trackers enumerations user_preferences groups_users users issue_categories versions issue_relations watchers issue_statuses wiki_content_versions issues wiki_contents journal_details wiki_pages journals wiki_redirects member_roles wikis members workflows
- pragma_table_info(TABLE)
sqlite> pragma table_info(issues); 0|id|INTEGER|1||1 1|tracker_id|integer|1|0|0 2|project_id|integer|1|0|0 3|subject|varchar(255)|1|''|0 4|description|text|0||0 5|due_date|date|0||0 6|category_id|integer|0||0 7|status_id|integer|1|0|0 8|assigned_to_id|integer|0||0 9|priority_id|integer|1|0|0 10|fixed_version_id|integer|0||0 11|author_id|integer|1|0|0 12|lock_version|integer|1|0|0 13|created_on|datetime|0||0 14|updated_on|datetime|0||0 15|start_date|date|0||0 16|done_ratio|integer|1|0|0 17|estimated_hours|float|0||0 18|parent_id|integer|0|NULL|0 19|root_id|integer|0|NULL|0 20|lft|integer|0|NULL|0 21|rgt|integer|0|NULL|0
今回欲しいテーブルはissues, journals, journal_detailsの3つでOKのはずなので*3これをちょっとメモしておく。
sqlite> pragma table_info(issues); 0|id |INTEGER |1| |1 1|tracker_id |integer |1|0 |0 2|project_id |integer |1|0 |0 3|subject |varchar(255)|1|'' |0 4|description |text |0| |0 5|due_date |date |0| |0 6|category_id |integer |0| |0 7|status_id |integer |1|0 |0 8|assigned_to_id |integer |0| |0 9|priority_id |integer |1|0 |0 10|fixed_version_id|integer |0| |0 11|author_id |integer |1|0 |0 12|lock_version |integer |1|0 |0 13|created_on |datetime |0| |0 14|updated_on |datetime |0| |0 15|start_date |date |0| |0 16|done_ratio |integer |1|0 |0 17|estimated_hours |float |0| |0 18|parent_id |integer |0|NULL|0 19|root_id |integer |0|NULL|0 20|lft |integer |0|NULL|0 21|rgt |integer |0|NULL|0 sqlite> pragma table_info(journals); 0|id |INTEGER |1| |1 1|journalized_id |integer |1|0 |0 2|journalized_type|varchar(30) |1|'' |0 3|user_id |integer |1|0 |0 4|notes |text |0| |0 5|created_on |datetime |1| |0 sqlite> pragma table_info(journal_details); 0|id |INTEGER |1| |1 1|journal_id |integer |1|0 |0 2|property |varchar(30) |1|'' |0 3|prop_key |varchar(30) |1|'' |0 4|old_value |varchar(255)|0| |0 5|value |varchar(255)|0| |0
これで準備とデータを見ることはできるようになった! 次からは実際にプラグインの中身に入っていく!