AWSで〇〇やってみた！に踏み出せないあなたへ

#はじめに

本記事は、NTTドコモ R&D Advent Calendar 2021の11日目の投稿です。


こんにちは。この記事は、

* AWSを実際に触ってみたいけど、どうすればいいか分からない人
* 参考書を読んだりはしているけど、手を動かしてみたい人
* 開発チームときちんと議論したいと思っているプロダクトオーナーの人

など、主にAWS初心者の方に向けて、お送りします。
持って帰れるものは、以下を想定しています。

* AWSを触る最初の一歩の始め方
* 何を作るかと、構成に落とし込む考え方
* 手を動かしてみた結果、見え方がどう変わったか

＊＊＊

まず、私の所属する、サービスデザイン部第三クラウド推進を簡単に紹介いたします。
第三クラウド推進では、主にドコモ商用サービスのサーバ構築/アプリ開発・運用を担当しています。
私はアジャイル開発のプロダクトオーナーとして働いており、ここでは1年目2年目から若手の社員も多く活躍中です。

また、サービスデザイン部では、オンプレミスからAWSへの移行を進めており、
現在、第三クラウド推進が担当する準内製サービス45件の内、42件がAWSを用いて運用しています。

このように、サーバレス化が進んでいて、AWSに対する知識が必須の職場なのですが、
私も含めて、AWS・・・？EC2・・・？という超絶初心者からのスタートの若手も数名います。
もちろん、サービスデザイン部には勉強環境がきちんと用意されていて、
各マネージドサービスを構成して、機能デプロイまでの一連の流れを体験できるようなプログラムに取り組むこともできます。


ですが、AWSに関連するミッションを行う初心者の方の中には、研修などを受けたとしても、
開発チームとの会話で、こんな経験のある方もいらっしゃるのではないでしょうか。

![アド図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320450/6036949e-5bef-d9bc-6662-32894cabe220.png)



教科書では読んだことあるけど、講師の言う通りにちょっと動かしたけど、
実際にどうやって実装しているのかイメージがついてないから、
「それでお願いします」で会話が終了してしまう、、、。


こういうとき、いざ分からなかったことを勉強しよう！手を動かして自分でも見てみよう！と思って、Qiitaを見ていると、
サクッと、〇〇でXXやってみた！とか最新マネージドサービスを試してみた系の記事がたくさん出てきますよね。
こういう記事を見るたびに、私は「自分もサクッとやってみたい、、、、けど、どこから手をつけていいか分からない、、、、」というジレンマに悩んできました。

そこで、どうすれば手を動かしたり、技術記事を書いたりできるのか、これらができる人に聞いてみたのですが、
結果、こういう人は「努力しなきゃ」とか思って手を動かしてもないし、記事を書いてもいませんでした。
自分の知らない技術を試すことに喜びを感じているので、必要だからやらされてる、、などと思わずに、どんどんやってみた！ができます。

そういう「技術とりあえず試すの超絶楽しい」という考え方ができず、サクッと手の動かない私が、
どうやって「努力」ではなく「楽しんで」実装を試せたのか以下に流れを書きますので、
私と同じように、実装に踏み出せないことに悩んでいる、日本のどこかのあなたに届けば幸いです。



#作りたいものを考えよう
例えば、AWSを勉強し始めて、最初の方に出てくる重要ワードにLambdaがあると思います。
試しに「Lambda 作ってみた」でググってみてください。
上位に出てくる記事はほとんどが、Lambdaで何ができるか、他のサービスとどう一緒に使うかを丁寧に説明してくれていますが、
結局何に使うの。。。？と思いながら、ブックマークバーに保存する日々になります。


この記事に共感してくれるあなたが、「なにかやってみたいけど、どうしたらいいか分からない」というのは、
**単純に、作りたいものがないから**です。
ググり方が悪いんだ、などと落ち込む必要はありません。

まずは、なんでもいいので、生活の中で「これがあったらテンションあがるな」というものがないか考えてみてください。
例えば、過去に見たドラマのタイトル一覧をリスト化して見たいとか、Twitterで趣味のbotを作りたいとか、、、
本当になんでもいいんですが、現実世界での「こういうの欲しいな」からスタートするのが、ポイントです。


私は、インターネットを徘徊中に、教師の方の「家庭訪問のお知らせをひとりひとりメールで送るのに稼働が取られる」という意見を見て、
「**複数人に内容の違うメール（添付ファイルつき）を一斉に送る機能**があれば、便利そうだな〜」と思いました。

![アド図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320450/0a9cb582-a0dd-159c-158c-8c96843168a4.png)


なので、以下で作ってみます。



#機能レベルに落としこもう

何が作りたいか大体決まったら、それを機能レベルに落とし込んでみましょう。
これで完成ではなく、あとでこういう機能も欲しいな、、と思ったらドンドン追加すればOKです。


* 「複数人に内容の違うメール（添付ファイルつき）を一斉に送る」ためには何が必要？

> ・宛先、〇〇様宛、訪問時間を変えたメールが一斉に送信できる
・お知らせ情報や事前アンケートが記載されたファイルを添付
・時間変更のお願いなどを受信できる
・事前アンケートの返信ファイルを受け取る
・メールが到達したか確認できる
：



さて、ある程度必要な機能が書き出せたら、これらの機能の中で
**「どれが動けば、とりあえず最小限動くか」**という観点で最初に取り組む内容を選びましょう。

ここでは、
> ・宛先、〇〇様宛、訪問時間を変えたメールが一斉に送信できる

を選びました。

この機能を実現しようとしたら、

> ・登録したメアド宛に、対応するメールを一斉送信
・DBで名前、メアド、打ち合わせ時間などをリストで一括管理
・メールテンプレートを用意して、穴あけの部分に対応するリストの内容を埋め込んで文面作成


の3つを実装する必要があります。



#どうやったら動くか考えよう
次は、どうやったら実現できるのか考えていきましょう。
先ほどは「Lambda 作ってみた」というフワッとワードでググりましたが、
今回は作りたいものが決まっているので、具体的にググることができます。

>・登録したメアド宛に、対応するメールを一斉送信

を例にググってみましょう。

![アド図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320450/5165bd9f-02e7-f0b9-fa97-74fccbb19435.png)

といったように、段々と正解に近づいてきます。

ちなみに我々の担当では、**TGG！！（とにかくググれ）**を合言葉に、
問い合わせだけに頼るのではなく、自分たちで試行錯誤しながら問題解決に取り組んでいく文化があります。
幸い、AWSユーザは膨大なので、短い時間で有益な情報にたどり着く場合が多いです。


#やってみた！「SESを利用したメール一斉送信」

手を動かすために、まずはAWSアカウントを作成しましょう。
AWSは無料利用範囲があるので、割とハードル低く始めることができます。
本題と外れますが、自分でアカウントを作ると、これってお金かかるのかな、、、という不安におそわれるので、
こまめにコストを確認することをお勧めします。
コスト意識が高まることは、普段のお仕事でもプラスになりますね。

さて、自分だけの環境ができたら、さっそく実装を進めてみましょう。
前章のTGGにより、以下のように構成すれば、宛先、〇〇様宛、訪問時間を変えたメールが一斉に送信できるというところまで辿り着きました。


![アド図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320450/2c424e8c-d4ae-a0f4-c476-692443e95bea.png)

こちらコードなどは割愛しますが、
TGGしていただけると、どなたでも実装できると思います。
いくらTGGしてもうまくいかない時は、コピペでなく自分でコードを書く必要も出てくることもあるかもしれませんが、
コードの美しさはとりあえず置いておいて、とりあえず動くものを作れるように泥臭く書くのが、
モチベーション維持のコツです。


<img width="300"  src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320450/ecca5ac4-4a1b-a5c1-4b03-dfa37df126fa.png">

違う内容のメールが一斉に送られています。


#やってみた！をやってみた結果と伝えたいこと

今回、自分自身の手で動くものを作ってみて、一番感じたのは
「私でもAWSを使って何か作ることができるんだ」という自信がついてきたことです。

また、仕事面でも、開発チームとのやりとりが、

![アド図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320450/b56e9f4d-3bdb-53da-d9f4-02f3af06899c.png)


というように、同じ画面を想像しながら話せることで、
「お願いします」と全て受け入れるのでなく、ディスカッションができるようになりました。
全員で話し合いながら開発を進めることで、よりよいサービス開発が行えるようになってきています。


今回は、個人が「〇〇やってみた」をやるまでの流れをご紹介しましたが、
商用で動いているサービスの裏側は、もちろん検討事項の量が全然違います。
セキュリティ面の考慮や、ユーザが想定外の挙動をしたときにもエラーにならないための構成検討など、
大勢の人々がとても丁寧に検討を進めてから、世の中でサービスは動いています。

ですが、「とりあえず動く」レベルだとしても、個人的に実際にAWSで何か作ったことがあるのとそうでないのでは、全然理解度が違います。
AWS関連の試験勉強などをされたことがある方も多いと思うのですが、あの教科書の内容と実際のコンソール画面が結びつくのはとても楽しい経験です。

やってみた！おすすめです。

ここまで読んでいただいてありがとうございました！