swiftly

バージョン管理Swift公式ツールツールチェーンクロスプラットフォーム

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

スター履歴

swiftlang/swiftly Star History
データ取得日時: 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とは別管理
  • コミュニティツール不足: サードパーティプラグインエコシステムが未発達

参考ページ

書き方の例

インストール

# 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