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 のインストール
他に libkqueue
と libbsd-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 サービスを作ってみるまでには至ってませんが、それについてはこれから実際に作って行きながら調べてみようと思います。