OpenSource-Hub

freehire

アプリケーション

strelov1/freehire

オープンソースの求人検索エンジン。企業公式サイトの採用ページを直接集約します。

概要

freehire は Workday、Greenhouse、Lever などの企業 ATS 採用ページから数百万件の募集中求人を直接スクレイピングし、統一的に正規化・重複除去します。多次元の全文検索、サブスクリプション通知、履歴書生成、応募追跡、LLM マッチング分析を提供します。Go バックエンド、SvelteKit フロントエンド、PostgreSQL と Meilisearch を採用しており、完全にセルフホスト可能です。

README プレビュー

\n\n\n  \n  \n\n\n# freehire\n\n### Every IT job, straight from the source.\n\n**3.3M+ live postings pulled directly from company career pages — no recruiters, no reposts, no dead links. Fully open source.**\n\n[**Try it live →**](https://freehire.me) · [Features](docs/features.md) · [Architecture](docs/architecture.md) · [Sources](#sources) · [API](#api) · [Add a source](#adding-a-source) · [Contributing](CONTRIBUTING.md)\n\n[](https://freehire.me)\n[](LICENSE)\n\n\n[](https://github.com/strelov1/freehire/stargazers)\n[](https://github.com/strelov1/freehire/graphs/contributors)\n[](https://discord.gg/79cgB9RRfx)\n\n\n\n\n\n  \n    \n    \n  \n\n\n\n\n\n\n\n\n\n## Why freehire?\n\n- **Straight from the source.** Every listing is crawled directly from a company's\n  own ATS — Workday, Greenhouse, Lever, Ashby, iCIMS and a long tail of others — and\n  links to the original posting. No recruiter reposts, no aggregator middlemen, no\n  dead links.\n- **One schema, deduplicated.** The same role posted to three boards collapses into\n  one entry: every posting is normalized into a single shape and deduplicated on a\n  stable key.\n- **Search that understands jobs.** Faceted full-text search over region, work mode,\n  seniority, skills and salary — derived from curated dictionaries, never guessed.\n- **Actually open.** MIT-licensed and self-hostable, pipeline and data both in the\n  open. Adding a company is one row in the board catalog\n  ([how](#adding-a-source)).\n- **Yours to build on.** A clean HTTP API, a CLI, Telegram digests, and a whole\n  workspace on top of the catalogue — see [Beyond the catalogue](#beyond-the-catalogue).\n  Use the hosted site, run your own, or build on top.\n\nAggregating **3.3M+ unique live postings** from **470,000+ companies** across\n**124 ATS platforms**, a long tail of aggregators and direct feeds, and **97\nTelegram channels** — **320 sources** in all, see [Sources](#sources) for the full\nbreakdown. Reposts of one job across boards ar

FAQ (3)

トラブル対応
スタックを再起動した後、なぜ docker compose up が s3-init コンテナでいつまでもハングしてしまうのですか?

2回目の make up では、s3-init のリトライループがバケット作成の PUT リクエストしか送信しないため、s3-init がハングします。バケットがすでに存在する場合、s3mock は 409 BucketAlreadyOwnedByYou を返し、curl -f は終了コード 22 で終了し、until ループが永遠にリトライを繰り返すため、コンテナが Waiting ステータスのままスタックします。

修正: この問題は PR #3265 でパッチが適用されました(2026-10-19 にマージ)。init スクリプトは、まずバケットが存在するかどうかを確認し、存在しない場合にのみ作成するようになったため、初回実行時も2回目以降の実行時も終了コード 0 で終了します(adobe/s3mock:5.2.3 で検証済み)。

解決するには、チェックアウトを更新して再起動してください:

git pull origin main
make down
make up

参照 Issue #3264
トラブル対応
ジョブカードのスワイプを妨げる 'job not found' エラーの修正方法

ジョブは通常削除されていたわけではありませんでした — ソースがジョブ名を変更し、バックフィルがURLスラッグを再発行したため、スワイプデッキは古いスラッグを保持したままとなり、POST /api/v1/jobs/<old-slug>/dismiss が404を返していました。修正方法: PR #3289を含むバージョンにアップデートしてください。このPRにより、バックフィルが公開済みジョブのスラッグを変更しなくなり、古いスラッグは現在のURLへ301リダイレクトされるようになります。それでもカードがスタックする場合は、web/src/lib/components/SwipeDeck.svelte にパッチを適用してください: judge() 内の send.catch(...) ハンドラーは、どんな失敗時にもカードを先頭に戻します — これを、ネットワークエラーの場合のみカードを戻し、サーバーが404で応答した場合は破棄するように変更してください。404はジョブがもう存在しないことを意味するためです。

参照 Issue #3284
トラブル対応
「Locations:」プレフィックスが付いたGreenhouseの求人投稿で国と地域が空になるのはなぜですか?また、どのように修正できますか?

一部のGreenhouseの求人では、勤務地が Locations: というラベル接頭辞付きで保存されており(例: Locations: San Francisco)、location.Parse がこれを解決できません。その結果、jobs.countries と jobs.regions が空のままになり、country=us フィルターがその求人を取りこぼします。修正方法: パースの前に、Greenhouseアダプターまたは normalize.CleanLocation で Locations: ラベルを除去してください。なお、リスティング側の修正では、すでに保存されている行は修復されません。接頭辞を持つ行がどれくらいあるかを計測し、AGENTS.md に記載されている INGEST_REFETCH_ALL / backfill-derive ジョブを使って再導出してください。

参照 Issue #3281