Flutterはじめます

エンジニアとして仕事を始めて5年が経ち、これまでバックエンドを主戦場としてきました。

そんなぼくがこれからFlutterを始める理由についてお話します。

Flutterとは?

公式サイトでは下記のように紹介されています。

Flutter is Google’s UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a single codebase.

Flutterとは、単一のコードベースからモバイル、ウェブ、デスクトップ向けにネイティブにコンパイルされた美しいアプリケーションを構築するためのGoogleのUIツールキットです。

Flutter – Beautiful native apps in record time

FlutterはiOS・Androidアプリを作成するためだけに利用されることがほとんどですが、2019年末に「Flutter for Web」のベータ版リリースされ、2020年中に正式版のリリースが見込まれます。

同様のツールとしてXamarinReact Nativeがありますが、Flutterは先行するReact Nativeにインスパイア受け、さらなる発展を遂げたツールと言えます。

Flutterでの開発はマルチプラットフォームに対応しているだけでなく、他にも大きな利点があります。

  • 生産性の高い開発が可能
  • アプリ実行中にコードを変更してもホットリロードで数ミリ秒で更新されます。(即時コンパイルされるJIT(Just-In−Time)に対応)
    また、Dart言語で実装されているため、モダンな技術で実装ができます。

  • 表現力が豊かで柔軟なUI
  • Flutterに内蔵されているMaterial Designウィジェットを利用するだけで、柔軟で表現力豊かにカスタマイズが可能です。

  • ネイティブパフォーマンス
  • Flutterはプログラム実行前に事前コンパイルしておくAOT(Ahead-Of-Time)に対応しているため、iOS・Androidのネイティブアプリと変わらない速度を実現しています。

Dartとは?

FlutterはDart言語で書かれています。

Dartは2011年にGoogleによって公開され、しばらくは注目されなかった言語ですが、Google社内ではAdWordsとAdSenseがAngularDartでリプレイスされており、Andoroidの次期OSと噂される「Fuchsia(フカシア」のUI部分でも利用されてきました。

2018年2月に強力な型システムとさらに宣言的UIのための改善を行ったDart2を発表し、そして、2018年12月にFlutterバージョン1が正式リリースされたことで、Dartの評価が見直されています。

これまでの経験と実績

Flutterを始めるに至った理由を説明する前に、ぼく自身の経験と実績といった背景について軽く触れておきます。

学生時代に情報系の学科を専攻していましたが、訳合ってプログラミングとは全く無縁な肉体労働者として4年を過ごしました。

その後、エンジニアとして就職するために上京し、4年間正社員として働き、現在ではフリーランスとして独立しています。

正社員の4年間は主にPHPを使った受託開発をしており、EC-CUBEというパッケージを利用したECサイトのバックエンドの開発がメインでした。

担当する工程は様々で、プログラミングはもちろんですが要件定義や仕様決め、その後の運用にも数多く携わってきました。

自社サービスというものがほとんどなく、受託開発に頼っていた小さい会社なので、お客様との折衝に重点が置かれていたおかげで「クライアントの要求を最大限に引き出すこと」に関してはだいぶ鍛えられました。

その分、技術力という観点では後半は伸び悩み、マネジメントやセールスといった技術から一歩はみ出し、自分の得意としているEC領域に注力してた時期もありました。(今思うと視野が狭かったと思います)

フリーランスになってからは体系的に技術を学び直し、未知の領域にもチャレンジした成果か、視野も広がり、先を見据えた学習プランや仕事の選択について考え始めました。

Flutterを始めるに至った理由

バックエンドの開発を中心に仕事し、5年が経ったいま、さらに5年後を想像してこう思いました。

「このまま同じような仕事を続けても、いまと大して変わらないんじゃないか?」

フリーランスとなった今も正社員の時と変わらず、受託開発を続けています。

というよりもそれしかできないからです。

自分でビジネスモデルを構築せず、誰かの考えたビジネスを実現することでしかお金を稼げないという状況はいつか成長が鈍化し、そして終わりが来ます。

それを打破するためにエンジニア以外の職種にも目を向けているのですが、エンジニアとして働くこと、何かを達成することは楽しいと思っています。

エンジニア業以外のことはサイドプロジェクトとして動かすとして、エンジニア楽しく働くにはどう働くべきか?を考えたときにFlutterに注目しました。

Flutterを知ったのは2019年末でした。(遅い)

その当時、「Flutter for Web」のベータ版が発表された時期で、Webエンジニア界隈でもJSに近い言語(Dart)でWebもアプリも開発できると話題になっていました。

ぼくの当時の感想としては「まだやらなくていいかな」でした。

エンジニアをやってる中で色んなプログラミング言語やFWが発表されは消え、という経緯を見てきたので、今はやるべきことをやろうとスルーしました。

が、最近になって技術熱が再燃し、ちょうど携わっている案件でアプリ開発にFlutterを使っていました。(ちなみにAPIサーバはLaravel)

「Flutterってまだ盛り上がってるのかな?」とふと思い、Googleトレンドで調べてみると右肩上がりで検索ボリュームが増えている。

さらに調べてみると、前述の通りGoogleがかなり力を入れている、AmazonもAmplify Flutterを発表しFlutterをサポートすることになっています。

Amplify Flutter がデベロッパープレビューとして利用可能に

この流れからFlutterがキていると確信し、Flutterへの関心度がさらに高まりました。

決定打となったのが、現在受けている案件で「アプリ側(Flutter)の開発もできないか?」と打診があったことです。

これに二つ返事で返し、アプリ開発も本格的にやることに決めました。

おわりに

どれだけ新しいことにチャレンジするか、そのためにどれだけできることを捨てれるか、その取捨選択の連続が今後の仕事に大きく影響します。

バックエンドだけをやるよりも、アプリ開発もできるエンジニアを目指したほうが、より良いキャリアアップになると考えた上での結論です。

その結論を出して、自分の中で何かが芽生えた気がします。

ではまた。

ABOUTこの記事をかいた人

Yusuke Ito

■バックエンド開発(TypeScript、PHP etc)をメインに活動し、2020年からFlutterによるアプリ開発案件に参画し、多様なニーズに応えれるエンジニアを目指す。 ■エンジニア目線でより良い提案、目的に合わせた仕様の提案が得意です。 ■Flutterに関する技術、個人アプリの開発、キャリア、書評をメインに発信しています。 ■筋トレ、ゴルフ、読書が趣味