Graphify C# 0.1 릴리스 – C# 코딩 에이전트를 위한 컴파일러 정확도의 '사용 위치 찾기'
TL;DR – Graphify C#의 기능과 중요성
Graphify C#은 무료이며 헤드리스인 Roslyn/MSBuild 인덱서로, 어떤 C# 솔루션에 대해서도 컴파일러가 해결한 심볼, 호출, 참조, 상속 및 오버라이드에 대한 결정론적 JSON 그래프를 생성합니다. 이러한 의미적 증거를 제공함으로써 코딩 에이전트(예: Claude Code, Codex, 또는 사용자 정의 LLM 봇)는 신뢰할 수 없는 텍스트 검색 히ュ리스틱이 아닌 컴파일러 정확도로 '사용 위치 찾기' 유형의 질문에 답할 수 있습니다.
코딩 에이전트에게 즉각적인 가치
- 정확한 오버로드 해결 – 그래프는 바인딩된 서명을 저장하므로, 에이전트는
Foo(int)와Foo(string)를 구분할 수 있습니다. - 프로젝트 인식 관계 – 각 엣지는 원본 프로젝트와 대상 프레임워크를 기록하므로, "테스트 프로젝트에서만 사용되는 메서드"와 같은 쿼리를 가능하게 합니다.
- 완전한 언어 커버리지 – C# 14 (Roslyn 5.9) 및 C# 15 프리뷰(닷넷 11 SDK를 통해)를 지원하며, 제네릭, 패턴 매칭, 비동기, 컬렉션 표현식을 포함합니다.
- 영향 없는 런타임 종속성 – IDE가 필요 없으며, 컴파일된 DLL이나 외부 데이터베이스도 필요 없으며, 소비자가 읽을 수 있는 단일 JSON 파일로 출력됩니다.
도구의 동작 방식
- 설치 – .NET 글로벌 도구를 설치합니다:
dotnet tool install --global Graphify.CSharp --framework net10.0 - 인덱싱 – 솔루션, 프로젝트 또는 SDK 스타일 소스 폴더에 CLI를 실행합니다:
이 명령은graphify-csharp \ --input ./src/MyProduct.sln \ --root . \ --configuration Release \ --output ./graphify-out/csharp.jsonnodes,edges,hyperedges세 가지 최상위 배열을 포함하는 JSON 문서를 생성합니다. - 소비 – 에이전트는 JSON을 직접 읽거나
jq로 쿼리하거나, 경로 탐색, 클러스터링, 설명 생성을 위한 더 넓은 Graphify 워크플로우에 공급할 수 있습니다. - 증분 업데이트 –
--watch를 추가하면 Roslyn 워크스페이스가 활성 상태로 유지되며, 파일 변경 시 JSON이 업데이트됩니다.--rebuild는 전체 새로 고침을 강제합니다.
의미적 증거 vs. 일반 텍스트 검색
| Graphify 없음 | Graphify C# 사용 시 |
|---|---|
| 텍스트 매칭은 이름 문자열만 찾습니다. | Roslyn이 각 사용에 대한 정확한 선언을 해결합니다. |
| 오버로드와 제네릭은 모호합니다. | 바인딩된 서명과 프로젝트/TFM 식별자가 유지됩니다. |
| 테스트 전용 사용은 수동 검토가 필요합니다. | 모든 호출자는 프로젝트, 네임스페이스, 소스 위치를 포함합니다. |
| 타입 관계는 텍스트에서 추론해야 합니다. | inherits, implements, overrides는 명시적 엣지로 나타납니다. |
예시: DeclarationCatalogBuilder.ForTesting 메서드는 테스트 프로젝트에서 오는 단일 들어오는 호출 엣지와 함께 그래프에 나타나며, 에이전트에게 신뢰할 수 있는 "테스트 전용" 신호를 제공합니다.
LLM 에이전트와의 빠른 통합
이 저장소는 Codex 호환 에이전트와 Claude Code용 미리 준비된 스킬을 제공합니다. 스킬 설치는 한 줄로 가능합니다:
mkdir -p .agents/skills/graphify-csharp
curl -fsSL https://raw.githubusercontent.com/zachsaw/graphify-csharp/main/.agents/skills/graphify-csharp/SKILL.md \
-o .agents/skills/graphify-csharp/SKILL.md
스킬은 에이전트가 C# 관련 질문에 답하기 전에 JSON을 새로 고치고, calls 및 references 엣지를 탐색할 때 symbol_key 식별자를 사용하도록 지시합니다.
스킬을 사용하지 않으려면, 프롬프트 템플릿에 다음 지시문을 추가하세요:
C# 구조 및 사용 질문에 대해, 응답하기 전에
graphify-out/csharp.json을graphify-csharp로 새로 고치세요. 선언은symbol_key로 식별하고, 들어오는calls및references엣지를 검사하세요. 들어오는 엣지가 0개인 경우, 런타임 비도달성의 증거가 아니라 관찰된 정적 증거로 간주하세요.
이 맥락을 바탕으로 에이전트는 다음과 같은 질문에 답할 수 있습니다:
- 생성자의 어떤 오버로드가 호출되었는가?
- 어떤 클래스가 주어진 인터페이스를 구현하는가?
- 어떤 멤버가 가상 메서드를 오버라이드하는가?
- 어떤 선언이 관찰된 들어오는 참조가 0개인가?
Graphify C#의 생태계 내 위치
| 도구 | 주요 목적 | Graphify C#과의 중복 |
|---|---|---|
| Rider / ReSharper | 인터랙티브 IDE 탐색, 리팩터링, 진단. | 동일한 의미적 엣지를 제공하지만, IDE UI 내에서만 가능합니다. |
| NDepend | 아키텍처 분석, 메트릭, 베이스라인, 시각화. | 유사한 호출자/의존성 데이터를 제공하지만, 상용이고 무거운 솔루션입니다. |
| Graphify C# | 에이전트를 위한 헤드리스, 언어 수준의 의미적 인덱스. | 오픈 소스 JSON 형식으로 컴파일러 정확도의 원시 엣지를 제공하며, UI나 라이선스 제약이 없습니다. |
Graphify C#은 의도적으로 좁은 범위를 가집니다: NDepend의 보고서나 Rider의 UI를 대체하려 하지 않지만, 신뢰할 수 있는 정적 증거가 필요한 자동화된 에이전트를 위한 빈 공간을 채웁니다.
성능 및 확장성 고려사항
- JSON 크기 – 다수 백만 줄의 코드를 가진 솔루션의 경우 출력이 커질 수 있습니다. 사용자들은 SQLite 저장소가 더 확장 가능할지 묻고 있습니다. 현재 도구는 JSON을 생성하지만, 필요 시 후속 소비자는 이를 데이터베이스에 가져올 수 있습니다.
- 런타임 오버헤드 – Roslyn은 인덱싱 중에만 로드됩니다.
--watch모드는 워크스페이스를 활성 상태로 유지하지만, 인덱싱은 지속적인 백그라운드 서비스가 아니라 요청 시 실행됩니다. - 정적 분석 한계 – 그래프는 Roslyn이 정적으로 볼 수 있는 것만 반영합니다. 리플렉션, DI 컨테이너, 네이티브 인터옵, 동적 호출은 엣지로 표현되지 않습니다. 따라서 들어오는 엣지가 0개인 노드는 정적 참조가 관찰되지 않았음을 의미하며, 런타임에서 죽은 코드가 보장된 것은 아닙니다.
허커 뉴스 커뮤니티 피드백
bob1029: "내 VS Copilot은 이미 일회성 Roslyn 스크립트를 작성합니다; Graphify C#은 커뮤니티가 LLM 에이전트를 위해 Roslyn을 여전히 과소 평가하고 있음을 보여줍니다."
spicyusername: " upcoming C# 15 유니언에 대해 기대됩니다; Graphify C#은 이미 프리뷰 컴파일러를 지원합니다."
JFuzz: "Unity 패키지 개발용으로 스킬을 적응시켰습니다; CLI + JSON 워크플로우는 IDE 외부에서도 의미적 데이터에 접근 가능하게 합니다."
Merad: "백만 줄의 코드에서 JSON 확장성에 대해 우려됩니다; SQLite 백엔드를 제안합니다." coverband: "출력 형식이 더 넓은 Graphify‑Labs 생태계와 일치하는지 묻습니다."
quietraster: "인덱싱이 저장 시 발생하는지, 아니면 요청 시 발생하는지 알고 싶습니다; 도구는 요청 시(또는
--watch를 통해) 인덱싱합니다."
이러한 댓글들은 접근 방식에 대한 열정과 확장성 및 통합에 대한 실질적인 질문을 동시에 보여줍니다.
시작하기 체크리스트
- 적절한 런타임 설치 – Roslyn 5.9 (C# 14)용으로는
net10.0을, .NET 11 SDK (C# 15 프리뷰)용으로는net11.0을 선택하세요. - 인덱서 실행 –
graphify-csharp를 솔루션에 지정하고, 생성된csharp.json이nodes와edges를 포함하는지 확인하세요. - 에이전트와 통합 – 제공된 스킬을 추가하거나, 새로 고치고 쿼리하는 지시문을 프롬프트에 포함하세요.
- 반복 개선 – 활발한 개발 중에는
--watch를 사용하거나, CI 파이프라인에서 주기적인 새로 고침을 예약하세요.
라이선스 및 기여
Graphify C#은 MIT 라이선스 하에 배포됩니다. 저장소에는 사용법, 호환성, 증분 인덱싱, 릴리스 절차에 대한 문서가 포함된 docs/ 폴더와 함께 빌드 스크립트(dotnet restore, dotnet build, dotnet test, dotnet pack)가 포함되어 있습니다.
Sources
관련
- 프로젝트