こんにちは!
最近、仕事着に何を着るか迷うので、すべて作務衣にしようかと考えている冨田です。
エクセルやスプレッドシードを使用して作成する経歴書ですが、管理が面倒で毎回どこにいったか忘れがちです。(私だけかもですが…)
GitHubで管理できたら、わかりやすいのでは?と思い、作成してみました。
概要
GitHubの機能を使用して、自身の経歴書を公開・PDF保存できるサービスを作成してみました。
作成したものは、以下になります。
リポジトリは、GitHub PagesとGitHub Workflowsを用いており、
- GitHubリポジトリに格納されているファイルをそのままWebサイトとして公開(GitHub Pages)
- 経歴書をPDF形式で保存(GitHub Workflows)
ができるようになっています。
作成
基本的な流れは、GitHub Pagesサイトを作成するを見て作成できます。
ざっくりした流れは下記になります
- リポジトリの用意:
github.io
ドメイン、もしくは独自ドメインを使用。 - サイト用ファイルの作成:HTMLもしくはMarkdownファイルを作成。
- リポジトリの設定: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に変換する部分です。使い方がわからず、悪戦苦闘しましたが、以下のように解決しました:
- サイトタイトルの抽出:cheerioを使用してHTMLからタイトルを抽出し、環境変数として保存。
- 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保存機能を作ることができるようになりました!
また新しいことを思いついたら、作ってみたいと思います。
最後まで、お付き合いいただきありがとうございました。