= Trac リンク = #TracLinks
[[TracGuideToc]]

TracLinks は Trac の基礎となる機能です。というのも、 TracLinks によってシステムのエントリ間 - チケット、レポート、チェンジセット、Wikiページ、マイルストーン、ソースファイルなど - で簡単にハイパーリンクすることができるからです。

TracLinks は通常、 '''type:id''' (''id'' はアイテムの
番号や名前、パス) の形式で記述しますが、よく使われるコンポーネントについては、
下の例のように表記を省略することもできます。

== TracLinks が使えるところ == #WheretouseTracLinks
TracLinks が使えるのは:

 * ソースコード (Subverison) のコミットメッセージ
 * Wikiページ
 * チケット、レポート、マイルストーンでの説明記述箇所

その他、 WikiFormatting を利用可能なことが明示されているすべてのテキストフィールド。

例:
 * チケット: '''!#1''', '''!ticket:1'''
 * チケットのコメント: '''!comment:1:ticket:2'''
 * レポート: '''!{1}''', '''!report:1'''
 * チェンジセット: '''!r1''', '''![1]''', '''!changeset:1''', (ディレクトリを限定) '''![1/trunk]''', '''!changeset:1/trunk'''
 * リビジョンログ: '''!r1:3''', '''![1:3]''', '''!log:@1:3''', '''!log:trunk@1:3''', '''![2:5/trunk]'''
 * Diff ([http://trac.edgewall.org/milestone/0.10 0.10] 以降): '''!diff:@1:3''', '''!diff:tags/trac-0.9.2/wiki-default//tags/trac-0.9.3/wiki-default''', '''!diff:trunk/trac@3538//sandbox/vc-refactoring@3539'''
 * Wiki ページ: '''!CamelCase''', '''!wiki:CamelCase'''
 * 親ページ: '''![..]'''
 * マイルストーン: '''!milestone:1.0'''
 * 添付ファイル: '''!attachment:example.tgz''' (現在のページへの添付ファイル), '''!attachment:attachment.1073.diff:ticket:944''' (絶対パス)
 * ファイル: '''!source:trunk/COPYING'''
 * あるリビジョンのファイル: '''!source:/trunk/COPYING#200'''
 * あるリビジョンのファイルのある行数: '''!source:/trunk/COPYING@200#L25'''
表示:
 * チケット: #1, ticket:1
 * チケットのコメント: comment:1:ticket:2 
 * レポート: {1} or report:1
 * チェンジセット: r1, [1], changeset:1, (ディレクトリを限定) [1/trunk], changeset:1/trunk
 * リビジョンログ: r1:3, [1:3], log:@1:3, log:trunk@1:3, [2:5/trunk]
 * Diff ([http://trac.edgewall.org/milestone/0.10 0.10] 以降): diff:@1:3, diff:tags/trac-0.9.2/wiki-default//tags/trac-0.9.3/wiki-default, diff:trunk/trac@3538//sandbox/vc-refactoring/trac@3539
 * Wiki ページ: CamelCase, wiki:CamelCase
 * 親ページ: [..]
 * マイルストーン: milestone:1.0
 * 添付ファイル: attachment:example.tgz(現在のページへの添付ファイル), attachment:attachment.1073.diff:ticket:944 (絶対パス)
 * ファイル: source:trunk/COPYING
 * あるリビジョンのファイル: source:/trunk/COPYING#200
 * あるリビジョンのファイルのある行数: source:/trunk/COPYING@200#L25

'''Note:''' wiki:CamelCase の書式が使われることはほとんどありませんが、
ページ名が WikiPageNames のルールに従っていないページ (一文字、
アルファベット以外の文字、etc.) をリンクしたい場合には便利です。 
WikiPageNames に Wiki ページ名へのリンクに関する特記事項が書いてあるので見て下さい。

フル表記の (簡略形でない) Trac リンクでは、次のようにしてリンクタイトルを
カスタマイズすることもできます:

{{{
[ticket:1 これは1番目のチケットへのリンクです]。
}}}

表示: [ticket:1 これは1番目のチケットへのリンクです]。

タイトルが省略された場合、 ID のみ (コロンの後ろ側) が表示されます。

{{{
[ticket:1]
}}}

表示: [ticket:1]

もし名前空間の一部が省略されていたら、 `wiki` がデフォルトの値です。(''バージョン 0.10 以降''):

{{{
[SandBox the sandbox]
}}}

表示: [SandBox the sandbox]

TracLinks はとてもシンプルなアイディアですが、実際にはとても複雑な情報網になっています。実際、使う分にはとても直感的で簡単ですし、 "リンクを追跡する" ことによってプロジェクトでおこったことやなぜある事象が起こったのかを理解するのにとても役に立ちます。


== TracLinks の高度な利用 == #AdvanceduseofTracLinks

=== 相対リンク === #Relativelinks

ページ内の特定アンカーにリンクするには '#' を使用します:
{{{
 [#Relativelinks 相対リンク]
}}}
表示:
  [#Relativelinks 相対リンク]

Hint: セクションのタイトルにマウスオーバしたときに、文字 '¶' が表示されます。これはそのセクションへのリンクですので、 `#...` の部分をコピーすれば、相対リンクのアンカーとして使用できます。

[http://trac.edgewall.org/wiki/SubWiki SubWiki] ページにリンクするには '/' を使用します:
{{{
 WikiPage/SubWikiPage or ./SubWikiPage
}}}

[http://trac.edgewall.org/wiki/SubWiki SubWiki] ページから親ページにリンクするには、単に '..' を使用します:
{{{
  [..]
}}}

[http://trac.edgewall.org/wiki/SubWiki SubWiki] ページから兄弟の位置にあるページにリンクするには '../' を使用します:
{{{
  [../Sibling see next sibling]
}}}

''(0.11 で変更された箇所です)'' Trac 0.10 では `[../newticket]` のように書くと、トップレベル URL の /newticket にリンクする動作でした。しかし 0.11 では Wiki の名前空間にとどまり、兄弟の位置にあるページにリンクします。新しいシンタックスについては [#Server-relativelinks サーバ相対リンク] を参照してください。

=== InterWiki リンク === #InterWikilinks

他に、プレフィックスを自由に定義して、他の Web アプリケーションのリソースをポイントさせることができます。プレフィックスと対応する Web アプリケーションの URL の定義は特殊な Wiki ページ、 InterMapTxt ページで定義されます。 他の TracEnvironment へのリンクを作ることもできますが、より柔軟に他の TracEnvironment を指す特別な方法があることを覚えておいてください。

=== InterTrac リンク === #InterTraclinks

InterWiki リンクと同じ要領で使用できますが、リンクする対象を他の Trac プロジェクトに特化した機能です。

プレフィックスとして定義した他の Trac Environment の名前とコロンに続けて、あらゆる種類の Trac リンクを記述することで、一つの Trac Enviroment から他の Trac Environment のリソースを参照することができます。このリモートの Trac Environment は、名前そのものかエイリアスとして、あらかじめ登録しておく必要があります。詳しくは InterTrac を参照してください。

InterWiki リンクに対する InterTrac リンクの利点は、 InterTrac リンクが Trac リンクの短縮書式を解釈できることにあります。例えば、チケットへのリンクは `#T234` (T は Trac Project へのエイリアスに設定されているとします) と書くことができ、チェンジセットへのリンクは `[trac 1508]` と書くことができます。

=== サーバ相対リンク === #Server-relativelinks

静的リソースや `newticket` のような固定リンク、 `/register` ページのような
サーバ内で共有するリソースなど、 Trac のリンク機構にビルトインされていない
リソースに対して Project 内でリンクする機能は時折、有用になります。

Project 内のリソースにリンクするためには、 Project root からの絶対パスか、
現在のページの URL からの相対リンクを使用します (''0.11 で変更された箇所です''):

{{{
[/newticket 新規チケット作成]
[/ home]
}}}

表示: [/newticket 新規チケット作成] [/ home]

サーバ上の他のロケーション (Project の外部) にリンクするためには、 '//location' リンクシンタックスを使用します (''0.11 で変更された箇所です''):

{{{
[//register Register Here]
}}}

表示: [//register Register Here]

=== Trac リンクで空白文字をエスケープする === #QuotingspaceinTracLinks

TracLinks のプレフィックスの後ろにスペースを含んだターゲットがある場合、
シングルクォーテーションかダブルクォーテーションで囲みます。
例:
 * !wiki:"The whitespace convention"
 * !attachment:'the file.txt' もしくは
 * !attachment:"the file.txt" 
 * !attachment:"the file.txt:ticket:123" 

=== リンクの無効化 === #EscapingLinks

!TracLinks を無効化するには、先頭に '!' (エクスクラメーションマーク) を付けます。
{{{
 !NoLinkHere.
 ![42] is not a link either.
}}}

表示:
 !NoLinkHere.
 ![42] is not a link either.


=== パラメータつきの Trac リンク === #ParameterizedTraclinks

Trac リンクの対象となる Trac リソースは通常、パラメータで制御される複数の表示形式を持っています。例えば、 Wiki ページでは `version` や `format` パラメータを使用でき、レポートでは動的変数の使用ができます。

あらゆる種類の Trac リンクは、 URL のクエリパラメータに相当する方法で記述できる。任意の組み合わせのパラメータを持っています。例えば:
 - `wiki:WikiStart?format=txt`
 - `ticket:1?version=1`
 - `[/newticket?component=module1 create a ticket for module1]`


== TracLinks リファレンス ==　#TracLinksReference
以下に示すセクションは特定のリンクの種類の詳細について記述しています。 TracLinks の上級者向けの使用方法も同時に記述します。

=== attachment: リンク === #attachment:links

添付ファイルへのリンクのシンタックスは次に示すとおりです:
 * !attachment:the_file.txt は、現在のオブジェクトに添付されたファイル the_file.txt へのリンクを生成します。
 * !attachment:the_file.txt:wiki:MyPage は、 Wiki ページ !MyPage に添付されたファイル the_file.txt へのリンクを生成します。
 * !attachment:the_file.txt:ticket:753 は、チケット 753 に添付されたファイル the_file.txt へのリンクを生成します。

Note: 古い記法ではファイル名を最後に書いていました。この記法はまだ使うことができます: !attachment:ticket:753:the_file.txt

添付ファイルページではなく、添付ファイルの内容に直接リンクしたい場合は `attachment:` の代わりに `raw-attachment:` を使用してください。

このリンクは HTML ドキュメントなどを直接指す目的では使いやすいですが、この方法を使うためには `[attachment] render_unsafe_content = yes` (See TracIni#attachment-section) を設定し、 Web ブラウザに内容を表示できるように設定しなければなりません。注意: この設定を行うのはファイルを添付するユーザのことを 100% 信頼できる場合だけにしてください。そうでない場合、サイトが [http://ja.wikipedia.org/wiki/クロスサイトスクリプティング クロスサイトスクリプティング] 攻撃に晒されることになります。

See also [#export:links].

=== comment: リンク === #comment:links

該当するチケットの内部では、 !comment:3 と書くと 3 番目の更新のコメントにリンクします。
それ以外の場所であっても、チケットを特定することで、どこからでもコメントへのリンクが可能です:
 - !comment:3:ticket:123 
 - !ticket:123#comment:3 (Note: !#123#!comment:3! という書き方は間違っています)

=== query: リンク === #query:links

TracQuery#UsingTracLinks と [#ticket:links] を参照してください。

=== search: リンク === #search:links

TracSearch#SearchLinks を参照してください。

=== ticket: リンク === #ticket:links

通常使用される `ticket:id` 形式のほか、 `id` の代わりにチケットのリストやチケットの範囲を指定できます。これはカスタムクエリの検索結果ビューへのリンクを生成します。検索結果は指定したチケット固定です。

例: 
 - `ticket:5000-6000`
 - `ticket:1,150`

''(Trac 0.11 以降)''

=== timeline: リンク === #timeline:links

タイムラインへのリンクは ISO:8601 形式で日付を指定して生成できます。日付の指定には、任意で時刻の指定を続けることもできます。この時刻は UTC 時刻で解釈されますが、 UTC 時刻を使用したくない場合はタイムゾーンを続けて指定することで、ローカルタイムを使用できます。

例:
 - `timeline:2008-01-29`
 - `timeline:2008-01-29T15:48`
 - `timeline:2008-01-29T15:48Z`
 - `timeline:2008-01-29T16:48+01`

''(Trac 0.11 以降)''

=== wiki: リンク === #wiki:links

WikiPageNames と、このページの [#QuotingspaceinTracLinks Trac リンクで空白文字をエスケープする] を参照してください。

=== バージョン管理に関連するリンク === #VersionControlrelatedlinks
==== source: リンク ==== #source:links

source:/some/path 形式のリンクは、パスがディレクトリを示しているならば
ディレクトリブラウザを開き、それ以外の場合はリビジョンログを表示します。

特定のリビジョンを指定してリンクすることもできます :
 - `source:/some/file@123` - file のリビジョン 123 にリンクします。
 - `source:/some/file@head` - file の最新リビジョンにリンクします。
ディレクトリブラウザを開き、それ以外の場合はリビジョンログを表示します。

リビジョンを指定した場合はさらに特定の行番号にリンクすることさえできます :
 - `source:/some/file@123#L10`
 - `source:/tag/0.10@head#L10`

さらに、特定の行をハイライト表示することもできます :
 - `source:/some/file@123:10-20,100,103#L99` - 10 行目から 20 行目、 100 行目、 103 行目をハイライトします。
''(0.11 以降)''

==== export: リンク ==== #export:links

ブラウザでリンクをクリックしたときに、リポジトリ内をブラウザに表示するのではなく、ダウンロードを強制するためには `export` リンクを使用します。いくつかの形式が使用できます :
 * `export:/some/file` - file の最新リビジョンをダウンロードします。
 * `export:123:/some/file` - file の リビジョン 123 をダウンロードします。
 * `export:/some/file@123` - file の リビジョン 123 をダウンロードします。

リポジトリにチェックインされている XML や HTML 文書を、正しいスタイルシートと画像で表示する場合などには非常に使いやすいですが、この方法を使うためには `[browser] render_unsafe_content = yes` (See TracIni#browser-section) を設定し、 Web ブラウザに内容を表示できるように設定しなければなりません。設定されていない場合、セキュリティを確保するため、そのファイルを Web ブラウザ上で表示せず、添付ファイルと同じようにダウンロードさせます。

特定のファイルの代わりにリポジトリのディレクトリのパスが指定されると、ソースブラウザはディレクトリを表示します (`source:/some/dir` と同じ) 。

==== log: リンク ==== #log:links

`log:` リンクはリビジョンの範囲を表示するために使用します。最も単純な形式では、特定パスの最新のリビジョン群へのリンクを生成します。リビジョンを指定することで、最新以外の任意のリビジョンを表示することもできます。
 - `log:/` - リポジトリのルートディレクトリでの最新のリビジョン群
 - `log:/trunk/tools` - `trunk/tools` での最新のリビジョン群
 - `log:/trunk/tools@10000` - `trunk/tools` での 10000 から始まるリビジョン群 (訳注: 10000 以前のリビジョン)
 - `log:@20788,20791:20795` - リビジョン 20788 と 20791 から 20795 までの範囲のリビジョンを表示する
 - `log:/trunk/tools@20788,20791:20795` - リビジョン 20788 と 20791 から 20795 までの範囲のリビジョンのうち、 `/trunk/tools` に影響したものを表示する

リビジョン範囲の短縮形式は以下の通りです:
 - `[20788,20791:20795]`
 - `[20788,20791:20795/trunk/tools]`
 - `r20791:20795` (ただし `r20788,20791:20795` や `r20791:20795/trunk` は使用できません)

最後に、上記のすべてについて、リビジョン範囲の書式は `x:y` と `x-y` のどちらでも使用することができます。

----
See also: WikiFormatting, TracWiki, WikiPageNames, InterTrac, InterWiki
 
