GatsbyとGitHub Pagesで作るMarkdownブログ

January 24, 2022      

Gatsbyのセットアップ

以下のコマンドでグローバルにgatsby-cliをインストールする.

npm install -g gatsby-cli

これでgatsbyコマンドが使えるはずだが,もしコマンドが認識されないようなら, gatsby-cliのインストール先にパスが通っていない可能性がある. その場合には,インストール先(C:\Users\username\AppData\Roaming\npm)を環境変数のPathに追加すればよい. インストール先は以下のコマンドでも確認できる.

npm bin -g

gatsbyではstarterと呼ばれる様々なサイトテンプレートが利用できる. 今回はその中から,gatsby-starter-blogを用いてブログのセットアップをする. 以下のコマンドで,blogフォルダ(プロジェクトのルートディレクトリ)内にgatsby-starter-blogのコードが展開される.

gatsby new blog https://github.com/gatsbyjs/gatsby-starter-blog

プロジェクトのルートディレクトリに移動してdevelopコマンドを打つと,開発用サーバーがたてられる. ブラウザからlocalhost:8000にアクセスすると,実際にウェブサイトが表示されるはずだ.

cd blog
gatsby develop

Github Pagesにウェブサイトをデプロイする

GitHub Pagesの機能を用いると,GitHubで管理しているコード・記事を元に,ウェブサイトを公開することが出来る. 公開元として,自由にブランチを指定でき,さらにフォルダをルートまたはdocsフォルダから指定できる.

今やりたいこととしては,ソースコードはGitで監視してmainブランチに置き, ビルド結果は,mainブランチに含めたくないしGitで監視する必要もないので,gh-pagesブランチに置いてウェブサイトの公開だけしたい. npmのgh-pagesパッケージを利用すると,この辺りをうまいことやってくれる.

まずgh-pagesパッケージをグローバルにインストールしておく.

npm install -g gh-pages --save-dev

GitHubでblogリポジトリを新しく作成して,これをリモートリポジトリに指定する.

git remote add origin git@github.com:username/blog.git

ソースコードは普通にmainブランチにpushすればOK. publicフォルダは.gitignoreに指定されているので,Gitには監視されていない.

git push origin main

GitHub Pagesを使ってblogという名前でプロジェクトサイトを作る場合,トップページがこのようなURL(https://username.github.io/blog/)になる. 各ページへのパスを/blog/以下に割り振るために,gatsby-config.jsにpathPrefixを追加して,ビルドする際に—prefix-pathsフラグを入れる.

module.exports = {
  pathPrefix: `/blog`,
}

以下のコマンドでビルドして,publicフォルダ内にファイルが生成されていることを確認する.

gatsby build --prefix-paths

以下のコマンドを打つと,gh-pagesブランチにpublicフォルダの中身がpushされる.

gh-pages -d public

Markdownで数式を使えるようにする

このままだとMarkdownファイルの中で数式が使えないので,gatsby-remark-katexとkatexをインストールする.

npm install gatsby-remark-katex katex

gatsby-starter-blogを使っていると,gatsby-config.jsの中にgatsby-transformer-remarkに関するスクリプトがあるはずなので,そこにgatsby-remark-katexを追加する.

{
  resolve: `gatsby-transformer-remark`,
  options: {
    plugins: [
      {
        resolve: `gatsby-remark-images`,
        options: {
          maxWidth: 630,
        },
      },
      {
        resolve: `gatsby-remark-responsive-iframe`,
        options: {
          wrapperStyle: `margin-bottom: 1.0725rem`,
        },
      },
      `gatsby-remark-prismjs`,
      `gatsby-remark-copy-linked-files`,
      `gatsby-remark-smartypants`,
      {
        resolve: `gatsby-remark-katex`,
        options: {
          // Add any KaTeX options from https://github.com/KaTeX/KaTeX/blob/master/docs/options.md here
          strict: `ignore`
        }
      }
    ],
  },
},

\src\templates\blog-post.jsに以下のスクリプトを追加する.

import "katex/dist/katex.min.css"

図の挿入について

gatsby-starter-blogではMarkdownの書式を用いて,以下のように図を挿入することが出来る.

![figurename](.\figurename.jpg)

ただこの状態では,svgやgifの使用,幅・高さの設定等ができないので,gatsby-remark-static-imagesをインストールして,gatsby-config.jsにスクリプトを追加する.

npm install gatsby-remark-static-images
// gatsby-config.js
plugins: [
  {
    resolve: 'gatsby-transformer-remark',
    options: {
      plugins: [
        'gatsby-remark-static-images'
      ]
    }
  }
]

これでsvgやgifもMarkdownの書式で挿入できるが,さらに図の幅や位置を指定したい場合は,以下のようにHTMLの書式で挿入することが出来る.

<div align="center"><img src=".\figurename.svg" width="300"></div>

Google Analyticsの設定

gatsby-starter-blogにはgatsby-plugin-google-analyticsがインストールされているが,新しいGoogleアナリティクス(GA4)には対応していないようなので,そちらを使用する場合はgatsby-plugin-google-gtagに移行する必要がある.

npm uninstall gatsby-plugin-google-analytics
npm install gatsby-plugin-google-gtag

gatsby-plugin-google-gtagをインストールしたら,gatsby-config.jsのgatsby-plugin-google-analyticsに関する記述は削除して,以下のスクリプトを追加する.

{
  resolve: `gatsby-plugin-google-gtag`,
  options: {
    trackingIds: ["G-XXXXXXXXXX"],
    gtagConfig: {
      anonymize_ip: true,
    },
    pluginConfig: {
      head: true,
    },
  },
},