わかったつもりになってない?

わかったつもり防止のために、日常で学んだことをもう少し深堀したいブログ

AWS認定クラウドプラクティショナー合格覚書

お久しぶりです。前回更新してから早半年たってますが、今回AWS認定クラウドプラクティショナーという資格試験に受かったので覚書しておきます。前回取得したアソシエイト試験の下位資格なのですが、自分が所属している会社で取得必須となったらしいので取得しました。

 

f:id:gattsu09:20210615164405p:plain

スコア

・試験名

AWS Certified Cloud Practitioner(CLF-C01)

 

・受験日

2021/05/28

 

・スコア

843

※1000点満点中、720点以上で合格。

 

・勉強期間

2週間ほど

 

・勉強期間

10時間くらい

※ソリューションアーキテクト アソシエイト過去に勉強・取得しているので、そちらを未勉強の状態だと倍くらいは時間かかったと思います。

 

・使用テキスト/Webサイト

【参考書】

なし

 

【Webサイト】

Udemy

 

 この問題だけで合格可能!AWS 認定クラウドプラクティショナー 模擬試験問題集(7回分455問)(\3,600)

 

 

※Udemyはキャンペーン等で割引率が凄い(9割引とかよくある)です。頻繁に割引しているので、割引時に買うのがお勧め。

 

 

・勉強方法

主に朝の通勤時間(電車内の往復1時間ほど)を利用。iPhoneにUdemyのアプリを入れ、模擬問題集をひたすら解きました。Udemyの問題集は解説がイマイチなので、間違った問題やわからない用語についてはAWS公式サイトを覗くなどで確認。AWSは公式サイトの説明が日本語でしっかりしているので、まずはそちらを参照してみれば良いと思います。重たい書籍を持ち歩かなくてもすべてスマホで完結するので良い時代ですね。

 

上記に記載したUdemyの問題集は基礎レベル①~②、応用レベル①~③、アソシエイトレベル①~②と計7回分(65問×6回で計455問)あり、どんどん問題の難易度が上がっていくのですが、応用レベル①②が実際の試験問題と同じくらいの難易度でした。応用レベル③以降は今後アソシエイト試験を視野に入れているのであれば勉強しておけばいいと思いますが、基礎レベル①②、応用レベル①②の問題をしっかりと理解しておけばクラウドプラクティショナー試験には受かると思います。落ちたらすいません。

 

・問題の傾向

問題数65問、制限時間は130分。問題はAWSサービス単体についての知識が問われるものが7割、3割はクラウドとオンプレとの違い(責任範囲やメリット、設計原則)について問われる問題が多かったです。

 

基本情報処理のような計算が必要な問題や、LIPCのようにコマンドを手打ちするような問題はありません。全て選択問題ですので時間が足りないということはないかと思います。自分は1時間以上時間が余りました。余った時間で個人的に問題を分類分けして集計しました1回受けただけなのでたまたまかもしれもせんが、集計した結果は以下に記載しておきます。

 

 

<問題の集計>

責任範囲                                 5問

設計原則                                 7問

オンプレとの違い                  5問

AWSサービス関連(※1)        48問

 

※1 EC2やS3に加えて、ソリューションアーキテクトでは出なかったコスト計算用(Cost Explorer,総コスト計算ツール)のサービスに対する問題がいくつかありました。何れも問題集こなしておけば問題ないかと。

 

 

・勉強、受験してみての所感

上述しましたが、クラウドプラクティショナーはサービス単体と、そもそもクラウドって何?を問われる試験でしたので、クラウドに普段から触れている人は感覚的に解ける問題が多いと思います。個人的にサービスに関しては勉強してから半年経っているので良い復習になりました。

 

 あまりクラウドに馴染みが無い方は、まずこちらを取得してから各種アソシエイト試験に挑むとすんなり頭に入っていくと思います。そういう意味でも初学者用として良い試験だと思いました。

AWS認定クラウドプラクティショナー合格覚書

お久しぶりです。前回更新してから早半年たってますが、今回AWS認定クラウドプラクティショナーという資格試験に受かったので覚書しておきます。前回取得したアソシエイト試験の下位資格なのですが、自分が所属している会社で取得必須となったらしいので取得しました。

 

・試験名

AWS Certified Cloud Practitioner(CLF-C01)

 

・受験日

2021/05/28

 

・スコア

843

※1000点満点中、720点以上で合格。

 

・勉強期間

2週間ほど

 

・勉強期間

10時間くらい

※ソリューションアーキテクト アソシエイト過去に勉強・取得しているので、そちらを未勉強の状態だと倍くらいは時間かかったと思います。

 

・使用テキスト/Webサイト

【参考書】

なし

 

【Webサイト】

Udemy

 

 この問題だけで合格可能!AWS 認定クラウドプラクティショナー 模擬試験問題集(7回分455問)(\3,600)

 

 

※Udemyはキャンペーン等で割引率が凄い(9割引とかよくある)です。頻繁に割引しているので、割引時に買うのがお勧め。

 

 

・勉強方法

主に朝の通勤時間(電車内の往復1時間ほど)を利用。iPhoneにUdemyのアプリを入れ、模擬問題集をひたすら解きました。Udemyの問題集は解説がイマイチなので、間違った問題やわからない用語についてはAWS公式サイトを覗くなどで確認。AWSは公式サイトの説明が日本語でしっかりしているので、まずはそちらを参照してみれば良いと思います。重たい書籍を持ち歩かなくてもすべてスマホで完結するので良い時代ですね。

 

上記に記載したUdemyの問題集は基礎レベル①~②、応用レベル①~③、アソシエイトレベル①~②と計7回分(65問×6回で計455問)あり、どんどん問題の難易度が上がっていくのですが、応用レベル①②が実際の試験問題と同じくらいの難易度でした。応用レベル③以降は今後アソシエイト試験を視野に入れているのであれば勉強しておけばいいと思いますが、基礎レベル①②、応用レベル①②の問題をしっかりと理解しておけばクラウドプラクティショナー試験には受かると思います。落ちたらすいません。

 

・問題の傾向

問題数65問、制限時間は130分。問題はAWSサービス単体についての知識が問われるものが7割、3割はクラウドとオンプレとの違い(責任範囲やメリット、設計原則)について問われる問題が多かったです。

 

基本情報処理のような計算が必要な問題や、LIPCのようにコマンドを手打ちするような問題はありません。全て選択問題ですので時間が足りないということはないかと思います。自分は1時間以上時間が余りました。余った時間で個人的に問題を分類分けして集計しました1回受けただけなのでたまたまかもしれもせんが、集計した結果は以下に記載しておきます。

 

 

<問題の集計>

責任範囲                                 5問

設計原則                                 7問

オンプレとの違い                  5問

AWSサービス関連(※1)        48問

 

※1 EC2やS3に加えて、ソリューションアーキテクトでは出なかったコスト計算用(Cost Explorer,総コスト計算ツール)のサービスに対する問題がいくつかありました。何れも問題集こなしておけば問題ないかと。

 

 

・勉強、受験してみての所感

上述しましたが、クラウドプラクティショナーはサービス単体と、そもそもクラウドって何?を問われる試験でしたので、クラウドに普段から触れている人は感覚的に解ける問題が多いと思います。個人的にサービスに関しては勉強してから半年経っているので良い復習になりました。

 

 あまりクラウドに馴染みが無い方は、まずこちらを取得してから各種アソシエイト試験に挑むとすんなり頭に入っていくと思います。そういう意味でも初学者用として良い試験だと思いました。

AWSソリューションアーキテクト・アソシエイトに合格するまで

お久しぶりです。前回の更新から1年半くらい経ってますね…。お陰様で子供も1歳半となり、わんぱく度合いが増加中の昨今。この度AWSソリューションアーキテクトアソシエイトの試験に合格しましたので、合格するまでに勉強した内容とか問題の傾向とかを共有したいと思います。これから勉強する人の参考になれば幸い。

  • 試験名

 The AWS Certified Solutions Architect - Associate (SAA-C02) 

  • 受験日

 2020/11/12 

  • スコア

 760

 ※1000点満点中、720点以上で合格。 

  • 勉強期間

 2か月ほど(2020年9月~11月) 

  • 勉強時間

 50~60時間くらい 

  • 使用テキスト/Webサイト

【参考書】

AWS認定資格試験テキスト AWS認定ソリューションアーキテクト-アソシエイト(2,618円) 

【Webサイト】

Udemy

これだけでOK! AWS 認定ソリューションアーキテクト–アソシエイト試験突破講座(1,300円)

AWS認定ソリューションアーキテクトアソシエイト模擬試験問題集(1,500円)

 

※Udemyはキャンペーン等で割引率が凄い(9割引とかよくある)です。上記はいずれもキャンペーン時の価格になります。頻繁に割引しているので、割引時に買うのがお勧め。

 

・勉強方法

主に朝の通勤時間(電車内の1時間ほど)を利用して勉強しました。「AWS認定資格試験テキスト」を一読し(5時間程度)、AWS各サービスをなんとなく把握した後、ひたすらUdemyの「模擬問題集」を解き続けました(30時間程度)。「模擬問題集」の難易度は実際の試験問題のレベルに近いと思います。ただ、問題の解説が少なく解説を読んでもよくわからない所が多かったので、その際はテキストを再読したりAWS本家のサイトでサービス内容を確認したりしました。 

休日出勤の振替休日等で、子供が家に居なくて家でしっかり勉強時間が確保できる日についてはUdemyの「アソシエイト試験突破講座」の動画を見ながら実際にEC2やS3等のAWSサービスを利用してWebサーバを立ててWebページを公開してみたり、ELB、Route53、Auto Scaling機能を使って負荷分散や障害時の自動復旧を試みたりして遊びました。(20時間程度) 

 Udemyの「アソシエイト試験突破講座」は動画ベースで上記のような内容を実際にAWS上で操作しながら解説してくれる講座です。動画は合計26時間程度なのですが、倍速再生できるので13時間もあれば一通り見ることができます。実際に手を動かして各種AWSサービスを触ってみることで、書籍や問題集で学んだ内容がより腑に落ちて理解が進んだと思います。 

 試験に合格することに特化するのであれば、テキストと問題集のみしっかりこなせばもう少し短時間で合格できたかな…と思います。

 

  • 問題の傾向

問題数65問、制限時間は130分。問題は「ある要件を満たすための最適なAWSサービス(またはサービスの組み合わせ、またはサービスのタイプ・オプション)は次のうちのどれか。」を選択肢から選ぶ問題がほとんどでした。(他にはIAMの定義内容を問われるような問題が1,2問程度有)基本情報処理のような計算が必要な問題や、LIPCのようにコマンドを手打ちするような問題はありません。 

 合格するためには、沢山あるAWSの各種サービスの目的や用途を理解するのはもちろんですが、似たような機能を提供する複数のサービスのうち、指定された要件に最も適しているサービスを即答できるよう、各サービスの特性をしっかり整理しておく必要があると感じました。特にストレージ関連はEBS,EFS,FSx,S3等々と似たようなサービスが多く、且つそれぞれのタイプ(S3だとStanderd,Standerd-IA,On Zone-IA,Glecier等)の特性も踏まえて、もっとも要件に適したサービスは何か…というレベルで問われます。 

 全て選択問題ですので時間が足りないということはないかと思います。自分は1時間以上時間が余りました。余った時間で個人的に問題を分類分けして集計しましたが、ストレージ関連の問題が一番多く、次いでセキュリティ関連、可用性関連の問題が多かったです。1回受けただけなのでたまたまかもしれもせんが、集計した結果は以下に記載しておきます。 

 

<問題の集計>

ストレージ関連                       15問

(EBS,EFS,FSx,S3等)

セキュリティ関連                    10問

(IAM,KMS,WAF等)

可用性関連                             10問

(ELB,Route53,Auto Scaling等)

DB関連                                 5問

(RDS,Aurora, DynamoDB等)

EC2関連                                5問

(インスタンスタイプ,インスタンスの購入オプション関連)

その他4問以下30問

 

全体としてオンプレミスでWebサービスを提供していて、そこからWebサーバやDBサーバ等をAWSに移行することを想定して問われる問題が多いです。Webサービスの構築経験があれば問題文がイメージしやすいかも。  

  • 勉強、受験してみての所感

上述しましたが、AWSの沢山ある各サービスの最適な使い方・組み合わせが主に問われる試験で、今現在AWSで何が実現できるのかを把握するのに良い試験だったと思います。ただ、要件を満たすための最適なサービスの組み合わせについては、ある程度イメージできるようになりましたが、この資格では実際に構築できるようになるわけでは無いので、実際に手を動かして作れるようになるために、引き続き講座や研修で学習していく必要があるなと思います。

合格体験記 LPIC101(ver5.0)

ども。半年ぶりくらいの更新です。この前の更新から今日までの間に、子供生まれたりとか、父親になったりとかで生活が一変した感じなんですが元気にやってます。

 

LPIC202,201,102受かってからなんと1年以上経過してるんですが、先日ようやく101受かったので残しておきます。一応これでLPICレベル2認定。これからLPIC受けるひとの参考に少しでもなれば。

 

前の記事は以下になります。

合格体験記 LPIC102(ver4.0)

合格体験記 LPIC201(ver4.5)

合格体験記 LPIC202(ver4.5)

 

受験日

2019/7/10

 

スコア

640

 

勉強期間

1か月ほど(毎日1時間くらいでトータル30時間ほど)

 

参考にしたサイト(Web問題集)

ping-t

 

勉強方法

ひとまずping-tの問題をひたすら解いて全問(700問くらい)のステータスを金(2回連続正解の状態)にしました。そのあと、使ったこと無いコマンドのオプションとかはAWSのEC2にRHELを入れて実際に打ってたしかめたりしました。

 

102の時と同様にping-tの問題を9割は解ける状態にしておけば、まず落ちることはないんじゃないかなーと思います。落ちたらすいません。

 

所感

子供ができて土日祝は妻が働いている関係で一人で育児していたので、試験日の調整が大変(平日に有給とった)だったのですが、何とかなってよかったです。

 

LPICレベル1ということで、いわゆる初心者向けな内容になってますが、逆に言うと普段仕事でよく使うコマンドだったりとかが大半だったので、これからLinux使ったお仕事に就きたい人はコレ勉強しておくとスムーズに進められるんじゃないかなあと思います。

 

逆にレベル2(特に202)はWebサーバやDNSサーバ立てたりとか少し専門的かつLinuxから離れていくので、「それ、必要になってからガッツリ勉強すればよくね?」感あります。いや、いい経験になりましたけれども。

 

今後の目標

AWSをもう少しガッツリ勉強してみたいのと、安全確保支援士の取得に向かってやっていきたいと思います。

【Ruby on Rails】DBのテーブル間でアソシエーション(関連付け)する手順まとめ

ども。あけましておめでとうございます。

2018年はprogateのおかげでWebプログラミングに目覚めて、2019年くらいには自前のWebサービスを3つくらい運営している想定でしたが、一つ公開はしたものの理想には程遠い出来なので作りこんでいる昨今です。なかなかままなりませんね。

ブログは約3か月ぶりくらいの更新になりますが、まったりプログラミングは続けており、progateのRuby on Railsレッスンでは出てこなかったDBの関連付けについて学んだので記事にしたいと思います。手順にすると簡単に見えますが、色々参考にしながら成功するまでメッチャ時間かかったんですよ…。

0.前提

当環境はAWSの「Code Star」、「Cloud9」を利用して作成しています。バージョンは以下の通り。

Ruby on Rails 5.2.0
Ruby 2.4
 
環境作成の手順は以下を参照してください。
gattsu09.hatenadiary.com

1.ER図を作る

まずはDBの設計図ことER図(Entity Relationship Diagram)を作成します。今回作る程度だったら別に脳内でも間に合いますが、Webサービス作ってみると、どんどんDBに変更が入ってきて訳が分からなくなるので、どこかのタイミングで図に落とし込んでおくと脳内整理や備忘録にもなって良いと思います。

というわけで、今回はERDPlusというWebサービスを使って作ってみました。かなり簡易的ですが、シンプルに作れて備忘録には十分だと思います。

f:id:gattsu09:20190103193925p:plain
ER図

2.Userテーブルを作る

Userテーブルを以下のコマンドで作っていきます。ここらへんはprogateさんのレッスンが分かりやすいので細かい説明を端折ります。

rails g model User name:string

3.Commentテーブルを作る

次に以下のコマンドでCommentテーブルを作ります。「user:references」の箇所がミソなのですが、こう指定すると「user」テーブルの「id」を参照する外部キー「user_id」カラムを生成します。

rails g model Comment user:references comment:string

コマンドを実行すると「<プロジェクトフォルダ>/db/migrate」配下に以下内容のmigrateファイルが作成されます。

class CreateComments < ActiveRecord::Migration[5.2]
  def change
    create_table :comments do |t|
      t.references :user, foreign_key: true
      t.string :comment

      t.timestamps
    end
  end
end

また、「<プロジェクトフォルダ>/app/model」配下に「comment.rb」というmodelファイルが作成されます。ファイル内には指定したテーブルに従属するという意味の「belonges_to:<テーブル名>」が自動で挿入されています。

class Comment < ApplicationRecord
  belongs_to :user
end

4.Userテーブルのmodelファイルを修正する

続いて、「<プロジェクトフォルダ>/app/model」配下にできる「user.rb」ファイルに以下を追加します。

class User < ApplicationRecord
    has_many :comment, dependent: :destroy
end

「has_meny:<テーブル>」で、従属されるテーブルを指定します。なお、テーブル間の関係が1対1の場合は「has_one:<テーブル>」を指定し、1対多の場合は「has_meny:<テーブル>」を指定します。今回は1ユーザに対し、コメントが多数ある想定なので「has_meny」を指定しました。

また、「dependent: :destroy」を指定すると、Userテーブルのレコードを削除した際に、関連するCommentテーブルのレコードがすべて削除されます。「gattsu09」ユーザを削除すると、「gattsu09」ユーザが書き込んだコメントが全て削除されるという具合になります。便利ですね。

5.migrateする

ようやく準備が整ったので、以下コマンドを実行してmigrateして関連付したテーブルの作成完了となります。

rails db:migrate

6.関連付けしたテーブルの活用方法

というわけで、テーブル間の関連付けが完了したので具体的に活用していきたいと思います。ここらへんはもう少し詳しく書こうと思いますが、疲れてきたので今日のところは簡単に…。

Userテーブルに「id:1」で、「name:gattsu09」のユーザが登録されており、Commentテーブルにgattsu09ユーザのコメントである「user_id:1」のレコードが複数あるとします。その場合、以下のように指定するだけでgattsu09ユーザのコメントを全て表示できます。

◆コントローラファイル
def top
  @user = User.find_by(id:1)
end
◆ビューファイル
<% @user.comment.each do | comment | %>
    <%= comment.comment %><br>
<% end %>

コントローラファイルでUserテーブルのみ指定すると関連するCommentテーブルの情報も取り出し可能になります。わざわざCommentテーブルをコントローラファイルで定義せずに済むのでメンテナンスしやすいです。

また、ユーザを削除するとき以下のように指定すると、gattsu09ユーザのコメントもCommentテーブルからすべて削除されます。便利ですね。

◆コントローラファイル

def user_destroy
    @user = User.find_by(id:1)
    @user.destroy
end

7.最後に

新年初の記事はDB関連となりました。独学なので色々参考にしながら試行錯誤しながら進めているのですが、やっぱり誰かに伝える体でブログにまとめると頭の中が整理されて良いですね。引き続き学んだ内容は、このブログにまとめていきたいと思うので2019年もよろしくお願いします。

Ruby on RailsでJavaScriptが2回実行されちゃう件の原因と対策

ども。Progateってサービスに出会って、唐突にプログラミング学んでからWebサービス作り始めて早3ヶ月目に突入する昨今です。めっちゃ飽き性なのですが我ながらよく続いてるもんだぜ。

ここ20日くらい以前公開したanIRanってサービスに、もうちょい操作性を持たせるべく再度ProgateでjQuery(JavaScript)ってのを学んであれこれやってました。…が、何故か処理が2重で実行される事態が発生して、かなりの時間解消に費やしたので原因と対策について残しておきたいと思います。

1.事態:JavaScriptの処理が2回実行されてしまう

タイトルで全て言ってしまってますが、jQueryで仕込んだ処理を実行したところ何故か2回実行される事態が発生しました。デバッグのため、処理の中にalert(メッセージをポップアップで表示させるメソッド)を仕込んだところ、2回表示されたことで気付きました。

以下のポップアップが2回表示されてしまいました。
f:id:gattsu09:20180912223208p:plain

2.原因:application.html.erb内でJavaScriptを読み込む処理を2回記述していた

「application.html.erb」ファイルのhead内でJavaScriptを読み込むタグ「javascript_include_tag」を2回記述していたことが、2回実行されちゃう原因でした。Ruby on Railsはデフォルトで1つ目の「javascript_include_tag」が記述されており、何もしなくてもjQueryは利用可能だったのですが、最初それを知らなくてアレコレいじってるときに自分で2つ目のタグを追加していました…。完全に僕のミスですね。

f:id:gattsu09:20180912223625p:plain

3.対策:2つ目のjavascript_include_tagを消す

と、いうわけで対策として2つ目のjavascript_include_tagを消すことで事態解消しました。単純なことなんですが、解消するためにかなり時間がかかりました…同じ事象で困っている誰かの参考になれば幸いです。

作ったWebサービスの表示速度を20倍以上早くした方法について(jQuery編)

ども、Ruby on RailsでanIRankingっていうWebサービスを作ったのですが、使い勝手がイマイチでjQueryっていうJavaScriptのライブラリを勉強してUIを改善中な昨今です。


というわけで、手始めに実際に使ってくださったユーザの方何名かから要望いただいた「検索」機能について実装を考えてみました。


f:id:gattsu09:20180901004628p:plain


◆遅いコード

最初に書いたのが以下のコードです。後述しますが、アニメタイトルが増えれば増えるほどめっちゃ遅くなります。

$('form').submit(function(){

    var SearchWord = $('#inputsearch').val();	//テキストボックスの値取得
    var WordCount = $('span').length;	        //spanタグの数を取得(約9,000件)

    //spanの数だけ繰り返し実行
    for (var i = 1; i < WordCount; i ++) {

        var ContentWord = $('span').eq(i).text();    //spanタグ内のテキスト取得

	//spanタグ内のテキストがテキストボックスの値に一致するか(部分一致)
        if ( SearchWord.indexOf(ContentWord) != -1 ){ 
        
            //一致した場合は表示
            $('span').eq(i).addClass('showlist');
        }else{
        
             //一致しなかった場合非表示
            $('span').eq(i).removeClass('showlist');
        }
    }
    
    return false;

});

アニメのタイトルはhtmlで「タイトル」で指定していて、for文で全てのspanタグをチェックして、検索テキストボックスに一致する場合は、表示させるための「showlist」クラスを追加します。


spanの数が100件程度なら上記コードで問題なく検索結果が帰ってくるのですが、9,000件のアニメタイトル相手に実行すると処理が遅い…というか、もはやハングアップしていると見なされてChromeが警告を出してくるレベルです。


f:id:gattsu09:20180901001607p:plain


◆早いコード

それで、どうしたものかと途方にくれていたのですが、色々試した結果以下の方法で爆速になりました。


jQueryのcontainsというのを使うと、指定した文字列に部分一致する要素に対して一括でcssを追加することができます。使い方は「<要素>:contains("<文字列>")」な感じ。詳しくは以下サイトなど見ていただければと思います。

http://semooh.jp/jquery/api/selectors/%3Acontains/text/

$('form').submit(function(){

    var SearchWord = $('#inputsearch').val();	//テキストボックスの値取得

    //spanタグを一旦非表示に設定
    $('span').removeClass("showlist");
    
    //spanタグの内、テキストボックスの値に一致(部分一致)するタグを表示
    $("span:contains(" + SearchWord + ")").addClass("showlist");

    return false;

});

最初に書いたコードに比べて非常に短くすむ上に速度はめっちゃ早いので良い事だらけですね。


◆最後に

こう書くと簡単に思えるかもですが、このコードに行き着くまでかなり時間がかかりました・・・。


ProgateっていうサイトでjQueryについて学んだのですが、どうしても学んだ範囲内でなんとかしようとしちゃって、なかなか他にもっと良いやり方があるんじゃないかっていう思考に行き着かなかったんですよねぇ。(そのおかげで、jQueryはclass指定よりid指定の方が読み込みが早いとか高速化の知識が少し増えましたが)


行き詰まってようやく、一旦ゼロから考えて何かいい方法がないか探し始めたところ、あっさり良い方法が見つかるという体験を得ました。既存の(今のところ)問題なく動いている機能とかも「もっと他に良いやり方がないかな」とか考えてみるのも視野が広がって良さそうですね。