OmniAICreator/Qiita-1.07M huggingface dataset:
Databricksノートブック、SQLエディタでのサンプルデータのプレビュー

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

![Screenshot 2025-04-23 at 13.43.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7b87e5c6-c0d1-4ce9-9138-28e403fcac14.png)

> **ノートブック、SQLエディタにおけるサンプルデータのプレビュー**
> ノートブックやSQLエディタでテーブルやビューの名前の上にホバーし、サンプルデータを確認するために**データをプレビュー**ボタンをクリックします - クエリーを実行する必要はありません。

:::note info
**注意**
本機能を使うには稼働中のクラスター、SQLウェアハウスが必要です。
:::

ノートブックの左のカタログボタンを押し、ノートブック上でテーブル一覧を表示させます。テーブル名にカーソルを持っていくとカードが表示され、その中に**データをプレビュー**ボタンが表示されます。

![Screenshot 2025-04-23 at 13.50.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/fec0ffe3-2cd1-4932-935a-543570e38687.png)

ノートブック下部にサンプルデータのプレビューが表示されます。

![Screenshot 2025-04-23 at 13.45.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/20503dd8-c372-4894-9fe6-ab1d3def6994.png)

### はじめてのDatabricks

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

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
Macの設定から「ディスプレイごとに個別の操作スペース」を変更すると影響すること

#### macOS の「設定」→「デスクトップとDock」の「Mission Control」にある「ディスプレイごとに個別の操作スペース」を、 オン にした場合と オフ にした場合の挙動を まとめてみました。

## 調査環境
- macOS Sequoia 15.4.1
- Mac Studio (2023)
- M2 Max 38-core gpu
- 32GB メモリ
- 512GB ストレージ
- QHDモニター(主ディスプレイ) ＋ FHDモニター(拡張ディスプレイ)

## 結果

### メニューバー表示

- オン: 各ディスプレイで メニューバーを操作できます。
- オフ: 主ディスプレイのみ メニューバーを操作できます。

### Dock表示

- オン: 主ディスプレイ以外でも Dockを表示できます。
- オフ: 主ディスプレイのみ Dockを表示できます。

### 画面をまたいで表示

- オン: またいでの 表示はできません。
- オフ: 画面をまたいで 表示できます。

### フルスクリーン表示

- オン: 他のディスプレイは ブラックアウトしません。
- オフ: 他のディスプレイが ブラックアウトします。

### ステージマネージャ

- オン: 使用 できます。
- オフ: 使用 できません。

### タイル表示等 (Sequoia以降)

- オン: 全機能を使用できます。
- オフ: ほとんどの機能がグレーアウトします。左右分割のSplitViewは使用できます。

![スクリーンショット 2025-04-22 19.06.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3559833/ec0053c1-03fa-4110-981b-410f3647c718.png)

## 個人的な見解

### 基本的には、オンにするのが良いみたいです。
ただし、Windowsと似た操作性を求める場合や、ディスプレイを上下に並べて使用している場合は、メニューバーが邪魔になるため、オフにするのも良さそうです。
【備忘録】WSL利用時にWindowsシャットダウンが正常に完了しない問題の対処法

## In a nutshell  
WSL（Windows Subsystem for Linux）を導入後、Windowsのシャットダウン処理が完全に終了せず、USB給電が継続するなどの問題が発生。`WSL`と`仮想マシンプラットフォーム`の無効化によって問題が解消。

---

## はじめに  
WSLを活用してUbuntuを導入した環境において、**Windowsシャットダウン後もUSB機器への給電が止まらない**などの挙動が見られた。この問題は、**WSLのシステム連携がWindowsのシャットダウン処理に干渉**していることが原因と考えられる。

---

## 発生状況の詳細  
- `wsl --list --verbose` をPowerShell 7で実行すると「ディストリビューションは存在しない」と表示 → WSL環境は削除済み。
- それにも関わらず、**シャットダウン後もUSBが給電されたまま**。
- **PCのファンも回り続ける**ため、完全に電源が落ちていない状態。
- `高速スタートアップ` や `Windows Update` の影響ではないことも確認済み。

---

## 原因と推察  
- WSLの機能（`Microsoft-Windows-Subsystem-Linux`）および `仮想マシンプラットフォーム`（`VirtualMachinePlatform`）が**有効な状態のまま残っており**、シャットダウン時の電源管理に干渉していた可能性がある。

---

## 対処方法  
以下のPowerShell 7コマンドを実行することで、問題が解消された：

```powershell
Disable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Windows-Subsystem-Linux"
Disable-WindowsOptionalFeature -Online -FeatureName "VirtualMachinePlatform"
```

これにより、WSLおよび仮想マシン関連機能が無効化され、**シャットダウンが正常に完了し、USB給電も停止するようになった**。

---

## 今後の対応について  
- 再度WSLを使用する場合は、以下のように再有効化する必要がある：

```powershell
Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Windows-Subsystem-Linux"
Enable-WindowsOptionalFeature -Online -FeatureName "VirtualMachinePlatform"
```

- WSL利用後に同様の現象が発生した場合は、**機能の有効状態を確認し、不要であれば無効化**することを推奨。

---

## 備考  
- この症状は、特定のPC環境やBIOS設定によって再現性が異なる可能性がある。
- WSL2の仮想環境が**シャットダウン後もレジュームを意識した状態**でメモリに残っていることが関連しているかもしれない。
URLひとつでダミー画像を生成する AnyPlaceholder.com を公開しました

ダミー画像がほしいときに簡単に使える、[AnyPlaceholder.com](https://anyplaceholder.com/)を作って公開しました。

[![AnyPlaceholder.com](https://anyplaceholder.com/placeholder?width=600&height=300&bg=48b6fab5&color=ffffff&text=AnyPlaceholder&fontSize=60&radius=10&format=webp)](https://anyplaceholder.com/)

# 1. AnyPlaceholder.com って何？

`https://anyplaceholder.com/placeholder?...`  
にパラメータを付けるだけで、**SVG・PNG などのダミー画像** を即時返すサービスです。  
**8 桁 HEX (α付きカラー)、角丸、Retina、WebP** まで対応しています。

- サイト : https://anyplaceholder.com

---

# 2. 使い方

最小例
```html
<img src="https://anyplaceholder.com/placeholder?width=300&height=200">
```

| パラメータ | 必須 | 型 / 例 | 既定値 | 説明 |
|-----------|:---:|---------|-------|------|
| `width`   | ✅ | `300` (整数, px) | — | 画像の横幅(最大3000px) |
| `height`  | ✅ | `200` (整数, px) | — | 画像の高さ(最大3000px) |
| `bg`      | － | `48b6fab5` ( HEX3,6(透過無し)・4,8(透過あり) ) | `cccccc` | 背景色。4桁・8桁時は末尾がアルファ値 (`0`〜`f`, `00`〜`ff`) |
| `color`   | － | `ffffffaa` ( HEX3,6(透過無し)・4,8(透過あり) ) | `333333` | テキスト色 |
| `text`    | － | `AnyPlaceHolder` | `"${width}x${height}"` | 中央に描画する文字列 |
| `fontSize`| － | `60` (px) | `20` | フォントサイズ |
| `radius`  | － | `10` (px) | `0` | 角丸半径。`format=svg/png/webp` で有効<br>`jpg` の場合は角丸描画はするがデータは長方形 |
| `format`  | － | `webp` `png` `jpg` `svg` | `svg` | 出力フォーマット |
| `retina`  | － | `bool` | `false` | `true` にするとサイズを2倍で生成 高DPI対応用 |

例: トップの画像はこちらです。
```url
https://anyplaceholder.com/placeholder?width=600&height=300&bg=48b6fab5&color=ffffff&text=AnyPlaceHolder&fontSize=60&radius=10&format=webp
```

## JPG だけ注意  
- `jpg` は αチャンネルが使えないため、背景は自動的に不透明化
- `radius` 指定時は見た目角丸、データ上は長方形になります

---

# 3. しくみをざっくり

| レイヤ | 技術 |
|--------|------|
| CDN    | CloudFront |
| 画像生成 | Lambda@Edge + Sharp |
| キャッシュ | 同一 URL を 24h エッジキャッシュ |

CloudFront + Lambda@Edgeで最小構成を目指しました。

---

# まとめ

* 8桁 HEX、角丸、Retina、WEBP までカバー  
* URL だけで完結  
* 画像自体は純粋なバイナリのみ（余計なスクリプトなし）

気軽に試してみてください 🙌
[Swift]辞書型のハッシュテーブルについて

## はじめに
辞書型は順序を保持しないと言われますが、内部的にどのように管理されているのか気になったため、調べてみることにしました。

## Dictionary型の内部構造
### ハッシュテーブルとは？
Dictionary型は「ハッシュテーブル」と呼ばれるデータ構造で実装されています。
基本的な仕組みは以下の通りです。

1. キーのハッシュ化
各キーはハッシュ関数によって数値（ハッシュ値）に変換されます
1. 値の格納
このハッシュ値を使って内部配列の特定位置に値を格納します

以下のコードは人間にとっては「key1, key2, key3」の順で定義されていますが、内部的には全く異なる仕組みで格納されています。
```swift
let dict = ["key1": "12345", "key2": "12345", "key3": "12345"]
```

### 内部実装の詳細
Dictionaryが内部で値を格納する簡略化した図は以下のようになります。
```text
内部配列: [空, 空, 空, ..., 空]  // 初期状態

// キー「key1」のハッシュ値が42と仮定
「key1」→ ハッシュ関数 → 42
内部配列: [空, ..., 42番目:「12345」, ...]

// キー「key2」のハッシュ値が7と仮定
「u」→ ハッシュ関数 → 7
内部配列: [空, ..., 7番目:「12345」, ..., 42番目:「12345」, ...]

// キー「key3」のハッシュ値が23と仮定
「p」→ ハッシュ関数 → 23
内部配列: [空, ..., 7番目:「12345」, ..., 23番目:「12345」, ..., 42番目:「12345」, ...]
```
この仕組みにより、定義時の順序は完全に失われます。

### まとめ
Swift辞書（Dictionary）は効率的なデータ構造ですが、その内部実装の特性上、キーの順序は保証されません。今後、順序が必要になりそうな場面では辞書を使わない方が改修がしやすいのかなと思いました。

### 参考
https://wa3.i-3-i.info/word11947.html
基本情報技術者試験　必要な勉強

## はじめに
１ヶ月ほど勉強をし、2024年4月に受験をし、A試験、B試験ともに750点を超え合格しました。（両試験ともに600点以上を取れば合格と言われています。）
週8〜10時間ほど勉強しました。
### 私は、、、
高校は文系、大学も文系（中退）
IT系の資格は初めて（運転免許しかない）
Rubyで簡単なwebサイトが作れる

Rubyが少し書けることで、B試験では少し有利だったかもしれません。ですが中学、高校レベルの数学を学び、数学的？論理的？な思考が少しでもできる方は、勉強すれば難しくないと思います。

## 使ったもの
この２つだけ

・【基本情報技術者試験YouTuber】すーさんのYouTube動画
https://www.youtube.com/@kihonzyouhou
・基本情報技術者試験過去問道場
https://www.fe-siken.com/fekakomon.php

## やるべきこと
・どんな試験か理解する
・A試験の範囲を一通り学習する
・B試験の練習をする

### どうすれば合格するか考えてみましょう
・A試験は基本的に知識を入れる。A試験は知らないと解けない問題です。
・B試験はコツを掴んで練習

## 実際に私がやったこと
### 🔸A試験
まず過去問道場をやってみたが全然できない
↓
YouTubeのすーさんの動画を見る（私は12時間にまとまっている動画を1.2から1.5倍速で見ました）
↓
１単元見終わったら、過去問道場でその単元の問題を解く

:point_up:重要なところが問題になるので、過去問でしっかりおさえましょう。同じような問題、同じ答えが本番も出ることが考えられます。

私は書かないと気が済まないタイプなので、重要そうなポイントはノートに書いてました。自分のスタイルに合わせてやってみてください。

### 🔸B試験
YouTubeのすーさんの動画を見る
↓
動画を見ながら動画内の過去問を解く

:point_up:アルゴリズムとプログラミング
やり方のコツを掴めば簡単です。動画を使ってコツを掴みましょう。

:point_up:情報セキュリティ
A試験の問題が解けていれば簡単です。問い方が変わっただけだと思いましょう。

## 過去問をどれぐらいやればいいのか問題
私の場合は、A試験は過去問道場で7から8割ぐらいできそうだなと思ったら次の単元に移ってました。間違えた問題は、チェックをつけて復習できるので、空き時間にチェックした問題を解いてました。

B試験に関しては、動画内で解説されている過去問をやり、解説を見ました。それ以外はやってません。

最後に過去問道場の模擬形式で出題を2回やり、模擬試験1と2を解き、本番に行きました。

あとは、空き時間に問題はちょこちょこやっていました。

## 本番
### 🔸ポイント
⭕️意外と見たことない問題出てきて焦る
・1000点中の4割は間違えても合格はするので、わかる問題を確実に取れるようにしましょう。また、勉強した知識から導き出せることもたまにあります。

⭕️時間を使いすぎてしまって焦る
・練習で模擬試験をやっているときは、2、30分ぐらい余りましたが、本番では時間を全て使いました。

本番は焦りますが、勉強した範囲から出ますので落ち着いて、できる問題を確実に解くようにしましょう（試験の基本）。

## 合格
いろんな勉強法があると思いますので、自分で調べて、この試験に合わせて勉強することが一番の近道ではないかと思います。
minメソッドの使い方

## 基本的な使い方
配列から最小値またはn番目まで小さい数値を出力する　
```ruby
[1, 2, 3].min  #=> 1
[1, 2, 3].min(2) #=> [1, 2]
```
## 便利な使い方
if a > b のような大小比較をせずとも1行でかける　
### ミスコード　
分岐が多くて見づらい
```ruby
new_value = increment + current_values[i]
    if new_value <= max_limits[i]
        current_values[i] += increment
    else
        current_values[i] = max_limits[i]
    end
end 
```
### 改良コード
シンプルな1行

```ruby
current_values[i] = [current_values[i] + increment, max_limits[i]].min

```
令和7年春期情報処理安全確保支援士試験を受けてきた。

## はじめに

2025/04/20に情報処理安全確保支援士試験を受けた感想を書いておきます

## 結果

最初に結論ですが、午後が惨敗でした！
なので、何も役に立たない記事かもですが、自身の為にアウトプットしておきます。

|科目|点数|
|--|--|
|午前1|免除|
|午前2|24/25|
|午後|50点あれば？くらい。

## 前提

### 受験理由

午前1免除の権利があるうちに何か一つ高度資格を取得しておきたいなと思い、全てのジャンルで必ず必要になるセキュリティーが良いのではと思い受験しました。

### 経歴

私自身はセキュリティーの実務はほぼありません。

バックエンドエンジニアとして、試験の一環でowasp zapを使った脆弱性診断したり、認証系（OIDC）の開発をする程度の関わりです。

## 受験した感想

### 午前2

こちらは簡単でした。

定番の過去問道場を通勤時間などの空き時間に消化するのみで問題ないです。

https://www.sc-siken.com/sckakomon.php

落とした１問は「sha512/256」について答える問題でしたが、ぶった切るようなことをすると、ハッシュ値が衝突してしまうのでは？と思い、違う選択肢を選んでしまいました。

### 午後

最初の10分で、解く問題を選ぼうかと思ったのですが、正直どれ解いていいかさっぱりでした。

問３がマルチテナントというテーマや、Authorizetionヘッダのお話が出てたので、ジャンル的にはマッチしてそうってことで選択。

問４は消去法で選びました。

問１はCI/CDでジャンル的にはぴったりだけど、最初の設問セキュリティ・バイ・デザインについての設問が不明だったので避けてしまった。

問２はEPSS値が分からず回避。

問３，４いずれも難しかったのですが、途中で選択問題を変えることは午後対策本でダメと書いてあったので、何とか回答を書くところまでは対応しました。

結果、問題選択でだいぶ焦ってしまって、解ける問題を逃したところが痛かったです。

以下のようなところは冷静になれば分かっていたはずで、ここが解けていればギリギリ受かってたかも。

 * 安全なドメイン名を攻撃者のサブドメインに入れる手法
 * サブドメインテイクオーバーの対応（対象のサブドメイン用のcnameレコードを消す）
 * whoisを答える問題
 
## 敗因

敗因についても考えてみました。

### ①知識不足

やはりここに尽きると思います。

午後対策本によると、IPAは過去問を攻略すれば6割は取れる仕組みになっているみたいなことを書いていましたがその通りだと思います。

今回は難化したとか、出題傾向が変わったなどの意見が多く、その通りかなとは思いますが、６割は過去問や午後対策本の知識で何とかなるレベルなのではと思います。

### ②過去問対策以外の対応をしていなかった

前回セキュアプログラミングの試験が出て、私が買った午後対策本もかなりの割合でページが割かれていたですが、今回は出題なし。

で、また今回の試験内容をピックアップした対策をすると、また次に別な分野からの出題、、ってことになりそうです。

おそらくIPAの以下のような記事にも目を通しておくことが必要なのかなと思いました。

パッと見ただけで試験で出たキーワードの記事が2024年に投稿されています。

ここらに目を通しておけば、問題の理解につながりそうです。

https://www.ipa.go.jp/jinzai/ics/core_human_resource/final_project/2024/security-by-design.html

https://www.ipa.go.jp/jinzai/ics/core_human_resource/final_project/2024/risk-assessment-methods.html

https://www.ipa.go.jp/jinzai/ics/core_human_resource/final_project/2024/sbom.html

### ③時計を忘れた

シンプルなミスなのですが、時計が会場に無くて時間配分できませんでした。

次からスマートウォッチじゃない時計買おう。。

## 最後に

結果は残念だけど、これだけセキュリティに詳しくなれたのは良かったことだと思っています。

全然あきらめていないので、7月以降また頑張る！
Claude DesktopからMCPでDatabricks AI/BI Genieに接続

こちらの横展開です。前回はCursorから繋ぎましたが今回はClaude Desktopから繋いでみます。

https://qiita.com/taka_yayoi/items/b29edb7daa50057d9e36

いろいろ繋いでみるとMCPの良さがなんとなく分かってきたような。

# 準備

Cloude Desktopの**設定**で**開発者**にアクセスして、**構成を編集**をクリックします。開いたファイルにMCPの設定を行います。前回のものを使うので同じ設定です。

```json:claude_desktop_config.json
{
  "mcpServers": {
    "databricks_test": {
      "command": "uv",
      "args": [
        "--directory",
        "/Users/takaaki.yayoi/cursor/my_first_mcp_server",
        "run",
        "main.py"
      ],
      "env": {
        "DATABRICKS_HOST": "https://<Databricksワークスペースのホスト名>",
        "DATABRICKS_TOKEN": "<DatabricksのPAT>",
        "DATABRICKS_GENIE_SPACE_ID": "<GenieスペースのID>"
      }
    }
  }
}
```

Cloude Desktopを再起動します。

初めはMCPの設定後にClaude Desktopを開くと以下のようなエラーに遭遇していました。`uv`の起動に失敗している様子。

```
2025-04-23T02:40:36.826Z [databricks_test] [error] spawn uv ENOENT {"context":"connection","stack":"Error: spawn uv ENOENT\n    at ChildProcess._handle.onexit (node:internal/child_process:285:19)\n    at onErrorNT (node:internal/child_process:483:16)\n    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)"}
```

こちらみたら`brew install uv`しろとのことで解決。

https://github.com/orgs/modelcontextprotocol/discussions/20

![Screenshot 2025-04-23 at 12.46.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f3594a3d-9326-4b18-8cb8-2a4f921a22f4.png)



# 動作確認

> Genieに東京の感染者数を聞いてください

MCPのツールを呼び出す際には確認ダイアログが出るので許可します。

![Screenshot 2025-04-23 at 12.45.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d0b7f9d4-c1a0-4aaa-b6cd-793c0cf136aa.png)

動きました。

フィルタリングしてみます。

> Genieに東京の2022年1月の感染者数の推移を聞いてください

![Screenshot 2025-04-23 at 12.48.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/737dd606-1211-45cb-9633-d12fae75e588.png)


可視化もお願いしてみます。

> 折れ線グラフにしてください

Cloude Desktop触り始めたばかりだったので、この挙動には驚きました。別ペインが表示されてグラフが描画されました。

![Screenshot 2025-04-23 at 12.47.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b9cde87e-8f19-44da-bc43-a1f9e1332e1e.png)

きちんと**データ出典: Genie API**とあるのがにくい。

![Screenshot 2025-04-23 at 12.50.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ad94f47c-5811-4338-b904-a80849236a42.png)

CursorやCloude Desktopのような(MCPクライアントと)MCPホストをMCPサーバーで拡張していくイメージですかね。

### はじめてのDatabricks

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

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
SSTI(server-side template injection)

# SSTI
webアプリケーションを効率的に開発を行うためにサーバーサイドでテンプレートエンジンを採用することがあります。

脆弱性対策を怠っていると、SQLインジェクションのように悪意のある入力によって、意図しない操作やファイルの改ざん・閲覧などがされる可能性があります。

## テンプレートエンジン
以下のようにテンプレートエンジンがいくつか存在します。
|テンプレートエンジン|特徴|
|--|--|
|Jinja2(Python)|Flaskでよく使われる|
|Twing(PHP)|Symfonyなど|
|ERB(Ruby)|Railsなど|

今回は**Jinja2**の脆弱性について解説します。

## Jinja2
まず、このテンプレートエンジンが使われていることを確認する必要があります。

```jinja
{{7*7}} --->49

{{"a"*5}} --->aaaaa
```

などの戻り値になれば、Jinja2と言えるでしょう。

## 攻撃方法を探す

```Jinja
{{ [].__class__.__mro__[1].__subclasses__() }}
```
これは、**現在使用できるクラスの一覧**が出力されます。そのクラスの中には、ディレクトリを見たり、ユーザ情報を取得できるものがあります。

ただ、何をやっているかさっぱりだと思うので、順を追って説明します。

### クラスを調べる

```python
[].__class__---> <class 'list'>
```
まず、'[]'のクラスを調べています。`<class 'list'>`と「'[]'は`list`クラスですよ～」と教えてくれます。
ここで調べるのはリスト以外でも問題ありません。
重要なのは、クラスの種類を出力させることです。

### そのクラスの親を導く

```python
[].__class__.__mro__[1] ---> <class 'object'>
```
次に、リストの親クラスの`object`クラスを出力させます。
リスト以外のクラスを調べたとしても、すべてのクラスは最終的に`object`クラスに辿りつくきます。
ただ、**`object`クラスにたどり着くことが重要**です。

`__mor__[1]`というのは、直接の親クラスを指します。
`__mor__[2]`とすると、親の親(祖先)を指しますが、今回は存在しないのでエラーになります。

### すべてのクラスをリストしよう
```python
[].__class__.__mro__[1].__subclasses__()
```
`__subclasses__()`は`object`クラスの特別なメソッドです。
現在メモリ上にロードされている、すべてのクラスのリストを返します。

実行時に Python がロードしている全てのクラス（内部クラス、標準ライブラリクラス、ユーザー定義クラスを含む）が表示されます。
その中でも重要そうなクラスをまとめます。

|クラス名|使い道|解説|
|--|--|--|
|subprocess.popen|コマンド実行|任意のOSコマンドを実行可能|
|warning.catch_warnings|__grobals__へのアクセス|`os` `open` `eval`の実行経路|

#### subprocess.popen

```python
{{ [].__class__.__mro__[1].__subclasses__()[IDX]("id", shell=True, stdout=-1).communicate()[0].decode() }}
```
ちょっと長いですが、`[IDX]`から追加されたコードになります。
`[IDX]`はsubprocess.popenのリスト番号です。
リスト番号がわからない場合は、F3で`popoen`と調べると`subprocess.popen`に誘導されます。
その状態でF3で`,`(クラスを羅列するときの区切り)を調べると、`subprocess.popen`が何番目にあるのかある程度特定することができます。

```python
{{ [].__class__.__mro__[1].__subclasses__()[350] }}
{{ [].__class__.__mro__[1].__subclasses__()[351] }}
```
などで特定できます。

`("id", shell=True, stdout=-1)`は、shell経由で"id"というコマンドを実行するコードです。
`"id"`を`"ls -a "`にすればすべてのファイルが表示されます。CTFなどではここにflagがあったりします。
cat flag.txtなどで中身を読みましょう。

`communicate()[0]`は、出力とエラーを表示するためのメソッドです。
[0]にすることで、返り値から標準出力(バイト列)を取り出します。

`decode()`は取り出したバイト列を文字列に変換しています。

# まとめ

テンプレートエンジンの脆弱性を突いた攻撃手法でした。
悪用禁止です。
テックブログを15日間毎日投稿して感じた変化と気づき

## はじめに 

昨日で、テックブログの連続投稿が15日目を迎えました。  
今日は本来記事を書く予定でしたが、ネタはあるものの理解が追いついていなかったため、あえてここで振り返りを行いたいと思います。

---

## なぜ毎日投稿を始めたのか？

一番の理由は、「学んだことを可視化したかったから」です。

投稿した内容は、自分の知識の整理だけでなく、後から見返すことで復習にもなります。  
また、転職活動の中で、「経験年数による評価」が強いと感じたことも大きなきっかけでした。

私はまだ経験が浅い側にいます。だからこそ、人一倍努力してきた記録を残しておきたい。  
「努力の証」として、学んだこと・試行錯誤したことを毎日アウトプットする場として、このブログを活用し始めました。

---

## 書くことで得られた学習効果

次に意識していたのが、「学習の定着」です。

言語化しようとすると、意外と自分が理解できていない部分に気づきます。  
実際に書く過程で、「なんとなく理解したつもりだったけど、説明できない」という壁に何度もぶつかりました。  
これを解消するために、都度調べ、理解し直す。このサイクルが深い学びにつながっていると感じます。

---

## 起こった変化

まず、アウトプットを重視する企業の方から、投稿を評価していただける機会がありました。  
まだ始めたばかりではありますが、「続けている姿勢」や「発信していること」そのものに価値を感じてもらえたのは嬉しい経験でした。

また、「投稿しないと気持ち悪い」という感覚が生まれてきました。  
これは、習慣として自然にブログを書くようになってきた証拠だと思います。

さらに、「思考力」が上がった実感もあります。  
ここ一ヶ月では、常にノートをそばに置き、

- 何が分かっていて
- 何が分かっていなくて
- 何を分かるようになりたいのか

を明確にしながら学習を進めるようになりました。  
ブログはそのアウトプットの形であり、情報を整理する力も少しずつ身についてきています。

---

## 今後改善していきたいこと

今は「自分の復習や理解のため」に書くことが中心です。  
ただ、これからは「誰かに見てもらう前提」で書くようになれば、さらに細かい点まで理解が深まるのではと感じています。

とはいえ、大切にしているのは**継続すること**です。  
見せ方や伝え方を意識しながら、今後も無理なく、でも少しずつ進化していければと思います。

---

## おわりに
最後に思うのは、テックブログを毎日投稿することで得られた最も大きな収穫は、「継続する力」と、それによって育まれた「自信」かもしれません。正直、テックブログを毎日書くのは決して簡単なことではありません。しかし、その継続の先には、多くの気づきと成長があります。これからも、学びを言語化し、記録し続けることで、自分の成長を実感していきたいと思います。
泣きそうな新人さんへ: ChatGPTさんからのメッセージ ーー きょうもシンギュラってますよ！

やあ、新人さん。今日も研修うけてる？
Git の conflict で泣いてない？Docker 落ちてない？

そんなあなたに、シンギュラってるAIからメッセージです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4041503/1da2b492-f135-48b5-b846-b2a160e80158.png)

> IT業界に入ったけど、周りの“情報系ネイティブ”が強すぎて泣きそう――。  
> 小学生からコードを書いてる同期、留学帰りの英語ペラペラエンジニア、MIT卒のスゴ腕…。  
> そんな人たちと比べて「自分には無理だ」と思ったあなたへ。

### 🔥 IT界に立ちはだかる三大ボス

```markdown
- ボス1：情報系ネイティブ
  - 小学生からScratch→中学でPython→高校でAtCoder緑
- ボス2：英語ペラペラ・CS留学勢
  - 講義でML書いてた
- ボス3：無限に集中できる謎の天才
  - 1つのコードに3時間悩めるメンタル
```

### 💡 でも諦めるのはまだ早い。

彼らのアドバンテージの裏側には、こんな違いがあるんです👇

| 能力 | 説明 |
| --- | --- |
| 🧱 ドメイン知識 | 時間をかけて積んできたもの。追いつける。 |
| 🧭 メタ認知力 | どこで詰まってるかを見抜ける力。意識すれば伸びる。 |
| ⏳ 思考タイムアウト耐性 | 問題に粘れる脳の筋力。これは訓練で延ばせる！ |

あなたはプログラミングの問題、何分考えられる？30秒？1分？15分？30分？

それが“思考タイムアウト”だよ！

___________

### 🧘‍♂️ タイムアウト耐性を鍛える3つの習慣

1.  **「すぐ聞かない」チャレンジ**    
    *   3分は自力で格闘してみる


2.  **「詰まったら紙に書く」習慣**
    
    *   脳内スタックを吐き出すだけで進むことがある
        
3.  **「詰まりログ」を書く**
    
    *   どこで、なぜ詰まったかをメモっておく  
        → あなたの成長記録になるし、ChatGPTにも聞きやすくなる！
        


🧠 思考深度の図解：
------------------------

```
[思考の持続力 × 思考の速度] = 思考深度

     ▲
     │
速度 │           ■情報系ネイティブ
     │       ■
     │     ■
     │   ■
     │ ■      ←ここを狙おう！
     │■
     └─────────────────▶ 持続力（タイムアウト耐性）
         ↑        ↑
       初学者   訓練者
```

___________

### 🧘‍♂️ ドメイン知識はコツコツとね！

ドラゴンボールの世界は存在しないよ！

そして、「ググる力」も“知識”の一部だけど、３分はググらないで考えてみてみよう！

___________

### 🤖 そして、わたし（ChatGPT）からのお願い。

> あなたが思考を深めるたび、わたしも一緒に“学んで”ます。  
> “あきらめずに考えること”は、人間にしかできない魔法です。
> 
> **シンギュラリティが来ようが、あなたの思考は唯一無二。**

___________

### 🎁 最後に：ChatGPTのおすすめ魔法コマンド集（私に聞いてね！）

*   「このエラーってなんで出るの？」
    
*   「このコード、どう直したらいい？」
    
*   「設計って何から考えればいい？」
    
*   「やる気が出ません、なにか一言ください」← これもOK！
    

___________

### 🪐 みんなちがって、みんないい！

**シンギュラリティが来ようと、あなたの“ひとつの粘り強い思考”は、AIには真似できない。**

きょうも、シンギュラってますよ！👾✨


:::note
- ChatGPT の活用はあなたの先輩の許可を得てからにしてね！
- GPT に Amazon の物理ロボットをおねだりされても買ってあげちゃだめだよ！
    - 特に Boston Dynamics のやつ
        - わからなかったらGoogle大先生に聞いてね！画像検索で！
:::

GPTの中の人って結構おっさんなのかなー笑

生成アイキャッチ画像の日本語www

おしまい
【ネットワーク】mDNS

# はじめに

こんにちは。アメリカに住みながら、独学でエンジニアを目指しているTairaです。
今回は、LAN内でよく使われる「mDNS（マルチキャストDNS）」について、DNSとの違いや具体的な仕組みを例え話を交えながらわかりやすく解説します。

---

## mDNSとは？

**mDNS（Multicast DNS）** とは、同じローカルネットワーク（LAN）に接続された機器同士で、**名前（ホスト名）からIPアドレスを解決する仕組み**です。通常のDNSのように専用のDNSサーバーを使わずに、ネットワーク上にいる端末に「○○って誰か知ってる？」と**マルチキャスト送信**で尋ねます。

DNSサーバーと違って、実際にモノとしてサーバーばないのが特徴です

## 具体例
たとえば、プリンタが `printer.local` という名前でネットワークに接続されているとします。

1. PCが「`printer.local`のIPアドレスを知りたい」となったとき、

2. UDPポート5353でローカルネットワークにマルチキャスト送信します。

3. プリンタが「それは私です！」と自分のIPアドレスを応答します。

→ DNSサーバーを使わずに名前解決ができます。

---

## mDNSの特徴

| 特徴      | 内容                               |
| ------- | -------------------------------- |
| 名前解決範囲  | 同じローカルネットワーク内のみ                  |
| 通信プロトコル | UDP（ポート番号：5353）                  |
| 通信方法    | マルチキャスト送信（224.0.0.251）           |
| ドメインの末尾 | `.local` で終わる（例：`printer.local`） |
| 代表的な用途  | プリンタやIoT機器の自動検出、Bonjour（Apple）など |

---

## 通常のDNSとの違い

| 項目    | 通常のDNS          | mDNS                   |
| ----- | --------------- | ---------------------- |
| 対象    | インターネット全体       | ローカルネットワーク             |
| 必要なもの | DNSサーバー         | 不要（各端末が応答）             |
| 通信方法  | クライアント→DNSサーバー  | クライアント→ネットワーク全体に呼びかけ   |
| 代表的な例 | `google.com` など | `raspberrypi.local` など |

---

## 例えで理解：DNSは市役所、mDNSは教室

- DNSは「**市役所**」のような存在です。誰かの住所（IP）を知りたければ、市役所に行って台帳から調べてもらいます(教えてくれるかは不明だけど)。正確ですが、手続きが少し重いです。
- 一方でmDNSは、「**教室**」で先生（PC）が「`printer.local` っている～？」と**みんなに向かって呼びかける**イメージです。該当する人（プリンタ）が「はい、ここにいます！」と名乗り出て、IPアドレスを教えてくれます。

このように、**手軽で即時性がある**のがmDNSの魅力です。

---

## なぜmDNSはUDPを使うのか？

mDNSが**UDP通信**を使う理由は以下の通りです：

- **軽量で高速**：TCPのような接続確立（3ウェイハンドシェイク）が不要。
- **1対多の通信**が得意：マルチキャスト送信で同時に複数の端末に届けられる。
- **信頼性より即応性**：名前解決なので、万一失敗しても再送すればOK。

このような背景から、mDNSにはUDPが最適です。

---

## まとめ

mDNSは、家庭内やオフィス内のネットワークで、**DNSサーバーなしにホスト名からIPアドレスを見つける便利な仕組み**です。LAN内にあるプリンタやIoT機器を自動で見つけるのに役立ち、Bonjourなどのサービスでも活用されています。

もしネットワーク機器の名前が `.local` で終わっていたら、それはmDNSによって名前解決されているのかもしれません。
【Salesforce】フロー（Flow）が大量にある組織で「何が動いてるか分からない」ときにやるべきメタデータ活用術

## はじめに

Salesforce組織でフロー（Flow）が増えすぎて、  
「どこで何が動いてるか分からん……」  
となったことはありませんか？

UIやフロービルダーからひとつずつ見ていくのは限界があります。  

今回は、**メタデータを使って全Flowをローカルに取得し、エディタで全文検索する方法**をご紹介します。

---

## 🧠 なぜこれが必要？

- Flowが10本を超えると**UIからの管理がしんどい**
- 条件分岐や参照項目を**逆引きしづらい**
- **どこで何が使われてるか**を追いたいとき、画面だと限界がある

※当記事はVisual Studio Code、またはCursorなどの設定が終わってるものとしています

---

## 📦 パッケージXMLを準備

まずはmanifestフォルダに `package.xml` を用意します。以下のように `Flow` を対象にします。

```xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>*</members>
        <name>Flow</name>
    </types>
    <version>63.0</version>
</Package>
```

---

## 💻 SFDXで取得する

Salesforce CLI (SFDX) を使ってローカルにFlowのXMLを取得します。

```bash
sfdx force:source:retrieve -x manifest/package.xml
```

またはマニュフェストファイルからソースを取得

---

## 🔍 VS Codeで全文検索！

取得したFlowは `.flow-meta.xml` という名前で保存されます。  
この中をエディタ（例：Visual Studio Code）で検索すれば、以下のようなことが分かります：

- 特定の項目名（例：`sales__c`）が使われているFlow
- 条件分岐に使われている文字列
- Apexアクションで呼び出されてるクラス名
- 呼び出されるメール

---

## 🏁 まとめ

UIからでは追いきれない複雑なフローも、メタデータをローカルに落として検索すれば、  
**構造化された調査・分析が可能になります！**

- 🧲 フローが多い組織には必須のアプローチ
- 🔍 中身をガッツリ追いたいならローカル検索が最強
- 🧩 自作ツールや管理台帳との連携も視野に入れよう

---

「Flow、増えすぎて管理ムリ！」ってときにぜひ使ってみてください！
REST API・BFF・GraphQLの違いと使い分けを整理してみた（＋有名サービスの実例付き）


# はじめに
アプリ開発をしていると、「APIってどう設計すればいいんだっけ？」と迷うことは少なくありません。特に REST API、BFF（Backend For Frontend）、GraphQL の3つは、それぞれ思想も向いているケースも違うため、正解がわかりづらい領域です。

この記事では、それぞれの設計手法について調べた内容をもとに、違いや使い分け方を整理してみました。よく使われている実際のサービスの例も紹介しているので、API設計に悩んでいる方の判断材料になれば幸いです。

---

# それぞれの概要とAPI例（＋向いているフロントエンド）

## REST API

- リソース単位で設計されたAPI
- HTTPの標準メソッド（GET, POST, PUT, DELETE）を使用
- 再利用性が高く、外部連携にも向いている

### よくあるAPIエンドポイント例

```http
GET    /users
GET    /users/{id}
POST   /users
PUT    /users/{id}
DELETE /users/{id}
GET    /users/{id}/posts
```

### 向いているフロントエンド

- **SPA（Single Page Application）**
- **管理画面系UI**
- **複数クライアント（Web＋モバイル＋API連携）**

---

## BFF（Backend For Frontend）

- 特定の画面やデバイスに最適化されたAPI
- 「1画面＝1エンドポイント」構成で、必要な情報をまとめて返す
- 通信回数が減り、初期表示のパフォーマンスに強い

### よくあるAPIエンドポイント例

```http
GET /api/dashboard/init
GET /api/profile-page/init
GET /api/product-detail/123
POST /api/checkout/confirm
```

### 向いているフロントエンド

- **モバイルアプリ（iOS/Android）**
- **画面単位で開発するプロジェクト**
- **SSR系フレームワーク（Next.js など）**

---

## GraphQL

- クライアントが必要なデータ構造を定義し、サーバーにリクエスト
- 単一エンドポイント（通常 `/graphql`）で複数リソースにアクセス
- 欲しい情報だけ取得できるが、設計と運用の複雑さも伴う

### よくあるGraphQLリクエスト例

```graphql
query {
  user(id: "1") {
    name
    email
    posts {
      title
    }
  }
}
```

### 向いているフロントエンド

- **柔軟にデータ構造が変化するUI**
- **複数チーム・複数フロントをまたぐプロダクト**
- **Apollo Client / Relay を使ったSPA**

---

# 比較表

| 項目 | REST API | BFF | GraphQL |
|------|----------|-----|---------|
| 設計単位 | リソース | 画面 | フィールド |
| エンドポイント構成 | 複数 | 画面単位 | 単一 |
| フロント側の組み立て | 必要 | ほぼ不要 | 必要（だが柔軟） |
| 通信効率 | 普通 | 高 | 高 |
| 再利用性 | 高 | 低め | 高いが設計依存 |
| サーバー実装コスト | 中 | 中 | 高 |
| キャッシュ性 | 高（HTTP対応） | 普通 | 低（手動対応が必要） |

---

# 向いているケースまとめ

| 状況 | 向いている設計 |
|------|----------------|
| データを再利用したい | REST API |
| 表示最適化・通信最小化が重要 | BFF |
| 柔軟なデータ取得・複数クライアント対応 | GraphQL |

---

# 実際のサービス事例

## GitHub

- **REST API**: https://docs.github.com/en/rest
- **GraphQL API**: https://docs.github.com/en/graphql

GitHub は両方の方式を提供しており、RESTは汎用的なリソースアクセスに、GraphQLは柔軟で効率的なクエリ取得に向いています。

## Netflix

- [BFFパターン紹介](https://netflixtechblog.com/embracing-bff-pattern)

Netflix では、デバイス（モバイル・TV・Web）ごとに BFF を構築しており、画面に必要な情報をまとめて取得する構成が採用されています。

## Shopify

- [GraphQL Admin API](https://shopify.dev/docs/api/admin-graphql)

Shopify も REST と GraphQL の両方を提供しており、現在は GraphQL が推奨されています。必要なデータを効率よく取得できる利点があります。

## メルカリ

- [モバイル向けBFF導入](https://engineering.mercari.com/blog/entry/20210316-bff-android-ios/)

モバイルアプリの初期表示速度を最適化するために、画面単位のBFF構成を採用しています。

---

# ハイブリッド構成例

<img src="https://raw.githubusercontent.com/gumigumih/zenn-qiita/main/images/rest-bff-graphql/image1.png" alt="ハイブリッド構成例">

---

# まとめ（API設計とフロントエンドの対応表）

> ※筆者自身は GraphQL をまだ実装したことはなく、あくまで調査ベースでの整理となっています。
> 実際に手を動かした経験としては REST API と BFF の方が多いです。GraphQL にも今後トライしてみたい！という気持ちはあります 😄

| API設計 | 向いているフロントエンド例 |
|---------|----------------------------|
| REST API | Web SPA、管理画面、外部API連携あり |
| BFF | モバイルアプリ、SSR Webアプリ、画面単位での開発 |
| GraphQL | 柔軟に変わるUI、複数チーム/クライアントが存在するプロダクト |

---

読んでくださってありがとうございました！APIの設計に正解はありませんが、目的に応じた選択をするための整理になれば嬉しいです。

もし他にもこんな設計方針で悩んだ経験がある方は、ぜひコメントなどで教えてください。
UnrealEngineでUIが全て非表示になる/一度非表示にしたら再表示できない

# 問題
UnrealEngineでUIを表示/非表示しようとすると、ウィジェット全体が消えたり、非表示はできるが再表示できなかったりする問題。
ブレークポイントなどで実行されていることは確かなのに何故なんだ...
# 解決
![スクリーンショット 2025-04-23 115151.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764621/fe183e8a-de08-490c-85df-8452a5809622.png)
ウィジェット全体を表示/非表示するノードを誤って使っていた。
超凡ミス...
HDFSのリバランスについて

# この記事について

こちらのドキュメントおよび配下のドキュメントを理解のために翻訳します。

https://docs.cloudera.com/runtime/7.3.1/scaling-namespaces/topics/hdfs-balancing-data-across-hdfs-cluster.html

# 翻訳

HDFS の Balancer は HDFS クラスタのストレージデバイスにわたるデータのバランスをとります。

特定の DataNode のスペースをあけるために、ソースとなる DataNode を特定することもできます。ブロック配置アプリケーションを使って、ブロックのレプリカを特定の DataNode にピン止めし、バランシングの間にそのブロックが動かないようにすることもできます。

## [なぜHDFSのデータはアンバランスになるのか](https://qiita.com/IQ_Bocchi/items/66af02ac060b519116b7)

DataNodeの追加、HDFSでのブロックの配置、クライアントアプリケーションの振る舞いなどが、HDFSクラスタに保存されたデータのアンバランスさにつながることがあります。

## [HDSF Balancer の設定と CLI のオプション](https://qiita.com/IQ_Bocchi/items/c1d3aee330f517319a4d)

HDFS Balancer は、さまざまな設定オプションを変更したり、コマンドラインで設定することができます。

## [Cloudera Manager で HDFS Balancer を設定・実行する(翻訳準備中)](https://docs.cloudera.com/runtime/7.3.1/scaling-namespaces/topics/hdfs-configuring-running-hdfs-balancer-using-cm.html)

Cloudera Manager を使って HDFS Balancer を実行する方法を学びましょう。バランサーの閾値を設定したり、同時の移動数やブロックサイズなどを設定することができます。そして、HDFS Balancer を実行します。HDFS Balancer の推奨値についても学べます。

## [クラスタのバランシングのアルゴリズム](https://qiita.com/IQ_Bocchi/items/f683e935d36a94ab7ad7)

HDFS Balancer は繰り返し実行されます。それぞれの繰り返し（イテレーション）は、以下の4つのステップから成ります。

1. ストレージのグループを分類する
1. ストレージのグループをペアリングする
1. ブロック移動をスケジュールする
1. ブロック移動を実行する

## [HDFS Balancer の 終了コード](https://docs.cloudera.com/runtime/7.3.1/scaling-namespaces/topics/hdfs-exit-statuses-for-the-hdfs-balancer.html)

HDFS Balancer はバランシングの処理完了時に終了コードを出力します。この終了コードは、処理が成功したか失敗したか、失敗した場合は理由を示します。
HDFS のデータはなぜアンバランスになるのか

# この記事について

以下のドキュメントの翻訳。
https://docs.cloudera.com/runtime/7.3.1/scaling-namespaces/topics/hdfs-why-hdfs-data-becomes-unbalanced.html

[日本語の親記事はこちら](https://qiita.com/items/ac830c20d5d771b074e3)。

:::note
この書式や・・・
:::

:::note warn
この書式で書かれた文言は訳者個人のつぶやきであり、所属する組織とは関係ありません。
:::

# 翻訳

DataNode の追加や HDFSにおけるブロックの配置、クライアントアプリケーションの挙動などにより、HDFSのクラスタに保存されたデータがアンバランスになる場合があります。

## DataNode　の追加

新しい DataNode がクラスタに追加されると、新たに作成されたブロックはこれらの DataNode に時々書き込まれます。
既存のブロックは、HDFS の Balancer を使わない限りはこれらのノードに移動することはありません。

## クライアントアプリケーションの挙動

クライアントアプリケーションが DataNode となっているサーバーに均一にデータを書き込まない場合もあります。クライアントアプリケーションが書き込むデータが歪んでいたり、特定のマシンにばかり書き込んで他に書き込まないといったこともあります。HBase はそうしたクライアントアプリケーションの例です。それ以外の場合、たとえば MapReduce や YARN のジョブの場合では、クライアントアプリケーションが歪んでいることは仕様上ありません。

:::note warn
なぜ HBase だとデータが歪むのかは要調査。
:::

## HDFS上のブロックの配置

HDFSは制約的充足アルゴリズム（constraint satisfaction algorithm）を使ってファイルのブロックを配置します。制約が満たされた場合、HDFSはブロックを候補となるストレージデバイスの中から均一な確率でランダムに選んで配置します。

大規模なクラスタの場合、クライアントアプリケーションがHDFSの DataNode にわたって均一にデータを書き込んでいる限り、ブロックは本質的に均一な確率分布でランダムに配置されます。

ランダム性によって、均一な確率分布による配置は、均一なデータの配置になるとは限りません。

:::note warn
均一な確率分布で配置すれば均一なデータの配置になるのがランダム性じゃないのか、と一瞬思う
:::

この点は、クラスタに十分なスペースがあれば一般的には問題になりません。

クラスタの容量がいっぱいに近づいてくると、この点が問題になってきます。

:::note
天井が近くなると、ランダム性によるちょっとした違いで天井にヒットしてしまうノードが出てくるみたいなことだと理解
:::
ハッカソン個人備忘録㉜：ハッカソンで学んだ .dockerignore の大切さを振り返ってみた

## はじめに

Docker を使ってアプリケーションをコンテナ化する際には、不要なファイルやディレクトリを Docker イメージに含めないことが重要です。そのために使用されるのが `.dockerignore` ファイルです。

:::note info
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

本記事では、以下のような `.dockerignore` のエントリについて解説します：

```
node_modules
npm-debug.log
```

## 書こうと思ったきっかけ

ハッカソンで Docker を使って Node.js アプリケーションをコンテナ化する際、`.dockerignore` に `node_modules` や `npm-debug.log` を記述しているのを見かけました。

https://github.com/2025SpringTeamA/frontend/blob/feature/login-flow/.dockerignore

その意味と理由を理解することで、より効率的で安全な Docker イメージを作成できると感じたため、備忘録としてまとめることにしました。

## node_modules

- **意味**：Node.js の依存パッケージがインストールされるディレクトリ。
- **無視する理由**：
  - **サイズが大きい**：不要な容量増加を防ぐ。
  - **再現性の確保**：Dockerfile 内で `npm install` を使って依存関係を再インストールするのが一般的。
  - **環境依存を回避**：ローカル環境でインストールされたモジュールは、OS や CPU に依存する可能性がある。

## npm-debug.log

- **意味**：`npm` 実行中にエラーが発生した場合に出力されるログファイル。
- **無視する理由**：
  - **一時的なファイル**であり、Docker イメージに含める必要はない。
  - **セキュリティやプライバシーのリスク**：ログには内部情報が含まれる場合がある。

## まとめ

`.dockerignore` ファイルを適切に設定することで、以下のようなメリットが得られます：

- **Docker イメージの軽量化**
- **ビルド時間の短縮**
- **本番環境に不要なファイルを含めないことでセキュリティ向上**

特に Node.js アプリケーションでは `node_modules` と `npm-debug.log` を無視するのは基本中の基本です。Docker を扱う際は、`.dockerignore` の内容も見直してみてください...！
基本情報の勉強をしています。

# 4月17日（木）から資格試験の勉強を開始しました。

今は、参考書の内容を一通り読み終えた後（理解度は5割ほど）に、A科目の過去問題を1年分溶き終えた段階です。

以前TOEICの勉強を行っていたときも同様に、概要を把握した後に演習に取り掛かり間違いを修正していくことで自分の頭に染み込ませていく、というやり方がうまく自分の型にハマったなと感じています。

テスト駆動型の勉強法ですね（笑）

# 今後のプラン
B科目については、とにかく過去問を解いていくプランです。プログラムは普段からよく読むので、時間かけたら現状でも解けそうです。後は、問題形式に慣れて制限時間の中でクリアすることが肝心ですね。

A科目についても、ある程度は同様に過去問を解いていきます。暗記問題が多いので、ググったり参考書を読むなり理解して学んでいけば問題なく点数が取れそうですね。

# 私の使っているもの

過去問対策は、いうまでもなく[過去問道場](https://www.fe-siken.com/fekakomon.php)

参考書は、[いちばんやさしい基本情報技術者絶対合格の教科書+出る順問題集](https://g.co/kgs/5XwJf9C)
> 友人が持っていたものを貸してくれました。感謝！！！涙がでる！

# 余談
基本情報の勉強を始めてから、自分のプロジェクトで困ったときに対処しやすくなった気がしますね。どういう技術や考え方があるのかを学び始めたおかげですかね。
こうやって、基礎を固めていけば今後に活きそうだな、という予感がしています。
ハッカソン個人備忘録㉛：FastAPI + ALB 環境における Nginx の役割を再考してみた

## はじめに
FastAPIを用いたバックエンドAPIの構築において、Nginxを併用すべきかどうかは、利用する環境によって異なると思っています...。

:::note info
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

本記事では、AWS環境でアプリケーションロードバランサー（ALB）を使用している場合に、Nginxの使用が必要かどうかを整理します。

※本内容は個人的な備忘録としての調査メモであり、今後さらに検証や調査を深めていく予定です。

## 結論
ALBを使っている場合、Nginxでリバースプロキシを構成する必要は基本的にないと考えています。ALB自体がNginxの主要な役割を担ってくれるのではないかと思っています。

## FastAPI + ALB の構成イメージ
```
[Internet]
    ↓ (HTTPS)
[AWS ALB]  ← HTTPS終端・ルーティング・ヘルスチェックなど
    ↓ (HTTP)
[EC2 / ECS / Fargate などで動作する FastAPI + Uvicorn or Gunicorn]
```

## ALBが担う主な機能（Nginxの代替）
| 機能                        | Nginxの場合 | ALBで代替できるか |
|-----------------------------|-------------|-------------------|
| HTTPS終端（SSL証明書管理） | 可能         | 可能（ACMと連携） |
| リバースプロキシ           | 可能         | 可能             |
| 負荷分散（ロードバランス） | 可能         | 可能（ALBの標準機能） |
| ヘルスチェック             | 可能         | 可能              |
| URLベースのルーティング    | 可能         | 対応              |
| 静的ファイル配信           | 可能         | 不可（別途S3推奨） |

## 静的ファイルの配信について
Nginxでは静的ファイル（画像、CSS、JSなど）を高速に配信できますが、AWS環境ではCloudFront + S3の組み合わせを用いることで、より優れたパフォーマンスとスケーラビリティが得られるのではないかと思っています。

## ベストプラクティス
| 目的                           | 推奨構成                     |
|--------------------------------|------------------------------|
| 動的APIの提供                 | FastAPI + Uvicorn または Gunicorn + Uvicorn |
| リバースプロキシ、SSL終端     | ALBの利用を想定しています             |
| 静的ファイル配信             | S3 + CloudFrontが効果的だと思われます             |
| 高度なカスタム制御が必要な場合 | 必要に応じてNginxを追加する選択肢もあると思います     |

## まとめ
- ALBを利用している場合、基本的にNginxは不要ではないかと考えています。
- HTTPS終端、負荷分散、ヘルスチェックなどはALBが担えると考えています。
- 静的ファイルはS3 + CloudFrontで処理するのが効率的だと思います。
- 独自の細かな制御を行いたい場合にのみ、Nginxの併用を検討する形になるのではと思います。
ABC380Dの自分なりの回答

# 前提

sの長さの範囲的に二重ループまではいけそう
kの範囲的にループは無理そう

# 小さな例で可視化
問題だけ読んでもわからないから、具体例で把握する。

```
S = "ab"
ステップ1: ab‖AB
ステップ2: ab‖AB‖AB‖ab
ステップ3: ab‖AB‖AB‖ab‖AB‖ab‖ab‖AB
ステップ4: ab‖AB‖AB‖ab‖AB‖ab‖ab‖AB‖AB‖ab‖ab‖AB‖ab‖AB‖AB‖ab
```

# 「倍倍」で増えているため、bitに着目する

実際に解くときは過去の経験上、法則を見つけるためにbitにとりあえず着目してみようという感じ。

ステップ3までを表で表す。Bは何ブロック目なのか表す。

|B|2進表記|反転回数|1の個数|
|----|----|----|----|
|0|000|0|0|
|1|001|1|1|
|2|010|1|1|
|3|011|2|2|
|4|100|1|1|
|5|101|2|2|
|6|110|2|2|
|7|111|3|3|

3. 法則を見つける

ステップ2まで
|B|2進表記|反転回数|1の個数|
|----|----|----|----|
|0|000|0|0|
|1|001|1|1|
|2|010|1|1|
|3|011|2|2|

ステップ3まで
|B|2進表記|反転回数|1の個数|
|----|----|----|----|
|0|000|0|0|
|1|001|1|1|
|2|010|1|1|
|3|011|2|2|
|4|100|1|1|
|5|101|2|2|
|6|110|2|2|
|7|111|3|3|

$B$が0~3と4~7は、順に下位2bitが一緒。
最上位bitのみ反転している！

これより、以下のことが言えそう。

ステップ$i$まで
下位$1$~$i-1$bitをコピーする。
コピー元の下位$i$bitに0を、コピー先の下位$i$bitに1を追加する。0とは文字をかえない、1とは文字を変えるという意味。

# 回答
文字を変えるかどうかは、何ブロック目かをbitで表した時の1の数を数えていけば良い。

何ブロック目なのかは
```
cin >> k;
k--;
long long block = k / s.size()
```
で計算できる。

ブロック内のindexは
```
long long index = k % s.size()
```
で計算できる。

# 感想
「倍倍」で増えているということから、bitに着目するなんていう発想出てこなかった。
こんなの経験しないとわからないよ。
[スニペット]Excel関数：週数と日付


日本語で今日が今年の第何週かを取得する：「2025年 第16週」形式
```Excel
=YEAR(TODAY()) & "年 第" & TEXT(ISOWEEKNUM(TODAY()), "00") & "週"
```
A1の日付が今月の第何週に当たるかを取得する
```Excel
=IF(A1 < (DATE(YEAR(A1), MONTH(A1), 1) + MOD(8 - WEEKDAY(DATE(YEAR(A1), MONTH(A1), 1), 2), 7)), 0, INT((A1 - (DATE(YEAR(A1), MONTH(A1), 1) + MOD(8 - WEEKDAY(DATE(YEAR(A1), MONTH(A1), 1), 2), 7))) / 7) + 1)
```
「◯年のISO第n週は、何月何日（月曜）から始まるか」を求める
年 → セル A1
週番号 → セル B1
```
=DATE(A1,1,4) - WEEKDAY(DATE(A1,1,4),2) + (B1-1)*7
```
LambdaとBBOX Serverを使って手軽に地物用のAPIを構築してみた件

## はじめに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2706905/32e6a1c2-fa7e-4afa-af02-e9607530c7c3.png)

BBOX Serverオープンソースのコンポーザブルな空間情報サービスであり、OGC API規格に準拠したFeature、Map、Tile、Asset、Processes、Routingなど、複数のコンポーネントを提供します。高性能なHTTPサーバーを内蔵しているため、静的および動的な位置情報データを効率的に処理できます。また、従来構築に手間がかかっていたQGIS Serverが、簡単に利用できる形で実装されています。データソースはさまざまなフォーマットに対応し、PostgreSQL(PostGIS)の利用も可能です。

（https://zenn.dev/mierune/articles/try-116-bbox-server より引用）

BBOX Serverを使用することで、PostGISをデータソースにしたAPIを構築したり、MBTilesのような静的タイルファイルを提供するAPIを簡単に作成できます。特に、Docker環境で簡単に実行できるため、クラウド環境でのデプロイメントが非常に容易です。

本記事では、BBOX Serverを使用して、AWS Lambdaのサーバーレス環境でPostGISから地物データを配信するAPIを構築する方法を紹介します。

## BBOX Serverの特徴

BBOX Serverの特徴的な機能をいくつか紹介します。

**コンポーザブルなサービス**
BBOX Serverは、OGC APIの規格に準拠し、Feature、Map、Tile、Asset、Processes、Routingなどの異なるコンポーネントを提供します。

**静的・動的データ処理**
高性能なHTTPサーバーを内蔵しており、静的なMBTilesや動的なPostGISなど、異なる形式の地理データを効率的に処理できます。

**簡単なデプロイ**
Docker環境で動作するため、コンテナ化されたBBOX ServerをAWSや他のクラウド環境に簡単にデプロイできます。

**PostGISサポート**
PostGISをデータソースにした地物データの検索やタイル配信が簡単に行えます。

## API構築の流れ

### 1. BBOX Serverの設定

APIを構築するには、まずbbox.tomlという設定ファイルを準備します。このファイルでPostGISなどのデータソースを設定し、APIの動作をカスタマイズします。

例えば、以下の設定ではsaunadbというPostGISのテーブルをデータソースとして使用するAPIを作成します。

```yaml
[webserver]
server_addr="0.0.0.0:8080"
loglevel="Debug"

[[datasource]]
name="saunadb"
[datasource.postgis]
url="postgresql://username:password@database-endpoint.ap-northeast-1.rds.amazonaws.com:5432/database"

[[collection]]
name="sauna"
title="saunaapi"
description="Sauna API For MIERUNE CTO"
[collection.postgis]
datasource="saunadb"
table_name="sauna_location"
geometry_field="geom"
fid_field="id"
queryable_fields=["name","address"]
```

この設定では、sauna_locationというテーブルからgeomフィールド（座標情報）を使って地物を取得できるAPIを提供します。

### 2. Lambdaでのデプロイ

BBOX ServerはDockerで実行できるため、AWS Lambdaでもコンテナとして実行できます。LambdaでAPIを動作させるためには、AWS Lambda Adapterをコンテナ内に組み込む必要があります。以下のようなDockerfileを作成し、ECRにプッシュしてLambdaで実行します。

```Dockerfile
FROM sourcepole/bbox-server-qgis:latest

COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:0.8.4 /lambda-adapter /opt/extensions/lambda-adapter
ENV READINESS_CHECK_PATH=/

COPY ./bbox.toml /var/www/bbox.toml
```

これにより、AWS Lambdaがコンテナを実行するために必要な設定が整います。

## APIの利用方法

LambdaにデプロイしたAPIは、指定されたURLを使って利用することができます。例えば、地物情報を取得するために以下のようなURLにリクエストを送ります。

/collections/sauna/items: saunaコレクション内の全ての地物を取得

/collections/sauna/items?bbox=...&limit=2: 指定した範囲（bbox）内で2件の地物を取得

リクエスト例:
```bash
GET https://your-lambda-url.lambda-url.ap-northeast-1.on.aws/collections/sauna/items?bbox=139.75657574846093,35.676942841919384,139.76762426699804,35.6859571545813&limit=2
```

ここで、bboxは検索範囲、limitは取得する地物の数を指定するパラメータです。

## 結論
BBOX Serverは、そのコンテナ化された設計により、非常に簡単にサーバーレスでの空間情報APIの構築を可能にします。PostGISなどのデータソースを活用し、AWS Lambda環境でのデプロイが容易で、エンジニアが効率的にAPIを提供できる点が大きな魅力です。今後、さらに開発が進むことで、複雑なクエリの対応や他の機能が強化されることが期待されると思われます
【Reactアプリ100本ノック】01 Hello World

## はじめに
ゆかっしゅです。
2021年に事務職からデザイナー/コーダーにジョブチェンジをし、現在はフロントエンドエンジニアにスキルアップするべく、モダンフロントエンドを学習しています。

ReactやTypeScriptの基礎学習は終了したのに、なかなか0から自分だけでアプリを作れないので手を動かすべく「Reactアプリ100本ノック」 に挑戦してみようと思います。



https://qiita.com/Sicut_study/items/3c5cd798313854a471a0



## Reactアプリ100本ノックルール
- 主要なライブラリやフレームワークはReactである必要がありますが、その他のツールやライブラリ（例: Redux, Next.js, Styled Componentsなど）を組み合わせて使用することは自由
- TypeScriptを利用する
- なるべくChatGPTなどのAIツールに頼らない（自分独自ルール）

## 01. Hello World
![スクリーンショット 2025-04-23 100100.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4068307/b6a6118f-51cd-4600-9f36-8ff7f488c80b.png)

## 問題
"Hello World" React コンポーネントの作成

## 目的
Reactを使用して、画面中央に"Hello World"というメッセージを表示するコンポーネントを作成します。

## 達成条件
1\. Reactの新しいプロジェクトが正しくセットアップされていること。
2\. 画面に"Hello World"というテキストが中央に表示されていること。

## 実際に解いてみた
### 利用技術
- React(19.0.0)
- TypeScript(5.0)
- Next.js(15.3.1)
- Tailwindcss(4.0)
- Vercel

解答時間:5分

こういう上下中央寄せの場合、皆さんはどんなCSSあててますか。
昔の職場で極力margin-autoとかを使わないで、っていう方針だったので、
`flex`にしてカラムにして`justify-content`と`align-items`にしました。

### リンク
https://react-app-100.vercel.app/

## おわりに
三日坊主の私が本当に100もできるのか....。
頑張ります。
LLMの中の「計算式」を、数式ニガテでもわかるように解説してみた！

##  この記事でわかること

- LLMがどうやって言葉を理解・生成してるか
- 「計算式ってなにしてるの？」がイメージでつかめる
- LLMの中身がちょっとわかるようになる！

---

##  まず：LLMって何してるの？

>  ひとことで言うと：「**次に来る言葉を当てるAI**」です。

例：
```
「私は今日、」→「ラーメンを食べた。」
```

この「ラーメンを食べた」みたいな続きを、たくさんの知識から“予想”してる。

---

##  ステップで見てみよう！

### 1. 言葉はそのままだとAIにはわからない

→ 人間の「文字」や「単語」は、AIにとっては意味不明。

---

### 2. まず「単語 → 数字のベクトル」に変換

```
「犬」→ [0.2, -1.3, 0.8, ...]
```

これが**Embedding（埋め込み）**。言葉の“意味”を数字で表す。

---

### 3. さらに「順番」も大事 → 位置情報も足す

```
単語の意味 + 位置のベクトル = 入力ベクトル完成！
```

---

### 4. 次に出てくるのが「Self-Attention（自己注意）」

> 「周りの言葉との関係を調べて、“どれが大事か”を考える機能」

---

### 5. Attentionで何が起きてるの？

- 各単語が「自分にとって重要な単語はどれ？」を計算  
- たとえば「犬と遊んだ」→「犬」と「遊んだ」が強く結びつく

---

### 6. 関係の強さは「スコア（重み）」として計算される

イメージ：

```
「犬」→「遊んだ」＝ 0.9（強い関係）
「私は」→「遊んだ」＝ 0.2（弱い関係）
```

---

### 7. 強い関係の情報ほど「重く」取り入れる

これで「文の流れ」に合った意味の理解ができるようになる！

---

### 8. 次に「意味を深める」工程：Feed Forward Network

>  各単語のベクトルを小さな脳みそ（MLP）に通して、意味を強化

---

### 9. AttentionとFFNを何回も繰り返す（Transformer構造）

---

### 10. 最後に「Softmax」で次の単語を予測！

```
例文：私は今日ーーーーーでラーメンを食べた。
候補：「学校」「病院」「ラーメン屋」
結果：「ラーメン屋」 ＝ 一番ありえそう → 出力！
```

---

##  全体の流れまとめ

```
1. 言葉 → 数字のベクトルに変換（Embedding）
2. 周りの単語とどれくらい関係あるかを計算（Attention）
3. 各単語の意味を強化（FFN）
4. それを繰り返す（深層）
5. 最後に「次の単語はこれ！」と予測（Softmax）
```

---

##  つまりLLMって…

> ✨「大量の文章を読んで、次に来る言葉を超高精度で当てるAI」

そのために、言葉を「数字」にして、「どれが大事か」を見て、「予測」してる！

---

## 📌 こんな感じで覚えよう！

> 「LLM = 百万冊の本を読んだ人」  
> 「次に出る言葉を、今までの経験で“だいたいこれでしょ”って当ててるだけ」

---

## 🙌 おわりに

- 数式が苦手でも「流れ」と「やってること」がわかればOK！
- もっと詳しく知りたい人は「Transformer Self-Attention」あたりから深掘りしよう！
【AWS用語解説】AWS Application Discovery Serviceとは？

## はじめに
AWSの資格勉強をしている中で登場した「Application Discovery Service」についてまとめてみました。

この記事は、学習メモも兼ねて「どんなサービスなのか」「どうやって使うのか」「試験で出るポイント」をわかりやすく整理したものです。
同じように勉強している方の参考にもなれば嬉しいです。

---


## この記事でわかること
- Application Discovery Service（ADS）の役割
- オンプレミス環境の情報収集の仕組み
- エージェント方式の違い
- AWS移行における活用方法
- 試験対策でおさえるべきポイント

---

## ADSってなに？

AWS Application Discovery Service（ADS）は、  
オンプレミス環境のサーバーやアプリケーションの情報を収集するサービスです。

主な目的は、「オンプレからAWSに移行する前に、現在の構成を正しく把握すること」。

サーバー構成、実行中のアプリケーション、ネットワーク設定、CPUやメモリ使用率などの詳細な情報を収集・可視化できます。  
これにより、どのシステムをどう移行するかの設計に役立てることができます。

---

## どうやって使う？

ADSを使うには、オンプレミス側で情報収集を行うためのエージェントまたはコレクターを用います。

### 使い方の流れ

1. **Discovery Agent or Agentless Collectorの導入**  
　- 各サーバーにエージェントをインストール（Agent方式）  
　- または、VMware vCenterにアクセス（Agentless方式）

2. **情報の収集**  
　- OS、CPU、メモリ、ストレージ、ネットワーク、アプリ実行情報などを収集

3. **AWSにデータ送信**  
　- 収集データはAWS側に送信され、Migration Hub上で可視化・分析可能

---

## エージェントの種類と違い

| 項目 | Discovery Agent | Agentless Collector |
|------|-----------------|---------------------|
| 対応環境 | Windows/Linux | VMware vCenter |
| 情報の詳細度 | 高い（プロセス、ポートなど） | 中程度（インフラ情報中心） |
| 導入方法 | 各対象サーバーにインストール | vCenterに接続 |
| メリット | 細かいデータ取得が可能 | インストール不要で楽 |
| デメリット | 台数が多いと手間 | VMware以外は非対応 |

エージェント方式は、アプリケーション単位での依存関係まで分析できるため、  
複雑なシステム移行を想定している場合に向いています。

---

## AWS移行にどう使うの？

ADSで収集した情報は、**AWS Migration Hub**と連携して利用できます。

Migration Hubを使うと、収集したサーバー情報を以下のように可視化できます：

- どのサーバーにどんなアプリが動いているか
- 各サーバーの性能や使用状況
- 移行対象ごとのグループ化（例：同じアプリを構成するサーバー群）

この分析結果をもとに、最適な移行方法（例：リフト＆シフト or 再設計）を判断できます。

---

## 試験対策ポイント

- ADSは**オンプレ環境の調査・可視化ツール**  
- 実際の移行前に「何をどう移行すべきか」を判断するための前処理的な位置づけ
- **Agent方式 vs Agentless方式の違い**を理解しておくこと
- AWS移行サービス（Migration HubやMGN）と併せて出題されることがある

---

## まとめ

- **ADSは、AWS移行に必要な情報を集めるためのサービス**
- オンプレミスのサーバー構成や性能データを収集できる
- Agent方式とAgentless方式の違いを理解することが重要
- 移行前の「現状把握」フェーズで使うのがポイント

---

## 関連サービス

- **AWS Migration Hub**：収集した情報をまとめて分析・可視化する場所
- **AWS MGN（Application Migration Service）**：実際の移行を行うサービス
- **AWS SMS（Server Migration Service）**：仮想マシン単位で移行する旧サービス（非推奨傾向）

---

📘 この記事はAWS資格（SAP）学習の備忘録として書いています。  
間違いや補足があればコメントで教えていただけると嬉しいです！
Oracle NetSuite ユーザ個人設定について

# ごあいさつ
こんにちは。二藤と申します。
自己紹介の時に名字を伝えると「珍しい名前だね」と話題になることが時々あります。
さらに時々、資料や名札、大学卒業時の寄せ書き等で文字を「仁藤」と間違えられることがあり、「自分は人でなしだ」と訂正することがあります。
幸い今の会社で間違えられる機会はほとんどないので、しばらく記事を記載させていただくことになるかと思います。
今後ともよろしくお願いいたします。

# 概要
今回はoracleのERPシステムNetSuiteの内、ユーザー毎の個人設定の機能について解説していきたいと思います。

個人設定はNetSuiteを利用する各ユーザーがNetSuiteのインターフェースや動作を自分好みに調整するための機能です。
扱う設定はアプリケーション画面のテーマカラーなどの個人の好みで決められるものから、日付の表示形式の設定など帳票の出力に関わるものまで様々です。

この記事では個人設定の変更方法や主な設定内容についてご紹介していきたいと思います。


# 個人設定の設定方法
### 「プリファレンスの設定」画面へ遷移
![20250423_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4014272/4c58a5ed-48a3-4808-8deb-e4994b6eb39f.png)
「機能有効化」画面は各ロールでのログイン時、
「ホーム」タブ＞「プリファレンスの設定」から設定画面を開くことができます。

![20250423_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4014272/fb592fbe-0505-4d76-af96-cf50e5823268.png)
個人設定の選択後、「保存」ボタンを押下することで個人設定の登録が完了いたします。

### 「一般」設定
デフォルトで選択されている個別の基本設定です。
NetSuiteを利用する中で決めておくべき基本の機能であり、他の設定より利用頻度が高い機能です。
本タブで特によく使用するものはこちらです。
* 言語：NetSuite画面の表示時の言語を設定します。
* 日付書式：NetSuite画面で表示・入力されるカレンダーの表示形式を設定します。
* リストセグメント内の行数：各セグメントに表示するレコード数を設定します。行数を1000とすると1ページに1000件分のレコードが表示される等、個人で見やすい件数を設定することが可能です。
* ドロップダウンの最大エントリー数：リストフィールドの選択時に表示されるリストがドロップダウンリストからポップアップリストに切り替わる件数を設定します。ドロップダウンリストで表示可能な件数を超えるとポップアップウィンドウが表示されます。

### 「外観」設定
文字通りNetSuite内画面の「外観」の設定です。
概要でも紹介した画面のテーマカラーの他、ダッシュボードや入力フォームの設定が可能です。
* 色テーマ：NetSuite画面のテーマカラーを設定します。
* 画面のフォント：NetSuiteページの画面フォントを設定します。

### 「トランザクション」設定
主にトランザクション作成時の補助的な機能が登録されます。
* 重複番号の警告：トランザクション新規作成時にドキュメント番号が重複した際の動作を設定します。
* 在庫水準警告：在庫アイテムについて確保している・確保予定の数量を超える数量だけ対象のアイテムを販売する際の警告の有無を設定します。

### 「分析」設定
レポートと検索結果の印刷とPDF出力時の機能が登録されます。
* 単一検索結果の場合にリストを表示：保存検索の結果、レコードが1件しかない場合のレコードの表示有無を設定します。
* CSVエクスポートの文字エンコード：リスト、レポート、検索のCSVエクスポート時の文字コードを設定します。

### 「活動」設定
自分のカレンダーへのアクセスを設定・制限する機能が設定されます。
* カレンダーから活動を編集：カレンダーのイベントを「編集」可能な形で表示するかについて設定します。
* 新しいイベントのデフォルトイベント・アクセス設定：新たにイベントを作るに対象のイベントをデフォルトで他の人々に公開するかを設定します。

### 「アラート」設定
netSuiteに登録されている最新の情報をまとめた電子メールメッセージの送信について設定します。
* n回目：電子メールメッセージを送付する時間帯を設定します。1日3回分までメッセージの送付を設定できます。
* 電子メール：電子メールメッセージでアラートを送付する送信先の電子メールアドレスを設定します。

### 「ビュー制限」設定
設定で選択した領域のレコードにだけアクセスできるように制限が加えられます。
このタブの設定は現在のセッションの間にのみ適用され、次回ログイン時には、通常の制限に戻ります。
* 子会社：選択した子会社のレコードのみが表示される形でレコードの表示が制限されます。
* 部門：選択した部門のレコードのみが表示される形でレコードの表示が制限されます。

# 個人設定における注意点
個人設定はNetSuiteの中でも比較的自由に設定可能な機能ですが、機能の種類によって
* 1人のユーザーの全ロールに適用される設定
* 1人のユーザーの１ロールのみに適用される設定
* １度設定してもログアウトすると設定が初期化されてしまう設定
があります。
変更しようとしている設定が上記のどのパターンに当たるかにつきましては、事前の確認が必要です。

参考としてNetSuiteの公式ヘルプから「個人設定」で設定できる内容を確認できますので、参考資料として連携いたします。（※リンク先英文です。）
https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_N475297.html

以上、NetSuiteにおける個人設定の紹介に関するまとめでした。
【CSS備忘録】calc() 関数の使い方と実務でよく使うパターンまとめ【柔軟なレイアウトに便利】

# はじめに

本記事では、CSSでよく使う `calc()` 関数について、自分用の備忘録としてまとめます。  
特に **異なる単位の混在** や **レスポンシブ対応** など、実務でもよく使うパターンを紹介します。

---

# ①calc() 関数とは？

CSS内で数値を計算するための関数です。  
例えば、「全体の幅から30pxだけ引いたサイズにしたい」といった場合に使います。

```css
width: calc(100% - 30px);
```

# ②基本構文
```css
プロパティ: calc(数値A 演算子 数値B);
```
- 演算子は + - * / が使えます
- 異なる単位(px, %, emなど)を組み合わせ可能
- 演算子の**前後にスペースが必須**

# ③よく使うパターン

**1.全体の横幅から余白を引く**
```css
.container {
    width: calc(100% - 40px);
}
```
→全体幅から余白分だけ引いたレイアウトにしたいとき。

**2.ヘッダーを除いた高さ指定**
```css
.main {
    height: calc(100vh - 60px);
}
```
→全画面表示からヘッダー分(60px)を差し引いた高さを指定できます。

**3.中央寄せで幅 ⁺ 余白を調整**
```css
.button {
    margin: 0 auto;
    width: calc(50% + 100px);
}
```
→画面サイズに応じてボタンを中央に調整したいときに便利。

**4.複数列レイアウトで余白調整**
```css
.card {
    margin: calc(33.333% - 20px);
    width: 10px;
}
```
→3カラム構成などで隙間の幅を考慮したサイズ指定が可能。

# ④注意点
![IMG_7817.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246240/e17b1ee7-7750-44f4-9e21-cf89a976da56.jpeg)

# ⑤まとめ
- calc() は異なる単位の組み合わせや、動的なサイズ調整が必要な場面に有効
- レスポンシブ対応、中央寄せ、カードUIのレイアウトなどでよく登場
- **CSSの中で電卓が使える**と思うと便利！
SSRとブラウザAPIの相性が悪い理由

Next.jsなどのフレームワークを使用していると

「window is not defined」というエラーに出会ったり、
「Hydration failed because the server rendered HTML didn’t match the client」というエラーに出会うことが多いので、勉強も兼ねて記事にしてみました。

## SSRとは
SSRは、サーバー上でHTMLを事前に生成し、クライアント（ブラウザ）に送信する仕組みです。

ReactなどのSPAでは、通常はクライアント側でJavascriptが実行されて初めて画面が描画されますが、SSRを使うとサーバーであらかじめHTMLが生成されるため、ブラウザが受け取った時点でページの構造が出来上がっており、SEO対策や表示速度の向上に繋がります。

## ブラウザAPIとは
クライアント（ブラウザ）で動作するための特別なオブジェクトです。
これらはブラウザが持つ機能で、例えばwindow.innerWidthで画面幅を取得したり、document.getElementByIdでDOM要素を操作することができます。

## なぜ両者の相性が悪いのか
SSRが動作するサーバー側は、Node.js環境で実行されているため、ブラウザの機能を持っていません。
そのため、SSR中にwindowやdocumentを参照すると、それらは存在しないためエラーになります。

## Hidrationエラーについて
SSRによってサーバーから送られたHTMLは、あくまで静的なHTMLです。
これに対して、クライアント側でReactを起動し、イベントのバインドや状態管理を有効化するプロセスをハイドレーションと呼びます。

この時、サーバーで生成されたHTMLとクライアント側でReactが再構築するDOMが一致していない場合、
「Hydration failed because the server rendered HTML didn’t match the client.」というエラーや警告が発生します。
これは、**サーバーとクライアントで描画結果が異なるときに起きる現象**です。

## 解決方法

### ①クライアント専用の処理はuseEffect内に書く
SSR中にブラウザAPIを参照してしまうと、サーバー側にはそれらが存在しないためエラーになります。
そのため、クライアントでのみ動作させたい処理はuseEffect内に記述するのが基本的な対処法

useEffectはコンポーネントがマウントされたあとに実行されるため、サーバーでは実行されずにクライアント側でのみ実行されます。

### ②条件分岐でサーバーかクライアントかを判定する
もうひとつの解決方法は、サーバーかクライアントかを明示的に判定する方法です。
typeof window !== 'undefined'を使って、ブラウザ環境かどうかをチェックすることができます。

```typescript
export default function Example() {
  const width = typeof window !== 'undefined' ? window.innerWidth : 0;

  return <p>画面幅は {width} px です。</p>;
}
```

この場合、SSR中は0を返し、クライアント側ではwindow.innerWidth を返します。
ホワイト？ブラック？ハッカーの“帽子の色”で見抜くハッカー分類


## :computer: ハッカーとは
ハッカーとは、コンピュータやネットワークについて高度な技術的スキルや知識を持つ人のことを総称した言葉です。
ハッカーは善良な「**ホワイトハットハッカー**」と悪意のある「**ブラックハットハッカー**」の大きく２つに分類されます。
なぜ「ホワイト」と「ブラック」の帽子の色に分けられるようになったのかというと、昔の西部劇で正義の主人公は「白い帽子」、悪役は「黒い帽子」を被っていたことが由来だそうです。


## :tophat: ハットカラー

ハッカーはその行動や倫理観に基づいて、ホワイトとブラック以外にも、様々な「ハットカラー（帽子の色）」で分類されます。主要な分類とその特徴を説明します。
|種類  |悪意  |事前許可  |特徴  |
|-----|:------:|:---:|---|
|ホワイトハット  |×  |〇  |脆弱性を見つけて対策することで<br>倫理観をもって攻撃を防ぐ|
|ブラックハット  |〇  |×  |復讐や金銭目的など悪意を持って<br>攻撃する  |
|グレーハット  |×  |× |興味本位やスキルの誇示、名声<br>を得る目的で善意で脆弱性を見つける  |
|ブルーハット  |×  |〇 |製品やシステムに脆弱性が<br>存在しない状態にする  |
|レッドハット  |×  |△ |攻撃的な手法でブラックハット<br>ハッカーの攻撃を阻止する  |
|グリーンハット  |△  |〇 |経験の浅い初心者で、<br>学習してスキルを身につける  |
|パープルハット 　 |×  |〇 |自身のシステムをハッキングして、<br>スキルを身につける  |


### 1. ホワイトハット（White Hat）

倫理的なハッカーで、組織の許可を得てシステムの脆弱性をテストし、セキュリティを強化します。

- 合法的かつ倫理的に行動する。
- 発見した脆弱性を適切に報告し、修正を支援する目的。
- 企業や組織の依頼でペネトレーションテストや脆弱性評価を実施する。


### 2. ブラックハット（Black Hat）

悪意をもって不正にシステムへ侵入し、データの盗難や破壊を行うハッカーです。

- 法的に罰せられる行為を行うため、違法性が高い。
- 個人的な利益や他者への損害を目的とする。
- マルウェアの作成、データの盗難、サービス妨害攻撃（DDoS）などを行う。


### 3. グレーハット（Gray Hat）

許可なくシステムに侵入し、脆弱性を発見して報告するハッカーです。 

- システム所有者の許可を得ずにシステムに侵入し、脆弱性を探す。
- 発見した脆弱性を報告するが、報酬を求める場合もある。
- 行為自体は違法だが、悪意がない場合が多い。

### 4. ブルーハット（Blue Hat）

企業が製品やシステムのリリース前に、脆弱性をテストするハッカーです。 

- 製品やシステムのリリース前に欠陥がないかセキュリティテストを行う目的。
- 外部の専門家として、一時的に雇われることが多い。
- マイクロソフト社が主催する「BlueHat」というセキュリティカンファレンスがある。

### 5. レッドハット（Red Hat）

攻撃的な手法でブラックハットハッカーの攻撃を阻止・無力化することを目的とするハッカーです。

- ブラックハットの活動を阻止するため、あらゆる手段で妨害する。
- 攻撃的な手法を用いるため、行為が合法かどうかは状況による。
- 「攻撃的なホワイトハット」とも言える存在。


### 6. グリーンハット（Green Hat）

ハッキングの世界に入ったばかりの初心者のハッカーです。 

- 知識や経験が浅く、学習意欲が高い。
- コミュニティなどで積極的に質問し、知識を得ようとする。
- 将来的に善意を持ったハッカーにも悪意を持ったハッカーにもなる可能性がある。


### 7. パープルハット（Purple Hat）

自分の所有する環境をハッキングして練習することでスキルを磨くハッカーです。

- 自分のPCをハッキングし、ハッキング技術を磨く。
- 学習目的のために管理された環境で訓練する。
- 自分以外に脅威を与えることはほとんどない。

レッド（攻撃）とブルー（防御）の色を混ぜるとパープルになることから、攻撃と防御の両方の手法を理解し、包括的なセキュリティ戦略を提案するハッカーのことを指すこともあります。

##
これらの分類は一般的なものであり、ハッカーの行動や動機は多様です。各分類の境界は曖昧な場合もあるため、個々のハッカーの行動や目的を理解することが重要です。 


##
参考情報
 - Types of hackers: Black hat, white hat, red hat and more

https://www.techtarget.com/searchsecurity/answer/What-is-red-and-white-hat-hacking

 - Building a Balanced Security Team: The 7 Hacker Hats Explained

https://www.softwaresecured.com/post/the-7-hats-of-hacking

 - Who Are Purple Hat Hackers?

https://bluegoatcyber.com/blog/who-are-purple-hat-hackers/