アップルが開発しているプログラミング言語である
アップルさん家のSwift
「アップルさん家の」
このオープンソース版Swiftの最大の特徴は
詳しいことは
また,
今のところLinux版のSwiftは,
- ※1
- 今回のオープンソース版は基本的な機能に留まっていますが,
来年春に予定されているSwift 2. 2のリリースまでにはもう少し状況が変わっているかもしれません。また, Swift Package Manager対応のモジュールが増えてくれば, 外部モジュールのインストールもLinuxでも簡単になるものと思います。さらにその先のSwift 3. 0 では,今回のマルチプラットフォーム対応も踏まえた大きな変更を予定しているようなので, さらにLinuxでも使いやすくなる可能性があります。
Swiftのインストール方法
UbuntuにSwiftをインストールする方法はいくつか存在します。
- バイナリアーカイブをダウンロードする
- ソースコードからビルドする
- Dockerを使う
- Ubuntu Makeを使う
(12月7日時点では未実装)
サポートプラットフォームは,
バイナリファイルをインストールする
Swiftを試す上で,
バイナリファイルは
まずはバイナリアーカイブとその署名ファイルのダウンロードです。ファイル名の日付部分は将来的に変わるかもしれませんので,
$ wget https://swift.org/builds/ubuntu1404/swift-2.2-SNAPSHOT-2015-12-01-b/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz $ wget https://swift.org/builds/ubuntu1404/swift-2.2-SNAPSHOT-2015-12-01-b/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz.sig
手順ではこのあと署名ファイルを使って,
$ gpg --verify swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz.sig (中略) gpg: Signature made 2015年12月03日 06時23分10秒 JST using RSA key ID 412B37AD gpg: Can't check signature: public key not found
この鍵ID
$ gpg --keyserver hkp://pool.sks-keyservers.net --search-keys 412B37AD gpg: searching for "412B37AD" from hkp server pool.sks-keyservers.net (1) Swift Automatic Signing Key #1 <swift-infrastructure@swift.org> 4096 bit RSA key 412B37AD, created: 2015-11-19, expires: 2017-11-18 Keys 1-1 of 1 for "412B37AD". Enter number(s), N)ext, or Q)uit > q
上記のようにこの鍵IDは
- ※2
- User IDはその公開鍵を作成し,
鍵サーバーにアップロードした人が自由に設定できる値です。また鍵サーバーには誰でも自由に任意の鍵をアップロードできます。つまりその鍵IDで指定した鍵が本当にUser IDの人のものなのかどうかは別の手段で確認する必要があります。今回はHTTPS経由でアクセスしたウェブページで書かれている鍵IDを使うので 「おそらく改ざんされていないだろう」 という判断のもとにその鍵を信用しています。これはPPAのリポジトリ追加時に行っていることと大差ありません。
今回はこのままインポートするわけではないので,
$ 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' gpg: requesting key 412B37AD from hkp server pool.sks-keyservers.net gpg: requesting key 21A56D5F from hkp server pool.sks-keyservers.net gpg: /home/ubuntu/.gnupg/trustdb.gpg: trustdb created gpg: key 412B37AD: public key "Swift Automatic Signing Key #1 <swift-infrastructure@swift.org>" imported gpg: key 21A56D5F: public key "Swift 2.2 Release Signing Key <swift-infrastructure@swift.org>" imported gpg: Total number processed: 2 gpg: imported: 2 (RSA: 2)
先ほどの
取り込まれた鍵のリストを表示してみましょう。
$ gpg --list-keys /home/ubuntu/.gnupg/pubring.gpg ------------------------------- pub 4096R/412B37AD 2015-11-19 [expires: 2017-11-18] uid Swift Automatic Signing Key #1 <swift-infrastructure@swift.org> pub 4096R/21A56D5F 2015-11-28 [expires: 2017-11-27] uid Swift 2.2 Release Signing Key <swift-infrastructure@swift.org>
取り込んだ鍵を使って,
$ gpg --verify swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz.sig gpg: Signature made 2015年12月03日 06時23分10秒 JST using RSA key ID 412B37AD gpg: Good signature from "Swift Automatic Signing Key #1 <swift-infrastructure@swift.org>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 7463 A81A 4B2E EA1B 551F FBCF D441 C977 412B 37AD
「Good signature」
ちなみに
$ gpg --delete-keys 412B37AD (中略) pub 4096R/412B37AD 2015-11-19 Swift Automatic Signing Key #1 <swift-infrastructure@swift.org> Delete this key from the keyring? (y/N) y $ gpg --list-keys /home/ubuntu/.gnupg/pubring.gpg ------------------------------- pub 4096R/21A56D5F 2015-11-28 [expires: 2017-11-27] uid Swift 2.2 Release Signing Key <swift-infrastructure@swift.org>
さて,
$ tar xvf swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz $ mv swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04 swift
展開したディレクトリの
$ export PATH=`pwd`/swift/usr/bin:${PATH} $ which swift /home/ubuntu/swift/usr/bin/swift $ swift --version Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c) Target: x86_64-unknown-linux-gnu
上記のようにバージョンが表示されればインストール完了です。
ちなみにswiftcコマンドを使う場合,
$ sudo apt-get install clang build-essential
特に後者をインストールしていない場合,
$ swiftc foo.swift clang: error: unable to execute command: Executable "ld" doesn't exist! clang: error: linker command failed with exit code 1 (use -v to see invocation) <unknown>:0: error: link command failed with exit code 1 (use -v to see invocation)