AI

OSS人事管理システム比較:OrangeHRM vs Odoo HR vs Leave Management で従業員管理をセルフホスト

オープンソースラボ編集部2026年6月14日

OSS人事管理システム比較:OrangeHRM vs Odoo HR vs Leave Management で従業員管理をセルフホスト

BambooHR(Essentialプランで月$5.25/従業員〜)・Workday(大企業向けで年数百万円〜)に対して、OrangeHRM(コミュニティ版無料のフルスタックHRM)・Odoo HR(ERPと統合したHRモジュール)・Leave Management(Django-leave-management)(有給管理特化のシンプルなOSS)はセルフホスト可能なOSSのHRツールです。

OSS人事管理ツールが必要な場面

  • 中小企業の従業員データ管理: 従業員情報・雇用形態・部門・役職のデータベース
  • 有給・休暇申請: 残日数管理・申請ワークフロー・自動承認
  • 採用管理: 求人掲載・応募者追跡(ATS)・面接スケジュール
  • 給与・経費精算: 給与計算・経費申請と精算
  • 評価・目標管理: 半期評価・OKR・フィードバック

主要ツールの概要

OrangeHRM

2005年から開発されているフルスタックのHRMソフトウェアです。GitHubスター1.2k+。コミュニティ版はApache 2.0ライセンスで無料。従業員管理・採用・有給管理・タイムシート・評価・研修機能を提供します。PHP/Symfonyで実装され、MySQLバックエンドを使用します。300社以上で10万名以上の従業員を管理する実績があります。

# OrangeHRMをDockerで起動
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
  orangehrm:
    image: orangehrm/orangehrm:latest
    restart: always
    ports:
      - "80:80"
    environment:
      MYSQL_HOST: mysql
      MYSQL_PORT: 3306
      MYSQL_DATABASE: orangehrm
      MYSQL_USER: orangehrm
      MYSQL_PASSWORD: your-password
      ORANGEHRM_URL: https://hr.yourcompany.com
    volumes:
      - orangehrm_data:/var/www/html
    depends_on:
      - mysql

  mysql:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_DATABASE: orangehrm
      MYSQL_USER: orangehrm
      MYSQL_PASSWORD: your-password
      MYSQL_ROOT_PASSWORD: root-password
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  orangehrm_data:
  mysql_data:
EOF

docker compose up -d
# WebUI: http://localhost
# デフォルト認証: admin / admin123 (初回は変更推奨)
# OrangeHRM APIで従業員を取得
import requests

OHR_URL = "https://hr.yourcompany.com"
# OAuth 2.0トークンを取得
token_resp = requests.post(f"{OHR_URL}/oauth/issueToken", data={
    "client_id": "api_oauth_id",
    "client_secret": "oauth_secret",
    "grant_type": "password",
    "username": "admin",
    "password": "admin123",
})
access_token = token_resp.json()["access_token"]

headers = {"Authorization": f"Bearer {access_token}", "Content-Type": "application/json"}

# 従業員一覧を取得
employees = requests.get(
    f"{OHR_URL}/api/v2/pim/employees",
    headers=headers,
    params={"limit": 50, "offset": 0}
).json()

for emp in employees["data"]:
    print(f"{emp['employeeId']}: {emp['firstName']} {emp['lastName']} - {emp['jobTitle']['title']}")

# 有給申請状況を取得
leaves = requests.get(
    f"{OHR_URL}/api/v2/leave/leave-requests",
    headers=headers,
    params={"status[0]": "PENDING"}
).json()
print(f"Pending leave requests: {leaves['meta']['total']}")

Odoo HR

オープンソースのERP「Odoo」のHRモジュールです。GitHubスター40k+(Odoo本体)。ERPと完全統合されているため、採用→入社→給与→経費→退社のフルライフサイクルを一つのシステムで管理できます。採用(Recruitment)・従業員管理(Employees)・有給管理(Time Off)・経費(Expenses)・評価(Appraisals)・給与(Payroll)が全て統合されています。Python(Django風フレームワーク)実装です。

# OdooをDockerで起動
cat > docker-compose.yml << 'EOF'
version: '3.1'
services:
  web:
    image: odoo:17.0
    depends_on:
      - db
    ports:
      - "8069:8069"
    volumes:
      - odoo-web-data:/var/lib/odoo
      - ./config:/etc/odoo
    environment:
      HOST: db
      USER: odoo
      PASSWORD: myodoo

  db:
    image: postgres:15
    environment:
      POSTGRES_DB: postgres
      POSTGRES_PASSWORD: myodoo
      POSTGRES_USER: odoo
    volumes:
      - odoo-db-data:/var/lib/postgresql/data

volumes:
  odoo-web-data:
  odoo-db-data:
EOF

docker compose up -d
# WebUI: http://localhost:8069
# 初回セットアップ: データベース名・メールアドレス・パスワードを設定
# Odoo XML-RPC APIで従業員を管理
import xmlrpc.client

url = "https://odoo.yourcompany.com"
db = "yourcompany"
username = "admin@yourcompany.com"
password = "admin-password"

# 認証
common = xmlrpc.client.ServerProxy(f"{url}/xmlrpc/2/common")
uid = common.authenticate(db, username, password, {})

models = xmlrpc.client.ServerProxy(f"{url}/xmlrpc/2/object")

# 従業員一覧を取得
employees = models.execute_kw(
    db, uid, password,
    "hr.employee", "search_read",
    [[["active", "=", True]]],
    {"fields": ["name", "job_title", "department_id", "work_email"], "limit": 50}
)

for emp in employees:
    dept = emp["department_id"][1] if emp["department_id"] else "未設定"
    print(f"{emp['name']} | {emp['job_title']} | {dept}")

# 採用求人を作成
job_id = models.execute_kw(
    db, uid, password,
    "hr.job", "create",
    [{"name": "シニアエンジニア", "department_id": 1, "no_of_recruitment": 2}]
)
print(f"Created job: {job_id}")

Leave Management(Django leave management)

シンプルな有給管理に特化したDjango製OSSです。GitHubスター600+。大規模なHRMSは不要だが有給申請・承認・残日数管理だけを自社サーバーで管理したい小規模チームに適しています。シンプルなUIと設定で素早く導入できます。

# Django Leave Managementをセットアップ
git clone https://github.com/edwinlunando/django-leave-management.git
cd django-leave-management
pip install -r requirements.txt

# 環境設定
cp .env.example .env
# データベース設定(デフォルトSQLite)

python manage.py migrate
python manage.py createsuperuser
python manage.py runserver

# またはDockerで
docker build -t leave-management .
docker run -d -p 8000:8000 -v leave_data:/app/data leave-management

機能比較表

比較項目OrangeHRMOdoo HRLeave Management
従業員管理✅(詳細)
有給管理✅(特化)
採用(ATS)
給与計算✅(有料版)
ERP統合
セットアップ難易度
対象規模10〜500名10〜5000名5〜50名

従業員の日程管理・会議予約にはCommunicationカテゴリ/categories/communicationのCal.comが有効です。HRデータのBIレポートにはDevOpsカテゴリ/categories/devopsのMetabaseやApache Supersetで可視化できます。

FAQ

Q. OrangeHRMとBambooHRの機能差を教えてください

A. BambooHRが優れている点: ①セットアップが極めて簡単(SaaS)②モバイルアプリが充実③ダッシュボード・レポートがわかりやすい④Workdayほどの複雑さがなくSMBに最適。OrangeHRMが優れている点: ①コミュニティ版は完全無料②セルフホストでデータ主権を確保③カスタマイズが可能(PHPコードで拡張)④採用・有給・タイムシート・評価が標準で揃う。従業員50名未満で管理工数を最小化したいならBambooHRのコスパが良い場合もありますが、従業員数が増えると月額コストが大きくなるため100名超ではOrangeHRMのROIが高まります。

Q. OdooはHR用途だけで使えますか?それともERP全体を導入しないといけませんか?

A. HRモジュール単体でのインストールは可能です。Odooはモジュール式で、必要なモジュールだけを有効化できます。HR用途のみの場合: ①Employees(従業員管理)②Time Off(有給管理)③Recruitment(採用)④Expenses(経費)⑤Appraisals(評価)だけを有効化し、在庫・会計・製造モジュールは無効にできます。ただしOdooのUIはERPとして設計されているため、HR専用ツールに比べて画面遷移が複雑です。「HRだけ使いたい」のであれば、OrangeHRMの方がシンプルでしょう。

Q. 日本の労務法規(有給5日取得義務・36協定等)に対応できますか?

A. OrangeHRMコミュニティ版は日本の法規制に特化した機能はなく、カスタマイズが必要です。具体的に対応が必要な要件: ①有給5日取得義務: カスタムレポートで年5日未満の従業員を抽出する機能は実装可能②36協定: 月次・年次の残業時間上限管理はタイムシートモジュールで基本追跡可能(上限アラートは要カスタマイズ)③マイナンバー管理: 機密情報のため暗号化ストレージとアクセスログが必要(要カスタマイズ)。現状では日本法規制の完全対応にはsmartHRやfreee人事労務のような国産SaaS、またはsayhr(OSS)等の国内特化ツールの方が現実的です。

Q. OrangeHRMでSlack通知を設定できますか?

A. OrangeHRM標準ではSlack通知はありませんが、Webhookを使ったカスタム統合が可能です。

// OrangeHRM Plugin: Slack Webhook通知(カスタム実装例)
// src/plugins/MyPlugin/lib/SlackNotifier.php

class SlackNotifier {
    private string $webhookUrl;

    public function __construct() {
        $this->webhookUrl = "https://hooks.slack.com/services/YOUR_WEBHOOK";
    }

    public function notifyLeaveApproval(string $employeeName, string $leaveType, string $dates): void {
        $message = [
            "text" => "*有給申請承認* :white_check_mark:",
            "blocks" => [
                [
                    "type" => "section",
                    "text" => [
                        "type" => "mrkdwn",
                        "text" => "*{$employeeName}* さんの {$leaveType} が承認されました
日付: {$dates}",
                    ]
                ]
            ]
        ];
        file_get_contents($this->webhookUrl, false, stream_context_create([
            "http" => [
                "method" => "POST",
                "header" => "Content-Type: application/json",
                "content" => json_encode($message),
            ]
        ]));
    }
}

まとめ

ユースケース推奨ツール
フルスタックHRM・採用〜退社OrangeHRM
ERP統合・給与・経費精算Odoo HR
有給管理のみ・小規模Leave Management

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。