🥳

GitHubのREADMEでもTwemojiを使いたいよ〜!

2021/09/14に公開
1

先日、こんな記事を書きました。

https://zenn.dev/kawarimidoll/articles/f02d2891a9634d

そして、この記事で紹介したリポジトリが以下のものです。
https://github.com/kawarimidoll/pax.deno.dev

このリポジトリを見てくれた方は以下の点に気づいたかもしれません。

「あれっ…」


pax.deno.devのREADME

「この絵文字…」

「Twemojiやん!!」

https://twemoji.twitter.com/

「READMEで普通の絵文字以外も表示できるのか」
「どうやっているの?」

では、その方法をご紹介しましょう。

表示方法

Twemojiはmaxcdnで配信されているので、それをページに埋め込みます。

以下に一覧ページがあります。
右クリックメニューから画像URLを取得しましょう。

https://twemoji.maxcdn.com/2/test/preview.html

普通にMarkdown上で表示する場合、取得したURLを参照すればOKです。

![sauropod](https://twemoji.maxcdn.com/v/13.1.0/72x72/1f995.png)

sauropod
普通に画像として表示

しかしこれでは、文中に埋め込むことができません。画像として表示はできていますが、「絵文字」っぽくはないですよね。

そこで、GitHubのMarkdownではHTMLの記述もValidであるという仕様を使用します。
Markdown形式の画像表示(![]())では自動でdisplay:blockになるのですが、直接HTMLタグを書く(<img>)とスタイルがつかず、display:inlineで表示されます。

<img src="https://twemoji.maxcdn.com/v/13.1.0/72x72/1f995.png" alt="sauropod">

これだけだと文字と画像のサイズが合わないので、公式が推奨しているスタイルをあてます。
https://github.com/twitter/twemoji#inline-styles

以下のものです。

img.emoji {
   height: 1em;
   width: 1em;
   margin: 0 .05em 0 .1em;
   vertical-align: -0.1em;
}

これを該当のimgタグの中に追記します。

<img src="https://twemoji.maxcdn.com/v/13.1.0/72x72/1f995.png" alt="sauropod" style="height:1em;width:1em;margin:0 0.05em 0 0.1em;vertical-align:-0.1em;">

ZennのMarkdownではHTMLタグを直接記述できないので、ここに表示することはできないのですが…GitHubでは動作するので試してみてください。
sauropod
Zennの場合、サイズの変更はできるが、インラインにできない

TwemojiのURLを簡単に取得する

ここで、こんな脳内会議が繰り広げられました。

kawarimidoll「やり方は分かった、これでTwemojiを表示できそう」

kawarimidoll「でもTwemoji一覧ページが画像いっぱいで重たい」

kawarimidoll「目的の絵文字を探すのが面倒、Twemojiの配信URLを簡単に取得したい」

kawarimidoll「ええ…しょうがないなあ…」

ということで作りました。Deno Deploy上で動いています。

https://twemoji.deno.dev

こちらのページの入力欄に絵文字を入力すると、対応するhttps://twemoji.maxcdn.com/...のURLを取得できます。

https://twemoji.deno.dev/api?emoji=[emoji]というAPIを設定し、これを呼んで取得しています。
こちらを直接叩けばサーバーサイドなどからの利用も可能ですのでご利用ください。もちろんパラメータの絵文字はURLエンコードが必要です。

おわりに

タイトルでは「GitHubのREADME」としていますが、imgタグを利用する方法なので、ほかにも使える環境はあると思います。

なお、GitHubのREADMEでTwemojiのURLを使用した場合、maxcdnに取得しに行くのではなく、camo.githubusercontent.comに画像を保存し、それを読み込んでいるようです。

リポジトリはこちらです。
https://github.com/kawarimidoll/deno-twemoji-convert

Discussion

hankei6kmhankei6km

DenoとGitHub ActionsでZennの最新記事をGitHub Profileに掲載して自動でCommitまでやる」の記事とあわせて参考にさせていただき、自分の GitHub Profile に Zenn 記事のタイトルをアイキャッチ(Twemoji) 付きで表示できるようになりました。

また、Twemoji の画像 URL 取得も API で簡単にできていて大変に助かっています。

しかし、その過程で GitHub 上で Twemoji をテキストのように表示させる方法について、少し問題を見つけてしまいました。

<img> タグへの style 指定ですが、以下のときは適用されないようです。

  • gitst でのプレビュー表示時(保存後の表示では適用される)
  • GitHub Mobile 上での表示(Android 版で確認しています)

以下は、同じ端末で同じ README をブラウザと GitHub Mobile アプリで表示している例です。

テキストと Twemoji の画像のサイズがあっている
ブラウザーでの表示

テキストに比べて Twemoji の画像が大きい
GitHub Mobile での表示

GitHub の仕様としてどちらが正しい挙動かわからなかったのですが、GitHub Mobile は他にも SVG ファイルの挙動がブラウザーと異なっていることもあるようです。

https://zenn.dev/qsf/articles/a4c1b527e77bf6

少し試したかぎりでは <img>widthheight 属性を指定することでブラウザーと GitHub Mobile の表示は同じようになりますが、「1em のような指定ができない」「ブラウザーでも style が適用されなくなる」といった問題もあります。

よい回避策は思い浮かばなかったのですが、ご報告まで。