Findy Engineer Lab

エンジニアの"ちょい先"を考えるメディア

分業化するWeb開発からフルスタックなIoTシステムへ ─ 育てたスキルは次のキャリアへ地続きに広がっていく

こんにちは、はじめまして。株式会社ソラコムでIoTエンジニアとして働いている@moznionと申します。主に、IoTプラットフォームの開発・運用に従事しています。

このたび「わたしの選択」というテーマで寄稿の機会をいただいたので、かつてレイヤ7(アプリケーション層)で動作するソフトウェアを書いて日々を過ごしていた人間が、いかにしてIoTというIT技術の総合格闘技のフィールドへ身を投じるに至ったかをお話ししたいと思います。

IoTエンジニアをやっていると、よく「正直、何をやってるのか分からない」だとか、「特殊業界っぽい」「Web系とはいろいろかけ離れてるんでしょ?」とか、「俺には関係ないね」だとか、さまざまな所感を耳にします。本記事によって、そういった疑問をお持ちの方にもIoT開発の雰囲気が伝わり、IoTエンジニアというロールに少しでも興味を持っていただけたら幸いです。

なお、私は普段、自らのことを「IoTエンジニア」と称することはほぼありませんが、本記事ではさまざまな背景の解説等を簡単にするため、IoTに携わるエンジニアという意味で「IoTエンジニア」を自称しています。本稿におけるWebエンジニアについても、同様の意味合いで使用します。

IoTプラットフォームはテレコム事業+アプリ開発

話題を進めるにあたって、私が開発・運用に従事しているIoTプラットフォームとは何か? について認識合わせをしておきたいと思います。

そもそも「IoTシステム」といえば、たくさんのデバイスがいろいろな場所に点在し、例えば温度や湿度などの環境情報を収集してどこかに送信し、集計して可視化するようなシステムがあります。また誰か(もしくは何か)にデバイスを持たせてGPSで移動をトラッキングするような、見守り用途に使われるシステムもあるでしょう。他にさまざまなシステムが考えられますが、そのほとんどで共通しているのは何らかのデータをどこかへ送信するという仕組みです。

ソラコムでは「世界中のヒトとモノをつなげ共鳴する社会へ」をモットーに、世界中に存在するIoTデバイスから、希望する宛先まで安全にデータを伝送する責務を担っています。そのため、140を超える国と地域(2020年11月現在)で利用できるセルラー通信(2G、3G、LTE)や、SigfoxLoRaWANといったLPWA(Low Power Wide Area-network)の通信方法を用意しています。

IoTプラットフォームSORACOMでは、こうした通信コネクティビティの提供を主軸としつつ、デバイスからデータを送るときに便利なサービスや、デバイスから送られてくるデータを蓄積して可視化するサービス、さらにデバイス管理に役立つサービスなど、さまざまなプラットフォームアプリケーションを提供しています。つまり極めてざっくり説明するなら、IoTシステム向けの便利な機能が充実したMVNO(Mobile Virtual Network Operator)*1という感じです。

すなわちプラットフォームのコアは、携帯電話の電気通信というわりあい骨太なテレコム事業に加えて、ハードウェアにソフトウェアそしてネットワークと多岐にわたる知識を要求されるアプリケーションの開発・運用、というふたつの事業で構成されています。

Web開発から転職した直後の戸惑いとその後の変化

私がIoTエンジニアになる以前の業務内容は、エンドユーザー向け(いわゆるC向け)サーバーサイドアプリケーションの開発や、Web広告配信のシステム開発などが主でした。

レイヤ7であるところのHTTPさえ喋れれば基本的には優雅に暮らしてゆける世界観だったため、転職時点でテレコムに関する知識は、全く持ち合わせていませんでした。正直、ネットワークの知識も、Webサービスの運用に必要な最低限しか備えていない状況だったと思います。

そんなバックグラウンドのため、入社したての時分は、Elasticsearchを用いたエンドユーザー向け検索システムの構築や、HTTP越しに呼び出される認証・認可関連APIの開発といった、“普通”のWebアプリケーションとそれほど変わりのないタスクを主に遂行していました。

その当時は「テレコムだのネットワークだの、正直IoT技術まるで分からんな……」と、勝手に「Web」と「IoT」の間に境界線を引き、それぞれをまったく別モノと捉えた上で「このままWebアプリケーションの文脈を引き継いだ開発を続けていくのもまあ悪くないか」と、自らのコンフォートゾーンに留まることもいったん考えました。

フルスタックなIoTエンジニアへの転身

とはいえ、せっかくテレコムという異業種に飛び込んだこと、そして「とにかく何でもやりてえ……」というメンタリティから、さまざまな分野にわたる開発タスクを積極的に巻き取るように振る舞っていきました。その結果、次第に何でもやる、いわゆるフルスタックなIoTエンジニア(社内ではフルスケールエンジニアと呼ばれています)へと徐々に転身していきました。

以降は、ハードウェアやネットワークにほど近い低レイヤのアプリケーション開発から、片手間ではあるもののWebフロントエンドの開発、そして運用改善に至るまで、多岐にわたる業務を行うようになりました。現在では主に、3GPPITU-Tといった移動通信システムの標準規格を読み解きつつ、そのプロトコルやネットワークシステムを実装・構築する、ゴリゴリに生々しいテレコムタスクを行っています。

まさかテレコムの知識が全くなかった自分が、携帯電話通信のシステムを実装することになるとは、入社当時は想像すらしていませんでしたが、規格は読めば理解できるものも少なくないので、案外なんとかなるものですね。また、こういった「ゴツい」システムは、実際に動いたときの感動もひとしおです。

ちなみに弊チームには、テレコムのコアネットワークを開発するメンバーもいれば、さまざまなプロトコルをサポートしたプロキシコンポーネントを書くメンバー、複雑な課金周りを実装するメンバー、電気回路に精通しているエレキ屋さんメンバー、Webフロントエンドを専業で開発するメンバーなどなど、さまざまなロールのエンジニアがいます。

IoTプラットフォーム開発といっても、こういった多様性があるのも、おもしろポイントのひとつだと思います。そしてメンバーの多くは、単一の職域にとどまることなく、フルスタックなロールとして活動しています。

▲上記の写真はbuilderscon tokyo 2018 スピーカーディナーより

分業化するWeb開発の違和感から「何でもやる」ことを渇望

このような「何でもできる環境で、何でもやりたい」というコミットの仕方は、現職へ転職しようとしていたときから重視していたことでした。

当時、中・大規模なWebアプリケーションの開発は、高度に分業化しているように感じていました。自分の目の前にある分業タスクをやっつけていくと、なぜだか自然とプロジェクトが進んでいく……という不思議な感覚に陥っていました。確かに目の前のタスクにだけ集中していればどんどんアプリケーションができていく。それがチームとして、そしてビジネスとして効率的であることは理解していました。

しかし、全体が分からない中でそういった動き方をするのは、なんだか不気味に感じましたし、なにより職能によってチームがサイロ化すると「できること」が限定されてしまうので、自らのスキルが先細りしてしまうのではないかという危機感がありました。「何でもやる」ことに渇望のようなものを覚えていたのを、はっきりと記憶しています。

自分の裁量でできることが大きいIT技術の総合格闘技

というわけで「次は自らの裁量でいろいろできる場所がいいなあ」と思っていたところ、学生時代にアルバイトしていた会社*2で一緒に働いていた当時のチームリーダーから、突然「今、ソラコムって会社にいるんだけど、興味ない?」というメッセージがやってきて、そこではじめてIoTエンジニアというロールの存在を知りました。

当時はまだ「IoT」がバズワードの感から抜け出せておらず、私も実際「IoT(とそのプラットフォーム)とは何なのか?」というところからのスタートであったわけですが、話を聞いてみると「なるほど、チャレンジングな環境だ」と認識しました。

IoTシステムの構築には、ソフトウェアの知識はもちろん、動作させるデバイスのハードウェア、データ伝送のためのネットワークプロトコル、そして実際の運用……というように広範囲にわたる知識や経験が要求されます。そのような「IT技術の総合格闘技」とも言えるIoTシステムの構築は、まさに何でもできる環境であったし、むしろ何でもやる必要がある(逆にやらないとできない)環境でもあったので、そこに激しく興味・関心を引かれました。

こうした技術的な指向について、正直に言ってしまえば「腕試し」のような感覚が存在していたのは間違いありません。今までの開発で育ててきたスキルが、総合格闘技的な世界でどれくらい通用するのかを試してみたかった、という気持ちは実際にありました。

若さゆえの根拠のない漠然とした自信に賭けて発見したもの

一方、当時の自身のIoT開発に対する知識とそれまでに積んだ経験とを鑑みると、これはある種の博打(しかも勝てる確率は低い)でもありました。

にもかかわらず、この挑戦に肯定的だったのは「30歳になるまでは、とにかくこだわらず何でもやった方がよいのではないか? まあ失敗しても死なないでしょ」という全くもって根拠のない、漠然とした、しかしなぜか「大丈夫っしょ!」という自信だけはある、そんな意味不明の理念を持っていたためです。

その極めて謎のポリシーが、当時26歳だった私の「IoTエンジニアへ転身する」という選択を後押ししたことは、今考えると「エェ……」という感想を禁じえませんが、この選択は結果的によい結果をもたらしたと考えています。なぜなら、IoTエンジニアへ転向してから、Webアプリケーション開発とIoTシステム開発には多くのつながりがあることを、次第に発見していったためです。

とはいえ実際に入社してみたところ、予想の100倍テレコムしてる感じだったので、ドメイン知識の欠如に強い危機感を覚えたのは事実です(そこに尻込みして先述のように「Webエンジニアのまま楽しく過ごしていればいいか」と思ったこともありました)。独学と同僚のサポートによって必要な知識は身に付きつつありますが、まだまだインプットが必要な状況です。

このように継続的に知識を摂り続けることができるのも、楽しみのひとつと言えるかもしれません。

IoTエンジニアとWebエンジニアのつながり

WebエンジニアとIoTエンジニアの間には、一見すると求められる知識や経験に大きなギャップがあり、相互のキャリアパスは断絶されているようにさえ思えます。

しかし、実際にWebアプリケーション開発からIoTエンジニアに転身して分かったことは、Webの技術もIoTの技術も割と地続きであるということです。

Web開発のテクニックは応用が効く

Webアプリケーション開発で培ったテクニックには、IoTプラットフォームの開発にも応用が効くものが多くあります。

面白い例として、クラウド技術の応用が挙げられます。ソラコムのシステムは、ほぼ全てがAWS上に構築されており、このアーキテクチャの設計および実現においては、クラウド技術のベストプラクティスに従うことが鍵となります。こうしたテクニックは、WebアプリケーションであろうとIoTシステムであろうと共通です。

他にも、キャッシュの戦略であったり、ジョブキューを介した非同期処理を堅牢に組むアーキテクチャであったり、応用できる技術・テクニックは枚挙に暇がありません。

また、先日(2020年7月)発表されたソラコムプラットフォームの新サービス「SORACOM Orbit」では、WebAssemblyで書いた任意の関数をテレコムコアネットワーク上で動かすことができます。こういったWebの文脈の新しい技術を取り入れることも、積極的に行っています。

5GコアネットワークはWebエンジニアにフレンドリー

さらに最近は、Web/IoT両者の距離がさらに近くなっているように感じます。その最大の出来事として、5Gの登場が挙げられます。

5Gでは、コアネットワークを構築する数多くのコンポーネントがHTTP/2を介して接続されるように規格が定義されており、そのメッセージパッシングによって、5Gの機能を実現しています。加えて、それらのAPI定義はOpenAPIによって記述されており、その定義に従って実装すると、理屈の上では5Gコアネットワークを実装できることとなります。

私見ですが、こういったWebエンジニアにフレンドリーなツールのサポートは、今後も充実していくのではないかと考えています。なぜなら便利なものは便利だからです。

もちろんIoTプラットフォームやテレコムシステムに固有な知識や技術もありますが、それはある程度の努力を要するものの、後付けで身に付けることができるものであるように思います。

そもそも、テレコムの知識や常識がまったくない状況で入社した自分がコアネットワークの開発に携わるようになったわけであり、仮にIoTエンジニアとWebエンジニアとの間に明確な断絶や、乗り越えがたい壁があった場合、とうの昔に私はWebエンジニアに戻るかあるいは野垂れ死んでいたことが予想されます。Web技術とIoT技術の間に道がつながっていて本当に良かった、そう思う瞬間です。

基礎的な技術・知識を育むとキャリアの幅は広がる?

というわけで何度も述べたように、Web開発とIoT開発との間に大きな断絶は存在しておらず、パスはしっかとつながっています。これは、どのような業種でもそうなのかもしれません。「基礎知識・基礎技術は地続きで、ドメイン知識のみが異なる」というのが、多くの場合の実際な気がしています。

そして、例えば「Webの開発(あるいはIoTの開発)しかやってないから、キャリアの幅や選択肢が狭まっている」と感じてしまうのは、もしかしたら勘違いではないかと最近では思っています。

むしろ基礎的な技術・知識を育むことにより、地続きになっている他のドメインに強く応用を利かせることができると考えると、実のところキャリアの幅は自然と広がりを見せていると言っても過言ではないのではないでしょうか。

また、本記事では「IoTプラットフォームを作る」という部分にフォーカスしましたが、「自前のIoTシステムを構築する」という方向性もあるかと思います。こういった「IoTシステムの構築」についても同様で、ある程度のIoT固有のスキルは必要なものの、例えばWebの技術のような他のフィールドで培った知識・技術を応用することが可能だと思います。

そういった環境でラピッドな開発をサポートするために、それぞれ異なる技術と技術の橋渡しをする役割というのが、我々が構築しているIoTプラットフォームであるソラコムの目指しているところです。

自分のスキルセットは自分が決める

結局のところ、自分のスキルセットや行き先の選択を狭めているのは「それは自分の仕事じゃないよね」というメンタリティに依るものが大きい気がしています。

自分に「できること」と「できるようになる可能性」は身の周りに満ちていて、それを自分から積極的に取っていくことで、切れる手札、つまりは選択肢がどんどんと増えていくのではないかと考えています。そのためには、自分のやっていること、そして自分が作っているものを定期的に見直し、興味を絶やさないようにすることがポイントのように感じます。

まあなんやかや言っていますが、私の場合は「何でもやる(やりたい)」という思いに従っていった結果が今につながっているように思っています。なんかこう「次はこれが来るんや!!」みたいな感じで、打算的に技術をやるのも、まあ違うじゃないですか……。

いや、それが悪いとは思わないんですけど、とにかくやってて楽しい・面白いテクノロジーをどんどんやるのが最高なのではないでしょうか。その点、IoT開発は自分にとって非常にエキサイティングで楽しい領域だったので、結果的に「わたしの選択」は最良に近かったのではないかと思う今日この頃です。

編集:はてな編集部

*1:仮想移動体通信事業者: 基地局などの無線通信設備の一部を通信キャリアから借り受けて、独自の通信サービスを提供する。

*2:地上波デジタル放送向けのL3スイッチのようなものを作っていました。