Open5

markdownlintとtextlintでMarkdownを校正する

3w36zj63w36zj6

Node.jsを使用する。

npm init -y

グローバルインストールで使用する場合はpackage.jsonの作成は不要。

3w36zj63w36zj6

markdownlint

https://github.com/DavidAnson/markdownlint-cli2

https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint

npm install -D markdownlint-cli2

.markdownlint-cli2.jsoncを作成する。設定は好みで。

https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md

.markdownlint-cli2.jsonc
{
  "config": {
    "ul-style": {
      "style": "dash"
    },
    "hr-style": {
      "style": "---"
    },
    "code-block-style": {
      "style": "fenced"
    },
    "code-fence-style": {
      "style": "backtick"
    },
    "line-length": false,
    "no-inline-html": false
  }
}

以下のコマンドでmarkdownlintを実行。自動修正をしたい場合は--fixをつける。

npx markdownlint-cli2 docs/

VS Codeでは.vscode/settings.jsonに以下を追加で保存時に自動修正が入る。

{
  "[markdown]": {
    "editor.codeActionsOnSave": {
      "source.fixAll.markdownlint": true
    }
  },
  "markdownlint.run": "onType"
}
3w36zj63w36zj6

textlint

https://github.com/textlint/textlint

npm install -D textlint

textlintはルールを追加してカスタマイズする方式なので、必要なルールをすべて入れる。

.textlintrc.jsonを作成する。設定は好みで。

.textlintrc.json
{
  "plugins": {
    "@textlint/markdown": {
      "extensions": [".md"]
    }
  },
  "rules": {
    "prh": {
      "rulePaths": ["./node_modules/textlint-rule-preset-icsmedia/dict/prh.yml"]
    },
    "preset-jtf-style": {
      "3.1.2.全角文字どうし": false,
      "4.2.7.コロン(:)": false,
      "4.3.1.丸かっこ()": false
    },
    "preset-ja-spacing": {
      "ja-space-around-code": {
        "before": false,
        "after": false
      },
      "ja-no-space-between-full-width": false
    },
    "preset-japanese": true,
    "preset-ja-technical-writing": {
      "max-kanji-continuous-len": false,
      "no-exclamation-question-mark": {
        "allowFullWidthExclamation": true,
        "allowFullWidthQuestion": true
      },
      "no-doubled-joshi": {
        "strict": false,
        "allow": ["も", "や", "か"]
      }
    }
  },
  "filters": {
    "comments": true
  }
}

以下のコマンドでtextlintを実行。自動修正をしたい場合は--fixをつける。

npx textlint docs/

VS Codeでは.vscode/settings.jsonに以下を追加で保存時に自動修正が入る。

.vscode/settings.json
{
  "textlint.run": "onType",
  "textlint.autoFixOnSave": true
}

textlint-rule-preset-ja-spacing

https://github.com/textlint-ja/textlint-rule-preset-ja-spacing

npm install -D textlint-rule-preset-ja-spacing

textlint-rule-preset-ja-technical-writing

https://github.com/textlint-ja/textlint-rule-preset-ja-technical-writing

npm install -D textlint-rule-preset-ja-technical-writing

textlint-rule-preset-japanese

https://github.com/textlint-ja/textlint-rule-preset-japanese

npm install -D textlint-rule-preset-japanese

textlint-rule-preset-jtf-style

https://github.com/textlint-ja/textlint-rule-preset-JTF-style

npm install -D textlint-rule-preset-jtf-style

textlint-rule-prh

https://github.com/textlint-rule/textlint-rule-prh

npm install -D textlint-rule-prh

textlint-rule-preset-icsmedia

https://github.com/ics-creative/textlint-rule-preset-icsmedia

npm install -D github:ics-creative/textlint-rule-preset-icsmedia

textlint-filter-rule-comments

https://github.com/textlint/textlint-filter-rule-comments

npm install -D textlint-filter-rule-comments

textlint-filter-rule-allowlist

https://github.com/textlint/textlint-filter-rule-allowlist

npm install -D textlint-filter-rule-allowlist
3w36zj63w36zj6

npm scripts

package.jsonscriptsにコマンドを追加し、npm runでFormatとLintを行えるようにする。

package.json
{
  "scripts": {
    "format": "markdownlint-cli2 content/ --fix & textlint content/ --fix",
    "lint": "markdownlint-cli2 content/ && textlint content/"
  }
}
3w36zj63w36zj6

GitHub Actions

Pull Requestを開いた際にFormatとLintを行うため、以下の.github/workflows/check-pull-request.ymlを作成する。

.github/workflows/check-pull-request.yml
name: Check Pull Request

on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  check-pull-request:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          ref: ${{ github.head_ref }}
      - name: Install Node.js
        uses: actions/setup-node@v2
        with:
          node-version: 18
          cache: "npm"
      - name: Install Dependencies
        run: npm install
      - name: Lint
        run: npm run lint

https://dev.classmethod.jp/articles/markdown-writing-with-textlint-ci/