サーバーレスの開発方法を聞いてみた
Author : 西村 航
こんにちは、テクニカルトレーナー/マネージャーの西村 (@kuwablo) です。
AWS トレーニングのトレーナーを担当しつつ、お客様の AWS 学習を支援する記事をAWS 公式ブログに書いたり、チームメンバーのマネジメント業務も合わせて行っています。
今回は、以下のサーバーレスの勉強方法に関する記事の続編記事になります。
サーバーレスを勉強する過程で、実際に開発している人がどうしているのか ? コンソールで開発するのは限界があるのでは ? など私自身サーバーレスの開発方法に関して非常に気になっていました。
その疑問を払拭してサーバーレスの開発方法を深堀りするために、サーバーレスの有識者である プロトタイピングスペシャリスト ソリューションアーキテクト の今村さんを招いてインタビュー形式で進めていきます。それではインタビューをお楽しみください。
このシリーズ記事のその他の記事はこちら
- 選択
- サーバーレスの勉強方法を聞いてみた
- サーバーレスの開発方法を聞いてみた
- ネットワークの勉強方法を聞いてみた。
- ストレージの勉強方法を聞いてみた。
- データ分析の勉強方法を聞いてみた。
- マイグレーションの勉強方法を聞いてみた。
サーバーレスに関するメリット、ユースケース、アンチパターン
西村「はじめまして、テクニカルトレーナー/マネージャーの西村です。よろしくお願いします。」
今村「はじめまして、プロトタイピングスペシャリスト ソリューションアーキテクトの今村です。よろしくお願いします。」

(写真左) 西村 航 テクニカルトレーナー/マネージャー
(写真右) 今村 優太 プロトタイピングスペシャリスト ソリューションアーキテクト
西村「今村さんの builders.flashの記事 (AWS を駆使して動画に YouTuber 感をちょい足しするソリューションを作ってみる) を読みましたが非常に面白かったです。編集した動画の効果音も渋くて最高でした。」
今村「ありがとうございます。自分でも楽しんで書くことができた記事でした。」
西村「今村さんの普段の業務内容を教えていただけますか ?」
今村「普段はプロトタイピングスペシャリスト ソリューションアーキテクトとして、お客様の PoC (Proof of Concept) やデモ開発を支援する仕事をしています。お客様がサーバーレスでシステムを作りたい場合に、サーバーレスベースの API などをサンプルを作ったりしています。最近ですとフロントエンドまわりの開発も支援していまして、シングルページアプリケーションなどで GUI と API をセットで開発するケースも多いですね。」
西村「なるほど、サーバーレス三昧ですね。今回はサーバーレスの開発方法に関して質問させていただきたいのですが、具体的な開発過程など開発の How の部分が分かる資料などはありますか ?」
今村「私がスピーカーとして登壇した 2020 年 9 月の AWS Summit Online の以下の 2 つのセッションでは、サーバーレスの開発においての How の部分を記載しています。」
- Architecting and Building - レガシーシステムにサーバーレスを利用して素早くサービスを追加するには【前半】»
- Architecting and Building - レガシーシステムにサーバーレスを利用して素早くサービスを追加するには【後半】»
- 脚注:docker-compose.yaml を作成する手順がありますが、LocalStack の仕様が記事掲載時から現在までに変更となったため、LocalStack のコンテナイメージのバージョンを、最新版の latest ではなく 0.11.4 と指定ください。
- 脚注:docker-compose.yaml を作成する手順がありますが、LocalStack の仕様が記事掲載時から現在までに変更となったため、LocalStack のコンテナイメージのバージョンを、最新版の latest ではなく 0.11.4 と指定ください。
西村「すごくいい資料が出てきましたね ! ステップバイステップで 開発画面が出てくるので、イメージしやすいです。」
今村「ありがとうございます。小さいステップごとに細かく解説しているので、開発の流れを意識しやすいとは思います。」
西村「ちなみに、サーバーレスで開発していて、楽しいこととかありますか ?」
今村「よく言われることだと思いますが、ミドルウェアや OS のレイヤーを意識せずにアプリケーションだけ集中して開発できるのは、サーバーレスでしか得られない体験だと感じています。コンテナベースの開発を行ったりする際にインフラ管理のために Dockerfile を書いて Apache をインストールしたり、もっと下位のレイヤーなら Ansible を使って Amazon EC2 などの足回りや内部のソフトウェアを管理することが必要になってきます。サーバーレスの場合は関数の中身を書いて、追加で AWS CloudFormation を設定するというシンプルな構造になっているので、ビジネスの本質にフォーカスできるのが良い部分だと思います。」
西村「なるほど。他にはありますか ?」
今村「サービスのアップデートが頻繁に行われるので、そのアップデートをウォッチする楽しさはありますね。例えばサーバーレスの代表的なサービスである AWS Lambda (以下、Lambda) などで、サービスのアップデートでアンチパターンが解消されたりします。例えば、 Lambda サービスを VPC に接続する方法、などサービス自身が勝手に成長してくれるのは見ていて楽しいです。」
西村「確かに Lambda のコールドスタートの話 や Amazon RDS Proxy の話 など非常に速いスピードでサービス改善が行われている印象を受けますね。」
今村「はい、これまで出来なかったことが出来るようになる過程を見るのは楽しいですね。」
西村「先程 Lambda の話が出てきましたが、Lambda 関数を触る際に最初はマネジメントコンソールから始めると思います。しかし、マネジメントコンソールだと限界がありませんか ?」
今村「そうですね、ちょっと厳しいかもしれません。マネジメントコンソールでも、標準ライブラリ、Lambda のランタイムにあらかじめ含まれているもの、AWS SDK のようなものであれば、すぐに試すことは出来ます。簡単なスクリプト、例えばスニペットとかであればマネジメントコンソールでも良いかもしれません。しかし、開発が進むにつれて、サードパーティのライブラリや既定で含まれていないものを持ってきたくなると思うので、その時にツラくなりますね。」
西村「なるほど、拡張性を考えるとやはり難しいですね。」
今村「あと、開発者にとってのエディタは料理人にとっての包丁のようなものかなと思っています。開発者の方は使い慣れたエディタでやりたいという思いが強いと思いますので、Visual Studio Code (以下、VS Code) / Vim / Emacs / IntelliJ IDEA など、自分の使い慣れたキーバインドで開発いただくのが良いかと思います。」
西村「なるほど、今村さんの使用しているエディタは何ですか ?」
今村「月並みかもしれませんが、私は VS Code を使用しています。」

今村さんが使用している VS Code の画面です。
この画面でデモしてもらいながら、インタビューさせていただきました。
西村「使用している理由とかありますか ?」
今村「VS Code はライトウェイトな言語、例えば Python / JavaScript などが書きやすいと感じています。Java / .NET はエディタへの依存が強い言語と感じていて、Java であれば Eclipse / IntelliJ IDEA で .NETなら Visual Studio などリッチなエディタで開発される方が多いかなと。あとは VS Code はプラグインも充実していて、インストールしやすいのもメリットですね。」
西村「いまプラグインの話が出ましたが、AWS Toolkit for VS Code (VS Code 用のオープンソースプラグイン。以下、Toolkit。) は便利ですよね。」
今村「そうですね、Lambda 関数の一覧がソートされるので、そこから今作っている Lambda 関数を自分の環境にスッと持ってくることも出来ます。あとは便利な点として、例えば AWS Step Functions を作りたい時にサンプルを Toolkit からスッと出せたりしますね。ローカルでどういうふうなステートの流れなのかを出せたりします。」

AWS Step Functions のサンプルを VS Code で表示した画面です。グラフが非常に見やすい。
西村「非常に視認性が高く、あっという間に表示されましたね。」
今村「ToolKit 以外のプラグインですと、VS Code Remote - Containers は面白いですね。コンテナの中に VS Code から接続して、コンテナの中で開発が出来るようになるので、コンテナの中で開発環境を完結することが出来ます。例えば、複数の案件を抱えていて、案件ごとに Python のバージョンが異なる / 許可するしないの文法のルールが異なるといった場合は、複数案件ごとにコンテナを使い分けることもできたりします。」

VS Code Remote - Containers は環境差異に頭を悩ませる開発者にとっては朗報そう。
西村「それは便利ですね。」
今村「そうですね、ターミナルもコンテナにあるので、意図していないファイル修正のリスクも減ります。開発に必要なライブラリを Dockerfile で定義して入れることも出来ますし、開発環境をコンテナベースで管理すると後が楽だったりしますね。」
西村「なるほど。ちなみに Lambda をローカルで実行できますか ?」
今村「はい、AWS SAM CLI を使ってローカルで実行ができます。Lambda を動かすためのコンテナイメージも公式で提供されているので、Lambda のランタイムの変更があったときもコンテナイメージがちゃんと更新されるので、同等の環境で関数が実行できると思います。VS Code と AWS SAM CLI でブレイクポイントを付けてデバッグする機能など触ってみると面白いです。」
西村「コード管理はどうしたら良いですか ?」
今村「一番多いのが Git 管理で GitHub / AWS CodeCommit などに Push して、CI/CD のパイプラインを作るケースが多いです。たとえば VS Code Remote - Containers の説明で開発環境の定義の話をしましたが、 その定義も一緒に Git のリポジトリに入れておけば、関係者全員が環境差分なく開発環境で作業できる運用メリットにつながる。」
西村「それは標準化が出来て良いですね。あとは Lambda だと、開発するうちに関数の数が増えてきますよね。Git のリポジトリをどう分割すべきか、って難しくないですか ?」
今村「デプロイのライフサイクルに応じてリポジトリを分割する、という案があるかと思います。たとえば更新頻度が週に 1 回なのか、年に 1 回なのか、などデプロイや改善の頻度に応じてリポジトリを切る、などでしょうか。」
西村「なるほど。CI/CD のパイプラインを作りたい時は、どうすればよいでしょうか ?」
今村「AWS CodeStar を使えばすぐに作れるので、マネージドの恩恵を受けられると思います。またマネジメントコンソールの 新しいサーバーレスアプリ作成機能で CI/CD も作れます ので、是非試してみてください。」
西村「ありがとうございます。テストはどうしたら良いですか?」
今村「まず、AWS リソースに依存しない場合と依存する場合を分けて考える必要があると思います。前者の AWS リソースに依存しない場合は、従来どおりのアプリ開発と同じで、ユニットテストが書けます。後者の AWS リソースに依存する場合は、2 つの方法があると思います。1 つは AWS の応答をモックしてくれる LocalStack を使用する方法で、もう 1 つはメソッドをテスト中に上書きしてテストコードの中で擬似的なレスポンスを返す純粋なモッキングを行う方法ですね。モックに関しては使って試して初めてわかること、例えばサービスとしてはサポートしていても一部の機能はサポートしていなかったことなどもあります。ローカルで触れる DynamoDB Local を使うなど、実際にテストしてみることが非常に重要かと思います。」
西村「なるほど、テストの指針になる資料などはありますか?」
今村「そうですね。 サーバーレスのテストを検討する際は、Serverless をテストしよう に目を通していただくと良いかと思います。xUnit Test Patterns の Test Double の考え方に沿って、いくつかテスト手法をご紹介しています。また イチから理解するサーバーレスアプリケーション開発 - サーバーレス開発環境とテスト - もオススメですので、是非目を通してみてください。」

Serverlessをテストしよう では、サーバーレスのモックテスト、ユニットテストなど各パターン毎にテストの詳細が書かれていて、サーバーレスのテストのポイントがギュッと凝縮されています。
西村「サーバーレスに関する疑問がクリアになり、非常にスッキリしました。本日はありがとうございました。」
今村「ありがとうございました。」
今回は「開発方法」を中心にサーバーレスに関してお話ししてきましたが、「習うより慣れろ」という言葉にある通り、やはり触ってみることが大事だと改めて認識できました。今村さんがお話していた「開発者にとってのエディタは料理人にとっての包丁のようなもの」というセリフは積極的に使っていこうと思います!
この記事が少しでも “How to be a Developer” な皆様のお役に立てれば幸いです。
また別の記事でお会いしましょう ! それでは !
このシリーズ記事のその他の記事はこちら
- 選択
- サーバーレスの勉強方法を聞いてみた
- サーバーレスの開発方法を聞いてみた
- ネットワークの勉強方法を聞いてみた。
- ストレージの勉強方法を聞いてみた。
- データ分析の勉強方法を聞いてみた。
- マイグレーションの勉強方法を聞いてみた。
筆者プロフィール

話者について

今村 優太
アマゾン ウェブ サービス ジャパン株式会社
Solutions Architect, Prototyping Specialist
国内および外資クラウドベンダーで経験を積み、2018 年より Amazon Web Services Japan へ入社。その後、Prototyping Specialist として、AWS を利用するお客様のプロトタイプ作成協力や PoC 支援を主業務とする。特に好きな技術領域はサーバーレスの分野で、AWS のサーバーレステクノロジーの普及にも力を入れている。ペットの猫の名前はツナマヨ。
AWS を無料でお試しいただけます