活動の様子

バックエンドにDartを採用しました

バックエンドにDartを採用しました

NUTMEGでDartを広めようとしている真下です。 前々から計画していたのですが技大祭当日などに実行委員が使用するシフト確認アプリのSeeFTのバックエンドをGoからDartに変更しました。 まだまだ完成しているわけではないですが,これを機にNUTMEG内でもDartが浸透できるように頑張りたいです。

目次

はじめに

今回バックエンドの言語を変更したアプリは技大祭の当日などに実行委員が使用するシフトを確認するアプリSeeFTです。 また,現在Dartでは変更途中できちんと動かせるものはまだGoで動いています。

前提

まず,Goをバックエンドの言語として採用していた理由として以下の2つがあげられます。

  1. リリースまでの期間が1か月と急だった
  2. 自分一人で好き勝手に作っていた

このようなところから当時勉強していたGoを使って開発しました。

そういった自分一人で背負っていたことやアーキテクチャなどの理由があってきちんと作り直す話が出ていました。

選択肢とそれぞれのメリット・デメリット

SeeFTではモバイル開発にFlutterを使用していることから選択肢のひとつにDartが,以前のようにGoという2択があがっていました。 それぞれのメリットデメリットを簡単に挙げていきます。

Dartを選ぶメリットとして

  • フロント・モバイルの人がバックエンドも扱える
  • javascriptをメインで書いてる人も書きやすい
  • Interfaceを気にする必要がほかの言語に比べて弱い

Dartを選ぶデメリットとして

  • Goと比べて遅い(重い)
  • コードのネストが深くなりやすい
  • フレームワークの選択肢がほぼない

Goを選ぶメリット

  • コードがシンプル
  • 他のチームのバックエンドの助けを呼びやすい
  • フレームワークが柔軟

Goを選ぶデメリット

  • チーム内でフロント・モバイルの人が扱いにくい
  • デフォルトの関数が微妙
  • 高級なものを作るのが大変

どちらの言語もGoogleが開発した言語という前提があるので今後サポートされないみたいな心配はあまりありませんでした。 また,ほかのプロダクトと連携したいためにgRPCを導入したいという私個人の願望があるのですがどちらも問題なくできそうなのでそこはクリアしていました。

Dartを選んだ理由

フロント・モバイルのエンジニアでもバックエンドを触るのが容易なこと,Dartという言語がそこそこ使いやすいことが決定打となってDartを選びました。

また,背景としてこのプロダクトには現在バックエンドを構築できる人間が私しかいないというのもあってフロントから興味をもってくれた人がバックエンドをはじめやすい環境を作りたかったというのがあります。 プログラミングに慣れている人はあまりないと思いますが初心者には言語の壁がやはり大きいです。 さらに非同期の概念も理解するためにきちんと書いてほしいというのもあります。

また,デメリットで書いたフレームワークの選択肢は少ないというところですが正直現在はひとつで,公式から出ているshelfのみです。 この点は逆に調べると公式でもしっかりフォローしてくれているのでなんとかなるんじゃないかなと思いました。 というかDartはpub.devからパッケージを調べてAPI Referenceってところに飛ぶとかなりしっかりとしたReferenceが存在します。 なので基礎さえしっかりしてればほとんどは何とかなるのかなと思います。

さいごに

実際にこれからこの選択がよかったのかは来年実際に稼働してからわかることなのでどっちにしても何がよかったのかを考察します。それもブログに公開できたらいいなあって感じです。

やっぱりDartは言語として非常に使いやすく優秀な言語だと思うのでこれを機にバックエンドが気になった人はバックエンドの勉強もしてほしいのでそのきっかけにしてほしいです。

あとNUTMEGでもNUTMEG外でもDartを使ってほしいです(切実)