swiftly
GitHub概要
swiftlang/swiftly
A Swift toolchain installer and manager, written in Swift.
スター759
ウォッチ30
フォーク53
作成日:2022年6月20日
言語:Swift
ライセンス:Apache License 2.0
トピックス
swiftversion-manager
スター履歴
データ取得日時: 2025/7/20 03:52
言語バージョン管理ツール
swiftly
概要
swiftlyは、Swift公式のツールチェーンインストーラー・マネージャーです。2024年3月に1.0安定版がリリースされ、Swift開発チームが公式サポートするツールとなりました。複数のSwiftバージョンの簡単なインストール・管理・切り替えが可能で、安定版からナイトリービルドまで幅広いSwiftツールチェーンに対応しています。macOSとLinuxで動作し、Xcode外でのSwift開発を大幅に簡略化します。
詳細
主な特徴
- 公式サポート: Swift開発チームによる正式なツールチェーン管理ツール
- 複数バージョン管理: 安定版、スナップショット、特定バージョンの同時管理
- 自動切り替え: .swift-versionファイルによるプロジェクト別自動切り替え
- 自己更新: swiftly self-updateによる簡単なアップデート
- クロスプラットフォーム: macOSとLinuxの幅広いディストリビューション対応
- スナップショット対応: 最新の開発版やナイトリービルドの利用
- Swift実装: Swift言語で実装されたSwiftのためのツール
動作原理
swiftlyはダウンロードしたSwiftツールチェーンを~/.swiftlyディレクトリに保存し、シンボリックリンクを通じてアクティブなバージョンを管理します。PATH環境変数を操作してSwiftコマンドを適切なバージョンにルーティングします。
サポートプラットフォーム
- macOS: macOS 10.15 (Catalina) 以降
- Linux: Ubuntu、Debian、Fedora、RHEL、Amazon Linux
- 将来予定: Windows対応も検討中
メリット・デメリット
メリット
- 公式サポート: Swift開発チームによる長期サポート
- 簡単インストール: 一行コマンドでSwiftツールチェーン管理開始
- プロジェクト別管理: .swift-versionによる自動バージョン切り替え
- 包括的対応: 安定版からスナップショットまで全バージョン対応
- 自動セットアップ: シェル環境の自動設定
- 軽量: 必要最小限の機能に特化
- 一貫性: 全プラットフォームで統一された操作
デメリット
- 新しいツール: 2024年1.0リリースのため実績が限定的
- Swift専用: Swift以外の言語には対応不可
- プラットフォーム限定: Windowsネイティブではまだ未対応
- Xcode独立: Xcodeで管理されるSwiftとは別管理
- コミュニティツール不足: サードパーティプラグインエコシステムが未発達
参考ページ
- swiftly公式リポジトリ
- Swift.org - swiftly 1.0紹介記事
- swiftly公式ドキュメント
- Swift.org - macOS インストールガイド
- Swift.org - Linux インストールガイド
書き方の例
インストール
# macOS インストール
curl -L https://download.swift.org/swiftly/darwin/swiftly.pkg > swiftly.pkg
sudo installer -pkg swiftly.pkg -target /
# Linux インストール(自動検出)
curl -L https://download.swift.org/swiftly/linux/swiftly-$(uname -m).tar.gz > swiftly.tar.gz
tar zxf swiftly.tar.gz
./swiftly init
# 初期化完了後の確認
swiftly --version
swift --version
初期セットアップ
# 対話的セットアップ(推奨)
swiftly init
# 非対話的セットアップ(CI環境向け)
swiftly init --assume-yes --skip-install
# セットアップ完了後、新しいシェルでSwiftが利用可能
which swift
swift --version
ツールチェーン管理
# 利用可能なツールチェーン一覧
swiftly list-available
# 最新安定版のインストール
swiftly install latest
# 特定バージョンのインストール
swiftly install 5.10.1
swiftly install 5.9.2
# 最新のメインブランチスナップショット
swiftly install main-snapshot
# 特定日付のスナップショット
swiftly install main-snapshot-2024-03-15
# インストール済みツールチェーンの確認
swiftly list
バージョン切り替え
# 現在のアクティブツールチェーン確認
swiftly use
# 特定バージョンに切り替え
swiftly use 5.10.1
# 最新スナップショットに切り替え
swiftly use main-snapshot
# グローバルデフォルトの設定
swiftly use --global-default 5.10.1
# 一時的な切り替え解除
swiftly use none
プロジェクト別管理
# プロジェクトディレクトリでの設定
cd my-swift-project
# .swift-versionファイルの作成
echo "5.10.1" > .swift-version
# swiftlyが自動的に適切なバージョンを使用
swift --version # 5.10.1が使用される
# 別のプロジェクトに移動
cd ../another-project
echo "main-snapshot" > .swift-version
swift --version # main-snapshotが使用される
特定バージョンでのコマンド実行
# 現在のデフォルトを変更せずに実行
swiftly run swift build +5.10.1
swiftly run swift test +main-snapshot
# Swift REPL の起動
swiftly run swift repl +5.9.2
# SwiftPMコマンドの実行
swiftly run swift package init --type executable +latest
swiftly run swift build +5.10.1 --configuration release
開発ワークフロー
# 新しいSwiftプロジェクトの開始
mkdir MyApp && cd MyApp
# プロジェクト用Swiftバージョンの設定
echo "5.10.1" > .swift-version
# SwiftPMプロジェクトの初期化
swift package init --type executable
# プロジェクトのビルド
swift build
# テストの実行
swift test
# 実行可能ファイルの実行
swift run
継続的インテグレーション(CI)での使用
# GitHub Actions例
name: Swift CI
on: [push, pull_request]
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
swift-version: [5.9.2, 5.10.1, main-snapshot]
steps:
- uses: actions/checkout@v4
- name: Install swiftly
run: |
if [[ "$RUNNER_OS" == "Linux" ]]; then
curl -L https://download.swift.org/swiftly/linux/swiftly-x86_64.tar.gz > swiftly.tar.gz
tar zxf swiftly.tar.gz
./swiftly init --assume-yes
elif [[ "$RUNNER_OS" == "macOS" ]]; then
curl -L https://download.swift.org/swiftly/darwin/swiftly.pkg > swiftly.pkg
sudo installer -pkg swiftly.pkg -target /
swiftly init --assume-yes
fi
- name: Install Swift
run: |
source ~/.bashrc || true
swiftly install ${{ matrix.swift-version }}
swiftly use ${{ matrix.swift-version }}
- name: Build and Test
run: |
source ~/.bashrc || true
swift --version
swift build
swift test
ツールチェーンの更新と管理
# インストール済みツールチェーンの更新
swiftly update
# 特定バージョンの更新
swiftly update 5.10
# swiftly自体の更新
swiftly self-update
# 不要なツールチェーンの削除
swiftly uninstall 5.9.0
# 古いスナップショットの一括削除
swiftly list | grep snapshot | head -5 | xargs -I {} swiftly uninstall {}
高度な設定
# 設定ファイルの確認
cat ~/.swiftly/config.json
# インストールディレクトリの確認
echo $SWIFTLY_HOME_DIR
# 手動でのツールチェーンパス確認
ls ~/.swiftly/toolchains/
# 環境変数の確認
env | grep SWIFTLY
# デバッグ情報の表示
swiftly --verbose install latest