2021年7月29日(木)、Findyが主催するエンジニア向けイベント「フリーランスエンジニア会議〜 Flutter開発の最新トレンド〜」がオンライン上にて開催されました。
近年、海外を中心にFlutterはエンジニア界隈で広く利用され、常に進化し続けており、その人気はますます高まっています。
クロスプラットフォームがFlutterの最大の特徴で、開発工数を抑えられることや、開発言語であるDartの習得難易度の低さが流行の要因であると考えられます。
しかし、独自でライブラリを作る必要があることや日本語の文献が少なく最新のバグ情報を探すのが困難であることなど、海外と比較するとまだ認知が広がっていない現状があります。 クロスプラットフォームの中では最後発のFlutterですが、上記のような問題を克服することにより一気に日本でもシェアが広がってくると予想されます。
そこで、Flutter大学を運営している藤川様と、Flutter大学のメンバーである若狭様にご登壇頂き、今後のFlutter開発における業務委託案件の推移と傾向を語っていただきました。その内容を、前編と後編の二部構成でお届けします。
前編では、Flutterを実際に使っているお二人に企業のニーズやどんな案件があるか、どのように学習したかなどについて、トピックごとに伺っていきます。
藤川 慶
合同会社KBOY 代表
天才プログラマーKBOYとしてYoutubeチャンネル登録数2.2万人。220人所属のFlutter大学の運営や、Flutterを基軸にプログラミング教育事業などを進めている。
若狹 健太
クミナス株式会社 Flutterエンジニア
Flutter大学 / CodeBoyでの講師活動を行う。 未経験からエンジニア転職を志し、約3ヶ月の学習を経て現職にジョイン。 副業での開発もすべてFlutterのため、1日12時間くらいFlutterに没頭中。
東京大学 情報理工学系研究科 創造情報学専攻卒業後、グリーに入社し、フルスタックエンジニアとして勤務する。 2016年6月にファインディ立上げに伴い取締役CTO就任。 大学院では、稲葉真理研究室に所属。過去10年分の論文に対し論文間の類似度を、自然言語処理やデータマイニングにより内容の解析を定量的・定性的に行うことで算出する論文を執筆。
ーー今回、モデレーターを務めるFindyの佐藤と申します。FindyでCTOをしております。Twitterでは筋肉CTOと検索していただければ出てきます。普段はFlutterというよりウェブを中心にやっています。僕もFlutterのことは「何も分からん」という状態なので、色々とご質問できたらと思っております。本日はどうぞよろしくお願いします。
ーー少しFindyの宣伝をさせてください。Findyは『テクノロジードリブンな事業成長を増やす』というビジョンでやっております。「転職」、「Freelance」、「Teams」の3つのサービスを出しておりまして、特にフリーランスエンジニア向けの案件紹介などもやっております。まだ登録していらっしゃらない方は是非ご登録いただければと思います。
ーーそれでは、登壇者のご紹介です。まずはKBOYさんこと藤川慶さんからよろしくお願いいたします。
藤川(KBOY):
はい、KBOYと申します。Youtuberもやりつつ、Flutterを学ぶFlutter大学というオンラインコミュニティを1年前からやっております。今は230人くらい所属していただいて、結構盛り上がってきております。エンジニア歴としては7年目で、Flutterは2年前から仕事としてやっております。よろしくお願いします。
ーーありがとうございます。今ご紹介いただいたFlutter大学についてなにか一言ありましたら。
藤川(KBOY):
共同開発ができたり質問し放題だったりと、豊富な学習教材みたいな感じです。最近でいうと、毎週水曜日の勉強会が盛り上がっています。勉強会自体は2,200円のコミュニティプランにご加入いただければ参加できます。教材をアプリでちょっと見られる無料プランもありますので、是非、チェックしてみてください。
ーーでは、こんぶさんこと若狭さん、よろしくお願いします。
若狭(こんぶ):
KBOYさんは有名だと思いますが、僕はほとんどの人にとって初めてお会いすると思います。こんぶと申します。経歴ですが、以前はエンジニアではない職業でした。そこからFlutter大学でFlutterを学んで3ヶ月、Flutterエンジニアとして今年の1月に転職しました。そのため、エンジニア歴としては8ヶ月くらいです。Flutter歴はちょうど1年くらいです。今はFlutterでバリバリコードを書いています。今回は熟練のフリーランスの方たちも多いと思いますが、これからエンジニアになりたい方、モバイルアプリ開発もやってみたいという方に対して学習過程などをお話できればと思っています。よろしくお願いします。
ーーよろしくお願いします。未経験からエンジニアへ転職した話を深くお訊きできたらなと思います。なお、本日の参加者には、Flutterを使った開発経験のある方は54%ほど、React Nativeに関してはあまりないという方が多いようでした。それではパネルディスカッションに移りたいと思います。今回のディスカッションテーマは次のとおりです。
ーーそれでは最初のテーマ「Flutterを実際開発してみて正直どう思う?」についてです。zoomの背景に「Flutterいいよ」と書いていただいているこんぶさんからお伺いしたいと思います。
若狭(こんぶ):
僕はUnityでゲーム開発をしたり、Railsチュートリアルでざっくりウェブサービスを作っていたりはしたのですが、エンジニア未経験からFlutterをやりました。Flutterを始めて最初に思ったのが、すごいスピード感でUIを構築していけるということです。触れば触るほどどんどん楽しくなりました。その生産性の高さ、とりあえず並べれば出来上がっていくっていう開発体験が、めちゃくちゃいいなって思っています。
ーー今までの開発だと、コードを書いてデバッガーでチェックするなど工程が多かったと思うのですが、Flutterの開発効率は高いですか?
若狭(こんぶ):
そうですね。開発効率がいい理由として、ホットリロードという機能があることが挙げられます。ホットリロードがあることで画面にすぐUI状況を反映することができます。あと、ウェブと違ってDartで全てのUIに入っていけるので、学習効率がいい。Dartさえわかってしまえば全部作っていけるところも、初心者にとってはいいかもしれないですね。
ーーありがとうございます。このあたりKBOYさんはいかがでしょうか。
藤川(KBOY):
僕はSwiftを使ったiOSエンジニアを4年くらいやってたのですが、やはりSwiftでiOSアプリを作ったりKotlinでAndroidアプリを作るよりも、FlutterでUIを作ったほうが半分くらいの時間で済むイメージです。本当に速いので、開発効率がいいと思いますね。
ーーFlutterだとなぜ速いのでしょうか?
藤川(KBOY):
単純にウィジェットの作り方が簡単だからですね。ばんばん並べる、上からかぶせるなど、本当にキーボードの操作で簡単にできます。例えば、最近まではAndroidもiOSも、画面を操作してボタンを貼り付けるといった開発作業が主流だったのですが、スピードは遅いです。Flutterは速く全体を作っていけるんです。
若狭(こんぶ):
それありますよね。GUIを触らなくていいのは、僕もすごい好きなポイントですね。全部コードで完結してくれるのがFlutterのよさでもあるかな。GUIを逆に触りたい人もいると思うんですけどね。
藤川(KBOY):
Flutterのウィジェットという概念もわかりやすいなと思っています。
若狭(こんぶ):
そうなんですね。ウィジェットはやっぱりわかりやすいんだ。
藤川(KBOY):
HTMLよりも更にわかりやすいと思いますね。一つこれを書いたらこれが表示されるというのが明確というか。
若狭(こんぶ):
直接的みたいな。
藤川(KBOY):
直接置いて、その子供、その子供、その親、みたいな。ウィジェットはシンプルだと僕は思っていますね。
ーー以前、iOSでやってるときの苦労とか、どこで詰まったとかありましたか?
藤川(KBOY):
Swiftにはストーリーボードとビューコントローラーがあります。しっかりとそこを接続したはずが、たまに外れていたりすると落ちてしまうんですね。それにビルドしてから気づくということがあったりしました。そういう心配はFlutterにはないですね。一つの画面にロジックを全部書けるし、画面もウィジェットで書けます。全部一緒のところに書けるので、わかりやすくて変なバグも起きにくいと思っています。
ーー今チャットには、ストーリーボードと比べて部品のコピーがしやすいとか、ストーリーボードよりやりやすいとか、ストーリーボードは逆におまじないが多すぎるなどとメッセージをいただいています。また、ご質問もいただきました。「Dartでレイアウトを作るとネストが深くなりがちになるのですが、その解決方法は?」とのことです。いかがでしょうか。
若狭(こんぶ):
僕は共通コンポーネントで切り出すことをよくやっていますね。コンポーネントで切り出すことによって、一個のウィジェットとして使えるようになります。自分で便利なウィジェットをどんどん作っていけば、ネストが深くならずに済む。ですので、切り出し方を覚えるといいと思います。
ーーそれでは次の質問「企業からのニーズはあるの?」に移ります。実際にどんな業界や会社からの案件依頼があったのかなど、お二人の経験についてお訊きできたらと思うのですが、こんぶさんいかがですか?
若狭(こんぶ):
僕は今、5個、6個くらいの案件をやっていますが、色々なところから来ています。誰でも知っているような大企業から依頼や、個人で会社を経営している社長さんからの相談など本当に幅広いです。大企業さん側の需要は、POCとして素早くモックを作って試したいというものです。小さい企業さんからは、クロスプラットフォームなのでコストがかなり抑えられるのではないか、開発スピードも速いのではないか、などを期待されることが多いですね。
ーーKBOYさんはどんな案件を受けているのでしょうか?
藤川(KBOY):
僕は会社として案件を受けていますが、個人としても技術顧問を2つ、引き受けています。どちらもFlutterの技術顧問で、既存のプロダクトのリプレースをFlutterでしたいけど、Flutterを使えるエンジニアがいないから手伝って欲しいという案件です。SwiftやKotlinで書かれた既存のアプリをFlutterにリプレースしようとしている会社がすごく多い印象です。大きい会社での仕事が増えていますね。2年前からFlutterをやっていましたが、最初はFacebookで流れてきた知り合いの紹介で、スタートアップ系のFlutterの案件をやっていました。最近になって大企業や中規模の会社がリプレースをし始めて、Flutterが広がっているなと感じます。
ーー弊社でも、最近はFlutterエンジニアの紹介案件が増えていたり、Flutterという言葉を聞く機会も増えてきました。イベントに参加されているみなさんの中にも技術顧問をやりたい方もいるのかなと思うのですが、どのようなお仕事内容なのでしょうか?
藤川(KBOY):
一つは先ほど言ったように、既存のアプリのリプレースに関係する仕事ですね。エンジニアはいるけれどFlutterを使えない状態の会社が多いんです。そういうときに少しアドバイスします。もともとエンジニアをやっている人ですので、アドバイスをするとできるようになっていくので。具体的にはコードレビューをしたりします。また、Riverpodと呼ばれるライブラリがあるのですが、それをどう使うかについてすり合わせたりしています。
若狭(こんぶ):
やりたいな(笑)
ーーこんぶさんが開発しているUIやアプリはどういったものでしょうか?
若狭(こんぶ):
ほんとに色々ありますね。1個は最近流行りのDX関連で、施工管理のアプリを作っています。現場で働く職人さん達が現状把握できて、デバイスで設計図や工程表を確認できるものです。先程リプレースの話がありましたが、マッチングサービスのリプレース作業もやっています。あとは、新しいIDの管理方式でDecentralized ID(DID)というものがあるのですが、それの技術検証をしたいという案件もありますね。
その他には僕の出身である筑波大学の伝手で、実験のためのアプリを作ったりもしています。本当に多岐に渡るって感じですね。
ーーそれでは次のテーマ「案件を受けてみていかがですか? 複数人で開発する中でのメリットデメリット」に移ります。また、どの言語にも良し悪しや思想がありますが、これをやるならSwiftやKotlinを使ったほうがいいんじゃないか、いやFlutter一強です、などの話も伺えればと思います。KBOYさん、いかがですか?
藤川(KBOY):
先にデメリットを思いついたのでそちらから。Flutterのデメリットは、新しい技術なので熟練者がほぼいないことです。情報があまりないので、エンジニア歴はあってもFlutterは初めてというチームの場合、苦戦している現場が多い印象です。
具体的には、どのライブラリを使えばいいか、どういうアーキテクチャにしたり状態管理をすればいいかについて、ベストプラクティスの事例記事があまり出ていないんですね。結局みんなが同じ情報源に頼ることになります。例えば、難しい話だとmonoさんの記事にたどり着くことが多いと思います。すると、案件の現場やスキルレベルに合っていないパッケージを使ってしまうこともありますね。Flutterさえも初めてなのに、突然Riverpod、Flutter Hooks、freezedみたいなゴリゴリのmonoさん推しのものを、それがスタンダードだと思いこんで使ってしまう。そして、難しくて嵌まってしまう、みたいな。
そういうことは情報が少ないから起こるので、僕としてはそういう情報をもっと出していくことが必要だと思っています。選択肢の幅を広げたり、もっと簡単にできるやり方を提案したり。これを色んな人ができるといいなと思っています。
メリットについては、これはもう単純に作るのが速いことですね。複数人でやっていても、SwiftやKotlinよりも困るということもないです。
ーー今アーキテクチャのお話がありましたが、KBOYさんのイチオシはありますか?
藤川(KBOY):
僕がFlutter大学の動画などでも扱っている「MVVM(Model/View/ViewModel)」的な組み方が推しですね。画面とViewModelみたいなセットで、全ての画面を作っていきます。状態管理については、できるだけStatelessWidgetだけにします。StatefullWidgetとStatelessWidgetがあって、Statefullだったら状態管理を最初からできるのですが、あえてそれを使わずにStatelessにして、StateはViewModelのほうで管理する。そういう整理の仕方がシンプルでわかりやすいので、僕は好みです。他の言語から来た人にもわかりやすいと思うので、推しています。
ーー今のお話を聞いていて、これをやるんだったらこれ、などがまだ定まりきっていない変革期にあるのかなと思いました。イチオシのアーキテクチャや組み方について、こんぶさんいかがでしょうか。
若狭(こんぶ):
KBOYさんと違うことを喋ってみますね。僕はRiverpodを使って状態管理をしつつ、View側でアニメーションを管理したいなどの単純な状態情報なら、Statefullで持たせてやる方法を使うことが多いです。Riverpodでデータを取ってきて、プラスでStatefullを組み合わせて、必要なところはStatelessとRiverpodでやる。しかし、チーム開発するとなるとMVVMにして、「Viewに対して一つのViewModelがある」くらいの割り切り方をしたほうがコードにも統一性が出たり、可読性が上がったりもします。チームではそういう意思統一をしたほうがいいのかなと思っています。個人でやる分には好き放題でもいいかな。
ーー何年もFlutterをやられている方にも好みの違いがあったり、統一した方法がないのは、面白いところでもあり、難しいところでもあると感じました。
若狭(こんぶ):
僕も、いいと思ったアーキテクチャは変遷していますからね。3ヶ月目、6ヶ月目、9ヶ月目で全く違うことをしている場合もあります。それは他の言語にはない、Flutterの面白いところかもしれませんね。
ーー次のテーマ「どうやって学習したの?」についてお伺いします。特にこんぶさんは最初からFlutterでしたが、どんなふうに学習を進めていきましたか?
若狭(こんぶ):
これはもう、Flutter大学ですね。YouTubeの無料動画がたくさんあるので、それを観て「あ、自分も触ってみよう」と思って。触り始めたらスルスルと、動くものが出来上がっていって、一ヶ月も経たないうちにアプリが完成して。その後は自分の個人開発のアプリをどんどん作っていった、という学習過程でした。
Flutter大学で基礎が固められたら、その後は日本語の情報だけを見てても結構いけます。英語を読めるのであれば、英語のFlutterの記事は豊富なので、全然苦にならず開発を進めることができるかなという印象でしたね。
ーーGoogleが作っていてその周りで始まっているので、やはり英語のドキュメントがすごく充実しているのかなと思います。公式ドキュメントを読めばなんとかなりますか?
若狭(こんぶ):
はい。公式ドキュメントがかなり丁寧で充実してるのも良さかなだと思います。Web上ですぐに動くサンプルがすでに埋め込まれていて、それを自分で少し書き換えて挙動を確認できます。さらに、ちゃんとリファレンス情報が全部載っているという親切さなので、公式だけでも十分だなと思います。公式の中のレシピ集みたいなものもかなり充実しています。
ーーKBOYさんはFlutter大学を始める上で自分でもたくさん学習したりインプットする必要があると思うのですが、どのように進めていきましたか?
藤川(KBOY):
僕は2年前の夏くらいに初めてFlutterの案件にjoinさせてもらったんですけど、その時点では全くFlutterができなくて。できないけどSwiftの経験があるからやらせてくれって言って、入れてもらいました。仕事しながら覚えるしかないっていう状況に自分を追い込んだんです。その仕事はすでに少しだけFlutterでコードが書かれていたので、それを真似するということをやっていました。しかしそれだとわからないので、補足するために当時は英語しかなかったYouTube動画を観たり、Googleの公式のCodelabというレクチャー動画集をざっくり全部観たりしました。なんとなく理解できたら、あとはもう書いて試して、わからなくなったらStack Overflowとかを見て調べて、の繰り返しでした。それでだんだんわかってきたみたいな感じでしたね。
ーートライアンドエラーをしながらだったんですね。
藤川(KBOY):
その経験から、日本語文献がないし、英語の場合でもまとまった情報が少ないので需要があるかなと思い、Flutter大学のYouTube動画を作ってみたという感じですね。
ーーFlutter大学の反響は大きかったですか?
藤川(KBOY):
そうですね、思ったよりFlutterの需要があるというか、やる人が多いんだなと思いました。Flutter大学の反響はすごかったですね。1年前からやっているのですが、最初「Youtubeチャンネル作ります!」って宣言してから、まだ動画がないのに1000人くらい登録者いたので(笑)もちろん僕がすでにYoutuberで1万人くらいのフォロワーがいたということもあるのですが。それにしてもFlutterに期待があるんだなと1年前から感じています。
ーー僕からこんぶさんに質問です。実際にFlutterのエンジニアとして案件を受けていらっしゃいますが、最初は経験がない状態ですよね。学習を進めてから、ポートフォリオを作成する上でどのように企業にアピールしたのか、また、企業さんに見てもらいやすくなるコツなどについてはいかがでしょうか?
若狭(こんぶ):
僕はアプリを作り切る前に、Twitterで募集をかけているところに連絡を取って、zoomで一度面接して採用といった感じでした。何故採用されたのかはわからないのですが……。
僕が採用する側だったら、先程KBOYさんが言っていたような、Providerを一通り使えて自分で1個アプリ作ってます、もうリリースしてます、みたいな人だったら全然来てよと思いますね。なので、とりあえず1個アプリを作り切ることですかね。2個も3個も作らないと採用されないんじゃないか、というのは無い気がします。
ーーそれでは次のテーマ「もし今後アプリ開発案件を受けるとしたらFlutterを使いますか?」です。こんぶさん、KBOYさんはアプリ開発の依頼を受けた場合にFlutterを使いますか? また、こういうところがやっぱりいいとか、こういう案件だったら使うかも、などがあれば是非教えていただければと思います。KBOYさんいかがですか?
藤川(KBOY):
ポジショントークにもなるんですけど、今だったらFlutter案件しかやらないですね。Flutterで出来ないやつは断ります(笑)それぐらい全ての仕事をFlutterに限定しても大丈夫そうな状態にはなってきています。
「これだとFlutterはキツイな」という案件は断ると思いますが、そういう案件はほとんどないかな、と。ARKitや機械学習モデルを入れたり、すごく充実したカメラを作ったり、リッチなことをアプリでしようするとFlutterは弱いみたいな話がありますが、それもかなりカバーされている印象です。サードパーティでみんながライブラリを作ってくれていて、NativeにBridgeコードを書いてくれてる人も多いので、ARKitだってFlutterで結構操作できます。
なので、ちょっとだけFlutterに不足していたり非効率な部分があるとしても、できるだけFlutterに寄せたほうが結局メリットが大きいと相手に説明して、Flutterにしますね。
ーー(笑)
若狭(こんぶ):
そうですね。口説き落とす、みたいな感じですよね。
ーーこんぶさんはいかがですか? 実際にFlutterを今後も使っていきたいなと思いますか?
若狭(こんぶ):
そうですね。僕は今のところFlutterしか書けないので、選択肢がそもそもないんですけど、Flutterで食べていけるうちはFlutterがいいかなと思っています。今のところ、Googleとかの開発を見ていても、上り調子、右肩上がりの盛り上がり方をしているので、伸びていくうちはFlutterを使います。大体もう行くところまで行ったら、他の言語を学び始めればいいかなと思っています。
やっぱりお客さんからしたらアプリが安く早く出来上がればいい、それでクオリティーが担保されていればいいというところがあると思います。その時にFlutterが足かせになるかというと、それをむしろ後押しするようなプラットフォームになっています。なので、あえてAndroidとSwiftのエンジニアを一人ずつ雇うかというと、それはないのかなと思っていますね。新規でやる場合は、ですけどね。
あとは、まず技術的にFlutterで出来る範囲なのかは重要だと思いますね。iOSのCoreML、マシンラーニングのものとか最近すごく充実してきています。自分で呼ぼうとするとMethod Channelなどの知識が必要になるので、そういうゴリゴリの先進的な機能は使えないところが一つFlutterのネガティブな点としてありますね。
ーーとは言え、先程KBOYさんがおっしゃっていたARKitとかが使えるようになってきているとのことだったので、今後どんどん先進的な技術が使えるようになってくるんじゃないかと期待しつつという感じですかね。
若狭(こんぶ):
パッケージの開発者のやる気もすごいので、OS依存の何か新しいものが出てきてもすぐに対応しようみたいな、みんなの頑張りがあるような気がしています。なので、他力本願はいけないですけど、コミュニティの盛り上がりみたいなものへの期待も当然ありますね。
後編ではいただいた質問に回答しています!
→後編は こちら
▼詳しくはこちら