Learn Some Rust During Hacktoberfest

Matthias Endler

Hacktoberfest에서 Rust 좀 배워 보기

원문은 Matthias Endler님이 에 게재했습니다. 이 블로그 구독하기

디어른들, 레더호제, 브레첸, 맥주, Rust
디어른들, 레더호제, 브레첸, 맥주, Rust
출처: Designed by Freepik

10월은 오픈소스에 기여하기에 완벽한 달이다 — 적어도 GitHub와 DigitalOcean에 따르면 그렇다. 두 회사가 Hacktoberfest를 여는 시기이기 때문이다. 풀 리퀘스트를 만들면 무료 티셔츠와 푸짐한 스트릿 크레드를 받을 수 있는 글로벌 이벤트다. 공식 발표는 여기에서 확인할 수 있다.

어떤 사람들은 자신은 가치 있는 기여를 할 수 없다고 생각한다. 프로그래밍 실력이 부족해서이거나 어디서부터 시작해야 할지 몰라서다.

이 가이드가 바로 그 생각을 바꾸기 위해 존재한다!

안전한 시스템 프로그래밍 언어인 Rust누구나 어떻게 코드를 기여할 수 있는지 보여주겠다. 이 글은 llogiq의 트윗에서 영감을 받아 작성했다.

1. 함께할 멋진 Rust 프로젝트 찾기

누구나 자신의 작업이 인정받기를 바란다.
그래서 중간 규모의 프로젝트부터 기여를 시작하길 권한다. 어느 정도 탄력을 받은 상태이면서도 아직 소수의 메인테이너가 이끌어가는 경우가 많아 도움이 언제나 환영받기 때문이다. 반면, 아주 작은 프로젝트는 대부분 원작자에게만 유용하고, 큰 프로젝트는 처음엔 부담스럽고 가이드라인도 더 엄격하다.

일단은 올해 안에 업데이트된, 스타 5~100개 사이의 저장소를 살펴보자. GitHub는 Lucene 문법 기반의 고급 검색 옵션을 지원한다.

language:Rust stars:5..100 pushed:>2017-01-01

여기에서 이 필터에 맞는 프로젝트 목록을 볼 수 있다.

2. Rust 툴체인 설치하기

기여를 시작하려면 작동하는 Rust 컴파일러와 cargo 패키지 매니저가 필요하다. 다행히 설치는 간단하다. 이를 위해 rustup을 추천한다.

터미널에서 다음 명령어를 실행한 뒤 화면의 안내를 따르자.

curl https://sh.rustup.rs -sSf | sh

잘 모르겠다면 그냥 기본값을 선택하면 된다. 설치가 끝나면 나중에 사용할 컴파일러의 nightly 버전을 추가로 받아두자.

rustup install nightly

아직 궁금한 점이 있는가? 더 자세한 설치 방법은 여기에서 확인할 수 있다.

3. 프로젝트를 Fork하고 컴퓨터에 Clone하기

먼저 GitHub 프로젝트 페이지 오른쪽 상단에 있는 작은 fork 버튼을 클릭하자. 그런 다음 fork한 저장소를 컴퓨터에 clone하자.

git clone [email protected]:yourusername/project.git

더 자세한 방법은 여기를 참고하자.

4. 빌드는 될까?

코드베이스를 수정하기 전에 제대로 작동하는 상태인지 확인해야 한다. 프로젝트 폴더 안에서 다음 명령어들이 바로 동작해야 한다.

cargo build
cargo test

그렇지 않다면 README에서 추가 안내를 찾아보자. (물론 다른 프로젝트를 선택해도 좋다.)

5. 마법의 비법

비법은 이렇다: 린터clippy를 사용해 어떤 Rust 코드베이스에서든 개선할 부분을 찾아내는 것이다.

clippy를 설치하려면 다음과 같이 하자:

cargo +nightly install clippy

그 다음 프로젝트 루트에서 원할 때마다 실행하면 된다.

rustup run nightly cargo clippy

이렇게 하면 코드베이스를 어떻게 개선할 수 있는지에 대한 실행 가능한 정보를 얻을 수 있다.

다음은 예시 출력이다:

warning: useless use of `format!`
   --> src/mach/header.rs:420:49
    |
420 |             let error = error::Error::Malformed(format!("bytes size is smaller than an Mach-o header"));
    |                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: #[warn(useless_format)] on by default
    = help: for further information visit https://rust-lang-nursery.github.io/rust-clippy/v0.0.165/index.html#useless_format

warning: this expression borrows a reference that is immediately dereferenced by the compiler
   --> src/mach/header.rs:423:36
    |
423 |             let magic = mach::peek(&bytes, 0)?;
    |                                    ^^^^^^ help: change this to: `bytes`
    |
    = help: for further information visit https://rust-lang-nursery.github.io/rust-clippy/v0.0.165/index.html#needless_borrow

제안 중 몇 가지를 적용해 보고 프로젝트가 여전히 컴파일되는지, 테스트가 여전히 통과하는지 확인해 보자. 더 자세히 알아보려면 도움말 섹션의 문서 링크를 확인하자. 변경 사항을 리뷰하기 쉽게 하려면 작게 시작하는 것이 좋다.

6. Pull Request 만들기

변경 사항이 마음에 든다면 이제 공개할 차례다! 변경 사항을 위한 새 브랜치를 만들고 fork에 푸시하는 것이 가장 좋다.

git checkout -b codestyle
git commit -am "Minor codestyle fixes"
git push --set-upstream origin codestyle

그 다음 GitHub에서 자신의 fork 홈페이지로 이동하자. Compare & pull request라는 버튼이 있을 것이다. 의미 있는 설명을 추가한 뒤 풀 리퀘스트를 제출하자.

축하한다! Rust 생태계에 기여했다. 고맙다! 🎉

트로피 케이스

보너스!

직접 고치고 확인하는 과정이 너무 지루하게 느껴진다면, Pascal Hertleif(@killercup)가 만든 rustfix를 이용해 5단계를 자동화할 수 있다:

rustfix --yolo && cargo check

이 글은 muse-spark-1.2-contributor 모델을 사용해 번역했습니다.

댓글