patorashのブログ

方向性はまだない

DartのサーバサイドフレームワークのAqueductの紹介

この記事はDart Advent Calendar 2017の2日目の記事です。

qiita.com

Dartは個人的に数年前からDart本を読んでやってみようと思って頓挫、を繰り返していました。

ただ、2016年にGoogleAdwordsAdsenseDartを使っているという記事を読んだり、Sassの実装をRubyからDartにするという記事を見かけてから、Dartはやっぱりいい言語なんじゃないか?と思うようになりました。今年から本腰を入れてやってみようと思ってこのブログにもいろいろと記事を書いていってます。とはいえ、まだアプリは作っていません…。

Dartのよいところは、

  1. 非同期プログラミングに特化
  2. 基本的にはシンプル
  3. サーバサイドもクライアントサイドもいける

という点だと思います。クライアントサイドはAngularDart以外はほぼ選択の余地がありませんが、Googleチュートリアルからドキュメントもしっかりと作ってくれているので、迷うことは少ないかと思います(英語ですが)。

ところが、サーバサイドとなると、デファクトスタンダードがありません。Dartでサーバサイドの実装というのはあまりイメージしないのかもしれません…。しかし、Dartは非同期処理に優れているし、実行速度も速く、静的型付にも動的型付にも対応しています(正確にはDynamic型ですが)。いいフレームワークがあれば、Dartでサーバサイドが流行るのではないか?と考えるようになりました。

今回はDartのサーバサイドフレームワークのAqueductの紹介をしようと思います。

Aqueductとは?

f:id:patorash:20171202002538p:plain

Aqueductは、英語で「水路」とか「水門」を意味するようです。Aqueductのアイコンは、水門とAの形を合わせたようなデザインになっています。

aqueduct.io

AqueductはDart Summit 2016で取り上げられており、Dart界隈では有名なサーバサイドフレームワークなのだと思います。開発はstable kernelという会社が行っているみたいですが、オープンソースでバージョンも現在2.5と、開発も継続しています。

github.com

また、ドキュメントもあり、チュートリアルがあって、それをやっていくとAqueductの強力さがわかるかと思います(ただし英語です)。

特徴

Aqueductの特徴は、

  1. 最初からマルチスレッドで起動する設定になっている
  2. ルーティング設定がシンプル
  3. ORMをフレームワークが持っている
  4. DBのマイグレーション機能をフレームワークが持っている
  5. OAuth認証機能を最初から実装している
  6. ControllerのActionで受け取るパラメータをアノテーションを使って型のある状態で受け取れる
  7. 最初からテストができる状態になっている(TDDができる)

というところです。ただ、最初はAPIサーバに特化したような状態になっています。もちろん、静的なファイルを返すこともできますが、恐らくはAPIサーバとして使うことがメインとして考えられているのだと思います。

チュートリアルをやってみた

先月の上旬にチュートリアルをやってみました。

patorash.hatenablog.com

チュートリアルの内容は、APIサーバを作るのですが、その過程でデータベースを作ってModelファイルを定義してそこからマイグレーションを行ったり、テストを書いていったりと実用的な内容でした。

私は普段、仕事ではRuby on Railsでサーバサイドの実装を行っているのですが、Railsエンジニアが他のフレームワークに手を出してよく思ってしまう「やっぱりRailsのほうがいいんじゃね?」という気持ちが全く湧きませんでした。パラメータの型チェック、型変換などもAnnotationで行った上でActionで受け取れるので、「これいいじゃん!」と思うことのほうが多かったのです。

ですので、Dartでサーバサイドプログラミングに興味のある方は、是非Aqueductをやってみるといいと思います!私もこれから頑張ってみようと思います。

なぜDartをやっていくと決意したか

実は数年前に、Kotlinをやり始めた頃がありました。今は全くやっていないのですが、当時私はAndroidアプリを作ったりしていて、Kotlinを知ったときにすごく衝撃を受けて勉強会でKotlinのことを話したりしていました。ですが、周りの反応はまぁ大体、「Javaでよい」、「それScalaでできるよ」、「中途半端でどうせ流行らない」というものでした。私はもともとJavaがあんまり得意でもなかったので、周囲からそういう意見をバンバン言われるたびに本当に傷つき、業務でもAndroidアプリ開発はやらないのでKotlinも段々やらなくなってしまいました。

ところがどうでしょう?今はもうKotlinがAndroid開発のメイン言語と言っても過言ではありません。内心「だからKotlinいいよってあんなに言ってたじゃねーか!」と思いつつも、全然書いてないのでもう書けないし、やっぱり人の意見とか適当に受け流してやっていくのがいいなと確信しました。

Dartも、Dart本を一通り読んで、やってみて、「まぁライブラリはそこまで整ってないけれどいい言語だ」と思っています。Dartいいっすよという話をすると大体周囲は「Dartってもうオワコンでしょ?」という反応です。ですが、モバイルアプリフレームワークのFlutterの登場など、むしろDartはこれからじゃないかなと思っています。

DartJavaとLLのいいとこ取りのような言語だと思います。型を意識せずにDynamic型でガンガン実装できるのでプロトタイピングもしやすいと思いますし、後々、型をつけていくということができるので、堅牢なプログラムにすることが可能です。そしてDartVMが速い。

何が何でもDartをやっていくという決意表明で、この記事を終わります。