GitHubで経歴書を作成してみた

GitHubで経歴書を作成してみた

こんにちは!

最近、仕事着に何を着るか迷うので、すべて作務衣にしようかと考えている冨田です。

エクセルやスプレッドシートを使用して作成する経歴書ですが、管理が面倒で毎回どこにいったか忘れがちです。(私だけかもですが…)

GitHubで管理できたら、わかりやすいのでは?と思い、作成してみました。

概要

GitHubの機能を使用して、自身の経歴書を公開・PDF保存できるサービスを作成してみました。

作成したものは、以下になります。

リポジトリは、GitHub PagesとGitHub Workflowsを用いており、

  • GitHubリポジトリに格納されているファイルをそのままWebサイトとして公開(GitHub Pages)
  • 経歴書をPDF形式で保存(GitHub Workflows)

ができるようになっています。

作成

基本的な流れは、GitHub Pagesサイトを作成するを見て作成できます。

ざっくりした流れは下記になります

  1. リポジトリの用意:github.ioドメイン、もしくは独自ドメインを使用。
  2. サイト用ファイルの作成:HTMLもしくはMarkdownファイルを作成。
  3. リポジトリの設定:GitHubリポジトリの設定から、デプロイするファイルを指定します。

サイト用ファイルの作成

以下のようにHTMLファイルを作成していきました

<!doctype html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>職務経歴書 冨田久樹</title>

    <link rel="stylesheet" href="css/index.css" />
  </head>
  <body>
    <div class="container">
      <div class="title">
        <h1>職務経歴書</h1>
      </div>

      <div class="profile-content">
        <h2>プロフィール</h2>
        <div class="profile">
          <div class="info">
            <h3>基本情報</h3>

GitHub Actionsを使用したPDF保存

PDF保存には以下のツールを使用しました:

  • puppeteer:HTMLからPDFに変換するためのライブラリ。
  • fonts-ipafont-gothic:日本語フォントに対応するため。
  • cheerio:PDFのファイル名をサイトタイトルに対応させるため。

以下は、GitHub Actionsのworkflowの一部です:

name: Convert HTML to PDF

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  convert:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      # PDFファイル保存するための処理を記載

      - name: Upload PDF
        uses: actions/upload-artifact@v4
        with:
          name: ${{ env.PDF_TITLE }}
          path: ${{ env.PDF_TITLE }}.pdf

GitHub Actionsを使用して、好きなときにPDFを保存できるようにしました。

苦労したポイント

特に苦労したのは、サイトタイトルをPDFファイル名に指定する部分と、HTMLをPDFに変換する部分です。使い方がわからず、悪戦苦闘しましたが、以下のように解決しました:

  1. サイトタイトルの抽出:cheerioを使用してHTMLからタイトルを抽出し、環境変数として保存。
  2. HTMLからPDFへの変換:puppeteerを使用して、指定したHTMLファイルをPDFに変換。
- name: Extract Title
  id: extract
  run: |
    TITLE=$(
    node -e "
      const fs = require('fs');
      const cheerio = require('cheerio');
      const html = fs.readFileSync('${{ github.workspace }}/index.html', 'utf-8');
      const $ = cheerio.load(html);
      const titleHtml = $.html('head title');
      const titleText = cheerio.load(titleHtml)('title').text();
      console.log(titleText.replace(/ /g, '_'));
    ")
    echo "PDF_TITLE=${TITLE}" >> $GITHUB_ENV

- name: Convert HTML to PDF
  run: |
    node -e "
      const puppeteer = require('puppeteer');
      (async () => {
        const browser = await puppeteer.launch();
        const page = await browser.newPage();
        await page.goto('file://${{ github.workspace }}/index.html', {waitUntil: 'networkidle2'});
        await page.pdf({path: '${{ env.PDF_TITLE }}.pdf', format: 'A4'});
        await browser.close();
      })();
    "

まとめ

今回、GitHubの機能をつかうことで、簡単にサイト公開やPDF保存機能を作ることができるようになりました!

また新しいことを思いついたら、作ってみたいと思います。

最後まで、お付き合いいただきありがとうございました。