約 1 年前、私は GitHub の Discourse インスタンスに 投稿 を行い、<span>https</span>://github.com/OWNER/REPO/tree/BRANCH/path のような形式の URL を多数含めて、GitHub.com がそのような URL をどのように処理するかについて議論しました。私の投稿にはすぐに、「Github リンクが恒久的なリンクに置き換えられました」というメッセージを含むシステム生成の編集が加えられました。これは discourse-github プラグインからのものであるようです。特定のコードを引用する一般的なケースでは、ブランチ名を現在のコミット ID への恒久的なリンクに置き換える機能が有用な場合もありますが、GitHub の URL 処理について議論する特殊なケースでは、この編集によって私の投稿の意図が損なわれてしまいました。私は幸運にもボットの編集にすぐに気づき、ボットとの数回のやり取りの末、<span> タグを追加してボットのパターンマッチングを回避するという回避策を見つけました。
https://github.com/OWNER/REPO/tree/<span>BRANCH</span>/PATH
しかし、他の著者がボットの編集に気づかず、読者を混乱させる投稿のまま放置される可能性もあります。
特定の投稿に対して不要な GitHub の恒久的なリンク編集を避けるための最善の解決策は何でしょうか?一般的に、ボットが投稿を壊すリスクのある自動編集を行うのは誤っていると感じます。より安全な方法としては、(1) 投稿が保存された際に著者にリンクを編集するかどうかを確認するか、(2) ボットが元のリンクを削除せずに恒久的なリンクを追加するという方法があります。(他のウェブサイト、おそらく Reddit などで、既存の情報を削除せずに情報を追加するボットを見た記憶があります。)Discourse のメンテナーが、これらのオプションを稀なユースケースに対応するには見た目が悪すぎる、あるいは作業が多すぎると判断する場合、他の選択肢として (3) 投稿が保存された後に通知を表示し、著者が必要に応じて編集を回避する方法に関する情報へのリンクを提供することも考えられます。具体的には、(a) UI に専用のバナーを表示するか、(b) ボットが投稿の末尾に 1 行のテキストを追加する方法です。
著者が編集をオプトアウトするための最も合理的な設計が何かはわかりません。リンクの宛先に基づいた discourse-github プラグインのサイト全体の除外設定は、この目的には適していないように思えます。おそらく、私が現在採用している <span> タグを使った回避策で十分かもしれません。Discourse に変更が加えられなくても、この投稿が問題に気づいた著者にとって回避策を見つけやすくなることを願っています。
注:以前、私は「恒久的なリンク」ボットが GitHub インスタンス固有のものだと仮定して、この問題を GitHub のフォーラムで 提起しました。しかし、そこでのコメントにより、これは一般的な Discourse の機能であることがわかりました。そのため、ここで改めてこの問題を提起します。
ご配慮ありがとうございます!
「いいね!」 2
nylen
(James Nylen)
2
これは良い機能だと思います。なぜなら、人々はよく master ブランチへのリンクを貼り付けることがあり、それらは時間の経過とともにほぼ必ず古くなってしまうからです。それでも、正当な理由が多数あるため、意図的にブランチへのリンクを貼り付けることは可能であるべきです。また、全体的に見てこの機能は少し破綻しているように思えます。修正すべきでないものを書き換えてしまったり、おそらく書き換えるべきものを解析しなかったりしています。
これを修正するためのテストケースとして使える例をいくつか挙げます:
- URL を単に貼り付けて作られたプレーンなリンク。これは書き換えられるべきであり、実際に書き換えられています:subdomain-static/forums-enhancements.js at master · ClassicPress/subdomain-static · GitHub
[url](url) という形式の Markdown リンク。これはリンクテキストと URL の両方を明示的に指定しているため、書き換えられてはならないはずです。しかし実際には、リンクテキスト が書き換えられ、リンク URL は書き換えられていません。これは破綻しています:https://github.com/ClassicPress/subdomain-static/blob/master/forums-enhancements.js
- バッククォートで囲まれた URL。これはリンクではないため書き換えられてはならないはずですが、書き換えられています:
https://github.com/ClassicPress/subdomain-static/blob/master/forums-enhancements.js
- 3 つのバッククォートで囲まれたコードブロック内の URL。これもリンクではないため書き換えられてはならないはずですが、書き換えられています:
https://github.com/ClassicPress/subdomain-static/blob/master/forums-enhancements.js
上記の (1) のみを書き換えるべきだと考えます。これにより動作がより予測可能になり、「プレーン」なリンクのみが書き換えられるようになります。特定の Markdown 構造が使用されているリンク(特定の意図を表す方法と考えることができます)は、そのままにしておくべきです。
「いいね!」 1
nylen
(James Nylen)
3
この機能は meta.discourse.org では有効になっていないようですか?
参考までに、私は反対です。(2) 編集: [text](URL) の一般的なケース((2a)と呼びましょう)では、リンクURLは(1)と同じように書き直されるべきだと思います。(現在の、テキストは書き直し、URLは書き直さないという動作は完全に間違っていることには同意します。)(1)と(2a)のどちらを書き直すかの決定は、読者にリンクURLが表示されることが有用か、それとも紛らわしいかどうかに基づいており、リンクが執筆時点のコードのバージョンを指すべきか、それとも読み取り時点のコードのバージョンを指すべきかという意図に基づくものではありません。もちろん、パーマリンクの問題は認識しているので、必要な場合は自分でパーマリンクを作成します。しかし、より一般的には、Discourse管理者がパーマリンクボットを有効にすることに決めた場合、それはおそらく、ほとんどのユーザーがブランチ名ベースのリンクが壊れるリスクを認識していないと考えているからであり、Markdownリンク構文の使用が、その特定のリンクが書き直されることを望まないユーザーがその問題に気づいているというシグナルであるとはあまり思いません。
しかし、どちらも憶測に過ぎないと思います。上級ユーザーとしては、オーバーライドできる限り、デフォルトがどうであってもあまり気にしません。
nylen
(James Nylen)
5
はい、まさにその通りです。現在、それをオーバーライドする方法はありません。[url](url)(リンクテキストとURLがまったく同じ)と書くことは、ボットにそのリンクを書き換えるべきではないことを示す方法になります。なぜなら、そのように書く他の理由がないからです。
リンクのターゲットURLから推測されるタイトルではなく、独自のタイトルを付けたい場合は、そのようになります。つまり、[タイトル](URL)です。リンクにタイトルを付けることは、URLの書き換えに対する好意を示すものではないため、URLの書き換えに関しては、@mattmccutchenと同様に、1と2は一貫して動作すべきだと思います。
タイトルがURLと完全に一致することが、書き換えられないことを示すという議論があるかもしれませんが、ユーザーがタイトルを提供したいが、URLを書き換えたくない場合はどうでしょうか?それを指定する別の方法が必要です。
思いつくのは、埋め込み画像サイズのようなタイトルの接尾辞ですが、ユーザーがそれを見つける方法がわかりません。
埋め込み画像は次のようにサイズ設定できます。

したがって、discourse-githubプラグインは、次のようなものを探すように(おそらく)作ることができます。
[タイトル|github-no-rewrite](URL)
ああ、あなたの(2)が、テキストとURLが同じである特別な場合にのみ言及していることは、私には明確ではありませんでした。私の発言は、テキストとURLが同じではない場合がある一般的なケース(今これを(2a)と呼びましょう)に関するものでした。
ケース(2)では、URLは書き換えるがテキストは書き換えないのは奇妙で、不整合が残ることは同意しますが、不整合を避けたいのであれば、両方とも書き換えるのが最善の方法であると主張することも同様に可能であると思います。したがって、(2)をオプトアウトとして扱うという議論は説得力があるとは思いません。(2a)で機能するオプトアウトが必要であることを考えると、ユーザーに(2)と同じオプトアウトを使わせ、設計を複雑にしないようにしたいです。(これはSimon Manningのアイデアでもあったと思いますか?)
これを正しく理解しているか(または可能かどうか)わかりませんが、Inline PDF Previews - #45 by Johani のようなスペースエスケープを使用できますか? [ text]( url) はテキストも URL も書き換えず、それ以外は自動的に変更されるということですか?
このバージョンはそのままにして、書き直さないでください。確認させてください。
https://github.com/correctcomputation/checkedc-clang/blob/master-post-microsoft/clang/docs/checkedc/Setup-and-Build.md
次のように書かれています。
<https://github.com/correctcomputation/checkedc-clang/blob/master-post-microsoft/clang/docs/checkedc/Setup-and-Build.md>
nylen
(James Nylen)
10
このディスコースインスタンスではGitHubのパーマリンク書き換えが無効になっているため、有効なテストではありません。(「公式」インスタンスで無効になっている場合、この機能について何を物語っているのかと思います
)
代わりに、この例をreplace_github_non_permalinks.rb / replace_github_non_permalinks_spec.rbのテストケースとして記述した場合、そのリンクも書き換えられることがわかると思います。
「いいね!」 1