🦔

エンジニアは職務経歴書をTypstでビルドしよう

に公開

エンジニアの転職活動において、避けては通れないのが職務経歴書の作成ですが、多くの企業ではExcelやWordのテンプレートを使用した表のようなものが求められていると思います。これらは広く普及したフォーマットで、誰でも開けるという利点がありますが・・・。エンジニアである私たちにとって、本当にこれらが最適なツールといえるのか。そんな思いからTypstで職務経歴書をビルドできたらいいのでは?と思い自身のスキルシートをメンテナンスがてらテンプレートを作ってみました。

https://github.com/ShinoharaTa/typst-work-resume

Excelとの戦い、もうやめませんか?

実は私、転職活動の際にExcelでの職務経歴書作成に相当苦労した経験があります。プロジェクトを追加するたびにレイアウトが崩れ、セルの結合や行の高さ調整に無駄な時間を費やし・・・。キーの操作性もどうなの?と思うことも。セルごとにレイアウトを整えたり、改ページ位置の指定などとにかくやることが多かったイメージがあります。可能ならキーボードから手を離さずすべてが完結すれば最強なのに・・・?

ふと考えてみると、普段のコード管理ではGitで完璧にバージョン管理できているのに、なぜ職務経歴書だけがこんなにも原始的な管理方法なんだろう・・・?

Typstとの出会い

そんな折、技術書典17にて刊行したHello Nostr, Yo Bluesky 3 において使用した組版エンジンがTypstでした。シンプルな文法で書きやすく、様々なページにおいてレイアウトしたときの経験が活かせるのでは?と思って2024年の最後はTypstで職務経歴書を仕上げようと進めていました。
※同時に職務経歴書やスキルシートを定期的にメンテナンスしておくと、自身がいまどの程度の能力を持つか把握しやすいなどのメリットもあります。

実際のコードで見てみようと思います。

== 業務概要

#let overview = yaml("overview.yaml")

#table(
  columns: (1.4fr, 7fr, 1.6fr),
  rows: auto,
  stroke: 0.5pt,
  inset: 6pt,
  fill: (x, y) => if y == 0 {luma(222)},
  table.header(align(center)[*期間*], align(center)[*担当業務内容*], align(center)[*言語・環境*]),
  ..for item in overview {(
    table.cell(
      rowspan: 2,
      align: center+horizon,
      breakable: item.at("breakable", default: false)
    )[#item.period],
    item.title,
    table.cell(rowspan: 2, align: horizon)[#item.tech_stack],
    item.content
  )}
)

シンプルにプロジェクトなどを配列で記載し、それを展開することでレイアウトできるようになっています。レンダリングなどすべてTypst上に記載せず、yamlで記載するようにしています。その一覧をもとに通常の繰り返し構文などでレイアウトし、きれいに並ぶようにしています。

GitHubで楽々管理

せっかくTypstで書けるようになったので、これはGitHubで管理するしかないですよね。私の場合、以下のようなGitHub Actionsの設定を入れてみました:

name: Build book

on:
  push:
    tags:
      - 'v*'
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Install typst
        run: |
          wget https://github.com/typst/typst/releases/download/$TYPST_VERSION/typst-x86_64-unknown-linux-musl.tar.xz
          sudo tar xvf typst-x86_64-unknown-linux-musl.tar.xz --directory /usr/local/bin --strip-components 1 typst-x86_64-unknown-linux-musl/typst
          typst --version
        env:
          TYPST_VERSION: v0.12.0
      - name: Install Noto CJK fonts
        run: |
          sudo apt-get update
          sudo apt-get install -y fonts-noto-cjk-extra
          typst fonts
      - name: Build book
        run: |
          typst compile main.typ
      - name: Upload PDF
        uses: actions/upload-artifact@v4
        with:
          name: book-${{ github.sha }}
          path: |
            main.pdf

このワークフローを設定しておくと、タグをプッシュするだけで自動的にPDFが生成されるんです。とにかく楽なんですよね。GitHubのWEB上で修正からリリースまですべて対応ができるので、常に最新版の管理が容易になります。

モバイルからでも更新できた

ここまで設定しておくと、すべてGitHub上で完結しました。これめっちゃ便利でして、例えば電車での移動中にふと「あ、このプロジェクトの説明足りないな」と思った時も、スマホからGitHubのWebエディタを開いて修正できるんです。

タグを付けると自動的にPDFが生成されるので、すぐにダウンロードして確認できます。

「結局、転職サイトにはコピペしないといけないんでしょ?」と思っていますが、その通りです。でも、GitHubで管理していることもあり、割とどの環境でも同じものを参照できますので意外と使いやすいと思っています。

さいごに

エンジニアの私たちには、もっとエンジニアらしい職務経歴書の管理方法があっていいはずです。せっかくコードを書くのが好きなんですから、職務経歴書だってコードで管理したいですよね。

Discussion