OmniAICreator/Qiita-1.07M huggingface dataset:
TerraformとDockerを活用したAzure環境構築の効率化手法

# 概要
TerraformとDockerを活用してAzure環境を効率的に構築する方法を、自身の実践例をもとに紹介します。Terraformでのインフラコード化（IaC）に加え、Dockerを使って環境を分離し、開発やテスト時の再現性を高めることを目指しました。また、Azure CLIを使った認証やリソースの初期化もセットで自動化することで、実際の運用で役立つワークフローを作っています。

# 使用技術
- Terraform(Ver 1.6.6)
- Azure CLI
- Docker
- Makefile

# Docker ComposeによるTerraform環境の構築

Terraformの実行環境をコンテナ化し、複数の環境（例: 開発用、テスト用）をDocker Composeで管理する構成です。

```docker-compose.yml
version: '3.8'
services:
  terraform:
    build: .
    volumes:
      - .:/terraform
    working_dir: /terraform
    env_file:
      - .env
```

# Dockerfileによるカスタムイメージの作成
Terraform公式イメージをベースに、Azure CLIと必要なパッケージを追加インストールしたDockerfileを使用しました。

```Dockerfile
FROM hashicorp/terraform:1.6.6

RUN apk add --no-cache curl unzip bash python3 py3-pip gcc python3-dev musl-dev linux-headers make jq
RUN python3 -m venv /azure-cli-venv
ENV PATH="/azure-cli-venv/bin:$PATH"

RUN pip install azure-cli
WORKDIR /terraform
COPY . /terraform
```
このカスタムイメージにより、Terraform操作とAzure CLIを1つのコンテナ環境で統合的に利用可能にしました。

# Azure CLIとTerraformの連携
login.shでの認証プロセス
このスクリプトでは、サービスプリンシパルを使用したAzure CLIでの認証を行います。認証情報を環境変数で管理していますが、Azure Key Vaultのシークレット管理ツールを使用することで、さらなるセキュリティ強化が可能です。

```login.sh
az login --service-principal --username ${CLIENT_ID} --password ${CLIENT_SECRET} --tenant ${TENANT_ID}
az account set --subscription ${SUBSCRIPTION_ID}
```

# Makefileを用いた運用の効率化

Terraformの操作をシンプル化するため、Makefileを導入しました。

```Makefile
apply:
	docker-compose run --rm --entrypoint "/bin/bash" terraform -c "sh login.sh; terraform fmt; terraform init; terraform apply"
```

コマンドの流れ：

1 login.shの実行: Azure CLIを用いた認証。
2 Terraformコマンドの実行:
・terraform fmt: コードフォーマットのチェック。
・terraform init: 必要なプロバイダーやモジュールの初期化。
・terraform apply: Azureリソースの作成。

これにより、make applyを実行するだけで、認証とTerraformの処理を一括して行えます。

# 終わりに
本記事では、TerraformとDockerを活用してAzure環境を効率化する手法を解説しました。Dockerで環境を分離し、TerraformとAzure CLIを組み合わせて自動化することで、作業の再現性を高めました。
今後は、CI/CDパイプラインの導入を検討し、さらに効率的で安全な運用を目指していきたいと思います。
Module LLMのデバッグ基板を一体化するフレーム

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/445e8f8a-1b5e-300a-426f-7cc630e3b1c7.jpeg" width=50% />

　おまけ(デバッグ基板)つきのM5Stack Module LLMが届いたのはいいんですが、デバッグ基板の置き場に困りまして、Module LLMと一体化するフレームを3Dプリンタで作ってみました。
 　需要があるのかなこれ。

素の状態のModule LLMとデバッグ基板
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/115afa40-e231-119d-7b5e-86d85bce2519.jpeg" width=50% />


デバッグ基板載せる側 
ねじ穴は２つで反対側の凸ぽっちはデバッグ基板のねじ穴に差し込みます。M3 6mmねじとM3ナットで留めます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/e8166c62-a611-afe6-94b7-6b3f93e44918.png" width=40% />

Module LLMの表面？(M-BUSのピンのあるほう)と合わせる側
こちらの面をModule LLMのM-BUSのピン(トゲトゲ)のあるほうに合わせます。ねじ穴は4つあけてありますが、対角2つで留めてもいいし、４つ全部で留めてもいいです。M3 10mmねじとM3ナットで留めます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/d2d55577-eb2b-5df3-d9da-8eb32d7b7ca1.png" width=40% />

3Dプリント用データ、Autodesk Fusion(Fusion 360)用データを以下に置いておきます。
(プリンタやプリントパラメータによっては精度などの都合で少し削ったりしないとダメかもしれません)

https://www.thingiverse.com/thing:6886266

# 組付け手順

まずこちら側からM3 10mmねじを通しておきます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/5f055e1a-850e-8d2f-6066-340e4c0c6b11.jpeg" width=50% />

デバッグ基板をこの方向で置きます。凸ぽっちに基板のねじ穴を差し込みます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/e3302c45-df41-1495-f430-8fe5dd55a2a9.jpeg" width=50% />

凸ぽっちじゃないほう側のねじ穴２つにM3 6mmねじを入れ、その裏側からM3ナットで締めます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/6225c3b4-077b-9f36-0e2d-01dff3e3aff8.jpeg" width=50% />

この状態でModule LLMとデバッグ基板を重ねます。最初にとおしたM3 10mmねじをModule LLMのねじ穴に通し、裏側からM3ナットで留めます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/c3411751-3d87-3fa8-9156-ab80952f8f16.jpeg" width=50% /><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/371cc52c-b783-f7be-4a48-c1f7c5cc9012.jpeg" width=50% />

FFC(フレキケーブル)が飛び出しているのが気になる方は、組付け時にいい感じにケーブルをたくし込んでください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/db37d4e7-755f-bc7c-3626-45fdaa92f40e.jpeg" width=50% />

これでだいぶすっきりしました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/940e7565-5ac6-e2b5-b90a-4e99daf29bf9.jpeg" width=50% />

M5Stack Coreと合体させる場合はM3ナットをはずして分離してください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/fe48d388-d094-206e-43bc-edcb4a3a42f6.jpeg" width=50% />

M3 10mmねじの代わりに20mmか25mmのねじを使うとこのように全部合体できるかもしれません。(ためしていません。)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431649/a27eda0a-4b78-e321-4336-c7cbb82e3fb8.jpeg" width=50% />
無料AIツール導入ガイド：FreeAITool.aiで最新のAIツールを探索しよう

AIツールの進化は目覚ましく、日々新しいツールが登場しています。しかし、高品質な無料AIツールを見つけるのは意外と大変です。そこで今回は、厳選された無料AIツールを集めた「FreeAITool.ai」をご紹介します。
FreeAITool.aiの特徴
https://freeaitool.ai/
当サイトは、ユーザーが必要なAIツールを素早く見つけられるように設計されています。以下の特徴があります：

カテゴリー別に整理された豊富なAIツールコレクション
完全無料で利用可能なツールのみを厳選
使いやすい直感的なインターフェース
定期的な更新による最新AIツール情報の提供

主要カテゴリー
サイトには様々なカテゴリーのAIツールが収録されています：

画像生成AI
テキスト生成・文章作成
音声変換・音声合成
コード開発支援
ビジネス効率化ツール

AIツールの選定基準
FreeAITool.aiでは、以下の基準で掲載するツールを厳選しています：

基本機能が無料で利用可能
ユーザーインターフェースの使いやすさ
出力結果の品質
安定性とセキュリティ

活用方法

目的に応じたカテゴリーを選択
各ツールの詳細な説明と特徴を確認
実際に使用して、自分のニーズに合うか検証

今後の展望
AIツールの進化に合わせて、定期的に新しいツールの追加と情報更新を行っていきます。また、ユーザーフィードバックを基にした機能改善も予定しています。
まとめ
FreeAITool.aiは、質の高い無料AIツールを簡単に見つけることができるプラットフォームです。AIツールを活用して生産性を向上させたい方は、ぜひ一度お試しください。
VScode Ristricted Modeのポップアップについて

# 突然出たポップアップ
以下のようなポップアップが出たので調べていきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963103/0ef0ad0f-e511-7ad0-1af4-6a0cd11c9646.png)

メッセージ全文は
```bash
Ristricted Mode is intended for safe code browsing. Trust this window to enable all features. 
# Restricted Mode は安全にコードを閲覧するためのモードです．このウィンドウを信頼するとすべての機能が有効になります．
```

<INS>Manage</INS>　 <INS>Learn More</INS>　とあるのでManageをクリックします

# Manegeをクリックすると
以下のタブで，現在制限モードで使用中ですとのこと．

![VScodeスクショ2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963103/667a5f91-deed-a37e-df26-8c2a79894099.png)

Trustをクリック

![VScodeスクショ3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963103/6f1ee802-dc01-61e0-5dbb-dbc454108e89.png)

# 結論
VSCodeにRaspberryPiから転送したファイルを読み込んでいたことが原因の気がします
Moment-area theorem「面積モーメント法とは何ですか。」をAI先生に聞きました。sympyで。

・先生の回答によって質問内容を変えています。

# ChatGPT先生へ
>(回答省略)
sympyのソースコードを教えて下さい。
```python
from sympy import symbols, integrate, Piecewise, simplify

# 変数の定義
x, L, P, E, I = symbols('x L P E I')

# 曲げモーメント分布の定義 (梁の中央に荷重がある場合)
# 0 <= x <= L/2 の場合: 曲げモーメント = P*x/2
# L/2 <= x <= L の場合: 曲げモーメント = P*(L-x)/2
M = Piecewise((P * x / 2, x <= L / 2), (P * (L - x) / 2, x > L / 2))

# EI分の1を考慮
M_over_EI = M / (E * I)

# たわみ角(theta)の計算 (曲げモーメントの積分)
theta = integrate(M_over_EI, x)
theta = simplify(theta)

# たわみ(v)の計算 (たわみ角の積分)
v = integrate(theta, x)
v = simplify(v)

# 結果表示
print("曲げモーメント分布 M(x):")
print(M)
print("\nたわみ角 θ(x):")
print(theta)
print("\nたわみ v(x):")
print(v)
```

上記をsympyの階段関数を使ったソースコードを教えて下さい。
>階段関数（Heaviside）を使ったソースコード
```python
from sympy import symbols, integrate, Heaviside, simplify

# 変数の定義
x, L, P, E, I = symbols('x L P E I')

# 曲げモーメント分布の定義 (Heaviside関数を使用)
M = (P * x / 2) * Heaviside(L / 2 - x) + (P * (L - x) / 2) * Heaviside(x - L / 2)

# EI分の1を考慮
M_over_EI = M / (E * I)

# たわみ角(theta)の計算 (曲げモーメントの積分)
theta = integrate(M_over_EI, x)
theta = simplify(theta)

# たわみ(v)の計算 (たわみ角の積分)
v = integrate(theta, x)
v = simplify(v)

# 結果表示
print("曲げモーメント分布 M(x):")
print(M)
print("\nたわみ角 θ(x):")
print(theta)
print("\nたわみ v(x):")
print(v)
```
# Gemini先生へ
>(回答抜粋)
面積モーメント法（Area Moment Method）
第1定理:...
第2定理: ...

~~sympyのソースコードを教えて下さい。~~
上記のsympyのソースコードを教えて下さい。
>あなたは以前、面積モーメント法について質問しましたね。...

面積モーメント法をsympyのソースコードで教えて下さい。
```python
import sympy

# 変数の定義
x, L, P, E, I = sympy.symbols('x L P E I', real=True, positive=True)

# 曲げモーメントの定義 (区分的に定義)
M1 = (P/2) * x
M2 = (P/2) * (L - x)

# 曲げモーメント図の面積 (0からL/2までを積分し、2倍する)
A = 2 * sympy.integrate(M1, (x, 0, L/2))

# 曲げモーメント図の重心位置 (0からL/2までの重心を計算)
x_bar = (1/A) * 2 * sympy.integrate(x * M1, (x, 0, L/2))

# 第一定理：中央のたわみ角は0
theta_mid = 0

# 第二定理：中央のたわみ (原点からの距離はL/2)
delta_mid = (A * (L/2 - x_bar)) / (E * I)

# 結果の出力
print("曲げモーメント図の面積:", A)
print("曲げモーメント図の重心位置:", x_bar)
print("中央のたわみ:", delta_mid)

# 簡単化
delta_mid_simple = sympy.simplify(delta_mid)
print("中央のたわみ(簡単化後):", delta_mid_simple)
```

# copilot先生へ
未

# wikipedia

https://en.wikipedia.org/wiki/Moment-area_theorem

日本語版は、ノートでした。

https://ja.wikipedia.org/wiki/%E3%83%8E%E3%83%BC%E3%83%88%3A%E3%83%A2%E3%83%BC%E3%83%AB%E3%81%AE%E5%AE%9A%E7%90%86
クソエンコーダ

任意のデータを「クソ」でエンコードするエンコーダを作った。

# 仕様

* 「0」のビットを「ク」、「1」のビットを「ソ」で表す
* 各バイトを順に表す
* 1バイトの中では、MSBからLSBの順に表す
* デコード時、「ク」「ソ」以外の文字は無視する
* デコード時、最後にビットが1バイトに足りず余った場合は、不足しているビットを0で埋める

# クソポイント

* 出力が「クソ」
* 理論上は任意のデータを扱えるが、面倒なので今回のアプリでは UTF-8 のテキストのみをサポート
* ビットを適当な文字で表すというのは、多分5000兆番煎じくらい

# 実装

```javascript
const encoder = new TextEncoder();
const decoder = new TextDecoder();

function hirabunToKuso(hirabun) {
	const kusoData = encoder.encode(hirabun);
	let res = "";
	for (let i = 0; i < kusoData.length; i++) {
		for (let j = 7; j >= 0; j--) {
			res += (kusoData[i] >> j) & 1 ? "ソ" : "ク";
		}
	}
	return res;
}

function kusoToHirabun(kuso) {
	const kusoData = [];
	let byte = 0, bit = 0;
	for (let i = 0; i < kuso.length; i++) {
		const idx = "クソ".indexOf(kuso.charAt(i));
		if (idx >= 0) {
			byte |= idx << (7 - bit);
			bit++;
			if (bit >= 8) {
				kusoData.push(byte);
				byte = 0;
				bit = 0;
			}
		}
	}
	if (bit > 0) kusoData.push(byte);
	return decoder.decode(new Uint8Array(kusoData));
}
```

# アプリ

[クソエンコーダ](https://mikecat.github.io/kuso_encoder/)

![クソエンコーダ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/b03970ed-9f27-60ce-659a-411bc7a594a1.png)

プロジェクトページ：[mikecat/kuso_encoder: 「クソ」でエンコードするエンコーダ](https://github.com/mikecat/kuso_encoder)
Pythonの文字列（Strings）について

# Pythonの文字列（Strings）について

Pythonでは、文字列（Strings）は基本的なデータ型の1つであり、テキストデータを扱う際に使用します。

---

## **1. 文字列の定義**
文字列は、ダブルクォーテーション (`"`) またはシングルクォーテーション (`'`) で囲むことで定義できます。

~~~python:出力
print("Hello World")
print('Hello World')
~~~

~~~python:出力
Hello World
Hello World
~~~


---

## **2. ダブルクォーテーションとシングルクォーテーションの使い分け**
文字列内にクォーテーション記号が含まれる場合、外側のクォーテーションを使い分けることでエラーを防ぐことができます。
~~~python:例:シングルクォーテーションを含む文字列
print("I'm learning Python")
~~~

~~~python:出力
I'm learning Python
~~~

~~~python:例2:ダブルクォーテーションを含む文字列
print('He said, "Hello, Python!"')
~~~

~~~python:出力
He said, "Hello, Python!"
~~~

### **例3: 両方を含む場合（エスケープシーケンスを使用）**
エスケープ文字（`\`）を使うことで、クォーテーション記号を文字列内で使用できます。
~~~python:例
print("He said, \"I'm learning Python!\"")
~~~

~~~python:出力
He said, "I'm learning Python!"
~~~
---

## **3. 改行とタブ**
文字列内に改行やタブを挿入するには、エスケープシーケンスを使用します。

~~~python:例
print("Hello\nWorld")  # 改行
print("Name:\tJohn")   # タブ
~~~

~~~python:出力
Hello
World
Name:   John
~~~

---

## **4. 文字列の連結**
文字列を結合するには、`+` 演算子を使用します。

~~~python:例
greeting = "Hello"
name = "Alice"
print(greeting + " " + name)
~~~

~~~python:出力
Hello Alice
~~~
::: note info
### 演算子の間にはスペースを開ける
Pythonでは、演算子の間にスペースを入れることでコードが読みやすくなります。

~~~python:例
# スペースなし（悪い例）
result=2+3*5

# スペースあり（良い例）
result = 2 + 3 * 5
print(result)
~~~

~~~python:出力
17
~~~
:::
---

## **5. 数値との連結**
数値と文字列を連結する場合、数値を文字列に変換する必要があります。

~~~python:例
age = 25
print("I am " + str(age) + " years old")
~~~

~~~python:出力
I am 25 years old
~~~

---

## **6. 三重クォーテーションを使った複数行文字列**
三重クォーテーション（`"""` または `'''`）を使うと、複数行の文字列をそのまま記述できます。

~~~python:例
print("""This is a long string
that spans multiple lines.""")
~~~

~~~python:出力
This is a long string
that spans multiple lines.
~~~

---

## **7. 文字列の長さを取得**
文字列の長さは `len()` 関数を使用して取得できます。

~~~python:例
text = "Hello World"
print(len(text))
~~~

~~~python:出力
11 
~~~

---

## **8. 文字列のインデックスとスライス**
文字列のインデックスやスライスを使うことで、一部の文字を取得できます。

~~~python:例
text = "Hello World"
print(text[0])   # 最初の文字
print(text[-1])  # 最後の文字
print(text[0:5]) # 最初から5文字目まで
~~~

~~~python:出力
H
d
Hello
~~~

---

## **9. 文字列の型を確認**
`type()` を使うことで、データの型が文字列であることを確認できます。

~~~python:例
print(type("Hello World"))
print(type(25))
~~~

~~~python:出力
<class 'str'>
<class 'int'>
~~~
Rustの開発環境で、tracingログを整形して見やすくした

# はじめに

Rustでtracingを使って開発している時、JSONログの可読性に困ることはないでしょうか。
アプリケーションのコードを一切変更せずに、開発時のログを見やすくする小技を紹介します。

## 開発時のログ、JSONのまま読むのはしんどい

tracingはRustでよく使われているロギングライブラリです。構造化ログやスパンのサポート、非同期処理への対応など、本番環境では嬉しい機能が揃っています。

ただ、開発中にこんなログと向き合うのは少々つらいものがあります：

```json
{"timestamp":"2024-12-04T10:00:00Z","level":"INFO","fields":{"message":"Request received","http.method":"GET","http.path":"/api/users","elapsed_milliseconds":120}}
```

## Node.jsのpino-prettyで整形する

pino-prettyはNode.js向けのログ整形ツールです。本来はpinoというNode.jsのロガー用のフォーマッタなのですが、JSON形式のログなら何でも整形できる汎用的なツールとして使えます。

このツールを使うと、tracingのログもかなり見やすくなります。なお、println!やpanic!によるログ出力はJSON形式ではないため、そのまま表示されます。通常のデバッグ作業の妨げになることはありません。

```bash
npm install -g pino-pretty
```

使い方はシンプルで、こんな感じです：

```bash
cargo run | pino-pretty --colorize --include msg,level,error_name,http.method,http.path,http.status_code,elapsed_milliseconds
```

`--include`オプションで表示したいフィールドを指定できます。ログに含まれる任意のフィールドを指定可能です。

これで先ほどのログが以下のように変換されます：

```
INFO: Request received
    http.method: GET
    http.path: /api/users
    elapsed_milliseconds: 120
```

レベルごとに色分けもされるので（INFOは緑、ERRORは赤）、一目で重要な情報がわかりやすいです。

## Docker環境での設定例

ローカル開発環境でcargo watchなどを使いつつログを整形する例です。

`Dockerfile`:
```dockerfile
FROM rust:1.75 AS base

# 開発環境用のステージ
FROM base AS development

# pino-prettyのインストール
RUN apt-get update && apt-get install -y \
    curl \
    && curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
    && apt-get install -y \
    nodejs \
    && npm install -g pino-pretty \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# cargo-watchのインストール
RUN cargo install cargo-watch
```

`docker-compose.yml`:
```yaml
services:
  backend:
    build:
      context: .
      dockerfile: Dockerfile
      target: "development"
    volumes:
      - ./src:/app/src
    working_dir: /app
    command: >
      cargo watch -x fmt -s 'cargo run |
      pino-pretty --colorize \
        --include msg,level,error_name,http.method,http.path,http.status_code,elapsed_milliseconds'
```

## カスタマイズ例

用途に応じて出力形式を調整できます：

```bash
# タイムスタンプを含める
cargo run | pino-pretty --colorize --include timestamp,msg,level

# 出力形式のカスタマイズ
cargo run | pino-pretty --colorize --messageFormat "{level}: {msg} ({http.method} {http.path})"
```

## まとめ

小技ですが、tracingのログをそのまま読むよりはかなり読みやすいと思います。

## 参考リンク
- [tracing](https://docs.rs/tracing)
- [pino-pretty](https://github.com/pinojs/pino-pretty)
Safariにて、要素の面積が一定値を超えると-webkit-backdrop-filterが効かなくなるらしい

## 気づいたきっかけ
私が趣味で運営しているホームページで、趣味で書いた5万字程度の文章を1ページに掲載したら、そのページだけ-webkit-backdrop-filter: blurによる背景のブラーが適用されないという不具合が生じた。その場で少し調べてみると、どうやらSafariのみに見られる不具合で、ブラーをかけている要素のheightが関係しているらしいということが分かった。けれどそれ以上のことが分からなかったため、一旦運用でカバー（文章を分割して掲載）することにした。
## -webkit-backdrop-filterの仕様
結論から書くと、**要素の面積が27,423,000px程度を超えると、-webkit-backdrop-filterが効かなくなる**らしい。ちなみに**Firefoxでは面積関係なく適用された**。
私のホームページでは、max-widthを1080pxとしたwrapperに背景ブラーをかけてる感じで、width1080pxの状態で検証していくと、heightが25392pxの時まではブラーがかかり、25393pxからはかからなくなると分かった。

この時、ブラーが適用されるの面積の上限は、
**25392px(height) * 1080px(width) =  27,423,360px**となる

ただこれだけだと面積によるものかどうかはまだ分からないので、適当にwidthを1000pxとして再度検証。
するとやはり、
**27,423,000px（面積）/1000px（width）**
の計算結果として得られる**27,423px**が、ブラーが適用されるheightの上限となった。
![CleanShot 2024-12-24 at 19.16.45@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3571075/2b55f1df-3acf-3841-73e8-0c864bf48312.png)

![CleanShot 2024-12-24 at 19.18.32@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3571075/d44c8b8e-1470-1843-593a-b1f37e421860.png)

width500pxなどで試しても同様の検証結果が得られ、また-webkit-backdrop-filter: blurのみならず、-webkit-backdrop-filter: invertや-webkit-backdrop-filter: contrastでも同様だったため、**-webkit-backdrop-filterに、要素の面積が27,423,000px程度（特定は面倒なので興味のある方がやってください）を超えると無効になるという仕様がある**と言うことができそうである。



## 他のベンダープレフィックスはどうなの？


全部確かめたわけじゃないので断言はできないですが、今のところそういった現象を確認できたのは-webkit-backdrop-filterだけでした。

## おわりに
そういうものだと言うことだけは分かりましたが、ホームページに長文を掲載できないという課題の解決策は結局分からずじまい。まあ運用でカバーすればいいと言う話ではあるのですが、何かいい方法をご存じの方はコメントにてご教示いただけますとめっちゃ助かります。
2025年開催の技術系大型イベントまとめてみた(随時更新)

こんにちは、ふるすです。
今年7月に開発へ異動して以降、いくつかの技術系イベントに参加しました。

2024/2　Developers Summit 2024
2024/7　Developers Summit 2024 Summer
2024/10 Qiita Conference 2024 Autumn
2024/11 Women Developers Summit
2024/12 Developers CAREER Boost 2024 

オフライン開催のものにもいくつか参加しましたが、セッションがおもしろいのはもちろんのこと、ノベルティがもらえるブースがあったり、他社の方と気軽にお話ができたり、新たなサービスを知る機会にもなりました。
また非エンジニアの立場からすると、そもそもこういったイベントが頻繁に開催されていることも驚きでした。

来年はもっとたくさんのイベントに参加するぞ！ということで、忘れないよう大型イベントをまとめてみます。

**2025年1月**

・1/17(金)　Qiita Advent Calendar 2024 Online Meetup

https://increments.connpass.com/event/336093/

・1/29(水)　Qiita Woman Summit supported by パナソニック コネクト

https://increments.connpass.com/event/339944/

アドカレイベントの後夜祭的な立ち位置ですね。
表彰式やLTがあるみたいです！

**2025年2月**

・2/13(木)~14(金)　Developers Summit 

https://event.shoeisha.jp/devsumi/20250213

**2025年4月**
・4/23(水)~25(木)　Qiita Conference 2025

https://corp.qiita.com/releases/2024/12/qiita-conference-2025/

この中でも私が特に注目しているのは「Qiita Woman Summit」です。
元LINEヤフー株式会社の技術広報としても有名な佐藤祥子さんも基調講演をされるようで今から楽しみです！

コチラの記事は今後も随時更新していきます。
cURLを使ってPageSpeed InsightsのAPIにアクセスしてみる

## 概要

cURLを使ってターミナルからPageSpeed InsightsのAPIを実行し

## 方法

1. 下記を実行

    ```terminal
    curl https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://developers.google.com
    ```

1. `url=`のあとに計測したいページのURLを設定することで任意のページの速度を取得する事が可能

    

## 参考文献

https://developers.google.com/speed/docs/insights/v5/get-started?hl=ja

https://developers.google.com/speed/docs/insights/v5/reference/pagespeedapi/runpagespeed?hl=ja#response
【ブラウジング初心者向け】Vimium-c チートシート マスターしたいコマンド12選

## いちばん使うアプリはブラウザ
なにをするにしても初心者のうちは、わからない、知らないことが多いのでブラウザでの調べ物が多くなりますよね。
ということは、必然的にブラウザの操作時間が増えてきます。

普段、Chromeを使っているのですがChrome純正のコマンドだけだとマウスから完全に手を離せないシーンがおおいです。

ちなみにChromeでのショートカットは以下になります。
https://support.google.com/chrome/answer/157179?hl=ja&co=GENIE.Platform%3DDesktop

ブラウジングの操作の時間を短縮できるということは、他に使える時間が増えることになるのでまずはブラウジング速度を上げていくのはどうでしょうか。

## 拡張機能「vimium-c」をインストール

ブラウザをVimライクなコマンドで操作できるようにするための拡張機能です。
この機能のおかげでマウスから手を離すことができるようになります。

https://chromewebstore.google.com/detail/vimium-c-all-by-keyboard/hfjbmagddngcpeloejdejnfgbamkjaeg/related?hl=ja

[^1]: ちなみにGitHub https://github.com/gdh1995/vimium-c

## 頻出操作をカバーできる12個をまず覚える

ここで、コマンドが表になっているとキーと動きがイメージしづらいなとおもったので、1枚の図にしました。
たとえばスクロールのところにある `gg` は**ページ最上部にスクロール**します。`j`は**少し下にスクロール**します。

![CleanShot 2024-12-24 at 18.52.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883/b34f81b9-0c3f-b220-f1fa-f410fac65037.png)

## 操作例）タブを開いて、検索結果を閲覧して、タブを閉じるまで

1. タブを開く
1. キーワードで検索
1. Googleの結果からリンクを開く
1. ページスクロール
1. 次のリンクを開く
1. タブを閉じる

キー入力に置き換えると。

1. `t`
1. `{検索文字}`
1. `j`で探し、`f`
1. `j`, `k`
1. `f`
1. `x`

## Webアプリの操作にも活かせる

今回はブラウジング時を対象に説明をしてきましたが、自作のウェブアプリを操作するときにも流用できます。
毎日すこしずつコマンドを覚えていくことでブラウザを自由自在に使えるようになっていきますし、操作スピードがどんどん圧縮されていって時間効率がぐんぐんあがっていきます。お試しください！
新人エンジニアこそ朝活しよう

私は、社会人になって3～4ヶ月目くらいから、できるだけ早起きして仕事をする、いわゆる「朝活」を始めました。
現在は大体7時~8時に出勤して、残業した日でも19時には終えるような生活リズムで仕事をしています。
働くベストな時間帯というのは人それぞれ異なりますが、新人のうちは特に、朝型の生活が仕事の効率を高めてくれると感じています。この記事では、私が感じたメリットについてお話したいと思います。

# 質問や相談のチャンスが増える
これは特に、業務の中でわからないことや行き詰ってしまうことが多い新人の方にとっては大きなメリットだと思います。

例えば10時から勤務を開始した場合、午前中にミーティングが多く入りがちで、自分の作業が進まないこともしばしば。必然的に作業開始は午後からとなり、疑問点が生じても相談タイミングが不規則で、場合によっては相談相手が捕まらず、待ち時間が発生することもあります。

では、勤務開始を2時間早めて8時スタートにした場合はどうでしょうか。(私はですが、)朝のミーティングは10時頃から始まることが多いので、少なくとも1時間以上作業時間を確保できます。疑問点をリストアップしておけば、ミーティング中に相談し、午後に時間をとってもらうよう依頼することができます。相談を受ける側も具体的な予定があると、準備がしやすくなるはずです。

また、夜遅くに質問をするのは心理的な抵抗を感じがちです。相談相手が既に退勤していることも考えられ、タイミングを逃してしまうこともあります。さらに、相談までの時間が長引けば、質問の解像度が下がり、内容を思い出すのにも時間がかかります。

しかし、早朝から勤務すれば、たとえ残業したとしても夕方で対応できる方も多く、比較的質問しやすい環境になります。1時間早くするだけでも、質問できる機会が増え、仕事の効率は向上するはずです。

# タスクを区切りまで進めやすくなる
残業することを推奨したいわけではありませんが、やりたいタスクをやり切ってしまいやすくなるというのもメリットの一つです。

10~19時が定時だと、2時間残業すれば21時です。ちょっとやってしまいたいな...というタスクをやるには疲労がたまってくる時間帯ではないでしょうか。  
8~17時が定時であれば、2時間残業しても19時。もう一仕事やってしまいたい！と思って頑張れる時間かと思います。

# 退勤後に心理的な余裕ができる
これは超個人的主観によるものですが、17~24時の7時間と、19~深夜2時の7時間であれば、前者の方が心理的な余裕を感じます。早めの時間の方が、買い物や外食、ジムに行く、というような外出する用事がしやすいのではないでしょうか。眠くなってくる深夜よりも、20時くらいの方が勉強も捗るでしょう。そして何より、早く終わった気がして少々お得感があります。仕事時間外のQOLも仕事のモチベーションにも直結します。ある意味これが一番のメリットかもしれません。

# おわりに
もちろん、「朝活」はだれにでも効果的なものではないと思います。夜型で生産性が高い人もいるでしょう。  
一番重要なのは、生活リズムを一定にすることです。その生活リズムを整える方法の一つとして、是非「朝活」を試してみていただければと思います。

# Note：医学的根拠はあるのか...?
ちなみに、早起きすることに医学的なメリットがあるのかというと、実は、それ自体にメリットはあまりありません。かつては「午後10時から午前2時が睡眠のゴールデンタイム」などと言われていましたが、最近の研究でそれは誤りで、重要なのは睡眠の質と時間であることがわかっています。  
しかし、朝早く起きつつ、睡眠時間を確保しようとすれば、おのずと早く寝る必要があるため、決まった時間に寝て、決まった時間に起きるという生活サイクルの確立につながるでしょう。  
生活リズムが一定になることが健康に良い影響を及ぼすのは間違いないので、副次的に健康になる効果も期待できるかもしれません。
社長に【ポンコツ】と言われるも10年働き続けた経験から思う成長とは

# はじめに

この記事は、株式会社スピードリンクジャパン Advent Calendar 2024 の25日目の記事です。


https://qiita.com/advent-calendar/2024/slj

#

この記事を開いていただきありがとうございます。
私は今年でエンジニア歴10年目の鈴木と申します(社員にはゆっけと呼ばれています。)

今回は10年働いた経験を元に、自分なりに成長するとはどういうことなのかを書こうと思います。
10年働いていると酸いも甘いも様々な経験をしてきたので振り返る意味でも丁度いい機会だと思いこの記事を書くことにしました。

では私の経歴を説明させていただきます。


## 入社前
なかなか内定を貰えず入社する2ヶ月前の2月にようやくスピードリンクジャパンの内定をもらうことができました。
すでに内定を貰っていた同級生の縁で、来年度向けの会社説明会をしていたところに参加させていただき、そこで内定辞退があったことを知り、面談させていただけることになりました。
後々社長にその時の話を聞くと、内定基準を満たしていなかったが、その同級生が私のことを強く押してくれていたのでしょうがなく内定をしてくれたそうです。
バーター入社ですね。

## 入社1年目
C#とjavaを使ったWebアプリケーションの開発案件に参画
面談がなかなかうまくいかず、先輩社員が配属していた案件にOJTでの参画になります。
ただこの現場は9ヶ月で契約が打ち切られてしまい退場することになってしまいます。
コミュニケーション能力が低く、仕事をうまく進めることができずに成果が上げられませんでした。

## 入社2年目
PHPを使ったWebアプリケーションの開発案件に参画
この現場も先輩社員とセット販売で参画することができました。
なんとこの現場も3ヶ月で契約が打ち切られてしまいます。
自分のスキル不足により現場の社員の信頼を得られることができませんでした。

## 入社3年目途中
パッケージソフトのテスト案件に参画
開発案件に行きたかったですが、営業から今までの経緯から開発案件に行かせられないと言われ、この案件の参画になりました。
現場で評価をしてもらうことができれば次は開発案件に提案できるという話を信じ、テストケースの作成や実行を徹底的に行い、
今までの開発経験もあったことで、テストの理解度が高く、不具合発見や項目作成で力になることができました。

## 入社3年目途中～入社6年目
javaを使った大手ファッション系ECサイトの開発案件に参画
前現場での仕事が評価されたことで開発案件に参画することができました。
入社当時からいつかは行きたいと目標にしていた現場でもあり、とても嬉しかったことを覚えています。
ただここでもすぐに契約を打ち切られてしまいそうになりましたが、先輩社員に助けてもらいつつ意地でも辞めるわけにはいかないと必死にしがみつきました。
先輩から言われたコミュニケーションで気にしなければいけないことを付箋に書いてディスプレイに貼ったり、自分のスキル不足を感じspringbootの本を買って自己学習をしました。
心身ともにしんどすぎてストレスで健康診断の検査に引っかかることもありましたね・・・

## 入社7年目
javaを使った業務システムの開発案件に参画
前現場に残り続けることも考えていましたが、自分の成長を感じられなくなり、新たな成長機会を求めて、営業の方と相談させていただき、この現場への参画となります。
いわゆる炎上案件というもので、この現場での経験でどんな案件が来ても耐えられる自信がつきました。
先輩と意見がぶつかってしまうこともありましたが、自分の考えの未熟さに気づくことができました。

## 入社8年目～10年目
javaを使ったWebアプリケーションの開発案件に参画
仕事にも慣れてきて余裕がでてきたとともに、一定の成果で満足してしまっている自分がいました。
そんな悩みを先輩に相談すると今の私はまだ自分視点からの話しかできていないと言われました。
スケジュールに追われ、機能の使いやすさよりも、納期を優先してしまいがちだったのですが、ユーザーが使いやすい機能を検討するべきだということに気づかされました。

## 成長とは
自分はこういう人間だなと思っていても、相手には全然違う風に思われていることがありますよね。
それと同じで自分の評価は他人が決めます。
そして自分の課題も他人が持っています。

私の経歴を読んでいただければ察して頂けたと思いますが、私は常に人に支えられてきました。
何か課題にぶつかる度相談を乗ってくれる人がいて、気づかなかった自分の課題を指摘してくれます。
その課題と向き合って少しづつ改善していくことが成長していくことだと私は思います。
時にはそこまで言わなくていいだろと思うことや、自分はなんて駄目な人間なんだろうと責める日もありましたが成長痛みたいなもんですね。

## おしまい
成長するためには、自分の課題から目を背けずに向き合うことが大切です。
どんなに小さな課題でも、それを解決しようと自ら行動することが、あなたを大きく成長させてくれます。
つらい時もあるかもしれませんが、ぜひ積極的にチャレンジしてみてください。

もらってばかりいた10年間ですが、少しづつそれを返せるように働いていきます。
ここまで読んでいただきありがとうございました。
【Laravel】－初学者向け 認証について

Laravelには認証機能があります。

「Laravel Breeze（ララベルブリーズ）」という認証機能があります。
ログイン、ユーザー登録、パスワードのリセット、メール検証、パスワード確認といった機能があります。
インストールすると、下記のログイン画面が出てきます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929458/e2d17b74-198f-8770-98d4-1a0d6fbfd8d9.png)

# Laravel Breeze（ララベルブリーズ）インストール方法

* コマンドプロンプトを開きます。
※1.13はバージョン名を入れています。
```
cd プロジェクト名
composer require laravel/breeze:^1.13 --dev
```
composer.jsonに下記のように追記されております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929458/2f1e69f2-aa92-d677-30f5-e6aad83e8bd9.png)

再度、コマンドプロンプトを開き、下記のコマンドをたたきます。
```
php artisan breeze:install
```
インストールすると、様々なファイルに追記されます。

composer.json 追記 package.json 追記 
App\Models\User.php 追記 
resources/css/app.css 追記 
resources/js/app.js 追記

下記が追加されます。 
```
App/Http/Controllers/Auth 
App/View/Components  
resources/views/auth 
resources/views/components 
resources/views/layouts 
resources/views/dashboard.blade.php 
routes/auth.php
```

コマンドをたたき終わったら、下記画面にログインや登録画面が出てきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929458/f05057ea-dd65-ed09-01e5-c46467967b0d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929458/39731993-9e92-3834-6c06-4983f9b355c3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929458/606cdc34-770c-0ac9-2f9c-640bfdfe6f16.png)

これで認証についての機能が追加されております！
ControlDesk条件切り替えアルゴリズム

## 1. はじめに
アクチュエータのON/OFFとか出力する条件をワンクリックで切り替えたいときって結構あると思います．
制御対象の提示力を弾性モード(F=kx)から粘性モード(F=Cx')に変更するなどなど...
そんなときに使う小技です．

## 2. Simulinkモデル
### (1) 2値を切り替える
ON/OFFを切り替えるだけならSwitchブロックを使います．
真ん中の端子がif文の条件になっており，trueなら上側，falseなら下側のルートを出力します．
u>0の条件にして0ならOFF, 1ならONという使い方をよくします．

### (2) 3値以上を切り替える
Switchブロックの組み合わせでも実装できないことはないですが，
`Multiport Switch`ブロックを使用すると省スペースで可読性も高いので便利です．

## 3. ControlDeskレイアウト
各ブロックの条件端子に入力するconstantブロックとボタン系のInstrumentをリンクします．

(1) `Radio Button` Instrumentを配置
(2) 条件端子に接続しているConstantブロックをアタッチ
(3) `Properties > Radio Button > Buttons`の`右側の...`をクリック
Buttonsウィンドウが出現
(4) 左側のSelect a node to editで編集したいボタンを選択
(5) 右側のPropertiesで値を変更
- Text: ボタンの表示名
- Value: 押されているときに出力する数値
例) ON/OFFの場合
  - Button 1 [1]
  Text: ON
  Value: 1
  - Button 2 [2]
  Text: OFF
  Value: 0

例) 3値以上の場合
  - Button 1 [1]
  Text: Elastic
  Value: 1
  - Button 2 [2]
  Text: Viscous
  Value: 2
  - Button 3 [3]
  Text: Off
  Value: 3
(6) 見た目を変える
`Properties > Radio Button > Radio button style`をRadio button -> Modern buttonにするとその名の通りモダンになります．
Clineを使って簡単なWebアプリを作る（Spring Boot3）- その３

今日はあえてCline（AIエージェント）の苦手なところ（残念なところ）を解説します。
ただし、これらは指示する側が気をつけることで回避できます。

# 規模の大きな製造は途中で中断してしまう

どんな無理な要望でも設計して製造できるのですが、順にタスクをこなしていると
「429 Too Many Requests」
というエラーが発生、1分間プロンプトを受け付けなくなります。
1分後にエラーが解消してタスクを実行できても、また次のタスクの実行で同様のエラーが発生します。
こうなると、もう、無理に継続するよりも、いったんタスクを終了して、新しいタスクをスタートさせた方が効率よく作業できます。

:::note info
アプリや機能全体への指示ではなく、小規模で限定的な指示をすることで、自律的にタスクをスムーズに完結できます。
:::

# 期待どおりの機能を作ってくれないことがある

生成AIの特性ですが、同じ指示でも、毎回同じ結果になりません。
繰り返し指示をするか、指示内容を具体的にすることで、ゴールの精度を高める必要があります。

:::note info
具体的に指示することや、タスクの処理中に割り込んで追加指示や訂正指示することで、期待するゴールへ誘導できます。
:::

# バグ修正できず、無限ループすることがある

バグが発生した時、ログをプロンプトに貼り付けて、解析と修正をさせることが可能ですが、
まれに無限ループ（修正と確認）に入って、抜け出せなくなることがあります。
この場合、タスクを停止して、指示の仕方や視点を変える必要があります。

:::note info
タスクが期待する方向に向かっていなかったら、すぐにタスクを止めましょう。
指示の仕方を変えたり、ヒントを与えることで、AIが正しい処置を行うことができます。
:::

# 最後に

Cline（AIエージェント）は**とにかくすごい**です。
コツはありますが、指示通り、間違いなく指示された機能を自律的に製造できます。
ただし、指示する側が配慮すべき点（ノウハウ）がまだまだあるため、初心者が誰でも簡単に使いこなせる、とまではいかない気がしています。
膨大な知識をもつAIが優れたエージェント機能をもった今、人間に残されたのは高度な「要件定義」「設計」「品質チェック」「マネージメント」かな、と思う今日このごろでした。
【ML初心者アドベントカレンダー】AWS Certified Machine Learning Engineer - Associateを受験します


# この記事の目的

AWS Certified Machine Learning Engineer - Associate を受験してきますという強くて固い鉄壁の意思表示です。

https://aws.amazon.com/jp/certification/certified-machine-learning-engineer-associate/

# 試験概要

他の Associate 試験と同様に試験時間は130分です。

設問は 65個あり 1000点満点中 720点以上で合格となります。
配点は公開されていませんが、内 15問は得点に関係がない問題です。
50問中 7割正解で合格ということを考えると **35問** 正解できればヨシ、という感じですかね…。

受験料金は150USDなので現在の相場だと23000円くらいです。いたいですね。


2025/02/15までに資格を取得すると「すごい！早いね！」 という感じのデジタルバッジがもらえます。

# 対策

われらがUdemyさんが講座を用意してくれています。

https://www.udemy.com/course/aws-certified-machine-learning-engineer-associate-mla-c01/?srsltid=AfmBOoo8x6Py2XT3qEhX3tSj5fnhgb36kjlGUMtt6GNxdMq_xszVle83

AWS Skill Builder にアカウントがあれば、模擬問題を受けることもできます。

https://explore.skillbuilder.aws/learn/course/external/view/elearning/19689/exam-prep-official-practice-question-set-aws-certified-machine-learning-engineer-associate-mla-c01-japanese

機械学習についての基本的な諸々は本アドベントカレンダーでまとめましたので、よかったら見ていただけますと幸いです。
（明らかにこれ違うだろ、みたいな解釈が書いてあれば指摘していただけると学習の支えになりたいへん助かります。）

https://qiita.com/advent-calendar/2024/makenai-ml-2024


# 感想

本当はこの記事を作成するまでに受験を終える予定だったのですが、現時点で自信が全くなく、震えながら試験延期の申し込みをしてきました。情けない話です…。

結果は後日（できれば年内）にこちらの記事に追記をする形でご報告します。

---

アドベントカレンダーを始める前まで、機械学習とAIの違いすら分からないありさまでしたが、今では多少の知識とAI Practitionerの認定を得ることができました。

学習の一環で Amazon Rekognition のカスタムラベルを用いて簡単な画像識別モデルを作ってみたりもしたので、いつか別の記事にまとめたいと思います。

Qiita に公開して良いのか？と首をかしげるほど、個人的な拙い勉強のノートでしたが、誰か一人でもこのアドベントカレンダーを見てくれている方がいる、ということが私にとっての最大のクリスマスプレゼントです。

最後までお付き合いいただきありがとうございました。

# 2025年2月7日 追記

1月末に受験し、無事に合格しました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944443/003fc8e6-d000-43ff-8938-636a61762d23.png)


AI Practitioner よりも AWS に寄った問題が多く、試験中に「た、助かる～！」と言いそうになりました。
アドベントカレンダーの完走賞であるぬいぐるみも無事にゲットできたので、毎日眺めて過ごそうと思います。
sms認証も安全ではないというお話

# はじめに
SMS認証の実装に伴い調査を行った所、予想以上な被害が出ていることを知ったので備忘録として残します。
（ただ単に、自分が認知していなかっただけなのです。。。）


# SMS認証は本当に安全？ 今知っておくべきリスクと対策
昨今、オンラインサービスの認証手段として利用されることの多いSMS認証。一見便利で簡単に見えますが、その背後に潜むリスクが存在しています。
本記事では、SMS認証に潜む意外な危険性と実際の被害事例、そしてその対策について解説します。

# SMS認証の3大リスク

2016年7月に米NIST（国立標準技術研究所）では、安全ではないという見解を示しています。

SMS認証が危険視される理由として、以下の3つが挙げられます
1. ロック画面へのコード表示
    - ロックされたスマホでも認証コードが通知表示されるため、第三者が盗み見できる可能性があります。
2. SIMスワップ詐欺
    - 被害者のSIMカード情報を乗っ取る手口で、偽造した本人確認情報を用いて携帯キャリアでSIMカードを再発行します。
3. SMSインターセプト
    - スパイウェアやネットワーク上での傍受によって、SMS内容が盗まれるリスクがあります。



# 被害が止まらないSIMスワップ詐欺

## 2018年～2021年（米国）
アメリカではスマホ普及とともにSIMスワップ詐欺が猛威を振るい、総被害額は膨大なもの(約100億円の被害)となりました。[^1]

## 2020年～（日本）
2020年ごろから急増し、2022年には被害総額が約4億円に達しました。
事態を重く見た警察庁と総務省は携帯電話事業者に対して本人確認の強化を要請しました[^2]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632357/ecd18043-386a-d03b-d7b8-208c4a0ef9b5.png)
↑図：警察庁「キャッシュレス社会の 安全・安心の確保に向けた検討会 報告書」より抜粋[^3]

徐々に被害件数が減少傾向にあるものの、2024年5月に日本の議員も被害に遭遇。
議員の携帯電話が不正に機種変更され、高額な商品購入に悪用されたケースがSNSで話題になりました。[^4]



# SIMスワップ詐欺の巧妙な手口とは？

1. ターゲット情報の収集
不審なSMSやメールでウイルスを送り込み、個人情報を抜き取ります。
以下のようなメッセージが送られウィルス感染させられる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632357/4ac08373-33b1-10b0-2986-e2c4358af521.png)
↑トビラシステムズ「詐欺SMSモニター」より抜粋[^5]

2. 本人確認書類の偽造
偽造された運転免許証やマイナンバーカードを使います。

3. SIMカード再発行
「スマホを失くした」と嘘をついて、携帯ショップでSIMを再発行。

4. アプリの不正利用
SMS認証を突破し、送金や高額商品購入などの犯罪行為を行います。

図解: SIMスワップ詐欺の全貌
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632357/b5b3ff1e-961e-5d58-0990-dd89f79d856e.png)




# 日本と世界で進む対策
## 国内の動き
デジタル庁は、より安全な認証手段としてマイナンバーカードを活用するアプリをリリースしました

- デジタル認証アプリ（2024年6月）：本人確認や署名を簡単かつ安全に行えるツール[^6]
- 対面確認アプリ（2024年8月）：ICチップを使い、本人確認の精度を向上[^7]

## 海外の動き
アメリカでは、「番号ポータビリティ(LNP)」制度によって、SIMカードの移行が簡単に行えることから、対策が難しいとされており、SMS認証の代替として以下が提案されています。

- 認証アプリ：Google AuthenticatorなどのTOTPアプリを利用。
- 生体認証：顔認識や指紋認証などのセキュアな手段。

# 調査結果
SMS認証には確かにリスクがありますが、携帯キャリアが厳格な本人確認を徹底することで被害を防げる可能性があります。また、海外展開を視野に入れる場合、認証アプリや生体認証の導入がユーザー離れを防ぐ鍵となります。

# 読者へのアクションプラン
不審なSMSのリンクをクリックしないでください！




[^1]:https://eset-info.canon-its.jp/malware_info/special/detail/230706.html
[^2]:https://www.alsok.co.jp/person/recommend/4001/
[^3]:https://www.npa.go.jp/bureau/cyber/what-we-do/csmeeting.html
[^4]:https://www.itmedia.co.jp/news/articles/2405/30/news156.html
[^5]:https://smon.tobila.com/
[^6]:https://services.digital.go.jp/auth-and-sign/
[^7]:https://www.digital.go.jp/news/dcdfdde7-2a8e-4af3-8ffa-f95b48e62dbc
Google CloudのAPIキーを取得する

## 概要

Google CloudにてAPIキーを取得する方法をまとめる。

## 前提

Googleのアカウントを持っていること。
クレジットカードを持っていること。

※本説明はGoogle Cloudを使い始める部分から説明する。

## 方法

1. Googleアカウントでログイン
1. https://cloud.google.com/?hl=ja にアクセスし「無料で利用開始」をクリック
1. 内容を確認し同意できるなら「同意して続行」をクリック
1. お支払いプロファイルの入力設定と支払い方法の情報を追加、その後「無料で利用開始」をクリック

    ![CleanShot 2024-12-24 at 18.40.09@2x.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/4f72bbae-dba3-70ed-efe4-9927e428fd41.jpeg)

1. 下記のようになったら一旦Google Cloudの登録作業は完了

    ![CleanShot 2024-12-24 at 18.41.38@2x.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/dfd879aa-1b5c-5d22-8f68-6d6bce091cdf.jpeg)

1. ハンバーガーメニューからサイドバーを開き「APIとサービス」→「認証情報」をクリック

    ![CleanShot 2024-12-24 at 18.47.59@2x.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/fdce57d3-0ae7-1ca8-7289-00b511ec9b4d.jpeg)

1. 「認証情報の作成」をクリックし「APIキー」をクリック

    ![CleanShot 2024-12-24 at 18.48.55@2x.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/b02a9bc1-a8d4-d730-77f2-e896f8803f21.jpeg)

1. 下記の様にAPIキーが作成されたら完了

    ![CleanShot 2024-12-24 at 18.50.28@2x.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/17d6873b-d4d5-fbfa-ecfb-7c478ffdc0f4.jpeg)
.not_to マッチャー

#### 違うことを期待する

`rspec-expectations`は内蔵マッチャーの数で運ぶ。それぞれのマッチャーはオブジェクトのそれぞれの期待を正負に定義するためにexpect(..).`to`またはexpect(..).`not_to`を使う。
ほとんどのマッチャーは`(...).should` そして `(...).should_not`構文を使ってアクセスすることもできる。`expect`の使用を推奨する理由については`should`構文の使用を参照してください。

>rspec-expectations ships with a number of built-in matchers. Each matcher can be used with expect(..).to or expect(..).`not_to` to define positive and negative expectations respectively on an object. Most matchers can also be accessed using the (...).should and (...).should_not syntax; see using should syntax for why we recommend using expect.

>e.g.
```rb
expect(result).to   eq(3)
expect(list).not_to be_empty
pi.should be > 3
```

https://rspec.info/features/3-13/rspec-expectations/built-in-matchers/#:~:text=rspec%2Dexpectations%20ships,be%20%3E%203
E2Eテストの完全自動化までもうすぐ

# E2Eテストの完全自動化までもうすぐ

テストの自動化を調べていたら、興味深いニュースがあった。

https://blog.google/intl/ja-jp/company-news/technology/google-gemini-ai-update-december-2024/

Project Marinerは、AIエージェントがブラウザを操作して、タスクをこなすことができるらしい。
つまり、AIエージェントに指示を出せば、Webアプリを自動でテストしてくれるようになります。
あと1年てところでしょうか。

## 期待したいところ

* E2Eテストの自動化、バグの修正
* 脆弱性の評価と改善
* UI/UXの評価と改善提案
* サイトデザインの評価と改善提案
* SEO対策
* などなど基本何でもできそう

## そのた

* 最近はAIエージェントですね。AIは質問を答えてくれるところから、タスクを実行できるようになってきました。
* E2Eテストは比較的、簡単に精度高く実行できるのではないでしょうか。
「Qiita Night～エンジニアリングマネジメント～」に登壇しました！


めぐろLT Advent Calendar 2024 24日目の記事です！

https://qiita.com/advent-calendar/2024/meguro-lt

## はじめに

こんにちは。[@yug1224(Yuji Yamaguchi)](https://x.com/yug1224)です。

**「Qiita Night～エンジニアリングマネジメント～ (2024/12/06 19:00〜)」** に登壇したので、そのレポートになります！

https://increments.connpass.com/event/335090/

## 発表概要

<script defer class="speakerdeck-embed" data-id="81c035ca95c54365ac43bcbb3567f619" data-ratio="1.7772511848341233" src="//speakerdeck.com/assets/embed.js"></script>

**「メンバーの成長速度にバフをかける1on1ミーティング」** というタイトルで、私自身が1on1で気を付けているポイントについてお話しました！

- **1on1は議事録を必ず残す！** コンディションの変化を見逃さないように気をつけよう！
- ソラ・アメ・カサのフレームワークを意識して、**「事実」と「解釈」を分解して「打ち手」を一緒に考えよう！**
- **他人を変えることはできないが、他人は変わることができる！** メンバーのことを信頼し続けよう！
- リーダーとメンバー・先輩と後輩・同僚同士など、**タテ・ヨコ・ナナメいろいろな関係性で1on1をしよう！**
- **まずはマネージャーがファーストペンギンになって行動していこう！**

## 参考文献

この1on1に辿り着くまでに、参考にした書籍もいくつかあるので、こちらもぜひ読んでみてください！

- **[HIGH OUTPUT MANAGEMENT](https://www.amazon.co.jp/dp/4822255018)**
- **[シリコンバレー式 最強の育て方](https://www.amazon.co.jp/dp/4761272864)**
- **[ヤフーの1on1](https://www.amazon.co.jp/dp/4478069786)**
- **[エンジニアのためのマネジメントキャリアパス](https://www.amazon.co.jp/dp/4873118484)**
- **[エンジニアリングマネージャーのしごと](https://www.amazon.co.jp/dp/4873119944)**

## さいごに

<iframe width="560" height="315" src="https://www.youtube.com/embed/1RaAGMOqaqw?si=o4DjKDwfrG6p34TB&amp;start=2271" 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>

当日のチャット欄やSNSでの反響もだけでなく、その後の他イベントでも「見たよー」と言ってくださる方が多く、とても嬉しく思っています！

資料だけでなくアーカイブ動画もあるので、こちらもぜひ見ていただきたいです！

何か参考になったことがあれば、教えてください！

## We're hiring!

HRBrainでは一緒に働く仲間を募集しています。歴史に残るトライをしよう！

https://www.hrbrain.co.jp/recruit
ブラウザ拡張でダウンロードAPIを使う

# 概要

これは[初心者のブラウザ拡張機能 Advent Calendar 2024](https://qiita.com/advent-calendar/2024/browser-extension)の24日目の記事です。

ダウンロードAPIを使ってみます。

# やること

ブラウザ拡張で指定したサイトの画像をダウンロードします。

# 具体的なソースコード

```json:manifest.json
{
    "browser_specific_settings": {
        "gecko": {
          "id": "the-town-sample-download@example.com"
        }
    },
    "manifest_version": 3,
    "name": "init-extention",
    "version": "0.1",
  
    "description": "ダウンロードサンプル",
  
    "icons": {
      "48": "icons/icon-48.png"
    },

    "background": {
        "scripts": ["background.js"]
      },
  
      "permissions": [
        "downloads"
      ]
}
```

`permissions`に`downloads`を指定します。

```javascript:background.js
function onStartedDownload(id) {
    console.log(`Started downloading: ${id}`);
}

function onFailed(error) {
    console.log(`Download failed: ${error}`);
}

var downloadUrl = "https://cdn.qiita.com/assets/public/advent_calendar/countdown/countdown-1-979082f55d585a06da26f2de42e3197b.png";

var downloading = browser.downloads.download({
    url: downloadUrl,
    filename: "qiita_image.png",
    conflictAction: "uniquify",
});

downloading.then(onStartedDownload, onFailed);
```

ダウンロードには`browser.downloads.download`関数を使います。
ここではQiitaのサイトにある画像をダウンロードします。

この拡張機能実行すると、指定したURLの画像を取得してダウンロードフォルダへ格納されます。

# 参考

[ダウンロード API を使ってファイルをダウンロード](https://developer.mozilla.org/ja/docs/Mozilla/Add-ons/WebExtensions/Working_with_files#%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89_api_%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89)
RSCSSの感想

最近をRSCSSを使用することがあったため、感想を書きます。

## RSCSSとは
RSCSS（Reasonable System for CSS Stylesheet Structure）は、合理的かつシンプルなCSS設計を実現するためのコーディング方法論です。[Rico Sta. Cruz氏](https://x.com/rstacruz)によって提案され、保守性を高めることを目的としています。

### 構成要素
RSCSSの主な構要素は下記になっています。
* Components
* Elements
* Variants
* Layouts
* Helpers

#### Components
![component-example.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2557738/2a9a8bc6-1065-9bcb-7807-deab5d49a2df.png)
UIの各部分を個別のコンポーネントとして考えて設計します。

命名規則
コンポーネントの名前は少なくとも2つの単語を使い、ケバブケースで記述します。

記述例
```
× form
⚪︎ search-form
```

#### Elements
![component-elements.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2557738/fd517411-0cf0-ee02-1178-a38c0d4a1777.png)
エレメントはコンポーネントの中にある要素です。

命名規則
エレメント要素は1単語のクラスになります。

記述例
```
.search-form {
  > .field { /* ... */ }
  > .action { /* ... */ }
}
```

もし、2つ以上の単語が必要な場合は、ダッシュやアンダースコアを使用せず続けて書きます。

記述例
```
.profile-box {
  > .firstname { /* ... */ }
  > .lastname { /* ... */ }
  > .avatar { /* ... */ }
}
```

#### Variants
![component-modifiers.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2557738/45b09fe2-d19c-d129-b90b-9f14999e97c3.png)
ひとつのコンポーネントに対して他のバリエーションがある場合は、バリアントを使用します。

命名規則
バリアントのクラス名の先頭にはダッシュ（-）が付きます。

記述例
```
.like-button {
  &.-wide { /* ... */ }
  &.-short { /* ... */ }
  &.-disabled { /* ... */ }
}
```

#### Layouts
![layouts.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2557738/bed5eb25-94d5-4b59-b51e-f80517a307ec.png)
コンポーネントのポジションや幅などレイアウトに関わる指定をします。
コンポーネントは、再利用できるように作られるので、コンポーネントに下記ようなのプロパティを入れるのは避けましょう。

・positioning (position, top, left, right, bottom)
・margins (margin)
・dimensions (width, height)

記述例
```
.article-card {
  & { /* ... */ }
  > .image { /* ... */ }
  > .title { /* ... */ }
  > .category { /* ... */ }
}
```

#### Helpers
オーバーライドするための汎用クラスです。別のファイルに入れ、アンダースコア（_）で始まる名前を付けます。!importantでタグ付けするため、使用する際は要検討ください。

```
._unmargin { margin: 0 !important; }
._center { text-align: center !important; }
._pull-left { float: left !important; }
._pull-right { float: right !important; }
```

### RSCSSを書いてみての感想
公式は英語ドキュメントですが、Google翻訳（DeepLなどでも）でわかりやすかったです。
CSSの命名を考えるのに悩んでしまうときがあるため、簡単にCSSが書けるためよかったです。
レイアウトを親要素から指定しないといけないため、徹底するのが大変な印象です。
他の設計記法より理解はしやすかったですが、まだまだ完全にものにできていないため、習得がんばりたいです。

その他、詳細については[公式ドキュメント](https://rstacruz.github.io/rscss/)を参照ください。

#### 参考
https://rstacruz.github.io/rscss/
https://zenn.dev/mt5/articles/fb5189ecb874e2
https://rfs.jp/sb/html-css/html-css-guide/rscss.html
https://qiita.com/y___k/items/bedd6c2fdc61b4364aa2
https://tomcky.hatenadiary.jp/entry/2018/03/19/000139
Web Workerのfetch APIで遭遇したCORS問題：ViteでのData URL問題とその解決方法

# Web Workerのfetch APIで遭遇したCORS問題：ViteでのData URL問題とその解決方法

## はじめに

画面のスクリーンショットを取得する機能を実装する際に、思わぬつまずきポイントに遭遇しました。
`modern-screenshot`というライブラリを使用し、Web Workerで処理を行おうとしたところ、CORSエラーで詰まってしまいました。
この記事では、その問題の詳細と解決方法を共有したいと思います。

## 実装の背景

### やりたかったこと

- Webアプリケーションで画面のスクリーンショットを取得する機能を実装
- パフォーマンスを考慮し、`modern-screenshot`ライブラリを使用
- 処理の重さを考慮し、Web Worker上でfetchする

### modern-screenshotについて

`modern-screenshot`は画面キャプチャのためのライブラリです。Web Workerに対応していて、
メインスレッドをブロックせずにfetchしてくれる機能があります。
このとき、対応するjsのURLをworkerURLとして関数に引き渡せば機能が動くようになっています。


## 最初の実装

### コード

```typescript
const workerUrl = new URL('modern-screenshot/worker', import.meta.url).href;
const blob = await domToBlob(testTarget.value, { workerUrl,
    workerNumber: window.navigator.hardwareConcurrency,
    type: 'image/png' });
```


### 検証環境では動作したが...

モックAPIを使用した検証環境では問題なく動作しました。しかし、実際の開発環境に組み込んでみると以下のようなエラーが発生：

```
Access to fetch at 'https://api.example.com/data' from origin 'null' has been blocked by CORS policy
```

## 問題の原因

調査の結果、以下の要因が重なって問題が発生していたことが分かりました：

1. Viteの開発環境では、JavaScriptファイルがData URLとして読み込まれる
2. `new URL(...).href`で取得したURLは、ViteによってData URL形式に変換される
3. Data URLのoriginは`null`として扱われる
4. Web Worker内でのfetch APIリクエストは、originが`null`のためCORSエラーとなる

Viteには`Worker`を直接扱う機能がありますが、`modern-screenshot`のAPIはWorkerのURLを要求しているため、今回は使用できませんでした.
(それを使えれば、おそらくinline化されないので回避できると思います）

## 解決方法

Blobを使用して解決させました

```javascript
const workerCode = await fetch(workerUrl).then(res => res.text());
const blob = new Blob([workerCode], { type: 'text/javascript' });
const blobUrl = URL.createObjectURL(blob);

const screenshot = new ModernScreenshot({
  workerUrl: blobUrl,
});
```

## まとめ

Data URLはCORSがnullになるので、気を付けよう。

## 参考情報

- [modern-screenshot](https://github.com/qq15725/modern-screenshot)
- [Vite Worker Options](https://vitejs.dev/config/worker-options.html)
- [MDN Web Workers API](https://developer.mozilla.org/ja/docs/Web/API/Web_Workers_API)
- [Data URLs](https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/Data_URLs)
baserCMS 5系 小ネタ集（４系からの違いでハマった人のために・・）

[baserCMS](https://basercms.net/ "baserCMS公式サイト")
ver5系が登場して1年以上経過しておりますが、
今までbaserCMS ver4系を使用していた方で、5系になって仕様が変わってハマってしまうポイントも結構あるので、
私自身がこの一年で経験した、知っていれば簡単なのに、知らなかったがためにハマったポイントをいくつかこ゚条介します。
（ごくごく初歩的なハマりどころなので備忘録として残しておきます。）

## 現在のページのURL取得方法
初歩の初歩ですが、忘れていると意外とハマるので備忘録として
■ baserCMS 4系テーマ内
```php
$this->request->here;
```
■ baserCMS 5系テーマ内
```php
$this->getRequest()->getAttribute('here');
```
■■ 解説
baserCMSの4系の```$this->request->here```では、クエリはつきません。
5系で
```php
$this->request->getRequestTarget();
```
でURLを取得するとクエリがついてしまうため、思わぬバグを生みます。
（逆にクエリが必要なときはこちらを使用すれば、クエリ付きのURLが取得できます）

## 現在いるページのパスを取得する
■ baserCMS 4系テーマ内
```php
$this->request->params['pass'];
```
■ baserCMS 5系（場所によって少し変わる）
テンプレート内
```php
$this->getRequest()->getAttribute('params')['pass'];
```
Helper内
```php
$this->getView()->getRequest()->getAttribute('params')['pass'];
```

## 現在いるページなどのコンテンツ情報を取得する
コンテンツから必要な情報を抜き出して使いたいときに、使用します。
■ baserCMS 4系テーマ内
```php
$content = $this->request->params['Content'];
var_dump($content);
```
■ baserCMS 5系テーマ内
```php
$content = $this->BcBaser->getCurrentContent();
debug($content);
```
## ブログシングルページなどでタグ一覧を配列で取得する。
■ baserCMS 4系テーマ内
```php
$blogtags = hash::extract($post['BlogTag'], '{n}.name');
```
■ baserCMS 5系テーマ内
```php
$blogtagCollection = collection($post->blog_tags);
$blogtags = $blogtagCollection->extract('name')->toList();
```
## アップロードファイル関連の情報取得
結構面倒くさいし、知らないとできないのでメモ
```$data = $this->getRequest()->getData('XXXXXX');```
などで$dataにアップロードデータを取得した場合
■ baserCMS4系
```php
ファイル名 : $data['file']['name']
ファイル形式 : $data['file']['type']
```
■ baserCMS5系
```php
ファイル名 : $data['file']->getClientFilename()
ファイル形式 : $data['file']->getclientMediaType()
```
※ 補足
```php
ファイルサイズ取得 : $data['file']->getSize();
```
など他の情報も取得できます。

## 意外とハマるディレクトリ名の違い
### element
■ baserCMS4系
```
Elements/widgets/
```
■ baserCMS5系
```
element/widget/
```
widgets → widget は、BcAddonMigratorを使っても変換されないので、使用している場合は必ず手動でディレクトリ名を変更してください。

### error
■ baserCMS4系
```
Errors/
```

■ baserCMS5系
```
error/
```
こちらも現在はまだ、BcAddonMigratorを使っても変換されないので、使用している場合は必ず手動でディレクトリ名を変更してください。


:::note warn
注意
一部情報が古くなっている場合がございます。
その場合は、ご指摘ください。
:::
Viteを使ってReactの新規プロジェクトを作成する方法

## 1. Viteのプロジェクト作成コマンドを実行
まず、Viteを使って新しいReactプロジェクトを作成します。
ターミナルを開いて、以下のコマンドを実行してください。
```powershell
npm create vite@latest my-react-app --template react
```
`my-react-app` の部分はプロジェクトの名前で、自由に変更できます。

-----
## 2. プロジェクトディレクトリに移動
プロジェクトが作成されたら、そのディレクトリに移動します。
```powershell
cd my-react-app
```

-----
## 3. 依存関係のインストール
プロジェクトのディレクトリに移動したら、依存関係をインストールします。
```powershell
npm install
```

-----
## 4. 開発サーバーを起動
依存関係のインストールが完了したら、開発サーバーを起動してプロジェクトを確認します。
```powershell
npm run dev
```
ブラウザで `http://localhost:5173` を開くと、Reactの新しいプロジェクトが表示されます。


これでViteを使ったReactのプロジェクト作成が完了です。必要に応じて、追加の設定や依存関係をインストールしてカスタマイズしてください。
AWS Certified Security - Specialty合格体験記！

## はじめに
エンジニアを志して1年とちょっとでしょうか。CCNA,AWS SAA,SAP,SCSを取得することができました。これは私一人では合格できなかったと感じています。
今回合格することができたSCSにおいては、思っていた範囲をゆうに超えてきました(^^;愚痴（注意箇所）は後述です。。


## 勉強法
ひたすらにCloud Licenseを繰り返し勉強していました。トータルで4回くらいは1-62まで解いていました。点数は819点でした。試験後に悔しさのあまりすぐ見直ししました( ;∀;)セキュリティに関して実際に広く扱ったことがある方向けですね。歯が立たなかったといった率直な感想です。。
あとはサービスが被るので、実際にセキュリティに関する設定を行って手を動かすことをしていましたが、試験においてはそんな設定しますか？？といったまるで俺を試していますか？のような試験内容も一部ありました。

## 感想
準備不足でしたー((+_+))これに尽きます。セキュリティに関しては苦手意識もなく好きなサービスなのですが、今後継続して学習が必要なようです。
しかし、APIに関することやCognitoのフェデレーションに関する問題、またIAMポリシー、リソースポリシー絡みの問題クセありすぎですって(-_-)一本取られました|ω・)

## おわりに
落ち込んでいる暇はありません。現在の知識を技術に変えられるように手を動かします(-_-)
では！
生体情報によるデジタルウォレットの鍵管理

NEC セキュアシステムプラットフォーム研究所では、生体情報を利用した署名技術の研究を進めています。この研究は、ブロックチェーンにおける取引の真正性を保証するための署名技術への適用を目指しています。また、製造業分野における、トレーサビリティの向上に寄与することも視野に入れています。
 
 
# デジタルウォレットへの応用
デジタルウォレットを利用した仮想通貨取引や資格証明が主な適用分野です。近年、ユーザー自身が署名用秘密鍵を管理するウォレットが普及していますが、セキュリティに詳しくない一般ユーザによる秘密鍵の管理に課題があります。
そこで、なくさない・忘れない生体情報を秘密鍵の代替として利用する私たちのアプローチにより、鍵の漏洩や不正利用リスクを大幅に低減することが期待されます。私たちは同じ課題に取り組む様々なウォレットの鍵管理形態に関する調査を行い、生体情報を活用したウォレットの利点を明らかにするとともに、この技術をどのように実際のデジタルウォレットの設計や運用に取り入れるかを探求しています。
この取り組みに関連し、国際社会研究所（IISE）に上下二部構成で寄稿していますので、下記リンクよりご覧ください。

・デジタルウォレットに関する普及促進活動（上）：普及促進活動の概要　https://note.com/nec_iise/n/ne17805112743
・デジタルウォレットに関する普及促進活動（下）：BGINで議論進むウォレットガバナンス：https://note.com/nec_iise/n/n1f66e6d7ed11
「分析用のデータ準備でどれだけエンジニアは疲弊しているの？」レポートの紹介

2024年にデータ連携のCData から面白いレポートを出しています。『Data Connectivity: IT システムのミッシングリンク』というものですが、内容は、「分析用のデータ準備でどれだけエンジニアは疲弊しているの？」というものです。なんと、「41%のエンジニアさんが、1週間の業務時間の40-60%までの時間を社内のデータリクエスト対応に充てている」という結果が含まれています。この記事では、「データドリブン経営への努力の舞台裏」とも言える、このレポートの内容を紹介していきましょう。

レポートの詳細はこちらから入手可能です：[『Data Connectivity: IT システムのミッシングリンク』](https://www.cdata.com/jp/lp/data-connectivity-report-2024/)

この記事は[CData Advent Calendar 2024](https://qiita.com/advent-calendar/2024/cdatasoftware) の24日目の記事です。

本レポートは、従業員規模200人以上の会社の、データオペレーション（Data Ops）の意思決定者550人に対して調査を実施した結果をまとめたものです。

## データ分析に必要なテック要件が大きくなりすぎてしまった
「データにアクセスするために必要なテクニカルなリソースの量に圧倒されると感じることはありますか？」に対してなんと、2/3以上の方が「負担だ」と回答しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/1868cc69-3a96-a3d9-3b14-09c18455a890.png)

こちらは別の資料からの引用ですが、データ分析に必要な技術要素は、機械学習、BI・ビジュアライゼーション、RDB、API、DWH、ストリーミング、NoSQL DB、MDM、ETL、ELT、リバースETL、Data Lake、データ管理と、より高度になっています。できることも増えているのですが、習得しなければならない知識が増えてしまい、エンジニアは圧倒されている（Feel overwhelmed）なことは想像に難くありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/0dfe7507-b8c8-412a-0afb-6af4719a05af.png)


## どれぐらい企業はSaaS・アプリケーションを使っているの？
なんと、26種類以上のSaaS・アプリケーションを使っている企業が全体の60%以上を占めています。17%の企業では100種類以上のSaaS・アプリケーションを使っているのことです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/12cd993a-9b32-eca7-b47a-909e6f4caef0.png)

特にSaaS では、「REST API なんでしょ」とは言っても、仕様は千差万別です。データモデル、プロトコル、認証、クエリ方法などそれぞれ異なるSaaS・アプリケーションへのデータを分析用に使えるようにするには恐ろしいリソースが必要になります。しかも、SaaS のAPI 仕様は良く変わる！これが、データ取得の大きな問題です。

## データリクエスト対応に週の40-60%の時間を割いている！

多くのデータソース、それに対するデータドリブンな経営へのプレッシャーに対応するために、社内のIT 部門はどれだけの時間を割いているのでしょうか？

41%の回答者が週の時間の40-60％を社内の部門からのデータリクエスト（「このデータがほしい」）の対応に使っていると回答しています。より多い方もいるので、50%以上のIT エンジニアがこれ以上の時間を割いていることになります。社内のIT エンジニアの仕事は、社内アプリケーションの開発・管理や、ツール導入など多岐にわたり、データリクエストへの対応だけではもちろんありません。それを定型とアドホックなデータリクエストに割かれている状況は大変です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/d35d154a-cf93-e910-3a54-7c58d1b6d2fb.png)

## それでもデータ利用部門はデータアクセスに不満
社内のエンジニアが多くの時間を割いて業務データを分析用に提供してくれているにも関わらず、データ利用部門の約半数が「必要なデータにアクセスできていない」と感じているとのことです。そして、社内の意思決定が適切なデータに基づいていないと感じています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/08abcc67-520f-0f01-8ac5-e1aceefdca56.png)

そのような状態が続いているためか、データ利用部門のリーダーの一部（35%）は、データにアクセスする努力をあきらめてしまっていると回答しています。

その理由は、セキュリティ、データアクセス制限、データ共有の課題、ITリソースの不足、データガバナンスの権限といった項目があげられていました。

## まとめ
このように、データドリブン経営が目指される中で、データ準備をしているエンジニアたちは相当に圧倒されているということがわかります。

ということで、[CData](https://www.cdata.com/jp/) では、「データアクセス」に特化した製品を提供しています。データ分析自体ではなく、その前の多様なデータにアクセスすること、データアクセスを管理できるようにするという点で大きく課題を解決できるツールを提供しています。データをつなぐところまでは大変ですが、価値は生まれません。価値はデータで分析をしてアクションに移してはじめて生まれるものです。そこまでの負担はぜひ、ツールを活用して、価値を生むところに注力していただけることが理想と考えています。