Ubuntuにswiftをインストール

目次

SwiftはiOSアプリ等の開発言語ですが、オープンソース化されてLinuxやWindowsでも使えるようになりました。 実用性があるのか知りませんがUbuntuで使ってみました。

OSは"Ubuntu 20.04.2"です。

Swiftをインストールする

よくわからないので公式のページを見ながらインストールします。

https://swift.org/download/

1.依存パッケージを取得する

まず、必須ソフトウェアをインストールします。

$ sudo apt-get update
$ sudo apt-get install \
          binutils \
          git \
          gnupg2 \
          libc6-dev \
          libcurl4 \
          libedit2 \
          libgcc-9-dev \
          libpython2.7 \
          libsqlite3-0 \
          libstdc++-9-dev \
          libxml2 \
          libz3-dev \
          pkg-config \
          tzdata \
          zlib1g-dev

2.Swiftツールチェーンをダウンロードする

次に最新のToolchainをダウンロードします。 ツールチェーンとは、Swiftでのプログラム開発に使うツールをまとめたもののようです。

2021年5月20日現在、Swift 5.4が最新でしたのでこれをダウンロードします。

$ curl https://swift.org/builds/swift-5.4-release/ubuntu2004/swift-5.4-RELEASE/swift-5.4-RELEASE-ubuntu20.04.tar.gz -O
Swiftのダウンロードリンク

Swiftのダウンロードリンク

3.ダウンロードファイルを検証する

ダウンロードしたファイルの検証を行います。 同じダウンロードページからPGP署名をダウンロードします。

$ curl https://swift.org/builds/swift-5.4-release/ubuntu2004/swift-5.4-RELEASE/swift-5.4-RELEASE-ubuntu20.04.tar.gz.sig -O

公開鍵サーバーからインポートします。

$ gpg --keyserver hkp://pool.sks-keyservers.net \
      --recv-keys \
      '7463 A81A 4B2E EA1B 551F  FBCF D441 C977 412B 37AD' \
      '1BE1 E29A 084C B305 F397  D62A 9F59 7F4D 21A5 6D5F' \
      'A3BA FD35 56A5 9079 C068  94BD 63BC 1CFE 91D3 06C6' \
      '5E4D F843 FB06 5D7F 7E24  FBA2 EF54 30F0 71E1 B235' \
      '8513 444E 2DA3 6B7C 1659  AF4D 7638 F1FB 2B2B 08C4' \
      'A62A E125 BBBF BB96 A6E0  42EC 925C C1CC ED3D 1561' \
      '8A74 9566 2C3C D4AE 18D9  5637 FAF6 989E 1BC1 6FEA'

最後にダウンロードしたPGP署名を使用して整合性を確認します。

$ gpg --verify swift-5.4-RELEASE-ubuntu20.04.tar.gz.sig

結果が以下のように表示されました。

gpg: 署名されたデータが'swift-5.4-RELEASE-ubuntu20.04.tar.gz'にあると想定します
gpg: 2021年04月26日 13時41分02秒 JSTに施された署名
gpg:                RSA鍵925CC1CCED3D1561を使用
gpg: "Swift 5.x Release Signing Key <swift-infrastructure@swift.org>"からの正しい署名 [不明の]
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg:          この署名が所有者のものかどうかの検証手段がありません。
主鍵フィンガープリント: A62A E125 BBBF BB96 A6E0  42EC 925C C1CC ED3D 1561

「正しい署名」と表示されましたが公開鍵に自身が署名していないため*警告*が表示されています。 しかし、上記の手順で信頼できるソースから取得した公開鍵を用いているので無視します。

4.ファイルを展開する

ダウンロードした圧縮ファイルを展開します。

$ tar xzf swift-5.4-RELEASE-ubuntu20.04.tar.gz

今回はインストール先を/usr/localディレトリにします。 またシンボリックリンクを作成することで使用するバージョンの切り替えができるようにします。 別バージョンを使うときにはシンボリックリンクを変更します。

$ sudo mv swift-5.4-RELEASE-ubuntu20.04 /usr/local
$ sudo rm /usr/local/swift
$ sudo ln -s /usr/local/swift-5.4-RELEASE-ubuntu20.04 /usr/local/swift

Swift toolchainのパスをbashの初期化ファイル(~/.bashrc)でPATH環境変数に追加します。 その後sourceコマンドで実行することで現在実行中の端末に反映させます。

$ echo "PATH=/usr/local/swift/usr/bin:$PATH" >> ~/.bashrc
$ source ~/.bashrc

5.インストールされたバージョンを確認する

$ swift --version
Swift version 5.4 (swift-5.4-RELEASE)
Target: x86_64-unknown-linux-gnu

これでインストールできました。

Swiftを逐次実行する

端末でswiftを実行すると対話的にswiftのコードを実行できます。 入力すると自動的にインデントされるので複数行の入力も分かりやすいです。

:helpと入力するとヘルプが表示されます。 終了するときは:quitまたは:qと入力します。

$ swift
Welcome to Swift version 5.4 (swift-5.4-RELEASE).
Type :help for assistance.
  1> let individualScores = [75, 43, 103, 87, 12]
individualScores: [Int] = 5 values {
  [0] = 75
  [1] = 43
  [2] = 103
  [3] = 87
  [4] = 12
}
  2> var teamScore = 0
teamScore: Int = 0
  3> for score in individualScores { 
  4.     if score > 50 { 
  5.         teamScore += 3 
  6.     } else { 
  7.         teamScore += 1 
  8.     } 
  9. } 
 10> print(teamScore)
11
 11> :quit
$ 
Swiftインタプリタ

Swiftインタプリタ

Swiftファイルをコンパイルする

Swiftのプログラムコードをコンパイルして実行ファイルを作成します。

下記内容のファイルfizzbuzz.swiftを作成します。

// Fizz Buzz問題
for i in 1...100 {
  var str = ""
  if i % 3 == 0 {
    str.append("Fizz")
  }
  if i % 5 == 0 {
    str.append("Buzz")
  }
  if str.isEmpty {
    str = String(i)
  }
  print (str)
}

ビルドはswiftcコマンドを使用します。

$ swiftc fizzbuzz.swift

fizzbuzzファイルが作成されます。

$ ls -l <<<作成されたファイルの確認
合計 32
-rwxrwxr-x 1 izumi izumi 21416  5月 21 17:22 fizzbuzz
-rw-rw-r-- 1 izumi izumi   214  5月 21 17:21 fizzbuzz.swift
$ ./fizzbuzz <<<作成された実行ファイルを実行
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
<--以下略-->