見出し画像

[Drogon]フレームワークのインストール

社内のアプリケーション開発を行う上で、様々なフレームワークの検討を行いました。その中でも私のお気に入りのフレームワークである、DrogonというWebフレームワーク環境を構築する手順についてまとめました。

DrogonはWeb分野では珍しく、C++を使用して開発を行うことのできるWebフレームワークです。
その特徴は、C++を使用するだけあってとにかく駆動が高速であることとされています。

Drogonを使用して出来ることは、公式のgithubの記載を基に簡単にまとめると、以下のようになります。

  • epoll(Linux系)またはkqueue(Unix/FreeBSD系)を使用した、高性能なネットワークIO

  • 非同期のプログラミングモード

  • Http1.0 / 1.1のサポート

  • Cookieと組み込みセッションのサポート

  • シンプルなリフレクション(URLなどを基にしたクラスなどの呼び分け)でのMVCモデルの実現

  • Cookieと組み込みセッションのサポート

  • CSP(C++ Server Pages)ファイルを使用したバックエンドレンダリングの提供

  • CSPファイルからC++コード生成可コマンドラインツールの提供

  • Viewページの動的ロード(アプリ起動中もコードをコンパイルしたら反映される仕組み)

  • コントローラ制御をパスから容易に呼び出せるルーティング機構・フィルタリングチェーンを用いたHTTPリクエストの容易な検証

  • OpenSSLによるhttpsの提供

  • WebSocketのサポート

  • Json形式のサポートにより、RestfulAPIアプリケーション開発も可能

  • ファイルのアップロード、ダウンロードのサポート

  • gzip、brotli圧縮伝送をサポート

  • パイプライン処理のサポート

  • drogon_ctlコマンドによるクラス、ビューコードの生成

  • PostgreSQLおよびMySQL(MariaDB)への非同期I/O機能の提供

  • sqlite3への非同期I/O機能の提供

  • オンメモリデータベースRedisへの非同期I/O機能の提供

  • ARMアーキテクチャへのサポート

  • オブジェクト対データベースの双方向マッピング実装(ORM:Object Relational Mapping)の提供

  • プラグインのサポート

  • AOP(Aspect Oriented Programming)の組込み機能でのサポート

  • C++コルーチン(実行中の中断/再開が出来る関数)のサポート

これだけ見てもWebフレームワークとしての機能は十分に提供されていることがわかります。ここに書いた内容はシンプルに読めるように意訳要約しているので、原文が気になる方は以下のページを参照してみてください。

drogonframework/Drogon(github)

Drogonの大きな特徴である、開発言語がC++であるということの大きな強みは、ハードウェアのアドレスを直接叩くような低層の制御から高層の処理まで単一の言語で完結するというところでしょうか。

高速駆動することは、裏を返せば実行環境への負荷が軽いということとほぼ同じような意味合いです。ですから比較的性能が劣るハードウェア上でも十分に動作しますので、やろうと思えばこのフレームワークで組込み機器上にサーバを構築、RestfulAPIを用いて直接信号線の制御なども行えるポテンシャルがあります。

そういう意味では従来のWebアプリケーション開発に使用するというよりも、IoT機器の開発を高度化することに向いたフレームワークと言えるかもしれません。

インストールしてみる

さて、Drogonについての特徴がわかったところで、実際にUbuntuServer20.04LTSの環境にインストールしてみましょう。

いくつかの手順が必要になりますが、順を追ってやっていきたいと思います。

前提

Ubuntu Server 20.04LTS が駆動する環境上であるということが必要になります。用意のない方は公式の手順に従って、環境を構築しておきましょう。

依存パッケージのインストール

Drogonフレームワークが様々な機能を提供していることは前述のとおりですが、その機能を実現するために複数のライブラリが必要となります。
ライブラリのインストールが不足していると、実際にgitでダウンロードしてきたソースコードのビルドに失敗するので、必要ライブラリをまずインストールしておきます。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install git \
cmake \
gcc \
curl \
libjsoncpp-dev \
uuid-dev \
libssl-dev \
zlib1g-dev \
postgresql-server-dev-all \
libc-ares-dev \
build-essential \
doxygen

なお、apt や apt-get を使用してパッケージをインストールする際には、--no-install-recommends を付与して時間短縮する手段は一般的です。

しかしこの作業を実行する時期によっては、 curl と一緒にリコメンドされてインストールされる ca-certificate など認証局周りのパッケージが git 実行時に認証失敗する場合があって面倒です。

Dockerコンテナを作成する場合や、余程厳密に環境を管理されている場合を除けば、このように一緒くたに入れてしまっても大して問題ないでしょう。

今回は私の好みでPostgreSQLを使用していますが、MySQLやMariaDBを使用する場合には、postgresql-server-dev-all をそれぞれのDBに即したパッケージに差し替えます。

また、doxygen に関しては除外しても問題ありません。

ソースコードのダウンロード

drogonフレームワークはパッケージでのインストールではなく、ソースコードをダウンロードしてのビルドが必要となります。
zipで落としてもgitクローンしてもさして変わりはないのですが、アップデートへの追従が面倒になる場合が考えられるので、gitでcloneしてきた方が基本的には無難でしょう。

$ git clone https://github.com/an-tao/drogon

ソースコードのダウンロードが成功したら、ダウンロードディレクトリの中に入りビルドを実行します。
まずはダウンロードディレクトリに移動しましょう。

$ cd drogon

ビルド&インストール

Drogonをビルド&インストールする方法は二通りあります。
一つは同梱されたシェルスクリプトを使用する方法。
もう一つは一つ一つ自分でコマンドを打っていく方法です。

もちろんこれらに頼らずBazelなどで自分でビルドスクリプトや環境を組んでビルドすることもできますが、面倒な割に見返りは理解が深まるくらいなので、公式に従うのが無難です。

シェルスクリプトを使用する場合

同梱のビルドスクリプトを実行すればdrogon_ctlのインストールまで、一括で実行することができます。

sudo /bin/bash build.sh

多くの場合はこの方法でインストールするのがシンプルで簡単でしょう。

一つ一つコマンドを打つ場合

シェルスクリプトを実行しない場合は、以下の一連の手順を実行する必要があります。

基本的にはシェルスクリプトを実行すればOKですが、例えばDockerコンテナとして環境構築をする際に公式のDockerfileが提供されていない環境では、以下の手順を覚えておくことでDockerfileを自作することができます。

$ git submodule update --init
$ mkdir build && cd build
$ cmake ..

以下のメッセージが出れば成功

-- Configuring done
-- Generating done
-- Build files have been written to: [ダウンロードディレクトリ]/build

ビルドが成功したら、以下のコマンドでインストールします。

make install

ビルドの確認

ビルドが成功すると、drogon_ctlというコマンドが実行可能となります。
-vオプションを使用してインストールした内容を確認すると、以下のようなバージョン情報が表示されますので、自分の意図したビルドが出来ているか確認しましょう(ちなみに私はboostのインストール忘れてました…)

$ drogon_ctl -v
     _                             
  __| |_ __ ___   __ _  ___  _ __  
 / _` | '__/ _ \ / _` |/ _ \| '_ \ 
| (_| | | | (_) | (_| | (_) | | | |
 \__,_|_|  \___/ \__, |\___/|_| |_|
                 |___/             

A utility for drogon
Version: 1.7.5
Git commit: 
Compilation: 
  Compiler: /usr/bin/c++
  Compiler ID: GNU
  Compilation flags: -O3 -DNDEBUG -std=c++17 -I/usr/include/jsoncpp -I/usr/local/include
Libraries: 
  postgresql: yes  (batch mode: no)
  mariadb: no
  sqlite3: no
  openssl: yes
  brotli: no
  boost: no
  hiredis: no
  c-ares: yes

また、ビルド後は実際に動作するサンプルが
[ダウンロードディレクトリ]/build/example
の下に出力されます。

ここでは動作確認のため、helloworldを実行してみましょう。

$ cd /build/example
$ sudo ./helloworld 

Ctrl + zを押下してバックグラウンドプロセスに送ります。

$ bg 
$ curl localhost:8848 Hello, World! 

これが表示されれば成功です。
exampleディレクトリには、これ以外にも様々なサンプルプログラムが内包されていますので、実際に使っていく際には参考にされると良いかと思います。

さいごに

今回はDrogonフレームワークをインストールしてみるところまでの手順を書きました。今後機会と気合があれば、ここからさらに RestfulAPI を実装してデータベースを読み書きしていくところまでを書いていきたいと思います。

この記事が気に入ったらサポートをしてみませんか?