【iOS出身エンジニア集合】フルDart体制ってどうですか?座談会

2022/3/14

10Xが開発・運営する「Stailer」は、1人のエンジニアがクライアント・サーバー等領域を横断して機能を開発しやすい環境をつくるため、フルDart体制をとっています。
本記事では、技術選定をしたCTO石川を含め、iOSエンジニアのキャリアから現在Flutter、Dartを使って開発を行っている堀見と三宅にこれまでの経験や実際の業務範囲、これからのキャリアについて聞いてみました。

インタビューした人

石川 洋資 (@_ishkawa) Co-Founder, 取締役CTO
面白法人カヤック、LINEでの複数の新規事業開発を経て、メルカリ/ソウゾウへ。 メルカリ/ソウゾウではプリンシパルエンジニアを務める。オープンソースプロジェクトへの参加や執筆活動も行っており、2017/2には「Swift実践入門」を出版


三宅 亮 (@ryo_ryoo_ryooo)Software Engineer
フリーランスのアプリエンジニアを経て、Lang-8、Housmartで会社員を経験。 美しい妻と可愛い猫と3人暮らし。朝食にははちみつトーストがかかせない。頭痛持ち。2020年7月入社。


堀見 宗一郎(@holimislime) Software Engineer
株式会社サイバーエージェントでブログサービスの開発に携わり、サーバサイドのリードエンジニアやアプリエンジニアを経験。その後株式会社トレタにて飲食店向けの予約台帳iPadアプリ開発、株式会社bitFlyerにて仮想通貨取引所のサービス開発を経て2020年8月10Xに入社。

ーみなさんのエンジニア遍歴を教えてください。

石川: 新卒からiOSエンジニアを長くやっていました。最初の3年はiOSの開発のみで、その後転職したLINEでは上長に相談してサーバーサイドもやらせてもらい、できることが広がりました。その次のメルカリ・ソウゾウではまたiOS担当に。その後10Xを起業して、さらにいろいろやるようになりました。

仕事ではUIに近いところを開発するのが好きですが、趣味的にサーバーのコードも書いていたので、そちらも書けなくはなかったです。

三宅:iPhoneが流行り出した頃に、当時いた会社でiOSアプリを作ったのがスタートです。iOSアプリエンジニアがまだ世の中にあまりいない時代だったので、フリーランスになってからも色々アプリを作りました。途中「Androidアプリも作れる?」と聞かれて、やったことがないのに「やります」と答えてからどちらも作れるようになりました。

その後は、前職のHousmartでiOSとAndroid両方を担当していたのですがFlutterに変更が決まり、経験。退職後も、フリーランスとしてFlutterの案件のみ受けていました。そんな時に、10XがFlutterを使っているのを知って入社し今に至ります。サーバーサイドは、10Xに入るまでほぼ書いたことがなかったです。

堀見:新卒でサイバーエージェントに入社し、約2年半Javaでサーバーサイドを書いていました。学生の頃からアプリ開発をやりたかったので、勉強したり上司にアプリ開発をしたいと言い続けていたら、最後の方はアメブロのアプリエンジニアをやらせてもらえました。

その後トレタで飲食店向けの予約台帳iPadアプリ開発に関わり、bitFlyerに転職後iOS向けのトレードツール開発などを行っていました。仕事をしている中で改めてクライアントだけでなくサーバサイドにも手を出したいなと考えていたとき、10XのStailerプレスリリースや開発スタイルに魅力を感じて入社を決めました。当時はFlutterは未経験でしたね。

担当領域によって問題解決の幅を狭めたくない

ー10Xは、「Stailer」を開発する際に「タベリー」とは技術スタックを変えフルDart体制を採用しました。改めて経緯を教えてください。

石川:当時いたエンジニアは5名ほどで、どのメンバーもAndroid、iOS、サーバーサイドを開発する体制でした。機能開発時は、まず誰かがAPI、その次にどちらかのクライアント、その後もう一つのクライアント、という順番で開発していましたが手順も多く、次のサービスではiOSとAndroidでクロスプラットフォームにしようと決めて、検証の結果Flutterを採用しました。

また、当時サーバーサイドはGoで書いていて、良いところもあるのですがアプリケーションを書く上ではもう少し言語機能があっていいかなと思い、Go以外も探してみました。
検討していた候補にはTypeScriptやSwiftやKotlinなどがありましたが、当初はその中にDartは入っていませんでした。しかし、モバイルアプリでFlutterを検証する中で、Dartも選択肢に入るのではないかと思い、候補に入れることにしました。

サーバーサイドでDartを採用する上での懸念の1つはライブラリがないことだったのですが、Google Cloudの各種サービスやElasticsearchなどのクライアントライブラリを自分たちで実装してみて、最終的にはなんとかできそうという判断になりDartを採用しました。

導入を後押ししたのは、その時いたメンバーが全員クライアントもサーバーも書いていたことです。担当する領域によって問題解決の幅を狭めたくないという意図もあって、境界をまたぎやすくしたいと考えていました。

ーなぜそういうチームを作りたいと思ったのですか?

石川:サービス開発の中で、クライアントとサーバーそれぞれだけで完結することは少ないからです。何か作る時にクライアントやサーバーだけ閉じて考えるのではなく、システムの広い範囲に考えが及ぶ様にしてほしいなと思っていました。

Flutterはトライアンドエラーが高速にできるので初学者にも良い

ー堀見さんは入社時はFlutter未経験だったそうですが、やってみた感想を教えてください

堀見:前評判で聞いていたとおり、開発効率や開発体験がすごく良いです。
10Xへのトライアル入社中は、Flutterの経験も浅く10Xのコードベースも知らない中なので全く手探りの状態で課題を進めていましたが、トライアンドエラーが高速にできる体験が良かったです。熟練開発者でも恩恵を受けるだろうし、自分みたいな初学者が試しながら作るのにも良いなと思いました。

また、自分がiOSをゼロから始めた時と比べるとFlutterはドキュメントやチュートリアルが充実していて、最初の導入に役立ちました。後は、標準のUIコンポーネントが充実しているので画面をサクッとプロトタイプしたいときに効率がいいなと思いました。

ーネイティブでの実装に戻りたいと思う点はありますか?

堀見:今後もiOSネイティブ開発に関わる機会はあると思いますが、メインは引き続きFlutterでの開発に取り組んでいきたいと思っています。

以前の職場ではiOS SDKをフル活用し、特殊なUIをパフォーマンスチューニングしながら作り込むということをやっていました。一方このようなケースは稀で、Flutterで十分満たせる要件も多いなと感じています。当面はプラットフォーム固有の知見を深めていくよりFlutterの開発スピードを生かしアプリ外にも開発領域を広げていきたいです。

ー石川さんもうなずいてますね。

石川:とても高いパフォーマンスが求められるものや、iOSアプリとしてOSのデザイン原則に厳格に則る場合には引き続きネイティブでの実装も求められますが、多くの企業がビジネスとして必要としていることはもう少しコモディティ化していて、FlutterやReact Nativeでカバーできているのも正直なところ。そんな中、引き続きネイティブでより良いものを作るのもキャリアのアプローチとしてアリだし、クロスプラットフォームとして領域を広げていくのもアリだと思います。

ー三宅さんはFlutter経験者ですが、新しく挑戦したことは何ですか?

三宅:サーバーサイドの開発は、ほとんど未経験でした。ただ、サーバーサイドのアプリケーション側の開発は、クライアントアプリのモデル・ロジックを書くのとほとんど変わらないんです。とくにFlutterとDartを採用している場合、両方Dartで書いていてやっていることが同じなので、何の違和感もなく書けました。
でも、開発環境を作る方法や動いている理由はわからないんですよ(笑)

サーバーサイドが得意な人がベースを作ってくれた状態でアプリケーションの部分を書くだけなので、書くだけならスルッといけます。深い所やインフラまわりになるとわからないので、お願いしたりしています。

やりたいことをサーバーサイドの人に説明しなくていいから速いし気が楽

ーサーバーサイドも書くようになって変わったことはありますか?

三宅:今まではサーバーサイドを書く人が僕とは別にいたので、やりたいことがあってもいちいち依頼しないとだめだったのですが、自分できるようになったら説明する手間もなく気も使わなくていいので楽になりました。 

堀見:やりたい施策を思いついたときに、自分で横断的に見られるので実装から検証までのサイクルが速く出せるのが良いですね。

iOSエンジニアという職域に固定されていると、その範囲でユーザーにインパクトを与えられる仕事は限られます。過去の仕事では、サーバーサイドエンジニアと別チームかつお互い別の案件も担当していて、アプリでやりたいことを伝えてもやれずに施策が小さくまとまってしまう歯がゆい経験がありました。

また、iOSアプリとAndroidアプリを別々に開発していると、iOSを先にリリースして後からAndroidもリリースすることが多いですが、その際にAndroidのOS仕様の考慮漏れからトラブルになることもありました。クロスプラットフォームなら無駄がなくて効率が良いです。

ー開発スピードは早くなりましたか?

石川:状況的に比較が難しいですが、クロスプラットフォームになることで構造的にプロセスが減っているはずなので、コードを2回書く、サーバーサイドの人への調整や事情の説明がない、という分は確実に短くなっていると思います。

ー苦労した点はありますか?

堀見:楽しみながらやりつつも、今までやってきた技術セットと全くかぶっていないんです。自分のサーバーサイドの経験はかなり古い知識なので、満遍なく試しては調べ、を繰り返しています。現在進行系で、学ぶことがとても多いです。

ーどうやってキャッチアップしたのですか?

堀見:自分が新しい技術を始める際に最初にやるのが、シンプルなアプリを1回ゼロベースで作ってみることです。チュートリアルを見るだけじゃなく、通信して画面表示をして、といったよくある機能を作って流れを確認します。

その後は、実際の業務で使う大きなアプリを動かしながら、都度わからないことがあったら調べている感じです。

ー三宅さんは苦労した点はありますか?

三宅:僕は、堀見さんみたいにGCPなどは全然触っていないので、サーバーサイドの人が作ってくれたツールや教えてもらったコマンドの使い方がわからなかったら、都度調べるくらいです。調べてもわからないときには聞いて解決していて、苦労した憶えはないです。みんな便利なものを残してくれていて助かっています。

堀見:便利ツールを用意したりドキュメントを残すのは、それが好きな人がいてなんとか回っているチームも多いですが、10Xのエンジニアはそのモチベーションがみんな高いので、自分もあまり悩んだことはないです。

石川:問題の発見や解決にフォーカスする人が多く、そういう人は何か問題が起きれば解消する仕組みをつくるかドキュメントを残してくれている、という感じですかね。

クライアントとサーバー、すべてを知っている必要はないし、どこまでやるかも人それぞれで良い

ー石川さんは導入時に苦労したことはありますか?

石川:Dartの経験がない中最初の1歩をどうするか悩み、表現したいことができるのか、言語仕様を調べながら必要なものと照らし合わせていきました。
言語のベストプラクティスも誰も知らなかったので、Dartの公式ドキュメントを読みながら調べていきました。

ーフルDartは採用にどういった影響を及ぼしていますか?

石川:採用面では、この言語を書きたくて入社を希望する人は少ないので、Goなどの人気言語と比べると認知の面ではやや不利だと思います。

ただ、実際入社後には大きな苦労はないです。これまでクライアントとサーバーというくくりで話をしてきましたが、実際にはその中のもっと細かいレイヤーがあって、その人の経験がどこにハマるかは様々です。領域にはグラデーションがあって、クライアントもサーバーもすべてを知っている必要もないです。

【クライアント側】iOS > Flutter > 画面 > 領域の壁 <  API  <  DB < インフラ【サーバー側】みたいなレイヤーがある中で、Dartを両方に取り入れたことで双方の垣根がなくなりました。
クライアントを書いていた人がサーバー側のどこの領域までやるかなどは、人によるし、必要や興味があれば深めていくのもいいと思います。

三宅:僕が今やってるのはネイティブとFlutterのつなぎこみだったり、アプリのネイティブに近いところで、そこからサーバー側のアプリケーションまで手を出しています。

石川:全員が全部やれる必要はなくて、もちろんクライアントだけやりたいという方でも歓迎です。活躍の仕方は色々な形があるので、自分の関心や事業のインパクトから良いものを選んでもらえれば。

ーこれからはどんな組織にしていきたいですか?

石川:今後もセクションの壁が出来ないように維持したいですが、活躍のスタイルも多様化してきているのでそれぞれの能力を適切に活かせるようにしたいです。

あとは、「機会が開かれている状態」を維持したいです。領域をまたいで開発したいと思った時に、自然に動ける組織ですね。大企業ならプロジェクトを移動して身につけていけますが、10Xならもう少し自然に「隣の人がやっている仕事を取って、できることが増えていく」というスタイルがいいですね。

ー堀見さんと三宅さんは今度何をしたいですか?

堀見:企業で求められる技術はどんどん変わり、今後も予想できません。特定の技術にとらわれずに「顧客の課題」に目を向ける時間をもっと増やしたり、設計をうまく書けるようになるなど、普遍的な技術を磨いていきたいです。

三宅:iOSからサーバー側のAPIとかアプリケーション部分まで手を出している状態なので、APIの部分をもっとうまく書けるようになりたいです。その先のインフラまでは、ガッツリじゃなくてももう少しわかるようになれば仕事がしやすいと思うので頑張ります。

ー最後に、10Xを候補に入れてくれている方にメッセージをお願いします

石川:今クライアントをやっていて、サーバー側もやりたいと思っている人には、10Xなら意を決して崖から飛び降りるのではなくて、山を一歩ずつ登っていくようなスライドができる点をおすすめしたいです。

堀見:普通のiOSプログラミングとは違うところはあるものの、OSやFlutterなど関係なく学ぶ観点はいろいろあり、Flutter未経験でも活かせることが多数あります。
細かいコードの書き方は、他のプラットフォームを経験していればチュートリアルを見てサクサクできるので、ぜひ身構えずに挑戦してみてほしいです。

三宅:iOSエンジニアがサーバーサイドまで手を伸ばすのは、大きな会社じゃない限りキャリアチェンジが難しいと思いますが、10Xなら得意なところを活かしながら少しずつサーバーサイドに手を出せるのでおすすめです!

採用情報

10Xのミッション・バリューに共感いただける方からのご応募、お待ちしています!

ソフトウェアエンジニア(MobileApp)
10X採用情報

10X Open Office

「10Xに興味があるかも」「メンバーと話してみたい!」「雰囲気を感じてみたい」という方向けに、定期的にオンラインイベント「10X Open Office」を開催しています。
この記事を読んで興味を持たれた方は、ぜひ気軽にお申し込みください!
10X Open Office 申し込みフォーム

カジュアル面談

10XメンバーMeety一覧

RECRUIT

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

JOIN OUR TEAM

CONTACT

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

CONTACT US