2023年 AWS Certified Solutions Architect – Associate(SAA-C03)受験記 – 合格までの道程

未経験からエンジニアに転職して4月1日で丸1年になります。締めくくりとして AWS Certified Solutions Architect – Associate、通称SAAを受験しなんとか無事に合格できましたので、受験を考えている方達の何かの参考になればと、合格までの道程を備忘録として残しておきたいと思います。

簡単に受かるはウソ?思ったよりも難しい

先ず思ったよりも試験内容は難しかった印象があります。これは2022年の後半に確か試験内容が改定されているので、その影響でしょうね。サービス名を単に答えるという問題は廃止され問題が長文化されているのでしっかり対策をして望むことをおすすめします。

ネット上ではSAAは簡単であるという情報が出回っていたりしますが、これはきっと試験内容が改定される前の情報であったり、そもそもインフラの知識を持った人間からすると簡単とか前提条件ありきではないかと思います。

どんな能力が問われているか

どういう能力が問われているのか、基本的なインフラの知識とサービス理解に尽きると思うのですが、amazon風に表現するならwell architected frameworkに基づいた設計力といったところでしょうか。

想定されたクライアントが抱えている問題をwell architected frameworkに基づいた設計により、AWSのサービスをどのように組み合わせて解決していくのかを考えることになります。なんだか小難しくなってしまいましたがAWSのサービスを上手く組み合わせて顧客が満足するような最善の設計をしてねってことですね。

well architected frameworkは抑えておく

ここまで読んで、well architected frameworkをしっかり理解しなくては!と思われると思うのですが、このあたりは実際そんなに難しくありません。当たり前といえば当たり前の設計思想です。

6つの柱と称されるフレームワークの概要はこんな感じです。

オペレーショナルエクセレンスの柱

キュリティの柱

信頼性の柱

パフォーマンス効率の柱

コスト最適化の柱

持続可能性の柱

あくまでも僕の解釈にはなりますが、管理/運用しやすくセキュリティ対策とパフォーマンス対策がしっかり取れた上でコストも最適化されたサービスを持続していくための設計思想ということではないかなと思います。

これを軸に備えて設計をしていきます。なんとなくやれる気がしてきませんか?

主要サービスも抑えておく

IAM、EC2、VPC、S3あたりはしっかり抑えておかないと先ず問題が解けません。あとはECSみたいなコンテナオーケストレーションとかCloudWatchのような運用保守系のサービスなんかも可能であれば触っておくと良いと思います。

最後は模試と過去問を

どんな能力が問われているのかとwell architected frameworkの概要を理解し主要サービスを抑えたらあとは過去問を解きまくるだけで良いと思います。

無料で使えるものだとPing-tというサービスがあるのですが、とても有用です。とりあえず、これで模試の正解率が100%になるまでやることをおすすめします。またPing-Tだけでも十分に合格を狙えると思うのですが、個人的には別の問題集もやっておくと良いかと思います。同じWeb問題サイトばかりやってると、いつの間にか暗記してしまって問題文を読まなくても分かるなんてことになってくるので、別の問題集で切り口の違う問題を適度に混ぜた方が個人的には良いと思います。

参考書は基本的に下のものだけで十分ではないかと。僕はKindleUnlimidに加入しているので無料で読めました。

そんなわけでAWS Certified Solutions Architect – Associate(SAA-C03)受験記でした。今度はAWS Certified SysOps Administrator – Associateを受験しようかと考えているので、それもまた記事にします。最後まで読んで頂きありがとうございました。

dynabook R634/MにUbuntuをインストールしてみた

Linuxの実機が欲しかったので中古でdynabook R634/Mを購入しUbuntuをインストールしてみました。dynabook R634/Mは2014年発売のモデルで古いこともあり、中古で安く購入できるのでわりとおすすめです。

購入時はWindows10でもっさりして使い物にならない印象でしたがUbuntuはWidows10より軽量なので普段使いならほとんどストレスなく使えるのではないかと思います。もっと軽いLinuxディストリビューションならさらに快適かも知れません。

詳細なスペックはメーカーサイト参照
https://dynabook.com/pc/catalog/dyna_b/150209r63/spec.htm

というわけで備忘録を兼ねて手順を記しておきます。

インストール手順書

①公式サイトよりISOイメージファイルをダウンロードする。

https://www.ubuntulinux.jp/download

上記のリンクから日本語 Remixのダウンロードをクリックし、isoイメージファイルをダウンロードします。この記事を書いてる時点の最新版だと「ubuntu-ja-20.04.1-desktop-amd64.iso(ISOイメージ)」になります。

②ダウンロードしたISOイメージファイルをもとにインストールメディアを作成する。

Rufusというフリーソフトを利用しインストールメディアを作成します。下記サイトよりインストール可能です。

https://rufus.ie/ja/

※イメージモードは、ISOイメージモードでもエラーは起きなかったのですが、DDイメージモードじゃないとインストールが進まなかったのでDDイメージモードで作成すること推奨。

③インストールメディアからPCをブートする

作成したインストールメディアをOSを上書きしたいPCに挿入しBIOS画面を表示させる。dynabook R634/Mの場合はメーカーロゴ表示時にF12キーでBIOS画面に入れるのでBoot MenuからUSBメモリを選択する。

④あとは待つ

そのまま待ってるとUbuntuのインストールウィザードが起動するので、設定しながら進んで、設定が完了したら待つ。ここで言語設定やネットワーク、ユーザ作成など行う。

⑤デスクトップ画面が表示されたら設定完了

お疲れ様でした。

Ubutnuインストール後ベンチマーク

KDiskというLinux版のCrystalDiskInfoみたいなやつをみつけたのでベンチマークとってみました。

>>今後はストレージとメモリの増設もしてみる予定

まとめ

今回のdynabook R634/MですがLinux版のVscodeをインストールしてモバイル開発環境として使う用途だとかなり良いなと感じています。なんといっても質量が1kg切ってるのが良いです。なんか良さげなジャンクPCを購入したらまた記事にしたいと思います。

Notionでの自動採番について考える

個人開発のプロジェクト管理ツールとしてNotionを使っているのですがプロパティに一意のIDを割り振る、いわゆる自動採番機能が標準で備わっていないんですよね。なのでNotionでの自動採番について考えてみました。

先ず前述した通りですが標準で選択できるプロパティに自動採番がないので、自動採番を実現させるためには関数プロパティを利用する必要があります。

ただし関数の中にはIDという一意の文字列を割り振ってくれるものがあるのですが、桁数が多くちょっと使いづらいと感じます。そこで作成日時を利用してIDにしてしまおうというコンセプトで、こうしてみました。

formatDate(prop(“作成日”), “YYMMDDHHmm”)

関数プロパティで上記の設定をすると10桁のIDを自動採番できるようになります。作成日時が2022年11月9日12時55分の場合の例:2211091255みたいな感じですね。10桁の数字ならまあ覚えやすいですし許容かなという感じです。

課題としては分単位で同じ時刻に複数のページを作成すると重複してしまうので大勢のプロジェクトには向いていない点ですね。

大規模なプロジェクト管理だと条件分岐で作成者によって個別にNoを割り当ててIDをもう少し複雑にしてやるといいかも知れないです。

まあそのうちに自動採番機能も追加されたりしそうな気がしないでもないですが、結構前から言われていることだけど、実装されていないので、どうなんでしょうね。

他に良い管理方法などあれば、ぜひ、コメントで教えてください。

【PHP】ctype_spaceでtrueの場合、真偽値じゃなくて、そのまま返すやつ

バリデーション用に。

ctype_spaceだと真偽値で返ってくるのでif以降の部分で対応はできるけれど、毎回if文を書くのは流石にめんどうなので関数にした。

適宜アクセス修飾子を付けるなりしてバリデーション時に呼び出せる様にするなどで使える、かも知れない。

【PHP】正規表現で「\」バックスラッシュをマッチさせる

正規表現で「\」ってどう扱えばいいのかと思って調べてみたので備忘録です。

背景としては、PHPで「\」記号をバリデーションのルールに加えるために調べてみました。

以下の様にすればOK。

ちなみに「/」をマッチさせたい場合はデリミタを「#」にすれば問題ないです。下記のような感じ。

$ptn = “#/#”;

正規表現のパターンの変数を上の”#/#”に変更してあげたら「/」をマッチさせることが出来ます。バックスラッシュもスラッシュも両方マッチさせたいよって場合はこうですね。

$ptn = “#/|\\\\#”;

「|」で区切って繋げます。

“#/|\\\\#”…、パッとみ意味不明ですが正規表現が使える様になると幅が広がるので徐々に慣れていきたいところです。

Ubuntuで「アプリケーションを表示」するからアプリアイコンを消す方法

Braveブラウザからデスクトップにショートカットを作成したら自動的に「アプリケーションを表示」に追加されたのですが、デスクトップ上からショートカットを削除しても「アプリケーションを表示」から消えない…。

どうやって消すのか分からなかったので調べてみました。おそらくChromeのショートカットなども同じ。

結論: ~/.local/share/applications/に格納されているので消せばいい

下記の場所ですね。

~/.local/share/applications/

GUIでやる場合はHOMEに移動してCtrl+hで隠しファイルを表示してあげないと「.local」が表示されないので注意。

CLIからだと、

cd ~/.local/share/applications/

で移動して指定のファイルをrmコマンドで消してあげてください。

プログラミングは名で体を表わす

唐突ですが名前というのはとても大切ですよね。

名は体を表わすなんてことわざがありますが、プログラミングに置いては、名で体を表わすがしっくりきます。

しっくりくる変数名やメソッド名にする、ただそれだけでコードの可読性や保守性はグンと高まるものであると身に沁みて思います。

例えば、会員制サイトの会員名を格納する変数を

name

にするよりは、

memberName

などにする方が良い気がします。でも、これではまだ変数名だけじゃよく分からないので、

memberFirstName

memberFamilyName

memberHandleName

くらいにしておくと、これはハンドルネームが格納される変数なんだなとか、この2つの変数で氏名になるんだなとか素早く読み取れて良いと思います。

コードを書く時は名で体を表わすというのを意識しながら変数名やメソッド名を考えるようにしたいものです。

ところで、良いコードというのはパフォーマンスを指すこともあるけれど、可読性や保守性が高いものを指す場合が多いと思うのですが、中々に曖昧だと感じます。

というのも、そのコードが読みやすいかどうかなんて、人によるしチームによるし会社にもよるし、国にもよるところですから。結局のところ、参加しているプロジェクトのコーディング規約をきちんと読んだ上で他人にも自分にも配慮してコードを書けるのかどうかなんだろうと思います。

なんてことを考えた日でした。

未経験からWEBエンジニアに転職し2ヶ月目はこんな感じ

未経験からWEBエンジニアに転職して2ヶ月が経ちました。1ヶ月目の頃よりは…、なんてことはなく相変わらずの無力感です。出来ることは増えたしコードも最初の頃よりは幾分は読める様にはなったけれど、その分、よく分からん!ってことも増えました。この繰り返しこそエンジニアでありエンジニアリングなのかも知れません。

とりあえず、ケアレスミスを無くすところから頑張りたい。レビューしてもらったコードを修正してもスペルミスであったりアホみたいなミスで突き返される度にアホだなって思う。確認してるつもりなのに抜けていたりする。それはつまり確認自体に抜けがあるってことで…。なので、その改善策としては独自にチェックシートを作成しようかと考えてます。コツコツやってこう。3ヶ月目には多少はマシなエンジニアに馴れているように今はひたすらに勉強ですね。

そんなわけで線形代数の勉強を始めてみましたが訳分からん過ぎて凹む。数学はプログラミングに必要だと実感する毎日です。アルゴリズムにも強くなりたい。

ちなみに、どれくらい僕が無力なのかを説明すると、エンジニア歴2年くらいのでゴリゴリコード書いてる人の3分の1くらいの生産性しかないです。担当する案件にもよるけれど、下手したら5分の1の時もある。これは謙遜でもなんでもなくタスク管理ツールで確認しているので紛れもない事実です。エンジニア未経験で2ヶ月目なんてそんなもんなのか…、それとも僕が異常にプロラマに向いてないのか。上司曰く、だいたい3ヶ月目くらいから少しずつパフォーマンスがあがってくるものらしいが2ヶ月目でこれだとだいぶん不安。エンジニア転職3ヶ月目の日記に期待!!

未経験からWEBエンジニアになり1ヶ月が経つ

未経験でのエンジニアへの転職はエグいという話をよく聞きます。私自身未経験てWEBエンジニアへと転職し約1ヶ月が経ちました。未経験でのエンジニア転職って実際のところどうなのって所感を備忘録を兼ねて記録しておきます。

未経験でのエンジニア転職、辛いか辛くないかでいうと辛い

ある程度は覚悟していた部分ですが辛いか辛くないかでいうと辛いです。

何が辛いか、それは、自身のスキルや知識では実務にまったく歯が立たなかったところ、もうその一点に尽きます。

現場のコードは僕の考えていた倍は複雑怪奇で与えられた仕事は主に軽妙な改修にも関わらず、まったくコードが読めないことに、冷や汗がでました。

そこまでは、まあ良いとしましょう。全然良くはないけど…。

まあ分からないので先輩エンジニアに聞くわけです。

「えっと、ここのコードってどういう処理なんでしょう?」

とても親切に教えてくれるのですが、その説明がそもそも理解出来ない。

正直、この時点で「あ、終わった」と思いました。自分にエンジニアは無理だ…、と。

とはいえ、もう入社してしまっているので投げ出すわけにはいかない。

バージョン管理ソフトで類似の改修を探して同じ様に試してみる。コードレビューしてもらう。で、コードを直す。レビューしてくれた内容を理解出来るまでググる。で、またレビューしてもらい、さらに直す。これを一週間続けると、なんと…

読める!?

あんなにさっぱり理解不能だったコードが読めるぞ!!

働き出してから翌週の出来事でした。

案外なんとかなるもんです

で、テンションがぶちあがりエンジニアやってけるかも知れない!!なんて思いつつ次の仕事に挑むわけですが、いざ、コード眺めて、あ、あかんさっぱり分からない…、とへし折られます。

しかし、この時点で私には1つの成功体験と予感がありました。時間を掛ければ理解できる筈、と。

案の定、予感は的中し翌週には、コードの内容がある程度は理解できる様にはなりました。

最初の一週間はもう行きたくない…と毎朝思ってたくらいですが、今は、なんとかなるもんだと今では思います。これは少し頑張れば理解出来る仕事を割り振ってくれるプロジェクトリーダーの手腕もあるとは思うのですが、普通に考えてみても最初から難しい仕事を振られる訳がない筈なんです。

お世辞にも仕事が出来る訳ではなく今も相も変わらず無力間でいっぱいですが、案外なんとかなるもんです。

今後の目標とキャリア戦略

私がエンジニアに転職した理由は元々PCが好きでWEB開発を面白いと思えるからというのが大きいですが、これから先の自分のキャリアのことを考えてでもあります。言い方は悪いですが潰しがきくスキルが欲しくてエンジニアになりました。

なので、今後の目標としてはエンジニアとして実務経験をしっかり積んでスキル証明が出来るようになりたいところです。

上記でも説明した通り今は無力感でいっぱいですが、とある気付きもありました。どんなにベテランのエンジニアでも得手不得手がある、という点です。

というのも入社以来「ああ、この人には一生追い付けることはないんだろうな…」と感じている経験豊富なベテランのエンジニアの方々でもクラウドコンピューティングを利用したインフラであったり機械学習を用いたデータ分析や自動化の分野には、疎かったり、そもそも興味がなかったりするもので…、これは正に青天の霹靂でした。やり合えるとしたらここしかない!と。

エンジニアと一口にいっても、そのフィールドは広大です。しかも新しい技術が次から次へと生まれている。その新しい技術が今の私にとってはフロンティアに感じます。

具体的にはAWSの資格を保有している人間が私の周りには少ないので、AWS関連の知識を学び資格を取ることで、チームに足りないものを補い、迅速に対等に仕事ができる立場まで成長できる気がしているので、今後の目標とキャリア戦略として、先ずはAWS関連の資格の取得に向けて勉強をしていこうかと思います。

30代後半でも未経験でWEBエンジニアになれる?経験談を語ります

結論から言うと、30代後半でも未経験でWEBエンジニアになれます。

何故なら私自身が37歳で未経験のWEBエンジニアとして働かせて頂いてるからです。

この記事は30代後半でWEBエンジニアに転職を考えている方の参考に、また自身の記録も兼ねて書いてます。

簡単に私の経歴を説明すると未経験でWEBエンジニアとして働き出して、現在1ヶ月目です。

未経験からの転職にポートフォリオは必須?

個人的には未経験からWEBエンジニアになりたいのであればポートフォリオは必須かと思います。

逆の立場で考えてみると、そりゃそうだと思います。WEBエンジニアになりたいけど、何も勉強はしてません!御社で0から教えて下さい!なんて人材は新卒でも厳しいのではないかと。

私は、これまでに実務経験はなく、個人でWEB開発など趣味でやっていた程度なのですが、そのお陰で、幸いにも自前のポートフォリオがありました。

結論としては、30代後半であろうとなかろうとWEBエンジニアへの転職を考えている方は、ポートフォリオの作成、そこだけはクリアしておく必要があります。

ポートフォリオの作成方法

では、具体的にポートフォリオってどういう風に作るの?というところですが、だいたい2つのパターンになると思います。

・独学でやる

・スクールに通う

のどちらかですね。

私の場合は独学ですが、スクールに通うのもありだとは思います。どちらの方法も一長一短ですね。

例えば、独学でやるメリットは、お金があまり掛からないところですが、何かで躓いた際に挫折しやすいという難点もあります。

それがスクールの場合は、何かで躓いた際に、直ぐに聞ける人がいるというメリットがありますが、その反面、それなりにお金は掛かります。

私個人の意見としてはとりあえず独学でやってみて、どうにもならんと思えばスクール通ってみるという流れでいいのかなと思います。

というのもエンジニアには自走力が必要です。転職はゴールではなくスタートなので、転職後、働くのが辛くなっては意味がありません。ある程度は自分でなんとか出来る力は今後間違いなく活きてくるので、とにかく先ずは独学でやってみることをオススメします。

ポートフォリオを作成後の転職活動について

私の場合は転職サイトを利用しましたが、正直このあたりはケースバイケースだと思います。

スクールに通ってるなら転職支援があったりしますし、企業のホームページから直接応募しても良いと思います。

まとめ

この記事が私と同じく30代後半でエンジニアへの転職を考えている方の参考になれば幸いです。

30代後半での転職は大変ですし、なにかと不安はあるかとは思います。ただ私はエンジニアに転職することが出来てとても楽しく遣り甲斐を感じながら働かせて頂いています。当記事を読んで頂いた同年代の方とは共に頑張っていきたいと考えています。

一緒に頑張りましょう!

Close