[Ruby][Redmine][SQLite3][Windows][備忘録]Redmineのプラグイン作成のための備忘録と、時々SQLite3
あらすじ
今あると幸せになれるもの
チケットのCSVエクスポート機能。ただし、履歴つきで。これがあるといわゆるバグとかPJ課題の管理がRedmineで一元化できExcelの呪縛から解き放てられる……
既に履歴つきCSVエクスポートプラグインは存在しているようです。http://d.hatena.ne.jp/suer/20101003/1286120294:title ただ、履歴の出方が1履歴毎に列を更新なんですよね。。
No, ... ,履歴
1, ... ,#1の履歴,#2の履歴,#3の履歴
2, ... ,#1の履歴,#2の履歴
今自分が抱えている縛り的にはこう出てほしい。
No, ... ,履歴
1, ... ,"#1の履歴
#2の履歴,
#3の履歴"
2, ... ,"#1の履歴,
#2の履歴"
吐き出したときにチケット1つの履歴を1セルの中に収めたい。CSVに改行はどうなんだとか1セルに改行しまくるのはどうなんだとか色々ありますがそこは縛りなので。。。
だもんで、これを機会にRedmineのプラグインはどう作るのかを調べてみました。
参考サイト
- http://www.r-labs.org/projects/r-labs/wiki/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E9%96%8B%E7%99%BA%E3%82%AC%E3%82%A4%E3%83%89:title
- http://gihyo.jp/dev/serial/01/ruby/0038:title
環境
- WindowsXP
- Redmine 1.0.0[1]
- Ruby 1.8.7
- Rails 2.3.5
- Rack 1.0.1
- SQLite3 バージョン失念
プラグインのスケルトン作成
まずはプラグインのスケルトンというものを作成する。テンプレートみたいなもの? 以下のコマンドで自動生成してくれます。[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
これで準備とデータを見ることはできるようになった! 次からは実際にプラグインの中身に入っていく!
[1] [http://redmine.jp/guide/RedmineInstall/:title] に準拠。
[2] 途中でコマンドプロンプトからConsole2というフリーソフトに切り替えたのでパスの区切りが\だったり/だったりしてます。
[3] チケットの履歴がjournalテーブルで管理されているのを探すのに手間取ったんだけど、どう探すのがクールなんだろう。チケット画面遷移したときのログで探して辿り着いたんだけど。