え!!Disqusならできるの!?ということで、
私のAMP対応なブログにもコメント欄を設けてみることにしました。

たぶん、下記URLでみれるはずっ
下にずずっとスクロールすると、Disqusで作ったコメント欄が確認できます。

【AMP版】GoogleのGuetzliを使って、GitLab CI上で画像圧縮をしてみた

おおおおおおおおお!!!!!
AMPでもちゃんとコメント欄が使えてる!!!!!!!!!!!!

というわけで、この感動を以下おっそわけです(*・ω・*)

Disqus公式のブログページGitHubを参考にやっていきます。

DisqusをAMPページでも読み込むには?

まずは読込方法ですが、iframeを使って読み込むみたいです。
なので、初めにAMP用のamp-iframeスクリプトを<head>内で読み込みます。

<script async custom-element="amp-iframe" src="https://cdn.ampproject.org/v0/amp-iframe-0.1.js"></script>

次に実際にDisqusのコメントサービスを利用したい箇所に、amp-iframe要素を配置します。 上述のAMP導入手順には書いてませんが、amp-iframe要素の子要素は必須なのでdivタグを入れてます。

<amp-iframe width=600 height=140
            layout="responsive"
            sandbox="allow-scripts allow-same-origin allow-modals allow-popups allow-forms"
            resizable
            src="[Disqus用ファイル設置先URL]?shortname=[Disqusで設定したshortname]&url=[エンコード済の現在の記事URL]">
    <div overflow tabindex="0" role="button" aria-label="Read more"></div>
</amp-iframe>

上記の[]部分3箇所を自分の環境に合わせて設定してみてください。

(Hugoな私は、{{ .Permalink | htmlEscape }}で、
[エンコード済の現在の記事URL]を動的に読み込んでます。)

iframeでなにを読み込むの?

そして、[Disqus用ファイル設置先URL]ってなんぞ?って話ですね。

Disqusをamp-iframeで読み込ませるためには、
ブログとは別ドメインのSSL(https)対応サーバーにこんな感じのHTMLファイルを
置く必要があるとのこと。

・index.html

<div id="disqus_thread"></div>

<script>
    window.addEventListener('message', receiveMessage, false);
    function receiveMessage(event) {
        if (event.data) {
            var msg;
            try {
                msg = JSON.parse(event.data);
            } catch (err) {
                // Do nothing
            }
            if (!msg)
                return false;

            if (msg.name === 'resize') {
                window.parent.postMessage({
                    sentinel: 'amp',
                    type: 'embed-size',
                    height: msg.data.height
                }, '*');
            }
        }
    }

    var QueryString = function () {
        var query_string = {};
        var query = window.location.search.substring(1);
        var vars = query.split("&");
        for (var i = 0; i < vars.length; i++) {
            var pair = vars[i].split("=");
            if (typeof query_string[pair[0]] === "undefined") {
                query_string[pair[0]] = decodeURIComponent(pair[1]);
            } else if (typeof query_string[pair[0]] === "string") {
                var arr = [query_string[pair[0]], decodeURIComponent(pair[1])];
                query_string[pair[0]] = arr;
            } else {
                query_string[pair[0]].push(decodeURIComponent(pair[1]));
            }
        }
        return query_string;
    }();

    var url = QueryString.url;
    var shortname = QueryString.shortname;

    var disqus_config = function () {
        this.page.url = url;
    };

    (function () {
        var d = document,
            s = d.createElement('script');
        s.src = '//' + shortname + '.disqus.com/embed.js';
        s.setAttribute('data-timestamp', +new Date());
        (d.head || d.body).appendChild(s);
    })();
</script>

上記ファイルを適当なサーバーに置いて、
ブログのあるサーバーからiframeで読み込むんですねー

無料で別ドメインのSSL対応サイトを作るなら?

……………………

…………

ドメインとってSSL証明書もとってって、めっちゃめんどくさいやん(^0^;)

とならないように、Netlifyという公開サービスを使うと、
上記ファイルをドラッグアンドドロップで、3分もかからず設定完了なのでお試しあれ。

Disqus側での設定

最後に自分のDisqusサイト(https://[Disqusで設定したshortname].disqus.com/admin/settings/advanced/)内の、
『Advanced』->『Trusted Domain』に、先ほどの[Disqus用ファイル設置先URL]のドメイン名を追加すれば完成です!!

ちょこっと補足

Disqus公式ブログのAMP導入手順では、identifierも使ってますが、
基本ページURLだけ送ってあげれば、どのページのコメントなのか判断できるため不要です。

なので私は、index.html内のスクリプトでもshortnameとurlしか渡してません。


以上、私のAMPブログコメント対応の記録でしたっ

意外と簡単なので試してみると、たーのしー!!!!!!!
コメント欄は、AMPでの表示テストなどにご活用ください| |д・) ソォーッ