毎日Learning

学んだことを共有します

サーバレスシングルページアプリケーションを献本いただいたので僭越ながら書評を。

こちら、2017/06/23(Fri) 発売予定ですが、発売前に献本をいただきましたー。

ので、早速、速読?で拝読しましたので、さくっと所感を書かせていただきます。

はじめに

けっこー、ソフトウェアにおけるものづくりにおいて、重要な概念や指針が示されていた。 著者のこだわりも強く述べられている様子ではありますが、概ね合意の内容です。

特に挙げると、 Web標準となじみのツールを使う といったところでは、AngularやReactのようなSPA構築に良いツールを活用するのも、有りと捉えながらも、シンプルに物事をはじめるのであれば、使い慣れた標準的なツールをまず、選択しよう、とのことです。

それは、 Yak Shavingを避ける 意味合いでも述べられており、したいことに対して、その手段を深く掘り進めすぎると、気づけば、ヤクの毛刈りを自ら行うという、当初の目的とは大きくかけはなれた事象に囚われてしまう、ということを述べておられます。

これはあるあるだなーと思います。 よく新人?や経験の浅い、効率の良くない方がおちいりがちですが、玄人や熟練のプログラマーでも、妙にこだわったりして、たまに陥りがちな罠だと思います。 周りが見えなくなってとことん手段を追求し、目的へのアプローチを遠回りしてしまう、そういったあたりに注意喚起しつつ、本書を読む心がまえを説いておられます。

また、 TDD(テスト駆動開発) についても紹介されており、実践的な開発手法にも言及されているあたり、この先を読めば実践に役立つ内容が書かれているであろう期待を持ちました。

1章 シンプルにはじめる

サーバレスアプリケーションについて、どういったもので、特徴があり、制限がなにかをきちんと網羅して説明されたあと、シンプルにはじめる方法について、かなり詳しく書かれてます。

ローカルでの動作検証の具体的なツールや手法を手順をまじえて解説しており、Deploy先としてのS3の構築手順もくわしく紹介されています。 この章を読めば、本当にシンプルにはじめられると思います。

キャンバス的な環境を構築して、そのうえでプログラムを実現していくという流れができます。 かなり丁寧で分かりやすい。

2章 ハッシュイベントによるビューのルーティング、 3章 シングルページアプリケーションに必要なもの

2, 3章では、 シングルページアプリケーション の具体的なコーディング方法や、ルーティングの仕組み、データ構造の保持やバインディング、共通関数の作り方、TDDの実践方法、デプロイ手法等々、これまたかなり丁寧に解説があります。

これは、ほんと、読みながら手を動かすと、理解がかなり深まると感じました。

SPAをAngularやReactではじめちゃった方とかで、SPAってどんな作りになってるのか裏側は分かってませんって方がいらっしゃれば、こちらを読みながら実装して、仕組みを理解するのもありかなって思います。

4章 Amazon Cognitoによる Identity as a Service

大体のWebアプリケーションでは、Identity管理が求められると思いますが、AWS Cognitoを使って、管理する具体的な手法をコードを交えて紹介いただいています。

Serverlessでアプリケーションを構築するとき、その専門の知識(今回でいうとIdentity管理や認証・認可の部分)に若干の不安があっても、ある一定水準のセキュアで可用性があり、耐久性のある環境を実現することができます。 その環境を構築した構成を、後に振り返ってみてみると、その知識のベストプラクティスを体験的に学んでいるので、別の環境を構築するときの指針になります。

Serverlessではこうしているのに、こうならないの?できないの?的な。

そのあたりのフィードバックが得られるのがServerlessのメリットの1つだと感じています。

Identity管理とか、気にすることがかなり多い部類で、セキュリティの観点からもしっかり作っておきたい分野ですが、AWS Cognitoを使ってサーバレスアプリケーションを構築すると、自然とこのあたりが身につきます。

5章 DynamoDBにデータを格納する

DynamoDBのドキュメントを読めば理解できることではありますが、キーの構成や、制限事項、結果整合性について述べてあります。

この章までに構築したシングルページアプリケーションから、DynamoDBを直接操作したうえで、どのように実装するかコードを交えて解説があり、さらにデプロイ手段も提供いただいております。

ほんと、かなり、丁寧です。

6章 Lambdaを使って(マイクロ)サービスを作る

シングルページアプリケーションで全てのビジネスロジックを記述することができない場合、AWS Lambdaを活用してサーバでビジネスロジックを実現することができます。

そのあたりに言及するまえに、そもそもLambdaってなんだっけあたりも紹介されています。

SPAからLambdaを直接Invokeするあたりから、Amazon API Gatewayとの組み合わせも紹介されています。

ちなみに、私は、API GatewayとLambdaでビジネスロジックを実装し、RESTful APIを公開し、JSONフォーマットでSPAとやりとりする設計を好んで使っています。

このあたりは、ユースケースを見て判断したり、ビジネスロジックの特製等々見定めて、決めていくことだと思います。

7章 サーバーレスのセキュリティ

サーバレスシングルページアプリケーションで考慮すべきセキュリティについて述べています。

基本的に、使い方をおさえて取り組めば、なんら外から不正に操作されることもないのですが、SPAの構築は細部に気を遣わないと、ビジネスロジックの漏えいや、権限を与えたくない人物によるデータの改竄等が考えられます。

また昔からある、クエリインジェクションやクロスサイトスクリプティング等々の攻撃についても紹介されています。

8章 スケールアップする

この章までで、実践的に小さくシンプルにTDDとデプロイを繰り返しながら進めてきました。

そのうえで、サービスをしばらく運用し、ユーザーが増加し、ユースケースが増え、サーバリソースをスケールアップするときが決ます。

その際に、どの値を監視し、対応に動くのか。 監視対象や分析手法等について、述べられています。

マイクロサービスは、成長を前提としたアーキテクチャとなっており、ある程度、予測は立てますが、変化に柔軟に対応するアジャイルな手法を採用し、取り組む限り、コスト算出は常々課題であります。

そのあたりの計算手法や、デプロイ手法にも言及してまとめられております。

全体所感

全体的にとても丁寧に説明がされており、すぐにはじめることができそうだなという印象です。

サーバレスシングルページアプリケーションの構築手法を学びながら、その周辺にあるそもそものWebアプリケーション技術も学ぶことができます。

スタートアップ的にシステムを構築する第一歩のアーキテクチャとして選択すると、かなりスピード優先で取り組むことができそうです。

また、Microservices Architectureの部分要素にこのあたりを取り入れることを検討されている場合も、この本を読む価値ありだと思います。

ちなみに、 KANJAVA PARTY 2017 !!! - connpass なるコミュニティで、 「Microservicesアーキテクチャに取り組んでみえたこと」 というタイトルでお話させていただくのですが、その中でもサーバレスシングルページアプリケーションの適用どころについて、触れようと思いますので、御興味がありましたら、ぜひー。

以上です。