📔

職務経歴書をGitHubで管理するノウハウ

2023/02/27に公開
2

この記事は約 10 分で読めます。

目標

  • 職務経歴書を GitHub で管理
  • GitHub Actions による自動化
    • 文法・誤字脱字のチェック
    • マークダウン → PDF への自動変換
  • GitHub Pages を使って Web ページとして公開

成果物

PDF変換後の職務経歴書

はじめに

こんにちは。バックエンドエンジニアの「りょう」と申します。

職務経歴書を高い保守性で安全に更新できる仕組みを作りたい、ということで GitHub を活用することにしました。

この記事を通して、少しでも楽に職務経歴書を管理できる方が増えると嬉しいです!

また、いつでも見返せるように「いいね」と「ブックマーク」もお願いします!

間違いなどありましたらコメント等でご指摘いただけると幸いです。

職務経歴書を定期更新する重要性

いつでも転職できる状態を維持することは、客観的に日々の業務や自分のキャリアについて振り返り、自分の強み弱みを認識できる大切な習慣だと思います。

もちろん、現職でのパフォーマンスを向上させ、活躍の幅を広げるきっかけにも繋がります。

なので非エンジニアであっても社会人である以上、四半期ごとに職務経歴書を見直すことを強く推奨します。

1. リポジトリを作成

まずは GitHub で職務経歴書を管理するためのリポジトリを作成しましょう。

できるだけ多くの採用担当の方に見てもらうため、私は Public リポジトリとして公開しました。

他のエンジニアも職務経歴書には Public リポジトリとして設定している人が多いので、個人的に Public がオススメです。

2. 職務経歴書を作成

さっそくローカルで職務経歴書を作成しましょう!

最後に GitHub Pages を活用して Web ページとして公開するので、ルートに docs フォルダを作成し、その中に職務経歴書を README.md として作成します。

docs/README.md
# 職務経歴書

## 意欲・興味

- xxx

## スキル

### 開発手法

xxx

### 言語

xxx

### フレームワーク等

xxx

### 通信プロトコル

xxx

### RDB

xxx

### クラウド

#### AWS

xxx

#### Google Cloud

xxx

### SaaS/PaaS

xxx

### その他

xxx

## 職務経歴詳細

### xxx 企業

#### xxx プロダクト

【雇用形態】

xxx

【在籍期間】

yyyy/mm/dd ~ yyyy/mm/dd

【チーム編成】

- PM x 人
- バックエンドエンジニア x 人
- フロントエンドエンジニア x 人

【ステークホルダー】

- クライアント x 社

【言語・フレームワーク】

xxx

【インフラ】

- AWS
  - xxx

【通信プロトコル】

- xxx

【ツール】

xxx

【プロダクトが属する業界】

xxx 業界

【プロダクト概要】

xxx

【チームの特徴・課題】

xxx

【チームでの役割】

xxx

【成果】

xxx

実際の職務経歴書の内容は、次の記事が参考になります。
もちろん私の職務経歴書も参考にしていただいて問題ありません。

https://qiita.com/newta/items/77eb14b1d67bc7ef1980

https://job-draft.jp/articles/56

完成したら忘れないように GitHub に Push しましょう。

git init
git add docs/README.md
git commit -m "feat: 職務経歴書を作成"
git branch -M main
git remote add origin git@github.com:xxx/xxx.git
git push -u origin main

また、ある程度書き終えたら、第三者にレビューしてもらう方法として「転職ドラフト」を活用する方法があります。

無料で添削してもらえて、伝わりやすい経歴書に大幅にブラッシュアップできたので個人的にかなりオススメです。

https://job-draft.jp/

3. Lint を導入

今回は textlint と markdownlint の導入をそれぞれ紹介します。

textlint を導入

職務経歴書という仕事・転職に関わる大事な書類ですので、誤字脱字は避けたいです。

そこで、textlint という自然言語向けの Lint を活用します。

これを使えば誤字脱字だけでなく、ら抜き言葉などの文法もチェックできます。

次のコマンドで簡単に導入できます。

npm init -y
npm install --save-dev textlint

textlint ライブラリ単体を導入しても、Lint としてのルールが設定されていません。

よって、お好みで使用したいルールを追加する必要があります。

以下におすすめのルールと、そのインストールコマンドを記載します。

おすすめ textlint ルール一覧。
説明 ルール名
辞書を活用しタイポや表記ゆれをチェック @proofdict/textlint-rule-proofdict
い抜き言葉をチェック @textlint-ja/textlint-rule-no-dropping-i
サ抜き、サ入れ表現の誤用をチェック @textlint-ja/textlint-rule-no-insert-dropping-sa
"("と"]"のようなマッチしないペアをチェック @textlint-rule/textlint-rule-no-unmatched-pair
コメントで特定ルールを無視 textlint-filter-rule-comments
正しいアポストロフィーの使い方をチェック textlint-rule-apostrophe
文中の 2 重スペースをチェック textlint-rule-doubled-spaces
漢字よりもひらがなで表記したほうが読みやすい補助動詞をチェック textlint-rule-ja-hiragana-hojodoushi
カタカナ語間の区切り文字をチェック textlint-rule-ja-nakaguro-or-halfwidth-space-between-katakana
よくある誤用をチェック textlint-rule-ja-no-abusage
文末の句点(。)の統一 OR 抜けをチェック textlint-rule-ja-no-mixed-period
冗長な表現をチェック textlint-rule-ja-no-redundant-expression
かっこ類と隣接する文字のスペースをチェック textlint-rule-ja-no-space-around-parentheses
全角文字同士の間のスペースをチェック textlint-rule-ja-no-space-between-full-width
感嘆符前後のスペースをチェック textlint-rule-ja-space-after-exclamation
疑問符の直後のスペースをチェック textlint-rule-ja-space-after-question
インラインコードの周りをスペースで囲むかチェック textlint-rule-ja-space-around-code
リンクの周りをスペースで囲むかチェック textlint-rule-ja-space-around-link
半角文字と全角文字のスペースをチェック textlint-rule-ja-space-between-half-and-full-width
不自然なアルファベットをチェック textlint-rule-ja-unnatural-alphabet
文のカンマ(,)数をチェック textlint-rule-max-comma
漢字が連続する最大文字数をチェック textlint-rule-max-kanji-continuous-len
一文に利用できる読点(、)の数をチェック textlint-rule-max-ten
二重否定をチェック textlint-rule-no-double-negative-ja
同じ接続詞が連続して出現していないかチェック textlint-rule-no-doubled-conjunction
逆接の接続助詞「が」が同一文中に複数回出現していないかチェック textlint-rule-no-doubled-conjunctive-particle-ga
1 つの文中に同じ助詞が連続して出てくるかチェック textlint-rule-no-doubled-joshi
ら抜き言葉をチェック textlint-rule-no-dropping-the-ra
全角と半角アルファベットの混在をチェック textlint-rule-no-mixed-zenkaku-and-hankaku-alphabet
UTF8-MAC 濁点のような NFD が使用されていないかチェック textlint-rule-no-nfd
リスト項目のピリオドの有無をチェック textlint-rule-period-in-list-item
例示・並列表現の「~たり、(~たり)する」をチェック textlint-rule-prefer-tari-tari
英文をチェック textlint-rule-rousseau
文章の最大長をチェック textlint-rule-sentence-length
英語で書かれた技術文書の用語、ブランド、技術のスペルをチェック textlint-rule-terminology
単位の表記をチェック textlint-rule-use-si-units
上記で紹介したルールを導入する npm install コマンド。
npm install --save-dev \
@proofdict/textlint-rule-proofdict \
@textlint-ja/textlint-rule-no-dropping-i \
@textlint-ja/textlint-rule-no-insert-dropping-sa \
@textlint-rule/textlint-rule-no-unmatched-pair \
textlint-filter-rule-comments \
textlint-rule-apostrophe \
textlint-rule-doubled-spaces \
textlint-rule-ja-hiragana-hojodoushi \
textlint-rule-ja-nakaguro-or-halfwidth-space-between-katakana \
textlint-rule-ja-no-abusage \
textlint-rule-ja-no-mixed-period \
textlint-rule-ja-no-redundant-expression \
textlint-rule-ja-no-space-around-parentheses \
textlint-rule-ja-no-space-between-full-width \
textlint-rule-ja-space-after-exclamation \
textlint-rule-ja-space-after-question \
textlint-rule-ja-space-around-code \
textlint-rule-ja-space-around-link \
textlint-rule-ja-space-between-half-and-full-width \
textlint-rule-ja-unnatural-alphabet \
textlint-rule-max-comma \
textlint-rule-max-kanji-continuous-len \
textlint-rule-max-ten \
textlint-rule-no-double-negative-ja \
textlint-rule-no-doubled-conjunction \
textlint-rule-no-doubled-conjunctive-particle-ga \
textlint-rule-no-doubled-joshi \
textlint-rule-no-dropping-the-ra \
textlint-rule-no-mixed-zenkaku-and-hankaku-alphabet \
textlint-rule-no-nfd \
textlint-rule-period-in-list-item \
textlint-rule-prefer-tari-tari \
textlint-rule-rousseau \
textlint-rule-sentence-length \
textlint-rule-terminology \
textlint-rule-use-si-units

続いて、上記で導入したルールの設定ファイルである .textlintrc.json を作成します。

npx textlint --init

私は次の内容で設定しました。

.textlintrc.json
{
  "filters": {
    "comments": true
  },
  "rules": {
    "apostrophe": true,
    "doubled-spaces": true,
    "ja-hiragana-hojodoushi": true,
    "ja-nakaguro-or-halfwidth-space-between-katakana": true,
    "ja-no-abusage": true,
    "ja-no-mixed-period": true,
    "ja-no-redundant-expression": true,
    "ja-no-space-around-parentheses": true,
    "ja-no-space-between-full-width": true,
    "ja-space-after-exclamation": true,
    "ja-space-after-question": true,
    "ja-space-around-code": {
      "before": true,
      "after": true
    },
    "ja-space-around-link": {
      "before": true,
      "after": true
    },
    "ja-space-between-half-and-full-width": {
      "space": "always",
      "lintStyledNode": true
    },
    "ja-unnatural-alphabet": true,
    "max-comma": {
      "max" : 4
    },
    "max-kanji-continuous-len": {
      "max": 6,
      "allow": ["普通自動車第一種運転免許"]
    },
    "max-ten": true,
    "no-doubled-conjunction": true,
    "no-doubled-conjunctive-particle-ga": true,
    "no-doubled-joshi": true,
    "no-double-negative-ja": true,
    "no-dropping-the-ra": true,
    "no-mixed-zenkaku-and-hankaku-alphabet": true,
    "no-nfd": true,
    "period-in-list-item": true,
    "prefer-tari-tari": true,
    "rousseau": {
      "showLevels": ["suggestion", "warning", "error"],
      "ignoreTypes": ["adverbs", "readibility", "sentence:start", "sentence:uppercase"]
    },
    "sentence-length": {
      "max": 150
    },
    "terminology": {
      "defaultTerms": true
    },
    "use-si-units": {
      "allowedUnits": ["%"],
      "restrictNonSIUnits": true
    },
    "@textlint-ja/textlint-rule-no-dropping-i": true,
    "@textlint-ja/textlint-rule-no-insert-dropping-sa": true,
    "@textlint-rule/no-unmatched-pair": true,
    "@proofdict/proofdict": {
      "dictURL": "https://azu.github.io/proof-dictionary/"
    }
  }
}

markdownlint を導入

マークダウンの見栄えを良くするために、markdownlint も導入します。

npm install --save-dev markdownlint-cli

設定ファイルである .markdownlint.jsonc を作成します。

私は次の内容で設定しました。

.markdownlint.jsonc
{
  "MD013": {
    "line_length": 90 // 一行の文字数
  },
  "MD041":false // true: ファイルの最初の行は、トップレベルの見出しにする
}

Lint コマンドを設定

npm run lint コマンドで Lint が実行できるように package.json を更新します。

package.json
{
  "scripts": {
    "lint": "textlint . && markdownlint **/*.md"
  },
}

実際に npm run lint を実行して、エラーが検出されなければ問題ありません。

npm run lint

VSCode 拡張機能を導入

こちらの設定は VSCode を使用している方向けとなります。

textlint と markdownlint を VSCode 上で動作させる以下 2 つの拡張機能を導入します。

VSCode 上で Lint を動作させることで、毎回 Lint の実行コマンドを入力する手間を省けます。

  • vscode-textlint
    vscode-textlint
    上記では、JavaScript という正規の表現を使用するよう警告している

  • markdownlint
    vscode-markdownlint
    上記では、連続した空白行を検出している

4. GitHub Actions を設定

GitHub Actions で Push 時に自動で上記 Lint が起動するように設定します。

.github/workflows 配下に次のようなファイルを作成すると、PR 作成時に自動で GitHub Actions が起動します。

.github/workflows/lint.yml
name: lint

on:
  pull_request:
  workflow_dispatch:

jobs:
  textlint:
    name: lint
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 18
          cache: npm
      - run: npm install
      - run: npm run lint

Lint の実行結果は PR の画面から確認できます。

PRに表示されるLintの実行結果

5. Web ページとして公開

GitHub Pages という無料のホスティグサービスを使って Web ページとして公開します。

GitHub Pagesによって公開された職務経歴書のスクリーンショット

デザインテーマは docs/_config.yml で設定しています。

docs/_config.yml
remote_theme: pages-themes/cayman@v0.2.0
title: #{任意のタイトル}
description: #{任意の説明文}

次のページから様々なテーマを確認できるので、お好みのものを設定してください。

https://pages.github.com/themes/

最後に GitHub Pages の設定をリポジトリの設定画面から行います。

公開するフォルダを docs に設定します。

GitHub Pagesの設定画面

公開しても、反映されるまでに時間がかかることもあるので注意してください!

6. PDF への自動変換

企業の採用担当者から PDF 形式での職務経歴書を求められることが多いです。

そこで GitHub Actions を活用し、マークダウンから PDF に自動で変換する処理を実装します。

次のような PDF が作成され、リリースページ からダウロードできます。

PDF変換後の職務経歴書

次の 5 つの手順で導入します。

① PDF に変換するライブラリを導入します。

 npm install --save-dev md-to-pdf

pdf-configs フォルダに設定用ファイルを 2 つ作成します。

pdf-configs/config.js

module.exports = {
  stylesheet: "./pdf-configs/style.css",
  body_class: "markdown-body",
  marked_options: {
    headerIds: false,
    smartypants: true,
  },
  pdf_options: {
    "format": "A4",
    "margin": "30mm 20mm",
    "printBackground": true,
    "headerTemplate": "<style>\n  section {\n    margin: 0 auto;\n    font-size: 9px;\n  }\n</style>",
    "footerTemplate": "<section>\n  <div>\n    <span class=\"pageNumber\"></span>\n    / <span class=\"totalPages\"></span>\n  </div>\n</section>"
  },
  stylesheet_encoding: "utf-8",
};

pdf-configs/style.css

@import url(//fonts.googleapis.com/earlyaccess/notosansjapanese.css);

body {
  font-size: 12px;
  font-family: "Noto Sans Japanese", "Hiragino Kaku Gothic ProN", Meiryo, sans-serif;
}

h1:first-child {
  margin-top: 0;
  padding-top: 0;
  text-align: center;
}

table {
  font-size: 11px;
  border-collapse: collapse;
}

td,
th {
  border: 1px solid #ddd;
  padding: 5px;
}

tr:nth-child(even) {
  background-color: #f2f2f2;
}

tr:hover {
  background-color: #ddd;
}

th {
  text-align: left;
  background-color: #ddd;
}

hr {
  border-top: 1px solid #ddd;
  margin: 30px 0;
}

package.json に PDF 変換用のコマンドを設定します。

package.json
"scripts": {
  "build:pdf": "md-to-pdf docs/README.md --config-file ./pdf-configs/config.js",
},

④ GitHub Actions で PDF に変換する設定をします。

とりあえずドラフト状態のリリースを作成し、実際のリリースは手作業で行うように設定しています。

.github/workflows/release-pdf.yml
name: Release PDF

on:
  pull_request:
    branches: [main]
    paths: 'docs/README.md'
  workflow_dispatch:

jobs:
  release:
    name: Release PDF
    runs-on: ubuntu-latest
    timeout-minutes: 10
    permissions:
      contents: write
      pull-requests: write
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 18
          cache: npm
      - run: npm install
      - run: npm run build:pdf
      - name: Create a draft release
        uses: softprops/action-gh-release@v1
        with:
          body: ${{ github.event.pull_request.title }}
          draft: true
          fail_on_unmatched_files: true
          files: docs/README.pdf
          name: Release ${{ github.ref }}

⑤リリース後、リリースページの Assets 内に PDF が作成され、クリックすることでダウンロードできます。

PDF変換後の職務経歴書

終わりに

以上、「職務経歴書を GitHub で管理するノウハウ」の紹介でした。
定期的にスキルの棚卸しをして、振り返る習慣を身に付けましょう!

みなさんのお役に立てれば幸いです。

また、次の記事もおすすめです!

https://zenn.dev/ryo_f/articles/f63b0bffe2eb77

https://zenn.dev/ryo_f/articles/9714348cc2483b

参考

https://zenn.dev/ryo_kawamata/articles/resume-on-github

GitHubで編集を提案

Discussion

okbeeokbee

素晴らしい記事をありがとうございます。
こちらを参考に快適に職務経歴書を管理することができるようになりました。
一点、github actions上でのlint実行ですが.github/workflows/lint.ymlactions/checkout@4actions/checkout@v4のタイポかなと思います。

lint.yml
jobs:
  textlint:
    steps:
      - uses: actions/checkout@4

actions/checkout@4のままアクションが実行されると以下のエラーが出力されました。

Unable to resolve action `actions/checkout@4`, unable to find version `4`
りょうりょう

okbee さん、ご指摘ありがとうございます!
こちら修正しました。

自分では気づかなかったので大変助かりました。。!!