ターミナルでSwiftを使う

さきほど気づいたのですが、ターミナルからSwiftを実行するときにxcrun swiftをしなくてもよくなっていました。僕の環境は「Xcode 6.2 (6C131e)」ですが、/usr/bin/swift/usr/bin/swiftcという二つの実行ファイルが用意されています(Yosemiteからなのかもしれません)。これを使えば、これまでより楽にSwiftシェルスクリプトを書くことができそうですし、ターミナルから実行ファイルも作れそうです。早速試してみました。

シェルスクリプトっぽく使ってみる

次のようなhello.swiftというファイルを作成しました。

#!/usr/bin/env swift

let name = "丸井綜研"
println("ようこそ" + name + "へ!")

これを実行すると

$ swift hello.swift
ようこそ丸井綜研へ!

となります。

このSwiftファイルは冒頭にshebang#!/usr/bin/env swift)が書かれています。なので、以下のように、ファイルのパーミッションを変更してやれば、swiftコマンドを明示しなくても良くなります。

$ chmod 755 hello.swift
$ hello.swift

Swiftファイルをコンパイルしてみる

swiftcコマンドはgccjavacのようなコマンドラインから呼び出せるコンパイラです。上記のhello.swiftを以下のようにコンパイルすることで、helloコマンドが作成されます。

$ swiftc hello.swift
$ hello

このhelloのファイル種類は何かということで、最初の64バイトほどを見てみます。

$ hexdump hello | head -4
0000000 cf fa ed fe 07 00 00 01 03 00 00 80 02 00 00 00
0000010 12 00 00 00 a8 06 00 00 85 00 20 00 00 00 00 00
0000020 19 00 00 00 48 00 00 00 5f 5f 50 41 47 45 5a 45
0000030 52 4f 00 00 00 00 00 00 00 00 00 00 00 00 00 00

すると、冒頭4バイトの通称“マジックナンバー”はCF FA ED FEです。こちらの表を参照すると、これはMach-Oバイナリであることが分かります。swiftcOS X用のバイナリを作ってくれるのですね。

実はそんな面倒なことをしなくても、以下の方法で調べることもできます。

$ file hello
hello: Mach-O 64-bit executable x86_64