DEV Community

d.yoshimitsu
d.yoshimitsu

Posted on

5 2

静的な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を自動生成する処理を書きました。)

The AI code paradox: Are you stuck?

The AI code paradox: Are you stuck?

AI writes code in seconds. But who verifies it? Manually reviewing all that AI-generated code is where the bottleneck is. Learn how Sonar fuels AI-enabled development while building trust into every line of code.

Learn More

Top comments (0)

Expert strategies for inbox success

Expert strategies for inbox success

Stay on top of critical email deliverability news. Learn from email experts at Deliverability Academy.

Enroll Now