この記事は、
and factory.inc Advent Calendar 2021の 6日目 の記事です。
昨日は @tsumuchanさんの「【Android】 Jetpack Composeでドラッグ&ドロップの並び替えを実現する 〜ライブラリに頼って〜」でした。
(そして親知らずを2本抜いた直後に書いています
まずはじめに
Flutterは、Googleが2018年に公開したオープンソースのUIソフトウェア開発キットです。主要なプログラミング言語としてDartを使用しておりand factoryでも最近はFlutterでのモバイルアプリ開発を行なっております。Flutterによって、Flutterエンジニアと呼ばれる新しいソフトウェア開発者が登場してきました。今後はFlutterで開発するエンジニアも社内から、または採用によって増えてきたらいいなと思います。DroidKaigi2021でもFlutterに関するセッションが増えてきたり、Flutterをメインに扱う、日本で開催の技術カンファレンスFlutterKaigiがあったりとFlutterコミュニティはさらに大きくなっていきそうです。
Flutterによるクロスプラットフォームのアプリケーションにより、企業はある種の開発コストを削減することができますし、管理するコードベースが1つで済むため、時間も節約できます。(異なるソフトウェア開発チームを雇う必要がなくなるという考えの方もいますが、そんなことはなさそうです。)コミュニティの拡大と合わせてFlutter開発者のニーズは当面の間、高まり続けるでしょう。
Flutterは比較的若い技術でもありますし、エンジニア市場でもこの分野での業務経験を持っている人は現状少ないでしょう。しかし、採用担当者は候補者がFlutterに関する知識を持っているかどうかは知りたいです。またそれ以外のことも。
Flutterエンジニア採用の求人をいくつかみてみました。必須条件と歓迎条件を雑にまとめます。
必須条件
- DartおよびFlutterの使用経験。
- Flutterを用いたiOS、Androidアプリの開発経験
- Swift、Dartを利用してのアプリケーション開発
- Flutterを使用したスマホアプリ開発経験
- iOS、Android の Native 部分の開発
- ソフトウェアエンジニア、開発者として2年以上の経験、またはそれに相当する技術的な経験
- Flutterを使ってのアプリ開発の実務経験が約1年以上もしくは3年以上のSwift・Java・Kotolin・などの言語を使用したスマホアプリ開発経験
- OS、言語、ライブラリ、IDE等のアップデートへの迅速な対応ができる方/テストを書く習慣がある方
歓迎条件
- App StoreまたはPlay StoreでFlutterアプリを構築した経験
- iOSまたはAndroidアプリケーションの開発経験
- ユニットテストやCI/CD環境の構築経験
- モバイルアプリの特性に応じて適切なアーキテクチャを設計できる
- ネイティブアプリ(iOS or Android)の新規開発、リリース経験
だいたいは上記のような条件を挙げているところが多いようです。これをみて思うのはどこの会社さんもモバイルアプリの開発をFlutterから始めた人は現状求めてないような印象を受けましたし、まだWebやDesktopでの採用は数える程しかなさそうでした。WebやDesktop、Serverサイドでの開発は社内的にキャッチアップしているとかなのかもしれませんね。
2021/12/06時点で弊社ではFlutterエンジニアとしてのエンジニア募集はしていませんが、もし採用するとしたらどんなことをきくだろうか。他の会社はどんなことを聞きそうか。私自身エンジニアの採用でも面談もすることが多いので考えてみました。
今回はFlutterエンジニアを採用するにあたって、候補者の業務における知識をどれくらい把握しているのか、どのような経験しているのかをインタビューで確認するための質問を考えてみました。回答になりそうなリンクも合わせて紹介したいと思います。(面接の時の質問は回答の範囲を制限しないような、つまり「はい」「いいえ」などの選択肢がなく、回答者が自由に考えて答える質問も多いので自分だったらどう答えるかなと思いながら読んでみてください)
Flutterの開発経験はありますか?
履歴書に書いてるよ。って思うかもしれませんが、個人的にはオープンクエスチョンなので「ある」とか「ない」とかってことじゃなくて今から面接する人に対して良い印象を与えるのと面談の雰囲気をつくるためのトークテーマですね。
AndroidやiOSネイティブの経験はありますか?
上記でも触れましたが、ネイティブのアプリ開発経験は現時点では必須と考えてもいいのかなと思います。それがないとパッケージやプラグインを導入する際に正しい判断ができなかったり、アプリを各ストアで公開するにあたっての経験や課金処理の実装でどれくらいネイティブエンジニアのサポートが必要かを考慮するための指標になりそうです。
〇〇はFlutterでいうと何に当たりますか?
ネイティブアプリの開発から得たそれぞれのOSの知識をFlutterに置き換えて考えることができることがネイティブアプリ開発者の強みだと思います。ネイティブの知識もある程度回答に必要になってくるので質問する側にとってはいい質問かなと思います。
- https://docs.flutter.dev/get-started/flutter-for/android-devs
- https://docs.flutter.dev/get-started/flutter-for/ios-devs
他のクロスプラットフォーム技術ではなく、Flutterを選んだ理由は何ですか?
「理由はなんですか?」このような技術選定に関する質問は回答者に対する理解を深めることができるとおもいます。単に比較としてメリットデメリットをどう認識しているかと、知的好奇心がどういう方向を向いているのか、どうやって沸き上がってくるのかってことを聞きたいなと思いますし、トレードオフが識別し説明できるということは、複数人での開発の場合も考えて大事になってきます。
複数人でのモバイル開発におけるプラクティスに関してはこちらの本がおすすめです。弊社でも輪読会で取り上げてます。
ここからは経験よりも知識に寄った質問を考えていきましょう。
Widgetとは何ですか?
StatelessWidgetとStatefulWidgetの違いも説明できると良さそう。
BuildContextとはなんですか?
Chapter 24 上級編3:BuildContextとofメソッド
Animationを行うには?
Flutterのメリットとデメリットは?
Flutterのパッケージやプラグインとは何ですか?
Navigatorはどのように動作しますか?
Flutterアプリケーションのライフサイクルについて説明してください
disposeメソッドとは?
API呼び出しはどのように行うのですか?
https://docs.flutter.dev/cookbook/networking/fetch-data
https://pub.dev/packages/dio
https://pub.dev/packages/retrofit
https://pub.dev/packages/freezed
状態管理にはどう取り組みますか?
アーキテクチャデザインパターンは何を採用しますか?
FlutterのCI/CDをどうやって実装しますか?
終わりに
以上面談担当者がインタビューしそうなことをいくつか紹介し、回答になりそうな記事を紹介しましたがもちろん他のトピックも聞かれることはあるでしょうし、技術的な面以外での面接もありますが、業務を遂行できるかどうかのインタビューに関して準備することは大事ですね。今回Flutterエンジニアの募集掲載をながめて思ったこととして現時点ではFlutterのテストに関する知識があってそれについて面談で語れば印象良さそうだな〜と思いました。GoldenTestとか。
最後まで見ていただいてありがとうございました。and factoryでもFlutterでのモバイルアプリ開発にとりくんでいますので、モバイルアプリ開発の経験がある方はぜひ募集掲載を覗いてみてください。