GitHub Gem Hunter
목적
주어진 도메인에 대해 가치가 높지만 가시성이 낮은 GitHub 리포지토리를 주제 그래프 전반을 광범위하게 탐색하고 별표 수 및 날짜 구간을 깊이 있게 검색하여 발굴합니다.
사용 시기
- 사용자가 특정 기술 분야에서 "숨은 보석", "과소평가된", "놓친 기회", 또는 "내가 놓치고 있는 것"을 요청할 때
- 사용자가 단순히 가장 잘 알려진 리포지토리 하나가 아닌 발견을 원할 때
- 사용자가 주제, 언어 또는 문제 설명을 제공할 때
사용 금지 시기
- 사용자가 가장 인기 있는 리포지토리를 원할 때 (별표 수로 직접 검색)
- 사용자가 코드 검색을 원할 때 (리포지토리 검색이 아닌 코드 검색 사용)
- 사용자가 GitHub 토큰이 없으면서 깊이 있는 결과를 기대할 때 (제한 사항에 대해 경고)
실행 파이프라인
0단계 — 인증 확인
ghCLI가 인증된 경우 선호; 그렇지 않으면GITHUB_TOKEN필요.- 인증되지 않은 경우 경고: 검색은 분당 약 10회 요청으로 제한되며 결과가 얕습니다.
1단계 — 주제 확장 (광범위)
/search/topics?q=<사용자-주제>를 쿼리하여 관련 주제 이름을 찾습니다.- 3~8개의 관련 주제로 구성된 주제 클러스터를 만듭니다.
- 클러스터의 각 주제에 대해
topic:한정자를 사용하여 리포지토리 쿼리를 구성합니다.
2단계 — 별표 구간 슬라이싱 (깊이)
클러스터의 각 주제에 대해 다음 분리된 구간을 실행합니다:
stars:1..10, stars:11..50, stars:51..200, stars:201..1000, stars:1001..5000.
각 구간 내에서 1,000개 결과 제한까지 페이지를 매깁니다.
3단계 — 최근 활동 필터
1,000개 이상의 결과를 반환하는 구간의 경우, 각 창이 제한 미만이 될 때까지 pushed: 날짜 범위를 재귀적으로 분할합니다.
4단계 — 낮은 별표 보석 수집
주제별로 stars:1..20 전용 쿼리를 pushed:>YYYY-MM-DD (6개월 전)와 함께 실행합니다. 이를 별도로 수집합니다.
5단계 — 중복 제거 및 보강
full_name을 기준으로 중복을 제거합니다.- 메타데이터 가져오기: 별표, 포크, 열린 이슈, 푸시 날짜, 생성 날짜, 주제, 라이선스, README 길이 (contents API 통해).
- 사용자가 요청하지 않는 한 포크는 제외합니다 (
fork:true).
6단계 — 점수화 및 순위 매기기
보석 점수 적용:
- 별표 속도 (생성 이후 개월 수 대비 별표 수)
- 마지막 푸시 이후 일수 (낮을수록 좋음)
- README 길이 및 구조
- 주제 관련성 밀도
- 이슈 응답성 (가능한 경우)
결과를 다음 그룹으로 나눕니다:
- 활성 보석 (최근 커밋, 상승 속도)
- 사전 주목 보석 (낮은 별표, 최근 활동)
- 간극 메우기 (두 주제 클러스터를 연결하는 리포지토리)
7단계 — 출력
다음 열이 포함된 순위가 매겨진 마크다운 테이블 반환:
리포지토리 | 별표 | 수명 | 마지막 푸시 | 보석인 이유
짧은 방법론 설명과 API 속도 제한에 대한 주의 사항을 포함합니다.
오류 처리
- HTTP 403 (보조 속도 제한) 발생 시: 지수 백오프와 함께 대기 후 재시도.
- HTTP 422 (쿼리 너무 복잡) 발생 시: 가장 덜 중요한 한정자를 제거하여 쿼리를 단순화하고 재시도.
- 별표 구간에 대한 결과가 비어 있는 경우: 해당 구간을 건너뛰고 계속 진행합니다.
제한 사항
- GitHub 검색은 각 쿼리를 1,000개 결과로 제한합니다. 슬라이싱이 완화하지만 완전히 제거하지는 않습니다.
- 별표 속도는 매우 새로운 리포지토리(30일 미만)의 경우 노이즈가 있습니다.
- README 길이는 품질의 대리 지표이지 보장이 아닙니다.