Try T.M Engineer Blog

多摩市で生息するエンジニアが「アウトプットする事は大事だ」と思って初めたブログ

AWS認定ディベロッパー - アソシエイトに合格した話

2020年01月31日、AWS認定「ディベロッパー - アソシエイト」(以降、DAA)に無事に合格しました。

f:id:special-moucom:20200229013410p:plain

本記事では、DAA合格に向けてどんな勉強をしてきたのかを振り返りたいと思います。これからDAA取得を目指している方々にとっても、参考になれば幸いです。

  • 取得を目指した理由
  • 私のAWS事前知識
  • 学習方法
    1. 目標を設定する
    2. 情報を得る
    3. 「本」を読む
    4. Udemyをやる
  • 個人的に参考にさせて頂いたサイト
  • まとめ&反省点

取得を目指した理由

私は、3年前にAWS認定「ソリューション - アソシエイト」(以降、SAA)を取得しました。

kodak.hatenablog.com

AWS認定資格の有効期限は3年間です。
2017年09月にSAAの資格を取得したので、2020年09月には有効期限が切れて資格保有者ではなくなってしまいます。資格保有者でなくなるとどうなるか・・・ちょっと考えてみました。

  1. AWS Summit等のAWS主催のイベントで認定者ラウンジに入れなくなり、無料の休憩所やお菓子が貰えなくなる。
  2. 「私、AWS知ってます」とドヤれなくなる。

認定者ラウンジは、入れるとちょっとした特別感を感じることができるので、このまま資格保有者でなくなって入れなくなるのは嫌だなぁと思いました。また、AWSは常にサービスの成長を続けているので、3年前の「私、AWS知ってます」と、今の「私、AWS知ってます」では、知識の差が大きく、3年前の知識は役に立ちません。自身の知識をアップデートするためにも資格取得を目指そうと思いました。

こういった理由から「SAAの再取得しよう」と決めたものの、単純にSAAの再取得だけを目指すのは面白くない。というのも、最近は社内でもSAA保有者が増えてきたので、「SAA取得しましたー」だと、フーンで流されてしまう可能性もありました。「DAA取得しましたー」と言えれば、ちょっと反応は変わるかなと思い、今回はDAA->SAAの順番で再取得を目指すことにしました。

私のAWS事前知識

サーバーレス関連の技術を実務と趣味で触ってたりしています。具体的には、SAMをつかったサーバーレス関連サービスのデプロイ(Slack Botとか)やってたりします。
DAAはサーバーレス関連サービスの問題が多いので、そういう意味では個人的に少し恵まれていたかなと思いました。

学習方法

学習方法は、以下手順で行いました。

  1. 目標を設定する。
  2. 情報を得る。
  3. 「本」を読む。
  4. Udemyをやる。

1. 目標を設定する

DAAの取得を目指して勉強を始めたのは、2019年10月中旬くらいです。約4ヶ月を勉強に費やしました。子供の面倒を見ながらでの勉強なので、隙間時間を使っての勉強がメインでした。ちなみに、4ヶ月掛かったのは結果論で、本当は3ヶ月くらいで取得を目指したかったのですが、ちょっと無理でした。
受験する日付まで、具体的に決めてはおらず、だいたい3、4ヶ月後に取得したいなぁ・・・という感じで決めました。

2. 情報を集める

Qiitaや個人ブログから合格者の勉強方法などを参考にしました。特にDAA合格者の情報はSAA合格者に比べて情報が少ないので、貴重でした。

3. 「本」を読む

隙間時間を活用するため、通勤時間帯に読む用のDAA対策本がないか探して読むことにしました。恐らく2020/02/28時点でも以下の本しかないと思います。

AWSのサービスの1つ1つを軽く説明している感じで、初めて見るサービスの取っ掛かりには良いと思いました。この本を取っ掛かりにして、別途Black Beltやサービス活用事例集などを見て理解を深めました。

aws.amazon.com

4. Udemyをやる

DAA合格者の情報によると、「Udemyをやった。」との声が多く、私も初めてUdemyに登録・DAA対策コースの講座を購入することにしました。

最初に購入したのは、コレです。
お世辞ではなく、DAA取得を目指すならコレをやりましょう!! DAAの勉強方法、出題サービスのポイント、模擬試験付きのコースです。
ちなみに、Udemyはセールの時に購入するのがポイントだそうです。

https://www.udemy.com/course/aws-certified-developer-associate-dva-c01/

英語ですが、ChromeGoogle拡張機能を入れて翻訳すると、字幕英語を日本語にしてくれます。不安な方は、コースをプレビューで表示してGoogle翻訳で日本語字幕で表示されるかを確認してから(セールの時に)購入しましょう。
私は英語がまったくできないので、Google翻訳頼みでした(笑

次に購入したのは、コレです。こちらはTwitterで、いわしまん(iwasiman)さんに教えていただきました。

日本人の方がDAA模擬試験問題集を出されていて、これもオススメです。

https://www.udemy.com/course/aws-31955/

模擬試験は全65問ありますが、できる方は一気にやりましょう。無理な方は、一気にやろうとせず、2・3日に分けてやりましょう。
私は無理な方でした。1日目に35問、2日目に30問+間違った箇所の復習(1日目に35問、2日目に30問、3日目に間違った箇所の復習)といった感じでチャレンジしました。
65問は無理でも35問くらいなら・・・と思わせてくれるので、問題の解くスピードも上がりますし、なにより勉強を継続できます。

私がDAAを取得した時、上記Udemyの模擬試験は80点くらいをキープしていたと思います。そういった意味では、模擬試験を80点くらい取れるようになれば、受験準備完了ですね。

個人的に参考にさせて頂いたサイト

最後に、DAA取得でお世話になったサイトを以下に記載します。皆様本当にありがとうございましたっ。

各サービスのベストプラクティスは知っておこう!

https://docs.aws.amazon.com/index.html

KMSのキー管理を理解するべし! めちゃわかり易い!

dev.classmethod.jp

KMSが理解できたら、S3の暗号化の種類がわかるっ!

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UsingEncryption.html

KMSが理解できたら、Parameter StoreとSecrets Manager何が違うの?って絶対思うはず・・・

qiita.com

Elastic Beanstalkの6つのデプロイ方法の理解。このBlack Beltの資料は超わかりやすい。

www.slideshare.net

DynamoDBのLSI/GSIの理解

dev.classmethod.jp

dev.classmethod.jp

まとめ&反省点

こうやって無事にDAAを取得することができました。しかし、課題もありました。 それは、勉強時間の設定・把握をしていなかったことです。
隙間時間を活用して勉強していると、自分が何時間勉強しているのか?勉強時間が十分に取れているのか?といった部分が、わからなくなります。そうなってくると、常に勉強時間が十分取れていないと思い、DAAの勉強以外手につかなくなります。つまり、マルチタスク(DAAの勉強以外のこと)ができなくなり、私の場合、結果的に4ヵ月間DAAの勉強しかやっていませんでした。
対応策として、いわしまん(iwasiman)さんが活用されているStudyplusを使って管理するのが便利そうだなぁと思いました。ただ、私自身がこういったツールを使い慣れていないので、なかなか使いこなすのは難しい感じがしています。

さて、長々と書きましたが、これからDAA取得を目指したい方の参考になれば幸いです。次はSAA合格話を書く!きっと書きます!

「オブジェクト指向でなぜつくるのか 第2版」を読んだ話

少し古い本ですが「オブジェクト指向でなぜつくるのか 第2版」を読みました。
今年は、プログラミングをただ書くだけでなく、もう少し概念的なものも学んでおきたいと思ったので、この本を手に取りました。

オブジェクト指向でなぜつくるのか 第2版

オブジェクト指向でなぜつくるのか 第2版

  • 作者:平澤 章
  • 出版社/メーカー: 日経BP
  • 発売日: 2011/04/07
  • メディア: 単行本

自身の性格上こういった概念的な本は、読んでると眠くなってくるのですが、この本は読んでてとても面白く、意外にもスラスラと読むことができました。
意外に感じたのは、オブジェクト指向は Simula67(1967年)という言語で既に存在していたということ。一般的に広まってきたのは、Smalltalk(1970年)からとのことで、個人的に「ぇ、そんな昔からあったの・・・」と驚きました。
Smalltalkといえば、テスト駆動開発本でお馴染みのKent Beckリファクタリング本で有名なMartin Fowlerも使っていましたね。こういった著名人の繋がりも見えてきたので、個人的には面白かったです。

テスト駆動開発

テスト駆動開発

  • 作者:Kent Beck
  • 出版社/メーカー: オーム社
  • 発売日: 2017/10/14
  • メディア: 単行本(ソフトカバー)

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

オブジェクト指向の解説は、こういった言語の歴史的背景から「何故オブジェクト指向が産まれたのか?」を説明していて、これまた面白く、とても納得のいく説明が書かれていました。
第2版では、第1版では語られていないアジャイル関数型プログラミングについても語られています。とはいえ、第2版が出たのは2011年なので、最近Web業界にやってきた私としては「2011年で関数型プログラミングアジャイルが既にあったのか!?」とこれまた驚きでした。

オブジェクト指向といえば

以下の3つですよね。

本書を読む前の私は、上記3つは理解していたつもりでしたが、改めて本書を読み進めてみるとポリモーフィズムについては、ちゃんと理解できていなかったことがわかりました。

例えば、PHPポリモーフィズムを書くと以下のように書けます。

// 継承クラス(親)
class ParentClass {
    public function echo_msg(String $msg){
        echo 'デフォルト値:' . $msg . PHP_EOL;
    }
}
// 継承先クラス(子)
class ChildClass extends ParentClass {
   public function echo_msg(String $msg) {
       echo $msg . PHP_EOL;
   }
}
// メインクラス
class MainClass {
    // オーバーライド。
    public function echo_child(ChildClass $obj) {
        echo $obj->echo_msg('子クラスを型にobjを呼ぶ');
    }

    // オーバーライド。
    public function echo_parent(ParentClass $obj) {
        echo $obj->echo_msg('親クラスを型にobjを呼ぶ');
    }
}

// 子クラスをインスタンス化して、メインクラスに渡す。
$obj = new ChildClass();
$instance = new MainClass();

$instance->echo_child($obj); // 「子クラスを型にobjを呼ぶ」と表示する
$instance->echo_parent($obj); // 「親クラスを型にobjを呼ぶ」と表示する

私も知らなかったのですが、メインクラスで継承先のParentClass(親クラス)を型にして呼び出せるんですね。ちゃんとオーバーライドしています。

ポリモーフィズムは概念で理解していても、こういったテクニックまでは理解できていなかったなぁ・・・と改めて思いました。 こういったテクニックは、おそらくデザインパターンに通じるものがあるような気がしたので、次回かどうかはわかりませんが、こちらの本も読んでみようと思います。

第2版では、関数型プログラミングについても書かれていました。
関数型プログラミングについては、私は知識がまったく無かったので、概要くらいは本書で掴むことができました。ただ、本書ではHaskellを使って説明していたので、理解に相当苦しみましたが・・・

もし、自分が関数型プログラミングを使うなら、JavaScripでしょう。React.jsが関数型プログラミングを採用しており、仕事で扱うWordPressのBlockエディターもReact.jsが使われているので、こちらも積極的に学んでいきたいですね。

というわけで、本書で説明していた関数型プログラミングの「高階関数」と「カリー化」をJavaScriptで書いてみました。

高階関数」は、引数に関数を設定したり、戻り値で関数を返したりする関数のことです。

// 引数と返り値に関数「n => n + 1」を設定
const p = (fn) => {
    return fn;
};

const hoge = p(n => n + 1);
console.log(hoge(1)); // 2

「カリー化」は、複数の引数を取る関数 を 引数を1つだけ取る関数 を使って順次表現することです。

const c = n => {
    return m => m * n;
}

// c(2)は、m * 2を返す関数。それを変数tに設定
// 「複数の引数を取る関数」= c(2)、「引数を1つだけ取る関数」=t(4)
const t = c(2);
console.log(t(4)); // 8

// cは、以下でも書けます。
console.log(c(2)(4)); // 8

うーん、慣れないと瞬時に理解できないですね。
関数型プログラミングも面白そうなので、順次学んでいきたいですね。

最後に、こういったテクニックを知るのも大事ですが、本書では加えて「プログラマーたるもの言語で扱うメモリーの仕組みも知っておくべき!」とも書かれていました。プログラマーたるものプログラミング言語の内部の動きも知っておけ!ってことですね。確かにプログラミング言語の内部の動きまでは、意識して学ぼうと思ったことはなかったので、ここは改めて気づかされました。

まとめ

本書は、オブジェクト指向の歴史や解説だけでなく、プログラマーが知っておくべき知識やオブジェクト指向から産まれたアジャイルや次世代の関数型プログラミングまで、幅広く解説されていました。

以下、本書を読んで改めて気付かされた点(ざっくり)です。

2019年を振り返るのと2020年の抱負について

さて、だいぶ遅くなってしまいましたが、2019年を振り返りたいと思います。
すでに1月の後半なので、今年の目標も添えて書いていきたいと思います。

2019年はどんな年だった?

うーん、なかなか一言で表現するのは難しいので、年初に抱負を書いていたので、これをベースにしたいと思います。

kodak.hatenablog.com

ブログの継続は?

2019年のブログ投稿数を2018年と比べてみます。

2018年 2019年
37 29

うーん、減ってますね・・・(= =;;)
2019年は後半にあまりアウトプットしていなかったので、そこで大きく差がついた感じですね。

やはり、なかなかブログを書く時間を確保できないのが辛いですね。ブログでのアウトプット仕方もいい加減になってきた気がします・・・

アウトプットは大事ですが、いい加減になってくるとあまり良くないと思うので、ここいらで見直したいところです。

踏まえての2020年は?

今年は「無理なアウトプットをしない。必要なアウトプットをしよう!」です。
下にも書きますが2019年は「勉強会やカンファレンスへ参加したのにアウトプットしていない」「本を読んだのにアウトプットしていない」など、本来アウトプットすべきタイミングで、アウトプットできていないことが多かったので、ただブログを書くのではなく「必要なアウトプットをしよう!」そんな年にしたいなぁと思います。

勉強会・コミュニティ・カンファレンスへの参加

正直、休日の勉強会やコミュニティの参加は無理でした。
そして、これからも難しいと思っています。

平日での勉強会やカンファレンスへの参加していましたが、アウトプットはできていなかったですね。
ううっ・・・これは反省(; ;)

踏まえての2020年は?

継続です!引き続き自身の興味のある勉強会やカンファレンスの参加(平日限定)で続けて行きたいと思いますっ!

スキル向上

2019年の年初に抱負を書いた通り、JavaScriptPythonPHPAWSCMSWordPress)を中心に、技術と知識を学んだ一年だったと思います。 Vueでポートフォリオを作ったりもしましたし、LaravelやAWSの勉強もしました。転職前と比べると技術も知識もかなり増えた気がします。
とはいえ、技術レベルが初級レベルなので、今年は中級レベルに上げたいなぁというところ・・・

踏まえての2020年は?

継続してJavaScriptPythonPHPAWSCMSWordPress)を中心に、技術と知識を学んでいきます。
TypeScriptにも挑戦したいですし、WordPressのBlockエディターがReactで作られているので、Custom Blockを作るためにもReactを勉強したいと思います。
そうなってくると、オブジェクト指向関数型プログラミング等の知識も必要になってくるので、そこらへんも学んでアウトプットしていきたいと思います。

あとは、AWS認定資格の有効期限が迫っているので、再取得も狙いたいところです。
現在は、ディベロッパーの資格獲得に向けて勉強中(= = ;;)

Gitの可視化

ああっ・・・(察し・・・)

まとめ

今年も引き続き、ブログと勉強会・カンファレンスへの参加の継続しますっ!
スキルもJavaScriptPythonPHPAWSCMSWordPress)を中心に、新たにReactへの挑戦や概念理解(オブジェクト指向関数型プログラミングデザインパターンなど)を深めて、中級レベルに引き上げていきたいと思います。

Advent Calendar 2019で記事を書いた事の(ちょっとした)余談

もうすぐ12月が終わりますね。
今年も「あっ」という間でしたね。
なんか、1年前も同じことを言っていたような気がします。(笑)

さて、昨年に引き続き、今年もAdvent Calendarに記事を書かせていただきました。

qiita.com

今回は、WordPressWysiWygエディターの話です。

WordPressを使って開発をしている方々は、エディターってどうしているんでしょうか・・・
このあたりって調べてもあんまり情報が出てこないんですよねぇ(==;;

なので、今回は自分の実践している方法を書いてみることにしました。
こういった「調べても情報が少ない」「情報が出てこない」記事は貴重だと思うので、気になる方は是非参考にしてみてください。

とはいえ、Advent Calendarの記事でも少し触れていますが、現在のWordPressには、Gutenberg(グーテンベルグ)と呼ばれるBlockエディターがデフォルトになっています。
今後は、Blockエディターが主流になってくるので、タイトルに「今更」というコメントを付けました。

私自身Blockエディターをあまり使った事がないので、勉強した上で、どこかのタイミングでBlockエディターについても記事にしてみたいと思います。(ただ、このBlockエディター、VueじゃなくてReactで実装されてるのでReactを学ばねばならんのが辛い・・・)

あと、個人的に面白かったAdvent Calendarですが、以下ですね。

qiita.com

こういった本番でやらかしてしまった事って、恥ずかしかったり、黒歴史だったりして案外表に出ないんですよね。

これはこれで貴重だなぁ・・・なんて思ったりしていました。
Advent Calendarについては以上です。
続いて、過去に私が書いたQiita記事を少し紹介します。

qiita.com

qiita.com

この2つの記事は、実はセットなんです。
記事には書いていませんが、AWS SAMを使ってLambdaをのコードを書く時にこの2つはとても便利です。

VCRは、HTTP RequestのMockができるし、MotoはAWSのServiceをMockできます。そのため、この2つをAWS SAMのLambdaのコードを書く時に使えば、なんとAWSの内と外のMockができるようになるので、個人的にオススメです!!
気になる方は是非参考にしてみてください。

さて、次回は2019年の振り返り記事でも書こうかな。

【ネタ回】スキマスイッチの『私はロボットではありません』をRekognitionを使って当ててみた話

今回はネタ話です。

ちょっと昔の話ですが、Twitterスキマスイッチの『私はロボットではありません』の難易度が高すぎるwことが話題になりました。 詳細は、以下のTogetterに纏まっていました。

togetter.com

たしかに・・・難しい・・・

難しい・・・

わからんーーーーー!!

助けてーAmazon Rekognitionーーー!!

Amazon Rekognition

AIによる画像認識および画像分析を行うAWSのサービス。(雑っ)

検証開始

というわけで、Rekognitionさんならなんとかしてくれると思い、画像比較のデモを使ってスキマスイッチの『私はロボットではありません』が見破れるかを試してみました。

f:id:special-moucom:20191210000738p:plain

こんな感じで、左に参照画像。右に比較対象をセットします。
左の参照画像ですが、スキマスイッチの画像をネットで探していたら、BESTアルバムの画像が比較対象の2行目の一番端に該当したので、これをそのまま使いました。

Amazon Rekognitionの結果

こんな感じで、比較結果が出ました。

f:id:special-moucom:20191210001406p:plain
f:id:special-moucom:20191210001429p:plain
f:id:special-moucom:20191210001442p:plain
f:id:special-moucom:20191210001456p:plain
f:id:special-moucom:20191210001508p:plain

すごいっ、ちゃんとスキマスイッチを認識しているっ!!!
私自身、初めてRekognitionを使いましたが、これほどちゃんと顔認識するなんて驚きです。

というわけで、まとめ

Amazon Rekognitionがスキマスイッチと認めたのは以下の赤丸です。 f:id:special-moucom:20191210001657p:plain

Togetterによれば、正解の模様。
いやぁ、ネタでやってみたけどAmazon Rekognitionの凄さが垣間見れました。

近況

最後に近況でも・・・興味がない方は飛ばしてOK。
現在、AWS認定資格を取得すべく勉強中です。
2年前にも取得した資格ですが、2年前とはサービス内容が変わっており、ほとんど覚え直しです。(トホホッ)
2年前とは違い、子供もいてなかなか勉強時間が取れずに辛い状況が続いています。
とはいえ、2年前と比べて情報も増えてきたし、Udemyという動画教材もあるわけで・・・やりようはいくらでもあるはずっ!!
めげずに頑張りたいと思います。

という、自分に言い聞かせる近況でした。おしまい!