職務経歴書をGitHubで管理するノウハウ
この記事は約 10 分で読めます。
目標
- 職務経歴書を GitHub で管理
- GitHub Actions による自動化
- 文法・誤字脱字のチェック
- マークダウン → PDF への自動変換
- GitHub Pages を使って Web ページとして公開
成果物
はじめに
こんにちは。バックエンドエンジニアの「りょう」と申します。
職務経歴書を高い保守性で安全に更新できる仕組みを作りたい、ということで 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
実際の職務経歴書の内容は、次の記事が参考になります。
もちろん私の職務経歴書も参考にしていただいて問題ありません。
完成したら忘れないように 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
また、ある程度書き終えたら、第三者にレビューしてもらう方法として「転職ドラフト」を活用する方法があります。
無料で添削してもらえて、伝わりやすい経歴書に大幅にブラッシュアップできたので個人的にかなりオススメです。
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
を作成します。
私は次の内容で設定しました。
{
"MD013": {
"line_length": 90 // 一行の文字数
},
"MD041":false // true: ファイルの最初の行は、トップレベルの見出しにする
}
Lint コマンドを設定
npm run lint
コマンドで Lint が実行できるように package.json
を更新します。
{
"scripts": {
"lint": "textlint . && markdownlint **/*.md"
},
}
実際に npm run lint
を実行して、エラーが検出されなければ問題ありません。
npm run lint
VSCode 拡張機能を導入
こちらの設定は VSCode を使用している方向けとなります。
textlint と markdownlint を VSCode 上で動作させる以下 2 つの拡張機能を導入します。
VSCode 上で Lint を動作させることで、毎回 Lint の実行コマンドを入力する手間を省けます。
-
vscode-textlint
上記では、JavaScript という正規の表現を使用するよう警告している -
markdownlint
上記では、連続した空白行を検出している
4. GitHub Actions を設定
GitHub Actions で Push 時に自動で上記 Lint が起動するように設定します。
.github/workflows
配下に次のようなファイルを作成すると、PR 作成時に自動で GitHub Actions が起動します。
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 の画面から確認できます。
5. Web ページとして公開
GitHub Pages という無料のホスティグサービスを使って Web ページとして公開します。
デザインテーマは docs/_config.yml
で設定しています。
remote_theme: pages-themes/cayman@v0.2.0
title: #{任意のタイトル}
description: #{任意の説明文}
次のページから様々なテーマを確認できるので、お好みのものを設定してください。
最後に GitHub Pages の設定をリポジトリの設定画面から行います。
公開するフォルダを docs
に設定します。
公開しても、反映されるまでに時間がかかることもあるので注意してください!
6. PDF への自動変換
企業の採用担当者から PDF 形式での職務経歴書を求められることが多いです。
そこで GitHub Actions を活用し、マークダウンから 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 変換用のコマンドを設定します。
"scripts": {
"build:pdf": "md-to-pdf docs/README.md --config-file ./pdf-configs/config.js",
},
④ GitHub Actions で PDF に変換する設定をします。
とりあえずドラフト状態のリリースを作成し、実際のリリースは手作業で行うように設定しています。
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 が作成され、クリックすることでダウンロードできます。
終わりに
以上、「職務経歴書を GitHub で管理するノウハウ」の紹介でした。
定期的にスキルの棚卸しをして、振り返る習慣を身に付けましょう!
みなさんのお役に立てれば幸いです。
また、次の記事もおすすめです!
参考
Discussion
素晴らしい記事をありがとうございます。
こちらを参考に快適に職務経歴書を管理することができるようになりました。
一点、github actions上でのlint実行ですが
.github/workflows/lint.yml
のactions/checkout@4
はactions/checkout@v4
のタイポかなと思います。actions/checkout@4
のままアクションが実行されると以下のエラーが出力されました。okbee さん、ご指摘ありがとうございます!
こちら修正しました。
自分では気づかなかったので大変助かりました。。!!