OSSのヘルプデスク比較:Zammad vs osTicket vs FreeScout でZendesk代替をセルフホストする
オープンソースラボ編集部 ・ 2026年6月13日
OSSのヘルプデスク比較:Zammad vs osTicket vs FreeScout でZendesk代替をセルフホストする
Zendesk(月$49/エージェント〜)・Freshdesk(月$15/エージェント〜)に対して、Zammad(最もモダンなUIのOSSカスタマーサポートプラットフォーム)・FreeScout(Laravel製・軽量・HelpScout互換)・osTicket(最も古くから使われるOSSチケットシステム)はOSSのヘルプデスク・カスタマーサポートツールです。
OSSヘルプデスクを選ぶ理由
- コスト: Zendesk 10エージェントで月$490。Zammadセルフホストなら$0(サーバー代のみ)
- データ主権: 顧客の問い合わせ情報・メール・添付ファイルを自社サーバーで管理
- カスタマイズ: ワークフロー・トリガー・マクロ・カスタムフィールドを自由に設定
- 統合: 社内のSlack・LDAP・CRMとのシームレスな連携
主要ツールの概要
Zammad
2016年に公開されたRuby on Rails/Vue.js製のOSSカスタマーサポートプラットフォームです。GitHubスター4.4k+。メール・チャット・電話・WhatsApp・Twitter/X・Facebookを1画面で統合管理できるオムニチャネル対応が特徴。Slackに似たリアルタイムUI・全文検索・SLA管理・ナレッジベース・レポートを備え、Zendesk代替として中規模組織に最も向いています。
# Zammad を Docker Compose でセルフホスト
git clone https://github.com/zammad/zammad-docker-compose
cd zammad-docker-compose
# .env ファイルを作成
cat > .env << 'EOF'
ZAMMAD_FQDN=support.yourcompany.com
POSTGRES_PASS=your-secure-postgres-password
ELASTICSEARCH_ENABLED=true
EOF
# 起動
docker compose up -d
# WebUI: https://support.yourcompany.com
# 初回アクセスでセットアップウィザードが表示される
# Zammad APIでチケットを操作(GitHub Actions / CI通知との統合)
# チケット一覧を取得
curl -H "Authorization: Token token=your-api-token" "https://support.yourcompany.com/api/v1/tickets?state=open&per_page=25"
# 新規チケットを作成(監視アラートから自動起票)
curl -X POST -H "Authorization: Token token=your-api-token" -H "Content-Type: application/json" "https://support.yourcompany.com/api/v1/tickets" -d '{
"title": "本番サーバーのCPU使用率が90%を超えました",
"group": "IT運用",
"customer_id": "monitoring@yourcompany.com",
"article": {
"subject": "アラート: CPU使用率 91%",
"body": "サーバー prod-web-01 のCPU使用率が91%に達しました。確認してください。",
"type": "note",
"internal": true
},
"priority": "3 high",
"state": "new"
}'
# Zammad Python APIクライアントでチケット管理を自動化
# pip install zammad_py
from zammad_py import ZammadAPI
client = ZammadAPI(
url="https://support.yourcompany.com",
username="admin@yourcompany.com",
password="admin-password",
)
# オープンチケット一覧を取得
tickets = client.ticket.all()
for ticket in tickets:
print(f"#{ticket['id']}: {ticket['title']} [{ticket['state']}]")
# チケットにコメントを追加
def add_comment(ticket_id: int, message: str, internal: bool = False):
client.ticket_article.create(
params={
"ticket_id": ticket_id,
"body": message,
"type": "note",
"internal": internal,
"sender": "Agent",
}
)
# SLAを超過しているチケットをSlackに通知
import httpx
from datetime import datetime, timezone
def notify_overdue_tickets(slack_webhook: str):
overdue = []
for ticket in client.ticket.search("state:open"):
created = datetime.fromisoformat(ticket["created_at"].replace("Z", "+00:00"))
age_hours = (datetime.now(timezone.utc) - created).total_seconds() / 3600
if age_hours > 24: # 24時間以上未対応
overdue.append({
"id": ticket["id"],
"title": ticket["title"],
"age_h": round(age_hours),
})
if overdue:
text = f":warning: SLA超過チケット {len(overdue)}件:
"
for t in overdue:
text += f" • #{t['id']}: {t['title']} ({t['age_h']}時間経過)
"
httpx.post(slack_webhook, json={"text": text})
FreeScout
2019年に公開されたPHP/Laravel製のOSSヘルプデスクです。GitHubスター2.8k+。HelpScoutのクローンを目指したシンプルなメールサポートツールで、メール受信・返信・割り当て・タグ・メモ・検索の基本機能に絞っています。ZammadやZendeskのような複雑な設定なしに5分でセットアップできます。
# FreeScout をDockerで起動(最軽量構成)
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
freescout-app:
image: tiredofit/freescout:latest
restart: unless-stopped
ports:
- "80:80"
environment:
VIRTUAL_HOST: support.yourcompany.com
DB_HOST: freescout-db
DB_PORT: 3306
DB_NAME: freescout
DB_USER: freescout
DB_PASS: freescout_password
APP_NAME: "YourCompany Support"
APP_URL: https://support.yourcompany.com
MAIL_DRIVER: smtp
SMTP_HOST: smtp.yourcompany.com
SMTP_PORT: 587
MAIL_FROM: support@yourcompany.com
volumes:
- freescout_data:/data
freescout-db:
image: mariadb:10.11
environment:
MYSQL_ROOT_PASSWORD: root-password
MYSQL_DATABASE: freescout
MYSQL_USER: freescout
MYSQL_PASSWORD: freescout_password
volumes:
- db_data:/var/lib/mysql
volumes:
freescout_data:
db_data:
EOF
docker compose up -d
機能比較表
| 比較項目 | Zammad | FreeScout | osTicket |
|---|---|---|---|
| UI/UX | Zendesk風・モダン | HelpScout風・シンプル | 旧来のPHPアプリ |
| オムニチャネル | ✅(メール・チャット・SNS) | メールのみ | メール・Web |
| ナレッジベース | ✅ | ✅(拡張) | ✅ |
| Slack通知 | ✅ | ✅(拡張) | ❌ |
| SLA管理 | ✅ | ❌ | ✅(基本) |
| APIアクセス | ✅(RESTful) | ✅ | ✅ |
| GitHub Stars | 4.4k+ | 2.8k+ | 3k+ |
Zammadのアラート自動起票はDevOpsカテゴリ/categories/devopsのGrafana/Prometheusのアラートルールと連携して監視系イベントを自動チケット化できます。FreeScoutのメール統合はCommunicationカテゴリ/categories/communicationのPostfix・Mattermost通知と組み合わせて使えます。
FAQ
Q. ZendeskからZammadへの移行はできますか?
A. できます。ZammadはZendesk XMLインポート機能を持っています。手順: ①Zendesk管理 → Support → Export → XML形式でエクスポート②Zammad管理 → Import → Zendesk③ZIPをアップロード→チケット・ユーザー・グループが自動インポート。移行される内容: チケット・コメント・添付ファイル・ユーザー・グループ・タグ。移行されない内容: Zendeskマクロ・トリガー・ビューの一部(Zammadの同等機能に手動設定し直しが必要)。Freshdesk・osTicket・Jira Service Deskからのインポートも対応しています。
Q. Zammadで日本語メールの文字化けを防ぐには?
A. Zammadはデフォルトでメールのエンコーディングを自動検出しますが、一部のISO-2022-JP(JIS)エンコードのメールで文字化けが発生することがあります。対処法: ①Zammad管理 → Email → Channel設定でエンコーディングをUTF-8に統一②メールサーバー側でISO-2022-JPをUTF-8に変換するPostfixフィルターを追加③FreeScoutは日本語対応が弱いため、日本語環境のプライマリにはZammadを推奨します。
Q. Zammadの「トリガー」でメール自動返信を設定するには?
A. Zammad管理 → Trigger → New Triggerで設定します。自動返信トリガーの例: 条件: チケット作成時 + チャンネルがEmail + State = new / アクション: メール送信(送信者: noreply@yourcompany.com、件名: 「[チケット番号] お問い合わせを受け付けました」、本文テンプレート)+ State = open + 担当グループ = カスタマーサポート。SLAトリガー: 作成から4時間経過 + State = open → 優先度を「高」に変更 + 担当者にメール通知。Zendesk Triggerと同等の機能がZammadでも設定できます。
Q. FreeScoutとZammadのどちらを選ぶべきですか?
A. 用途によります。FreeScoutを選ぶとき: ①メールサポートだけで十分(チャット・SNS統合は不要)②エンジニアが少なく設定が簡単なツールが必要③月1000件以下の問い合わせ量④HelpScoutから移行したい。Zammadを選ぶとき: ①複数チャネル(メール・チャット・電話・WhatsApp)を一元管理したい②SLA・レポート・ナレッジベースが必要③エージェント5人以上でチームコラボレーションが必要④ZendeskからのUI移行ユーザーに違和感を少なくしたい。小規模(〜5人・メールのみ)ならFreeScout、中規模以上ならZammadが無難です。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| Zendesk代替・オムニチャネル・SLA管理 | Zammad |
| メールサポート特化・HelpScout代替・軽量 | FreeScout |
| 伝統的なチケットシステム・PHPホスト | osTicket |