旅行前日の深夜にGitHub Actionsで予約管理用のPDF生成workflowを作った話

はじめに

この記事はU-NEXTアドベントカレンダー3日目の記事です。

7月に3週間の休暇をいただき、イタリア、イギリス、フランスに行ってきました!

羽田 → ドーハでトランジット🇶🇦 → ローマ3泊🇮🇹 → フィレンツェ3泊🇮🇹 → ヴェネチア2泊🇮🇹 → ミラノ1泊🇮🇹 → オックスフォード1泊🇬🇧 → ロンドン2泊🇬🇧 → パリ5泊🇫🇷 → ドーハでトランジット&観光🇶🇦 → 羽田

3週間の旅行ということで、ホテルも8か所(各都市1か所、パリが2か所)、新幹線や飛行機、ユーロスター、各名所や美術館の予約管理が大変です。

それぞれ予約サイトが違い、各々の形でメールで予約番号や日時が送られてきていて複雑だったので
それを管理するためにPDFを作成して、一緒に旅行に行った人とLINEで共有していました。

ただ、旅行までに全予約を取っていたわけではなかったので、
旅行先で予約を取った場合にそのPDFに追記をしたいタイミングがくると思いました。ただ、iPhoneからPDFを直接編集する方法がすぐにはわからず、、

そんなことを出発前日の夜中に思いついてしまったため、大急ぎで
iPhoneアプリからとあるファイルを編集するだけでPDFが自動生成される仕組み
を作ってみました。

やりたかったこと

  • 旅行中のスケジュールをPDFで管理したい

  • iPhoneでPDFを直接編集するのは難しい...

  • でも、iPhone一台で手軽にスケジュールを更新したい

多分分かる人からしたら「そんなことせずにiPhone一つでPDF作れるぜ」という声が上がる気がします。でもちょうど仕事でPDF生成のworkflowを作ったばっかりなのでprivateでもやってみたかったのです。

どう解決したか

GitHub ActionsのWorkflowを使って、iPhoneのGitHubアプリからMarkdownファイルを編集しコミットすると自動的にPDFが生成される仕組みを作りました。

使った技術

  • GitHub Actions(ワークフロー管理)

  • Pandoc(Markdown → PDF変換)

  • XeLaTeX(日本語対応のTeX処理系)

  • GitHubアプリ(iPhoneからの編集用)

実装編

実際のworkflowが以下です。

name: Europe

on: [push, workflow_dispatch]

permissions:
  contents: write

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    # 1) ソース取得
    - uses: actions/checkout@v4

    # 2) ツールをインストール
    - name: Install toolchain
      run: |
        sudo apt-get update -qq
        sudo apt-get install -y \
          pandoc texlive-xetex texlive-latex-extra \
          texlive-fonts-recommended fonts-noto-cjk

    # 3) Markdown → PDF
    - name: Build Europe.pdf
      run: |
        pandoc Europe.md \
          --pdf-engine=xelatex \
          -V mainfont="Noto Sans CJK JP" \
          -V colorlinks=true \
          -V linkcolor=cyan \
          -V urlcolor=cyan \
          --metadata=title:"ヨーロッパ旅行日程表" \
          -o Europe.pdf

    # 4) アーティファクトとしてアップロード
    - uses: actions/upload-artifact@v4
      with:
        name: europe-itinerary
        path: Europe.pdf

    # 5) リポジトリにpush
    - run: |
        mkdir -p docs && cp Europe.pdf docs/
    - uses: stefanzweifel/git-auto-commit-action@v5
      with:
        commit_message: 'chore: update PDF [skip ci]'
        branch: ${{ github.ref }}
        file_pattern: docs/Europe.pdf
        skip_fetch: true
        push_options: '--force-with-lease'

やってることはシンプル

1. ソースコードを取得
GitHub Actionsのランナーにリポジトリをチェックアウト

2. ツールをインストール

  • Pandoc(Markdownをいろんな形式に変換できる便利なやつ)

  • XeLaTeX(日本語が使えるTeX処理系)

  • 日本語フォント(Noto Sans CJK。これがないと文字化けする)

3. Markdown → PDF変換

  • `Europe.md`を元にPDFを生成

  • リンクを青色(cyan)にして、タップできるようにする

  • PDFのタイトルは「ヨーロッパ旅行日程表」に

4. アーティファクトにアップロード
生成したPDFをGitHub Actionsのアーティファクトとして保存。
ワークフローの実行ページから後でダウンロードできます。

5. リポジトリに自動コミット
生成したPDFを自動でコミット・プッシュ。

外部ファイルの扱い方

  • 予約確認書: QRコードとか入ってる予約確認書は、Google Driveのマイドライブに保存して、共有リンクをMarkdownに貼っておく

  • 地図: Googleマップの共有リンクを使えば、タップするだけで地図アプリが開く

  • メモ: 「ドレスコードあり」とか注意事項も一緒に書いておく

生成されたPDFは、リンクをタップすればすぐに地図や予約確認書にアクセスできるので、現地で迷子になったりもたつくこともなかったです。

絵文字を使って各国の国旗を載せたり、ホテル・遺跡・美術館を表したりしたかったのですが、絵文字をうまく扱える方法が深夜には見つけられなかったので断念… 次回の海外旅行までにはなにか探すか… 

まとめ

正直、最初は「こんなの本当に使うのか?」「早く寝たほうがいいんじゃないか」って思ってたんですが、実際に使ってみるとめちゃくちゃ便利でした。

さて、明日はsaikiさんによる「真剣に一年間個人開発してみた感想:KMP&CMP・AI Coding agent」が公開されます。ぜひお楽しみに!
また明日も(それ以降も)U-NEXTのアドベントカレンダーをよろしくお願いします!

おまけ

以下はおまけ。旅行の写真を少し載せています。

イタリア

10日間いたけどずっと天気が良くて最高でした。
「イタリアの名所思い浮かべて」と言われて名前が上がるところはだいたい行けたと思う。
パスタもジェラートも美味しすぎるし、町並みも遺跡も教会も綺麗すぎた。
各地の人も陽気に話しかけてくれてほんとに楽しかった。また行きたい。

なんでもない町並みが綺麗すぎるローマ
太麺のスパゲティなど、パスタが全部うまい
超景色いいフィレンツェのカフェ
よく見る絵の本物は綺麗すぎた
ブラーノ島(ヴェネチアの離島)霧が濃いから家がわかりやすいようにカラフルらしい
6年間のうち数ヶ月しか公開しないウィトルウィウス的人体図が偶然見れた
最後の晩餐

イギリス

イタリアと比べてとても都会だった。
オックスフォード大学の大学寮に泊まれる機会があり、とてもレアな体験ができて良かった。ただ、イギリス3泊だったのにスーツケースが2日遅れてしんどかった。
でも、ポジティブに言えば非常に身軽に楽しめた。財布はあったからショッピングもできたし、フィッシュアンドチップスやアフターヌーンティーもできた。

これがホグワーツのモデルになったオックスフォード大学の食堂
ここでEnglish Breakfastを食べれた
SNSでよく見るところ(King's Guard)
ビッグベン
ゴッホのひまわり。イギリスは美術館、博物館がどこも無料で入れるのすごい

フランス

ずっと行きたかったルーブルも行けたし、ディズニーという都会的な遊びもできた。町並みも街ゆく人々もおしゃれでかっこよかった。
あいにく天気がずっと悪かったから、観光地に傘売りの人がいっぱい立っててずっと「parapluie, parapluie, parapluie(ぱらぷりゅぃ)」って連呼してた。おそらく一番聞いたフランス語。

エルメス本店は、めちゃくちゃ接客が良かった。言い方悪いけど、僕らみたいな大してお金持ってなさそうな格好をしてる若者(30手前)にでもすごく丁寧に、いろんなものを提案してくれてとても楽しかった。無事指輪を購入できました。またなにか買うならこの店舗で買いたい(そうそう行けないけど)

世界一好きな彫刻サモトラケのニケ 生で見れて良かった神々しすぎる
モナリザ(実は周り超激混み)
ディズニーは東京に比べて乗り物が乱暴(悪い意味ではない)すぎた
オペラ座 彫刻、装飾がすごい
凱旋門でかい
エッフェル塔ビューのホテルに泊まった最高。
イギリスで買った服気に入ってここでもまた着ている。
(現実)高いところ怖いからこんななんですけどね

日本

帰宅!楽しかった!旅行終わっちゃってさみしいけど家はやはり安心する!

最後まで読んでくれてありがとうございました!

いいなと思ったら応援しよう!