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

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

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

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

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

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

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している理由は以下の記事で触れています。

実際にやった修正方法

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生成だけであれば今回の構成で安定稼働しています。

同人誌GitHub,Re:VIEW

Posted by ipusiron