2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windows11 に Swift をインストールする“やさしい”手順

Last updated at Posted at 2024-06-21

windows10 の場合は こちら。


↑公式サイトから Windows版 Swiftインストーラswift-5.10.1-RELEASE-windows10.exeをダウンロードしてインストールしたが、コンパイルできなかった。

> swift .\hello.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
#include "AssertionReporting.h"
         ^
C:\Users\USERNAME\AppData\Local\Programs\Swift\Platforms\5.10.1\Windows.platform\Developer\SDKs\Windows.sdk\usr\lib\swift\shims/AssertionReporting.h:16:10: note: in file included from C:\Users\USERNAME\AppData\Local\Programs\Swift\Platforms\5.10.1\Windows.platform\Developer\SDKs\Windows.sdk\usr\lib\swift\shims/AssertionReporting.h:16:
#include "SwiftStdint.h"
         ^
C:\Users\USERNAME\AppData\Local\Programs\Swift\Platforms\5.10.1\Windows.platform\Developer\SDKs\Windows.sdk\usr\lib\swift\shims/SwiftStdint.h:28:10: error: 'stdint.h' file not found
#include <stdint.h>
         ^
<unknown>:0: error: could not build C module 'SwiftShims'

Swift 5.9.2、Swift 5.8.1 の旧バージョンをインストールしてみたが、同じ現象でした。

数年前に当時のSwiftをインストールしたときは、こんなことにはならず すんなりコンパイルできたのに。。。

どうやら、Visual Studio Communityをダウンロードして、MSVC等のデスクトップ開発環境のインストールが前提となったようだ。

公式のドキュメントに書いてありました。
You will need to install Visual Studio with the following components.

ですが、Windows11からWindows Package Managerを使ったインストール方法があり、こちらの方がずっと簡単にインストールできたので、ここに手順のみまとめておきます。

Windows Package Manager を使ったインストール方法

手順は3つ。

手順 1

Windows11の開発者モードをONにする。

設定 → システム → 開発者向け → 開発者モード → 「オン」にする

手順 2

次のコマンドで Visual Studio の必要なコンポーネントをインストールする。

> winget install --id Microsoft.VisualStudio.2022.Community --exact --force --custom "--add Microsoft.VisualStudio.Component.Windows11SDK.22000 --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64"

Visual Studioのインストーラが起動し、必要なコンポーネントのダウンロードとインストールが自動的に走る。
自分のPCだと、30分ほどかかりました。

手順 3

次のコマンドで Swift(及びツールチェーン)をダウンロード&インストールする。

> winget install --id Swift.Toolchain -e

当然、最新バージョンがインストールされます。

Windows10 の場合のコマンド

Windows10 においても、wingetをインストールすれば、同様の手順で可能ですが、まったく同じコマンドではエラーとなったので、Windows10 の場合のコマンドを書いておきます。

手順2
> winget install --id Microsoft.VisualStudio.2022.Community --exact --force --custom "--add Microsoft.VisualStudio.Component.Windows10SDK.17763 --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64" --source winget
手順3
> winget install --id Swift.Toolchain -e --source winget

確認

以上で、インストールできたので、実際に確認します。

> swift --version
Swift version 5.10.1 (swift-5.10.1-RELEASE)
Target: x86_64-unknown-windows-msvc
エラーになる??
> swift hello.swift
<unknown>:0: error: could not load the swift standard library
コンパイル& exe実行できた
> swiftc hello.swift
   ライブラリ hello.lib とオブジェクト hello.exp を作成中
> .\hello.exe
Hello! Swift!
ビルドは問題ない
> mkdir MyCLI
> cd MyCLI
> swift package init --type executable
Creating executable package: MyCLI
Creating Package.swift
Creating .gitignore
Creating Sources/
Creating Sources\main.swift

> swift run MyCLI
Building for debugging...
[8/8] Linking .\.build\x86_64-unknown-windows-msvc\debug\MyCLI.exe
Build complete! (5.35s)
Hello, world!

Replも確認しておきます。

エラーになりませんが、printが出力されません??
> swift repl
Welcome to Swift version 5.10.1 (swift-5.10.1-RELEASE).
Type :help for assistance.
1> print("hello")
2> :quit

公式手順通りにインストールできたのですが、何かおかしいです。
今後、原因究明して記事をアップデートします。

原因究明履歴

2024.6.22追記

swift -print-target-infoで出てきた以下の内容。

> swift -print-target-info
Swift version 5.10.1 (swift-5.10.1-RELEASE)
Target: x86_64-unknown-windows-msvc
C:\Users\USERNAME\AppData\Local\Programs\Swift\Toolchains\5.10.1+Asserts\usr\bin\swift-frontend.exe -frontend -print-target-info -target x86_64-unknown-windows-msvc
{
  "compilerVersion": "Swift version 5.10.1 (swift-5.10.1-RELEASE)",
  "target": {
    "triple": "x86_64-unknown-windows-msvc",
    "unversionedTriple": "x86_64-unknown-windows-msvc",
    "moduleTriple": "x86_64-unknown-windows-msvc",
    "compatibilityLibraries": [ ],
    "librariesRequireRPath": false
  },
  "paths": {
    "runtimeLibraryPaths": [
      "C:\\Users\\USERNAME\\AppData\\Local\\Programs\\Swift\\Toolchains\\5.10.1+Asserts\\usr\\lib\\swift\\windows"
    ],
    "runtimeLibraryImportPaths": [
      "C:\\Users\\USERNAME\\AppData\\Local\\Programs\\Swift\\Toolchains\\5.10.1+Asserts\\usr\\lib\\swift\\windows",
      "C:\\Users\\USERNAME\\AppData\\Local\\Programs\\Swift\\Toolchains\\5.10.1+Asserts\\usr\\lib\\swift\\windows\\x86_64"
    ],
    "runtimeResourcePath": "C:\\Users\\USERNAME\\AppData\\Local\\Programs\\Swift\\Toolchains\\5.10.1+Asserts\\usr\\lib\\swift"
  }
}

一つ上の階層のswiftまでは存在するが、↓このフォルダが存在しない。
C:\Users\USERNAME\AppData\Local\Programs\Swift\Toolchains\5.10.1+Asserts\usr\lib\swift\windows

これが関係しているかも?と考え、空のwindowsフォルダを作ってみたが、結果は変わらない。

error: could not load the swift standard library
せめて、そのライブラリ名が判明すれば何とかなるようにも思うが、未だ原因不明だ。

ちなみに、Macで同じコマンドを実行した結果は、以下の内容。

$ swift -print-target-info
Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)
Target: arm64-apple-macosx14.0
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-frontend -frontend -print-target-info -target arm64-apple-macosx14.0
{
  "compilerVersion": "Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)",
  "target": {
    "triple": "arm64-apple-macosx14.0",
    "unversionedTriple": "arm64-apple-macosx",
    "moduleTriple": "arm64-apple-macos",
    "compatibilityLibraries": [ ],
    "librariesRequireRPath": false
  },
  "paths": {
    "runtimeLibraryPaths": [
      "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx",
      "/usr/lib/swift"
    ],
    "runtimeLibraryImportPaths": [
      "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx"
    ],
    "runtimeResourcePath": "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift"
  }
}

$ ls /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx
Cxx.swiftmodule					libswiftCompatibility51.a
CxxStdlib.swiftmodule				libswiftCompatibility56.a
layouts-x86_64.yaml				libswiftCompatibilityConcurrency.a
lib_InternalSwiftScan.dylib			libswiftCompatibilityDynamicReplacements.a
libcxxshim.h					libswiftCompatibilityPacks.a
libcxxshim.modulemap				libswiftCxx.a
libcxxstdlibshim.h				libswiftCxxStdlib.a
libswiftCompatibility50.a			prebuilt-modules

Macがグローバルインストールに対し、Windows11ではユーザインストールになっている点が違う。インストール時にインストール先は聞かれなかった。影響は分からない。

2024.6.26追記

wingetでグローバルインストールを指定するオプションを見つけたので、そのオプションでインストールしてみた。

> winget install --scope machine --id Swift.Toolchain -e

その結果、swift -print-target-infoで出てくる内容も変化した。確かにパスがグローバルになった。

> swift -print-target-info
{
  "compilerVersion": "Swift version 5.9.2 (swift-5.9.2-RELEASE)",
  "target": {
    "triple": "x86_64-unknown-windows-msvc",
    "unversionedTriple": "x86_64-unknown-windows-msvc",
    "moduleTriple": "x86_64-unknown-windows-msvc",
    "compatibilityLibraries": [ ],
    "librariesRequireRPath": false
  },
  "paths": {
    "runtimeLibraryPaths": [
      "C:\\Library\\Developer\\Toolchains\\unknown-Asserts-development.xctoolchain\\usr\\lib\\swift\\windows"
    ],
    "runtimeLibraryImportPaths": [
      "C:\\Library\\Developer\\Toolchains\\unknown-Asserts-development.xctoolchain\\usr\\lib\\swift\\windows",
      "C:\\Library\\Developer\\Toolchains\\unknown-Asserts-development.xctoolchain\\usr\\lib\\swift\\windows\\x86_64"
    ],
    "runtimeResourcePath": "C:\\Library\\Developer\\Toolchains\\unknown-Asserts-development.xctoolchain\\usr\\lib\\swift"
  }
}

> ls "C:\\Library\\Developer\\Toolchains\\unknown-Asserts-development.xctoolchain\\usr\\lib\\swift\\windows"
Get-ChildItem: Cannot find path 'C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr\lib\swift\windows' because it does not exist.

しかし、C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr\lib\swift\windowsのパスが存在しないことは、変わらず同じ。

なぜか、バージョンがダウンした。

> swift --version
Swift version 5.9.2 (swift-5.9.2-RELEASE)
Target: x86_64-unknown-windows-msvc

しかし、swift hello.swiftの結果はエラーのまま。。。

> swift hello.swift
<unknown>:0: error: could not load the swift standard library
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?