StailerのフルスタックDart開発 〜AIで言語の壁はどこまで「些細な問題」になったのか〜

2026/3/30


10Xでは2020年5月にリリースした「Stailer」からFlutter/Dartを用いたフルスタック開発(アプリ・Web・バックエンドをDartで統一する体制)を選択してきました。
当時の決定の背景はこちら:「なぜDartなのか」CTO石川が技術選定に込めた想いとその背景

2026年現在プロダクトのフェーズも開発組織の規模も変わってきた中で、他の選択肢を取る検討をはじめています。
フルスタックDartからRustバックエンドへの検討:フルスタックDartからRustバックエンドへ

「実際にDartで開発していてどうなの?」「今後どうなっていくの?」と気になっている方もいるかもしれません。この記事では、入社歴の異なる3名のソフトウェアエンジニアが集まり、Dartでの開発のリアルを語りました。


佐々木 俊亮

@omuomugin

ファシリテーター/ソフトウェアエンジニア

一般的な人が利用するサービスを作りたくて2026年1月に10Xに入社。現在は売場チームでSWEとして機能開発を担当。数年前に仕事用の椅子を捨ててから、ずっとスタンディングで仕事をしている。

喜多 啓介

@kitak

ソフトウェアエンジニア

ECサイト構築サービスやメッセージングアプリの周辺サービスの開発を経て、「人の生活に根ざした課題解決に向き合えるサービスに関わりたい」と思い、2019年4月に10Xに入社。 Stailerの立ち上げから携わり、現在はAI発注チームに所属。SWEとしてバックエンド・Webアプリケーションを中心に開発・運用を担当しつつ、EMも務める。

鈴木 亮太

@4245Ryomt

ソフトウェアエンジニア

プラットフォームを作りたい!という思いで2022年12月に10Xに入社。入社後はSWEとしてお届け領域周りの機能開発を担当。 現在はお取引チームに所属し、お届け領域とお会計領域に必要な機能の新規開発・保守運用を担当している。 最近の楽しんでいるプログラミング言語はMoonBit。

全員Dart未経験で入社。それぞれが歩んだ"フルスタックDart"への道

佐々木:今日は「フルスタックDartでの開発って実際どうなの?」というテーマで話していきます。

佐々木:僕が入社した2026年時点では、Dart 3.0によるSealed Classやパターンマッチングが当たり前の世界。正直、KotlinやGo、Swiftなどの比較的人気のある静的型付け言語を書いてきた感覚と遜色なく、バックエンド開発において「Dartだから不自由」と感じることはほぼありませんでした。お2人はどうでしたか?

喜多:僕は佐々木さんと少し事情が違って。入社が2019年4月なのですが、当時はまだタベリー(10Xが以前提供していた献立作成アプリ)というサービスをやっていて、バックエンドはGo、クライアントはiOSとAndroidで書いていたんです。

佐々木: そこからどういう流れでDartに切り替わったんですか?

喜多: Stailerの開発が始まるタイミングで、CTOの石川さんの判断でモバイルアプリをFlutterに一本化することが決まったんです。サーバーもDartに揃えることで、スイッチコストを下げようという方針になりました。

佐々木:鈴木さんはDartに切り替わった後の2022年入社ですが、どうでしたか?

鈴木:僕自身は、そんなに気にしていなかったかもしれません。というのも、2018年頃にFlutterが話題になった時に、自身で簡単なアプリを作ったことがあったので、Dartの雰囲気自体は知っていて。ただ、本番にデプロイして運用するのは10Xが初めて。大規模なサーバーサイドではどうなのか、という不安はゼロではなかったですね。

Dart経験者はほぼいないことが分かります。

Dart 3.0とエコシステムの進化を振り返る

佐々木:3人とも、状況はそれぞれ異なれど、本格的にDartに触れたのは10Xに入社してからなんですね。実際に書き始めてからの感想も聞きたいです。

喜多:僕が書き始めた当時は、ちょうどNull Safetyがリリースされたか、されていないかくらいのタイミングでした。それがNull Safetyが当たり前になった瞬間に、一気に安心して書けるようになりました。

鈴木:僕が入社した2022年末には、完全にNull Safeな状態でしたね。2018年頃に僕が個人で作ったDartのリポジトリを今見返したら、初手でOptional系のライブラリを入れていたんですよ。もしNull Safetyがなかったら「ひとまずOptionalライブラリを入れましょう」と騒いでいたはずなので(笑)。

佐々木:僕はお二人よりさらに後の2026年入社です。Dart 3.0以降のSealed ClassやSwitchのパターンマッチがある世界しか知らないんですよね。だから、Kotlinを書いていた感覚と書きぶりがほとんど変わらなくて。「フルスタックDartって尖っていると思っていたけど、そんなことないな」と拍子抜けしたくらいです(笑)。それは、Dartという言語自体がこの数年で大きく進化した結果なんですね。


鈴木: そうですね。今のDartの印象は「JavaとKotlinの間」です。JavaやKotlinと同じ感覚で静的型付けの宣言ができて、それを活かしてパターンマッチングができる手に馴染みやすい言語ですね。

喜多: 僕も「ちょうどいい感じ」の言語だと思いますね。他の言語を経験した人であれば、すんなりキャッチアップしてバリューを出せるのではないでしょうか。
また、Dart 2系の頃から、FlutterのWidgetの書き味を良くするための改善が継続的に入ってきました。スプレッドオペレーターはJavaScriptにもあるのですが、コレクションif、コレクションforなんかは、書いていて「JavaScriptでも欲しいな」と感じるくらい、便利でしたね。

佐々木:「思ったより直感的に書ける」というのはわかりました。実際の開発で、Dartの機能やエコシステムはどの程度活きていると感じますか?

鈴木:僕はScalaのバックグラウンドがあるので、「このデータはAかBかCのどれかしかない」という制約を型で表現するのが好きなんですよ。でもDart 3になるまで、そういった制約を言語レベルで定義できるSealed Classがなかったんです。
今はSealed Classが言語機能としてありますが、実はそれ以前からfreezedで同じことができていたので、コード上の表現を諦めることはなかったんですよね。言語に足りない部分があっても、エコシステムが補ってくれている。Dartで開発していて「これができなくて詰んだ」という経験は、僕はないです。

喜多:あと、DartはGoogleが作っているだけあって、Lintやフォーマッターが最初から揃っている。それが地味にありがたくて。他の言語だと「どのツールを使うか」で一悶着あったりしますが、Dartではそこで困ったことがありません。

佐々木:ツールチェーンが整っているのは、新しく入る人のキャッチアップのしやすさにも直結しそうです。特にDart 3以降は「やりたいことは大体できる」という感覚がありますよね。freezedのようなエコシステムの厚みもあって、僕自身も入社してから困ることはほとんどなかったです。

正直に語る、Dartの"ちょっと困る"ところ

佐々木:一方で、Dartの「ここはちょっと……」と思う部分も聞いてみたいです。

鈴木:Dartにはマクロの言語機能がないので、build_runnerというDartのコード自動生成ツールで多くのことをカバーしているんです。freezedもそうですし、Stailerで使っているモックライブラリのコードもbuild_runnerで生成する。その分、ビルドを走らせるたびに大量のdiffが出て、生成されたコードがデバッグ時にノイズになることはありますね。
ただ、Dart自体のコンパイルは結構速いんです。だから、コード生成を大量にやっても、スクリプト言語を動かしているかのようなスピードで終わる。テストの起動も速いし、アプリのビルドも実質XcodeやGradleの待ち時間がほとんど。build_runnerのdiffに「うわっ」となるのは事実ですけど、コンパイルの速さがそれを補っているんです。

佐々木:運用面などで困っていることはないですか

鈴木:運用面の話もしておくと、Javaだとガベージコレクションのメトリクスを本番環境で取れますが、Dartの本番ビルドでは本番運用向けには出力ができません。そのため、運用中に「ここ大丈夫かな」と感じる場面は、正直ゼロではありません。
とはいえ、メモリ使用量を見ればリークには気づけますし、2021年から5年間運用してきてクリティカルな問題にぶつかったことはないですね。

佐々木:それは、Dartのパフォーマンス自体が良いからですか?

喜多:Dartのパフォーマンスが安定している要因として、AOTコンパイルでシングルバイナリにして動かせるようになったのは大きいですね。Stailerでも、最初はJITコンパイルで本番を動かしていたんですが、AOTに切り替えたらメモリ使用量が3分の1くらいまで一気に減ったんです。あのときは「こんなに変わるのか」と驚きました。

佐々木:鈴木さんが話した課題以外で、喜多さんが「Dartのここが困る」と思っていることはありますか?

喜多:それが、あんまり思いつかないんですよね……。特に最近は、AIにコードを書いてもらっているので、単純にコーディングの体験で困る場面は減っているのかもしれません(笑)。

AI活用で言語は"些細な問題"に

佐々木:今まさにAIの話が出ましたが、AI(Claude Code等)の台頭でその懸念も払拭されつつありますよね。

喜多:社外の人にも「Claude CodeはDartでもいいコード書いてくれるの?」ってよく聞かれるのですが、普通に書いてくれますよ。
Dartは癖がない言語なので、依頼したら「自分でもこう書くだろうな」という形で生成してくれることが多いんです。あと、以前は既存コードの構造を把握するだけでかなりの時間がかかっていましたが、今はAIに「ここどうなってる?」と聞けば、あっという間にまとめてくれる。AI活用で、キャッチアップの速度が桁違いに上がりましたね。

佐々木:鈴木さんはAIをどう活用していますか?

鈴木:僕も同じで、自分自身でコードを書くことは少なくなりましたね。その代わりに、デザインドキュメントをすごく入念に書いています。「こう書いてほしい」を一生懸命言語化して、AIに生成させる。Dartは素直で予測しやすい言語なので、意図したことがそのまま素直にコードに反映されやすいんです。だから、AIが生成したコードも自分が書いたものと大きく変わらない。レビューや修正の手間が少ないのは、開発体験としてかなり大きいですね。

佐々木:確かにそうですね。ただ、Dartはバックエンド用のライブラリが他の言語ほど充実していないという声も聞きます。ライブラリが足りない部分まで、AIでカバーできるものなんですか?

鈴木:Dartのバックエンドで、一番気になっていたのがまさにそこだったんです。でもあるとき、社内のSREチームのメンバーがOpenTelemetry(分散システムの観測データを収集する基盤ツール)のDart実装を、AIを使ってゼロから作ったんですね。仕様さえまとまっていれば、AIが他の言語のライブラリを参考にしながらしっかり作ってくれる。それはOpenTelemetryに限った話ではないので、ライブラリ不足への心配はかなり小さくなりました。

佐々木:ライブラリをゼロから作れてしまうのはすごいですね。

鈴木:そうなんです。それ以前だったら、ライブラリ不足はまさに課題だったから「Dart以外の選択肢も真剣に考えた方がいいんじゃないか」って思っていたかもしれません(笑)。でもこの半年でAIのコード生成の精度が飛躍的に上がって、必要があればエコシステムの薄さを自分たちでカバーする挑戦がしやすくなりましたね。今は「Dartでいいじゃん」と思っています。

佐々木:AIがDart開発の課題をここまで変えたとなると、社内ではかなりAI活用が進んでいるんですか?

鈴木:先進的な企業もある中では真ん中くらいかなと。予算もついていて積極的に試している人も社内に多いかなと思います。ただ、組織立って先進的にAI導入ができているわけではないですね。
現状は、「AIを使いましょう」と会社が強制するのではなく、使うかどうかは各エンジニアに委ねられています。個人的にはもっと組織的な推進や強制力がよりあってもいいとは思いますが、個々人の判断で使える良い点もありますね。

言語は道具。大事なのは、目の前の課題に向き合えるかどうか

佐々木:最後に1つ聞いておきたいんですが、10Xではバックエンドの言語としてRustの検証も進めていますよね。「Dartでいいじゃん」という話をしてきた中で、今後の言語へのスタンスはどうなっていくのでしょうか。

鈴木:会社が扱う技術の選択肢を広げるという意味で、Dart以外の言語も選択肢として持っておこう、という判断だと思っています。
Dartに固執しているわけでも、Rustにモチベーション高く移行したいわけでもない。プログラミング言語を「ただ目の前の課題に向き合うために、適材適所で選べるツール」として捉えている人が多い組織ではありますね。
また、現状ではたしかに「フルスタックDart」ですが、もう少しAI活用が進むと「言語は何でもOK」になってくると思います。

佐々木:いい意味で言語に固執しないのは、僕が10Xの好きなところの一つでもあります。今日の話を聞いていて、改めて「フルスタックDart」という言葉の印象ほど、実態は尖っていないなと感じました。言語にかぎらず、今後も10XとしてAI活用や良い技術選定を進めていけたらなと思っています!!

10Xでは一緒に働くメンバーを募集中です!

10Xでは未来をより良くする事業・組織のために、仲間を募集しています。
詳細はこちらをご覧ください。

RECRUIT

10xへの到達率は、まだ0.1%。
あなたの力が、必要です。

JOIN OUR TEAM

CONTACT

10Xへの取材依頼やお問い合わせはこちらから。

CONTACT US