まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

2017/04

以前に紹介した SaaS 型のデータ解析サービス IBM Watson Analytics は強力な解析エンジンが安価で使えて、面白いサービスだと思っています:
2017040501



ただちょっと不便に感じたのは、データのインポート方法でした。手元に CSV などのファイルがあれば Watson Analytics 側に用意された機能でインポートできます。またデータが Box や Twitter などのクラウドに公開されたものであれば、やはり Watson Analytics に用意された機能で取り込むことができました:
2017040502


しかし現実的にはデータベースサーバーから直接取り込むことができると便利です。更に言うと、インターネットに公開されたデータベースサーバーではなく、プライベートネットワーク内にあるデータベースのデータを簡単に取り込むことができると、プライベートデータを(いちいち CSV にしてから手動インポートする必要がなくなって)便利なのですが、現在 Watson Analytics 単体にそこまでの機能は提供されていません。


しかし、単体では提供されていなくても、IBM Bluemix から提供されるいくつかの機能を組み合わせることで上記の要件は可能になります。具体的には Secure Gateway サービスと Data Connect サービスを使います。Secure Gateway でプライベートネットワークのデータベースに対してセキュアなトンネリングを貼った上で Data Connect を使い、そのプライベートデータベースと Watson Analytics との間での自動データマイグレーションが実現できます(そのマイグレーションを定期的に実行するようなスケジューリングまで含めて可能になります)。






以下に実際の手順を紹介しますが、実際にこの手順を行うにはプライベートネットワーク内のデータベースに加えて、IBM Bluemix および IBM Watson Analytics 両方のアカウントが必要です。そして IBM Bluemix では Secure Gateway と Data Connect の2つのサービスインスタンスが有効になっている必要があります。無料版にサインアップするなどして、あらかじめご用意ください。


まずプライベートネットワーク内のデータを確認しておきます。今回対象とするのはプライベートネットワーク内のデータベースサーバーで管理されている(仮想の)人事情報とします。名前(name)や年齢(age)、収入レベル(income)、容姿(looking)、血液型(blood_type)、出身地(prefecture)といった情報が格納されているものです(注 乱数で生成した偽データです)。これは認証は当然ですが、現時点ではプライベートネットワーク内からのアクセスしか許可していないものです。目的はこれらのデータを(一度 CSV ファイルにして取り出して手動アップロードしたりするのではなく)Watson Analytics で解析可能なデータとしてシステマチックにインポートすることとします:
2017040513


では実際の手順を紹介します。まずは Secure Gateway でこのプライベートネットワーク内のデータベースを IBM Bluemix 環境からアクセスできるようにします。その手順はこちらを参照してください。
SecureGateway で Bluemix とプライベートネットワークをセキュアに接続する


次に Secure Gateway で参照できるようになったプライベートデータを Data Connect のデータセットとして定義します。この手順についてはこちらを参照してください。
Data Connect サービスでデータベースをマイグレーションする


ここまで完了したら、次は Data Connect の接続先として利用できるよう、Watson Analytics を追加します。Data Connect サービスのダッシュボード画面左メニューから "Connections" を選択し、画面右上の "Create New" をクリックします:
2017040501


接続先のデータベースタイプの選択画面では "IBM Watson Analytics" を選択します:
2017040502


詳細設定画面に移動しますが、ここで設定する項目は接続名称を入力するだけです。最後に画面右上の "Create Connection" をクリックします:
2017040503


この接続情報が保存される際に IBM Watson Analytics への認証が行われます。IBM Watson Analytics を利用している IBM ID とパスワードを指定してログインしてください:
2017040504


正しく有効な ID が確認されると、Data Connect の接続情報として IBM Watson Analytics が追加されます:
2017040505


では作成した Watson Analytics にプライベートデータベースからデータをマイグレーションします。引き続き Data Connect ダッシュボードの画面左メニューから "Activities" を選び、右上の "Create New" をクリックします:
2017040506


まずマイグレーション元を指定します。あらかじめ作成してある Secure Gateway 経由の(プライベートデータベースの)データセットを選択します。選択したら画面右上の "Copy to Target" をクリックします:
2017040507


次にマイグレーション先を指定します。今回のマイグレーション先は IBM Watson Analytics なので、Connections から上記で定義した IBM Watson Analytics の接続名を選択します。このままマイグレーション実行スケジュールの指定("Schedule Activity")も可能ですが、まず1回手動で実行してみることにします。画面右上の並んだボタンから "Run" をクリックします:
2017040508


指定したとおりの(プライベートデータベースから Watson Analytics への)マイグレーション処理が実行され、アクティビティとして記録されます。なお、このアイコンから実行スケジュール(定期実行など)を編集することも可能です:
2017040509


実際にマイグレーションが行われたかどうかを確認してみます。改めて IBM Watson Analytics にログインすると、元々は存在していなかったデータセットが作られているはずです。これをクリックして、実際に解析してみます:
2017040510


解析テンプレートが表示されます。いくつかありますが、"What is the trend of looking over age by blood_type?"(血液型別に年齢と容姿にどういったトレンドがあるか?)が面白そう(笑)なので選択してみます:
2017040511


この解析用の画面に移動します。画面左側に年齢ごとの容姿の推移が血液型ごとの折れ線になって表示されます。また画面右にはこれらの分析からの発見として、「43歳の収入が一番高い」とか「年収をトータルすると AB 型が一番低い」といったインサイトも併せて表示されています(※繰り返しますが、乱数を使って生成した偽データです):
2017040503


特別何もしなくてもデータを与えるだけでここまで分析してくれる Watson Analytics もすごいのですが、その Watson Analytics に直接プライベートデータや社内データをセキュアにマイグレートしてくれる Secure Gateway や Data Connect と併せて利用することで、より便利に大事な情報を簡単に解析できるようになると感じます。


IBM Bluemix が提供するデータサービスの1つに "Data Connect" があります:
2017040401


このサービスは DB2, Oracle, dashDB, MySQL, cloudant, ・・・など、異なるデータベースサーバー間でのデータマイグレーションを実現するものです。マイグレーション元とマイグレーション先を定義し、相互システム間の型変換などを考慮してデータを扱い、(必要であれば)マイグレーションの実行スケジュールを指定することでデータのマイグレーション処理をその場で行ったり自動化したりする、というサービスです。更に必要に応じて Secure Gateway サービスを併用することで、クラウド上に公開されたデータベースだけでなく、オンプレミスデータベースを対象にすることも可能です。


今回は Data Connect の紹介例として、社内システムで運用中の MySQL データベースが存在していると仮定し、このデータベースの一部の内容(people テーブルの内容)を統計処理するために、クラウド上の dashDB に週に一度追加マイグレーションしたい、という要望があるものとして、この要望を実現するための設定を紹介します:
2017040402


こういった処理は JDBC などを使ってプログラミングすることも可能ですが、作成したアプリケーションを自動的に定期実行したり、同様のアプリケーションを作る際の流用性が少なかったりします。 そのような要望を一元的に管理・実現するためのサービスが Data Connect です:
2017040403


例えば上記のようなケースであれば、
(1) (マイグレーション元とマイグレーション先の2つの)データベースへの接続を定義し、
(2) データセット(マイグレーション元)を定義し、
(3) セータセットとマイグレーション先の2つの結びつきを定義し、
(4) マイグレーションの実行タイミングを定義して実行
することになります。 以下ではそれぞれの手順を実際の画面を使って紹介します。


まず IBM Bluemix で Data Connect サービスインスタンスを作成し、そのサービスインスタンスの画面を開くと、このように表示されます。画面内の "LAUNCH" ボタンをクリックすることで Data Connect サービスのダッシュボード画面に移動します:
2017040408


Data Connect のダッシュボード画面です。左上の "Data Connect" という箇所をクリックすると、いつでもこの画面に戻ってこれます:
2017040401


まずは上記 (1) の(マイグレーション元とマイグレーション先の)2つのデータベースへの接続方法を定義します。左メニューで "Connections" を選択します。現在は何も定義されていないので、画面には何も表示されないはずです。では画面右上の "Create Now" をクリックします:
2017040402


接続データベースの種類を選択する画面です。今回のケースではまずマイグレーション元となる MySQL の定義をするため、"MySQL" を選択します:
2017040403


次に MySQL の詳細情報を入力します。接続名、説明(オプション)、ホスト名、ポート番号、データベース名、Secure Gateway の利用有無、そしてユーザー名/パスワードを入力し、最後に右上の "Create Connection" をクリックします:
2017040404


(おまけ)
なお、もし対象とするデータベースサーバーがプライベートネットワーク環境内にある等、インターネットから直接参照できないような場合は、Bluemix の Secure Gateway サービスを併用します。Secure Gateway サービスがプライベートネットワーク環境とのセキュアなトンネリングを実現し、このトンネルを経由してプライベートネットワーク環境のデータベースを対象とすることができるようになります。なお Bluemix の Secure Gateway の利用手順については別途紹介したエントリがあるのでこちらを参照ください:
2017040503


Secure Gateway サービスを利用する場合の Connection 定義は以下のようにして行います。"Use a secure gateway" にチェックを入れ、設定済みの Secure Gateway 接続名を選択します。その上でデータベースサーバーのホスト名(IPアドレス)やポート番号は、プライベートネットワーク内でのものを指定します:
2017040504


なお、この Secure Gateway を使ってプライベートネットワーク内のデータベースに接続する場合ですが、データベース側はゲートウェイクライアント(または同一ネットワーク)から指定したユーザー名とパスワードで外部接続できるような設定をあらかじめ行っておく必要がある点に注意してください。例えばあるユーザーに同一ネットワーク(192.168.0.*)からの参照アクセスを許可する場合であれば以下のような MySQL コマンドを実行することになります:
> grant select on (データベース名).* to (ユーザー名)@"192.168.0.%" identified by '(パスワード)';

このコマンドの後でないと(外部からの接続ができないため)上記の接続定義が作成できないはずです。設定変更後に再度接続定義を行ってください。
(おまけ終わり)


接続定義の作成に成功すると1つ前の画面に戻り、いま作成した MySQL データベースへの接続情報アイコンが追加されていることが確認できるはずです。では続けてもう1つの(マイグレーション先の)接続情報を定義するため再度 "Create New" をクリックします:
2017040405


再び接続先データベースの種類を選択する画面です。今回は IBM dashDB に接続するので、"IBM dashDB" を選択します:
2017040406


データベースの種類によって入力する詳細項目が異なります。接続先が IBM dashDB の場合は接続名、説明(オプション)、ホスト名、データベース名、Secure Gateway の利用有無、そしてユーザー名/パスワードを入力し、最後に "Create Connection" をクリックします:
2017040407


先程の画面に戻り、今度は dashDB の接続情報アイコンが追加されたことが確認できるはずです。今回はこの2つの接続情報だけで充分ですが、マイグレーションで対象とする接続先の数だけこの作業を繰り返します(または後から追加します):
2017040408


次に (2) のマイグレーション元となるデータセットを定義します。今回は MySQL データベース内の people というテーブルの情報を dashDB にマイグレーションすることが目的なので、データセットは MySQL 内の people テーブルということになります。

このテーブルをデータセットとして定義するため、Data Connect ダッシュボードの左メニューから "Data Sets" を選択します。ここでも定義済みのデータセットがまだ存在していないので何も表示されません。では画面右上の "New Data Set" をクリックします:
2017040401


定義済みの接続情報名が(下画面では2つ)表示されます。今回は MySQL データベース内のデータを取り出したいので、MySQL の接続情報名を選択します:
2017040402


次にこのデータベース接続で対象とするデータベース名を指定します。今回は1つしか定義していないので、ただ1つ表示されるデータベースを選択しますが、複数ある場合は対象のものを選択します:
2017040403


次に対象となるテーブルやビューを選択します。今回は people テーブルを対象としたいので、"people" を選択します:
2017040404


必要であれば、このテーブルから取り出す列をカスタマイズします。全ての列を取り出す場合はデフォルトのまま全てにチェックを入れてください。最後に画面右上の "Publish Data Set" をクリック:
2017040405


すると1つ前の画面に戻り、データセット一覧に今作成した people テーブルが追加されたことが確認できます。これで (2) の作業も完了しました:
2017040406


続いて (3) データの結びつきと (4) マイグレーションスケジュールを定義します。今回の例では MySQL データベースの people データセットを dashDB データベースにマイグレーションしたいので、この関係を定義します。

改めてダッシュボード画面の左メニューから "Activities" を選択します。ここに定義済みのアクティビティ一覧が表示されますが、この時点ではまだ何も表示されていません。画面右上の "Create New" で新たに1つ追加します:
2017040401


アクティビティではまずマイグレーション元を指定します。今回は最初に作成した people データセットをマイグレーション元とするので、"Data Sets" を選択します:
2017040402


Data Sets 一覧から people を選択(1つしかないけど)します。全ての列にチェックが入っていることを確認して、次にマイグレーション先を指定するため画面右上の "Copy to Target" をクリックします:
2017040403


マイグレーション先は dashDB のデータベースなので、"Connections" の dashDB の接続情報名を選択し、マイグレーション先となるデータベーススキーマを指定します:
2017040404


people テーブルをマイグレーションするのですが、このデータベースが指定したスキーマに存在していない場合はどのようにマイグレーションするかを選択します。下図では "Recreate the table"(テーブルごと作り直してマイグレーションする)を選択しています。これで定義自体は完了で、必要に応じてこのアクティビティ定義に名前を指定することもできます(画面左上から編集できます)。 そしてこの定義を保存(Save)するか、そのまま実行(Run)することもできますが、今回は更に実行スケジュールを指定します。画面右上の "Schedule Activity" をクリックします:
2017040405


カレンダーが表示されます。このマイグレーションアクティビティを実行する日付を指定します:
2017040406


次に実行時刻(指定日の何時に実行するのか)を指定します。1回だけ実行するのであればこのまま "APPLY" をクリックしてもいいのですが、定期的に繰り返して実行する場合は "Schedule this activity to repeat" を選択します:
2017040407


引き続いて繰り返しの条件を指定します。下図の例では毎日(Daily & Every 1 day)実行して、終了日を指定せず(Never)に定義しています。繰り返し条件が確定したら "APPLY" をクリックします:
2017040408


指定した実行スケジュール(の直近のもの)が画面右側に表示されます。内容を確認して画面右上の "Done" をクリックします:
2017040401


1つ前の画面に戻り、いま定義したアクティビティが追加されたことが確認できます。このアクティビティの内容を確認したり、内容を変更する場合はこのアクティビティを選択します:
2017040402


この画面からアクティビティそのものを編集したり、スケジュールを変更したり、或いはスケジュールに関係なく一度実行したりすることができます:
2017040403


このアクティビティが実行されると、元の(MySQL の)データが dashDB へマイグレーションされます。ちなみにこちらが両者のテーブル内をプレビューした様子です(前者が MySQL 、後者が dashDB):
2017040400
  ↑MySQL


2017040401
  ↑dashDB


マイグレーションの定義とスケジューリングができ、正しく動いていることが確認できました。今回のケースであれば、いわゆるトランザクション用途で使っていた MySQL のデータを、統計処理目的で dashDB に移したかったわけですが、それが簡単に実現できたことになります。

このような異なるデータベース間のデータマイグレーションは、まあパターンが1つ程度であればプログラミングで可能になるかもしれませんが、何種類ものデータベースを対象としたり、順序などが複雑に絡み合っていたり、その実行スケジュールを考慮したりすると、システマチックに済ませたくなります。そんなケースで手軽にマイグレーションが行える Data Connect はかなり便利だと感じました。


IBM Bluemix が提供するサービスの1つである Secure Gateway を紹介します:
2017040501


IBM も提唱する「ハイブリッド・クラウド」環境では、パブリックなクラウドだけでなく、一部のデータベースがセキュアなプライベート環境やオンプレミス環境上に存在したままでシステムシステムを実現する必要があります。ではどのような仕組みでパブリッククラウドとセキュアなデータベース接続を実現することができるでしょうか?
2017040501


一般的には VPN などの仕組みを使うことも考えられますが、そのためのサーバー機器やソフトウェア、およびそれらの仕組みをプライベートネットワーク側にも用意する必要があり、運用・管理も含めた負担は軽いものではありません。 今回紹介する Secure Gateway はプライベートネットワークの Docker イメージとしてトンネリングクライアントを用意し、Bluemix 側のトンネリングサーバー(ゲートウェイ)との間で通信して、目的のプライベートデータベースとの接続をシームレスに実現する、というものです:
2017040501


この Secure Gateway を利用する場合、その環境構築は非常に簡単です。ゲートウェイサーバー側は SaaS のサービスをインスタンス化するだけ、クライアント側はソフトウェアを導入してゲートウェイサーバーと接続するコマンドを実行するだけですが、導入方法の1つとして専用の Docker イメージが用意されているので、そのコンテナを Docker から起動するだけで済みます。管理・運用の負担が非常に小さくなります。


また Secure Gateway には利用量に応じたいくつかのプランがあります。無料版である Essentials プランでは1つのゲートウェイにつき接続先は1つ(例えば1つのデータベース)だけですが、1ヶ月間に 500MB のトンネリング通信を行うことができます。Bluemix の画面からプランを選択して「作成」ボタンをクリックすると、このサービスが利用可能になります(この時点ではまだインスタンス化していません):
2017040502


この(サービスを作成した直後の)時点で Bluemix の Secure Gateway サービス画面を見ると以下のようになります。ダッシュボードから利用状況が確認できますが、まだゲートウェイインスタンス(上記図の Secure Gateway サーバー)が生成されていないので通信は行われていません。ゲートウェイサーバーを作成するには、画面左下の「ゲートウェイの作成」をクリックします:
2017040503


ゲートウェイの追加画面が表示されます。ここではゲートウェイの(つまりは接続先の)名称を指定します。必要に応じてセキュリティ・トークンの設定を行い(下図では設定していません)、最後に「ゲートウェイの追加」をクリックします:
2017040504


これでゲートウェイサーバーインスタンスが生成されました。が、まだゲートウェイクライアントが作られていないので、未接続状態です(画面右上のチェーンが赤)。そこで続いて「クライアントの接続」をクリックします:
2017040505


ゲートウェイクライアントを導入するにはプライベートネットワーク内に専用のソフトウェアをインストールする他にも、専用の Docker イメージを使う方法や IBM DataPower アプライアンスサーバーを使う方法があります。今回はゲートウェイクライアントを Docker イメージから作るものとします(プライベートネットワーク内に Docker が導入されたマシンが存在するものとして、以降「Docker ホストマシン」と表現します)。そして接続方法に "Docker" を選択します。すると、Docker ホストマシン上で実行するべきコマンドが表示されます。ここに書かれている "docker run -it" で始まるコマンドを、プライベートネットワーク内の Docker ホストマシンで実行します:
2017040506


多くの場合、ここで作成する Docker イメージを起動したまま Docker ホストマシンのコマンドを抜けることになると思うので、Docker ホストマシンでコマンドを実行する前に一度 screen などでターミナルを多重化しておくのがいいと思います:
$ screen

その上で上記コマンドを実行するとこのような画面になり、最後にプロンプトが表示されます。Secure Gateway クライアントが起動した状態で Docker イメージが起動し、コマンド待ち状態になっています:
$ docker run -it ibmcom/secure-gateway-client XXXXXXXX_prod_ng
IBM Bluemix Secure Gateway Client Version 1.7.0
************************************************************************************************
You  are running the  IBM Secure  Gateway Client for Bluemix. When you enter the provided docker
command the IBM Secure Gateway Client  for Bluemix automatically downloads as a Docker image and
is executed on your system/device. This is released under an IBM license. The  license agreement
for IBM  Secure Gateway Client for Bluemix is available at the following location:

http://www.ibm.com/software/sla/sladb.nsf/lilookup/986C7686F22D4D3585257E13004EA6CB?OpenDocument

Your use of the components of the package and  dependencies constitutes your acceptance  of this
license agreement. If you do  not want to accept the license, immediately quit  the container by
closing the  terminal  window or by  entering 'quit' followed by the ENTER key. Then, delete any
pulled Docker image from your device.

For client documentation, please view the ReadMe located at:
.rpm and .deb installers: /opt/ibm/securegateway/docs/
.dmg installer:           <installation location>/ibm/securegateway/docs/
.exe installer:           <installation location>\Secure Gateway Client\ibm\securegateway\docs\
************************************************************************************************


<press enter for the command line>
[2017-04-04 11:20:59.269] [INFO] (Client ID 1) No password provided. The UI will not require a password for access
[2017-04-04 11:20:59.278] [WARN] (Client ID 1) UI Server started. The UI is not currently password protected
[2017-04-04 11:20:59.279] [INFO] (Client ID 1) Visit localhost:9003/dashboard to view the UI.
[2017-04-04 11:20:59.521] [INFO] (Client ID 15) Setting log level to INFO
[2017-04-04 11:21:01.562] [INFO] (Client ID 15) The Secure Gateway tunnel is connected
[2017-04-04 11:21:01.752] [INFO] (Client ID XXXXXXXX_eoF) Your Client ID is XXXXXXXX_eoF
XXXXXXXX_eoF>

(追記)
ダッシュボード画面に表示されている Docker コマンドは上記(docker run -it ****)なのですが、実際にはネットワークモードをデフォルトのブリッジではなくホストモードで起動しないとエラーが発生する、という症状が出ることもあるので、その場合はホストモード(docker run --net=host -it ****)での起動を試みてください。自分はホストモードで起動しています。
(追記終わり)


このクライアントのワーカー ID (Essentials プランの場合は大抵1だと思いますが)を後で使うので確認しておきます。このプロンプトにおいて "L" という List の短縮コマンドを実行して、Worker ID を確認します:
XXXXXXXX_eoF> L
----------------------------------------
-- Current Secure Gateway Client Connections --

 Worker ID   Client ID     Description
      1     XXXXXXXX_eoF          木村家GW
----------------------------------------
XXXXXXXX_eoF>

もしもここでワーカー ID が確認できなかった場合は、何らかの原因でゲートウェイサーバーとの接続がうまく行ってないことになります。その場合は手動でゲートウェイ ID を指定して接続する必要があります。ゲートウェイ ID を確認するには Secure Gateway ダッシュボードで接続名(下図の場合は「木村家GW」)の右にある歯車マークをクリックします:
2017040502


すると以下のような画面が表示され、ゲートウェイ ID が表示されるので、この値をコピーしておきます:
2017040508


改めてゲートウェイクライアントのプロンプトで、以下のように指定してゲートウェイサーバーと接続します:
XXXXXXXX_eoF> c (ゲートウェイID)

その後、上記の L コマンドで接続を再確認してください。


ではここで確認したワーカー ID を使って、接続を許可するリソースを指定します。例えばプライベートネットワーク内のデータベースサーバーの IP アドレスが 192.168.0.101 で、データベースシステムが MySQL (ポート番号 3306)だった場合、以下のコマンドを実行して、Secure Gateway による接続を許可します:
XXXXXXXX_eoF> A 192.168.0.101:3306 1

  ↑最後の1はワーカーID


なお、上記で触れたようにゲートウェイクライアントで screen を実行してから Docker イメージを起動していた場合、キーボード操作で Ctrl + A, D (Ctrl を押しながら A 、続いて Ctrl を離して D)を実行すると Docker イメージを起動したまま screen を抜ける(デタッチする)ことができます:
XXXXXXXX_eoF> (Ctrl + A, D を実行)
$ 

こうしてデタッチした screen に再び接続(アタッチ)するには screen -r コマンドを実行します:
$ screen -r

XXXXXXXX_eoF>


これだけで Bluemix のランタイム(アプリケーションサーバー)などから、Secure Gateway を経由してプライベートネットワークのデータベース等に接続することができるようになります。 実際に接続する場合にランタイム側からどのようなサーバーとポートに対して接続すればよいのかを確認します。


先程の Secure Gateway のダッシュボード画面の、作成したゲートウェイの画面において、「宛先」タブを選び、上記で定義済みの宛先の設定ボタン(右下の歯車アイコン)を選択します:
2017040701


すると以下のような画面になります。ここで「リソース・ホスト:ポート」にはオンプレミス上の接続先リソースの情報が表示されますが、「クラウド・ホスト・ポート」に表示されているホスト名とポート番号の組み合わせをコピーしてください。そして実際のアプリケーションランタイムからは、このホスト名とポート番号に対して接続することでハイブリッドなクラウド環境が実現できます:
2017040702




前回の続きです:
Ubuntu で Swift 言語を使う


前回は Ubuntu 上に Swift アプリケーション開発環境を用意して、ハローワールド的なアプリケーションを作って実行するまでを紹介しました。今回は Swift 用の Web アプリケーションフレームワークである Kitura を使って、Ubuntu 上の Swift で Web アプリケーションを開発してみます。 以下の作業の前に前回紹介した導入作業が必要になるので、まだの場合はこちらを参照して Ubuntu に Swift をインストールしておいてください。

では改めて Kitura アプリケーションを作ってみます。前回同様にアプリケーションプロジェクト用のディレクトリ(以下の例では myFirstKitura)を作って移動し、swift コマンドでパッケージを初期化しておきます(ここまでは前回と同様です):
$ mkdir myFirstKitura
$ cd myFirstKitura
$ swift package init --type executable

このプロジェクトでは Kitura を利用するため、パッケージ情報に dependencies を記述する必要があります。Package.swift ファイルをテキストエディタで開き、以下の青字部分を追加します:
import PackageDescription

let package = Package(
    name: "myFirstKitura",
    dependencies: [
        .Package(url: "https://github.com/IBM-Swift/Kitura.git", majorVersion: 1, minor: 6)
    ]
)

そしてアプリケーションのソースコード Sources/main.swift を以下のように変更します。Kitura の HTTP Server を使って 8090 番ポートで待ちうけ、"/"(ドキュメントルート)への GET アクセスをハンドリングしてメッセージを表示する、という内容にしています:
import Kitura

// Create a new router
let router = Router()

// Handle HTTP GET requests to /
router.get("/") {
    request, response, next in
    response.send("ハローワールド!")
    next()
}

// Add an HTTP server and connect it to the router
Kitura.addHTTPServer(onPort: 8090, with: router)

// Start the Kitura runloop (this call never returns)
Kitura.run()
  ↑なんとなく Node.js の Express に似てます。。


ではこのコードをビルドして実行します:
$ swift build
$ ./build/debug/myFirstKitura (実行したままにします)

実行されている状態で、同じシステムのウェブブラウザから http://localhost:8090/ にアクセスし、コードに記述したメッセージが表示されることを確認します:
2017040402


ウェブアプリケーションとして稼働できていることが確認できました。実行したままになっているコマンドを終了するには Ctrl + C を実行します:
$ ./build/debug/myFirstKitura
^C  (Ctrl+C を実行して、コマンドプロンプトに戻る)
$


以上、簡単なサンプルでしたが、Web のルーティング機能が実装されたフレームワークで Swift アプリケーションを、macOS ではなく Ubuntu 環境で開発/実行することができるようになりました。この Swift ウェブアプリケーションは IBM BluemixSwift ランタイムとしても実装されており、作ったアプリケーションを Bluemix 上ですぐに運用することができます:
2017040403



(参考)
http://www.kitura.io/en/starter/gettingstarted.html


Apple が開発したプログラミング言語 Swift は 2016 年にオープンソース化され、macOS 以外のプラットフォームでも Swift のアプリケーション開発ができるようになりました。というわけで、実際に Ubuntu から Swift をセットアップして使ってみました。以下は自分の(VirtualBox 上の)Ubuntu 14.02 環境での作業記録です。

なお、今回は Swift 3.0.2 を使うことにします(2017/Apr/04 時点での最新バージョンは 3.1 ですが、このバージョンの場合 Xcode 併用となって環境準備が面倒だったので・・ ←訂正、コマンドラインだけでも 3.1 が使えました。「Xcode の一部として Swift が提供されている」という表現が正しいようです)。

Ubuntu で Swift をインストールしたり、Swift アプリを作成したりする作業はターミナルからのコマンド操作で行います。というわけでターミナルを起動し、まずは Swift をインストールする上での前提パッケージをインストールします:
$ sudo apt-get update
$ sudo apt-get install clang libicu-dev libcurl4-openssl-dev libssl-dev

続いて Swift のダウンロードページから Ubuntu 用の Swift 3.0.2 をダウンロードします:
2017040401


ダウンロードしたファイルを展開して、展開先にパスを通します:
$ tar xzvf swift-3.0.2-RELEASE-ubuntu14.04.tar.gz
$ export PATH=~/swift-3.0.2-RELEASE-ubuntu14.04.tar.gz/usr/bin:$PATH  (この行を ~/.bashrc などに書くのがオススメ)

これで Swift 本体のインストールは完了です。次にアプリケーションを作ってみます。開発用のディレクトリ(以下の例では myFirstSwift)を作って、そこに移動します:
$ mkdir myFirstSwift
$ cd myFirstSwift

このディレクトリの中で上記でインストールした swift コマンドを使い、Swift アプリケーションパッケージを初期化します:
$ swift package init --type executable

この時点で以下のようなファイル構成が生成されています:
myFirstProject
|- Package.swift
|- Sources
    |- main.swift
    |- Tests

いわゆる「ソースファイル」は Sources/main.swift になります。この時点での中身は以下のような Hello World 表示アプリケーションになっています:
print("Hello, world!")

必要に応じてテキストエディタで適当に書き直してみます:
print("ハロー Swift ワールド on Ubuntu!")

ソースコードが用意できたら swift コマンドでビルドします:
$ swift build

ビルド結果は .build/debug/myFirstSwift にあるので、これを実行して、期待通りの結果が出力されることを確認します:
$ ./build/debug/myFirstSwift
ハロー Swift ワールド on Ubuntu!

ごく簡単なサンプルでしたが、とりあえず Ubuntu 上で Swift アプリの開発ができることが確認できましたが。次回は Swift の Web フレームワークである Kitura を紹介する予定です。




(参考)
http://www.kitura.io/en/starter/gettingstarted.html


このページのトップヘ