💨

Re:VIEWに入門する

2024/11/23に公開

こんばんは、ここあです。
今回は、技術系同人誌の執筆によく使われている(らしい)、Re:VIEWというものを導入してみます。

dockerが事前に導入されているものとし、爆速で終わらせます。

プロジェクトの作成

Re:VIEWのdockerイメージが配布されているので、これを利用することにします。

docker run -t --user $(id -u):$(id -g) -w /book --rm -v $(pwd):/book vvakame/review:5.8 /bin/bash -ci "review-init sample"

実行したら潜って中身を見てみます。

cd sample
ls -l

total 92
-rw-r--r-- 1 xxxxxx xxxxxx 24928 1123 22:35 book.pdf
-rw-r--r-- 1 xxxxxx xxxxxx    52 1123 22:34 catalog.yml
-rw-r--r-- 1 xxxxxx xxxxxx 22984 1123 22:34 config.yml
drwxr-xr-x 2 xxxxxx xxxxxx  4096 1123 22:34 doc
-rw-r--r-- 1 xxxxxx xxxxxx    64 1123 22:34 Gemfile
drwxr-xr-x 2 xxxxxx xxxxxx  4096 1123 22:34 images
drwxr-xr-x 3 xxxxxx xxxxxx  4096 1123 22:34 lib
-rw-r--r-- 1 xxxxxx xxxxxx    66 1123 22:34 Rakefile
-rw-r--r-- 1 xxxxxx xxxxxx     2 1123 22:34 sample.re
drwxr-xr-x 2 xxxxxx xxxxxx  4096 1123 22:34 sty
-rw-r--r-- 1 xxxxxx xxxxxx  8056 1123 22:34 style.css

設定

後々のために、本当にちょっとだけいじります。
原稿置き場を変えるだけ。

Re:VIEWプロジェクトの設定はconfig.ymlを利用します。

config.yml
# reファイルを格納するディレクトリ。省略した場合は以下 (. はカレントディレクトリを示す)
- # contentdir: .
+ contentdir: articles

原稿置き場を変えたので、ディレクトリを用意し、もとからある原稿を移動しておきます。

mkdir articles
mv sample.re articles/

原稿をPDFにするには、次のコマンドです。

docker run -t --user $(id -u):$(id -g) -w /book --rm -v $(pwd):/book vvakame/review:5.8 /bin/bash -ci "rake pdf"

プロジェクト直下にbook.pdfができているはずです。

おしまい。

textlintの導入

ついでなので、 textlintを入れます。
文書校正のためのツールです。

docker run -t --user $(id -u):$(id -g) -w /book --rm -v $(pwd):/book node:23.3.0-alpine3.20 /bin/sh -ci "npm install -D textlint-plugin-review textlint-rule-preset-ja-technical-writing textlint-rule-prh"

導入したら、初期化して設定ファイルを生成します。

docker run -t --user $(id -u):$(id -g) -w /book --rm -v $(pwd):/book node:23.3.0-alpine3.20 /bin/sh -ci "npx textlint --init"

.textlintrc.jsonが生成されています。

.textlintrc.json
{
  "plugins": {
    "review": true
  },
  "filters": {},
  "rules": {
    "preset-ja-technical-writing": true,
    "prh": true
  }
}

このままでも良いのですが、少しいじります。
prhというディレクトリを作成し、ここに辞書を入れていくことにします。
今回はこれをお借りすることにします。

mkdir prh
wget -O prh/ruleset.yml https://raw.githubusercontent.com/TechBooster/ReVIEW-Template/refs/heads/master/prh-rules/media/WEB%2BDB_PRESS.yml

そしたら、.textlintrc.jsonにルールを追加してあげます。

.textlintrc.json
{
  "plugins": {
    "review": true
  },
  "filters": {},
  "rules": {
    "preset-ja-technical-writing": true,
-    "prh": true
+    "prh": {
+      "rulePaths": [
+        "./prh/rules.yml"
+      ]
+    }
  }
}

textlintを試す前に、もともと存在している原稿を修正しておきます。

sample.re
+ = テスト
+
+ファイアウォール
+ファイアーウォール

そしたら、textlintを実行してみます。

docker run -t --user $(id -u):$(id -g) -w /book --rm -v $(pwd):/book node:23.3.0-alpine3.20 /bin/sh -ci "npx textlint **/*.re"

/book/articles/sample.re
  4:1  ✓ error  ファイアーウォール => ファイアウォール  prh
  4:9  error    文末が"。"で終わっていません。          ja-technical-writing/ja-no-mixed-period

✖ 2 problems (2 errors, 0 warnings)
✓ 1 fixable problem.

また、自動で修正したい場合には 以下のように --fixをつけると、修正可能な範囲で修正してくれます。

docker run -t --user $(id -u):$(id -g) -w /book --rm -v $(pwd):/book node:23.3.0-alpine3.20 /bin/sh -ci "npx textlint --fix **/*.re"

/book/articles/sample.re
  4:1  ✔   ファイアーウォール => ファイアウォール  prh

✔ Fixed 1 problem
✖ Remaining 1 problem

GitHub Actions

GitHubに上げたときに、自動で校正とPDF出力をするようにします。
めんどくさいのでブランチはmain一刀流です。

mkdir .github/workflows

そしたら、 .github/workflows/main.ymlに枠フローを書いていきます。

ワークフローの中身
main.yml
name: Lint and Build Workflow

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  # textlintを実行するジョブ
  textlint:
    runs-on: ubuntu-latest

    steps:
      # リポジトリをクローン
      - name: Checkout code
        uses: actions/checkout@v3

      # Node.jsをセットアップ
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 23

      # 必要なパッケージをインストール
      - name: Install dependencies
        run: npm install

      # textlintを実行
      - name: Run textlint
        run: npx textlint "**/*.re"

  # pdfmakerを実行するジョブ
  pdfmaker:
    runs-on: ubuntu-latest
    container: vvakame/review:5.8

    steps:
      # リポジトリをクローン
      - name: Checkout code
        uses: actions/checkout@v3

      # 必要なパッケージをインストール
      - name: Install dependencies
        run: bundle install

      # PDFを生成
      - name: Generate PDF with Re:View
        run: rake pdf

      # 生成したPDFをアーティファクトとして保存
      - name: Upload PDF artifact
        uses: actions/upload-artifact@v3
        with:
          name: generated-pdf
          path: ./book.pdf

これをGitHubにpushすると、textlintが失敗し、勝手にPDFが出力されました。

GitHubで編集を提案

Discussion