見出し画像

2020年、必要だったスキルを振り返る


2020年も残すところあと数日となりました。

今年は出だしから弊社の受注案件がゼロになり、苦しいスタートになりましたが、下のブログをみて連絡をくださった友人、知人のおかげで、2月以降、いろいろな技術に触れて実に多くのものを開発する機会に恵まれました。

今年、自分に足りなかった部分を反省する目的で、

2020年、私が問い合わせ頂いた案件で必要だった技術・スキルを振り返ってみたいと思います。

2021年に必要となる技術・スキルを考える上で少しでも参考になればと思います。

== スマートフォンアプリ開発 ==

Swift

今年はユーザー数1000万人以上というiOSアプリの再構築の依頼をいただきました。私がいままで作ったことのあるアプリで最大ユーザー数だったものが150万〜200万だったので、今までで最大数のユーザー様を相手にするということになり、かなり緊張しました💦。

技術としてのSwiftはSwift 5まで進化したことで言語としても開発プラットフォームとしても成熟してきたなという印象です。仕事を進める上では特に「あ〜、これが足りない〜」、「キャッチアップできてない!」というものは幸いありませんでした。

アップルが2019年6月に発表したUIを記述する新たな仕組みSwift UIですが、iOS13以降でないと動かないことからまだSwift UIを使う案件はありませんでした。

私的には現在のStoryboardを使ったUI設計からいつ頃Swift UIに全面的に変化していくのかを2021年は注視して見ていく予定です。

Kotlin

今年もAndroidアプリ開発の依頼も継続して来ました。

BLE (Bluetooth Low Energy)や、BLE以前のBluetoothを使った案件があり、久しぶりにアプリから外部機器に接続する楽しさを味合うことができました。

また、高度な動画処理をする案件もありましたが、一昔前とちがって、デバイス依存の問題がほとんどでない!、(正確には昔と比べてかなり減った、ということですが)、Android OS 1.5のころからアプリ開発をしている私からしたら動画周りででるデバイス依存の問題がかなり減ってきた印象がありました。

Kotlinはとにかく書きやすく開発ツールであるAndroid Studioはものすごいスピードで進化しており、近年はXCode + SwiftのiOSアプリの開発環境を超えたのではないかと感じるくらいです。

2021年も、Android StudioとAndroid SDKのさらなる進化に期待できそうです。

MVVM

プログラミング言語ではなく、プログラムを設計する上でのアーキテクチャであるMVVM (Model, View, ViewModel)が以前にもまして採用されていると2020年は感じました。クライアントのエンジニアの方と一緒にアプリ開発をさせていただくケースで、MVVMが使われる機会を以前より目にするようになりました。

Reactiveプログラミング

MVVMアーキテクチャを実現するのに相性のよいReactiveプログラミング(Swiftで言えばRxSwitやRxCocoa、Kotlinでは、RxKotlin)もここ数年で採用されている機会を多く見るようになりました。私も2018年くらいから本格的にReactive ProgrammingとMVVMアーキテクチャを多用するようになりましたが、一度慣れてしまうともとのMVCアーキテクチャのアプリ設計には戻れないほど便利だと感じています。

CLEANアーキテクチャ

MVVMから発展したソフトウェアアーキテクチャの1つです(プログラミング言語ではありません)。
iOSアプリや、Androidアプリ開発の場で、CLEANアーキテクチャを見かけることが多くなってきました。また、”既存のアプリのコードをCLEANアーキテクチャで再設計してほしい”というように驚くべきことにCLEANアーキテクチャ化自体が仕事として依頼されることもありました。

SwiftやKotlinでのアプリ開発が成熟し、徐々にこれらをどうつくるかというところにエンジニアの熱が移って来ているなと感じました。

私個人の感想としては、アーキテクチャは実現方法(How)であり、ビジネスやサービス、ユーザー体験という目的(What)ではないため、アーキテクチャの選択がビジネスの目的より優先されてはいけないと考えていて、
ビジネスの目的を度返ししてまで、美しいアーキテクチャを作ることに企業のお金と時間を使うのは少し違うのではないかなと思っています。

あるプロジェクトで、iOSアプリは厳格なCLEANアーキテクチャにそって開発し、Androidアプリは、それほど厳格にせず、コンパクトなMVVMのアーキテクチャを採用して同時開発を行ったところ、Androidのほうが圧倒的に短い期間で開発を終えたことがありました。

もちろん速い=いいと言うことではないのですが、この例を挙げたのは、
あくまでビジネスのシチュエーションに応じて、速さが重要な時期なのか、あるいは厳格なアーキテクチャで設計して、エンジニアが増えてチームの規模が増えたときも混乱せずに堅実に開発を進めたい時期なのか、ビジネスのシチューションで取るべきアーキテクチャも変わってくるのかなということを深く考えた1年でした。

ARCore

今年、私が受けられなかった案件の1つに、iOS、Androidの案件でGoogleのAR(Augumented Reality)機能を実装するための技術、ARCoreを使ったものの依頼がありました。
開発期間が非常に短かったことが理由でお受けできませんでしたが、私がARCoreであらかじめいろいろと作っていれば対応できたかもしれないと少しの後悔があり、2021年は勉強する時間をとろうと考えています。
ARはなかなかブームというまでの波はきませんが、2021年は少しずつ使用用途が増えていくのかなと思っています。

React Native

iOS、Androidアプリ開発の依頼のなかで、React Nativeを使って、1つのコードで2つのプラットフォーム(iPhoneとAndroid)をサポートしたいという依頼も、昨年に引き続きありました。
React Nativeは私は過去の苦い経験から使わないようにしていますが、世の中のニーズはまだまだ健在のようです。


== フロントエンド ==

Vue.js

私が昨年から積極的に使っている技術ということもあり、今年はVue.jsでフロントエンドを開発する期間、時間が多かったです。

情報も増えてきて、私の会社のサービスを作る上でもクライアント企業のサービスを作る上でも何も問題のない申し分のない技術だと感じています。

またVue.jsを学びやすいことも人気の一つとして語られますが、弊社のメンバーに教えていて「教えやすいな」と確かに感じました。

私の会社ではしばらくVue.js一択でフロントエンドは構築しようと思っています。

=====

弊社のサービスikudeもVue.jsを使ってます↓↓↓

=====

React.js

React.jsを使ったフロントエンド開発の問い合わせもありました。

私はVue.jsを勉強し始める前は一時期Reactを勉強して簡単なものを作っていましたが、今はフロントエンド開発はVue.jsに絞って技術を蓄積する時期と考えていたので、残念ですが受けることができませんでした。

まだ普及度ではVue.jsよりもReact.jsのほうが上のようです。

== バックエンド ==

Python / Django

今年、私的には3度目のPython (Django)を扱う案件がありました。
機械学習領域でサービスを開発しているところはDjangoを使っている傾向があるように思います。
日本語ではいい本や情報源がないのですが、英語だとすごくいい本がいっぱいあることも、今年Djangoをおさらいしていての発見でした。
Pythonは依然として海外のほうが人気あります。

PHP / Laravel

PHP Laravelを使って構築したいという依頼も複数ありました。

私は基本的にはバックエンドを2020年はPython/DjangoとNode.jsだけに絞っていたので、お受けできませんでしたが、市場のニーズの高さを感じました。

あくまで私の印象ですが、一般的なWebサービスをつくるのに必要なコンポーネントの組み立てやすさは、Python/DjangoよりもPHP Laravelのほうが上手かもしれません。

Ruby On Rails

Ruby on Railsを使った開発の問い合わせもいくつかありました。こちらも以前人気が高いプラットフォームのようです。

Go

Goできますか?という問い合わせもスタートアップから1件ありました。

Node.js

今までは、Google Homeアプリを作るためや、Firebase Functionsを書くために使っていたNode.jsですが、今年はNode.jsでWebサーバーを構築する案件があり、いままで一番Node.jsにどっぷり浸かった一年でした。
Node.jsのいいところはとにかく”始めやすい”というところで、最初に覚えることはほとんどなくプログラムを書き始められることがいいところなので私好みですが、一年を通した問い合わせ件数では、LaravelやRuby on Railsのほうが多かったので、LaravelやRuby on Railsのほうが市場にニーズがあるように感じました。



フロントエンドほどには新しいフレームワークが次々に台頭して来ることがないバックエンドですが、古くからのものが進化し使われ続けていく傾向があるため、現在のバックエンド開発の選択肢は非常に多く、エンジニアとしてはどれを使っていくか非常に悩ましい状態だと思いました。

== インフラストラクチャ ==

今年はサービス全体をトータルで見る仕事が多かったことから、インフラの設計に関わる機会が2019年に続き多かったです。

AWS (Amazon Web Service)

昨年に引き続き、AWSで環境を構築するケースが複数ありました。RDS、EC2に加え、DockerコンテナをECSで起動することもしました。

機械学習の学習アルゴリズムを走らせるために必要なときだけコンテナを起動できるFargageという起動モデルも今年始めて使う機会がありました。ハイスペックなEC2インスタンスを立ち上げっぱなしにしておくとお金がかかるので、必要なときだけハイスペックマシンでの計算が実行できるこのFargateは非常に便利でした。

GCP (Google Cloud Platform)

GCPをフルにつかう案件はなかったですが、AppEngineやFirebaseを使う機会はありました。

私のところに来る案件だけかもしれませんが、まだまだAWSを希望する方が多いという印象でした。

Docker

昨年に続いて、Dockerは複数使う機会がありました。もはや不可欠と言ってもいいくらい重要な技術となっていると感じます。

DevOps

今年はDevOpsのスキルの必要性を感じた年でした。インフラの構築の過程で、同じ作業を何度も再現したいケースが多くありました。いろいろな制約があって今年はDocker以外はAnsibleに少し触る程度でしたが、TeraFormやCloudFormationを使って、「インフラをコードで書く」、ということを2021年はチャレンジしたいと思っています。

まとめ

以上、あくまで私個人の定点観測でしたが、

2020年、どういう技術・スキルが必要だったのか、をまとめてみました!

全体的に感じたのは、

昔からあるWeb、されど、技術の価値は変わらず、
インフラの技術はどんどん進化する、
バックエンドのフレームワークもどれも元気
iOS、Androidアプリ開発は成熟してきたが、アプリのサイズが大きくなる傾向があり、アーキテクチャの重要性が増している(あるいはアーキテクチャがエンジニアの差を表現するポイントになっている)

ということで、エンジニアにとっては、2021年も引き続き楽しくも悩ましい日々が続きそうです!

ご清覧ありがとうございました!!!


私、及び弊社Goldrush Computingへの開発の依頼はこちらから↓↓↓

mizutori@goldrushcomputing.com


この記事が気に入ったらサポートをしてみませんか?