Hacktoberfest에 Rust 배워 보기
출처: Designed by Freepik
10월은 오픈소스에 기여하기에 가장 좋은 시기입니다. 적어도 Github와 DigitalOcean은 그렇게 말합니다. 두 회사가 Hacktoberfest를 개최하기 때문입니다. 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 버튼을 클릭하십시오. 그런 다음 포크한 저장소를 컴퓨터에 클론합니다.
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 만들기
변경 사항이 마음에 든다면 이제 공개할 차례입니다! 변경 사항을 위한 새 브랜치를 만든 뒤 포크에 푸시하는 것이 가장 좋습니다.
git checkout -b codestyle
git commit -am "Minor codestyle fixes"
git push --set-upstream origin codestyle그런 다음 Github에서 포크한 저장소의 홈페이지로 이동하십시오. Compare & pull request라는 버튼이 표시됩니다. 의미 있는 설명을 추가한 뒤 풀 리퀘스트를 제출하십시오.
축하합니다! Rust 생태계에 기여하셨습니다. 감사합니다! 🎉
트로피 진열장
보너스!
직접 수정하고 확인하는 과정이 너무 지루하게 느껴진다면 Pascal Hertleif(@killercup)가 만든 rustfix를 이용해 5단계를 자동화할 수 있습니다.
rustfix --yolo && cargo check글을 무작위로 읽기