AIとのやり取りをブログに載せる
このブログのテーマの一つは「AIでいろいろやってみよう」なので、AIと実際にこういったやり取りをしましたよ、というチャットログを掲載したいときがある。
よくあるチャットバルーン形式での表示ができると見やすそうだが、このブログで何よりも重要なのは「書くのが面倒くさくならないこと」だ。そこで、まずはMarkdown記法に混ぜても壊れず、かといって面倒でも覚えづらくもない記法から考えてもらうことにした。
既存のMarkdown文法と衝突しない、かつ書きやすい記法として以下を提案します:
案1: コンテナブロック記法(おすすめ)
:::user
こんにちは、質問があります
:::
:::ai
はい、どうぞ!
:::
案2: 行頭記号
@> こんにちは、質問があります
#> はい、どうぞ!
案3: 拡張引用
> [user] こんにちは、質問があります
> [ai] はい、どうぞ!
案1のコンテナブロック記法 (:::) は Hugo や VuePress で採用されている形式で、複数行の発言に対応しやすく、既存のMarkdown(見出し#、引用>、リスト-等)と衝突しません。
Hugo も VuePress も使ったことがなく、知らなかった。軽く調べてみるとこれとかのことらしい。
書くのが楽そうなのは行頭記号だが、気になる点を聞いてみる。
行頭記号を採用する場合、改行の解釈が難しくなりますか?
はい、行頭記号の場合は複数行の発言の扱いが難しくなります。
(中略)
コンテナブロックなら開始・終了が明確なので、中に複数行・リスト・コードブロックなど何でも入れられます。パースも正規表現一発でシンプルです。
予想通りの返答だったので、無難そうな「コンテナブロック記法」で実装してもらう。追加でいくつかの指摘。
チャットバブル内で :::user, :::ai が書かれた場合はどうなりますか?
正規表現は「非貪欲マッチ」なので、最初に見つかった ::: で閉じてしまいます。つまり、(現状の実装だと):::ai の ::: が閉じタグとして消費され、残りが壊れます。
やっぱりこういうところは詰めが甘い!修正させる。
改善しました!これで以下のようにコードブロック内の ::: は安全に無視されます:
そのあと、いくつかの小競り合いをして完成。いいかんじです。