Swift 3.0 を Ubuntsu 14.04 にインストールして使ってみる

Swift プログラミング

Linux 版の Swift 3.0 を Ubuntu 14.04 に入れて使えるようにしてみました。


以前に こちら で稼働させた Ubuntu 14.04.3 LTS に、オープンソースの Swift をインストールしてみることにしました。

以前にも一度 Fedora 23 へのインストールを試みるも上手く進まず挫折しましたけれど、今回の Ubuntu 14.04 は正式に想定された環境ともあってか、公式に記載されている手順で簡単にインストールすることができました。

Swift Latest Development Snapshot

ソースコードからビルドするのも楽しそうだったのですけど、今回はビルド済みの Swift Latest Development Snapshot をインストールすることにしました。

他にも Swift 2.2 Release Snapshot というのがありますけど、こちらは swift-build が入っていないようで、このコマンドが、個人的に使ってみたい Kitura というサーバーサイド Swift システムをビルドするのに必要だったので、今回は Swift Latest Development Snapshot を使うことにします。

インストールする場所を用意する

Swift をインストールするにあたって /toolchains というディレクトリを作っておくことにします。Swift のスナップショットはここにインストールしていくことにします。

mkdir /toolchains

スナップショットのインストール

Swift Latest Development Snapshot は Swift.org - Download Swift からダウンロードできるようになっています。

今回は Ubuntu 14.04 の /usr/local/src ディレクトリに移動して、次のコマンドを実行して February 8, 2016 版の Ubuntu 14.04 Swift Development Snapshot をダウンロードしてみることにしました。

wget https://swift.org/builds/development/ubuntu1404/swift-DEVELOPMENT-SNAPSHOT-2016-02-08-a/swift-DEVELOPMENT-SNAPSHOT-2016-02-08-a-ubuntu14.04.tar.gz

ダウンロードできたら、次のようにしてインストールを行います。

tar xvzf swift-DEVELOPMENT-SNAPSHOT-2016-02-08-a-ubuntu14.04.tar.gz -C /snapshots

Swift Latest Development Snapshot (February 8, 2016) のアーカイブは、展開すると swift-DEVELOPMENT-SNAPSHOT-2016-02-08-a-ubuntu14.04 ディレクトリ内に ./usr/bin/swift といった形で構成ファイルが保存されているようでした。

展開する時に -C オプションで展開先を指定しているので、その中にこれらのファイルが展開されることになります。

パスを設定する

インストールした Swift を使えるようにするために ~/.bash_profile ファイルを作成して、その中に次の内容を記載しておきます。

export SWIFT_BIN="/toolchains/swift-DEVELOPMENT-SNAPSHOT-2016-02-08-a-ubuntu14.04/usr/bin"
export SWIFT_LIB="/toolchains/swift-DEVELOPMENT-SNAPSHOT-2016-02-08-a-ubuntu14.04/usr/lib"

export PATH="${SWIFT_BIN}":"${PATH}"
export LD_LIBRARY_PATH="${SWIFT_LIB}":"${LD_LIBRARY_PATH}"
export LD_RUN_PATH="${SWIFT_LIB}":"${LD_RUN_PATH}"

こうしたら、あとは次のようにして .bash_profile の設定内容を反映します。

source ~/.bash_profile

これで Swift のスナップショットに格納された /usr/bin/swift などの実行ファイルにパスが通って、すぐに利用できる状態になります。

clang 3.6 のインストール

ubuntu 14.04.3 LTS は標準で clang 3.5 が使えるようになっているようですけど、Swift Latest Development Snapshot (February 8, 2016) は clang 3.6 が必要になるようです。

そのため、次のようにして clang 3.6 の環境を用意する必要がありました。

apt-get install clang-3.6

update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.6 100
update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-3.6 100

これを実行しておかないと swift を実行しようとしたタイミングで、次のようなエラーが発生して処理が中止されてしまう様子でした。Swift を実行してこのようなメッセージが表示された場合は clang 3.6 をインストールし忘れていないか確認すると良さそうです。

/usr/lib/swift/glibc/module.map:28:14: error: header '/usr/include/complex.h' not found

header "/usr/include/complex.h"

^

<unknown>:0: error: could not build Objective-C module 'SwiftGlibc'

他にも clang-3.6 をインストールする時に 404 Not Found のようなメッセージがたくさん表示されて、最終的に E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing? というエラーでインストールできないことがありました。どうやらこれは、パッケージリストが更新されていないことが原因だったようで apt-get update を実行してから改めてインストールしてみることで解決しました。

インストール完了

これで Swift Latest Development Snapshot (February 8, 2016) を Ubuntu 14.04 にインストールできた様子です。試しに swift --version を実行してみると、次のようにバージョン情報が出力されました。

Swift version 3.0-dev (LLVM a7663bb722, Clang 4ca3c7fa28, Swift 1c2f40e246)
Target: x86_64-unknown-linux-gnu

試しに次の Swift ファイルを作成して実行してみることにします。

import Glibc

let FILE = fopen(#file, "r")

guard FILE != nil else {

        fatalError("Failed to open.")
}

let size = 500
var data = UnsafeMutablePointer<CChar>.alloc(size)

fread(data, sizeof(CChar), size, FILE)

guard let string = String.fromCString(data) else {

        fatalError("Invalid data")
}

print(string.uppercaseString)

こんなソースコードを例えば test.swift というファイルに保存して、次のようにしてプログラミングを実行します。

swift test.swift

そうしたところ、Ubuntu 上で Swift コードが実行されて、結果が画面に表示されました。


または次のように swiftc を使って実行用プログラムを作ることもできました。

swiftc test.swift

このようにすると test という、ソースコードと同じ名前のファイル名で実行ファイルが出来上がるので、あとはそれを実行すれば先ほどと同じ実行結果が画面に表示されました。