とり研

iPhoneアプリ開発とかプログラミングとかの話題。

【随時更新】AWS Certified Cloud Practitioner 学習ノート

はじめに

AWSに関しては全くの素人ですが、仕事に役立ちそうだし、まずは資格を取ろうと思い立ち「AWS Certified Cloud Practitioner」試験に向けて勉強することにした。 ここでは、日々学んだことを書き留めておく。というか覚える単語が多すぎて、ノートを取らないと覚えきれない。

参考書は以下を使用しています。

※注意:これ以降のノートは自分なりに解釈して書いています(参考書の内容をそのままブログに写すのはNGだと思うので)。そのため、誤っている可能性もあります。

EC2について

インスタンスの種類

  • リザーブドインスタンス
    • スタンダード:1年/3年間の契約
    • コンバーティブル : インスタンスの属性を変更できる
    • スケジュールドリザーブドインスタンス:現在は提供されていない
  • オンデマンド
    • 都度課金して使用
  • スポット
    • 格安だが、途中で止められてしまう場合がある。

ストレージ

インスタンスストア

内蔵ハードディスクのようなイメージ。ただし、インスタンスを終了すると消えてしまう。

EBS (Elastic Block Store)

外付けハードディスクのようなイメージ。 スナップショットでS3に保存可能。フルバックアップ→その後の増分を保存。

Amazon EFS (Elastic File System )

NASのようなイメージ。複数のEC2インスタンスからアクセス可能。

DB関連

Amazon RDS

リレーショナルデータベース。フルマネージド。マルチAZ対応は設定が必要。Aurora, Postgre, MySQL, MariaDB, Oracle, SQL Server。

DynamoDB

NoSQLデータベース。フルマネージド。デフォルトでマルチAZ対応。

ElastiCache

リアルタイムデータベース。インメモリ。フルマネージド型。マルチAZ対応は設定が必要。Redis、Memchached互換。

Redshift

リレーショナルデータベース。データウェアハウス、BI向け。データ解析が得意。

EMR

ビックデータ向け。フルマネージド型。HadoopやSparkなどのフレームワーク。

Athena

S3のデータをSQLで検索できる。

S3 Select (Glacier Select)

S3やGlacier内のCSVやJSONファイルをSQLで検索できる。 ※ Athenaとの違いがよくわからない...【AWS re:Invent 2017】S3 SELECTとAmazon Athenaの違い | Skyarch Broadcasting

ネットワーク関連

AWS Global Accelerator

ユーザーからリソースまでの経路を最適化。

Amazon CloudFront

  • エッジサーバーにコンテンツのキャッシュを配置
  • API Gatewayと連携可能
  • データ転送(out)とhttp(s)リクエスト数でコストが決まる

ネットワークACL(Access Control List)

VPC内の通信アクセス(in - out)を制御する仮想ファイアウォール

ELB

ロードバランサ。

Application Load Balancer とは? - Elastic Load Balancing

コンテナ関連

Amazon ECS (Elastic Container Service)

Docker コンテナオーケストレーションサービス

Amazon EKS (Elastic Kubernetes Service)

Kubernetes で コンテナを実行

Amazon ECR (Elastic Container Registry)

Dockerコンテナイメージを保存する

アカウント関連

AWS Organizations

アカウントグループを作ったり、ポリシーを適用したり。アカウント作成の自動化。

IAM

アカウントを作成・管理

ユーザー関連 (IAM)

付与対象

  • IAM ユーザー
    • 個人
  • IAM ユーザーグループ
    • ユーザーをグループ化したもの
  • IAM ロール
    • EC2などの個々のサービス

設定

  • IAM ポリシー

AWSリソース(ユーザー・ユーザーグループ・ロール)へのアクセス権限を設定

アクセス制限

セキュリティグループ

インスタンス単位。1つ以上のインスタンス(EC2やRDSなど)への通信を制御する仮想ファイアウォール。インスタンスごとに設定できるので、通常のファイアウォールよりもきめ細かい。

ネットワークACL

サブネット単位。VPC用。サブネットへのインアウトのトラフィックを制御するファイアウォール。

認証関連

AWS STS (AWS Security Token Service)

一時的な認証でアクセスできる。

アクセスキー

AWSサービスへのプログラム呼び出しを認証するために使用される

Amazon Cognito

アプリにサインイン機能を追加できる。Apple、Facebook、Google、Amazon などのアカウントでサインイン対応。

ログ・監査関連

Amazon CloudWatch

AWSリソースが対象。 AWSリソース(EC2など)のモニタリングを行う。CPU使用率など。

Amazon CloudWatch Logs

AWSリソースが対象。 AWSリソースのログを監視してアラート通知を送ったり出来る。

AWS CloudTrail

AWSアカウントが対象。 AWSアカウント内のAPI呼び出しを記録(= AWS内のすべての操作ログ)。

AWS Config

AWSリソースの変更を自動記録。

Trusted Advisor

AWSアカウントの状態を自動的にチェックし、アドバイスをレポート。

  • コスト最適化
  • パフォーマンス
  • セキュリティ
  • etc.

Amazon Inspector

EC2インスタンスの脆弱性調査。EC2にインストールして使用。

AWS Systems Manager

利用中のインフラを可視化。AWSリソースをグループ化したりして、管理する。

コスト計算・見積もり関連

Cost Explorer

コスト分析ツール。現在の使用状況を分析する。

TCO計算ツール

見積もりを行うツール。

セキュリティ関連

Amazon Inspector

EC2インスタンスを分析し、脆弱性をチェック。テンプレートに基づいて調査。

AWS GuardDuty

AWSアカウントをモニタリング。

AWS Shield

DDos攻撃に対する保護サービス。Standard(無料)とAdvanced(有料)がある。

AWS WAF

ファイアウォール(Web Application Firewall)。 適用対象は CloudFront, ALB (Application Load Balancer)、API Gateway。

自動構築関連

AWS CloudFormation

インフラ構成をテンプレート化しておき、一括起動できる。

AWS Elastic Beanstalk

アプリケーションを自動デプロイ。ソフトウェアが対象。

AWS OpsWorks

Chef や Puppetによる構成管理。インフラ構成の自動化。

オンプレとの連携・データ移行

AWS DMS (Database Migration Service)

データベースの移行サービス

AWS SMS (Server Migration Service)

サーバーのマイグレーションサービス

iOSDC Japan 2020 に参加しました #iOSDC #iwillblog

iosdc.jp

5年前の初回から、毎年参加しているiOSDCに、今年もまた参加しました。

今回は、新コロの影響もありオンライン開催です。ニコニコ生放送を使用し、各セッションでは事前録画されたものを放映する形式でした。

オンラインイベント初体験

このような、大規模なオンラインイベントへの参加は初めてですので、自分が感じたPros / Cons (良かった点 / 良くなかった点)をまとめてみたいと思います。

Pros オンラインイベントで良かったところ

  • 費用面
    • 地方から参加の場合、ざっくり4万円が浮く(往復新幹線(10000 x 2) + ビジネスホテル宿泊(8000 x 2) + その他)
    • 自分の会社は上記費用が会社から出ていたので良かったのだが、そうでない人は大きいのでは
  • 環境面
    • 昨年は、大学の教室ということでエアコンが寒かったり暑かったりということもあったが、今回はそれがない。快適。
    • セッションごとに、教室の移動がなくて楽だった。人気セッションで満席で入れないということもない。
    • 「ちょっと期待した内容と違うな...」といったセッションだった場合に、テレビのザッピングのように、すぐに他に行けるのも良い

Cons オンラインで良くなかったところ

  • 気分転換ができない
    • 年に一回くらいは東京に行くのは気分転換になっていたのだが、それが出来ない
    • そもそもGoto Travelでも東京は除外されていたくらいなので、仕方なし....
  • 懇親会がない
    • iOSDCは、懇親会で結構良いお酒が出るのでそれも楽しみだったのですが、今回は残念...
    • 事前に送付されたノベルティ箱に、「ビールなどが入っていないかな」と、密かに期待していたくらいですw

個人的には、 オンラインの方が色々と気楽でしたので、次回に現地開催に戻ったとしても、オンライン生中継を視聴できるような選択肢があるとありがたいです。

本編の印象

見たセッションの印象をメモっておきます。

  • Swift以外の開発として、Flutterが勢いある(?)
    • 「Flutter最高や!SwiftUIなんていらんかったんや!」というLTがあったり
    • 個人的にもFultterに興味が湧いた
  • SwiftUI, Combineのセッションもぼちぼち出てきているが、iOS13以上の縛りがあるので、まだまだこれからといった感じ
    • とはいえ、SwiftUI は iOS14 の Widget 実装では必須のようなので、そろそろ自分も始めたい
  • 長年続いているアプリのメンテナンスの話に共感
    • Objective-CとSwiftの混合でバグが出る...などは自分もさんざん苦労した箇所である

仙台iOS開発者勉強会 SWWDC43 - Special Event 2020を見る会 を開催します。

毎年9月恒例の、Appleの新製品発表会に合わせて、『仙台iOS開発者勉強会 SWWDC43 - Special Event 2020を見る会』 を開催します。

今回も、新コロの影響により、Google Meetを使用してのオンライン開催です。

内容は、新製品発表会のムービーを見ながら、参加者が発表にツッコミを入れたりして楽しむ会です。(iOSアプリ開発者の会なので、当然Appleユーザーが多いのですが、最近は発表に対して厳し目の意見が多いような...。)

一応、対象はiOSアプリ開発者です。そうでないかたも、「最近のAppleはどんなもんかね」という気分で参加されるのも歓迎です。

参加申込はこちらからお願いします↓↓ swwdc.connpass.com

ビールやコーラでも飲みつつ、まったり参加くださいませ。

「リファクタリング 既存のコードを安全に改善する」を読んだ

(※この記事は、会社の勉強会での発表を元に起こしたものです。そのため、若干端折って書いております)

内容

こちらの本の紹介です。

今なら、第2版が出ています。言語がJavaからJavascriptに変更になりました。

読んだ動機

  • 「リファクタリング」って言うけど、やってることは人それぞれだよね
    • もやっとする
    • 体系的におさらいする方がいいのでは?
  • 「リファクタリング」の基本を学びたい
  • 長い間積ん読であったが、コロナ自粛期間中に読んでしまおうと思った

そもそもリファクタリングとは

この本の定義では、リファクタリングとは↓

リファクタリング(名詞) 外部から見たときの振る舞いを保ちつつ、理解や修正が簡単になるように、ソフトウェアの内部構造を変化させること

動詞バージョンはこちら↓

リファクタリングする(動詞) 一連のリファクタリングを適用して、外部から見た振る舞いの変更なしに、ソフトウェアを再構築すること

リファクタリングを行う理由

  • ソフトウェア設計を改善する
  • ソフトウェアを理解しやすくする
  • バグを見つけ出す
  • より早くプログラミングできる

いつリファクタリングをすべきか

  • 3度めの法則
    • 似たようなコードを3回書いたら、まとめる
  • 機能追加の時
    • 理由1. 既存機能を理解するため
    • 理由2. 容易に機能追加出来ない設計を治す→機能追加作業
  • バグフィクスの時
    • 理由1. 既存機能を理解するため
  • コードレビューの時

リファクタリングの注意事項

  • 対象のユニットテストを書いてからリファクタリングすること
  • リファクタリングはバグの原因になりうる (これは、私の実体験でも多々あります...)

リファクタリング例

6章〜12章、270ページに渡りリファクタリングのパターンが紹介されているが、その中で 自分的にびっくりした手法 をご紹介します。

リファクタリング前のコード

※本に載っていた例を簡略化したものです。

// レンタルビデオ店で、レンタル商品の合計金額と獲得ポイントを計算・表示する機能
int amount = 0; // 合計金額
int points = 0; // 獲得ポイント

while(rentals.hasMoreElements()) {
  Rental each = rentals.nextElement();

  amount += each.getPrice();
  points++;
}

// 画面に表示
amountTextField = "合計金額は" + amount + "円です。";
pointTextField = "獲得ポイントは" + point + "ptです。" ;

上のコードの改善点はどこでしょうか...?
(1分間考えてみてください)
.
.
.
.
.
.

リファクタリング後のコード

// レンタルビデオ店で、レンタル商品の合計金額と獲得ポイントを計算・表示する機能
// 画面に表示
amountTextField = "合計金額は" + getAmount(rentals) + "円です。"   
pointTextField = "獲得ポイントは" + getPoints(rentals) + "ptです。" 

/// 合計金額を求める
func getAmount(rentals[Rental]) {
  int amount = 0; // 合計金額
  while(rentals.hasMoreElements()) {
    Rental each = rentals.nextElement();
    amount += each.getPrice();
  }
  return amount;
}

/// 獲得ポイントを求める
func getPoints(rentals[Rental]) {
  int points = 0; // 獲得ポイント
  while(rentals.hasMoreElements()) {
    Rental each = rentals.nextElement();
    points++;
  } 
  return points;
}

こういうコードは、「ループ回数が増えるので、良くない」と思っていたので、このように修正するのは意外でした...。

なぜこうすると良いのか?

  • ユニットテストが書ける
  • 修正前は、結果を直接UI要素に入れているので、テストは基本的に手動で行うしかない
  • 修正後は、計算処理がメソッドになっていて、入力と出力があるので、ユニットテストが書ける
  • 今回のような単純計算なら良いが、ポイントが複雑になってくると、いちいち手動テストするのはしんどい(* 例えば、「旧作映画を10本同時レンタルしたら+100ポイントキャンペーン」とか...)
  • 最近の計算機は十分速いので、この程度のループが増えても影響は少ない
    • 「1億本レンタルする人がいる」とかなら、大変そうですが...。

まとめ

  • リファクタリングのもやもやがスッキリ
  • なぜ行うのか?などの理由付けになる
  • 定番の技術書を読むのも良い
  • 「一般的に、こういうコードが良いコード」という安心感が得られる
  • 今回の例のようなコードは、自分は良くないコードと思っていたが...と気づくきっかけ。この本を読んでいなければ、気づかなかった

2018年を振り返る

swwdc.connpass.com

SWWDC39 - 忘年LT会 という催しがあり、今年を振り返る機会があったので、自分もやってみた。

lablog.tototti.com

今年の最初に、2018年の抱負なようなもの - とり研 というブログを書いていたので、それに対してどうだったかを振り返りたい。

優先度 ★★★ だったもの

iOS

こちらは今まで通りやって行きたい。 (中略) 今年は、新しいことを学ぶ時間を増やす。

達成度 90% : ありがたいことに、相変わらず続いている。とはいえ、ちょっとだけJavaScriptをやったりもした。

「新しいことを学ぶ時間を増やす」というのはそんなにできなかったので、-10%

SWWDC (仙台iOS開発者勉強会)

今年もいつも通り、気楽にやりたい。年6回くらい開催?かな。

達成度 83% : 合計で5回、開催できた 目標の 5/6 = 83%を達成しているので、まあ充分ではないでしょうか!

大きめのイベントや勉強会に参加

今年も、どこか大きめのiOSイベントに行きたい。

達成度 70% : 今年もiOSDCに参加しました。ただ、それ以外は行けていないので7割くらい。

統計・機械学習

今のところそういう仕事が無いのだけど、あったら本気出したい。

達成度 20% : そういった案件はなく...仕事駆動だと難しいですね。まあでも、2日間のディープラーニング研修というのがあったので、受講してみたりはしてました。

優先度 ★★ だったもの

スマートスピーカー

Amazon echo買ってみた。なかなか良い。音声入力のインターフェースに慣れるためにも、積極的に使っていきたいですね。

達成度 20% : 一応、サンプルアプリを動かすところまではやった。最近、家でAlexaの声を聴いてないですね...(飽きた可能性大)。

メディアアート・映像

ProcessingとかopenFrameworksとか、Unityなどに興味があるのだけど。仕事に結びつかないので、なかなか着手出来てない。今年は何かアクションを。

達成度 10% : 今年も何もしていないな...。見るほうでは、夏の AUDIO ARCHITECTURE展がすごくよかった。

マネジメントとか企画とか

仕事で受託開発していると、商品開発とかマーケティングとかをそんなに考えないので、補っていきたい。

達成度 15% : これも何もやっていないな...。どちらかというと、行動経済学とか、心理面の方が興味が湧いた。

優先度 ★ (たぶんやらないけど、何かあったらやる) だったもの

英語

仮想通貨関連

達成度 100% : 予定通り何もしなかった! よって、「たぶんやらない」という目標を達成した。

まとめ

  • トータルでは60%くらいは出来てるような気がします。
  • 来年も頑張りたいです(小学生並みの...)。

「iOSDC Japan 2018」参加報告メモ

日本国内最大のiOS開発者向けイベント「iOSDC」。今年も参加してまいりました。 そして、SWWDCで「iOSDC Japan 2018 参加報告会」をすることになりました。わー。

swwdc.connpass.com

報告会で、感想などを発表する事になったので、取り急ぎ、感想を箇条書きでまとめました。

私とiOSDC 2018

iosdc.jp

  • 3年連続3回目の参加
  • 前夜祭から最終日まで、ほぼすべての時間帯にいました
  • 今年は体力的にキツくて、セッションを聴かずに休憩してる時も多め
    • 体力面 : 東京 is 暑い(前夜祭・1日目は最高気温35度とかであった...)
    • 無限コーヒー(コーヒーが自由に飲める)や電源付きの席があり、休憩中も快適でした
  • 3.5日間は長い印象
    • 地方から行く人は、ホテルを確保するのも3泊だと結構しんどい.

Goodな発表まとめ

qiita.com

  • 今回は、サンプルのソースコードを用意している方が多くて、助かりますね

MicroViewControllerで無限にスケールするiOS開発

金の弾丸

差分更新関連

アンカンファレンス「ゲーム機のアーキテクチャを語る」

  • ポッドキャストrebuild.fm にたびたび出演されているhakさんが、ゲーム機について語るセッション
  • rebuild.fmを愛聴していて、かつ、ゲーム好きの私には俺得
  • 当日、急に告知があり、まさかと思い会場に入ったらほんとにゲーム機の話をしていた
    • iOSとはぜんぜん関係無い。だかそれが良い
  • ゲーム機のスペック資料を見てあれこれ話す仕組みは、「有田と週刊プロレスと」のようでした

DC18アプリ

  • 非公式のタイムテーブルアプリ。便利。
  • [バグ]24時間表示をオフにしていると、午後の予定が表示されない。
    • 本体設定に依存するところなので、テストしにくく、バグになりやすい
    • なぜバグに気付くかというと、仕事でカレンダーを扱っているので、暦関連のバグを見つけるため、本体設定を一般的ではないものにしているから
    • ここら辺のノウハウとかまとめても良いかもなあ(来年は改元もあるし)。
  • ちなみに、昨年(2017年)のアプリは、本体を和暦にしていると予定が表示されないバグがあった(のを見つけた)

やっててよかったスプラトゥーン

  • 懇親会でボッチの危機
    • 話題が無い…
    • (とりあえずビールと日本酒を飲んだ。美味しかったです。)
  • そのとき「ガチマッチが…」「ZAPが…」と会話している声が聴こえた
    • スプラトゥーンの話なら得意 → 話に混ぜてもらった
  • 結論:みんなSwitch買ってスプラトゥーン2やるべき くコ:彡

地方開催

  • iOSDCを福岡に招致したい」 というLTがあって、それは良いかもと思った
    • 「福岡に行ってみたい」「美味しいもの食べたい」というのが主な理由
  • 懇親会で「仙台は招致活動しないんですか?」と言われた
    • けど、大変そうですし、自分は招致活動はちょっと…
    • やる気がある若い人がいたら、応援したいです
    • 名乗り出てくださいッ!

FIFAランキングとイロレーティング

勤め先の社内勉強会で、ちょっとした統計の話題ということで、FIFAランキングとイロレーティングについて発表しました。 せっかくいろいろ調べたので、加筆してこちらにも書いておこうと思います。

FIFAランキング

FIFAランキング - Wikipedia

  • 国際サッカー連盟(FIFA)が発表している、ナショナルチームのランキング
  • 2018/7/19発表分から、ランキングの集計方法が変わる
  • 今後は「イロレーティング」を利用して集計されます
    • 日本の順位はおそらく40位くらいになります(現在は61位)
      • これまでの集計方法では、アジアやアフリカのチームは順位が上がりにくかった
      • 今回から地域の格差がなくなり、平等になります。
    • 7/19以降、「日本代表の順位がこんなに上がりました!」と報道されるかもしれませんが、「いやいや集計方法が変わったんだからそうでしょ」とツッコミましょう

イロレーティング

イロレーティング - Wikipedia

  • イロレーティングは直感的に分かりやすい統計手法で、対戦ゲームなどでも幅広く利用されています。

レーティングの仕組み

  • 平均的な強さのチームを1500点とする
  • 200点のレート差がある対局者間では、レートの高い側が約76パーセントの確率で勝利するように、点数をつける.
  • 自分よりレーティングが上の相手に勝つと、多くの点数を得られる。逆に自分よりレーティングが下の相手に勝っても、得られる点数は少ない

レーティング計算例

FIFAランキング - Wikipedia に掲載されている式で、実際に計算してみます。(各国のレーティングの数値は適当です。)

例1: 勝ち負けの場合

レーティング1700の日本🇯🇵が、1900のコロンビア🇨🇴と試合をして勝ちました。 (レーティング差200 = コロンビアの勝率0.76、日本の勝率は0.24)

  • 新🇯🇵 = 1700 + 50 * (1 - 0.24) = 1738
  • 新🇨🇴 = 1900 + 50 * (0 - 0.76) = 1862

例2: 引き分けの場合

レーティング1700の日本🇯🇵が、1800のセネガル🇸🇳と試合をして引き分けました。 (レーティング差100 = セネガルの勝率0.64, 日本の勝率は0.36)

  • 新🇯🇵 = 1700 + 50 * (0.5 - 0.36) = 1707
  • 新🇸🇳 = 1800 + 50 * (0.5 - 0.64) = 1793

集計しているサイト

サッカー

将棋

その他、スプラトゥーン2、動物タワーバトル、MJ(麻雀ゲーム)などオンラインゲームでも、これと似たようなレーティングシステムが(たぶん)使用されています