はじめに

GitHubのデフォルトアイコンはドット絵のようなアイコンですよね。

あれが何者なのか気になったので、色々と覗いてみました。

ユーザごとに違うアイコン

GitHubもそうですけど、Slackとかも初期アイコンがユーザごとに違うものってありますよね。どうやらそういうアイコンのことをIdenticonというそうです。

特に、GitHubのIdenticonについてはGitHubのブログに書かれています。

自分のアイコンを確認

現在のアイコンを確認

Identiconを見る前に、現在設定しているアイコンを見てみましょう。

現在のアイコンはhttps://github.com/<username>.pngから見ることができます。ちなみにこのアドレスからリダイレクトされるURLの最後の方に書かれている数字、または画像を保存した時の名前が自分のユーザIDとなっています。このユーザIDはあとでも見返すので、なんとなく覚えといてください。

アイコンを変更していない人はこの方法でもIdenticonを確認できます。

Identiconを確認

アイコンを自分で変更した人でもIdenticonを確認することができます。

Identiconはhttps://github.com/identicons/<username>.pngから見ることができます。

懐かしいですね。しかしこの画像よく見ると、少しおかしいです…

Identiconの謎

画像の情報をみてみると、画像サイズは420 x 420 pxのようです。なるほど。上下左右で35 pxのマージンと縦横5 x 5のドット絵でそれぞれ70 pxであれば420 pxとなります。

しかし

画像を拡大してみましょう。わかりやすく、70 pxの境界線に線を引きました。

そうです。1 pxズレているのです。

これは5 x 5の全てのドットで左上は35 + 70(n - 1)の座標にあるのですが、そこから塗りつぶしの範囲が71 x 71 pxになっているのです。つまり、右と下に1 pxずつはみ出しています。

気づいてしまった時には気になって気になって仕方なかったです。

なんでこんな仕様になっているのでしょう…

そもそもこのアイコンはどのようにしてできているか

こちらは上記にブログに少し書いてあったり、他のサイトでも紹介されていますが、ユーザID(さっきも出てきましたが自分で決めたusernameではなくGiuHubが側が発行したユニークな番号)から生成されます。

具体的にはユーザID(僕の場合は29699789)をMD5を用いてハッシュ値を得ます。得られた32桁(僕の場合は696f9ab9a21cf934a3bb45c2352808bf)の先頭15桁の偶奇から塗りつぶす/つぶさないを形を決定(図参照)。

そして下7桁の内、前3桁から色相、中2桁を彩度、後2桁を輝度に割り当てることで色が決まります。

作り方をみても謎は解けませんでした…

おわりに

ほんとに71 x 71 pxの謎が気になって仕方がない。

謎すぎる…