カスタム linkifier を追加する

この機能を利用できるのは、組織オーナーと管理者のみです。

Linkifier を使うと、GitHub、Salesforce、Zendesk などの サードパーティの課題管理システムにある issue や ticket を簡単に参照できます。 たとえば、#2468 を自動的に https://github.com/zulip/zulip/issues/2468 へのリンクに変換する linkifier を追加できます。

パターンがトピック内に現れると、Zulip はメッセージ宛先バーのトピック右側に 適切な URL へリンクする Open () ボタンを追加します。

必要な linkifier をうまく作成できない場合は、何を実現したいかの詳細を添えて Zulip サポートにお問い合わせください。

カスタム linkifier を追加する

  1. Go to Linkifiers.

  2. Add a new linkifier の下で、PatternURL template を入力します。

  3. Add linkifier をクリックします。

Linkifier の順序を並べ替える

Linkifier は順番に処理され、すでに linkify 済みのテキストには適用されません。 そのため、複数の linkifier が当てはまる場合に、どれを優先するかを選べます。 例については、パターンの重複の節を参照してください。

  1. Go to Linkifiers.

  2. Linkifiers の下で、縦のドットをクリックしてドラッグし、 linkifier の一覧を並べ替えます。

よくある linkifier パターン

以下の例では、特に issue や ticket 用の linkifier を中心に、 もっとも一般的な種類の linkifier を紹介します。

issue または ticket へリンクする

これは、# に続く数字をリンクに変換するパターンです。GitHub、 Salesforce、Zendesk などのサードパーティの課題管理システムにある issue や ticket へのリンクによく使われます。

  • 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、というように使っています。

  • 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 の リンクに変換できます。

  • 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 します。

  • 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 サイト上のページへリンクするための 短縮記法です。

  • 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}) では、overviewchangelog の間の / が 誤って URL エンコードされてしまいます。

Google 検索結果へリンクする

このパターン例では、Google 検索へのリンクを作成できます。

  • 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 でその動作を上書きしています。

  • 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 は自動的に最後に追加されます。