모든 소프트웨어 개발자는 채택하고 확장하기 쉬운 도구를 사용하여 크기나 복잡성과 관계없이 모든 프로젝트를 효율적으로 빌드, 테스트, 패키징할 수 있습니다.
엔지니어는 빌드 기본사항을 당연하게 여길 수 있습니다. 빌드 및 테스트의 기계적 프로세스가 해결되었으므로 소프트웨어 개발자는 코드 작성의 창의적인 프로세스에 집중할 수 있습니다. 새 언어 또는 고유한 조직 요구사항을 지원하도록 빌드 시스템을 맞춤설정할 때 사용자는 기본 배관을 재창조하지 않고도 사용 사례에 고유한 확장성 측면에 집중합니다.
엔지니어가 모든 프로젝트에 쉽게 참여할 수 있습니다. 새 프로젝트 작업을 시작하려는 개발자는 프로젝트를 클론하고 빌드를 실행하면 됩니다. 로컬 구성이 필요하지 않습니다. 크로스 플랫폼 원격 실행을 사용하면 어디서나 어떤 머신에서든 작업할 수 있으며 프로젝트가 타겟팅하는 모든 플랫폼에 대해 변경사항을 완전히 테스트할 수 있습니다. 엔지니어는 새 프로젝트의 빌드를 빠르게 구성하거나 기존 빌드를 점진적으로 이전할 수 있습니다.
프로젝트는 모든 크기의 코드베이스와 모든 크기의 팀으로 확장할 수 있습니다. 빠른 증분 테스트를 통해 팀은 변경사항이 커밋되기 전에 모든 변경사항을 완전히 검증할 수 있습니다. 저장소가 커지고 프로젝트가 여러 저장소에 걸쳐 있으며 여러 언어가 도입되더라도 마찬가지입니다. 인프라에서는 개발자가 테스트 범위와 빌드 속도를 교환하도록 강제하지 않습니다.
Google은 Bazel이 이러한 비전을 실현할 수 있다고 생각합니다.
Bazel은 재현 가능 (주어진 입력 세트가 항상 동일한 출력을 생성함)하고 이식 가능 (빌드를 출력에 영향을 주지 않고 모든 머신에서 실행할 수 있음)한 빌드를 지원하기 위해 처음부터 구축되었습니다.
이러한 특성은 안전한 증분성 (변경된 입력만 다시 빌드해도 손상 위험이 없음)과 분산 가능성 (빌드 작업이 격리되어 오프로드될 수 있음)을 지원합니다. 올바른 빌드를 실행하는 데 필요한 작업을 최소화하고 여러 코어와 원격 시스템에서 해당 작업을 병렬화하면 Bazel에서 모든 빌드를 빠르게 실행할 수 있습니다.
Bazel의 추상화 레이어(간단한 확장성 언어로 구현된 언어, 플랫폼, 도구 모음에 관한 지침)를 사용하면 어떤 컨텍스트에도 쉽게 적용할 수 있습니다.
Bazel 핵심 역량
- Bazel은 다중 언어, 다중 플랫폼 빌드 및 테스트를 지원합니다. 타겟팅하는 언어와 플랫폼의 조합에 관계없이 단일 명령어를 실행하여 전체 소스 트리를 빌드하고 테스트할 수 있습니다.
- Bazel 빌드는 빠르고 정확합니다. 모든 빌드와 테스트 실행은 개발자 머신과 CI에서 증분식으로 실행됩니다.
- Bazel은 모든 언어 또는 플랫폼의 빌드를 정의하는 균일하고 확장 가능한 언어를 제공합니다.
- Bazel을 사용하면 원격 실행 및 캐싱 서비스에 연결하여 빌드를 확장할 수 있습니다.
- Bazel은 모든 주요 개발 플랫폼 (Linux, MacOS, Windows)에서 작동합니다.
- Bazel을 도입하려면 노력이 필요하지만 점진적으로 도입할 수 있습니다. Bazel은 특정 언어/플랫폼의 사실상 표준 도구와 인터페이스합니다.
언어 커뮤니티 지원
소프트웨어 엔지니어링은 언어 커뮤니티(일반적으로 공통 도구와 관행을 사용하는 자가 조직화된 사람들의 그룹)의 맥락에서 발전합니다.
언어 커뮤니티의 회원에게 유용하려면 해당 커뮤니티의 워크플로 및 규칙과 통합되는 고품질 Bazel 규칙이 제공되어야 합니다.
Bazel은 확장 가능하고 개방적이며 모든 언어에 적합한 규칙 집합을 지원하기 위해 노력합니다.
올바른 규칙 세트의 요구사항
- 규칙은 코드 적용 범위를 비롯하여 언어의 효율적인 빌드 및 테스트를 지원해야 합니다.
- 규칙은 언어에 널리 사용되는 '패키지 관리자'와 인터페이스 (예: Java용 Maven)해야 하며 널리 사용되는 다른 빌드 시스템에서 증분 마이그레이션 경로를 지원해야 합니다.
- 규칙은 'Bazel 샌드위치' 원칙에 따라 확장 가능하고 상호 운용 가능해야 합니다.
- 규칙은 원격 실행 준비가 되어 있어야 합니다. 실제로 이는 도구 모음 메커니즘을 사용하여 구성할 수 있음을 의미합니다.
- 규칙 (및 Bazel)은 해당 언어에 널리 사용되는 IDE가 있는 경우 해당 IDE와 인터페이스해야 합니다.
- 규칙에는 신규 사용자를 위한 소개 자료와 전문가 사용자를 위한 포괄적인 문서가 포함된 철저하고 유용한 문서가 있어야 합니다.
이러한 각 항목은 필수이며 함께해야 특정 생태계에 대한 Bazel의 역량을 제공합니다.
또한 대부분 충분합니다. 모든 요구사항이 충족되면 Bazel은 해당 언어 커뮤니티의 구성원에게 가치를 완전히 제공합니다.