0. 前準備
本稿では LXC (Linux コンテナ) に Swift 言語をインストールします。
ここを参考に LXC を構築しておいてください。(1 ~ 5)
コンテナを使用しない Linux にも同様にインストール可能です。
インストール要件
項目 内容 備考 プログラミング言語 Swift version 6.0.3 本稿記述時の最新版 コンテナ 名称 swift1 - OS Rocky Linux release 9.5 (Blue Onyx) 本稿記述時の最新版 IP アドレス DHCP テスト環境なので DHCP にしている。固定アドレスでも構わない コンテナ環境 LXC 4.0.12 Release 1.el9 -
1. 作成した LXC の環境を確認
LXC を使用しない場合は省略。
$ su
# lxc-ls swift1 -f
• コンテナが停止していたので起動する。(STOPPED → RUNNING)
NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED swift1 STOPPED 1 - - - false
# lxc-start swift1
# lxc-ls swift1 -f
# exitコンテナ「swift1」の IP アドレスが DHCP によって 10.0.3.14 になっている。ここに ssh でログインする。
NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED swift1 RUNNING 1 - 10.0.3.14 - false
$
2. Swift をインストール
• インストール前のストレージサイズを確認する。*1
$ su
# du -sh /var/lib/lxc/swift1/
# exit最小限のコンテナの容量はこの程度がふつう。
513M /var/lib/lxc/swift1/
• コンテナ「swift1」にログインする。*1
$ ssh admin@10.0.3.14
• Swift 言語をインストールする。
swift1$ su
swift1# dnf install -y epel-release
swift1# dnf install -y swift-lang
swift1# exit
swift1$ exit
• インストール後のストレージサイズを確認する。*1
$ su
# du -sh /var/lib/lxc/swift1/
# exit実はインストール時に「Installed size: 2.6 G」が表示されていた。
3.2G /var/lib/lxc/swift1/
Swift の実行環境がデカいのが分かる。
$
*1コンテナ不使用の場合は省略する。
3. 実行
3-1. コマンドラインと REPL、標準入力から実行する。
• コンテナ「swift1」にログインする。*23-2. プログラムファイルを作成して実行する。
$ ssh admin@10.0.3.14
swift1$ which swift
swift1$ swift --version
/usr/bin/swift
• コマンドラインから実行する。
Swift version 6.0.3 (swift-6.0.3-RELEASE) Target: x86_64-unknown-linux-gnu
swift1$ swift -e 'print("Hello, Swift!")'
• REPL から実行する。
Hello, Swift!
swift1$ swift repl # repl を指定するとインタラクティブモードになる。
• 標準入力から実行する。:exit の代わりに をタイプしても構わない。
Welcome to Swift version 6.0.3 (swift-6.0.3-RELEASE). Type :help for assistance. 1> print("Hello, Swift!") ⏎ Hello, Swift! 2> :exit ⏎
swift1$ echo 'print("Hello, Swift!"); print("Hello too, Swift.")' | swift repl
Hello, Swift! Hello too, Swift.
• プログラムファイルを作成する。
swift1$cat > example-leap.swift << EOF #!/usr/bin/swift // うるう年を判別する関数 func isLeap(year:Int) -> Bool { var leap:Bool = false if year % 4 == 0 { leap = true } if year % 100 == 0 { leap = false } if year % 400 == 0 { leap = true } return leap } for y in stride(from:2020, to:2030, by:2) { // Swift の for 文は少し変わっている print("\(y) 年は", terminator:"") // print 関数の改行を抑止する if isLeap(year:y) { print("うるう年です") } else { print("平年です") } } EOF
• インタプリタとして実行する。
swift1$ swift example-leap.swift
• コンパイルして実行する。
2020 年はうるう年です 2022 年は平年です 2024 年はうるう年です 2026 年は平年です 2028 年はうるう年です
swift1$ swiftc example-leap.swift
swift1$ ls -ogh
swift1$ ./example-leap
total 24K -rwxr-xr-x. 1 18K Apr 11 16:56 example-leap ← これを実行する。 -rw-r--r--. 1 444 Apr 11 16:50 example-leap.swiftswift1$ exit
2020 年はうるう年です 2022 年は平年です 2024 年はうるう年です 2026 年は平年です 2028 年はうるう年です
実行ファイル example-leap の動作には Swift の環境が必要なため、
単体で他の計算機にコピーしても動作しない。(Swift は LLVM コンパイラ)
また、実行環境は GUI を使うことができないため CUI に限定される。
swift1$ find `cat /etc/ld.so.conf.d/swiftlang.conf` -name '*.swiftmodule' | grep -i 'SwiftUI' | wc -l
0
$
*2コンテナ不使用の場合は省略する。