カスタム linkifier を追加する
この機能を利用できるのは、組織オーナーと管理者のみです。
Linkifier を使うと、GitHub、Salesforce、Zendesk などの
サードパーティの課題管理システムにある issue や ticket を簡単に参照できます。
たとえば、#2468 を自動的に
https://github.com/zulip/zulip/issues/2468 へのリンクに変換する
linkifier を追加できます。
パターンがトピック内に現れると、Zulip はメッセージ宛先バーのトピック右側に
適切な URL へリンクする Open
() ボタンを追加します。
必要な linkifier をうまく作成できない場合は、何を実現したいかの詳細を添えて
Zulip サポートにお問い合わせください。
カスタム linkifier を追加する
- Instructions for all platforms
-
Go to Linkifiers.
-
Add a new linkifier の下で、Pattern と
URL template を入力します。
-
Add linkifier をクリックします。
Linkifier の順序を並べ替える
Linkifier は順番に処理され、すでに linkify 済みのテキストには適用されません。
そのため、複数の linkifier が当てはまる場合に、どれを優先するかを選べます。
例については、パターンの重複の節を参照してください。
- Instructions for all platforms
-
Go to Linkifiers.
-
Linkifiers の下で、縦のドットをクリックしてドラッグし、
linkifier の一覧を並べ替えます。
よくある linkifier パターン
以下の例では、特に issue や ticket 用の linkifier を中心に、
もっとも一般的な種類の linkifier を紹介します。
issue または ticket へリンクする
これは、# に続く数字をリンクに変換するパターンです。GitHub、
Salesforce、Zendesk などのサードパーティの課題管理システムにある
issue や ticket へのリンクによく使われます。
- Instructions for all platforms
- Pattern:
#(?P<id>[0-9]+)
- URL template:
https://github.com/zulip/zulip/issues/{id}
- Original text:
#2468
- Automatically links to:
https://github.com/zulip/zulip/issues/2468
複数のプロジェクトやアプリの issue / ticket へリンクする
複数のプロジェクトの issue や ticket 用に linkifier を設定する場合は、
#2468 形式をプロジェクト固有のバリエーションに拡張すると便利です。
たとえば Zulip 開発コミュニティでは、
このように
#M2468 を Zulip モバイルアプリのリポジトリの issue、
#D2468 をデスクトップアプリのリポジトリの issue、というように使っています。
- Instructions for all platforms
- Pattern:
#M(?P<id>[0-9]+)
- URL template:
https://github.com/zulip/zulip-mobile/issues/{id}
- Original text:
#M2468
- Automatically links to:
https://github.com/zulip/zulip-mobile/issues/2468
複数のリポジトリの issue / ticket へリンクする
複数の GitHub リポジトリへのリンクをよく使う組織では、この
linkifier パターンを使うと org/repo#ID を issue または pull request の
リンクに変換できます。
- Instructions for all platforms
- Pattern:
(?P<org>[a-zA-Z0-9_-]+)/(?P<repo>[a-zA-Z0-9_-]+)#(?P<id>[0-9]+)
- URL template:
https://github.com/{org}/{repo}/issues/{id}
- Original text:
zulip/zulip#2468
- Automatically links to:
https://github.com/zulip/zulip/issues/2468
16 進数の issue / ticket 番号へリンクする
次のパターンは、Git のコミット ID のような、7 文字から 40 文字の
16 進数文字列を linkify します。
- Instructions for all platforms
- Pattern:
(?P<id>[0-9a-f]{7,40})
- URL template:
https://github.com/zulip/zulip/commit/{id}
- Original text:
abdc123
- Automatically links to:
https://github.com/zulip/zulip/commit/abcd123
高度な linkifier パターン
Linkifier は柔軟な仕組みで、さまざまな状況に対応するルールを作成できます。
Linkifier のパターンは、re2
正規表現エンジンを使った正規表現です。
Linkifier は、リンクの生成方法を記述するために
RFC 6570 準拠の
URL template を使用します。これらの template は複数の式タイプをサポートしています。
デフォルトの式タイプ ({var}) は / や & のような特殊文字を URL エンコードします。
これは大半の linkifier で望ましい動作です。より高度な URL template の式タイプを使うと、
オプションの URL クエリパラメーターのような細かなケースでも、
意図どおりの動作を実現できます。たとえば次のようなものがあります。
- URL の区切り文字を URL エンコードしたくない場合は
{+var} を使います。
- URL クエリパラメーター内の変数には
{?var} と {&var} を使います。
- URL の
# フラグメントを生成するには {#var} を使います。
URL template の仕様には、簡単な
例 と、
URL template の正確な動作を説明する詳細な
例 があります。
ドキュメントページへリンクする
このパターン例は、Zulip の ReadTheDocs サイト上のページへリンクするための
短縮記法です。
- Instructions for all platforms
- Pattern:
RTD/(?P<article>[a-zA-Z0-9_/.#-]+)
- URL template:
https://zulip.readthedocs.io/en/latest/{+article}
- Original text:
RTD/overview/changelog.html
- Automatically links to:
https://zulip.readthedocs.io/en/latest/overview/changelog.html
このパターンでは {+var} 式タイプを使っています。デフォルトの
式タイプ ({article}) では、overview と changelog の間の / が
誤って URL エンコードされてしまいます。
Google 検索結果へリンクする
このパターン例では、Google 検索へのリンクを作成できます。
- Instructions for all platforms
- Pattern:
google:(?P<q>\w+)?
- URL template:
https://google.com/search{?q}
- Original text:
google:foo or google:
- Automatically links to:
https://google.com/search?q=foo or https://google.com/search
このパターンでは {?var} 式タイプを使っています。デフォルトの式タイプ
({q}) では、オプションの q が存在する場合にだけ URL に ? を含める
方法がありません。
パターンの重複
この例では、一般的な linkifier を設定して、zulip-desktop#123 のような
GitHub リポジトリ参照を、そのリポジトリの issue へのリンクに変換しています。
対象は zulip GitHub 組織内のリポジトリです。さらに、別の組織にある
特定の関心対象リポジトリ (django/django) については、より具体的な
linkifier でその動作を上書きしています。
- Instructions for all platforms
-
Specific linkifier (ordered before the general linkifier)
- Pattern:
django#(?P<id>[0-9]+)
- URL template:
https://github.com/django/django/pull/{id}
-
General linkifier
- Pattern:
(?P<repo>[a-zA-Z0-9_-]+)#(?P<id>[0-9]+)
- URL template:
https://github.com/zulip/{repo}/pull/{id}
-
Example matching both linkifiers; specific linkifier takes precedence:
- Original text:
django#123
- Automatically links to:
https://github.com/django/django/pull/123
-
Example matching only the general linkifier:
- Original text:
zulip-desktop#123
- Automatically links to:
https://github.com/zulip/zulip-desktop/pull/123
このパターン群には、重複する正規表現が含まれています。一般的な
linkifier パターンは lorem#123 にも一致する点に注意してください。
より具体的な linkifier が一般的な linkifier より優先されるのは、
それがより一般的なパターンより前に並んでいる場合だけです。これは、
既存の linkifier をドラッグ&ドロップして希望の順序に並べ替えることで
調整できます。新しい linkifier は自動的に最後に追加されます。