2012年7月8日日曜日

Git ポケットリファレンス

もうすぐ出る「Gitポケットリファレンス」という本を著者の一人、岡本隆史さんから献本していただきました。
おかもとさんは『かんばん!~もし女子高生がRedmineで「スクラム」開発をしたら』の著者でもあり、Redmineについていろいろやりとりさせてもらってます。

Gitとは何か、については私のブログを見にくるようなマニアックな方なら既にご存知だと思いますが、いわゆる分散バージョン管理システム(DVCS)の代表格です。

GitはSubversion、CVSと言った旧世代のバージョン管理ツールとは比べ物にならないぐらい高機能であり、それゆえに覚えなければならないコマンドもたくさんあります。本書はリファレンス形式になっているので初心者の方は手元に一冊置いておくと、分からないことがあった場合にはすぐに調べることができるでしょう。また、ある程度Gitを使ったことがある方でもじっくり本書を読むことにより、今まで知らなかった便利なコマンドオプションを発見したりできるかもしれません。

本書は3章構成になっており、第1章はGitのインストール方法および簡単な運用法が書かれています。得にGitにおけるマージ手順はSubversionのそれとは大きく変わっており、最初につまずく点ですのでそこを簡潔に分かりやすくまとめられています。

2章がメインのリファレンスとなっており、本書の大部分のページが2章に割かれています。

そして3章はGitの活用編として「ALMinium」などのツール紹介やGithubの使用方法が書かれています。

このように盛りだくさんな内容なのでこれからGitを使ってみたいと考えている方は購入を検討してみるとよいでしょう。

ここまで書いておいて何ですが、私は普段はMercurial使いであり、実はGitはほんとんど使ったことがありません。なぜMercurialを使っているのかというと、Mercurialの方がGitより優れているから・・・と考えているわけではありません。

  • Redmineのプラグイン開発に使っているNetbeansIDEが当時Mercurialしかサポートしていなかった(今はプラグインで対応しています)
  • プライベートリポジトリが無料で作れるBitbucketが当時はMercurialしかサポートしていなかった(今はGitもサポートしてます)
ということでたまたまMercurial使いになりました。

これを期にGitも勉強してみようかな。

2012年6月16日土曜日

Redmine 2.0.xにプラグインを移植する

Redmine 1.x用プラグインの多くはRedmine 2.xでは動きません。それはRedmine1.xがRails 2.xベースだったのに対し、Redmine 2.xがRails 3.xベースに変わったためです。
今日はRails 1.x用プラグインをRails 2.xに移植する上での注意については以下に詳しくまとまっています。

https://github.com/alminium/alminium/wiki/MigrateToRM20
ここでは上記サイトに載っている以外の注意点について書いてみます。

vendor/pluginsが無い!


Redmine 2.0ではプラグインディレクトリがROOT/vendor/pluginsからROOT/pluginsに変わりました。

formが表示されない!


今まで表示されていた入力フォームが急に表示されなくなったら、以下を行いましょう。
<% form_tag ~ %> を<%= form_tag ~ %>に変える。
Rails3では画面に出力するためには必ず<%= %>を使う必要があります。javascript_tagなども同様です。

HTMLのタグがそのまま表示される!

Rails 2.xで文字列を画面出力する場合、文字列のサニタイジングは行われずそのまま出力されました。サニタイジングしたい場合には <%= h string_for_output %> のように”h”を付ける必要がありました。Rails 3ではクロスサイトスクリプティングなどの脆弱性対策としてデフォルトでサニタイジングが行われるようになりました。サニタイジングせずにHTMLコードを出力したい場合には<%= raw string_for_output %>のようにrawをしていします。

labelled_tabular_form_forが無い


labelled_form_forを使いましょう。

テストについて


pluginでテストコードを書いている人はあまりいないかもしれませんが・・・
テストに関する注意点も書いてみます。実は本体よりこっちが苦労したという・・・

TestHelperが動かない


pluginのtest_helper.rbの中に以下のコードが書かれていると思います。
require File.expand_path(File.dirname(__FILE__) + '/../../../../test/test_helper')
プラグインディレクトリの階層構造が変わったので以下のように’../’を一つ減らす必要があります。
require File.expand_path(File.dirname(__FILE__) + '/../../../test/test_helper')

ObjectDaddyが動かない


ObjectDaddyはテストデータを自動生成してくれるライブラリで、RedmineにはRedmine用のプロジェクトデータやチケットデータなどをObujectDaddyを使って作成するしくみがあり、便利でした。しかしRedmine 2.0ではこれが廃止されました。
Factory Girl とか Machinist とか Fabricationに乗り換えましょう。この場合、テストデータのひな形は自分で作る必要があります。
もしくは古き良き?Fixturesに戻すという手もあります。

rcovが動かない


rubyのカバレッジ測定ツールrcovはruby1.9では動きません。Redmine 2.0はRuby 1.9しかサポートしていないためrcovではなく、simplecovを使いましょう。

plugin用fixturesが使えない


rake test:plugins:setup_plugin_fixtures
が無くなってしまったのでしょうがないから自分でpluginのtest/fixtures/* をROOT/test/fixturesにコピーしています。誰か他に方法があったら教えてください。

plugin用のテストを一括実行できない


rake test:plugins PLUGIN=プラグイン名
が無くなってしまいました。しょうがないからすべてのテストコードをrequireするrubyスクリプトを書いてそれを実行しています。誰か他に方法があったら教えてください。

2012年4月15日日曜日

Redmine 1.4.0のrouteエラーを回避する

Redmine 1.4.0がリリースされました。
http://www.redmine.org/news/62
複数SCM対応やruby1.9対応など、待ち望んでいた人も多いでしょう。しかしこのバージョンには一つ落とし穴があります。多くのプラグインが動かなくなるのです。
Redmine 1.4.0にアップグレード後、起動すると以下のようなエラーが表示されるかもしれません。
ActionController::RoutingError in XXXXX
これは使用しているプラグインがRedmine 1.4.0に対応していない場合に表示されます。具体的にはconfig/routes.rbをプラグインが用意していない場合にこのエラーになります。

1.3.x以前のRedmineでは本体側のconfig/routes.rbにデフォルトのrouteが定義されていたためプラグイン側でroutes.rbを用意する必要はありませんでした。しかし r8162 にてこのデフォルト定義が削除されてしまいました。


Redmine 1.4.0を使いたいがプラグインが使えないのは困る!という場合には、取りあえずこのデフォルトrouteを復活してあげればエラーを回避できます。具体的にはRedmine本体のconfig/routes.rbの最後の方に以下の一行を入れます。
map.connect ':controller/:action/:id'
これでRoutingError は回避できると思います。それ以外のエラーはダメですが。


2012年2月5日日曜日

Redmine Code Review Plugin 0.4.7をリリースしました。

Code Review Plugin 0.4.7 Released.

今回の主な変更点はRedmineのtrunkで実装されたMulitple SCMへの対応です。

Mulitple SCMとは1つのプロジェクトに対し複数のリポジトリを関連付ける機能で、Ruby 1.9対応と並んでRedmine 1.4.0の大きな変更点です。

tunkのRedmineを使っている方はCode Review Pluginをアップグレードしてください。

2012年1月20日金曜日

Netbeans IDE 7.1 にRubyプラグインをインストールする

Netbeans IDE 7.1がリリースされたのでさっそく入れてみましたが、プラグイン一覧の中にRubyがまだありませんでした。これじゃあRedmineのプラグイン開発には使えないなと使用を断念しようと思いましたが、以下にプレビュー版のRubyプラグインをインストールする方法が載っていました。

Workaround for Ruby support on Netbeans 7.1

インストールの手順は以下の通り
  1. 上記ページにzipファイルへのリンクがあるのでダウンロードし、任意の場所に展開します。
  2. Netbeans IDEのツール→プラグイン→ダウンロード済み→プラグインの追加でzipファイルを展開したフォルダを開きます。
  3. zip内にあるすべての*.nbmファイルを選択して「開く」を押します。
  4. あとは質問に答えていけばインストールできます。

image

2011年12月17日土曜日

Redmineのプロジェクト設定画面にタブを追加する

Redmine Advent Calendar jp 2011 17日目です。

Redmineのプラグインを作っていると、Redmine内のプロジェクト毎にプラグイン固有の設定を持ちたくなります。Wiki Extensions や Code ReviewプラグインではRedmineのプロジェクト設定メニューに設定タブを追加しています。

image

実はRedmine本体にはプロジェクト設定画面にタブを追加するしくみは提供されていません。
今回はプロジェクト設定画面にプラグイン独自のタブを追加する方法を解説します。Wiki Extensions プラグインの実際のソースを元に説明したいと思います。

projects_helperを拡張する


プロジェクト設定タブを作っているコードはRedmine本体のapp/helpers/projects_helper.rbの中にあるproject_settings_tabsというメソッドです。この中でタブの定義が配列としてハードコーディングされています。このproject_settings_tabsというメソッドをalias_method_chainを使用して拡張します。
Wiki Extensionsのソースではlib/wiki_extensions_projects_helper_patch.rbにその処理が書かれています。この中のポイントは36行名にある

action = {:name => 'wiki_extensions', 
      :controller => 'wiki_extensions_settings', 
      :action => :show, 
      :partial => 'wiki_extensions_settings/show', 
      :label => :wiki_extensions}

です。
これがタブの定義になります。:nameはタブを識別するためのシンボルです。:controllerと:actionはこのアクションを実行する権限のある人にのみこのタブを表示することになります。表示権限の設定であり、実際の動作には関係ありません。partialにはタブを選択した際に表示されるviewのerbを指定します。labelはタブの表示タイトルです。
このlib/wiki_extensions_projects_helper_patch.rbinit.rb内で読み込む設定を行います。

require 'dispatcher'
Dispatcher.to_prepare :redmine_wiki_extensions do
  require_dependency 'projects_helper'
  unless ProjectsHelper.included_modules.include? WikiExtensionsProjectsHelperPatch
    ProjectsHelper.send(:include, WikiExtensionsProjectsHelperPatch)
  end 
end

viewを作る



lib/wiki_extensions_projects_helper_patch.rbのactionでpartialに設定した wiki_extensions_settings/show に対応するerbを作ります。ファイルは app/views/wiki_extensions_settings/_show.html.erb です。partialなのでファイル名の頭に_(アンダースコア)が付くので気を付けてください。


中身は普通のformです。プラグインの設定入力フォームを作ってください。


controllerを作る



最後にformのsubmitに対応するcontrollerのactionを書きます。Wiki Extensionsの場合はapp/controllers/wiki_extensions_settings_controller.rbのupdateというメソッドです。通常のRailsプログラミングのようにformで入力されたデータをDBにセーブした後、最後に以下の行を追加します。

redirect_to :controller => 'projects', :action => "settings", :id => @project, :tab => 'wiki_extensions'


これで再度プロジェクト設定画面に戻ります。

以上で簡単な説明は終わりです。是非チャレンジしてみてください。

2011年12月2日金曜日

Redmine 1.3.0の個人的な注目機能

Redmine Advent Calendar jp 2011 2日目です。
昨日のchangeworldさんの記事で補足。昔のCode Review Pluginはdevelopmentモードじゃ動かなかったけど、最新版は動きますよ。config.cache_classes がtrueでもfalseでもいけます(多分)。
さて、Redmineの久々のメジャーバージョンアップである1.3.0のリリースが近づいています。12/2 0:35現在すべてのチケットがクローズされています
image
このAdvent Calendarが終了するまでにはリリースされるのではないでしょうか。
1.3.0で注目されている機能には@naitohさんの力作であるwikiのPDF出力やリポジトリブラウザでのリビジョングラフ表示、Rest APIの強化などありますが、個人的にうれしいのはWikiのsingle section editです。これはWikiを編集する際にページ全体ではなく特定の章のみ編集する機能です。
image
編集したい章のタイトル右にある鉛筆アイコンをクリックするとその章のみ編集できます。長いページを編集する際には大変便利。まあ、普通のwikiはだいたいこの機能を持っているのでやっとRedmineにも実装されたというところですが。
とまあ、楽しみな1.3.0ですが、問題もありまして、リポジトリブラウザのリビジョングラフ機能がCode Review Pluginとバッティングすることが判っています。1.3.0対応のCode Review Pluginは近々リリース予定ですのでお待ちください。
では次の方お願いします。