Bazelプロジェクトを移行する
Bazelは、Googleが2015年にオープンソース化したビルドシステムである。あらゆる規模のソフトウェアを迅速かつ確実にビルドし、テストできる強力なツールだ。Spotify](https://engineering.atspotify.com/2023/10/switching-build-systems-seamlessly/)、Tinder、またはLyftのようないくつかの大規模な組織がこれを使用しているが、導入と維持には先行投資(つまり、技術を学ぶこと)と継続的な投資(つまり、Xcodeのアップデートに追いつくこと)が必要である。これは、それを横断的な問題として扱う一部の組織には有効ですが、製品開発に集中したい他の組織には最適ではないかもしれません。例えば、iOSプラットフォームチームがBazelを導入し、その取り組みを主導したエンジニアが退社した後、Bazelを中止せざるを得なかった組織を見たことがある。Xcodeとビルドシステムの間の強い結合に対するAppleのスタンスは、Bazelプロジェクトを長期にわたって維持することを難しくするもう1つの要因だ。
::: 先端 チューストのユニークさはその繊細さにある
XcodeやXcodeプロジェクトと戦う代わりに、Tuistはそれを受け入れる。同じコンセプト(ターゲット、スキーム、ビルド設定など)、慣れ親しんだ言語(つまりSwift)、そしてシンプルで楽しいエクスペリエンスによって、iOSプラットフォーム・チームだけでなく、プロジェクトの維持とスケーリングをみんなの仕事にするのだ。
:::
ルール
Bazelは、ソフトウェアのビルドとテストの方法を定義するためにルールを使用する。ルールは、Pythonに似た言語であるStarlarkで書かれている。Tuistは設定言語としてSwiftを使用し、Xcodeのオートコンプリート、タイプチェック、検証機能を使用する利便性を開発者に提供します。例えば、以下のルールはBazelでSwiftライブラリを構築する方法を説明している:
txt
swift_library(
name = "MyLibrary.library",
srcs = glob(["**/*.swift"]),
module_name = "MyLibrary"
)swift
let project = Project(
// ...
targets: [
.target(name: "MyLibrary", product: .staticLibrary, sources: ["**/*.swift"])
]
)別の例だが、BazelとTuistのユニットテストの定義方法を比較してみよう:
txt
ios_unit_test(
name = "MyLibraryTests",
bundle_id = "dev.tuist.MyLibraryTests",
minimum_os_version = "16.0",
test_host = "//MyApp:MyLibrary",
deps = [":MyLibraryTests.library"],
)swift
let project = Project(
// ...
targets: [
.target(
name: "MyLibraryTests",
destinations: .iOS,
product: .unitTests,
bundleId: "dev.tuist.MyLibraryTests",
sources: "Tests/MyLibraryTests/**",
dependencies: [
.target(name: "MyLibrary"),
]
)
]
)Swift パッケージマネージャの依存関係 {#swift-package-manager-dependencies}.
Bazel では、rules_swift_package_manager を使うことができます。Gazelle プラグインを使うことができます。プラグインは依存関係のための真実のソースとしてPackage.swift を必要とします。Tuistのインターフェイスはその意味でBazelと似ている。tuist install コマンドを使って、パッケージの依存関係を解決し、引き出すことができます。解決完了後、tuist generate コマンドでプロジェクトを生成できます。
bash
tuist install # Fetch dependencies defined in Tuist/Package.swift
tuist generate # Generate an Xcode projectプロジェクト生成
コミュニティは、Bazelで宣言されたプロジェクトからXcodeプロジェクトを生成するためのルールセット、rules_xcodeprojを提供しています。BUILD ファイルに設定を追加する必要がある Bazel とは異なり、Tuist は設定を全く必要としません。プロジェクトのルートディレクトリでtuist generate を実行すれば、TuistがXcodeプロジェクトを生成してくれます。
