さきほど気づいたのですが、ターミナルから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
コマンドはgcc
やjavac
のようなコマンドラインから呼び出せるコンパイラです。上記の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バイナリであることが分かります。swiftc
はOS X用のバイナリを作ってくれるのですね。
実はそんな面倒なことをしなくても、以下の方法で調べることもできます。
$ file hello hello: Mach-O 64-bit executable x86_64