【2014/10/21 更新】
本日よりMac App StoreからXcode 6.1がダウンロードできるようになったため、
開発者登録を行った上でMac Dev Centerからダウンロードする必要はなくなりました。
従って、開発者登録なしで本投稿の内容を実践することができるようになりましたので、
以降に登場するそのような表記を修正致しました。
↑
Mac App StoreのXcode 6.1のページに
「シェル(コマンドライン)から、Swiftのスクリプトをswiftコマンドから実行できる」
という一文が、その証拠として掲載されています。
本投稿ではXcodeからプロジェクトを生成してSwiftのプログラムを実行するのではなく、Macのターミナル.appのみを用いて実行する方法を紹介します。
この方法を実践することで、
swiftコマンドを用いて実行ファイルを生成する工程を省き、結果的にソースファイルのパスを指定するだけでプログラムを即実行できたり、
または有名なgccコマンドやMacのclangコマンドと同様、swiftcコマンドを使うと一旦実行ファイルを生成してからそのプログラムを実行できるようになります。
Swiftのプログラムを実行するのであればXcodeを用いるのが最も簡単であると思いますが、
逆にXcodeを用いない、いわゆるコマンドライン上で実行するために必要な条件が私の中でようやく確立出来ましたので、
今回はこれについて残しておきたいと思います。
この方法ではOS X 10.10 YosemiteのSDK(Software Development Kit)が含まれるXcode 6.1のインストールが必須であることから、その動作環境であるMavericksおよびYosemiteにて実践可能です。
【2014/10/21 追記開始】
本日からはMac App Storeよりインストールを行ってください。
【2014/10/21 追記終了】
【2014/10/17 追記開始】
本日よりMac App StoreにてOS X Yosemiteの正式版の配布がスタートしましたので、
OS X ベータプログラムに登録する必要はありません。
【2014/10/17 追記終了】
【2014/10/21 追記開始】
本投稿を実践する目的のみであれば、本日からは開発者登録の必要はありません。
またよく勘違いされることとして、「開発者登録を行うにはお金がかかる」ということが挙げられます。
これについては少々語弊があり、
正確には「iPhoneやiPadなど、iOSを搭載した端末の実機において自身が開発したプログラムを動作させたい場合、および開発したアプリをApp Storeで配信したい場合」に限り、別途オプションとして有料の開発者登録が必要になります。
つまり別の視点から表現すると、
「iOSシミュレータでプログラムの動作確認をするだけであれば、有償ではなく無償で行える範囲の開発者登録で十分」ということになります。
もしあなたが最新のXcodeのみを使い続ける場合、恩恵はあまり感じられないように思えるかもしれませんが、
実際は開発者登録をすることで、過去のバージョンのXcodeや他の便利ツールなどのダウンロードといった融通がきくようになりますので、
特別な理由が無ければこの機会に開発者登録を済ませておくことをオススメします。
【2014/10/21 追記終了】
【2014/10/21 追記開始】
同日行いました、上の修正内容に同じ。
【2014/10/21 追記終了】
↑
OS X Yosemite GM3から実行
OS X Mavericks バージョン10.9.5から実行
↓
まず最初に、Swiftのプログラムをターミナルから実行するにあたり最低限必要な下準備を済ませましょう。
求められるMac環境は、次の3つといったところでしょうか。
・OS X Mavericks、またはOS X YosemiteがインストールされているMac
・Xcode 6.1がインストールされていること
・十分な空きディスク領域
次は、環境構築のために実際に行う必要がある作業について紹介します。
こちらもおおまかに言うと3つ存在しますので、後に順を追ってそれぞれ詳しく説明したいと思います。
①Xcode 6.1をインストールする
その際、ターミナルを用いてCやObjective-C, Swiftなどのプログラムを実行するのに必要な「コマンドラインツール」も同時にインストールされます。
②Xcode 6.1のアプリ内に含まれるDeveloperディレクトリを、xcode-selectコマンドの「--switch」オプションを使い登録する
この一文だけでは何のことであるか分からないと思いますので、
この作業については後に実際の作業のスクリーンショットを交えながら詳しく説明します。
③swiftコマンドまたはswiftcコマンドの初回実行時に表示されるDeveloper Tools Accessのダイアログにて、「続ける」を選択する
こちらについても②と同様、詳しくは後述します。
これより実際に上記の①〜③の作業について、詳しく説明します。
また以下では、
スクリーンショットがYosemiteのものとMavericksのもので混在することがありますが、これは説明の便宜上そうなるだけであるため、
行う設定自体はどちらの環境でも同じですので作業に問題はありません。
その他に、
Mavericksをお使いの場合はYosemteと比較するとコマンド周りにおいて少々面倒な面がありますが、そちらについても適宜説明します。
①Xcode 6.1をインストールする
では最初にXcode 6.1のベータ版またはGM版を、Mac Dev Centerからダウンロードしましょう!
XcodeはMacにおけるプログラミングの統合開発環境(IDE)であることからファイル容量が大きく、冒頭で述べたように十分な空きディスク容量が要求されます。
私の場合、現時点での最新版であるGM2をダウンロードしました。
次はダウンロードしたXcode 6.1をインストールしましょう!!
ただその前に一つ確認して頂きたいことがあります。
それは「既にXcodeがインストールされていないか」についてです。
例えばMac App Storeで配信されている最新版のバージョン6.0.2が既にインストールされている場合、
ここでダウンロードしたXcode 6.1をインストールするためにそのままApplicationsフォルダに放り込むと、下手をした場合Xcode 6.0.2が上書きされ無くなってしまいます。
もちろんXcodeがまだインストールされていない場合は問題ないのですが、
この場合は偶然にもファイル名がどちらもXcode.appであることから、既存のXcodeを残すかどうか選択することになります。
これはプログラミングにおいてはよくあることなのですが、
「今回インストールするXcodeはまだ正式版ではないため、既に正式版を迎えている既存のXcodeをキープしておく」といった、いわゆる「開発環境の共存」と呼ばれる作業を行うことがあります。
今回紹介する方法ではXcode 6.1さえインストールされていれば良いため共存させなくても良いのですが、
お使いのMacに既存のXcodeを残す必要があるかどうかは、皆様がよく吟味してから判断するようにしましょう。
私は「Xcode.app」という名前で6.0.2を、「Xcode6.1GM.app」という名前で6.1 GM2を共存させるように設定しましたが、
【2014/10/21 追記開始】
現行の最新版の一つ前のバージョンとしてMac App Storeで配信されていたXcode 6.0.2がインストールされている場合、
本日配信が開始されました同6.1をMac App Storeからインストールすると、自動的に最新版の6.1が「Xcode.app」としてアプリケーションフォルダに保存されます。
本投稿のスクリーンショットこそXcode 6.1 GM2の状態のままではありますが、
開発環境を共存させる必要のない方はXcode 6.1のみをインストールするだけで以降についても読み進めることが可能です。
【2014/10/21 追記終了】
【2014/10/21 追記開始】
Mac App StoreからXcode 6.1をインストールした場合は、
以下の「検証中」および「開いてもよろしいですか?」のダイアログは表示されません。
【2014/10/21 追記終了】
Xcodeが起動した後ですが、
XcodeおよびiOS SDKの使用許諾契約が表示されますので「Agree」(同意)を選択します。
そうするとご自身のユーザのパスワードの入力を求められ、正しいパスワードを入力してOKを押すと本項の目的であるコマンドラインツールがインストールされます。
このインストールが終わりますと、本項での作業は完了です。
↑
このような「Installing componets...」の画面が表示されている時に、
コマンドラインツールのインストールが行われます。
(上がYosemite、下がMavericksの場合)
↓
※既存のXcodeがインストールされている場合、
そちらのインストール時にコマンドラインツールがインストールされるため、今回インストールされないこともあります。
これは既にインストールされていることから、今回新たにインストールする必要がないために行われないだけであるので、その場合は無視して②の作業に進んでください。
実際に私の場合、Xcode 6.0.2の時にインストールされているため同6.1の時はインストールが行われませんでした。
【2014/10/21 追記開始】
※Xcode 6.1をMac App Storeからインストールした場合は、
Xcode.app内のDeveloperフォルダを登録するだけで大丈夫です。
すぐ下の②のセクションにて登録が必要な場合、
具体的には「sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer」をターミナルから実行してください。
【2014/10/21 追記終了】
これについては、①〜③の中で最も詳しく説明する必要があると思います。
①の作業が完了した後、まずはターミナルから「xcode-select --print-path」と入力しエンターキーを叩いてみて下さい。
インストールしたXcode6.1のDeveloperディレクトリのパスが表示される場合は、
この作業は必要ありません。
もし私が該当するとした場合、
具体的には「sudo xcode-select --switch /Applications/Xcode6.1GM.app/Contents/Developer」と入力するとパスワードの入力を促されますので、ここで正しいパスワードを入力します。
(このコマンドでは先ほどのパスを表示させるコマンドとは違い、既存の設定を変更するためセキュリティ上の理由からパスワードが要求されます。
今回はコマンドの頭に「sudo」(superuser:管理者 としてdo:実行)を付けて実行することで、この変更が可能になります。
また、このようにsudoを用いることに起因してパスワードを入力する際はタイプした文字が表示されませんが、これは同じくセキュリティ上の理由による仕様ですのでバグなどではありません。
このsudoについてですが、Windowsでは「管理者として実行」に相当すると考えると良いでしょう。)
その後再度「xcode-select --print-path」と入力し、表示される表記がXcode 6.1のパスに変わっていましたら本項での設定は完了です。
※このXcode 6.1のパスは環境においてそれぞれ異なる可能性がありますので、
皆様が試みる際はお使いのXcode 6.1のパスに適宜読み換えたコマンドを実行してください。
※Xcodeでは慣例的に、「Developer」という名称のディレクトリに開発ツール群が収められるようになっています。
今回のSwiftのプログラミングではXcode 6.1の力を借りる必要があるため、
もしそれより古いXcodeをコマンドラインツールから使うように設定されていた場合は、Xcode 6.1のDeveloperディレクトリを参照するように設定する必要があるというわけです。
ではターミナルにて「swift」、または「swiftc」とのみ入力してエンターキーを叩いてください。と言いたいのですが、
これが通用するのは実はYosemiteだけです。Mavericksではコマンドが見つからず、エラーになってしまいます。
これが通用するのは実はYosemiteだけです。Mavericksではコマンドが見つからず、エラーになってしまいます。
この理由についてですが、
実はYosemiteでは、Xcodeをインストールしなくても最初からこれらのコマンドがインストールされているのです!
(インストールされているとは言いますが、これは単に標準状態で存在するというだけであるため、
実際はYosemiteであってもXcodeおよびコマンドラインツールをインストールしないと、Mavericksと同様にコマンドラインからSwiftを実行することはできません。)
Mavericksの場合、標準ではインストールされていないものの、
Xcodeをインストールするとその中にあるDeveloperディレクトリの更に奥深くに、これらのコマンドが一緒に格納されるようになっています。
具体的には、「/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin」という非常に長いパスのディレクトリの配下に、
swiftコマンドとswiftcコマンドが存在します。
(入力が非常に面倒であるため、入力する際はこのページからコピペする、
または後日投稿予定の記事を参考にYosemiteと同様、コマンド名だけで呼び出せるようにすることをオススメします)
※Yosemiteの場合、/usr/binディレクトリの配下にswiftコマンドとswiftcコマンドが標準でインストールされています。
またMavericksにおいて、上述のwhichコマンドをswiftおよびswiftcに対し実行した場合、
これらのコマンドが標準ではインストールされていないため何も表示されません。
(※whichコマンドは、引数として指定したコマンドのパスを表示するコマンドです)
↑
swiftコマンドまたはswiftcコマンドの初回実行時のみ、
このDeveloper Tools Accessのダイアログが表示されます。
これを許可しないとこれらのコマンドが使えませんので、
正しいパスワードを入力して「続ける」を選択してください。
↓
swiftコマンドおよびswiftcコマンドが使えることが確認できましたでしょうか?
確認できましたら、長かった下準備はここで終わりです。
ようやくSwiftのプログラムを実行することができます。
・swiftコマンドおよびswiftcコマンドの使い方
これより実際に、swiftコマンドおよびswiftcコマンドを使ってみたいと思います。
冒頭でも紹介しましたが、
前者ではswiftの後にソースファイルのパスを指定するだけで即実行することが可能です。
普段利用する際は大抵このコマンドでよいでしょう。
また「swift」とのみ入力してからエンターキーを叩くと、入力したコードがリアルタイムで実行されるモードになります。
従ってこのモードでは、
その都度ソースファイルを用意しなくても次から次へと入力したコードの実行結果を確認することが可能ですので、Swiftの初心者が最もお世話になるコマンドであることは間違いないでしょう。
XcodeのPlaygroundがGUIでの実行方法とすると、こちらがちょうどCUIでの実行方法になります。
この挙動から分かりますように、
Swiftは本来コンパイラ方式の言語であるにもかかわらず、このように簡単なコードであればインタプリタのように逐一確認できるという面白い特徴を備えています。
このモードを終えるには「:quit」とタイプすると可能であり、
またヘルプを参照するには、画面に表示されています通り「:help」と入力することで参照できます。
次は後者の「swiftc」ですが、
こちらは「ソースファイルをビルドして実行ファイルを生成してからそのプログラムを実行する」という、古典的な実行方法になります。
こちらは生成したプログラムを配布したい、またはソースコードの中身を他者に見られたくない場合などに使うと良いでしょう。
またオプションとして、gccやclangと同様に「-o 出力したい実行ファイル名」をコマンドに加えることが可能です。
またgccおよびclangでは、-oオプションを省略するとデフォルトで「a.out」という実行ファイル名で出力されますが、
swiftcコマンドでは-oオプションを指定しなかった場合、自動的にソースファイル名から拡張子を除いた名前で実行ファイルが出力されます。
(例えばmain.swiftが入力ファイルである場合、mainという名前で実行ファイルが出力されます)
ちなみにswiftcの末尾の「c」ですが、
実行ファイルを生成できることから分かるように、おそらくCompiler(コンパイラ)の「c」であると思われます。
またこのswiftcコマンドについてですが、
Mavericksから実行する際には注意点があります。
以下のように、
Mavericksからswiftcコマンドを実行する場合は、コマンドの先頭に「xcrun --sdk macosx10.10」を付けないと実行できません。
これはエラーメッセージの警告文においてその解決策として推奨されている通り、
おそらく「Xcode run(Xcodeでの実行)の意」であるxcrunコマンドを用いて、
「swiftcコマンドを用いる際に使用するSDKとして、バージョン10.10 Yosemiteのものを指定する」といった意味合いであると思われます。
Mavericksからswiftcコマンドを実行する際、事前にxcode-selectコマンドにてXcode 6.1のDeveloperディレクトリを指定していてもこのエラーが出ます。
(同じMavericksの環境から実行しているのにもかかわらず、なぜswiftコマンドではエラーにならないのか謎ではありますが...(・・;))
またswiftコマンドについても言えることですが、
swiftcコマンドと同じくMavericksから実行する際は「xcrun --sdk macosx10.10」を先頭に付けて実行してもエラーにはなりませんので、
Mavericksからこれら2つのコマンドを実行する際はこのことを慣習とすることを意識しておくと後々トラブルが少なくなるかもしれません。
こういった点から考察しますと、
YosemiteはMavericksと異なりSwift for OS Xを標準でサポートしている関係から、
このようにコマンドで使用するSDKのバージョンを指定しなくてもデフォルトでOS X 10.10のSDKが使われるのだと思われます。
・終わりに
本記事を投稿するあたり、
OS XのクリーンインストールからXcodeの導入といったような「一度設定してしまえば後から殆ど触れることのない内容」について、改めて触れることが出来ました。
その際、実は分かっていたようで実際は曖昧な理解であったことなどが私の中に浮き彫りになり、
結果的には皆様にSwiftについて紹介する以上に、自身がSwiftの理解を深める良い機会になりました。
また本音としましては、
このような面倒な設定を行ってまでコマンドラインからの実行に拘る方がいらっしゃるかは疑問ではあります。
ただ自身の学生時代の経験から言うと、
いきなり統合開発環境を使ったプログラミングを始めるのではなく最初はCUIベースでプログラミングの学習に取り組んでおり、同時にそれが今となっては良い学習方法であったと思っています。
そのような想いもあり、結果的に本記事を投稿することに致しました。
0 件のコメント:
コメントを投稿