現代のビジネスを取り巻く環境は目まぐるしいスピードで変化しており、プロダクト開発もその流れに対応すべく、スピード感を求められるようになっています。
その結果、現在のプロダクト開発は、開発からリリース、リリース後の改善・機能追加といった各工程の期間をできる限り短縮するため、「アジャイル開発」や「DevOps」などの開発手法や考え方が主流になってきています。
そんな流れの中、近年注目されているのが「マイクロサービス」です。
今回は、マイクロサービスの概要から、必要な技術や手法、注目の背景、メリット・デメリットまで解説していきます。ぜひ最後までご覧ください。
マイクロサービス(マイクロサービスアーキテクチャ)とは、ソフトウェア開発における考え方やアーキテクチャの1つです。マイクロを単位表記して、「μサービス」と書かれることもあります。
この言葉は、ソフトウェア開発やITコンサルティングを手掛けるThoughtWorks社のJames Lewis氏が、2012年に初めて使用したと言われており、その2年後にJames Lewis氏とMartin Fowler氏が執筆したブログにより、広く認知されるようになったと言われています。
マイクロサービスは、1つのシステムを、複数の小さいサービスに分割して実装を進めていくのが特徴です。そのため、独立した個々のサービスを繋ぐために、APIを使用してリモートで呼び出しをすることで、全体で1つのシステムとして機能するようになります。
では実際、どこまで小さく分割すればいいのでしょうか?
実は、これについて明確な定義はされていません。Sam Newman氏が書いた『マイクロサービスアーキテクチャ』では、「サービスが小さくなればなるほどメリットが大きくなるが、その分構造が複雑になるデメリットもあるため、バランスを考慮した取り組みが必要」とあります。
結論としては、現時点でマイクロサービス化に向けて小さくする単位に正解はありません。そのため、それぞれのサービスが機能する範囲で、できる限り細かく分割していく取り組みをすれば、それは「マイクロサービス」と言えます。
マイクロサービス化を目指すために、「開発の効率化/リリースまでの期間短縮の実現」が重要なポイントになっています。しかし、従来の開発手法では実現が難しい部分もあるため、マイクロサービス化に向けて新しい要素を取り入れていく必要があります。
・APIの活用
1つのシステムを一旦小さなサービスに分割して実装していきますが、そのサービスを繋げる役割としてAPIが必要になります。マイクロサービスでは、特に「REST API」が広く使われています。APIがリモートで呼び出すことで、サービス同士が連携し、1つのシステムとして機能することができるため、APIの活用は不可欠です。
・アジャイルやDevOpsといった開発手法
従来のシステム開発ではウォーターフォール開発が主流でしたが、要件定義、設計、開発、テスト、リリースといった各工程を完了させながら段階的に進めるこの手法は、システムの完成までに時間がかかっていました。そこで、マイクロサービスではアジャイルやDevOpsといった、スピード感のある開発手法を活用することで、マイクロサービスのメリットを最大限に引き出すことができます。
・自動化
アジャイルやDevOpsといった新しい開発手法を用いて、実装をどれだけ効率的に進めることができても、テストやデプロイが手作業のままでは、リリースまでのスピードが落ちてしまう原因となりかねません。そのためテストからリリース、運用も効率的に行うために、CI(継続的インテグレーション)/CD(継続的デリバリー)などインフラ構築の自動化も忘れてはいけません。
▼ 関連記事 ▼
【DevOps】開発部門と運用部門の連携で、スピーディーなシステム開発を実現
冒頭でも述べたように、現代のビジネスを取り巻く環境は目まぐるしいスピードで変化し、それと同時に顧客ニーズも多様化しています。
また、新型コロナウイルスの流行から、外に出なくても仕事や生活ができるように、リモート作業ができる環境整備や、ECサイトでの買い物増加など、急速にデジタル技術の需要が高まりました。
このような、急速に変化する社会の流れとニーズに対応するためには、プロダクトリリースまでの期間をできるだけ短くする必要があります。
従来のシステムは、全パーツが1つのシステム内に組み込まれ、密に連携するモノリシックなシステムでした。モノリシックとは、英単語のMonolithicで、直訳すると「一枚岩のような」「がっしりと固まった」といった意味があります。
このモノリシックなアークテクチャの場合、機能の追加を行っていくごとに、コードベースは大きくなり、複雑化していきます。この複雑化したシステムに修正や機能追加をしようとする際、システム全体に影響が出てしまう可能性もあります。
これにより、気軽なデプロイができなくなったり、機能の追加自体が難しくなる可能性もありました。また、複雑かつ機能の多いシステムはテストにも時間がかかってしまい、バグの発生リスクも高く、不具合発見時の修正にも時間を要します。
このような従来のアーキテクチャで課題となっていた点を解決してくれるのが「マイクロサービス」です。
システムがサービスごとに小さく分割されていることにより、他サービスに影響を与えることなく、不具合修正や機能追加を行うことができます。そうすることで、開発やリリースまでのスピード感の向上が期待できます。
ちなみにマイクロサービスは、個々のサービスが独立しているため、「疎結合な(各要素の依存関係が薄い)システム」と表現されることもあります。
ここまで、マイクロサービスの概要や必要要素、注目の背景について解説してきましたが、ここではそれらを踏まえてマイクロサービスのメリットについてまとめていきます。
・1つのシステム内に、異なる技術の採用が可能
従来のシステム開発はモノリシックな構造のため、機能ごとに開発言語を選ぶことができず、必ず統一する必要がありました。マイクロサービスは、各機能をAPIで呼び合うだけのため、APIの仕様さえ守れていれば、機能ごとに適した開発言語や技術を使って開発することが可能です。
・拡張性・柔軟性が高く、開発期間の短縮も見込める
システムを分割し、それぞれに適した技術で開発を行えるため、機能拡張を行いやすく、新規技術の採用も行いやすいといった柔軟性があります。また、開発にかかる時間も短縮が見込めます。
・たびたびシステム全体を止める必要がなく、負荷の分散も可能
従来のシステムでは、デプロイや不具合対応の際、システム全体の停止が必要でした。マイクロサービスはサービス同士が疎結合のため、一部の機能のみを停止しての作業が可能です。また、一部機能に負荷がかかった場合も、その機能のみスケールすることで対応が可能です。
※ デプロイとは … サーバ上に実行ファイルを反映し、テスト環境や本番環境といった環境でシステムが実際に使える状態にすること。
・コードの再利用が可能
それぞれ小さなサービスに分割して構築するマイクロサービスでは、類似機能については、既存のコードを再利用することが可能です。そのため、1からコードを記述する手間を省くことができ、これも開発期間短縮のポイントになります。
前述したメリットの一方、注意点もあります。この注意点も理解した上で、マイクロサービス化に取り組む必要があります。
・担当者に求められる高いスキル
1つのシステム内に異なる技術を採用できるというメリットの裏返しで、マイクロサービスは規模感次第で、システム全体設計のハードルが上がる可能性があります。また、最初に分割した単位は、後から変更ができないため、設計の担当者には高いスキルが求められます。
・APIの管理
それぞれの機能は使用するAPIに基づいた仕様で設計されています。そのため、APIの変更をする場合は、機能もそれに準じた仕様に変更しないと該当サービスに影響があるため、APIの適切な管理が必要です。
・不具合特定までの時間がかかってしまう可能性がある
小さく分割したサービスをまとめてユーザーに届ける際に、デバックや統合テストを行いますが、分割数が大きく複雑な構造になっている場合、不具合発生時に原因の特定までに時間がかかってしまう可能性があります。
・モノリシックなシステムのマイクロサービス化
なんでもマイクロサービス化すればいいと言う訳ではありません。現行システムがモノリシックな場合、それを分割して、それぞれで機能を実装し、もう一度APIでまとめるには時間がかかり、とても複雑なシステムになってしまう可能性があります。
マイクロサービスの趣旨は、あくまでシステムを分解することで「シンプルな設計を作りやすくする」ということです。そのため、マイクロサービスを本当に取り入れるべきか、システム要件やゴールと照らし合わせて進めていく必要があります。
ここまで、マイクロサービスというアーキテクチャについて解説してきました。
急速に変化するビジネス環境と同じく、プロダクト開発でもスピード感を求められるようなり、注目を集めています。
システムを小さいサービスに分割しそれぞれで実装を進め、APIを使って呼び出すことで1つのシステムにするマイクロサービスは、1つのシステム内を異なる言語で構築するという、従来では不可能だったことを可能とし、開発期間短縮、負荷分散、拡張性など様々なメリットをもたらします。
その一方で注意点も存在し、それを理解した上で、システムにマイクロサービスを取り入れるべきか否か、判断する必要があります。
JIITAKでは、ビジネスフェーズ・開発規模に応じて、柔軟な開発体制を実現し、最新技術を駆使したフロントエンドからバックエンド開発、AWSをはじめとするインフラ構築など、アイデアの創出から運用まで一気通貫で対応いたいます。プロダクト開発でお困りごとのある方は、ぜひ一度JIITAKまでご相談ください!