Dart Frogを触ってみた
本記事の概要
主にモバイルアプリ開発などに利用されるFlutterですが、今回はその開発言語であるDartでバックエンド開発をおこなっていきます。
DartのバックエンドフレームワークではServerpodがのバージョン1.0が2023年2月にリリースされていますが、今回、2023年8月にバージョン1.0がリリースされたDart Frogを利用してみようと思います。
まずはインストール
まずは公式ホームページを参考にインストールをしていきます。
インストールは簡単で以下のコマンドを実行するだけ。
dart pub global activate dart_frog_cli
インストールできたらPATHを追加していきましょう。
Macを利用しているのでターミナルから以下で追加します。
echo 'export PATH=$PATH:$HOME/.pub-cache/bin' >> ~/.zshrc
インストールできていれば、以下のコマンドでバージョンの確認ができるようになります。
dart_frog --version
dart_frogのバージョンを更新したい場合は dart_frog update
で実行できます。
ただし、Dartのバージョンが古いとバージョン1.0が利用できないので、その場合は flutter upgrade
でdartのバージョンをあげましょう。
dart_frog update
Completion files installed. To enable completion, run the following command in your shell:
source /Users/{username}/.zshrc
✓ Checked for updates (0.4s)
✗ Updating to 1.0.0 (0.7s)
Error updating Dart Frog CLI: The current Dart SDK version is 2.19.1.
Because pub global activate depends on dart_frog_cli >=0.3.7 which requires SDK version >=3.0.0 <4.0.0, version solving failed.
これでインストールは完了です。
プロジェクトを作成、まずは実行
さて、dart_frogがインストールできたので、プロジェクトを作成していきます。
ワークスペースで、以下のコマンドを実行します。
成功していれば、指定した名前のディレクトリが作成されいるはずなので、移動します。
dart_frog create dart_frog_sample_project
cd dart_frog_sample_project
プロジェクトの中身は以下のようなディレクトリツリーになっています。
.
├── README.md
├── analysis_options.yaml
├── pubspec.lock
├── pubspec.yaml
├── routes
│ └── index.dart
└── test
└── routes
└── index_test.dart
この階層でdart_frog dev
で実行します。
成功したら以下のようにメッセージが表示されURLが記載されているので、ブラウザからhttp://localhost:8080
にアクセスしてみます。
dart_frog dev
✓ Running on http://localhost:8080 (0.1s)
The Dart VM service is listening on http://127.0.0.1:8181/h8-jd1VSJk8=/
The Dart DevTools debugger and profiler is available at: http://127.0.0.1:8181/h8-jd1VSJk8=/devtools?uri=ws://127.0.0.1:8181/h8-jd1VSJk8=/ws
[hotreload] Hot reload is enabled.
VMやDevTool用のURLも一緒に表示されており、ブラウザからCPUやメモリ、ログの確認ができるようになっています。この辺りはまた別の機会があれば。
ホットリロードの確認
ホットリロードが効くか実行中のまま、以下のroutes/index.dart
を書き換えてみます。
import 'package:dart_frog/dart_frog.dart';
Response onRequest(RequestContext context) {
- return Response(body: 'Welcome to Dart Frog!');
+ return Response(body: 'Hello Dart Frog!');
}
保存したら、実行中のターミナルで、ホットリロードした旨のメッセージが表示されます。
[hotreload] 21:50:59 - Application reloaded.
ブラウザで再表示してみると、ちゃんと書き換えた内容が表示されていることがわかりますね。
ルーティング情報について
dart_frogはNext.js同様にファイルベースルーティング
を利用しているので、新たに機能を追加したい場合は、routes配下にディレクトリやファイルを作成すれば、それがそのままルーティング情報に追加されていきます。
.
├── README.md
├── analysis_options.yaml
├── pubspec.lock
├── pubspec.yaml
├── routes
+│ ├── api
+│ │ └── sample.dart
│ └── index.dart
└── test
└── routes
└── index_test.dart
import 'package:dart_frog/dart_frog.dart';
Response onRequest(RequestContext context) {
return Response(body: 'this is api/sample');
}
※ちなみにroutes配下のdartファイルにはonRequest
メソッドが存在しないとエラーになります。
[hotreload] 21:50:59 - Application reloaded.
[hotreload] 22:09:31 - Hot-reloading code failed:
.dart_frog/server.dart:35:46: Error: Method not found: 'onRequest'.
..all('/sample', (context) => api_sample.onRequest(context,));
^^^^^^^^^
追加したファイルパスをURLに置き換えてブラウザからhttp://localhost:8080/api/sample
にアクセスしてみます。
今回はVS Codeからフォルダとファイルを作成しましたが、コマンドラインからdart_frog new route api/sample
と実行しても作成可能です。これ何気に便利!!
最後に
Dartでバックエンド開発ができるDart Frogを簡単に触ってみました。
他にもDIやWebsocketも利用できるようなので、また近々触ってみようと思います。
Discussion