Trac」カテゴリーアーカイブ

Trac 1.0.3, 1.1.3 リリース (リリースノート日本語訳)

2015/01/18 に Trac 1.0.3, 1.1.3 がリリースされました。0.12.7 のリリースは修正がほとんどないため 1.0.4 と合わせて 2015/03/02 にリリースされることになりました。

ダウンロードは trac.edgewall.org/wiki/TracDownloadpypi.python.org/pypi/Trac からできるようになっています。

リリースノートに上げられている主要な変更の日本語訳をここに載せておきます。

Trac 1.0.3 Released

Trac 1.0.2 は2014年10月にリリースされ、その後、40のバグフィックスと改善を行いました。

このリリースの主要なものです。

  • チケットに添付を追加した際に通知が送られるようになりました (#2259)
  • 自動プレビュー時にスタイルシートとスクリプトが読み込まれるようになりました。それにより、自動プレビュー上で Wiki プロセッサが追加された場合に正しくハイライトされ (#10470)、ワークフローグラフが表示されるようになっています (#10674)
  • マージチェンジセットが最初の親チェンジセットとの差分を表示するようになりました (#10740)
  • Pygments 2.0 をサポートしました (#11796)
  • initenv TracAdmin コマンド後での補完処理のエラーを修正しました (#11797)
  • Environment.get_known_users をキャッシュすることで、認証済みユーザが1,000を超えるようなシステムでのパフォーマンスを向上させました (#11868)
  • wheel パッケージによる配布メタデータをサポートし、About ページで表示されるようになりました (#11877)

1.0.3 の詳細なリリースノートは以下のページにあります。

Trac 1.1.3 Released

このリリースの主要なものです。

  • チケットワークフローの作成時のステータスを設定できるようになり、チケット登録ページにアクションが表示されるようになりました (#2045)
  • プラグインで拡張可能な新しい通知システムが導入されました (#3517)
  • 通知システムに対する個人設定パネルが追加になりました (#4056)
  • Wiki ページの各バージョンに対するコメントが WIKI_ADMIN 権限にて変更可能になりました (#6573)
  • チケットフォームの「コメント追加」セクションと「変更者」フィールドの配置を改善しました (#10207)
  • Wiki ページの削除時に添付ファイルも削除になる場合、警告を出すようになりました (#11542)
  • SilverCity、Enscript、PhpRenderer によりシンタックスハイライトのサポートを削除しました (#11795)
  • 個人設定にある「日付と時間」パネルと「言語」パネルを「ローカライズ」バネルに統合しました (#11813)
  • ワークフローの set_owner 属性でグループと権限が使えるようになりました (#11839)

ここにあげたものに加えて、1.0.3 に対する修正を含んでいます。

詳細なリリースノートは以下にあります。

Trac 0.12.6.ja0.1, 1.0.2.ja0.1 の公開 (Trac 0.12.6, 1.0.2 ベース)

おおまえです。Trac 日本語版 (trac-ja) の 0.12.6, 1.0.2 相当のものを作成しましたので以下のリポジトリで公開することにしました。

https://github.com/jun66j5/trac-ja

これまでインタアクトさんが Trac-ja を公開されていたのですが、最近は 0.12.4 1.0 以降そのままでしたので、公開されている最新のもの Trac-0.12.4.ja1, Trac-1.0.ja1をベースに Trac 本体の 0.12.4 以降 0.12.6 まで、1.0 以降 1.0.2 までの修正内容をマージする形で作成しました。

ダウンロードは以下の URL からできます。

インストールは以下のように pip または easy_install を使ってインストールすることができます。

$ pip uninstall Trac  # すでにインストールしている場合
$ pip install https://github.com/jun66j5/trac-ja/archive/trac-0.12.6ja0.1.zip
$ easy_install https://github.com/jun66j5/trac-ja/archive/trac-0.12.6ja0.1.zip

このソースで何か問題を発見した場合は https://github.com/jun66j5/trac-ja/issues/new までお願いします。

Trac 0.12.6, 1.0.2, 1.1.2 リリース (リリースノート日本語訳)

おおまえです。先日 2014-10-26 に Trac 0.12.6, 1.0.2, 1.1.2 がリリースされました。ダウンロードは http://trac.edgewall.org/wiki/TracDownloadpypi.python.org/pypi/Trac からできるようになっています。

個々のリリースで 0.12.6 56チケット1.0.2 182チケット1.1.2 42チケットがクローズされました。以前までのリリースに比べて 1.0.2 のチケット数がかなり多いのですが、主に活動するコミッタがどんなに小さいものでもチケット登録する…というが大きい気がします。

それはさておき、リリースノートに記載されている主要な変更に上げられている部分の日本語訳をここに載せます。また、このリリースでバグを見つけたり改善案などがあれば、http://trac.edgewall.org/メーリングリスト などに報告いただけると大変ありがたいです。


Trac 0.12.6 Released

Trac 0.12.6 は、56チケットに対する修正を含んでいます。以下が主要なものです。

  • Subversion での注釈履歴 (svn blame) が以下の場合に失敗:
    URL エンコード文字がある場合 (#10386)、
    Windows でリポジトリパスのドライブレターを小文字にしている場合 (#10514)、
    Subversion 1.7 でパスに ASCII 以外の文字がある場合 (#11167)
  • svn:mergeinfo 属性に対する browser ページ (#8459) と changeset ページ (#11219) での表示パフォーマンスを改善
  • 大量のカスタムフィールドがあるとカスタムクエリが失敗 (#11140)
  • Zip ファイルのタイムスタンプにタイムゾーン情報がなかった (#11162)
  • TracLinks の log リンクがリビジョンの範囲指定によってはエラーや間違う (#11308, #11346)
  • IE 11 でチケットページでの textarea 中のテキストが正常に折り返されない (#11376)
  • チケットの CSV ダウンロードで担当者フィールドにあるメールアドレスがそのままになる (#11594)
  • Distribute 0.6.29 以降でロケールデータが egg ファイルに含まれない (#11640)
  • マイルストーン削除時に添付ファイルが削除されない (#11672)
  • Babel 1.0 以降のサポートを追加 (#11258, #11345)
  • ConfigObj 5.0 以降のサポートを追加 (#11498)

チケットの詳細は以下にあります。


Trac 1.0.2 Released

Trac 1.0.1 を2013年2月にリリースし、その後、200以上の修正と小さな改善を行いました。

このリリースの主要なものです:

  • Subversion でのキーワード展開と改行コードの置換をリポジトリブラウザでのファイルの参照時とダウンロード時に行うようになりました (#717)
  • チケット通知メールを変更前の担当者、Cc にも送信 (#2311)
  • マイルストーンの名前変更、削除、別マイルストーンへの変更時に、チケットの変更履歴を更新 (#4582, #5658)
  • Authz permissions policy に対して多くの修正を行いました:
    リポジトリブラウザ (#10961, #11646)、Wiki ページ (#8976, #11067)、管理ページ (#11069)、レポートページ (#11176)
  • 二重にフォームを submit できないようになりました (#10138)
  • permission_policies のどれかがロードできない場合に ConfigurationError を上げるようになりました。また、その際にシステム内部の情報やインストールのエラーを漏らさないようにしました (#10285)
  • Wiki ツールバーを設定で無効にできるようになりました (#10837)
  • 管理ページの見出し部分にテーブル中のエントリ数を表示 (#11027)
  • すべてのページで「取り消し」ボタンを一貫性があるように配置 (#11076)
  • 変更ページの表示時に、テキスト要素にフォーカスを移すようにしました (#11084)
  • 並べて編集モードの際に、「編集の衝突」と「マージ」の警告メッセージが常に見えるようにしました (#11102)
  • レポートページ (#11106, #11664) とチケットページ (#11471) のレイアウトを改善
  • Genshi 0.7 に対する互換性 (#11218)
  • Git リポジトリのサポートに対する多くの修正

このリリースは 0.12.6 に対する修正を含んでいます。チケットの詳細は以下にあります。


Trac 1.1.2 Released

主要な変更:

  • Python 2.5 サポートを削除しました。Python 2.5 に対して互換性のない変更がなされ Trac は Python 2.5 では動作しないようになりました (#11600)
  • チケットワークフローに may_set_owner アクションが追加されました。set_owner に似ていますが、担当者を現在のユーザではなくデフォルトの担当者にします (#10018)
  • [ticket] optional_fields オプションが追加されました。任意入力にしたいドロップダウン (セレクト型) のフィールドを指定します。(値を空にできるようになります) (#10772)
  • WikiProcessor コードブロックで行番号の表示とハイライトできるようになりました (#10834)
  • 「デフォルトハンドラ」を個人設定で設定できるようになり、全ユーザのデフォルトを管理ページの「基本設定」で設定できるようになりました (#11519)
  • 読み込み専用の Wiki ページには、ファイル添付できないようになりました (#11244)
  • 管理ページのテーブルに「全選択」チェックボックスを追加 (#10994)
  • 項目が選択する必要がある場合には、submit ボタンを無効にするようにしました (#11056)
  • 管理ページの権限にユーザやグループ間で権限をコピーするフォームを追加しました (#11099)
  • [milestone] default_retarget_to オプションが追加になりました。このオプションは、マイルストーンの削除や完了時に変更先のマイルストーンを指定することができます。また、マイルストーン管理ページからでも設定することができます (#10010)
  • マイルストーンにチケットがない場合には、マイルストーンを再割当てするドロップダウンを表示しないようになりました (#11366)
  • 「デフォルトをクリア」ボタンで管理ページからチケットシステムのデフォルト値をクリアできるようになりました (例えば default_milestone, default_version) (#10772, #11300)
  • TitleIndex マクロは Wiki ページで使用された場合に、相対パスのプレフィックスをサポートするようになりました (#11455)
  • CommitTicketUpdater は #comment:N#comment:description もチケットの参照として解釈するようになります (#11622)
  • マイルストーン管理ページにあるチケットカラムにクエリリンクが用意されるようになりました。そのリンクからは、そのマイルストーンを持つチケットをステータスでグループ化してクエリが実行されます (#11661)
  • Authz policy はレポート一覧ページに対してリソースID -1 を使ってアクセス制限を行うようになります (#11697)

ここにあげたものに加えて、1.0.2 と 0.12.6 に対する修正を含んでいます。

詳細なリリースノートは以下にあります。


Tracプラグイン: WikiGanttChartPlugin – Wiki書式によるシンプルなガントチャート(インストール編)

こんにちは、新しい Trac プラグイン「WikiGanttChartPlugin」をリリースいたしました。
このプラグインを使うと、Trac の Wiki やマイルストーン(ロードマップ画面)でガントチャートを作成することが出来ます。

動作しているスクリーンショット(イメージ図)は以下です。
WikiGanttChartPlugin
WikiGanttChartPlugin - Red
WikiGanttChartPlugin - Gray

このエントリーではインストールと初期設定について見ていきます。

1. easy_install でインストール

easy_install に http://trac-hacks.org/svn/wikiganttchartplugin/0.12 を渡せばインストールできます。
svn コマンドがインストールされていない環境では、easy_install は利用できません。その場合、Trac-hacks の WikiGanttChartPluginから手動でダウンロードを行い、ダウンロードしたディレクトリを easy_install に渡すようにしてください。

$ easy_install http://trac-hacks.org/svn/wikiganttchartplugin/0.12

TracLightning(Windows)の例:

C:\TracLight\bin>easy_install http://trac-hacks.org/svn/wikiganttchartplugin/0.12
Downloading http://trac-hacks.org/svn/wikiganttchartplugin/0.12
Doing subversion checkout from http://trac-hacks.org/svn/wikiganttchartplugin/0.12 to c:\docume~1\admini~1.ope\locals~1\
temp\easy_install-eif74t\0.12
Processing 0.12
Running setup.py -q bdist_egg --dist-dir c:\docume~1\admini~1.ope\locals~1\temp\easy_install-eif74t\0.12\egg-dist-tmp-cj
zevi
error: wikiganttchart/locale\ja\LC_MESSAGES\wikiganttchart.po:37: unknown named placeholder u'lineno'
wikiganttchartplugin 0.12.0.1 is already the active version in easy-install.pth

Installed c:\traclight\python\lib\site-packages\wikiganttchartplugin-0.12.0.1-py2.6.egg
Processing dependencies for wikiganttchartplugin==0.12.0.1
Finished processing dependencies for wikiganttchartplugin==0.12.0.1
C:\TracLight\bin>

2. trac.ini でプラグインを有効にする

有効にしたい Trac プロジェクトの conf/trac.ini でこのプラグインを有効にします。(inherit-file で共有している trac.ini でも可能)

# trac.ini
[components]
wikiganttchart.* = enabled

WikiGanttChartPlugin は trac.ini でオプション設定が可能です。
オプション設定は必須ではありません。

[wikiganttchart]
ticket.default_type = 
ticket.due_date = due_date
ticket.due_date.format = YYYY-MM-dd
ticket.start_date = due_date
ticket.start_date.format = YYYY-MM-dd

この後、Trac を動作させている Web サーバを再起動させます。
ガントチャートの開始日[start_date]と終了日[due_date]を指定していますが必須ではありません。このフィールドはガントチャートのタスクからチケット作成するときに自動連動させることが出来ます。

利用するためにチケットのカスタムフィールドに「start_date」「due_date」2項目追加する必要があります。

例示した設定の場合

  • start_date ・・・作業開始日
  • due_date ・・・作業終了日

を設定しています。利用する前にカスタムフィールドを追加してください。
これでインストール作業は終了です。

利用方法の説明についてはこちらのエントリー「[trac][tracpath] Wiki書式によるシンプルなガントチャート(使い方)」を参照してください。

3. 設定の説明とカスタマイズ

WikiGanttChartPlugin は trac.ini で日付の書式や開始日、終了日に利用するカスタムフィールド名をカスタマイズすることができます。
WikiGanttChartPlugin の設定項目の説明と利用方法についてまとめています。

WikiGanttChartPlugin 設定一覧
解説 設定例
ticket.default_type ガントチャートのタスクからチケット作成したとき、チケットの分類を定義します。(新規チケットを作成する際の使用するデフォルトの分類)
ticket.default_type = バグ
ticket.due_date ガントチャートのタスクからチケット作成したとき、チケットの終了日を設定します。(必須ではありません)チケットの期限日フィールドの名前を指定します。
ticket.due_date = due_date
ticket.due_date.formatn チケットの期限日フィールドの書式。「YYYY/MM/dd」「YYYY-MM-dd」「YYYY.MM.dd」の3種類が設定可能です。
ticket.due_date.format = YYYY/MM/dd
ticket.start_date ガントチャートのタスクからチケット作成したとき、チケットの開始日を設定します。(必須ではありません)チケットの開始日フィールドの名前を指定します。
ticket.start_date = start_date
ticket.start_date.format チケットの開始日フィールドの書式。「YYYY/MM/dd」「YYYY-MM-dd」「YYYY.MM.dd」の3種類が設定可能です。
ticket.start_date.format = YYYY/MM/dd

Tracプラグイン: チケットの項目をグループ化し配置をカスタマイズする

おおまえです。

以前に「チケットフィールドのグループ化とチケットフィールドをカスタマイズする」という記事で紹介した機能ですが、この機能を誰でも利用できるように Trac プラグインにして trac-hacks.org に登録しました。

» TracTicketFieldsLayoutPlugin – Trac Hacks – Plugins Macros etc.

Trac 0.12 以降 (TracLightning 含む) であれば機能するように、また、既存の DateFieldPlugin のようなチケットの項目を拡張するようなプラグインに干渉しないように実装しています。

機能の詳細などは、↑の記事でご確認ください。

newticket ticket admin

開発初期から公開前提で作っていましたが、公開しようとしていたらしばらく trac-hacks.org に新しいプラグインが登録できない状態になっていたり…で気づいたらかなり時間が経ってしまいました。

バグやアイデアなどあれば @tracpathtrac-hacks.org のチケットなどで教えてもらえるとありがたいです。

xlwt ライブラリで大きな Excel ファイルを作成する

おおまえです。今日は雪がよく降りますね。また大雪らしいです。前の大雪では傘を持ちながらこけて傘の骨を少し曲げてしまいました。今回は気をつけたいところです。

さて Python で Excel ファイルを作成する際に使うライブラリとして xlwt (*.xls) と openpyxl (*.xlsx) が知られていると思います。

ここで xlwt ライブラリ使う際には注意しなければいけないことが1つあります。それは大量の行/セルを設定する場合は、適当なタイミング(1000行ごとに一回とか)で Worksheet.flush_row_data() を呼んでメモリ上のデータをファイルに書き出すようにすることです。

設定されるデータ量が決まっている場合はよいですが、予測できない場合はこれをやっておかないと大量のメモリを消費させられてひどい目に遭います。(というか遭いました)

このメソッドは http://www.python-excel.org/ から辿れる xlwt document のページには見当たりませんが、The Tutorial python-excel.pdf の Page.21 には以下にような記載にて注意がなされています。

If a large number of rows have been written to a Worksheet and memory usage is becoming a problem, the flush_row_data method may be called on the Worksheet. Once called, any rows flushed cannot be accessed or modified.

It is recommended that flush_row_datais called for every 1000 or so rows of a normal size that are written to an xlwt.Workbook. If the rows are huge, that number should be reduced.

そういうことで xlwt を使っている ExcelDownloadPlugin でその状況になってしまいましたので http://trac-hacks.org/changeset/13423 にて修正しています。同じ問題に遭遇したひとはプラグインを更新してみてください。

JavaScript での IE11 判定を User-Agent を見ずに行う

おおまえです。ふたたび IE11 の話です。タイトルの結論は一番最後にあります。

Internet Explorer 11 がリリースされてしばらく経ち、少しずつ IE11 からアクセスされるようになってきました。Compatibility changes in IE11 (Windows) を見ると User-Agent 文字列の変更はともかくとして IE 独自の API を排除し、いまどきのブラウザが持つような標準に沿った API をちゃんと実装してきている…ようです。

モダンブラウザ用のコードでそのまま動くのを期待していいよね…? と思いたいところですが TracWysiwygPlugin で実際に試してみると、他のブラウザには普通ある API がなくてこの機能が動かないよ…? とかあるわけです。TracWysiwygPlugin IE11 対応を行った際に気づいた点を上げてみました。

1. document.execCommmand(‘inserthtml’) が使えない

WYSIWYG エディタ機能を持つライブラリは、この document.execCommand を用いて色々な文字装飾や任意の HTML を追加したりします。ボールドや斜体などは定義済みのコマンドがあり、第1引数に "bold", "italic" を渡すと選択文字列がコマンドに応じた処理を行ってくれます。また、定義済みのコマンドにないような機能は基本的に "inserthtml" コマンドを用いて必要な HTML を追加します。

しかし IE にはこの inserthtml がありません。IE11 でもありません。他のブラウザにはあるんですが…。また、よくないことに処理しできないコマンドを document.execCommand に渡しても例外などは上げてこないため「エラーになったから代替用のメソッドを…」みたいなことができません。

2. document.selection.createRange ができない

inserthtml の代替手段が document.selection.createRange から TextRange を作成し pasteHTML を呼び出す方法です。これにより inserthtml とほぼ同等のことが実現できます。こんなふうになっています。

TracWysiwyg.prototype._msieInsertHTML = function(html) {
    this.contentWindow.focus();
    var selection = this.contentDocument.selection;
    var range = selection.createRange();
    range.pasteHTML(html.replace(/\t/g, "	"));
    range.collapse(false);
    range.select();
};

しかし IE11 では document.selection がなくなり window.getSelection を使えとあるのですが、このオブジェクトには pasteHTML メソッドがありません。

仕方がないので、以下のようにして Range.createContextualFragmentRange.insertNode を用いて実装するようにしています。もともとこのコードは inserthtml を持たない Safari 2 のために書いたコードです。(消さなくてよかった…)

TracWysiwyg.prototype._fragmentInsertHTML = function(html) {
    var range = this.getNativeSelectionRange();
    if (range) {
        var d = this.contentDocument;
        var tmp = d.createRange();
        tmp.setStart(d.body, 0);
        tmp.setEnd(d.body, 0);
        var fragment = tmp.createContextualFragment(html);
        range.deleteContents();
        range.insertNode(fragment);
        range.detach();
        tmp.detach();
    }
};

3. Selection.containsNode がない

このメソッドは選択領域が指定の要素を内包しているかどうかの判定をしてくれるメソッドです。これが他のブラウザにはあるんですが IE11 にはありません。仕方ないので、これは Range.compareBoundaryPoints を使って、Range オブジェクトと対象の要素の前後関係を順番に調べるというような処理に書き換えました。


ということで、ここまでを踏まえれば User-Agent を見ないで「IE11 判定できそう」と思ったので書いてみました。

    if (!window.TextRange) {
         alert('non IE browser');
    }
    else if (!window.getSelection) {
        alert('IE 8 or early');
    }
    else if (!document.selection) {
        alert('IE 11');
    }
    else {
        alert('IE 9 or 10');
    }

実際にこのコードそのものを使っているわけではないので、何か抜けがあるような気がします。

IE11 のとき Trac チケット詳細の textarea が折り返されない…の解消方法

Internet Explorer 11 で Trac のチケット作成フォームにある textarea の中身が折り返されないようになっている、という内容が2週間ほど前に trac-dev メーリングリストに投稿がありました。確認してみると確かに折り返されません。(Trac 0.12, 1.0 も同様)

IE11

どうも IE11 は以下のような HTML があるときに textarea が上位の要素にある white-space を参照するようです。IE10 以前や他のブラウザはこのような挙動になりません。

<div style="whtie-space:nowrap">
  <div>
    <textarea></textarea>
  </div>
</div>

とりあえずの対処として trac/htdocs/css/ticket.css に以下のパッチを当てると解消できます。

diff --git a/trac/htdocs/css/ticket.css b/trac/htdocs/css/ticket.css
index 7e18e20..5f873c1 100644
--- a/trac/htdocs/css/ticket.css
+++ b/trac/htdocs/css/ticket.css
@@ -214,6 +214,7 @@ form .field div.trac-resizable { width: 100% }

 #propertyform { margin-bottom: 2em; }
 #properties { white-space: nowrap; line-height: 160%; padding: .5em }
+#properties textarea { white-space: pre-wrap }
 #properties table { border-spacing: 0; width: 100%; padding: 0 .5em }
 #properties table th {
  padding: .4em;

IE11 (パッチ後)

もし、この対処で何か問題を見つけた場合、http://trac.edgewall.org/ticket/11376 まで報告、もしくはここにコメントをしてもらえるとありがたいです。

Wiki による開発チームの情報共有

 

社内の情報共有を推進して、ナレッジを蓄積する。社員の暗黙知を形式知にする。

 

と言われるような固い話題では無く、開発チームという比較的小さなグループでの情報共有に Wiki を活用している話をしたいと思う。

 
WikiというシステムはWikipediaが有名である。ブラウザを使ってだれでも簡単に文書編集ができるウェブアプリケーションである。
このWikiシステムは小さな開発チームの情報共有にとても有効に機能する。
tracpath 開発チームでは、開発初期からWikiを使って情報共有をしてきた。

 
Wikiを導入するに当たって、当社の場合は厳密な運用ルール、記載ルールなどほとんど設けなかった。利用者が好きなように使ってイイですよ。というスタンスでかるく始めた。

 

  唯一のルールと言えるものは、プロジェクトに関するすべての情報 ー技術情報、仕様、ミーティング議事、顧客の声、Excel/PowerPoint/PDFなどーをすべて一元化すること、である。

 
この唯一のルールは今も変わらず続いている。
このルールのおかげで何度も助けられたことがあるのでプロジェクトが始まるタイミングで開発チームにとっての情報集約できる場を用意しておくことの重要性がみんなに理解された。

 

ブログのように一般に受け入れられるのは難しく、だれでもすぐに使えるというツールではないのかもしれない。
Wikiのメリットである、Wiki記法を使えるようになって初めて文書作成の簡単さ ー文章の内容だけに集中して書くことが出来る、Word や PowerPoint の書式や改ページと戦う必要が無いー が理解できると思う。
 
最近のWikiシステムは必ずWYSIWYG機能というワープロのように文書を作成出来るツールも提供されているが、Wikiのよさを殺している気がしておすすめしない。やはり、Wiki記法によるスピーディな文書作成がWikiシステムの重要な点だと考えている。
 

 
プロジェクトに関するその時の情報をできるだけ記録しておくことで、数ヶ月後に発生するトラブルに対処できるかもしれないし、将来のメンバーにとって役に立つかもしれない。
このような気持ちで文書を残すことを考えると、Wikiシステムは最適だと思う。

 
当社のプロジェクト管理サービス「tracpath」は Wiki 機能を標準提供しているので、Wikiのみをフルで使いたいと言う場合、無料で利用することが出来るのでオススメです。

 
過去のブログで具体的な機能を紹介しているのでそちらも参考にしてください。
Tracマクロによる仕事に使える厳選マクロと使い方
 
 

Tracプラグイン: TracpathThemeでTracのデザインをtracpath風にする

Tracのデザインをtracpath風に変更するTracpathThemeプラグインを紹介します。このプラグインを使うと、Tracのデフォルトのデザインがtracpath風のデザインに変わります。

https://github.com/opengroove/tracpaththeme

デフォルト状態のtrac TracpathThemeの導入後
デフォルトテーマ Tracparth_blueテーマ
blueテーマ

TracpathThemeプラグインでは上のblueテーマ以外にも以下の4色のテーマも使用できるようになります。

Tracpath_purpleテーマ Tracpath_yellowテーマ Tracpath_greenテーマ Tracpath_redテーマ
purpleテーマ yellowテーマ greenテーマ redテーマ

それではTracpathThemeプラグインの導入方法を説明します。なお、TracpathThemeプラグインはTrac 0.12かTrac 1.0で使用することができます。

1. ThemeEngineプラグインのインストールと有効化

TracLightningテーマ
TracLightning3.2.0
のMac風デザイン

Tracでデザインを変更する方法はいくつかありますが、一番簡単なのはThemeEngineプラグインを使うことでしょう。このプラグインを使用することで、複数のテーマを自由に切り替えてデザインを変更することができるようになります。Trac Lightningでは最初からインストールされていて、デフォルトのMac風のデザインにはこのプラグイン用に作成されたテーマが使用されています。TracpathThemeプラグインThemeEngineプラグイン用のテーマとして作成されています。

インストール

ThemeEngineプラグインeasy_installpipを使って簡単にインストールできます。なお、Trac Lightningには最初からインストールされているのでこの手順は不要です。

> easy_install --always-unzip TracThemeEngine

あるいは

> pip install TracThemeEngine

有効化

インストールが完了したらtrac-adminコマンドでプラグインを有効にします。この手順もTrac Lightningでは不要です。

> trac-admin /path/to/projenv config set components "themeengine.*" enabled

2. TracpathThemeプラグインのインストールと有効化

インストール

TracpathThemeプラグインeasy_installあるいはpipを使ってインストールします。

> easy_install --always-unzip https://github.com/opengroove/tracpaththeme/archive/trunk.zip

あるいは

> pip install https://github.com/opengroove/tracpaththeme/archive/trunk.zip

有効化

インストールが完了したらこれも同様にtrac-adminコマンドで有効化します。

> trac-admin /path/to/projenv config set components "tracpaththeme.*" enabled

3. Tracの再起動


上で行った設定をTracに認識させるために、Tracを動作させているWebサーバを再起動します。

4. テーマを切り替える


テーマの切り替えは管理コンソールから行います。最初はこんな状態になっています。

テーマ切り替え
中央の大きな空白部分には本来はデフォルトテーマのスクリーンショット画像が表示されるのですが、残念ながらこのブログの執筆時点のThemeEngineプラグインではインストールスクリプトに問題があってスクリーンショット画像がインストールされません。このままでも動作に支障はないのですがスクリーンショット画像を手動でインストールすることもできます。

まずソースコードリポジトリからスクリーンショット画像の画像ファイルを入手します。

> svn export http://trac-hacks.org/svn/themeengineplugin/trunk/themeengine/htdocs/default_screenshot.png

このファイルをThemeEngineプラグインのインストール先にあるhtdocsディレクトリにコピーします。

> python -c "from os.path import join, dirname; from shutil import move; import themeengine; move('default_screenshot.png', join(dirname(themeengine.__file__), 'htdocs'))"

左右の矢印ボタンでテーマを切り替えてUse this themeボタンでテーマを選択します。Tracpath_blueテーマを選択すると以下のようになります。

テーマ切り替え後

選択した結果はすぐに画面に反映されます。

このテーマ切り替え機能ですが、これまた残念ながらThemeEngineプラグインに問題があって、選択したテーマによってはその後のテーマ切り替え時に全てのテーマが表示されない場合があります。もしそのような状態になってしまった場合にはいったん別のテーマを選択することで改善するので試してみて下さい。

あるいは、インストールしたThemeEngineプラグインのソースコードを修正することで解決することもできます。

まず、修正が必要なファイルの場所をを見つけます。

> python -c 'import themeengine; import os.path; print os.path.dirname(themeengine.__file__)'

上記のコマンドで見つけたディレクトリにあるadmin.pyファイルの63行目を以下のように変更します。

    data['themeengine']['current_index'] = index
  
    data['themeengine']['info'] = data['themeengine']['info'][index:] + data['themeengine']['info'][:index];
    data['themeengine']['current_index'] = 0
  

修正後に、Tracを動作させているWebサーバを再起動してください。なお上記の修正方法はThemeEngineプラグインのバージョン2.2.0を対象にしています。