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

Tech

こんにちは!

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

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

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保存機能を作ることができるようになりました!

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

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

タイトルとURLをコピーしました