# 20220210_バックエンドにDartを採用しました (例:20210210_LT会を開催しました) ###### tags: `ブログ記事` 太字斜体で書いてある内容を埋めて行ってください. 文章,画像は太字斜体の下の行に入れてください. - [x] 公開(ブログ公開担当者がいじるやつ) <br> ## 表示されない情報 ***書いた人の名前(自己紹介文と同じ名前)*** { mashita0123 } ***記事の簡単な説明(検索した時にタイトルの下に出てくる文章)*** { NUTMEGでDartを広めようとしている真下です。 前々から計画していたのですが技大祭当日などに実行委員が使用するシフト確認アプリのSeeFTのバックエンドをGoからDartに変更しました。 まだまだ完成しているわけではないですが,これを機にNUTMEG内でもDartが浸透できるように頑張りたいです。 } <br> ## 表示される部分 ***サムネイル画像*** { ![](https://i.imgur.com/ijaajbY.jpg) ) } ***カテゴリ*** 以下の中から該当しそうなカテゴリを選択してください ※一つだけ選択してください - [ ] 対外活動 - [x] 活動の様子 - [ ] メンバーの趣味 ***タグ*** 以下の中から該当しそうなカテゴリを選択してください.当てはまる物がない場合は適宜追加してください. 言語 - [ ] HTML - [ ] CSS - [ ] Python - [ ] Go - [ ] Ruby - [ ] JavaScript - [ ] TypeScript - [x] Dart - [ ] Rust - [ ] Kotlin - [ ] Swift フレームワーク・ライブラリ - [ ] Ruby on rails - [ ] Vue.js - [ ] Nuxt.js - [ ] React.js - [ ] Next.js - [ ] Gin - [ ] Flluter ツール - [ ] GitHub - [ ] ターミナル - [ ] WSL - [ ] Ubuntu - [ ] Docker - [ ] Raspberry Pi - [ ] Figma 分野 - [ ] Web-design - [x] バックエンド ***以下に本文を記載してください*** # Dartをバックエンドに採用しました NUTMEGでDartを広めようとしている真下です。 前々から計画していたのですが技大祭当日などに実行委員が使用するシフト確認アプリのSeeFTのバックエンドをGoからDartに変更しました。 まだまだ完成しているわけではないですが,これを機にNUTMEG内でもDartが浸透できるように頑張りたいです。 ## 目次 1. はじめに 2. 前提 3. 選択肢とそれぞれのメリット・デメリット 4. Dartに変更した理由 6. さいごに ## はじめに 今回バックエンドの言語を変更したアプリは技大祭の当日などに実行委員が使用するシフトを確認するアプリ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](https://pub.dev)からパッケージを調べてAPI Referenceってところに飛ぶとかなりしっかりとしたReferenceが存在します。 なので基礎さえしっかりしてればほとんどは何とかなるのかなと思います。 ## さいごに 実際にこれからこの選択がよかったのかは来年実際に稼働してからわかることなのでどっちにしても何がよかったのかを考察します。それもブログに公開できたらいいなあって感じです。 やっぱりDartは言語として非常に使いやすく優秀な言語だと思うのでこれを機にバックエンドが気になった人はバックエンドの勉強もしてほしいのでそのきっかけにしてほしいです。 あとNUTMEGでもNUTMEG外でもDartを使ってほしいです(切実)