必見の記事

5年間は生き続ける考え方が凝縮された良書「AWSで実現するモダンアプリケーション入門」

いろんな定義が乱れ飛ぶモダンアプリケーション界隈に一つの答えを導き出す意欲的な書籍です。
2023.02.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

「最近、モダンモダンすげぇ聞くけどモダンってなに?」

「人の数だけモダンはあるんだよ…」

近年、パブリッククラウドを主軸としたアプリケーション開発文脈の中で「モダンアプリケーション」という言葉をよく聞くようになりました。自分もMAD(Modern Application Development)事業部の部長を去年やっていたりして、モダンという言葉には人一倍敏感だったりします。

そんなおり、そのモダンアプリケーションについて真正面から解説する本を、著者の落水さんから献本いただいたので、僭越ながら書評という形でご紹介させていただきます。

モダンがなにかようやくわかるの…!?

  ( ゚д゚) ガタッ
  /   ヾ
__L| / ̄ ̄ ̄/_
  \/   /

丸わかりやで。

書籍の概要「AWSで実現するモダンアプリケーション入門」

AWSで実現するモダンアプリケーション入門 〜サーバーレス、コンテナ、マイクロサービスで何ができるのか | 落水 恭介, 吉田 慶章 |本 | 通販 | Amazon

アプリケーションの設計・構築・管理を継続的に見直し、変化に迅速な対応をする開発戦略として、注目されている「モダンアプリケーション」。高い俊敏性・柔軟性のある開発を実現し、ビジネスを成長させることができます。しかし、モダンアプリケーション構築に役立つプラクティスは抽象度が高いことから、現場に適用しにくいのではないでしょうか。
そこで本書では、架空の開発現場を題材に、実際のプラクティスを解説。サーバーレスやコンテナによる運用改善・CI/CDパイプライン構築による自動化・アーキテクチャ最適化などを実践する方法を、イメージしながら読み進められるようまとめました。要件にあった技術選択をする重要性も紹介し、アプリケーションや組織の規模にあった考え方ができるようなアクティビティ(問いかけ)も提供しています。
各企業の技術戦略などによって最適解は変わりますが、アプリケーションの課題を改善して生産性を高めたい方にとって参考になる情報が多いでしょう。「なんとなく流行っているから……」「過去に使ったことがあるから……」という理由で技術選定されている現場に違和感を感じる方にもお勧めの1冊です。

著者は落水 恭介(@otty246)さんと、吉田 慶章(@kakakakakku)さん。AWSのコンテナソリューションアーキテクトと、テクニカルトレーナーのお二人による共同著書ということで、AWSを題材に、モダンアプリケーションの全貌を捉えようとする意欲的な書籍です。

目次は、こんな感じ。

  1. モダンアプリケーションとは何か
  2. サンプルアプリケーションの紹介
  3. アプリケーション開発におけるベストプラクティスを適用
  4. データの取得による状況の可視化
  5. サーバーレスやコンテナテクノロジーによる運用改善
  6. CI/CDパイプラインによるデリバリーの自動化
  7. 要件にあったデータベースの選択
  8. モダンアプリケーションパターンの適用によるアーキテクチャの最適化

また、文中の画像については著作者様の了承を得た上で、本書籍から撮影し引用させていただいています。

第1章 モダンアプリケーションとは何か

いやぁ、まじで何なんですかね、モダンアプリケーションって。

巷にはいろんな解釈が溢れていますが、この章では書籍として一本筋を通すために、そのモダンアプリケーションの定義について真正面から記載されています。ここをきちんとおさえておかないと、なんのための技術かわからなくなりますからね。必読です。

1章では、近年のビジネス状況の変遷、モダンアプリケーションがもたらすメリット、モダンアプリケーションのベストプラクティスという内容で、その定義を非常に明快に説明しています。

モダンアプリケーションを導入する際、上司やエグゼクティブや顧客に説明する内容としても使える内容なので、営業の方とかも一度目を通されることを推奨したい重要な章です。

第2章 サンプルアプリケーションの紹介

この書籍の見どころです。

最初、GitHubとかにリポジトリあるのかな?と思ったんですが、そうではありません。架空の企業の電子書籍サービスSample Book Storeの仕様とアーキテクチャと現在の課題が紹介され、それら課題をモダナイゼーションを通して解消していく、という流れになっています。

また、後の章では「アクティビティ」を通じて、読者に「こういう場合はどうする?」と問いかける部分が多数あり、自然と自分の考えを巡らせながらモダンアプリケーションのメリットを知ることができる仕掛けになってます。

アーキテクチャ論はとかく抽象的になりがちですが、一つ具体的なお題が提示されてそれにそって理解をすすめることができるの、よくできているなぁと思います。

第3章 アプリケーション開発におけるベストプラクティスを適用

実際にモダナイズをどこからてをつけてやっていくのか、その羅針盤となるのがこの章です。具体的には、The Twelve-Factor AppBeyond the Twelve-Factor Appが、その具体的な実装指針とともに紹介されています。

前述したSample Book Storeに対して、「設定とコードの分離」「機密情報の扱い」「APIファースト」などを実際のサンプルコードやAWSの具体的なサービス名の紹介を通じて、説明してくれます。

また、こんな感じで各章には関連するコラムがこのような形で挿入されているのも、各章のアナザーサイド的な分野に理解が深まってよござんす。

第4章 データの取得による状況の可視化

一旦アプリケーションの運用を開始した後必須になるのが、そのアプリケーションの運用状況の可視化。システム関連だと、よくディスク使用量やメモリ使用量などが思いつきますが、そもそもアプリケーションがビジネスに貢献しているかどうか?も含めてデータの可視化が重要になる、と記載されています。

  • ビジネスデータ
  • 運用データ
  • システムデータ

それぞれにおいて、必要となりそうなメトリクスやデータとその取得手段が、Sample Book Storeを例にとって様々紹介されているので、改めてどんな観点でデータをとるのか整理するのにすごく役立ちます。

第5章 サーバーレスやコンテナテクノロジーによる運用改善

こんなタイトル見ると、どうしても「Lambda vs コンテナの仁義なき不毛な争い」みたいなのを想像しちゃうんですが、この章ではもっと広く、ビジネスロジックの実装をどういったテクノロジーで実現することで安定した運用ができるか?という観点から、AWSの代表的なサービスが幅広く紹介されています。

  • AWS Lambda
  • Amazon EventBridge
  • AWS Step Functions
  • Amazon SQS (Simple Queue Service)
  • Amazon SNS(Simple Notification Service)
  • Amazon API Gateway
  • Amazon S3
  • Amazon DynamoDB

面白いのは、業務シナリオにそって、具体的なアーキテクチャ要件を例示しているところです。一つはユーザーの書籍購入による領収書PDFのダウンロードというシナリオで、SQS, Lambda, S3がこんな感じで紹介されています。

頻出するアーキテクチャなので「見たことあるぜ!」って人も多いかと思いますが、具体的にこのアーキテクチャを元に下記運用要件を検討することになります。

  • 大規模リクエストへの対応ができるか?
  • エラー処理をどうするか?
  • 冪等性の考慮はどうやるか?
  • モニタリングはどうするか?
  • 拡張性はあるのか?

ビジネスロジックの実装だけであれば考慮事項は少なくなりますが、運用の安定性を考えたときこのあたりの非機能要件もめちゃくちゃ大事です。

どうしても検討が抜けがちな非機能要件も網羅的にこのアーキテクチャをベースに解説されているので、この構成で上記問いかけに即答えられな人は一読をおすすめします。SQSのDLQの活用や可視性タイムアウトをどう使うのか?すごく明快に記載されています。

第6章 CI/CDパイプラインによるデリバリーの自動化

「パイプラインが流れるさまを見るだけで、ご飯3杯はいける」そんな人がいるぐらい、みんな大好きCI/CDの章です。安定したスピーディな開発や本番デプロイには、CI/CDの整備は必須なんですが、ここも具体的な要件を添えて、AWSの代表的な機能や、サードパーティツールによる実装例が紹介されています。

  • パイプライン系
    • AWS Code Pipeline
    • AWS Code Build
    • GitHub Actions
  • IaC(Infrastructure as Code)系
    • AWS CloudFormation
    • AWS SAM

AWSメインの書籍だと、GitHub Actionsが載らない場合も多い(個人の感想)んですが、この章では記述が結構厚くて、最近リリースされた固定のアクセスキーをGitHub側に持たなくて良いOpenID Connectを使ったしくみも、しっかりと記載されていました。

また、パイプラインのさらなる活用では、脆弱性検査ツールのTrivyの利用例も乗っていたり、幅広くパイプラインの活用方法が記載されていて参考になります。

第7章 要件にあったデータベースの選択

AWSからリリースされているデータベース、かなり種類増えましたね。それらデータベースから、アプリケーション要件に合致するデータベースを選択する道筋を「Purpose-built database」として紹介されています。

Purpose-built databases

このPurpose-build database、自分恥ずかしながら全く知りませんでした。AWSのサイトを少し見てみたんですが、非常に詳しく論理的にアプリケーション要件から最適なデータベースを選定するシナリオが網羅されていて、めっちゃ面白いコンテンツになってました。

どうしても「まぁ普通に考えて、これAuroraやろな」と過去の経験踏まえて意思決定しがちですが、このドキュメントを見ることで考慮漏れをなくして自信をもってビジネスに最適なデータベースを選定できると思うので、これ知らなかった人は、一度上記サイトを見てみることを強くオススメします。

第8章 モダンアプリケーションパターンの適用によるアーキテクチャの最適化

最近のアプリケーション実装でよく出てくるアーキテクチャの各パターンが、一挙にすべて把握できるという非常にお得な章です。この章、めっちゃ気合入れて執筆されている気がしますし、自分はここが一番おもしろかった。

この本の冒頭で紹介されたSample CompanyのSample Book Storeがビジネス的にも急成長し、最終的なアーキテクチャがこうなったという前提で、それぞれのアーキテクチャパターンの実装が紹介されています。

「こんだけ全部使うのかよ!」というツッコミを入れたくなったりしますが、一つのサンプル実装を元に、現代的なアーキテクチャパターンを一通り網羅しようとする欲張りな試みになっていますね。ビジネス要件の成長とセットでアーキテクチャが解説されているので、手段先行ではない知識が身につきます。

紹介されているアーキテクチャパターンの例はこんな感じ。この章はページ数も多い。

  • SPA
  • API Gateway
  • メッセージング
  • Saga
  • CQRS
  • イベントソーシング
  • サーキットブレーカー
  • サービスディスカバリ
  • サービスメッシュ
  • フィーチャーフラグ
  • 分散トレーシング

フィーチャーフラグが面白い

どの節も面白いんですが、個人的にはフィーチャーフラグが面白かったです。最近弊社の顧客案件でもこのフィーチャーフラグを使ったリリースが多くあったりして、個人的に注目している概念です。

フィチャーフラグの節では、フィーチャーブランチの運用のツラミからでてくるフィーチャーフラグのメリットの解説、コラムによるトランクベース開発の解説(コラムなのに5ページもある!)、フィーチャーフラグの実装例などが、詳細に記述されています。

あまり馴染みがない人も多いかもですが、このあたりで、AWS AppConfigやAmazon CloudWatch Evidentlyあたりの実装例も紹介されていて参考になります。

このように、モダンアプリケーションの文脈で活用できそうな主要なアーキテクチャのパターンが一挙に紹介されているので、一度すべてを読み込んで頭の中にインデックス作っておけば、何処かの機会で必ず参考にできると思います。

現代的なアプリケーション開発の全体像を俯瞰するため常に傍らにおいておきたい

「変化の激しいモダンアプリケーションの全体を俯瞰する」

ITの領域は、インフラもアプリケーションもそれらを包含するパブリッククラウドも、それぞれ進化が非常に早く、いわゆる「時代を超えた普遍的なベストプラクティス」というものは存在しないし、それを追い求めるのはナンセンスです。ただ、各技術要素の変遷はあれども、ITを使って世の中に生み出すべき価値は、普遍的なものです。

本書では、モダンアプリケーションの価値を「変化に強いアプリケーションを、コスト最適化された状態で、迅速に開発しデプロイする手法」と設定し、その価値を支える様々な技術や方法論を、AWSを中心として一冊の書籍としてまとめています。

書籍という媒体は、Webに比べて、最新情報のアップデートには強くありません。モダンアプリケーションという領域ではなおさらその傾向は強いんですが、あえてこの領域に真正面から書籍という媒体で世に出したのは、ある意味勇気がいる意思決定だったろうなと感じました。書いても1年も立たない間に古い書籍になってしまいそうな分野なので。

ただ、そのあたりの「具体的な技術要素」と「考え方」のバランスが凄く良いんですよね。どちらかといえば、メインは「考え方」なので、率直に「あ〜これは、向こう5年間ぐらい読める、えぇなぁ!よござんすやで!」という気持ちになりました。同じような界隈に生きる自分としては「こんなまとめ方になるのか!」と感心するとともに、少し「悔しい!」という思いもあったりします。

願わくば、この書評をきっかけに書籍を手に取る人が増え、そのノウハウが様々な現場で活用され、それが次のビジネスのイノベーションにつながっていくことになれば良いなと思っております。

最後になりますが、改めて、落水さん、吉田さん、良い本をありがとうございました!

それでは、今日はこのへんで。濱田(@hamako9999)でした。