Swiftアクションを利用する

Swiftアクションを作る過程は、JavaScriptアクションを作るのと類似しています。以下の例を通じて、簡単なSwiftアクションを作り、アクションにパラメータを追加して利用する方法をお教えします。

アクションを作成する

まず、以下のように、名前と場所を含む"Hello World in Naver!"を出力する簡単なSwiftアクションである'hello'を作成します。

func main(args: [String:Any]) -> [String:Any] {
    let name: String = args["name"] as? String ?? "World"
    let place: String = args["place"] as? String ?? "Naver"
    return [ "payload" : "Hello \(name) in \(place)!" ]
}

Swiftコードは、複数の関数を含むことができるが、main関数はプログラムの開始点として必ず宣言されなければなりません。

上記で作成したコードで'helloSwift'という名前のアクションを作ります。

compute-15-2-401

実行可能なSwiftアクションでパッケージングする

Cloud FunctionsでSwiftソースコードファイルを利用してアクションを作成する際、アクションが実行される前にバイナリーでコンパイルされなければなりません。一度コンパイルされた後は、作業を待機するコンテナ―が削除される前まで後続のアクション呼び出しに対しては素早くレスポンスします。

このように、コンテナーが削除された後は、初めてのアクション実行の際にレスポンスの遅延が発生するが、このようなレスポンスの遅延は、cold-start遅延で知られています。このようなcold-startの遅延を避けるためには、自分のSwiftファイルを直接バイナリーでコンパイルして作成されたZIPファイルをCloud Functionsにアップロードする必要があります。

バイナリーを作る最も簡単な方法は、実行される環境と同じ環境内でビルドすることです。以下の例を通じて、直接バイナリーを作成することについて調べていきます。

  1. まず、Dockerを利用してSwiftアクションのコンテナーを実行します。

     $ docker run --rm -it -v "$(pwd):/owexec" openwhisk/action-swift-v3.1.1 bash
    

    このコマンドは、Dockerのコンテナー内のbash shellを利用できるようにします。

  2. ソースコードをコピーしてビルドするために準備します。

     $ cp /owexec/hello.swift /swift3Action/spm-build/main.swift
    
     $ cat /swift3Action/epilogue.swift >> /swift3Action/spm-build/main.swift
    
     $ echo '_run_main(mainFunction:main)' >> /swift3Action/spm-build/main.swift
    
  3. (選択事項) Package.swiftファイルを作り、依存パッケージを追加します。

     import PackageDescription
    
     let package = Package(
     name: "Action",
         dependencies: [
             .Package(url: "https://github.com/apple/example-package-deckofplayingcards.git", majorVersion: 3),
             .Package(url: "https://github.com/IBM-Swift/CCurl.git", "0.2.3"),
             .Package(url: "https://github.com/IBM-Swift/Kitura-net.git", "1.7.10"),
             .Package(url: "https://github.com/IBM-Swift/SwiftyJSON.git", "15.0.1"),
             .Package(url: "https://github.com/watson-developer-cloud/swift-sdk.git", "0.16.0")
         ]
     )
    

上記の例では、example-package-deckofplayingcardsの依存パッケージを追加しました。CCurlKitura-netそしてSwiftyJSONは、基本Swiftアクションに含まれているため、Package.swiftに追加する必要があります。

  1. Package.swiftをspm-buildフォルダにコピーします。

     $ cp /owexec/Package.swift /swift3Action/spm-build/Package.swift
    
  2. spm-buildフォルダに移動してコンパイルします。

     $ cd /swift3Action/spm-build
     $ swift build -c release
    
  3. ZIPファイル作成し、Dockerのコンテナーから抜け出ます。

     $ zip /owexec/hello.zip .build/release/Action
     $ exit
    

    hello.zipファイルは、hello.swiftのようなフォルダ内に作成されています。

  4. このファイルを、helloSwifty名で新しいアクションを作成します。

アクションを実行し、より速くなった速度を確認することができます。

基本パラメータを設定する

毎回アクションを実行する度にパラメータを転送する代わりに、特定のパラメータに基本値を指定することができます。 上記で作成したhelloアクションのplaceパラメータに基本値を登録してみます。

compute-15-2-105

アクション実行時にパラメータを転送する

アクションの実行の際、入力でパラメータを転送することができます。 Main関数に転送されるパラメータは、JSON object形式で転送されます。

パラメータは、アクションの実行の際に直接入力するか、JSON形式のファイルを作成して転送することができます。 ファイルを通じてパラメータを転送する場合には、以下のようなJSON形式のファイルを作成する必要があります。

compute-15-2-106

アクションのランタイム情報

各アクションコンテナーには、基本ライブラリーが内蔵されており、このライブラリーは別途の追加作業なしにインポートして利用することができます。

Swift 3のライブラリー

Swift 3.1.1環境を提供します。アクションの作成の際に明示的にSwiftアクションのコンテナーを作成することができ、デフォルトバージョンは、3.1.1です。

Swift 3.1.1のアクションは、次のようなパッケージを利用することができます。

関連情報へ

下のガイドから関連情報をご確認いただけます。

に対する検索結果は~件です。 ""

    に対する検索結果がありません。 ""

    処理中...