Kitura を使って Ubuntu でサーバーサイド Swift 環境を構築する

Server Side Swift

Linux で Swift を使う準備が整ったので IBM の Kitura を使って Web アプリケーションを作れる環境を整えてみました。


Ubuntu で Swift 3.0 を使う準備を整えたので、それを使って Web アプリケーションを作れるようにしてみました。いわゆる、サーバーサイド Swift です。

Swift で Web サービスを作れる仕組みは幾つかあるみたいで、例えば Perfect というのも気になっていたのですけれど、いよいよ実際に始めてみようと思った矢先に登場した Kitura を今回は試してみることにします。

環境

今回の Kitura を動かす環境は次の通りです。

これらの環境をそろえた時の話については、Ubuntu 14.04 を用意した時の話は こちら で、そこに Swift 3.0-dev を入れた時の話は こちら に記してあります。

Kitura のインストール

それでは Kitura を Ubuntu 14.04 にインストールしていきます。手順は Kitura/README.md の Linux 用のインストール手順に従って行います。

なお、今回は作業用に /usr/local/src/Kitura ディレクトリを作成して、そこでインストールを進めていくことにします。

ライブラリのインストール

Kitura をインストールするにあたり、次のようにしてライブラリをインストールする必要があるようでした。

sudo apt-get install libhttp-parser-dev libcurl4-openssl-dev libhiredis-dev

swift-corelibs-libdispatch のインストール

続いて swift-corelibs-libdispatch を入れておく必要があります。その際にさらに必要になるツールが幾つかあったので、それらも併せてインストールしておきます。

git のインストール

まず git が必要なので、まだインストールしていない場合は次のようにして入れておきます。

sudo apt-get install git

これをインストールしておかないと Kitura のインストールに必要な seabaylea/swift-corelibs-libdispatch を GitHub から入手するときに使う git を利用できません。

autoreconf のインストール

また、autoreconf というコマンドも必要になるので、まだインストールしていない場合は次のようにして入れておきます。

sudo apt-get install dh-autoreconf

これを入れておかないと seabaylea/swift-corelibs-libdispatch をビルドするために autogen.sh を実行したときに次のようなエラーが表示されます。

./autogen.sh: 2: ./autogen.sh: autoreconf: not found

libkqueue のインストール

他に libkqueuelibbsd-overlay パッケージも必要になるので、次のようにしてインストールしておきます。

sudo apt-get install libkqueue-dev
sudo apt-get install libbsd-dev

これを入れておかないと seabaylea/swift-corelibs-libdispatch をビルドするために configure を実行したときに次のようなエラーが表示されます。

No package 'libkqueue' found

No package 'libbsd-overlay' found

C Blocks Support

それと clang で C Blocks のサポートが必要になるようです。これには BlocksRuntime というライブラリが必要になるようなので、次のようにしてそれもインストールしておきます。

sudo apt-get install libblocksruntime-dev

これを入れておかないと seabaylea/swift-corelibs-libdispatch をビルドするために configure を実行したときに、次のようなエラーメッセージが表示される様子でした。

checking for C Blocks support... -fblocks

checking whether additional libraries are required for the Blocks runtime... configure: error: can't find Blocks runtime

ちなみにこれを入れておくことで clang-lBlocksRuntime オプションを指定できるようになる様子です。入れていなくても -fblocks オプション自体は指定できる様子でした。

swift-corelibs-libdispatch のインストール

ここまでの準備が整って、やっと swift-corelibs-libdispatch のインストールが行えます。

cd /usr/local/src/Kitura
git clone -b opaque-pointer git://github.com/seabaylea/swift-corelibs-libdispatch

cd swift-corelibs-libdispatch
./autogen.sh
./configure
make
sudo make install

このようにすることで、スムーズに進めば数分ほどの時間でビルドできました。

インストール時にいろいろログメッセージが出力されていて、もしかすると後で何かの役に立つかもしれないので、念のためそれらを swift-corelibs-libdispatch-configure.log , swift-corelibs-libdispatch-make.log , swift-corelibs-libdispatch-make-install.log に保存しておきました。

Kitura 0.2.0 では dispatch のインストール時に module.modulemap /usr/local/include/dispatch にコピーする必要がありましたけど、Kitura 0.3.0 からは不要になりました。

pcre2 のインストール

そして PCRE - Perl Compatible Regular Expressions という正規表現ライブラリをインストールする必要があるようでした。公式のインストールの手順の中では pcre2-10-20 をダウンロードすることが記されていたので、今回はそれに従ってそのバージョンを入れておくことにします。

cd /usr/local/src/Kitura
wget http://ftp.exim.org/pub/pcre/pcre2-10.20.tar.gz

tar xvzf pcre2-10.20.tar.gz

cd pcre2-10.20

./configure
make
sudo make install

このようにして、こちらは特に難しいことなく、インストールできました。

pcre2 をインストールした時に表示されたログメッセージは pcre2-configure.log , pcre2-make.log , pcre2-make-install.log に保存しておきました。

Kitura のインストール

ここまできて、いよいよ Kitura のインストールです。

cd /usr/local/src/Kitura/
git clone https://github.com/IBM-Swift/Kitura.git

cd Kitura

make

このようにして、無事に Kitura のビルドができました。途中で warning: \_\_LINE\_\_ is deprecated and will be removed in Swift 3, please use #line という警告メッセージが山ほど出ましたけど、今のところはとりあえず無視しておけそうです。

それではなく、もし make を実行した時に error: unable to invoke subcommand: /usr/bin/swift-build (No such file or directory) というメッセージが表示されたら、その時はインストールされている Swift が Swift 2.2 Release Snapshots (February 8, 2016) かもしれません。ビルドには Swift Latest Development Snapshots (February 8, 2016) だけに含まれる swift-build が必要になる様子でした。

ここまで問題なく実行できたら、これで Kitura のインストールは完了です。

Kitura のサンプルを動かしてみる

インストールが完了したら、公式の手順にあるように、動作テストを行ってみます。

テストを実行するには、ライブラリ libdispatch.so をシステムが見つけられるようにする必要があるようです。このライブラリは /usr/local/lib/libdispatch.so にインストールされているようなので、次のようにしてパスを通しておくようにします。

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

こうした後で、次のようにテスト用のサンプルを実行します。

cd /usr/local/src/Kitura/Kitura
./.build/debug/KituraSample

これで Kitura のサンプルサイトが起動して 8090/TCP ポートで待ち受け状態になります。

このまま Kitura を起動させた状態にしてこのサーバーに Web ブラウザーでアクセスすれば、ブラウザーに次のメッセージが表示されます。サーバーへのアクセスは、例えば http://localhost:8090 のような URL を使います。

You're running Kitura

ちなみにもし libdispatch.so へのパスが通っていない状態で Kitura のサンプルを実行すると、次のエラーメッセージが表示される様子でした。

error while loading shared libraries: libdispatch.so: cannot open shared object file: No such file or directory

現在の Kitura 0.3.0 に同梱された KituraSample をビルドしようとすると、ビルドエラーが発生することがあるようでした。原因は Makefile に記載されたパスと、Kitura-net パッケージがダウンロードされるパスとが異なるために起こるもので、今のところは手作業で直してあげる必要があるようでした。それについては こちら に記してあります。

サーバーサイド Swift 環境の構築完了

これで Ubuntu 14.04 に Kitura をインストールして動かすことができました。

まだ、サンプルコードがどんな内容になっているかや、実際に自分で Web サービスを作ってみるまでには至ってませんが、それについてはこれから実際に作って行きながら調べてみようと思います。