Markdownファイルのサポート

はじめに

ブログのコンテンツに Markdown ファイルを使用する方法を記述します。   具体的な方法は、Gatbyの公式サイトにあるチュートリアルに紹介されています。
この内容に沿って、TypeScript を使って機能を盛り込んで行きます。

主な手順

Markdown ファイルをサポートするためには以下のことが必要になります。

  • Markdown 用プラグインの導入
  • gatsby-config.jsへのプラグイン使用のための記述追加
  • Markdown ファイルをHTMLに変換しページとして追加する処理の記述
  • 変換後のHTMLを表示するReactコンポーネントの記述

Markdown用プラグインの導入と有効化

必要なパッケージのインストール

今回インストールするパッケージは以下になります。

パッケージ名役割
gatsby-transformer-remarkGatsby上で Markdown ファイルをパースしてHTMLファイルを生成するプラグイン。
ts-nodenode.js上でTypeScriptを実行できるようにするもの。

例によって yarn でインストールします。

yarn add gatsby-transformer-remark ts-node

gatsby-configへのプラグインの記述

インストールしたプラグインを使用できるようにgatsby-config上に記述します。 このプラグインにはオプションがありますが、とりあえずはデフォルトのまま記述しておくことにします。

// ./gatsby-config.js
module.exports = {
  ...
  plugins: [
    ...
    {
      resolve: `gatsby-transformer-remark`,
      options: {
        // CommonMark mode (default: true)
        commonmark: true,
        // Footnotes mode (default: true)
        footnotes: true,
        // Pedantic mode (default: true)
        pedantic: true,
        // GitHub Flavored Markdown mode (default: true)
        gfm: true,
        // Plugins configs
        plugins: [],

      },
    },
    ...
  ],
}

これで必要なパッケージの組み込みができました。

Markdownファイルからのページ追加

Gatsby でページを追加するには、主に以下の2通りの方法があります。

  1. '/src/pages'直下にファイルを置きそこに React コンポーネントを配置
  2. GatsbycreatePage というAPIを使用してページを追加

因みに2については、ページネーションやタグによるコンテンツのグループ化など論理的にURLを作成する場合にも使用します。

Gatby APIを実装する

Gatsby API を実装する場合は、gatsby-node.js ファイルにて所定の関数を実装します。
TypeScript の場合は、ts-node を用いて直接TypeScriptで記述していきます。

実際に実装するAPIは以下の2つです。

  • createPages
  • onCreateNode

上記API用に以下の2ファイルを作成します。

  • createPage.ts
  • onCreateNode.ts

gatsby-helpers というディレクトリを作成し、その下に以下のように配置します。

├── src
│   ├── gatsby-helpers
│   │   ├── createPages.ts
│   │   └── onCreateNode.ts

GatsbyConfig ファイル関連をTypeScriptで扱えるようにする方法がここで紹介されていました。 基本的には、gatsby-node.js に以下の記述を行い、そこからTypeScriptの関数を繋いでいくような流れになります。

require('ts-node/register')

gatsby-node.jsでの実装

上記を踏まえ gatsby-node.js での記述は以下の様になります。

// ./gatsby-node.js
require('ts-node/register');

exports.createPages = require('./src/gatsby-helpers/createPages').createPages;
exports.onCreateNode = require('./src/gatsby-helpers/onCreateNode').onCreateNode;

長くなってきたので、残りは次回に記述します。

おわりに

ここまでの作業で、TypeScriptGatsby API を実装する準備が整いました。
この後、onCreateNodecreatePages を実装していきます。