2020年4月28日にオンラインセミナー「マネージャー層向けモダンアプリケーション開発戦略セミナー」を開催いたしました。
今回のセミナーはNCDC主催のセミナーとしては初のオンラインでの実施となったのですが、多くの方にご聴講いただくことができました。
これからも継続してこうした情報発信に取り組んでいきたいと思います。
NCDCでは定期的にセミナーを開催していますので、ご興味のある方はセミナー情報ページをご覧ください。
この記事では「マネージャー層向けモダンアプリケーション開発戦略セミナー」で用いた資料を公開し、そのポイント(+補足説明)をご紹介します。
目次
なぜモダンアプリケーション開発が求められるのか?
過去10年間でテクノロジーは大きく進歩し、ITに関するビジネスの要求も、ユーザーの期待もレベルが高くなってきています。
もはやビジネスにITは欠かせない要素であり、その進化は加速し続けているため、質の高いユーザーエクスペリエンスを提供できるアプリケーションを開発し、かつそれを短時間で市場に投入できるかどうかは、ビジネスにおいて大きな違いを生む要素になるといえます。
デジタル面での迅速なイノベーションを可能にするモダンアプリケーション開発を支えるテクノロジーとして、これからご説明するマイクロサービス、サーバレス、コンテナ、SPA(Single Page Application)などが挙げられます。
マイクロサービス アーキテクチャとは
マイクロサービスは近年の大きなトレンドであり、アジャイルと相性が良く、柔軟性が高くて変化に強いシステムを実現できる設計手法です。
(セミナーではマイクロサービスの概要やメリットも解説しましたが、マイクロサービスについては別の記事で詳細を説明していますので、ここでは省略します。ご興味ある方は下記のリンクをご覧ください。)
マイクロサービスとは? そのメリットを簡単に解説(初心者・非エンジニア向け)
重要なのはクラウドネイティブな設計
私たちはモダンアプリケーション開発を実現するために重要なのはクラウドネイティブな設計だと考えています。
クラウドサービスの発展により、インフラの調達、管理をクラウドベンダーに任せることができるようになりました。
単にサーバをオンプレミスからクラウドに置き換えるようなものではなく、そこからさらに一歩進めて、クラウドを前提としたアプリケーション設計を行うことで、「俊敏性(アジリティ)」、「拡張性(スケーラブル)」を得られます。
このようなクラウドを前提とした構成を「クラウドネイティブ」と呼びます。
クラウドネイティブという言葉はさまざまな意味で使われており正確な定義はないのですが、私たちは次のように説明しています。
NCDCが考えるクラウドネイティブとは
コンテナ、サーバレスなどの技術、クラウドベンダーが提供するマネージドサービスを積極的に利用し、それらを使用する前提の設計、開発を行うこと。
開発/インフラ/運用の境界がなくなりつつある
クラウドネイティブ、サーバレス、コンテナといったキーワードが注目されている背景のひとつとして、DevOps、Infrastructure as Code等の考え方の普及により開発チーム/インフラチーム/運用チームの垣根が低くなったことがあります。
開発チームがアプリだけでなく、ミドルウェアやインフラ構築、リリースなどの運用の一部を担当するようになり、従来の手順書ベースによる手間のかかるインフラ構築や運用を避け、徹底的に自動化する仕組みの構築が求められるようになってきました。
- DevOpsとは
DevOps(デブオプス)とは、開発 (Development) と運用 (Operations) を組み合わせた言葉で、開発と運用をうまく連携するための手法の総称です。
DevOpsについてはこちらの記事にも解説がありますので参考にしてください。
DevOpsとは?|デザインシンキング、アジャイル開発、DevOpsを学ぶ - Infrastructure as Codeとは
Infrastructure as Codeはその名の通り「インフラストラクチャをコードとして表す」ということです。
従来のインフラストラクチャ(OSやミドルウェアといったシステムの基盤)構築は、まず設計書を書き、手動で設計書どおりの作業を行っていましたが、設計書自体をコードで表すことによりコードを実行するだけでインフラ環境が整うようにする方法です。
サーバレス/コンテナとは?
開発と運用をうまく連携し、ビジネスの要求に迅速に対応できる柔軟なシステムを実現するために、前述したマイクロサービスアーキテクチャや、次に説明するサーバレス、コンテナといった技術が役に立ちます。
サーバレスは本当にサーバが無い?
サーバレスと言っても、実際にはサーバは存在しており、物理的なサーバ上にアプリケーションを配置しています。
ただし、そのサーバの構築や保守、負荷対策までクラウドベンダーがすべて面倒を見てくれる(自動的に最適化してくれる)場合、開発者はサーバや実行基盤のようなミドルウェアを意識する必要がなくなります。このような構成がサーバレスと呼ばれています。
「サーバレス」の構成では実際には以下の処理が行われています。
- 処理要求が来る
- サーバ上にアプリケーションが読み込まれる
- 処理の実行、応答
- 応答後、アプリケーション破棄される
(常時起動しているわけではないので基本的には処理の実行回数により課金が行われる)
クラウドとはいえ物理的なサーバは存在しているので、もちろんハードウェア障害も起こり得ます。ただし、あるサーバに障害が起きた場合でも、次に来た処理要求は別の正常なサーバで処理されるため、実質的にサーバの運用や保守を気にする必要がなくなります。
コンテナが実現する可搬性
最近コンテナと呼ばれているものはほとんどがDockerというソフトウェアの仮想化技術がベースとなっています。
Dockerとは、ホストOS上の独立したアプリケーション実行環境で、Docker 内にコンテナと呼ばれるアプリケーションの入った箱のようなものがいくつも動いています。
Dockerではこのアプリケーションの入った箱(コンテナ)を作成したり、他の環境に移したりということが徹底的に自動化できるようになっています。
Dockerが動作する環境間であれば、あるホスト上から別のホスト上へコンテナを持っていっても同じように動作するので、先に述べたDevOpsに役立ちます。
この可搬性があることで、たとえば本番環境で障害が起きたら検証環境にそのまま移して検証するというようなことが簡単にできるようになるのです。
Docker と関連してKubernetes、AWS ECSなどの名前を聞くことも多いと思いますが、これらはDockerコンテナの運用を楽にするためのするためのツールだと考えてください。
ちなみに、コンテナとは、タンカーに乗っているコンテナをイメージしてつけられた名称です。
コンテナに入れた積荷はコンテナごとあるタンカーから別のタンカー移すことが容易であるのと同じように、アプリケーションの管理が容易になる仕組み(別の環境に移しても問題なく実行できる仕組み)だといえます。
フロントエンドのトレンドはSPA(React、Vue.js)
SPA(Single Page Application)はページ遷移を行わないWebアプリケーションの形態です。
従来の「サーバでページを生成して返す」という考え方ではなく、「サーバはデータやビジネスロジックを担当し、ブラウザがその処理を元にページを生成する」という考え方でつくられているのが特徴です。
SPA はJavaScriptフレームワークで実現され、現在はReact、Vue.jsという2つのフレームワークがスタンダード(ほぼ二択)となっています。
昔のJavaScriptはHTML+JavaScriptでWEBサイトに見た目のインタラクションを与えるためのものでしたが、UIの複雑化・肥大化に伴ってフロントエンドのためのさまざまなフレームワークが考案され、そして淘汰されてきた結果、2020年の現在はReactとVue.jsの2大勢力によるフロントエンド開発がトレンドになっています。
こうしたモダンなJavaScriptフレームワークの登場で、UIコンポーネントの共通化、状態の管理(ユーザーの入力したデータを一次保持するなど)、処理のルーティング(ユーザーのアクションをどの処理に渡すか)など、これまでサーバ側でしかできなかったことが、フロントエンドだけでできるようになりました。
ブラウザ側でできる処理はJavaScriptで行い、サーバとの通信量を最低限に抑えることでページ遷移を必要としないSPAという設計が確立されてきたといえます。
モダンアプリケーション開発のはじめ方
最後に「モダンアプリケーション開発のはじめ方」として以下の3点を紹介しました
- エンジニアの育成方法(バックエンド)
- エンジニアの育成方法(フロントエンド)
- どんなシステムから導入していくと良いのか
エンジニアの育成方法
バックエンドの方では、Javaや.NETなどでサーバサイドのアプリケーションを開発した経験のあるエンジニアがいれば、サーバレスやコンテナを扱うエンジニアは比較的容易に育成することができます。
フロントエンドの方では、Webサイトの制作経験しかないエンジニアにはSPAはハードルが高めだと思われます。それよりは何らかの言語でアプリケーションを開発した経験のある人に新たにJavaScriptとSPAのフレームワークを覚えてもらう方が育成の近道かもしれません。
UIをつくる人と、API呼び出しや処理ロジックをつくる人で役割を分けて、最初は経験を活かせる分野から挑戦してもらうという育成方法も考えられます。
どんなプロジェクトからはじめるべきか
サーバレス、コンテナ、SPA。どの技術も、はじめての方が担当する場合は数ヶ月程度のキャッチアップが必要だと思います。
そのため、設計が失敗したと気づいた時にリファクタリング(内部構造の改善)に取り組むことが可能な、規模がそれほど大きくなくて、期間にも余裕のあるプロジェクトから導入をはじめてみることがオススメです。
まとめ
モダンアプリケーション開発を実現できるかどうかは、これからますますビジネスにおいて大きな違いを生んでいくはずです。
まだ取り組んでいない、自社に経験のあるエンジニアがいないという場合は、学びながらでも早めにチャレンジをはじめてみることが大切ではないでしょうか。
NCDCでは、実現したいアーキテクチャに応じてどういう技術を選択すべきなのかをアドバイスしたり、その技術に初めて触れる方向けにリファレンス実装をつくって提供したりと、この分野でさまざまなかたちのコンサルティング、技術支援サービスを提供しています。
これからモダンアプリケーション開発に取り組みはじめる方はぜひ一度ご相談ください。