Skip to content

Repository files navigation

tech-feed

エンジニア向けの技術記事アグリゲータ。ローカルは Docker Compose だけで動かします。

起動

docker compose up --build

秘密情報はリポジトリ直下の .env に置きます。初回は .env.example をコピーしてください。docker compose は同じディレクトリの .env を自動で読みます。

cp .env.example .env

crawler プロセスが起動時と CRAWL_INTERVAL(既定 15 分)ごとに Zenn RSS と Qiita API を取り込みます。Zenn のトピックは記事詳細 API で補完します。CRAWL_INTERVAL=0 で定期実行だけ止められます。feed は一覧とユーザーだけを担当します。

TYPESAFE_API_KEY があるとき、crawler は取り込み後に TypeSafe Jev で記事の種別・難易度・品質・宣伝度を付けます。キーは .env に書きます。無いときはスキップします。おすすめ一覧では宣伝記事を落とし、品質スコアでブーストします。

ログインは nnf3-idp の Hydra を使います。ブラウザは http://localhost:3001 ではなく http://127.0.0.1:3001 で開いてください。

./scripts/register-idp-client.sh

IdP 側で登録またはログインすると http://127.0.0.1:3001/callback に戻ります。ユーザーは feed が Postgres の users に保存します。/me と /me/profile、/me/bookmarks、/me/history、一覧のパーソナライズは BFF の FEED_INTERNAL_TOKEN と X-User-ID が必要です。ユーザー ID はパスやクエリには載せません。ブックマークと閲覧履歴は記事のスナップショット(URL / タイトル / ソース)を Postgres に残します。

compose.yaml は開発用です。Go と Next.js はボリュームマウントしているので、ソースを保存すればコンテナ内で再ビルド / ホットリロードされます。go.mod や package.json を変えたときだけ docker compose up --build し直してください。本番向けの焼き込みイメージは各ディレクトリの Dockerfile です。

構成

  • apps/web — Next.js(フロント + BFF)。OIDC セッションと画面。Postgres は触らない
  • services/feed — Go。cmd/server が一覧とユーザー、cmd/crawler が定期収集と TypeSafe による記事判定。記事は Elasticsearch、ユーザーとプロフィールは Postgres
  • infra/elasticsearch — Kuromoji + ICU 入り Elasticsearch

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages