1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GitHubActions を使ってAsciiDocをPDFで出力する

Posted at

はじめに

  • Asciidocで書いたドキュメントを提供する方法としてGitHubActionsを使ってPDF化して提供することを業務で行った
  • GitHubActionsは他のチームが書いたものを模倣して作成したため、理解できていない。次に前にやったことありますよね?と言われてもきっとできない。
    と思ったので、整理しておこうと思う。

やったことのサマリ

  • GitHubのリポジトリからフォルダ/.github/workflowsを作成して、そこにYamlファイルを作成した
  • Yamlファイルには、PDF出力するためのフローの定義を書いた
  • リポジトリ内にscriptsフォルダを作成して、フローから呼び出しを行い実行するためのgen.shを作成した
    • gen.shでなくても、直接フローに書いても良いみたいだったが、inputファイルとするAsccidocファイルと出力するPDFファイル名をパラメータにして'asciidoctor-pdf'を実行した
  • フローを定義する中でGemfileを使ったパッケージのインストールがあるため、リポジトリの直下にGemfileを作成してasciidoctorasciidoctor-pdfasciidoctor-pdf-cjkを定義
  • GitHub Actions からJobを実行して、エラーになったりした内容を確認して、修正しては実行して、PDF出力できた。

実際にやった内容は以下(困ったことと対応したことも)

  • GitHub Actionでは、リポジトリの配下にフォルダ作成して、Yamlファイルを配置する。

    • フォルダの作成は、【Add file】から【Create new file】を選択
      image.png

    • ファイル名の代わりに【フォルダ名 + /】と入力するとフォルダとして認識してもらえる

      • フォルダパスを入力した後、作成したいYamlファイル名を入力して作成する
        image.png
    • 上記の手順を実施すると、フォルダの作成と空のファイルが作成される

      • ここで一度、Commitしてからファイルを登録しても良いが、今回は作成したまま次のフロー定義を記述していく。
  • 作成したYamlファイルにPDF出力するためのフロー定義を記述する

PdfOutput.yml(最初に登録した内容)
# ワークフロー名を設定する
name:  Generate PDF
# ワークフローのトリガー設定
on:
  workflow_dispatch:

# ワークフローの実行内容の定義
jobs:
  CreatePDF:          # Jobの名前
    # 実行する場所の指定
    runs-on: ubuntu-latest
    # ワークフローで実施するフローの流れ      
    steps:
      # チェックアウト
      - name: Checkout
        uses: actions/checkout@v2

      # 環境を整える、AsciiDoctorとBundlerをインストール
      - name: Install asciidoctor           # 実行時に出てくる処理の名前
        run: |
          apt-get update
          apt-get install asciidoctor -y
          gem install bundler -N
          bundle install
      - name: Generate PDF         # 実行時に出てくる処理の名前
        run: |
          chmod +x scripts/gen.sh
          scripts/gen.sh
      - name: Archive files                 # 実行時に出てくる処理の名前
        uses: actions/upload-artifact@v2    # 圧縮する
        with:
          name: MAP_PDF
          path: |
            build
          retention-days: 30       # 保存期間 : 30日間

困ったこと1

”#” でコメントを書くことができるのですが、♯(環境依存文字?)への変換がされていたりして、コンパイルが通らず、苦戦した
できるだけ、コピペとかはせずに、入力することで回避したけど、何かうまい方法があれば知りたい。。。💦

困ったこと2

Install asciidoctorを実行したら open (13: Permission denied)とエラーになり権限がないとのこと
コマンド実行する前に、sudoを付けて実行するように修正しました

PdfOutput.yml(最終的に動作確認できた内容)
# ワークフロー名を設定する
name:  Generate PDF
# ワークフローのトリガー設定
on:
  workflow_dispatch:

# ワークフローの実行内容の定義
jobs:
  CreatePDF:          # Jobの名前
    # 実行する場所の指定
    runs-on: ubuntu-latest
    # ワークフローで実施するフローの流れ      
    steps:
      # チェックアウト
      - name: Checkout
        uses: actions/checkout@v2

      # 環境を整える、AsciiDoctorとBundlerをインストール
      - name: Install asciidoctor           # 実行時に出てくる処理の名前
        run: |
          sudo apt-get update
          sudo apt-get install asciidoctor -y
          sudo gem install bundler -N
          sudo bundle install
      - name: Generate PDF         # 実行時に出てくる処理の名前
        run: |
          chmod +x scripts/gen.sh
          scripts/gen.sh
      - name: Archive files                 # 実行時に出てくる処理の名前
        uses: actions/upload-artifact@v2    # 圧縮する
        with:
          name: MAP_PDF
          path: |
            build
          retention-days: 30       # 保存期間 : 30日間

  • 上記のYamlの中で呼び出すと記載したgen.shをリポジトリ直下にscriptsフォルダを作成して配置しました。
    image.png

  • gen.shの内容は、以下で作成しました。

#!/bin/sh

# PDF
bundle exec asciidoctor-pdf -a scripts=cjk -a pdf-theme=default-with-fallback-font docs/JapaneseMap.adoc -o build/Japnese-Map.pdf

困ったこと3

GitHubActionsはLinux上で動いているんですね…💦
大文字、小文字を明確に判別しているので、docs/JapaneseMap.adocファイルが存在しないと怒られ、エラーになった。
よくよく見たら、Docs/JapaneseMap.adoc だったので、以下のように修正しました。

#!/bin/sh

# PDF
bundle exec asciidoctor-pdf -a scripts=cjk -a pdf-theme=default-with-fallback-font Docs/JapaneseMap.adoc -o build/Japnese-Map.pdf
  • リポジトリの直下にGemfileファイルを作成して以下の3つのパッケージをインストールできるようにします。
    • asciidoctor
    • asciidoctor-pdf
    • asciidoctor-pdf-cjk

実際に書いた内容は以下

# frozen_string_literal: true

source 'https://rubygems.org'

git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }

gem "asciidoctor"
gem "asciidoctor-pdf"
gem "asciidoctor-pdf-cjk"
  • GitHub Actionsを開くとyamlファイルで定義したGenerate PDFが表示さていることを確認
    image.png

  • Generate PDFをクリックすると、イベントトリガーを選択することができます。
      image.png

  • Run workflowのプルダウンを選択すると、実行ボタンRun workflowが出てくるので、クリックして実行します。
      image.png

  • 実行がうまくいくと、以下のような感じでPDFをarchiveしたファイルMAP_PDF が出来上がるので、DLとするとPDFファイルを見ることができるようになります。
      image.png

まとめ

  • GitHubはLinuxで動いているので、フォルダやファイルの名前、バッチ名など、大文字小文字をしっかり判別するので、作成するときには、しっかりと意識して作成しないとダメなんですね。
  • Yamlファイルで使えるコメント行を意味する"#"は、環境依存文字とかにならないようにしっかり半角"#"を選択しないと実行業と判断されて処理がエラーになってしまうので、慎重にコーディングしないとダメなんですね。
  • Yamlファイルを書く際、実行環境を整えるためにapt-getなどの実行をする必要があり、『これはおまじないです』って聞いていたが実際には権限が無くて、エラーになったw
    • sudo コマンドで権限付与して難を乗り越えたが、一般ユーザーにインストール権限がないことを意識して、環境として設定しておくのか、WorkFlowを定義する都度、コマンドとして書くかは考えないとですね。
      • 個人で使っている分には、sudoでいい気がする
  • Github Actionsでの実行とは少し異なるが、一つ目の内容と同じことはasciidocを書く際にも同じことが言える
    • PDF化するにあたって、表紙となるadocファイルを準備して、複数のadocファイルを連結するためインポートを行ったり、
    • また、各adocファイルの中で、画像ファイルなど読み込んでいる。
    • Visual Studio Code(Windows環境)でドキュメントを書いているときには気にならなかったが、やはり、ファイル連結するためにShellから起動しているので、大文字小文字はしっかり判別されるので、注意が必要!
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?