DEV Community

d.yoshimitsu
d.yoshimitsu

Posted on

静的なWebサイトをMarkdownで作りたい

やりたかったこと

簡単にWebサイトを作って公開したかった。

ただし

  • Markdownで書きたい(生のHTMLは書きたくない)
  • 好きなCSSを当てたい

※1 CSSにこだわらなければVS Codeのプラグインを使ってHTMLやPDFを吐き出すのが早くて簡単です。
※2 Blogが書きたいのであればHugoとかJekyll、GatsbyJSを検討してください。

というわけで

  • Markdownでコンテンツを書いた。
  • Markdown -> HTML変換するJavaScriptライブラリ(Marked)を選んだ。

悩んだこと

ググってもQiitaみたいに動的にMarkdownをHTMLに変換する方法しか出てこなかった。
Markdownで書かれたコンテンツをHTMLで読み込んで表示する方法がわからない。
ということをぼんやりつぶやいたら神が現れた。圧倒的感謝🙏

コードとその内容

教えて頂いたコードとその理解を備忘録として残しておきます。
markedのreadmeに書かれている箇所は割愛させていただきます。

全体

<!doctype html>
<html>
  <head>
    <meta charset="utf-8"/>
    <title>Marked in the browser</title>
  </head>
  <body>
    <div id="content"></div>

    <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
      axios.get('./content.md')
        .then(response => document.querySelector('#content').innerHTML = marked(response.data));
    </script>
  </body>
</html>

要点1

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

Promise based HTTP client for the browser and node.js

axios非同期なHTTPクライアントです。

要点2

axios.get('./content.md')

markdownファイルをGET Methodで取得しています。

要点3

.then(response => document.querySelector('#content').innerHTML = marked(response.data));

重要なのは.then();の部分です。
axiosは非同期なのでgetの成功を待つためにthenを使用します。
上記のコードではgetしたresponseからdataを取り出しています。
取得したMarkdownに対して何かを行う場合はthenの中に処理を書きます。
(私はTocbotを使用してtocを自動生成する処理を書きました。)

Top comments (0)