当サイトの一部ページには、アフィリエイト・アドセンス・アソシエイト・プロモーション広告を掲載しています。

Amazonのアソシエイトとして、Security Akademeiaは適格販売により収入を得ています。

広告配信等の詳細については、プライバシーポリシーページに掲載しています。

消費者庁が、2023年10月1日から施行する景品表示法の規制対象(通称:ステマ規制)にならないよう、配慮して記事を作成しています。もし問題の表現がありましたら、問い合わせページよりご連絡ください。

参考:令和5年10月1日からステルスマーケティングは景品表示法違反となります。 | 消費者庁

GitHub ActionsでRe:VIEWを自動ビルドする方法【ミジンコ環境向け】

2026年2月17日

Re:VIEWで作った同人誌の原稿を、ローカルで手動ビルドしてPDFファイルを生成していました。
その一方で、GitHubにpushしたときにGitHub Actionsでビルドが失敗したという通知が毎回届いていました。
同人誌は頒布する上で特に支障はありませんでしたが、気持ちが悪かったのでGitHub Actionsが正常に動作するように修正しました。
この記事では、実際に自動ビルドを成功させた構成を、最小限かつ確実に再現できる形で記録しておきます。

やりたいこと

  • Re:VIEW原稿を含むリポジトリにpushしたら、自動でPDFをビルドする。
  • 表紙PDFも含めてローカルと同じ出力結果にする。
  • GitHub ActionsのArtifactsからダウンロードできるようにする。
push時の自動ビルド失敗通知

前提

  • Re:VIEW 5.xでPDF出力する原稿群が"articles"ディレクトリー内にに配置されている。
  • 手元ではdocker runコマンドでビルドが成功している。

ミジンコの手動ビルド方法

Ubuntu(WSL)でカレントディレクトリーをarticlesディレクトリーにしておき、以下のdocker runコマンドを実行して手動ビルドしていました。

$ docker run --rm -v `pwd`:/work vvakame/review:5.0 /bin/sh -c "gem install unicode-display_width && cd /work && review-pdfmaker config.yml"

なお、unicode-display_widthをgem intallしている理由は以下の記事で触れています。

ミジンコ仕様のbuild.xml【2026年2月版】

name: Build Re:VIEW with Docker

# ────────────────────────────────
# トリガー設定:push時に自動ビルドを実行
# ────────────────────────────────
on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    # Re:VIEW公式Dockerイメージを使用
    container:
      image: vvakame/review:5.9

    steps:
      # ────────────────────────────────
      # ① ソースコードをチェックアウト(LFSなし)
      #    vvakame/reviewコンテナにはgit-lfsが未導入なので、ここではLFSは無効。
      # ────────────────────────────────
      - name: Checkout
        uses: actions/checkout@v4

      # ────────────────────────────────
      # ② config.ymlからbooknameを自動取得し、config-ebook_pdf.ymlも更新
      #    - config.ymlのbooknameを唯一の情報源として使用
      #    - config-ebook_pdf.ymlはCI環境内で一時的に書き換えるだけ
      #      (リポジトリにはコミットされない。ジョブ終了時に破棄される)
      #    - 新規プロジェクト作成時はconfig.ymlのbooknameのみ変更すればOK
      # ────────────────────────────────
      - name: Extract bookname and sync ebook config
        run: |
          BOOKNAME=$(grep '^bookname:' articles/config.yml | awk '{print $2}')
          echo "BOOKNAME=$BOOKNAME" >> $GITHUB_ENV
          echo "Detected bookname: $BOOKNAME"
          # CI環境内でのみconfig-ebook_pdf.ymlを一時的に更新(リポジトリには影響しない)
          sed -i "s/^bookname:.*$/bookname: ${BOOKNAME}_ebook/" articles/config-ebook_pdf.yml

      # ────────────────────────────────
      # ③ git-lfsをインストールしてLFS実体を取得
      #    LFSポインタファイル(実体でないテキスト)による画像破損を防ぐ。
      # ────────────────────────────────
      - name: Install git-lfs and fetch LFS objects
        run: |
          set -eux
          apt-get update
          apt-get install -y git-lfs
          # コンテナ環境での安全ディレクトリ設定
          git config --global --add safe.directory "$GITHUB_WORKSPACE"
          git lfs install
          git lfs pull

      # ────────────────────────────────
      # ④ Re:VIEWビルドに必要なgemを追加
      #    unicode-display_widthは出力時の幅調整に必要。
      # ────────────────────────────────
      - name: Install required gem
        run: gem install unicode-display_width

      # ────────────────────────────────
      # ⑤ 表紙PDFを所定位置にコピー
      #    articles/images/cover-b5.pdf → articles/cover-b5.pdf
      # ────────────────────────────────
      - name: Copy cover image for build
        run: cp articles/images/cover-b5.pdf articles/cover-b5.pdf

      # ────────────────────────────────
      # ⑥ 古い補助ファイルを削除
      #    壊れた画像や前回生成済みのxbbを残すとBoundingBoxエラーになるため。
      # ────────────────────────────────
      - name: Clean aux & old xbb
        run: |
          set -eux
          cd articles
          find . -name '*.xbb' -delete
          rm -f __REVIEW_BOOK__.* *.aux *.toc *.out *.log || true

      # ────────────────────────────────
      # ⑦ PNG画像のBoundingBox情報(.xbb)を事前生成
      #    extractbbコマンドはvvakame/reviewイメージに含まれている。
      # ────────────────────────────────
      - name: Pre-generate BoundingBox for PNGs
        run: |
          set -eux
          cd articles
          if [ -d images ]; then
            find images -type f -iname '*.png' -print0 | xargs -0 -I{} extractbb -O "{}"
          fi

      # ────────────────────────────────
      # ⑧ 印刷所入稿用PDF(トンボあり)を生成
      # ────────────────────────────────
      - name: Build PBOOK_PDF
        working-directory: articles
        run: review-pdfmaker config.yml

      # ────────────────────────────────
      # ⑨ 入稿用PDFを成果物としてアップロード
      # ────────────────────────────────
      - name: Upload PBOOK_PDF
        uses: actions/upload-artifact@v4
        with:
          name: Book PBOOK_PDF
          path: articles/${{ env.BOOKNAME }}.pdf

      # ────────────────────────────────
      # ⑩ 読者配布用PDF(トンボ無し)を生成
      # ────────────────────────────────
      - name: Build EBOOK_PDF
        working-directory: articles
        run: review-pdfmaker config-ebook_pdf.yml
        
      # ────────────────────────────────
      # ⑪ 配布用PDFを成果物としてアップロード
      # ────────────────────────────────
      - name: Upload EBOOK_PDF
        uses: actions/upload-artifact@v4
        with:
          name: Book EBOOK_PDF
          path: articles/${{ env.BOOKNAME }}_ebook.pdf

      # ────────────────────────────────
      # ⑫ 失敗時のTeXログがあればアップロード
      #    LaTeXエラーの原因特定に役立つ(最初の LaTeX Error: 行を確認)。
      # ────────────────────────────────
      - name: Upload TeX logs
        if: failure()
        uses: actions/upload-artifact@v4
        with:
          name: review-logs
          path: |
            articles/__REVIEW_BOOK__.log
            articles/__REVIEW_BOOK__.dvi
            articles/__REVIEW_BOOK__.aux
            articles/__REVIEW_BOOK__.toc
            articles/*.log
          if-no-files-found: ignore

実際にやった修正方法【2025年7月時点】

1:デフォルトの".github/workflows/on_push.yml"ファイルをリネームしてバックアップする

Re:VIEW Templateに用意されているGitHub Actionsの定義ファイルは"on_push.yml"ファイルです。

ステップ2で別の定義ファイルを使うので、デフォルトの定義ファイルはバックアップしておきます。

$ git mv .github/workflows/on_push.yml .github/workflows/on_push.yml.bak

単純に自動ビルドがうざいだけであれば、ステップ1の作業だけで終わります。
もちろんリネーム後はpushしてください。

2:".github/workflows/build.yml"ファイルを作成する

name: Build Re:VIEW with Docker

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    container:
      image: vvakame/review:5.8

    steps:
      - uses: actions/checkout@v3

      - name: Install required gem
        run: gem install unicode-display_width

      - name: Copy cover image
        run: cp articles/images/cover-b5.pdf articles/cover-b5.pdf

      - name: Build PDF
        run: review-pdfmaker config.yml
        working-directory: articles

      - name: Upload PDF
        uses: actions/upload-artifact@v4
        with:
          name: Book PDF
          path: articles/book_Caesar.pdf

cover-b5.pdf が".gitignore"ファイルによって無視される場合でも、GitHub Actionsでのビルドに必要なため、強制的にGitに登録しておきます。
git add -f articles/images/cover-b5.pdf
git commit -m “Add cover-b5.pdf for CI build"
git push

将来の破壊的変更回避のため、GitHub Actionsのバージョン指定を明示しています。
使用しているAction(例:actions/checkout, actions/upload-artifact)は@v4の安定版を使っています。

3:出力物に表紙PDFを含めないように".gitignore"ファイルを調整する

“.gitignore"ファイルに「*.pdf」の指定があると、表紙PDFの"cover-b5.pdf"がGitの管理対象外になってしまいます。

次のように例外指定しておきます。

(略)

*.pdf
articles/*.pdf
!articles/images/cover-b5.pdf

(略)

4:成果物(Artifacts)の確認する

GitHub の「Actions」タブから、ビルドが成功しているワークフローを選択します。

画面下部の「Artifacts」セクションから「Book PDF」をダウンロードします。

解凍すると"book_Caesar.pdf"ファイルが得られます。

【おまけ】EPUB出力にも対応させる

Re:VIEWではPDF出力だけでなくEPUB出力もできます。

PDF出力の場合は「review-pdfmaker config.yml」のように実行していましたが、EPUB出力では「review-epubmaker config.yml」のように実行するだけです。

以下はPDF・EPUB両対応版の"build.yml"ファイルです。「Build EPUB」「Upload EPUB」が増えています。

name: Build Re:VIEW with Docker

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    container:
      image: vvakame/review:5.8

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Install required gem
        run: gem install unicode-display_width

      - name: Copy cover image for build
        run: cp articles/images/cover-b5.pdf articles/cover-b5.pdf

      - name: Build PDF
        run: review-pdfmaker config.yml
        working-directory: articles

      - name: Build EPUB
        run: review-epubmaker config.yml
        working-directory: articles
        
      - name: Upload PDF
        uses: actions/upload-artifact@v4
        with:
          name: Book PDF
          path: articles/book_Caesar_concise.pdf

      - name: Upload EPUB
        uses: actions/upload-artifact@v4
        with:
          name: Book EPUB
          path: articles/book_Caesar_concise.epub
Git Actionで自動ビルドに成功した

PUB出力が不要であればカットしてください。それだけビルド時間を短縮できます。

おわりに

Re:VIEWのビルドをGitHub Actions上で安定させるには、地味ながら正確なパスや".gitignore"フィあるの扱いが鍵になります。

PDF生成だけであれば今回の構成で安定稼働しています。