본문으로 건너뛰기
cccskills
무료GitHub에 공개

zig-best-practices

Use when reading or writing Zig files (.zig, build.zig, build.zig.zon).

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(4)

  • SKILL.md3.3 KB
  • C-INTEROP.md2.0 KB
  • DEBUGGING.md1.6 KB
  • GENERICS.md1.7 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Zig Best Practices

Follows type-first, functional, and error handling patterns from AGENTS.md. This skill covers Zig-specific idioms only.

Type System Patterns

Tagged unions for mutually exclusive states — prevents invalid combinations that a struct with multiple nullable fields would allow:

const RequestState = union(enum) {
    idle,
    loading,
    success: []const u8,
    failure: anyerror,
};

Explicit error sets — documents exactly what can fail; anyerror hides failure modes:

const ParseError = error{ InvalidSyntax, UnexpectedToken, EndOfInput };
fn parse(input: []const u8) ParseError!Ast { ... }

Distinct types for domain IDs — compiler prevents mixing up different ID types:

const UserId = enum(u64) { _ };
const OrderId = enum(u64) { _ };

Comptime validation — catch invalid configurations at compile time, not runtime:

fn Buffer(comptime size: usize) type {
    if (size == 0) @compileError("buffer size must be greater than 0");
    return struct { data: [size]u8 = undefined, len: usize = 0 };
}

Memory Management

  • Pass allocators explicitly to every function that allocates; no global allocator state.
  • Place defer resource.deinit() immediately after acquisition — keeps cleanup co-located with creation.
  • Use errdefer for cleanup on error paths; defer for unconditional cleanup.
  • Use arena allocators for batch/temporary work; they free everything at once.
  • Use std.testing.allocator in tests — reports leaks with stack traces.
fn createResource(allocator: std.mem.Allocator) !*Resource {
    const resource = try allocator.create(Resource);
    errdefer allocator.destroy(resource);  // runs only on error
    resource.* = try initializeResource();
    return resource;
}

Key Conventions

  • Prefer const over var; prefer slices over raw pointers.
  • Prefer comptime T: type over anytype; explicit types produce clearer errors. Use anytype only for genuinely polymorphic cases (callbacks, std.debug.print-style).
  • Exhaustive switch: include an else returning an error or unreachable for truly impossible cases.
  • Use std.log.scoped(.module_name) for namespaced logging; define a module-level const log constant.
  • Larger cohesive files are idiomatic — tests alongside implementation, comptime generics at file scope.

Advanced Topics

  • Generic containers (queues, stacks, trees): See GENERICS.md
  • C library interop (raylib, SDL, curl): See C-INTEROP.md
  • Debugging memory leaks (GPA, stack traces): See DEBUGGING.md

Tooling

zigdoc — browse std library and dependency docs:

zigdoc std.mem.Allocator   # std lib symbol
zigdoc vaxis.Window        # project dependency
zigdoc @init               # create AGENTS.md with API patterns

ziglint — static analysis with .ziglint.zon config:

ziglint                    # lint current directory
ziglint --ignore Z001      # suppress specific rule

References

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

agent-tui

무료

Automate terminal UI (TUI) apps with agent-tui for testing, inspection, demos, and scripted interactions. Use when automating CLI/TUI flows, regression testing terminal apps, verifying interactive behavior, or extracting structured text from terminal UIs. Also use when asked what agent-tui is, how it works, or to demo it. Do not use for web browsers, GUI apps, or non-terminal interfaces.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

napisani/proctmux112026년 10월 8일 업데이트

Use when adding, running, or debugging proctmux end-to-end integration tests, especially PTY/TUI behavior, terminal snapshots, unified/client modes, timing flakes, VT100 emulator limits, or files under tests/e2e and internal/testharness/e2e.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

napisani/proctmux112026년 10월 8일 업데이트

Use this skill whenever the user wants to create, edit, explain, validate, or troubleshoot a proctmux.yaml/procmux.yaml file, add or change proctmux processes, configure lifecycle behavior such as stop signals/on_kill/autostart, customize unified-mode layout/keybindings/style, or enable Makefile/package.json process discovery. Use it even when the user says this casually, such as "add my dev server to proctmux", "fix this proctmux config", "write a config for these services", or "what YAML option controls focus".

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

napisani/proctmux112026년 10월 8일 업데이트

This skill should be used when designing terminal user interfaces, creating TUI layouts, choosing TUI color schemes, implementing keyboard navigation, building terminal dashboards, or working with any TUI framework. Activates on mentions of TUI design, terminal UI, Ratatui layout, Ink components, Textual widgets, Bubbletea views, terminal color palette, keybinding design, panel layout, split panes, terminal dashboard, box-drawing characters, sparklines, progress bars, modal dialogs, focus management, or terminal accessibility.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

napisani/proctmux112026년 10월 8일 업데이트

Harness-first workflow for evaluating and improving terminal UIs through real interaction. Use this whenever the user wants to review a TUI experience, compare before/after behavior, identify UX friction, validate navigation or filtering flows, inspect visual stability, or turn observed interaction problems into concrete follow-up tests and improvement recommendations. Prefer this skill any time a TUI should be exercised through a reproducible PTY/session harness instead of only reading code.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

napisani/proctmux112026년 10월 8일 업데이트

napisani의 스킬 모두 보기

이 스킬의 문제 신고