はじめに:誤爆メンションって何?
Rubyでは@
で始まる変数がインスタンス変数になります。
これはRuby on Railsなどでも当然同じルールです。
# @で始まる変数はインスタンス変数
@foo = 1
# 何も付かない変数はローカル変数
foo = 1
一方、TwitterやGitHub、そしてこのQiitaなど、昨今のSNSでは@
がユーザーへのメンションとしても使われています。
たとえば、以下の画像に見える@jnchito
は、jnchitoというTwitterユーザーに対するメンションです。
この2点はわざわざ僕が説明しなくても「そんなこたぁ前からわかっとるわい!」と思われそうな話なのですが、TwitterやGitHubで何も考えずにRubyのコードをコピペすると、予期せずメンションが発生するので要注意です。
たとえばGitHubを例に挙げると、こんなイメージです。
こうすると「GitHub上に実在する bookさん」にメンションを送ることになってしまいます。
ですが、ここではもちろん @book
さんにメンションを送る必要はありません。
SNS上で発生するこういった意図しないメンションのことを「誤爆メンション」と僕は呼んでいます。
解決策
Markdownでは単語をバッククオートで囲むとコードスパンになります。コードスパンにすればメンションは発生しません。
ここは `@book = Book.new(book_params)` 以外の方法で `@book` をnewできませんか?
以下のように薄いグレーの背景になっていれば、コードスパンになっているので大丈夫です。
バッククオートを3つ重ねてコードブロックにするのも同じく有効です。
ここは
```ruby
@book = Book.new(book_params)
```
以外の方法で `@book` をnewできませんか?
GitHubやQiitaなど、Markdown記法を採用しているサイトはこれで大丈夫ですが、TwitterはMarkdown記法ではないので、意図的に@
のうしろにスペースを入れるぐらいしか対策はないと思います。
そうそう、上の例だとBook.new
がURLと見なされているので、ここもドットの前にスペースを入れたりしてリンクにしない方がいいですね。(面倒くさいけど・・・)
まとめ(と情報募集)
というわけで、この記事では昨今のSNSで発生しやすい誤爆メンションと、その解決策を紹介しました。
Rubyのコードを交えながらコメントする際は、必ずインスタンス変数をバッククオートで囲むようにしましょう!・・・と言っても、プログラミング初心者だとなかなかこの問題に気付きにくいですよね〜。
今のところ「気を付ける」ぐらいしか対策が思いつかないんですが、もうちょっといい方法はないのかな〜と思ったりします
もし「気を付ける」以外の何かいい仕組みをご存じの方がいたら、コメント欄で教えてください!
参考
QiitaとGitHubのMarkdown記法については、以下の公式ページが参考になります。