Frappe HRを参考に人事システムを作ろうとして、削り続けたら何も残らなかった話——テーブル10個が4個に、画面8つが4つに
名古屋でAIシステム開発の会社をやっています。今日のテーマは削ることです。既存OSSを参考に人事システムを設計し、そこから機能を削り続けたら、参考にしたものが何も残らなかった。その全記録です。
発端: 「職務・職責・目標」を管理するOSSが無い
きっかけは、ISOや個人情報保護で置いている「◯◯責任者」の管理でした。品質管理責任者、個人情報保護管理者、安全衛生推進者。担当者が代わると、その職が何をする職なのかが失われる。この一点だけを扱う道具が欲しかった。
探した結果がこれです(★数・更新日は2026-08-21時点の実測)。
- Frappe HR 8,610★/GPL-3.0/活発——ただし ERPNext(38,313★) 前提の巨大HRスイート
- Horilla 1,332★/LGPL-2.1/活発——同じくフルスタックHR
- OrangeHRM 1,115★/GPL-3.0/更新が2026-06で止まりぎみ
どれも給与・採用・評価ワークフローを含む塊で、欲しい「職の記録を残す」一点だけを担う道具は実質不在でした。ライセンスもGPL系なので、買い切りで売る製品に持ち込みにくい。
第1稿: Frappe HRを参考にしたら、10テーブル8画面になった
そこでFrappe HRのデータモデルを参考に設計しました。できあがった設計書がこれです。
| # | テーブル | 主な列 |
|---|---|---|
| 1 | post 職 | 目的・権限範囲・要件・根拠規程・法令必須区分・必要人数・親職 |
| 2 | job 職務 | 名称・詳細・頻度・根拠・重み(%) |
| 3 | responsibility 職責 | 決裁できる範囲・期待水準・重み(%) |
| 4 | assignment 任命 | 前任ID・任命者・期間 |
| 5 | period 評価期間 | 準備中→期中→評価中→確定のライフサイクル |
| 6 | goal 目標 | 指標・目標値・単位・方向(up/down)・重み(%)・承認者 |
| 7 | task 実施タスク | 実績値・所要分・証跡URL・状態 |
| 8 | evaluation 評価 | 自己評価→上長評価→確定 |
| 9 | handover 引き継ぎ | スナップショットJSON |
| 10 | audit 監査ログ | 変更前後のJSON |
画面は8つ。ロールは staff / chief(上長)/ admin / ai の4つ。重み付きの階層スコア計算まで実装しました。
動くものができて、見せた瞬間に返ってきた言葉が「複雑すぎる」でした。
削る作業が始まった
ここから先は、機能を足す仕事ではなく削る仕事でした。順番に消えていったものを並べます。
重み付け(weight) — 職務・職責・目標それぞれに%の重みを持たせ、加重平均でスコアを出す設計でした。「重みもなくていい」。合計100%に調整する画面ごと消えて、単純平均になりました。
法令区分・根拠規程・要件(criticality / basis / qualification) — 「法令とかいらない。重要度もいらない」。ISO用途を意識して入れた項目が、まとめて消えました。
職務・職責・目標の3テーブル分割 — Frappe HRの構造をそのまま踏襲していた部分です。「職務には職責があって、目標もあるけど、これは1:1:1」。1:1:1なら1行でいい。3テーブルが1テーブル(duties)になり、登録画面が3つから1つになりました。
評価期間(period) — 上期・下期の6か月サイクル、準備中→期中→評価中→確定のロック。人事システムなら当然入るものです。「期を考えるな。どの期間に誰が任命されてたかだけの情報で、期がシステムの機能には影響しないでしょ」。確かに、任命の日付があれば期は不要でした。テーブルもライフサイクルも画面も全部消えました。
引き継ぎパッケージ(handover) — その時点のスナップショットを固めて保存し、職の取扱説明書を生成する機能。これが一番大きな削除でした。「引き継ぎってのは、任命された人が前任の情報を見れるだけで、引き継げる」。記録が職に紐づいていれば、後任は最初から前任の記録を読める。 引き継ぎ書を生成する機能は、そもそも要らなかった。
評価(evaluation) — 自己評価→上長評価→確定のワークフロー。上長ロール(chief)ごと消えました。
監査ログ(audit) — 誰がいつ何を変えたかの記録。「監査もいらない」。タスクに記録者が残るので、実務上はそれで足りていました。
社員マスタ(employees) — これは最後に消えたものです。「kvgwcがある前提だと社員マスタはそっちで登録できるよね?」。誰が在籍しているかは会社の情報で、職の管理システムが二重に抱えると必ずズレる。外部のJSONを読むだけにしました。
結果: Frappe HR由来のものは、コードも構造も残らなかった
削り終わった状態を機械チェックした結果です。
| 初版(Frappe HR参考) | 現在 |
|---|---|
| 10テーブル | 4テーブル(posts / assignments / duties / tasks) |
| 8画面 | 4画面(ホーム / 職 / タスク / 任命) |
| 4ロール | 3ロール(担当者 / 管理者 / AI連携) |
| 重み・方向・承認者・法令区分・根拠規程・要件・階層・証跡URL・スナップショット | 全部削除 |
リポジトリ全文を検索して、frappe / erpnext / hrms などの痕跡はゼロ。vendorもcomposer.jsonも無く、外部から読み込むのは自分の設定ファイル1つだけです。参考にしたはずのものが、1行も残っていない。
残ったのはコードではなく、たった1つの原則でした。
記録の主語を「人」ではなく「職」に置く。
日報も管理表も個人フォルダも「誰が書いたか」で整理されているから、その人が抜けた瞬間に記録の所属先ごと消えます。職に紐づけておけば、担当者が代わっても記録は職に残る。これだけが生き残りました。
削る過程で、逆に足したものが1つある
削ってばかりではありませんでした。削っている最中に突きつけられた指摘がこれです。
「任命された人は前任の情報を見ながら登録したいの!入力が面倒だと誰も使わなくなるの」
その通りで、この手の仕組みが死ぬ原因は機能不足ではなく、白紙のフォームに毎回ゼロから書かせる設計にあります。目標管理シートをExcelで配って期末に誰も更新していない、というのはどの会社にもある光景です。
そこで登録フォームをタブにしました。「入力」タブと「これまでの記録からコピー」タブがあり、参照タブには前任を含む過去の記録が日付・記録者つきで並びます。「コピー」を押すと内容が入力欄に入って入力タブに戻る。定型のタスクも、前任が書いた職務・職責・目標も、引き写して違うところだけ直せば終わりです。
削る作業で機能を減らし、減らして空いた分を「入力を減らす仕掛け」に使った。これが今回いちばんの学びでした。
学び: 削った状態を維持する仕組みが要る
削るのは一度きりの作業ではありません。放っておくと必ず戻ります。人事の人に見せれば「上期・下期で区切りたい」と言われ、期のテーブルが復活する。
そこで自己テストに「構造の単純さ」の機械チェックを入れました。
periods/handovers/auditテーブルが存在しないこと- 社員テーブルを作らないこと、社員を書き込むSQLが無いこと
- テーブルは4つだけであること
weight列が無いこと、画面が5つを超えないこと
自己テストは全65件。誰かが後から機能を復活させると、テストが落ちてデプロイが止まります。「複雑にしない」を人の意志ではなくテストに担保させる——これは他の製品にも横展開する予定です。
できたもの: Kurage HR Post(職務・目標・引継ぎ管理)
まずデモをどうぞ: https://proto.exbridge.jp/khrpost/(管理者パスワード: demo2026)
経理責任者のタスク画面で「これまでの記録からコピー」タブを押すと、前任・鈴木一郎さんの記録が並びます。後任が前任の記録を読む、という一点を実際に触って確かめてください。
- 1ファイルPHP + SQLite。DBサーバー不要・常駐プロセスなし・レンタルサーバーに置くだけ
- 達成率はコードが決定的に計算(実績÷目標値・上限120%)。AIに採点させない
- 権限判定は関門1か所。担当者は任命された自分の職しか触れない
- 社員マスタは持たず、外部の
employees.jsonを読むだけ
入手する3つの方法
どのルートも中身は同じ製品・価格は統一です。違いは「誰がどこまでやるか」。
方法1: Brainで導入手順書つきを買う(55,000円税込) 記事形式の正規販売。有料部が丸ごと導入手順書で、設置手順に加えて職務・職責の書き分け方・目標値を件数に翻訳するコツ・社員マスタをCSVから作る実務・カスタマイズ用AIプロンプト4本・落とし穴5つを収録しています。 職務・目標・引継ぎ管理「Kurage HR Post」正規販売(Brain)
方法2: Kurage App Storeで完成品を買う(55,000円税込) 配布パッケージ一式(本体+自己テスト65件+Claude Code連携スキル)をダウンロード。ソースコードごと渡します(MIT)。 職務・目標・引継ぎ管理(Kurage App Store)
方法3: バイブコーディングで自社仕様にして納品(110,000円税込〜) 「うちの等級制度に合わせたい」「実績を件数でなく金額で測りたい」「部署別の一覧が要る」——自社仕様が必要なら、Kurage HR Postをベースに当社が拡張して納品します。最短1営業日で動くデモ。 バイブプロトタイピング
全体像と、引き継ぎ書が機能しない理由の解説はこちら: 引き継ぎ書を書かせても、属人化は消えない
考察: 「参考にする」の正しい使い方
今回、Frappe HRから継承したものは何もありません。では参考にした意味が無かったかというと、逆でした。
巨大なOSSは「業務ドメインの全体像を無料で見せてくれる教科書」です。 職・職務・職責・任命・評価期間・引き継ぎ——人事という領域に何が存在するのかを、Frappe HRのデータモデルが教えてくれました。その全体像を知った上で、自分たちの顧客に要るものだけを選び直す。この「知ってから削る」順序が重要で、最初から4テーブルを思いつくことはできませんでした。
そして削り切った結果、ライセンスの制約も、フレームワークの重さも、改造の難しさも全部消えて、1ファイルのPHPで買い切り55,000円という形になりました。参考にしたOSSの痕跡がゼロであることは、失敗ではなく到達点です。
数字はいつもの実験ダッシュボードで公開しながら育てます。