Nix로 재현 가능한 데이터 과학, 파트 7 — Github Actions에서 Nix를 사용해 Quarto 책 만들기 | R‑bloggers

R-Blogger · 블로그·해설 · 2023-10-18

R-Blogger블로그·해설한국어2023-10-18

Nix로 재현 가능한 데이터 과학, 파트 7 — Github Actions에서 Nix를 사용해 Quarto 책 만들기 | R‑bloggers

Reproducible data science with Nix, part 7 — Building a Quarto book using Nix on Github Actions지난 6월에 저는 Amazon Kindle Direct Publishing 서비스를 통해 책을 self‑publish하고, Quarto를 이용해 이를 구현하는 방법을 자세히 설명한 블로그 글을 작성했습니다. 해당 글은 여기에서 읽으실 수 있습니다. 이 책은 R을 이용한 재현 가능한 분석 파이프라인 구축에 관한 내용입니다. 이 포스트를 위해 저는 Github에 템플릿 저장소를 만들었으며, 이를 포크하여 자신만의 책을 시작할 수 있습니다. 책은 Github Actions를 통해 매번 푸시할 때마다 웹사이트, 전자잉크 디바이스용 e‑book, 그리고 Amazon KDP용 PDF가 자동으로 빌드됩니다. 기존 템플릿은 전용 액션을 사용해 필요한 R 버전, Quarto, 그리고 {renv}을 이용한 R 패키지를 설치했습니다.기존 워크플로 파일 예시on: push: branches: [main] name: Render and Publish jobs: build-deploy: runs-on: ubuntu-22.04 steps: - name: Checkout repo uses: actions/checkout@v3 - name: Setup pandoc uses: r-lib/actions/setup-pandoc@v2 - name: Setup R uses: r-lib/actions/setup-r@v2 with: r-version: '4.3.1' - name: Setup renv uses: r-lib/actions/setup-renv@v2 - name: Set up Quarto uses: quarto-dev/quarto-actions/setup@v2 with: # To install LaTeX to build PDF book tinytex: true # uncomment below and fill to pin a version #version: 1.3.353 - name: Publish to GitHub Pages (and render) uses: quarto-dev/quarto-actions/publish@v2 with: target: gh-pages env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}보시다시피 여러 단계가 필요합니다.Nix 기반 템플릿그 후 Nix를 발견했고, 기존 {renv} 기반 접근 대신 Nix가 책의 모든 의존성을 관리하도록 새로운 템플릿을 만들었습니다. 해당 저장소는 여기에서 확인하실 수 있습니다.새 워크플로 파일 예시name: Build book using Nix on: push: branches: [main, master] jobs: build: runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v3 - name: Install Nix uses: DeterminateSystems/nix-installer-action@main with: logger: pretty log-directives: nix_installer=trace backtrace: full - name: Nix cache uses: DeterminateSystems/magic-nix-cache-action@main - name: Build development environment run: | nix-build - name: Publish to GitHub Pages (and render) uses: b-rodrigues/quarto-nix-actions/publish@main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}이 파일은 훨씬 짧습니다. 첫 번째 단계인 Checkout Code는 이후 단계에서 코드를 사용할 수 있게 합니다. 그 다음 Determinate Systems의 nix-installer-action으로 Nix를 설치하고, magic-nix-cache-action으로 패키지를 캐시합니다. 이 캐시는 매번 재빌드할 필요가 없게 하여 속도를 크게 향상시킵니다. 개발 환경은 nix-build로 구성되며, 마지막으로 정의한 quarto-nix-actions/publish액션이 Nix 환경 안에서 quarto render와 quarto publish명령을 실행합니다. 이 액션은 원본 quarto-actions/publish을 포크한 것으로, Nix 환경에서 렌더링과 배포가 이루어지도록 보장합니다.책 웹사이트는 여기에서 확인하실 수 있습니다. 더 자세한 내용이 궁금하시면 이 블로그 글을 계속 읽어보시기 바랍니다.Nix‑centric 접근이 필요한 이유재현 가능한 개발 환경– default.nix파일을 정의하면 Nix 패키지 관리자가 이를 이용해 완전 재현 가능한 개발 환경을 구축합니다. 이 환경은 프로젝트마다 별도로 유지되며, 시스템에 설치된 다른 패키지와 충돌하지 않습니다.시스템 종속성 자동 해결– 예를 들어 {rJava}와 같이 시스템 수준 라이브러리가 필요한 패키지를 설치하면, Nix가 필요한 하위 라이브러리를 자동으로 설치합니다. install.packages()가 출력하는 오류 메시지를 일일이 확인할 필요가 없습니다.특정 nixpkgs 커밋 고정– nixpkgs는 단순히 Github 저장소이며, 특정 커밋 해시를 지정하면 해당 시점의 패키지를 정확히 재현할 수 있습니다. 예를 들어 커밋 7c9cc5a6e를 사용하면 2023년 10월 19일 기준 최신 패키지를, 커밋 976fa3369를 사용하면 그 이전 시점의 패키지를 얻을 수 있습니다.이처럼 Nix를 활용하면 의존성 관리와 재현성을 크게 향상시킬 수 있습니다.
원문 URL
전체 글은 원문 페이지에서 이어서 읽을 수 있습니다.
원문에서 전체 글 읽기
작성자
R-Blogger
출처
R-Blogger
플랫폼
R-Blogger
분류
블로그·해설
언어
한국어
발행일
2023-10-18