Skip to content

# 職務経歴書: 非IT経歴・休暇・資本金単位 + GitHubコントリビューション可視化#280

Merged
yusuke0610 merged 1 commit into
devfrom
refactor/backend/deadcode
May 29, 2026
Merged

# 職務経歴書: 非IT経歴・休暇・資本金単位 + GitHubコントリビューション可視化#280
yusuke0610 merged 1 commit into
devfrom
refactor/backend/deadcode

Conversation

@yusuke0610

@yusuke0610 yusuke0610 commented May 29, 2026

Copy link
Copy Markdown
Owner

概要

職務経歴書(Resume)を IT エンジニア以外の経歴にも対応させた。在籍企業を「非IT企業」としてマークすると取引先/プロジェクトの代わりに自由記述の「詳細」を入力でき、在籍中の「休暇」(育児/介護/留学等)を取引先と並べて期間・詳細付きで記述できる。あわせて資本金の単位を企業ごとに選択可能にした(従来は「千万円」固定)。

同コミットには GitHub 連携ダッシュボードのコントリビューション可視化(緑の四角ヒートマップ)と連携UI刷新も含まれる(詳細は report/pr_github_contributions.md)。

背景・目的

従来の職務経歴書は「IT企業の取引先 → プロジェクト」という構造に固定されており、次のケースを表現できなかった:

  1. 非IT企業での職歴: 取引先/プロジェクト単位ではなく、職務内容を自由記述したい
  2. 在籍中の休暇: 育児・介護・留学などのブランクを職歴上で説明したい
  3. 資本金の単位: 企業規模により「万円/百万円/千万円/億円」を使い分けたい(従来は全社「千万円」固定で実態とずれていた)

変更内容

Backend

  • モデル拡張 (models/resume.py)
    • ResumeExperiencecapital_unit(既定「千万円」)/ is_it_company(既定 True)/ description(非IT時の詳細)を追加
    • ResumeClientis_vacation / vacation_start_date / vacation_end_date / vacation_is_current / vacation_description を追加。vacation_start_date / vacation_end_dateformat_year_month を通す read プロパティで YYYY-MM 文字列化(NULL は ""
  • マイグレーション 2 件 (alembic_migrations/versions/)
    • 0039_add_capital_unit: capital_unit を追加(既存行の後方互換として server_default="千万円"
    • 0040_add_resume_non_it_and_vacation: 非IT フラグ/詳細・休暇カラム群を追加(is_it_company は既存行を IT 企業前提として server_default=1is_vacation0
    • libSQL は ADD COLUMN を直接サポートするため upgrade は op.add_column、downgrade の列削除は ALTER/DROP 非対応のため batch_alter_table(テーブル再作成)
  • スキーマ + バリデーション (schemas/resume.py)
    • Experiencecapital_unit: Literal["万円","百万円","千万円","億円"] / is_it_company / description を追加
    • Client に休暇フィールド群を追加し、validate_vacation_datesmode="after")で休暇時のみ開始年月必須・継続中なら end を "" に正規化・end >= start を検証(Experience.validate_dates と同契約)
  • 永続化 (repositories/resume.py): 新フィールドを payload から読み出して行を構築。休暇期間は parse_year_month で日付化
  • 生成系
    • Markdown (markdown/generators/resume_generator.py): 資本金は {cap}{capital_unit} を出力。非IT企業は取引先ループをスキップし「詳細」を出力。休暇エントリは「#### 休暇」+ 期間 + 詳細
    • PDF (pdf/generators/resume_generator.py + templates/resume.css): _build_vacation_html を追加。非IT企業は .company-detail に詳細を表示、休暇は .vacation ブロックで表示。資本金単位を反映

Frontend

  • 型・定数 (types.ts, formTypes.ts, constants.ts)
    • CapitalUnit 型(backend Literal と手動同期)、CAPITAL_UNITS / DEFAULT_CAPITAL_UNIT を追加
    • CareerExperience / CareerClient に新フィールドを追加。blank テンプレートにも初期値を反映
  • 経歴エディタ (forms/CareerFormEditors/CareerExperienceEditor.tsx)
    • 資本金にドロップダウン(CAPITAL_UNITS)を追加
    • 「IT企業」チェックボックスを追加。OFF にすると取引先セクションを隠し「詳細」自由記述欄(必須)を表示
    • 取引先に「休暇」トグルを追加。ON で取引先名/プロジェクトの代わりに期間(開始/終了 or 継続中)+ 詳細を入力
  • フォーム入出力
    • formMappers.ts: API レスポンスの新フィールドを ?? デフォルト で吸収(後方互換)
    • payloadBuilders.ts: 非IT企業は description のみ送信し clients を空に、休暇 client は vacation_* のみ送信。事前バリデーション(詳細必須・休暇期間必須・期間整合)を追加
  • メッセージ (constants/messages.ts): EXPERIENCE_DESCRIPTION_REQUIRED / VACATION_START_DATE_REQUIRED / VACATION_END_DATE_REQUIREDVALIDATION_MESSAGES に追加

動作確認

  • Backend: make test-backend / make lint-backend
    • 新規/更新テスト: test_schemas.py(capital_unit / is_it_company / 休暇バリデーション)、test_markdown_generator.pytest_pdf_generator.py(非IT詳細・休暇・資本金単位の出力)、test_endpoints.pytest_contributions.pytest_worker/test_github_link.py
  • Frontend: make lint-frontend / make lint-frontend-messages、unit tests(payloadBuilders.test.ts に非IT/休暇の送信・バリデーション、useCareerExperienceMutators.test.tsContributionHeatmap.test.tsxGitHubLinkDashboard.test.tsx
  • E2E: npm run test:e2egithub-link.spec.ts / navigation.spec.ts 更新)

影響範囲・補足

  • DB マイグレーション必須(make migrate)。既存行は server_default で後方互換(全社 IT企業・資本金単位「千万円」・休暇なし扱い)
  • DTO は backend schemas/resume.py ↔ frontend types.ts の手動同期運用(codegen 未導入)。CapitalUnit の Literal を増減する場合は両方を更新する
  • 非IT企業をオンにすると、その企業配下の取引先/プロジェクトは送信対象外(description のみ)になる

@coderabbitai

coderabbitai Bot commented May 29, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 14dcd7c6-109a-4cd2-a9c3-2a23805f4826

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/backend/deadcode

Comment @coderabbitai help to get the list of available commands and usage tips.

@yusuke0610 yusuke0610 changed the title not engineer resume UI # 職務経歴書: 非IT経歴・休暇・資本金単位 + GitHubコントリビューション可視化 May 29, 2026
@yusuke0610
yusuke0610 merged commit 379405a into dev May 29, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant