OmniAICreator/Qiita-1.07M huggingface dataset:
【情報セキュリティマネジメント試験】マルウェアについて

:::note info
「トロイの木馬」とは
あろ条件（特定のサイトに接続した場合など）になるまで活動しないで待機する。
感染機能がないマルウェア。
:::

:::note info
「ワーム」とは
自分自身の複製をコピーして増殖するマルウェア。
:::
:::note info
「ドライブバイダウンロード」とは
Webサイト閲覧時に密かにマルウェアをダウンロードする。
:::
:::note info
「ランサムウェア」とは
PCデータを暗号化する身代金マルウェア。
:::
:::note info
「バックドア」とは
サーバなどに不正侵入した攻撃者が、再度当該サーバに容易に侵入できるようにするために、密かに組み込んでおくプログラム。
:::
:::note info
「ルートキットとは」
バックドアなどの不正なプログラムを、隠蔽するための機能をまとめたパッケージツール。
:::
:::note info
「C＆Cサーバ」とは
PCをマルウェア（ボットネット）に感染後、別のコンピュータに不正アクセスや情報収集させるサーバ。
:::
:::note info
「ボットネットとは」
攻撃者に乗っ取られてその命令に従うコンピュータで構成されるネットワーク。
:::
:::note info
「ウイルス対策ソフト」とは
ウイルスを検知、駆除するソフトウェア

＜コンベア法＞
ウイルスの特徴を複数の検出方法を組み合わせて判断する方式。

＜チェックサム法/インテグリティチェック法＞
ファイルのチェックサム（ハッシュ値）を計算し、変更がないかを確認する方法。
ファイルやプログラムの整合性（インテグリティ）を確認することで、不正な変更や改ざんを検出する方法です。
検査対象に対して「ウイルスではないこと」を保証する情報（チェックサムやディジタル署名）を事前に付加しておき、
その情報の内容が変更されているなどの理由で、検査時にウイルスでないことの保証が得られない場合、ウイルスとして検出する方法。

＜パターンマッチング法＞
ウイルスの「シグネチャ（特徴的なパターン）」をデータベースに登録し、一致するものがあるかどうかをチェックする方法。

＜ビヘイビア法＞
ファイルやプログラムの動作を監視し、怪しい挙動があればウイルスと判断する方法。
:::
:::note info
「ゼロディ攻撃とは」
未知ウイルスによる攻撃で、対策ソフトがまた準備されていないもの。
:::
:::note info
「セキュリティパッチ」とは
ソフトウェア製品で新たな脆弱性を修正するプログラム。
対策漏れをなくすには、製品バージョン、前回の日時、IPアドレスなどの情報が必要。
:::
:::note info
「標的型攻撃」とは
特定個人を狙ってマルウェアに感染させる。
:::
:::note info
「MITB（Man-In-The-Browser：マン・イン・ザ・ブラウザ）」とは
インターネットバンキングサイト上で利用者が振込操作を行うとき、マルウェアが操作内容を改ざんすることで、振込金額を詐取しようとする攻撃。

＜対策＞
トランザクション署名を使用する

＜トランザクション署名とは＞
インターネットバンキングなどで、振込操作（これをトランザクションという）をディジタル署名を使って暗号化し、トランザクションの内容が改ざんされていないかをサーバで確認する。
:::
:::note info
「APT（Advanced Persistent Threat：高度持続的脅威）」とは？
特定の組織や個人を標的にして、長期間にわたって執拗に攻撃を行うサイバー攻撃のことです。通常のマルウェアやウイルスとは異なり、高度な技術を用い、時間をかけて慎重に情報を盗み出そうとする攻撃。
:::

:::note alert
「サーバにバックドアを作り、サーバ内で侵入の痕跡を隠蔽するなどの機能を持つ不正なプログラムやツールのパッケージはどれか？」
:::
:::note warn
答え：
rootkit（ルートキット）

＜誤り＞
「RFID（無線周波数識別）」
電波を利用してタグに記録された情報を読み取る技術です。
・ICチップを内蔵したタグ（RFタグ）と、それを読み取るリーダーで構成される。
・物流管理、入退室管理、電子マネーなどで利用される。
・非接触でデータの読み書きができるため、バーコードよりも便利だが、情報の盗み見や不正コピーのリスクがある。

「TKIP（一時鍵完全性プロトコル）」
WPA（Wi-Fi Protected Access）で使われる暗号化方式の一つ。
Wi-Fiのセキュリティに関する問題として出題される。

「Web Beacon（ウェブビーコン）」
Webページやメールに埋め込まれた小さな画像やスクリプトを利用して、ユーザーの行動を追跡する技術。
:::
:::note alert
「ウイルス検知におけるビヘイビア法に分類されるものはどれか？」
:::
:::note warn
答え：
検査対象をメモリ上の仮想環境下で実行して、その挙動を監視する。

＜誤り＞
「あらかじめ検査対象に付加されたウイルスに感染していないことを保証する情報と、検査対象から算出した情報とを比較する。」

→ コンベア法（シグネチャ法）

ソフトウェアに事前に付与された「改ざんされていないことを保証する情報」と比較することで、改変がないかを確認する。
例えば、ソフトウェアの開発元が発行する電子署名やデジタル証明書が該当する。

「検査対象と安全な場所に保管してある原本とを比較する。」

→ インテグリティチェック法（整合性検査）

安全な場所に保存した「元の正しいデータ」と比較して、改ざんの有無を確認する。
ファイルやプログラムが不正に変更されていないかをチェックするために使われる。

「検査対象のハッシュ値と既知のウイルスファイルのハッシュ値とを比較する。」
→ パターンマッチング法（ハッシュベース検知）

既知のウイルスのハッシュ値（MD5, SHA-256 など）をデータベースに保存し、検査対象のハッシュ値と照合することでウイルスを検出する。
:::
DNS記事集：DNSや名前解決周りについての記事が増えすぎたので、このあたりで一度整理してみた

## はじめに

DNSについての記事があちこちに散らばっていたので、スクラップして整理してみました。
今回の内容については、個人的な備忘録になりますので、ご了承ください。

## 過去の記事を気軽にスクラップしてみた

**Windows Server 2022で自宅ネットワークにADサーバーを構築し、Windows 10端末をドメインに参加させる方法**

https://qiita.com/free-honda/items/2fcdc8343aa878c17d9e

**自宅環境のWindows Server 2022を使ったDNS構築と名前解決の技術検証**

https://qiita.com/free-honda/items/807b36c839f49d7bdb47

**自宅環境のWindows Server 2022を使ったDNSフォワードの設定と名前解決検証**

https://qiita.com/free-honda/items/c19de4dd7930dd258c96

**DNSキャッシュとnslookupの使い方：DNSサーバーの変更方法と名前解決の基本を解説**

https://qiita.com/free-honda/items/c806d24f127128db760b

**技術検証：MacBook上でBINDを用いたDNSサーバーの構築と名前解決の検証**

https://qiita.com/free-honda/items/3059aa2627f4aa92bfda

**AWS Certificate Manager (ACM)：お名前.comでのCNAMEレコード追加から証明書発行までの手順**

https://qiita.com/free-honda/items/ee77d4ad7a0617470cb7

**初心者向け：AWS Route 53 を使い、お名前.com の独自ドメインを紐付けてブラウザからアクセスする検証**

https://qiita.com/free-honda/items/7a1fa3336273c3b7cfab

**初心者向け：AレコードやCNAMEレコードなど主要DNSレコードの役割と設定方法**

https://qiita.com/free-honda/items/b000e120478381291b3e

**初心者向け：お名前.comで購入したドメインをAWS ACMとRoute53でSSL証明書を取得する手順**

https://qiita.com/free-honda/items/8fb5124ae36616d64dd1

**技術検証：自宅のDNSサーバーからAWS上の外向けDNSサーバー経由で、GoogleパブリックDNSにフォワードしてみた**

https://qiita.com/free-honda/items/63a13a0e9fbab86d670c

**個人的な備忘録：Cloudflareが提供する最速DNS「1.1.1.1」を試したところ、インターネットが驚くほど速くなった話**

https://qiita.com/free-honda/items/70cc63efe1bfa569a44c

**個人的備忘録：ハッカソンで作成予定の CloudFront & ALB の Route 53 設定を自分なりにまとめた**

https://qiita.com/free-honda/items/cd7c4529b03ed9d75c3d

**個人的な備忘録：Route 53 のホストゾーン無料ルールを記事としてアウトプットしてみた**

https://qiita.com/free-honda/items/1fa8627e920bf35cd2ad

**個人的な備忘録：FQDN（Fully Qualified Domain Name）について、DNSとの関係から実際の取得方法まで説明してみた**

https://qiita.com/free-honda/items/a3ab838b1ab1c3f3da40

****

## まとめ

今回は、自分自身を改めて整理する機会となりましたが、その中で過去の記事のメンテナンスも行うことができました。

最近は記事投稿などのアウトプット量が増えてきているからこそ、振り返る時間を持つことの大切さを改めて実感しました...！
Home Assistant と IKEA照明（Dirigera）の接続

## はじめに
私の自宅では、スマート照明としてIKEAの電球とハブを使用して、スマートホーム化を図っている。
Home Assistantを導入するにあたり、IKEA照明との接続方法の日本語記事がなかったので、簡単に記していく。

自宅に導入しているデバイス
[DIRIGERA ディリフィエラ IKEAのスマート製品用のハブ](https://www.ikea.com/jp/ja/p/dirigera-hub-for-smart-products-white-smart-10503411/)
[TRÅDFRI トロードフリ IKEAのスマート電球](https://www.ikea.com/jp/ja/p/tradfri-starter-kit-smart-wireless-dimmable-white-spectrum-30547584/)

## 準備したもの
- Home Assistant
    - 我が家では、[この記事](https://www.core-da-core.com/home-assistant-install/)を参考にラズパイ4の上に構築した
- IKEAのスマート電球
    - DIRIGERA（IKEAのスマート製品用のハブ）
    - TRÅDFRI（IKEAのスマート電球）
- iPhone 16
- [IKEAホームアプリ](https://www.ikea.com/jp/ja/product-guides/ikea-home-smart-system/)
    - IKEAホームアプリ上では電球とペアリング済み

## 手順
matter規格のおかげで非常に簡単に接続ができた

1\. Home Assistant上で、設定 > デバイスとサービス > 統合を追加 をクリック
2\. Matter デバイスの追加 をクリック
3\. デバイスはすでに別の Matter コントローラーに追加されていますか?と聞かれる。すでにアレクサと接続していた記憶があるので、「いいえ」を選択した
4\.「その他のコントローラー」を選択
5\.セットアップコードを入力という画面が表示される

ここからはIKEAアプリ上での手順
6\. 人型のアイコンで、設定画面を開く
7\. 画面上にある、DIRIGERAハブを選択
![IMG_0958.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919555/b520d8b1-ba72-4d04-b653-75a4b9de7441.png)
8\.統合を選択
9\. Matterブリッジ > Matterブリッジを作成を選択
10\. 画面上にQRコードが表示されるので、その下にある数字をHome Assistantのセットアップコードに入れれば接続は完了です。
作業等における上司と部下の判断基準や提案のまとめ

ただのノートです。特に参考にしないでください。


# 作業における上司と部下の判断基準

AまたはBの判断を行う（作業者の技量に左右される）。

自力で判断できないものは上司に依頼する。 
例：コスト、期間など、上司にしか分からない事項。

運用保守の場合、保守業務に相当しないものについては上司に相談する必要がある（保守業務を超えて開発業務など）。

BPにおいては、費用が発生する業務は勝手に進めることができない（必ず上司に相談する必要がある）。

## 判断する際のポイント

費用をまず比較する必要がある（どちらがコスパが良いかを検討する）。

必要な情報を集め、「何の情報があれば判断できるか？」を把握することが重要。

A, B, Cの実装がある場合、特定の案（例：A）を選ばせたい場合には、Aを正直ベースで魅力的に見せることで誘導することも可能。 補足：「上司に決定させた」という事実を重視する場面が多い。

作業によっては自力で判断が求められるケースもある 

## 判断基準

自分が納得できるかどうか。

この判断で相手を説得できるか。

## 具体例

期限が3/30で3/29時点の進捗が70%の場合：

### 解決策

人を増やす → 自分は納得できないが、相手を説得できそう。

作業を減らす → 自分は納得できるが、相手を説得できるか不明。

やらない → 自分は納得できるが、相手を説得できるか不明。

### システムとしての判断基準

要件を達成できているか。 例：自動販売機の場合

お金を入れると飲料のみが排出される状態：そのままだと誰も使いたがらない。

最低限の機能で運用可能な状態であれば、先延ばしを提案することもできる可能性がある。

報告の基準

PG → SEへの報告

詳細な報告も可（例：どこのシステムのどの処理でエラーが発生しているか）。

SE → PMへの報告

聞いた内容を期間、コストのベースで要約する。
「このペースで終了できるか・できないか」について報告や相談を行う。
ZENRINMapsAPI OAuth2.0でデータ取得してみる

# はじめに
この記事は ZENRIN Maps APIからOAuth認証を使用して地図情報を検索したい人のための記事です


ZENRIN Maps API
[無料トライアルページ](https://www.zenrin-datacom.net/solution/zenrin-maps-api/trial?fm_cp=6757baf3203e3a00bb118509&fm_mu=67a99dd5780cda0d585f6bac&utm_campaign=6757baf3203e3a00bb118509&utm_medium=else&utm_source=Qiita73)
2ヶ月間無料で利用できます


# 利用ツール
ブラウザの拡張機能を使用して地図情報を取得してみます
（今回使用したブラウザはChrome

**Talend API Tester**

https://chromewebstore.google.com/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm

ブラウザに拡張機能をインストールしておきます


# OAuth2.0認証の有効化
### ウェブコンソールからOAuth2.0認証を有効にする
[検証環境コンソール](https://test-console.zmaps-api.com/)

![cc07c69258ddbfaf6644-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4001795/9db4ba33-08fa-41b5-8bd5-3fca49bd80c1.png)

### APIキーとclient_id/client_secretを取得

![cc07c69258ddbfaf6644-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4001795/6c8c9041-a514-41c8-93b0-226f9b8e5896.png)

以下をメモっておきます
- APIキー
- client_id
- client_secret


# データ取得の手順
## 1. OAuth2.0認証 トークン取得
まず、API検索に必要なtokenを取得する

https://developers.zmaps-api.com/v20/reference/webAPI/oauth2/token.html

### ブラウザで Talend API Tester を開く

![cc07c69258ddbfaf6644-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4001795/f1e40752-9b3b-498f-9948-ad38869a2ef6.png)


### 認証情報を設定する
左下の鍵マーク"Add Authorization"をクリック
![cc07c69258ddbfaf6644-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4001795/e04d8c99-6c90-4069-8c35-52aacc8a2792.png)

![cc07c69258ddbfaf6644-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4001795/3e1295d7-2be5-42d2-9e5f-e730d1d2e56d.png)

フォームが表示されるので、
メモっておいた**client_id**と**client_secret**を設定すると、
base64エンコードなどの処理を自動でし、次項の送信パラメータに設定してくれます

### 必要な送信パラメータを設定する

![cc07c69258ddbfaf6644-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4001795/5f4966ee-916b-4c3d-a27b-109c8480970a.png)

METHOD：POST
URL：https://test-auth.zmaps-api.com/oauth2/token

HEADERS：
　Authorization：(自動入力されているはず ※変更する場合は右の鍵マークをクリック
　Content-Type：application/x-www-form-urlencoded

BODY：
　grant_type=client_credentials

### tokenを取得する
![cc07c69258ddbfaf6644-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4001795/b2991404-1edd-44ec-9154-ae2d7b401e03.png)

「Send」をクリックすると設定が正しければ**access_token**を取得できるのでメモっておく
※取得したtokenは1時間有効


## 2. データ取得
取得したtokenを使用して、APIからデータを取得します
今回は [住所検索](https://developers.zmaps-api.com/v20/reference/webAPI/address.html) を試します

https://developers.zmaps-api.com/v20/reference/webAPI/address.html

### Talend API Tester に必要項目を設定する
![cc07c69258ddbfaf6644-8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4001795/01c8630b-4192-4fdc-bf9c-4f211a42adab.png)

METHOD：POST（GETでも可
URL：https://test-web.zmaps-api.com/search/address
　※token取得とドメインが違うので注意

HEADERS：
　x-api-key：APIキー
　Authorization：Bearer [token]
　Content-Type：application/x-www-form-urlencoded

BODY：(APIの種類によって必須項目が異なります)
　word：試しに "東京都港区" を

### APIにリクエストしデータを取得する
任意のパラメータを設定したら「Send」をクリック
json形式で住所データを取得できます

# まとめ
APIで地図情報を検索する流れは、
1. まずtokenを取得
2. そのtokenを使って地図情報を取得する


次回はPythonを使ってAPIからデータを取得してみようと思います
Pythonのdataclassを使った簡単で効率的なクラス設計

## Pythonのdataclassを使った簡単で効率的なクラス設計
Pythonには、データを保持するためのクラスを簡潔に作成できるdataclassという便利な機能があります。dataclassは、特に多くの属性を持つオブジェクトを作成する際に役立ちます。この機能を使うことで、従来のクラス作成よりもシンプルで可読性の高いコードを書くことができます。

この記事では、dataclassの基本的な使い方とそのメリットについて解説します。

### dataclassとは？
dataclassはPythonの標準ライブラリdataclassesモジュールに含まれているデコレータで、クラスの定義を簡素化するために使用されます。通常のクラスであれば、__init__メソッドや__repr__メソッドを自分で実装する必要がありますが、dataclassを使うと、それらを自動で生成してくれます。

#### 使い方
まず、dataclassを使用するためには、dataclassesモジュールからdataclassデコレータをインポートする必要があります。基本的な構文は次の通りです。

```python
from dataclasses import dataclass

@dataclass
class Person:
    name: str
    age: int
    email: str
```
このように@dataclassデコレータを使うと、Pythonが自動的に__init__、__repr__、__eq__（必要に応じて）などを生成してくれます。

#### 自動生成されるメソッド
__init__: dataclassは、クラス定義時に指定されたフィールドに基づいて自動的に__init__メソッドを生成します。このため、手動でコンストラクタを書く必要はありません。
```python
p = Person("Alice", 30, "alice@example.com")
```
__repr__: dataclassは__repr__メソッドも自動で生成し、クラスのインスタンスを表示する際に、各フィールドの値を分かりやすく表示します。
```python
print(p)  # Person(name='Alice', age=30, email='alice@example.com')
```
__eq__: dataclassはフィールドの値が等しいかどうかを比較する__eq__メソッドも自動的に生成します。
```python
p1 = Person("Alice", 30, "alice@example.com")
p2 = Person("Alice", 30, "alice@example.com")
print(p1 == p2)  # True
```
__hash__ (オプション): dataclassのインスタンスをハッシュ可能にしたい場合は、@dataclass(frozen=True)を指定することで、__hash__も自動的に生成されます。
```python
@dataclass(frozen=True)
class Point:
    x: int
    y: int

p1 = Point(1, 2)
p2 = Point(1, 2)
print(p1 == p2)  # True
```

### dataclassのメリット
1. コードの簡潔化
dataclassを使うことで、従来のクラスで必要だった__init__や__repr__の定義を省略できます。これにより、クラスの定義がシンプルになります。特に、多くの属性を持つクラスを作成する場合に効果的です。

2. 可読性の向上
dataclassを使うことで、クラスのフィールドとその型が明確に示されるため、クラスの構造が一目でわかります。特に大量の属性がある場合でも、どんなデータを保持しているクラスなのかがすぐに理解できるようになります。

3. ミスの削減
手動で__init__や__repr__などを実装する際には、フィールド名や順番を間違えることがありますが、dataclassを使うことでこのようなヒューマンエラーを避けることができます。

4. 追加機能のサポート
dataclassには、より高度な機能もサポートされています。例えば、dataclassにdefaultやdefault_factoryを使ってフィールドの初期値を設定したり、frozen=Trueを使ってイミュータブルなインスタンスを作成することができます。

## まとめ
dataclassは、Pythonでクラスを定義する際に非常に役立つツールです。自動で__init__や__repr__を生成してくれるため、コードの簡潔化と可読性の向上が図れます。また、フィールドに対してデフォルト値や型を指定したり、イミュータブルなオブジェクトを作成したりすることができ、柔軟に使いこなすことができます。
PythonのEnumを使った定数の定義と活用方法

## PythonのEnumを使った定数の定義と活用方法
Pythonのenumモジュールを使用することで、プログラム内で使用する定数を簡潔に管理でき、可読性の高いコードを書くことができます。Enumは列挙型とも呼ばれ、特定の名前に対して定数値を設定するために使われます。これにより、数値や文字列を単なる値として扱うのではなく、意味のある名前を付けてプログラムの可読性を向上させることができます。

この記事では、Enumを活用した定数の定義方法を、実際のコード例を交えながら説明します。

### Enumの定義
まず、Enumを使って定数を定義する方法を見てみましょう。
```python
from enum import Enum

class PlanType(Enum):
    BASIC = 1
    PREMIUM = 2
    ENTERPRISE = 3
```
上記のコードでは、PlanTypeというEnumクラスを定義し、3つの定数（BASIC, PREMIUM, ENTERPRISE）にそれぞれ数値を割り当てています。

### Enumメンバーのアクセス
定義したEnumメンバーには、名前または値でアクセスできます。
```python
# メンバー名でアクセス
print(PlanType.BASIC)  # PlanType.BASIC

# 値でアクセス
print(PlanType(2))  # PlanType.PREMIUM
```

### Enumの名前と値の取得
各メンバーには、name（名前）やvalue（値）というプロパティが自動で付与されます。
```python
plan = PlanType.BASIC
print(plan.name)  # BASIC
print(plan.value)  # 1
```

### Enumを使うメリット
Enumを使うことで、プログラム内で使用する定数に名前を付けることができ、ハードコーディングされた数値や文字列を避けることができます。これにより、コードの可読性が高まり、ミスを減らすことができます。

### Enumに追加の属性やメソッドを持たせる
Enumのメンバーには追加の属性やメソッドを持たせることもできます。例えば、plan_nameやcodeなどの属性を持つEnumを作成して、定数に関連するデータをまとめて扱うことができます。

以下の例では、各プランに名前とコードを設定しています。
```python
from enum import Enum
from flask import abort

class PranType(Enum):
    """
    プラン変更の種別
    """
    BASIC = ("普通", 31)
    HI_SPEC = ("高品質", 41)
    LOW_SPEC = ("低品質", 33)


    def __init__(self, plan_name, code):
        self.plan_name = plan_name
        self.code = code

    @classmethod
    def from_plan_name(cls, plan_name):
        # plan_nameに一致するプランを取得する
        for plan in cls:
            if plan.plan_name == plan_name:
                return plan.code
        # 該当するプランがない場合はエラーを返す
        abort(400, f"{plan_name} に対応するプランが見つかりません")
```
####  各メンバーに属性を追加する
上記のコードでは、SecureVdiTypeというEnumクラスに、plan_name（プラン名）とcode（プランコード）の2つの属性を持たせています。これにより、各プランに関連する情報を1つのEnumメンバーとしてまとめて管理できます。

例えば、from_plan_nameというクラスメソッドを使って、プラン名から対応するプランコードを取得することができます。
```python
# 使用例
plan_name = "普通"
plan_code = PranType.from_plan_name(plan_name)
print(plan_code)  # 31
```
from_plan_nameメソッドでは、指定されたプラン名に一致するEnumメンバーを検索し、対応するcodeを返します。もし一致するプランが見つからない場合は、HTTP 400エラーを発生させます。

## まとめ

Enumは、定数の管理をより整理された方法で行えるようにするための強力なツールです。Enumを使うことで、プログラム内で使用する定数を意味ある名前で管理でき、可読性が向上し、ミスを防ぐことができます。また、Enumメンバーに属性やメソッドを追加することで、関連するデータを1つのクラス内で効率的に管理することができます。
PythonでLambda関数を非同期で呼び出す方法

## PythonでLambda関数を非同期で呼び出す方法
AWS LambdaをPythonから非同期で呼び出す方法について説明します。AWS Lambdaはサーバーレスのコンピューティングサービスで、コードをイベント駆動型で実行できます。Lambdaを非同期に呼び出すと、呼び出し元がLambda関数の実行結果を待たずに次の処理に進むことができます。これを利用することで、システム全体の効率性を向上させることが可能です。

### 前提条件
AWS SDK for Python (boto3) がインストールされていること
AWSの認証情報（アクセスキー、シークレットキー）が設定されていること

```bash
pip install boto3
```

### Lambda関数の非同期呼び出し
Lambda関数を非同期で呼び出すには、boto3ライブラリのinvokeメソッドを使用します。非同期呼び出しは、InvocationTypeパラメータをEventに設定することで実現できます。
#### サンプルコード
以下のコードでは、Lambda関数を非同期で呼び出し、その前後でログを出力しています。

```python
import boto3
import json
import logging

# ロガーの設定
app = logging.getLogger()
app.setLevel(logging.INFO)

def invoke_lambda_async(function_name, pay_load):
    # 関数実行開始のログ
    app.logger.info("Lambdaの関数を実行開始 function_name:%s pay_load:%s", function_name, pay_load)

    # Lambdaクライアントを作成
    client = boto3.client("lambda")

    # payloadをJSON形式に変換
    json_pay_load = json.dumps(pay_load)

    # Lambdaを非同期で呼び出し
    response = client.invoke(
        FunctionName=function_name,         # 呼び出すLambda関数の名前
        InvocationType="Event",             # 非同期実行
        Payload=json_pay_load,              # 送信するペイロード（JSON形式）
    )

    # 実行終了のログ
    app.logger.info("Lambdaの関数を実行終了 function_name:%s response:%s", function_name, response)

# サンプルのペイロードと関数名
function_name = "myLambdaFunction"
pay_load = {"key": "value"}

invoke_lambda_async(function_name, pay_load)
```

#### 説明
##### ロガーの設定
loggingモジュールを使って、関数実行前後のログを記録しています。

##### boto3.client("lambda")
AWS Lambdaを操作するためのクライアントを作成します。このクライアントを使用してLambda関数を呼び出します。

##### client.invoke()
invokeメソッドを使ってLambda関数を呼び出します。重要な点は、InvocationTypeにEventを指定していることです。これにより、非同期実行が行われます。

##### InvocationType="Event"
非同期実行を指定するために、InvocationTypeをEventに設定します。これによって、呼び出し元はLambda関数の結果を待たずに処理を進めることができます。

##### Payload=json.dumps(pay_load)
Lambda関数に送るデータ（ペイロード）は、json.dumps()でJSON形式に変換して渡します。

##### ログ出力
Lambda関数の呼び出し前後にログを出力して、実行の開始と終了を確認できるようにしています。

### まとめ
AWS Lambdaの非同期呼び出しは、システムの効率性を高めるために非常に有用です。boto3ライブラリを使って、簡単にLambda関数を非同期で実行することができます。非同期実行は、処理をブロックせずに次のアクションを進めることができるため、パフォーマンスやユーザー体験の向上に役立ちます。
数値を含んだ文字列の比較（.NET 10）

## 参考
この記事は、以下の動画を参考にしています。
詳しくは、動画をご覧ください。

<iframe width="560" height="315" src="https://www.youtube.com/embed/YJCdCpib23I?si=9mfV1ozN9vNGjLzp" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

リファレンス

https://learn.microsoft.com/en-us/dotnet/api/system.stringcomparer?view=net-10.0

https://learn.microsoft.com/en-us/dotnet/api/system.globalization.compareoptions?view=net-10.0

## “Windows 7”は“Windows 11”よりも大きい
通常の文字列比較は、先頭の文字から順に比較して、同じ文字でなければ、そこで大小が決まります。

文字列の中に数値の部分が含まれていても、単純に前から順に比較しますので、「7」は「11」よりも大きくなります。
```cs
var items = new []
{
    "Windows 7",
    "Windows 11",
    "Windows 08",
};

var orderedItems = items.Order();
Console.WriteLine(string.Join(", ", orderedItems));
// Windows 08, Windows 11, Windows 7
```

## CompareOptions.NumericOrdering
.NET 10から、文字列の中の数値の部分を数値として比較するオプションを、指定できます。

`System.Globalization.CompareOptions.NumericOrdering`をオプションに与えて`System.StringComparer`クラスのオブジェクトを生成し、比較の際にこのオブジェクトを使います。
```cs
var items = new []
{
    "Windows 7",
    "Windows 11",
    "Windows 08",
};

// StringComparerを生成し
var comparer = StringComparer.Create(CultureInfo.InvariantCulture, CompareOptions.NumericOrdering);
var orderedItems = items.Order(comparer); // 比較の際に使う
Console.WriteLine(string.Join(", ", orderedItems));
// Windows 7, Windows 08, Windows 11
```

文字列をキーとする辞書も、キーの比較に`StringComparer`を使うことができます。
```cs
// StringComparerを生成し
var comparer = StringComparer.Create(CultureInfo.InvariantCulture, CompareOptions.NumericOrdering);
var dictionary = new Dictionary<string, Guid>(comparer) // 比較の際に使う
{
    ["05"] = Guid.NewGuid(),
};

Console.WriteLine(dictionary["5"]); // この値と
Console.WriteLine(dictionary["05"]); // この値は、同じ
```
EC2にDNSサーバを構築してRoute53インバウンドエンドポイントへのフォワードを試す

# 内容
オンプレミスのDNSサーバにフォワード設定後、Route53のインバウンドエンドポイントに特定ドメインの名前解決を転送する設定を行うことがあると思います。オンプレミス側のDNSサーバ想定環境を作成して、DNSサーバでフォワード設定を行った際の動きを見てみます。DNSサーバはLinux環境にbindをインストールします。

# 構成
下記の図でEC2がオンプレミス側のDNSサーバ想定環境になります。ECサーバ内部からRoute53のプライベートホストゾーンに登録されたwww.gov.xxx.co.jpという名前解決を行う検証となります。EC2サーバ内部からの名前解決の流れは下記になります。

![dns01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/8839b4bf-8631-48a2-b165-688fa1a45836.png)

* EC2サーバから`nslookup www.gov.xxx.co.jp`コマンドを実行します。
* `/etc/resolv.conf`には問合せ先のDNSサーバを指定します。EC2内に構築したDNSサーバに問合せを行うため、ここはEC2サーバのローカルのIPアドレスとなります。
* `nslookup www.gov.xxx.co.jp`コマンドを実行した際、`/etc/resolv.conf`を参照し、172.20.1.10(ローカルにインストールされたDNSサーバ)に名前解決のリクエストを送信します。
* DNSサーバには`gov.xxx.co.jp`はインバンドエンドポイントに転送するといったルールを記載します。
* インバウンドエンドポイントに転送後、Route53のホストゾーンからＡレコードを取得します。

# 環境構築

## 前提
* プライベートホストゾーンが作成済みである。
* インバウンドエンドポイントが作成済みである。
* VPCおよびEC2が作成済みである。
* セキュリティグループ、ルートテーブルの設定などが適切にされている。

上記準備が完了している状態でEC2にbindのインストール、設定を行っていきます。

## 構築

* bindのインストール

```shell
yum install -y bind bind-utils
```

* bindの設定
 listen-on port 53にEC2のIPアドレスを設定します。またgov.xxx.co.jpをDNSインバウンドエイドポイントに転送するためのZoneを記述します。

```shell
vim /etc/named.conf

options {
    listen-on port 53 { 127.0.0.1; 172.20.1.10; };
    listen-on-v6 port 53 { none; };
    directory       "/var/named";
    dump-file       "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    allow-query     { any; };
    dnssec-enable no;
    dnssec-validation no;
};

zone "gov.xxx.co.jp" IN {
    type forward;
    forward only;
    forwarders { 172.20.1.20; 172.20.1.30; };
};
```

* namedの再起動

```shell
systemctl restart named
```

* リゾルバの設定
EC2サーバ内から名前解決する時、問合せ先のDNSサーバを指定します。VPC内のデフォルトDNSサーバが設定されているため、EC2のIPアドレスに設定します。

```shell
vi /etc/resolv.conf
nameserver 172.20.1.10
```

* 名前解決出来ることを確認

```shell
nslookup www.gov.oce.co.jp
Server:         172.20.1.10
Address:        172.20.1.10#53

Non-authoritative answer:
Name:   www.gov.xxx.co.jp
Address: 172.20.1.40
```
ゼロを多く含むデータに対するベイジアンABテスト

購買金額を向上させるキャンペーンなどでは，以下のように結果の値が0を多く含むケースがあると思います．

![histogram_of_zero_inflated_data_sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670764/49176929-8758-4251-9b48-cc74fd61023b.png)

このようなケースでABテストをやる場合，単純に平均の差に対する検定もできると思いますが，0か0でないかという重要な情報が考慮できません．一方で，0でない比率の差の検定も考えられますが，購買金額の向上効果が考慮できません．

ベイズの枠組みであれば，0か0でないかという情報と購買金額を同時に考慮したモデリングが可能です．また，ベイジアンABテストの枠組みがそのまま利用できます．

本記事では0を多く含むデータに対するABテストのための簡単なパッケージを作成したため，解説します．コードは以下に置いています．

https://github.com/Kuno3/zero_inflated_bayesian_ab

# モデル
このパッケージでは値が以下のようなゼロ過剰対数正規分布に従うと仮定します．A群とB群の分布は同様のため，A群について説明します．
```math
y_A \sim (1-\pi_A)\delta(y_A) + \pi_A \mathcal{LN}(\mu_A, \sigma_A^2)
```
ここで$\delta(y)$はデルタ関数で，$\mathcal{LN}(\mu, \sigma^2)$は対数正規分布の確率密度関数です．対数正規分布の確率密度関数は以下です．この分布とデルタ関数を$\pi_A$対$1-\pi_A$の比率で混ぜ合わせた分布が上記のゼロ過剰対数正規分布です．
![pdf_of_lognormal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670764/b841a2e2-35b5-4262-aa1b-896e6cb919d9.png)


また，事前分布は以下のようなものを仮定します．
```math
\begin{align*}
\pi_A &\sim \mathcal{B}(\alpha_A, \beta_A) \\
\mu_A &\sim \mathcal{N}(\theta_A, \sigma_A^2 / \lambda_A) \\
\sigma_A^2 &\sim \mathcal{IG}(a_A, b_A)
\end{align*}
```
ここで，$\mathcal{B}(\alpha, \beta)$はベータ分布で，$\mathcal{N}(\theta, \sigma^2)$は正規分布，$\mathcal{IG}(a, b)$は逆ガンマ分布です．

# 何ができるか
このパッケージは以下のような使い方ができます． 
```Python
# パッケージをインストール
!pip install git+https://github.com/Kuno3/zero_inflated_bayesian_ab
# インポート
from zero_inflated_bayesian_ab.zero_inflated_bayesian_ab import (
    zero_inflated_bayesian_ab,
)

# モデルにA群とB群のデータを渡す
model = zero_inflated_bayesian_ab(data_A, data_B)
# サンプリングを実施
model.sampling(100000)
# 推定結果のサマリを出力
model.summary()
```

サンプルとして以下のようなデータを入力してみます．
![input_data_example.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670764/a54f741d-d439-4436-b495-067fa2da8508.png)

summary()という関数では，以下を出力します．※1と3はサンプリングベースで推定しています．
1. $Y_A-Y_B$の確率
2. ゼロでない確率の比較
3. 0より大きいときの値の確率（x軸は対数軸です）

![summary_example.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670764/a2d7ac60-05ca-403d-86e2-6fb0a5a27a7e.png)
ESP32のカメラ開発で参考にしている記事

https://randomnerdtutorials.com/esp32-cam-ov2640-camera-settings/

https://intellectualcuriosity.hatenablog.com/entry/2024/03/21/215308

https://www.mgo-tec.com/blog-entry-esp32-ov2640-ssd1331-test1.html/3
【イベントレポート】JAWS-UG朝会 #67 #jawsug_asa

いつも記事を読んでいただきありがとうございます！
モブエンジニア（[@mob-engineer](https://qiita.com/mob_engineer))です！

今回は2025.03.11（火）に開催した**JAWS-UG朝会 #67**へ参加しましたので、アウトプットとしてイベントレポートを執筆しました。

初学者でもサクッと読めるように平易な表現で執筆しておりますので、お気軽に読んでいただければ幸いです。

:::note info
誤字脱字、わかりづらい表現に関しては極力なくすように心がけていますが、リアルタイムで執筆しているため、誤字脱字があるかもしれません。
:::

:::note info
途中参加のため、最初のセッションは一部執筆できていませんのでその点ご留意ください。
:::

# 目次
- セッション
    - セッション① データの民主化を目指す Q in QuickSight トピックの使い方
    - セッション② Q Developerの最新動向
- LT
    - LT① プレゼンをAIに任せてみた
    - LT② AWS ECSでサービス間通信についておさらい
    - LT③ Amazon Q Developer 活用の進め
- まとｍ

## セッション

### セッション① データの民主化を目指す Q in QuickSight トピックの使い方

#### 登壇資料

https://dev.classmethod.jp/articles/q-in-quicksight-topics-for-democratising-data/

- QuickSightのトピック操作
    - トピック=データセットに含まれる情報がどういうものでどんな意味を持つものか示す
    - 元となるデータセットを作成してみる
    - データセット作成後、トピックを作成することができる
    - シノニム：社内特有の用語をAmazon Qが解釈するためのフラグ
        - 略語、専門用語で使うイメージなのかしら
    - 顧客満足度評価などの加算処理が意味を持たないものの処理も可能

### セッション② Q Developerの最新動向
- 自己紹介
    - Storage JAWS運営の方
    - 日本IBM所属のエンジニアの方
- 1 hour Per day
    - 開発者がコーディングに利用している時間は1時間くらい
    - 開発者体験の向上としてAmazon Q Developerが生まれた
- Amazon Q Developer
    - 2023年にプレビュー機能として発表
    - 当初はCode Whispererの補助機能として提供された
    - チャット、CLI操作、運用調査機能などを有している
    - チャットで確認できるのはベストプラクティス、機能、シューティングなど
    - SAP認定問題であっても正しく理解してくれる
- 運用調査機能
    - 実際にCPUに負荷をかけて運用調査した結果
    - Amazon Q Developerに分析させたら根本原因含め検討してくれる
- IDE機能
    - /devで簡単なアプリを開発することも可能
    - 要望に沿っていない（コンテナ実行方法）場合、修正要望を出せばプロンプトを出してくれる
- コマンドライン
    - CLI実行までAmazon Q Developerが行ってくれる
    - コード分析、ドキュメント生成、コードリファクタリングもできる
    - COBOL資産に関しても変換はできるが、BluAgeランタイムが必須となるためBluAgeに依存してしまう
    - Proを利用するためにはOrganizationを利用する必要がある
- 質疑応答
    - IDEとして何を利用するのがおすすめなのか
        - VSCodeが一番環境として整っている

## LT

### LT① プレゼンをAIに任せてみた
- 自己紹介
    - いばらき支部運営の方
    - 2024 All Certの方
- プレゼンをAIに任せてみた
    - プレゼン資料の説明：Amazon Bedrock
    - 音声：Amazon Polly
- プレゼン作成
    - システムプロンプト（役割）とユーザプロンプト（依頼）を入れる
    - 入力テキストが生成されるため、Amazon Pollyに入れれば音声化してくれる
    - ユーザプロンプトを調整すればいい感じのプレゼンシナリオを生成してくれる
        - 説明だけでなく動きも教えてくれる

### LT② AWS ECSでサービス間通信についておさらい
- 自己紹介
    - AWSが好きな会社のクラウドエンジニアの方
- ECSのサービス間通信
    - ざっくり言えばコンテナ～コンテナ間の通信のこと
    - サービス間通信を実現するために以下機能が必要
        - サーキットブレイカーなど
    - AWSサービスで通信を行う方法として5種類あるが
        - AWS App Meshは2026年9月にサービス終了
        - ECS Service Discoveryは名前解決機能のみ
- シナリオ
    - Service AからServiceBへ通信する場合
        - ECS Service Connectによる通信の場合GUI操作でできる
        - HTTPS通信に関しても実現可能
        - （個人的考察）コンテナ回りも触らないとなぁ

### LT③ Amazon Q Developer 活用の進め
- 自己紹介
    - NECソリューションイノベータ所属のエンジニア
    - 最近では生成AI、CDKを触っている
- Amazon Q Developer
    - 一般的な生成AIツールとは毛色が違う
    - マイグレーション支援なども実現できる
    - AWSの中の人がどのように利用しているかre:Invent内で説明されている
        - Amazon Q特有の機能（障害調査、エラー診断など）を使いこなしている
- おまけ
    - Amazon Q CLI × Amazon Q Developerを掛け合わせると面白そう
    - 現在機能検証中とのこと

## まとめ

Amazon Q Developerに関するセッションが多かったため、私も早く触らないといけないなぁと思いました。引き続き、キャッチアップしていきたいと思いました！！

最後まで、記事をお読みいただきありがとうございました！！
【Rails】JavaScriptの新規作成方法

# 記事概要
RailsでJavaScriptを新規作成する方法について説明する。

# 言語やフレームワーク
|| 使用技術 |
| ---- | ---- |
| フロントエンド | HTML <br> JavaScript |
| バックエンド | Ruby 3.2.0 <br> Ruby on Rails 7.1.5.1 |
| データベース | MySQL |
| インフラ | - |
| API | - |
| その他 | - |

# 前提
- アプリは別途作成済みである

# サンプルアプリ(GitHub)
https://github.com/likapantrip/js_new_app

# 手順
1. JavaScriptのコードを記述するjsファイルを手動作成する
    `app/javascript/[ファイル名].js`
1. 1.で作成したファイルにコードを記述する
    ```app/javascript/[ファイル名].js
    function test (){
      console.log("jsファイルの読み込み完了")
    };

    window.addEventListener('turbo:load', test);
    window.addEventListener("turbo:render", test);
    ```
1. ファイルをインポート可能に設定する
    ```config/importmap.rb
    # 最終行に追記
    pin "[インポート名]", to: "[ファイル名].js"
    
    # 例
    pin "test", to: "test.js"
    ```
1. 読み込んだファイルをアプリケーションで動作させられるように、設定を追加する
    ```app/javascript/application.js
    // 最終行に追記
    import "[上記で記述したインポート名]"
    
    // 例
    import "test"
    ```
1. ターミナルで`rails s`コマンドを実行し、サーバーを起動する
1. `http://localhost:3000/`にアクセスする
1. コンソール画面を確認し、`jsファイルの読み込み完了`と表示されていることを確認する
    [![Image from Gyazo](https://i.gyazo.com/90410780e694357a797dace4080d82e2.png)](https://gyazo.com/90410780e694357a797dace4080d82e2)

# 備考
- `window.addEventListener('turbo:load', test);`
    - ページ読み込みをトリガーにして、loadイベントでイベント発火する
    - イベント発火により、test処理が起動される
- `window.addEventListener("turbo:render", test);`
    - ページのレンダリングをトリガーにして、loadイベントでイベント発火する
    - イベント発火により、test処理が起動される
Databricksアシスタントの表示場所をコントロールできるようになりました！

こちらのアップデートです。

https://docs.databricks.com/aws/en/release-notes/product/2025/march#control-the-location-of-databricks-assistant-with-the-new-docking-feature

> **新たなドッキング機能によるDatabricksアシスタントの位置の制御**
> 新たなドッキング機能によって、Databricksアシスタントのペインの場所に対する制御と、最小化する機能を利用できるようになりました。
> 
> [Databricks Assistant の場所を制御する](https://docs.databricks.com/aws/ja/notebooks/use-databricks-assistant#databricks-assistant-%E3%81%AE%E5%A0%B4%E6%89%80%E3%82%92%E5%88%B6%E5%BE%A1%E3%81%99%E3%82%8B)をご覧ください。

アシスタントを表示した状態で3点リーダーをクリック、**収納済み**を選択することで表示が切り替わります。この状態でアシスタントペインの上部をクリックすることで、最小化状態に切り替えることができます。

![assistant_location.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b83c336e-7d63-4246-9ce1-43a29f11fca0.gif)

ご活用ください

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
【スクラム開発】リモートチームにスクラム開発を導入してダメダメだった話

# はじめに
寒ブリの葉にんにく味噌にどハマりしている、ノベルワークスのりょうちん([ryotech34](https://x.com/ryotech34))です。
今日はスクラム開発をリモートチームに導入してみた話をしたいと思います。

# スクラム開発とは
すごいざっくりですが、少人数チームでスプリントと呼ばれる期間内で、計画、レビュー、振り返りのサイクルを繰り返していく開発手法のことです。
詳しくは、下記スクラムガイドを参照ください。

https://scrumguides.org/docs/scrumguide/v2020/2020-Scrum-Guide-Japanese.pdf

今回は、
- 新しいチームである
- 時間経過で成長するチーム作りをしたい

ということからスクラム開発を実践してみました。

# 前提
- スキルセットがばらばら
- チームが新しいため、関係が出来上がっていない
- 私の立ち位置は、スクラムマスター

上記の前提で苦労したお話をしていきます。

# やらかした点
## コミュニケーション不足
リモートメンバーということもあり、そもそも雑談をする機会が少なく、実際に顔を合わせたことのあるメンバーとそうじゃないメンバーとではコミュニケーションに大分隔たりを感じていました。
その結果、相談やレビュー時の会話などに影響が及び、遠慮や妥協などが蔓延していた時期があり、スピード感を意識するという別の口実も相まって、技術負債が溜まってしまいました。

## 導入が中途半端だった
スクラム開発をやろう！と言い出して形式に沿って導入したはいいものの、そのメリットを体感させることが出来ず、結果として「夏休み最後の追われている感じ」を与えるいつも締め切りが近いだけの開発手法になってしまっていました。それ以前にスクラム開発、チーム開発、マネジメント力の経験値がそもそも不足しているというのもありました。

## 自分を過剰評価しつつチームを信頼しきれなかった
導入するという立場上、人に教えるがゆえに勝手に相手よりも自分の方が優れているという錯覚に陥ってしまい、最終的には自分を通すというレビューフローを通したせいで、本来のスプリントレビューが意味をなさず、ただ自分のタスクを増やしつつ、チームの主体性を損なう原因を作ってしまっていました。

# とりあえず改善策
## 月1で出社する or 遠方メンバーとは雑談1on1をする
コミュニケーションが足りていないということで、実際に顔を合わせたり、1on1で仕事以外の会話をすることを意識してみました。こんなことで思いますが、意外と改善されました。
今までもMTG中に雑談を挟んだりはしていたものの、対個人での壁は感じていました。相手の趣味や趣向、また雑談からチームメンバーにそもそも人間性として期待することなどを聞くことができ、相手への理解がお互いに深まったと思います。
つい先日、北海道在住メンバーに旅行行くから少し会おうと言ってオフ会を開催した結果、体感今まで以上にグイグイ来てくれるようになり、実際に顔を合わせるのは大事だなーとひしひしと感じています。

## 困ったことは一旦ルール化して解消してみる
人数が少なく出来たてほやほやのチームということもあり、何かあってもやり直しがきくだろうと思い、メンバーの思う改善策や困り事はルールとして導入してみることにしました。
あまり機能していないものは頃合いを見て中止しているものの、チームに参画している感を感じさせることができ、チームの色が出てきている実感がありました。

## とにかく一回任せてみる
権限委譲というほどではなく文面だけ見ると責任丸投げなのですが、とりあえず一回任せてみることにしました。
その結果、コードレビューはチーム間で解決するようになり、細かい仕様の説明やツール導入についての確認をとってくれるようになるなど、チームメンバーは優秀なのに1人で勝手に背負っていたことに気付くことができました。また、私自身の手も空き万々歳でした。

# おわりに
今回は長々とポエムを書きましたが、色々な方の勉強会の資料や記事などを拝見する機会があり、まだまだなんちゃってスクラム開発の域だなと感じています。
あまり大層なことは言えないのと言いたくないのですが、とある方に教えていただいた「意思決定をする際にはたくさん調べて自信をつけた上で決定を下す」という原則を守りながら、チームの生産性を今後も上げていければと思います。
リモート勢、出社も悪くないぞ！

# 参考
- [スクラムガイド](https://scrumguides.org/docs/scrumguide/v2020/2020-Scrum-Guide-Japanese.pdf)
AWS Certified Data Engineer - Associate受験記

AWS Certified Data Engineer - Associate（DEA-C01）の受験記になります。

# 自己紹介
- 総合電機メーカー 入社3年目
- 最近はIoT CoreやGreengrassを使った組み込みソフトウェア開発がメイン
- AWS歴 2年
- 好きなサービス Lambda
- 取得済みAWS認定 CLF, SAA, SOP, DVA, DOP, SAP, ANS

# 勉強方法
教材は以下の物を使った。
- [Cloud Tech](https://kws-cloud-tech.com/) 80問を3週した。
- [Udemyの問題集](https://www.udemy.com/course/aws-data-engineer-associate-dea-test/?srsltid=AfmBOoojXU4f9cwpI9m-7StIkSzoNcN8tTXeaJXRa87JlHTZgIGStPlF&couponCode=ST17MT31325G2) 第4回までを2週した。

いつもCloud Techに助けられているが、今回を振り返ってみるとUdemyの問題集だけでも良かった気がする。
今回使ったUdemyの問題集は第5回まであり、問題数がかなり豊富であることと不正解の選択肢にも不正解である理由が記載されているためかなり勉強になった。ただし、問題によっては回答が間違っているものもあったので注意が必要。Cloud Techの80問だけだと物足りない気がする。。。

自分はいつもと同様に1週目はサッと解いて、2週目以降は選択肢に出てきた分からない単語を調べたり、サービスの比較をしたりしてノートにまとめるような勉強をしている。

前回挑戦したANSに引き続き今回もPerplexityが活躍した。サービスの比較をしてもらったり、自分の認識に間違いがなさそうかを確認してもらったりした。
ただし、これも出力内容が間違っている可能性があるのでしっかりと提示されている情報源を確認している。

# 受験本番
1問 1分半で解くことを意識して取り組んだ。
全部解いた時点で58分が経過しており、残りの72分でフラグを付けた問題を確認していった。
フラグは回答に自信がない問題につけており、今回は19問にフラグがついていた。
19問の内訳としては

- これはいくら考えても答えが出ないと思う問題が5問
- 二択まで絞り切れている問題が5問
- ほぼ合っていると思うが自信がない問題が9問 

という感じだった。

ほぼ合っている問題と二択まで絞り切れている問題が半分合っていると仮定して、合格点に達していそうだったので30分ほど残して退出した。

# 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272113/0e442838-8026-4856-889a-66de5cebbf5b.png)

無事合格することができた。
今回は14時スタートで受けたが、それでもその日の19時過ぎにCredlyを通じて合格メールが来ていた。
もう少し遅い時間に受けてもその日の夜に結果が来ていたと後輩から聞いたので、その日の受験の結果は全て夜にまとめて送っているのかもしれない。。。

# 所感
想定通りの問題が多かった印象。解けなかった問題に関してはサービスを利用する際に設定する項目を細かに覚えておけば解けていたと思う。
2025年3月時点ではCloud Tech側は80問しかなく正直これだけを勉強していただけではごうかくできなかｔと思うので、DEAに関してはUdemyなどの別の教材が必須だと思った。
勉強をする中でApache ○○というOSSもまとめていったが、Airflowは元々Airbnbで開発されていたものが元になっているだとか、HadoopはGoogle社内の基盤技術が元になっているとか歴史として面白いものもあり興味深かった。
もう少しこの辺りのOSSについて理解を深めるのもアリかもしれない。

# 終わりに
これで今年度の目標だったAWS認定4つ取得を達成することができた。（DOP, SAP, ANS, DEA）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272113/71d7674c-e077-446a-ab11-5ec06f41e736.png)

来年度は残りの4つを取得し全冠を達成するぞ！！
AWS AIF合格体験記

# AWS資格合格体験記 〜学習方法と試験のコツ〜

## はじめに
初めまして！
新卒一年目のHiroと申します。
先月、AWS資格（AWS AIF - AWS Certified AI Practitioner）に合格しました。  
本記事では学習方法や試験当日の流れを紹介します。  

## 外観
試験内容としてはAI・統計の分野に加え、一定のAWS知識も求められました。
私は受験の時点でCLFとSAAを所持していましたが、
AWS知識の方では特に不足はありませんでした。

基本的にはWeb問題集を解き、試験対策を行いました。
私はAI・統計の手法等を学んだことがありませんでしたが、
理解の浅い部分は後述するYoutubeチャンネルの動画で学びを深めることができました。

AIFに関する学習法の記事は少なかったため、受験者の参考になれば幸いです。
## 使用した学習教材
使用した教材は、以下の2点です。

- Youtube参考動画
https://youtube.com/@aiby8596?si=IsILKg7nwSITuz8v
- Cloud Tech（有料web問題集）
https://kws-cloud-tech.com/

## 学習スケジュール
1日3時間程度の勉強を**1週間**続けました。  
基本的にはCloud Techをメインに、以下の流れで学習します。
- ① 1〜2周目：全問題を解く。
    - 時間がかかっても良いので、ここでは解説を読み込み、理解を重視して学習を行う。
    - 解説だけで理解の難しい問題は、Youtube動画等で理解する。
    - 2周目で間違えた問題・苦手な問題はラベルを貼っておく。
- ② 3周目：ラベルを貼った問題のみを一気に解く。
- ③ 試験直前(ⅰ)：全問題を1周する。
    - ここで間違えた問題や不安な問題については改めてラベルを貼る。
- ④ 試験直前(ⅱ)：ラベルを貼った問題を解く。

## 試験対策のポイント
- **アウトプット重視の学習を行う**
    - インプット重視の学習では飽きてしまう。（私はすぐに飽きた。）
    - 問題を解いたり、Qiita記事にまとめるなどして、アウトプットを通じて知識を定着させると良い。
- **似たような分類分け・統計手法の違い**を図や表にしてまとめて理解すると良い。（例：ROUGE vs F1 vs BLUE, etc...）    
- **自分にとって、わかりやすい教材を選ぶこと**が大切。
    - 「古くから使われている」「皆が使っている」等の言葉は、教材を探す手掛かりに過ぎない。
    - 学習の初期段階で軽く様々なものに触れてみて、**自分の理解しやすい教材を選ぶこと**にこだわろう。（私は、上記Youtubeチャンネルが非常に参考になった。）
## 試験当日の流れ
- テストセンターで受験しました。
- 時間は130分でした。
- 考えるというよりも知識を問う問題が多いのため、
時間には余裕があると思います。

## 結果と感想
- 無事**合格**しました（863点/700点合格）
- 試験対策をしっかりすれば、私のようなAI・統計実務未経験者、IT初心者でも合格できました。  

## 合格のコツ
- **範囲が広いため、飽きにくい学習方法を見つけて取り組むことが大切！**
- 受験の申し込みを先に行い**締切を設定**することで、学習意欲up！
- **似たような分類分け・統計手法の違いをまとめ、理解することが大切** 
---
-　去年にはCLFとSAAに合格しています。（別記事にまとめております。）
- 時間のある人は、**AWS Skill Builder**（無料の公式トレーニング）に触れてみても良いかもしれません。
- また、ハンズオンを経験するとより一層知識が深まり、その他AWS資格学習にも役立つと思います！

以上、AWS AIFの合格体験記でした！  
参考になれば嬉しいです。
17章 回帰診断法

# 回帰診断
https://shotamcgo.com/2024/06/09/regression-diagnostics-what-are-the-three-assumptions-required-for-error-terms/
プロットごとに仮定を満たしているかを確認できるものが異なる
|  | 外れ値 | 独立性 |　等分散性 | 正規性 |
|---|---|---|---|---|
|  残差プロット | 〇  | 〇|〇||
|  正規Q-Qプロット | 〇|||〇
|  標準化残差の絶対値の平方根プロット | 〇  ||◎|
|  cookの距離 | ◎ |||
|  自己相関とDW比 |  |◎||



# 正規Q-Qプロット
https://qiita.com/kenmatsu4/items/59605dc745707e8701e0

# 標準化残差の絶対値の平方根プロット
https://statorials.org/ja/%e6%a8%99%e6%ba%96%e5%8c%96%e3%81%95%e3%82%8c%e3%81%9f%e6%ae%8b%e5%9f%ba/

# cookの距離
https://oceanone.hatenablog.com/entry/2021/07/03/001525


# 例1
（ア）
独立性OK、外れ値OK。左の三点の残差が小さすぎるため、等分散性の仮定が疑われる
（イ）線に乗っているので正規性OK
（ウ）（ア）と同様。3を超えると外れ値とみなすこともあるらしいが、超えていないので外れ値OK
（エ）0.5を超えていないので外れ値OK

# 自己相関とDW比
https://e-econome.com/econometrics/77529612/

# 例題17.1
残差プロット・・・独立性、等分散性OK。ワンチャン1が外れ値？
正規Q-Qプロット・・・正規性OK
標準化残差プロット・・・等分散性OK
Cookの距離・・・0.5を超えておらずOK
useEffect の罠—データ取得は useEffect じゃなくてもいい

「データ取得は useEffect でやるもの」…本当にそうか？

フロントエンド開発の世界では、「これが王道だ」と信じられているベストプラクティスがいくつもある。
その中でも特に根強いのが、この思い込みだ。

「API からデータを取得するときは useEffect を使う」

確かに、useEffect を使えばコンポーネントのマウント時に API を叩いてデータを取得することができる。
これが「React でデータを取得する最も一般的な方法」だと言っていい。
だが、本当にそれが最適解なのか？

いや、そんなことはない。

Next.js を使うなら、useEffect でデータを取得するのはむしろ「悪手」になり得る。
ここでは、その理由と、より適した代替手段について考えてみよう。

⸻

## 1. useEffect によるデータ取得の問題点

典型的な useEffect を使ったデータ取得コードを見てみよう。
```typescript
"use client";
import { useEffect, useState } from "react";

export default function Page() {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch("/api/data")
      .then((res) => res.json())
      .then((data) => setData(data));
  }, []);

  if (!data) return <p>Loading...</p>;

  return <div>{data.message}</div>;
}
```
一見、問題ないように見える。
コンポーネントがマウントされたときに fetch を実行し、データが取得できたら setData で state を更新する。
よくある「React らしいコード」だ。

だが、ここに 3つの問題 がある。

### 問題①: クライアント側でしか動かない

このコードは useEffect の特性上、クライアントサイドでしか実行されない。
つまり、サーバーサイドレンダリング (SSR) ではデータがない状態でまず HTML を返し、その後クライアント側でデータを取得する。
結果として、ページ表示の速度が落ちる。

ページが表示されるまでの流れ
	1.	サーバーは空の HTML を返す → 画面には "Loading..." のみが表示される
	2.	クライアントが fetch で API を叩く → ここで初めてデータを取りに行く
	3.	データを受け取って state を更新 → ようやくデータが画面に表示される

これでは、ユーザーが待たされる時間が長くなる。

⸻

### 問題②: 「ちらつき (Flash of Empty Content)」が発生する

ページを開いたとき、一瞬 "Loading..." が表示され、その後データが表示される。
この 「一瞬何もない状態」 がユーザーの体験を悪化させる。

特に、テキストならまだしも、画像やレイアウトが変わる UI では、この「ちらつき」が不快に感じられることが多い。

⸻

### 問題③: クライアントの負荷が増える

useEffect を使うということは、データ取得の処理を クライアント側に押し付ける ということだ。
本来、これはサーバーで処理したほうが速いし、負荷も分散できる。

たとえば、Next.js の server components を使えば、データを 最初から HTML に埋め込んで返す ことができる。
そうすれば、クライアントが余計なリクエストをする必要もなく、初回レンダリングからデータがある状態になる。

⸻

## 2. useEffect を使わない Next.js のデータ取得方法

では、どうすればいいのか？
答えは「サーバーでデータを取得してしまうこと」 だ。

Next.js では、fetch をサーバーコンポーネント内で実行できる。
これを活用すれば、クライアントがデータを取りに行く前に、すでにサーバーがデータを埋め込んで返す ことができる。

改善版: サーバーコンポーネントでデータを取得

// `app/page.tsx` (App Router)
```typescript
export default async function Page() {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts/1");
  const data = await res.json();

  return <div>{data.title}</div>;
}
```
この方法なら、次のようなメリットがある。
	•	ページが表示された瞬間にデータがある
	•	クライアント側で fetch する必要がない
	•	SSR (サーバーサイドレンダリング) が効くので SEO も強い

特に、SEO を重視するサイトでは 「ページ表示の瞬間にデータがある」 ことが重要だ。
Google の検索エンジンは 「最初の HTML にデータが含まれているかどうか」 を評価基準にしているからだ。

⸻

## 3. それでも useEffect を使うべきケース

では、useEffect は完全に不要なのか？ いや、そんなことはない。
クライアントサイドでの動的データ取得が必要な場合には、useEffect を使うのが正解だ。

useEffect を使うべき場面
	•	ユーザーの操作に応じてデータを取得する
	•	例: 検索ボタンを押したとき
	•	リアルタイム更新が必要なデータ
	•	例: WebSocket を使ったチャット
	•	クライアント固有のデータ (ローカルストレージ, クッキー)
	•	例: ユーザーの設定情報の取得

これらのケースでは、useEffect の使用は適切だ。
だが、「ページロード時にデータを取得するだけ」なら、useEffect ではなく サーバーコンポーネント を使うべきだ。

⸻

## 結論

「データ取得は useEffect でやるもの」
—いや、そんなことはない。

Next.js を使うなら、サーバーコンポーネントや fetch を活用して、最初からデータを埋め込んで返す のがベストだ。
むやみに useEffect を使うと、ページの表示速度が遅くなり、UX も悪化する。

これからの Next.js でのデータ取得の鉄則

ページロード時のデータ取得 → サーバーでやる
ユーザー操作に応じたデータ取得 → クライアントでやる

「useEffect を使うのが当たり前」と思っているなら、一度立ち止まって考えてみてほしい。
それは本当に最適解なのか？ いや、もっといい方法があるのではないか？
JavaScriptの基礎（1）

※この記事は初学者の毎日のアウトプット用に作成している記事です

## ブラウザーのコンソールの使い方

JavaScriptは環境構築をしなくても、ブラウザのコンソールで使い方の確認をすることができる

主要なwebブラウザーには「開発ツール」が搭載されている
この開発ツールにはJavaScriptの処理結果やエラーメッセージを表示する機能が存在する

開発ツールの開き方は
・command + option + I (mac)
・Ctrl + shift + I (windows)

で開発ツールが開きコンソールタブをクリックするとコンソールが表示される

## 変数と定数
### 変数
値を代入した後、何度でも値を代入し直せる
```javascript
let x = 10;
x = 20;  // OK（再代入できる）
console.log(x); // 20
```


### 定数
一度値を代入すると再び代入することができない
```javascript
const z = 50;
z = 60;  // エラー: Assignment to constant variable.
```

## 文字列
文字列は""(ダブルクウォート)もしくは''(シングルクウォート)で囲む
また文字列に対して + 演算子を使うと文字列を結合することができる
```javascript
let part1 = "Welcome";
let part2 = "Cafe";

let sign = part1 + " " + part2; // "Welcome Cafe"
console.log(sign);
```

## 配列
配列は複数の値を一つにまとめて保存しておけるデータ
インデックス番号で配列のデータを参照することができる
```javascript
let bento = ["おにぎり", "卵焼き", "唐揚げ", "ブロッコリー"];

console.log(bento[0]); // おにぎり
console.log(bento[2]); // 唐揚げ
```
<br>

また配列は複数のデータを保持・参照するだけでなく配列の長さを調べることができたり、後からデータを追加することもできる
```javascript
let bento = ["おにぎり", "卵焼き", "唐揚げ", "ブロッコリー"];

// お弁当箱の中身の数（length）
console.log(bento.length); // 4

// 新しいおかず（トマト）を追加
bento.push("トマト");

console.log(bento); // ["おにぎり", "卵焼き", "唐揚げ", "ブロッコリー", "トマト"]
console.log(bento.length); // 5
```

## オブジェクト
オブジェクトも複数の値を一つにまとめて保存しておけるデータ
全体を{}で囲みデータを,区切りで記述する
データの一つを``プロパティ``と呼び、「プロパティ名：値」で記載
プロパティのことを``キー``とも呼ぶ



```javascript
let meishi = {
  name: "田中 太郎",
  age: 30,
  job: "エンジニア"
};
```
<br>

プロパティ名は2種類の参照方法がある
1,オブジェクトとプロパティを結ぶ
2,オブジェクト名に続き[]を書き参照したいプロパティ名を""で囲む
```javascript
// 名刺の情報を表示
console.log(meishi.name); // 田中 太郎
console.log(meishi["age"]);  // 30
```

<br>
参考書籍：

https://www.amazon.co.jp/%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89%E3%81%AEJavaScript%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E7%8B%A9%E9%87%8E-%E7%A5%90%E6%9D%B1/dp/481561802X
TypeScript でかじるオブジェクト指向

TypeScriptの勉強をしていると、オブジェクト指向という言葉を頻繁に目にします。今回はTypeScript初学者の目線でオブジェクト指向とその周りの機能をまとめてみました。


## **オブジェクト指向とは**

オブジェクト指向（object-oriented programming, OOP）とは **データとそれを操作する機能をひとまとめにして管理する考え方** です

```typescript
const person = {
  name: "太郎",
  age: 25,
  introduce: function () {
    console.log(`こんにちは、${this.name} です！`);
  },
};

person.introduce(); // こんにちは、太郎 です！
```

`name` や `age` のデータと、自己紹介の機能 `introduce()` を **ひとつのオブジェクト** にまとめています。



## **classとは**

**オブジェクトを作るための設計図** で、class構文を用いて定義できます。

たとえば、「人」を作る `class` の例

```typescript
class Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  introduce() {
    console.log(`こんにちは、${this.name} です！`);
  }
}
```

### **`class` を使う理由**

- **同じルールでオブジェクトを作れる**  
- **データと動きをセットで管理できる**  

オブジェクトを整理して使いやすくするための仕組みです。

https://typescriptbook.jp/reference/object-oriented/class


## **constructorとは**

`constructor` は**オブジェクトを作るときの初期設定**を担当する関数です。


```typescript
class Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}

const user = new Person("太郎", 25);
console.log(user.name); // 太郎
console.log(user.age); // 25
```

## new とは

クラスの設計図をもとに新しいオブジェクトを作る演算子です。
```Javascript
const user = new Person("太郎", 25); // 新しいオブジェクトを作成
```
- new を使うと constructor が自動的に呼ばれる
- クラスのルールに従ったオブジェクトが作られる

`new` は `constructor` のスイッチと考える


## **ファクトリーメソッド**

オブジェクトを作る方法を統一したいときに **ファクトリーメソッド** をつかいます

```typescript
class User {
  private constructor(public name: string) {}

  static create(name: string) {
    return new User(name);
  }
}

const user = User.create("太郎");
console.log(user.name); // 太郎
```

`create()` というメソッドを作ることで、`new User()` を直接書かずにオブジェクトを作成できます。

## まとめ
鯛焼きを作る工程で覚えると

- class はたい焼きの型

- constructor はたい焼きを作る工程

- new はたい焼きを焼くスイッチ
家計簿アプリを作る＃１３

![スクリーンショット 2025-03-11 080623.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/7a6b3267-b7ab-4f63-b073-98307d705f16.png)
![スクリーンショット 2025-03-11 080710.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/99778aec-bcd4-4e2c-bb2a-79f246c8e2f8.png)
![スクリーンショット 2025-03-11 080734.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/48753718-2da2-4e11-8a22-db7228a336a3.png)
![スクリーンショット 2025-03-11 080819.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/f981542e-5532-4556-b4db-33bff8799dbe.png)
![スクリーンショット 2025-03-11 080849.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/ff8cefa6-4a6a-4a93-b9a1-e096913782bc.png)


上の写真の部分のAppLayoutファイルの不要な部分をすべて、削除していきます。
Streamlitでのデータキャッシュ、セッションの管理

本記事は自身の忘備録的な側面が強いです。

## Streamlitのインストール

```bash
pip install streamlit
```

## 使い方

### 1. カスタムコンポーネントの作成

Streamlitでは、ReactやVue.jsなどのフロントエンドフレームワークを使用してカスタムコンポーネントを作成できる。カスタムコンポーネントを用いることで、独自のUIをアプリに組み込むことが可能。

```python
import streamlit as st
import streamlit.components.v1 as components

# カスタムコンポーネントの定義
def my_component():
    components.html('<h1">カスタムコンポーネントによる出力</h1>')

my_component()
```

### 2. データのキャッシング

Streamlitでは`@st.cache_data`デコレータを使用することで、データのキャッシングが可能。データの読み込みなどを高速化させたい場合に使用。以下に、`st.cache_data`の異なるパラメータと使用例を示す。

#### `st.cache_data`のパラメータ

- `ttl`: キャッシュの有効期限を秒単位で指定します。指定した時間が経過するとキャッシュが無効化され、再計算が行われる
- `max_entries`: キャッシュに保存するエントリの最大数を指定します。これを超えると、古いエントリから削除される

```python
@st.cache_data(ttl=3600, max_entries=100)
def load_data():
    sample_data = {"name": "Streamlit Study", "description": "cache sample"}
    return sample_data

data = load_data()
st.write("キャッシュされたデータ:", data)
```

#### `st.cache_resource`の使用

`st.cache_resource`は、リソースのキャッシングに使用される。例えば、DB接続やAPIクライアントのインスタンス化に利用可能。

イメージとしては以下のような感じ
```python
@st.cache_resource
def get_database_connection():
    connection = create_database_connection()
    return connection

db_connection = get_database_connection()
```

キャッシュを無効化するには、`st.cache_data.clear()`や`st.cache_resource.clear()`を使用。


### 3. セッションの管理

Streamlitでは、セッション状態を管理するための`st.session_state`が利用可能。同一タブ内のセッション保持が可能になる。
以下に、セッション管理のサンプルを示す。

#### セッションのエンティティ登録
セッションに新しいエンティティを登録するには、`st.session_state`に新しいキーを追加する。

```python
if "username" not in st.session_state:
    st.session_state.username = "Guest"

def update_username():
    # st.session_state.update()を使って更新
    st.session_state.update(username=st.session_state.input_username)

st.text_input("名前を入力:", key="input_username", value=st.session_state.username, on_change=update_username)
st.write(f"こんにちは, {st.session_state.username}ｻﾝ!")
```

＊基本的にSPAなので、リロードをするとセッションが消えてしまう。
永続化を考えるのであれば外部DBに保存するなどの仕組みが必要？

### 4. APIとの連携

requestsで叩いたデータの表示

```python
import requests

response = requests.get("https://api.example.com/data")
data = response.json()
st.write(data)
```

特に凝った実装はなさそう。
KUROKO Connect簡易監視機能をさわってみた

#### KUROKO Connectはリモート接続以外に「現場」の監視機能があります。
KUROKO Gearから通信可能な機器であれば定期的な監視を行い、異常を検知したらKUROKO Cloudに異常通知後、担当者へメールでお知らせします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/7ee4aec4-ac80-46e9-a157-24ef5f9a3e09.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/33747689-3308-4e65-921c-e5183ed34778.png)

# 1. 監視設定を行う


監視の設定はコンソール画面から行います。
監視項目の追加や、監視の有効・無効、異常リセットなどは現場に接続することなく操作できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/d388d2a3-d7cd-41ce-9371-0646f2bb9e29.png)

設定したい現場にインストールされているAppsのActionsをクリックし、「監視設定一覧」をクリックします。


次に、管理情報登録をクリックすると、登録画面が表示されます。
監視情報の入力は下記に従ってください。

監視方法
①ICMP（Pingの応答確認）
②TCP（TCPポートの接続チェック）
③API（独自の監視で、その結果をKUROKO Connectに通知するためのもの）

から選び、
現場のIPアドレス（GearまたはAppsがインストールされた機器から通信できるIPアドレス）
TCPの場合はポート番号を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/9b4fc6dd-2a17-441e-b03f-a85e1bc74a03.png)


# 2. 監視を有効にする

作成した監視の初期設定は「無効（＝OFF）」の状態です。
監視をすぐに始める場合は「Actions」から“監視を有効にする”を選択して下さい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/01ee2858-192e-4f31-a99f-1a679e0cd2b7.png)


設定した監視情報は現場のKUROKO GearまたはAppsと同期されます。
監視状態をいったん解除したい場合（例えばメンテナンスや故障で機器が停止中など）は、
監視状態を有効 -> 無効に変更すれば監視は解除されます。


# 3. メールの受信設定

メールの受信設定は3つの登録方法があります。
①現場のKUROKO Gear/Appsに担当者メールアドレスを登録する方法
②設定されているグループに対して担当者メールアドレスを登録する方法
③契約しているテナントの担当者メールアドレスを登録する方法

メールの通知優先順位は「①＞②＞③」です。
①に登録されていれば、②、③へのメール通知はされません。
各登録方法のメール最大登録数は5アドレスです。
それ以上のメールアドレスに配信をしたい場合はお客様にてメーリングリスト等を準備いただき、そのメールアドレスを登録してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/a355d6fd-8716-4ac3-8e16-9a4fba6d860d.png)
AWS　SAA合格体験記

# AWS資格合格体験記 〜学習方法と試験のコツ〜

## はじめに
初めまして！
新卒一年目のHiroと申します。
昨年、AWS資格（AWS Certified Solutions Architect - Associate）に合格しました。  
本記事では学習方法や試験当日の流れを紹介します。  

## 使用した学習教材
使用した教材は、以下の3点です。
Ping-tという無料のWeb問題集があるのですが、大変お世話になりました。
基本的な学習の流れとしては、
「Ping-tでひたすら問題を解く→解説を読み込む→それでもわからない部分は参考書で理解を深める」
の繰り返しでした。

- Ping-t
https://mondai.ping-t.com/question_subjects/72
- (模擬問題付き)徹底攻略 AWS認定 ソリューションアーキテクト − アソシエイト教科書 第3版［SAA-C03］対応
https://amzn.asia/d/fSiD3j0
- AWS公式ドキュメント（AWS Well-Architected Framework）


AWSの参考書は数多くありますが、私は”黒本”が好きでした。
他にも、自分の周りには以下の”白本”と呼ばれる参考書を使う人も多くいました。
ざっくりとサービスを知りたい方には、こちらも人気かと思います。
- AWS認定資格試験テキスト　AWS認定ソリューションアーキテクト - アソシエイト　改訂第3版 (ＡＷＳ認定資格試験テキスト)
https://amzn.asia/d/bLRoiQa
## 学習スケジュール
1日4時間程度の勉強を**3週間**程度続けました。  
基本的にはPing-tをメインに、以下の流れで学習します。
- ① 1〜2周目：全問題を解く。
    - 時間がかかっても良いので、ここでは解説を読み込み、理解を重視して学習を行う。
    - 解説だけで理解の難しい問題は、参考書を読んで理解する。
    - 2周目で間違えた問題・苦手な問題はラベルを貼っておく。
- ② 3周目：ラベルを貼った問題のみを一気に解く。
- ③ 試験直前(ⅰ)：全問題を1周する。
    - ここで間違えた問題や不安な問題については改めてラベルを貼る。
- ④ 試験直前(ⅱ)：ラベルを貼った問題を解く。

※Well-Architected Frameworkに関しては、公式ドキュメントを直前に読みました。
語呂合わせを調べたり自作することで、簡単に覚えられるようにしました。

## 試験対策のポイント
- **アウトプット重視の学習を行う**
    - 範囲がかなり広いため、インプット重視の学習では飽きてしまう。（私はすぐに飽きた。）
    - 問題を解いたり、Qiita記事にまとめるなどして、アウトプットを通じて知識を定着させると良い。
- **早い段階で全出題範囲に触れることが重要**
    - 理解が曖昧でも良いので、問題を解きながら早い段階で全範囲の知識に触れることを推奨。
    - 自分の得意・不得意を見極めた上で、苦手分野をなくしていこう。
- **似た名称のサービスの違い**を図や表にしてまとめて理解すると良い。（例：S3 vs EBS vs EFS, etc...）    
- **AWS Well-Architected Framework**は頻出のため、語呂合わせ等でまとめて覚えると良い。
## 試験当日の流れ
- テストセンターで受験しました。
- 時間は130分でした。
- 考えるというよりも知識を問う問題が多いのため、
時間には余裕があると思います。

## 結果と感想
- 無事**合格**しました（791点/720点合格）
- 試験対策をしっかりすれば、私のようなAWS実務未経験者、IT初心者でも合格できました。  

## 合格のコツ
- **範囲が広いため、飽きにくい学習方法を見つけて取り組むことが大切！**
- 受験の申し込みを先に行い**締切を設定**することで、学習意欲up！
- **似たようなサービスをノートにまとめ、まとめて理解することが大切** 
---
- 2ヶ月前にはCLFも受験し、無事合格していました。（別記事にまとめております。）
- 時間のある人は、**AWS Skill Builder**（無料の公式トレーニング）に触れてみても良いかもしれません。
- また、ハンズオンを経験するとより一層知識が深まり、その他AWS資格学習にも役立つと思います！

以上、AWS資格の合格体験記でした！  
参考になれば嬉しいです。