IBM Swift Sandboxでサードパーティのパッケージを使用する簡単な方法


Swift環境を構築しなくても、Linux上で動作するSwift3.0の動作を手軽に確認できる [IBM Swift Sandbox] をちょろちょろっと触ってみたみた方も少なくないのではないでしょうか。しかし、`Foundation` や `Glibc`、`Dispatch`などの標準ライブラリだけでなく、サードパーティの外部ライブラリを使用したコードの動作確認も行いたいと思うはずです。

本記事では、次のスクリーンショットのように、[IBM Swift Sandbox] で `SwiftyJson` などの外部ライブラリが利用できるようにする方法を紹介します。
今回作成したサンプルはGithubで公開しています[^1]。また、実際の動作を確認する場合はこちら[^2]をご覧ください。
なお、この記事は調査中の内容も含んでいるので、すべての外部パッケージに適応できるかどうかは不明ですのでご注意ください。

![動作画面][screenshot]

## 必須のディレクトリ構成とファイル

公開中のGitHubのリポジトリを見ていただくと、全体のディレクトリ構成がわかると思いますが、重要なのは次のファイルのみです（現時点でわかってる範疇では）。

```text
├── .swift-version
├── Package.swift
└── Sources
    └── main.swift
```

| ファイル名       | 意味 |
|:---------------|:------------|
| .swift-version | サンドボックスの環境を示す文字列 |
| Package.swift  | 依存（使用したい）するライブラリを含めたパッケージの記述 |
| main.swift     | ライブラリを使用したコード |

.swift-version

```
DEVELOPMENT-SNAPSHOT-2016-05-09-a 
```

Package.swift

```swift
import PackageDescription

let package = Package(
    name: "examples-for-ibm-swift-sandbox",
    dependencies: [
        .Package(url: "https://github.com/IBM-Swift/SwiftyJSON.git", majorVersion: 8),
        .Package(url: "https://github.com/IBM-Swift/BlueCryptor.git", majorVersion: 0, minor: 2),
        .Package(url: "https://github.com/IBM-Swift/HeliumLogger.git", majorVersion: 0, minor: 9)
            ]
```

`majorVersion` と `minor` の値の詳細については、現在調査中です。


Sources/main.swift

```swift
import Foundation
import SwiftyJSON

func JSONExample() {
    let json = JSON(["name":"naokits", "age": 50])

    if let name = json["name"].string {
        print(name)
    }

    if let age = json["age"].int {
        print(age)
    }
}

JSONExample()
```


## 呼び出し方法

実際に利用するURL全体は脚注を参照してください。

ベースURL: https://swiftlang.ng.bluemix.net/#/repl?

| パラメータ | 例 | 説明 |
|:-----------|:------------|:------------|
| gitPackage | https://github.com/naokits/examples-for-ibm-swift-sandbox.git | サンプルリポジトリのような構成のリポジトリ|
|swiftVersion | swift-DEVELOPMENT-2016-05-09-a-ubuntu15.10 | 動作が保障されているサンドボックスの（Docker?）環境|

`swiftVersion` パラメータの値と、 `.swift-version` の内容の関連性については現在わかっていません。


## 注意事項
- 使用する外部ライブラリは、[Swift Package Manager] に対応している必要があります。
- また `IBM Swift Package Catalog`[^3] で紹介されているライブラリに限られるかもしれません。
- ライブラリが対応しているSwiftのバージョンを確認すること。
	- サンドボックスは頻繁にバージョンアップされるので、ライブラリ側の対応バージョンを確認する必要があります。


## まとめ

少しはヒントになったかと思いますが、いかがでしょうか？
現在不明な点については今後も調査を続けたいと思いますし、 `IBM's Mobile Innovation Lab` の方が、情報を提供してくれるそうですので、それらの内容を本記事に反映したいと思います。

IBM Swift Sandbox[^4]で外部ライブラリが使用できるようになれば、今後記事を書こうと思っている `OpenWhist`[^5] のアクションの動作確認もできる可能性があるので、自分的にも不明な点を明らかにして、様々な外部ライブラリを使用できるようにしたいと考えています。

こちらでも頑張っていますので、応援いただけると嬉しいです。
<https://github.com/naokits/my-programming-marathon>


<!-- 定義 -->

[github]: https://github.com/naokits/examples-for-ibm-swift-sandbox
[IBM Swift Sandbox]: https://swiftlang.ng.bluemix.net
[swiftenv]: https://github.com/kylef/swiftenv
[Swift Package Manager]: https://github.com/apple/swift-package-manager
[screenshot]: https://github.com/naokits/examples-for-ibm-swift-sandbox/raw/master/images/result.png "動作画面"

<!-- 脚注 -->

[^1]: <https://github.com/naokits/examples-for-ibm-swift-sandbox>
[^2]: <https://swiftlang.ng.bluemix.net/#/repl?gitPackage=https:%2F%2Fgithub.com%2Fnaokits%2Fexamples-for-ibm-swift-sandbox.git&swiftVersion=swift-DEVELOPMENT-2016-05-09-a-ubuntu15.10>
[^3]: https://swiftpkgs.ng.bluemix.net/
[^4]: https://swiftlang.ng.bluemix.net/#/repl
[^5]: http://www.ibm.com/cloud-computing/bluemix/openwhisk/