Webコンサルタントの愚痴とアジャイル,生産性向上,Trac,オープンソースなどの与太話
先日作ったプラグインだが、IEだと動かなかった。普段IEなんて使わないので、全く気づかなかったよorz
ということで、修正した。ダウンロード
前回は、JAVAScriptで、window.onsubmitの時にチェックを行っていたんだけど、IEがこのイベントを通ってくれない(何かと競合?)ので、明示的にDOMからsubmitするフォームを取得して、そいつに対して、onsubmitを割り当てることで解決。
なお、新規登録はこれでOKだったが、チケット更新については、更新用フォームにidがついていないので、そのままだとうまく行かない。
ちゅうことで、テンプレートのticket.csについて、
<?cs if:trac.acl.TICKET_CHGPROP || trac.acl.TICKET_APPEND ?>の後の
<form action=”<?cs var:ticket.href ?>#preview” method=”post”>
について
<form action=”<?cs var:ticket.href ?>#preview” method=”post” id=”newticket”>
のように変更すると、更新時もチェックできるようになる。
なんだかんだで意外と面倒。
なお、改めて、Firefox、Opera、Safari、GoogleChrome、IEで動作確認をした限りは問題なさそう。
今日考えたことのまとめ
CakePHPは、DBの設計がまとも&CRUDが多いようなシステムは簡単。
CIは自由度が高いから、フレームワークをあまり意識しなくても色々できる。
さぁ、どっちを選択するか考えよう。
昨日作ったプラグインだけど、新規登録の時にしかチェックしなくて良いなら、こんな面倒なことはしなくても、他の実現手段がある。
実現手段としては、プロジェクト内のtemplatesディレクトリにある、site_newticket.csに直接、チェック用のJAVAScriptを記述すれば良い。
この方法だと、チケットの編集の時はダメなんだけどね。
一応それぞれのテンプレートがどういう動きをするかメモにしておく。
図示すると下記のようになる。赤い箇所が差し込まれた箇所になる。
前回のエントリを受けて、とりあえず初めてプラグイン書いてみた。
機能:予めtrac.iniに指定した条件に従って、チケットの新規作成および更新時に、入力フィールドのチェックをJavaScriptで行う。
ダウンロードはこちら(validation-0.0.1.zip)から。対象Tracのバージョン:0.10系のみ。
#不要なファイルが混じっていてインストールに失敗する不具合を修正しました(11/11)
インストールはpython setup.py installとし、trac.iniで、validator.* = enabledに設定するだけ。
trac.iniの設定の例は以下の通り。
入力チェックは10個まで設定可能で、rule_0からrule_9までが有効。利用しない場合は未設定で可。
rule_xは、実際の判定条件で、正しい入力値の状態をJavaScriptで記入する。
message_xは、判定条件に合致しなかった場合のメッセージ本文をそのまま記入する。
precond_xは、実際の判定条件に入る前の事前条件をJavaScriptで記入する。(主にOwnerとかで利用する)
個々の設定値の妥当性はチェックしてないので、この設定を間違えるとTracがエラー起こしたりするよ。
※なお、初めてプラグイン作ったので、作り方があっているのかも良く分からんし、設計思想が正しいのかも分からん。もっと言えば、作った機能はそもそもTracに存在するとかいう可能性もある。そういう前提でご利用は自己責任で。
会社でTracを使っているんだけど、そこで困るのが、人によってチケットの書き方に差がある、という点。
タスクの粒度の違いについては、まぁ仕方がないのだが、担当者を設定しなかったり、種別や優先度を設定しなかったりすると、そのタスクが闇に埋もれてしまう可能性があってちょっと嫌だ。
んで、Tracのプラグインで、予め指定しておいたフィールドは、少なくとも必須チェックくらいはして、未入力だったらチケット登録できなくする、というようなものを探してみたのだが、気に入るのが無かった。
気にいらない奴はBasicFieldValidationPatch。何が気に入らないって、入力不足の場合、次画面で、未入力箇所があるよーーーん、とだけ表示して、ブラウザバックを強要され、戻ると、今入れた内容が消えているんだよ。ブラウザの設定の兼ね合いもあるけど、これは使いにくい。
ということで以下のようなプラグインを作ろうかと。
Trac0.11系であれば、ITemplateStreamFilterを使えばなんとかなりそう。Trac0.10系であれば、IRequestFilterを使うと思われる。
どうも認証付のProxy経由だとTracのサーバにアクセスができない模様。
.NETでソースが公開されているGPLソフトウェアなので、ちょいとソースみてパッチ書いて送ろうかな。
Trac ExplorerはSubversionのWindows用クライアントであるTortoiseSVN(トータスSVN)のアドオンとして動作するツールで、Subversionでのコミットログの記述の際に、関連するTracのチケット番号を挿入したりすることが出来る。
(このツールはVisual Studioとも連携できるらしい)
普通は手動で、コミットログを書いて、fixedとかrefとか書いているんだけど、「あれ?あのチケット何番だっけ?」みたいなことも往々にして発生するので、このツールは非常に便利だ。
動作には、.NET Framework2.0が必要。また当然ながら、TracおよびTortoiseSVNも必要になる。TortoiseSVNのバージョンはHook Scripts機能が利用できる1.5.4以上のバージョンにする。
また、TracとのデータのやりとりはXMLRPCを利用するので、Trac側には、XML_RPCプラグインを導入し、設定しておくこと。
XMLRPCについては、過去の記事参照
Trac Explorerはhttp://tracexplorer.devjavu.com/から入手できる。
入手したらセットアップを起動する。
次に、ワーキングコピーディレクトリに移動し、右クリックしてTortoseSVNを選択し、Settingsを選択。
ここでHook Scripts以下のIssue Tracker Integrationを選択し(以下の画面)、Addボタンを押下する。

ここで、Working Copy Pathを設定し、Parametersは空白のままOKを押す

さらにTracの連携先の設定画面が出てくるので「Add New Trac Server」ボタンを押下し、接続先のTracを指定する。

TracのURLの指定。認証している場合は認証情報も設定する。

その後はNextボタンを連打していき、最後に自動表示するチケットの種類を選択する。

Trac Explorer上から自動補完するキーワードを設定する。

というようなことを終わらせると、Clipboardに設定がコピーされるので、それを、空白にしているParametersの箇所に張り付ける。これで設定が完了する。
実際の画面は以下のようになり、予め指定したWorking Copy上でコミットしようとすると、画面右側に「Choose Ticket」という項目が追加されており、これをクリックすると、以下のようなチケット連携画面が表示されるので、一番左列のプルダウンを選択し、設定するキーワードを指定すると良い。

そうすると、コミットログ入力画面に自動で下記のように設定される。

いちいちWebブラウザを切り替えて色々検索したりする必要もなく、生産性はあがるだろうと思われる。
前回のエントリにて、discypusさんから、
試してませんが、shift_jisではなく、cp932を指定すると解決するかも知れません。
http://www.python.jp/doc/2.4/lib/standard-encodings.html
というご指摘をいただいたので、早速試してみた。
Tracのバージョンは0.10.4。pythonはまだ古くて2.3なんだけど、結果としてはうまくいった。
/usr/lib/python2.x/site-packages/trac/versioncontrol/web_ui/にある、changeset.pyの600行目
を以下にすれば良い。
う~ん。すばらしい。
#でも機種依存文字をファイル名に付けるのはやめようね
Tracではchangesetをzipに固めてダウンロードできる機能があるんだけど、このzipの中に日本語ファイル名が含まれると文字化けする。
仕様書や手順書のようなものには普通日本語ファイル名を付けるだろうから、ということで直してみた。
Tracのバージョンは0.10.4
/usr/lib/python2.x/site-packages/trac/versioncontrol/web_ui/にある、changeset.pyが修正対象だ。
600行目
の箇所でzipにファイルを含める際の文字コードをUTF-8にしているので、この箇所を以下の通りに変更する
この修正が完了したら、同じフォルダにあるchangeset.pycを削除した上で、apacheを再起動(restartもしくはstop,start)する。
以上で対応は完了だ。
ちなみに、Tracで日本語ファイル名を扱う際の注意事項として、日本語ファイル名に機種依存文字を入れないこと。
入れると、こんな感じのエラーになる。(当たり前だが、文字コード変換が出来ない)
(u2460はEnclosed Alphanumericsで丸囲み数字だね)
Tracを実案件ほぼ全てに使っていて、顧客にも公開しているケースが多々あるのだが、その際に顧客から出た要望。
チケットの追加、変更で全部メールを送信しているのだが、TracWysiwygプラグインを使って編集した場合にあまり気にせず[[BR]]が大量に含まれ、それがそのままメールされてしまう。
これかなり醜いメールが飛ぶので、カスタマイズして、[[BR]]はCRLFに変換するようにしてみた。
対象モジュールは/usr/lib/python2.3/site-packages/trac/notification.pyである。
対象箇所は290行目からのメール送信部分など。
まず頭のほうで、
を追加した上で、
メール送信用のテンプレートを読み込んでレンダリング箇所の直後に変換処理を追加すれば良い。
の直後に
だ。これだけで大分見栄えも違う。
なお、作業完了後、apacheの再起動が必要だ。(mod_python利用の場合)
あとは、このソースを見る限り、テンプレートの読み込みによってメール本文を作っている。
デザインを変えたかったら、/usr/share/trac/templates/にあるticket_notify_email.csをカスタマイズすれば良い。
但し、メールの頭にある段組部分は、/usr/lib/python2.3/site-packages/trac/ticket/notification.pyの中で頑張って作られており、その箇所をカスタマイズしたい場合は、さらにモジュールのカスタマイズが必要になる。
日記 PHP オープンソース Linux Trac Perl wordpress フリーソフト 自宅サーバ phpMyFaq Plugin Delphi 書評 apache eclipse Subversion Firefox セキュリティ アジャイル プラグイン mojavi Ruby Ajax/Web2.0 CakePHP Zope フレームワーク サーバ 文字化け scuttle OpenVZ 自宅 phpBB 仮想化 翻訳・日本語化 CMS ApacheDS LDAP 生産性向上 hacks CodeIgniter Agile・生産性向上 レビュー XAMPP Excel SBM 言語ファイル 修正 Ajax taskfreak mod_security ダウンロード HTML::FillInForm 情報共有 格安 レンタル アンケート API PhpScheduleIt 翻訳