OmniAICreator/Qiita-1.07M huggingface dataset:
SpaceキーをFnのようにして快適なキーボード操作を手に入れよう！(AutoHotkey実装紹介)

## はじめに

こんにちは！みなさんはタイピングの際、ホームポジションから手を離してカーソルキーまで指を運ぶのが面倒だと感じたことはありませんか？特に、カッコを閉じてからキャレットを中央に戻す操作スタイルの方は、書くたびに矢印キーに手を伸ばすことになりますよね。

そんな悩みを解決するのが今回ご紹介するカスタマイズです。Spaceキーを右手の親指で押しながら他のキーを押すことで、カーソル移動や文字削除などの操作をホームポジションから操作できるようになります。
**※本記事ではWindowsでのAutoHotkey利用を想定しています。**

## この記事でできるようになること

- スペースキーをFnキーのようにして、ホームポジションのまま以下の操作ができる
    - カーソル移動 (↓ ↑ ← →, Home/End)
    - バックスペース・削除
    - PageUp/PageDown
    - PrintScreen

## 実装コード

```ahk
; SpaceFn 実装
whenSpaceFn := false
spaceFnTriggered := false
altSpace := false
~!Space::
{
    ; Alt + Space では通常の Alt + Space 動作にする
    global altSpace
    altSpace := true
    Return
}
*Space::
{
    global whenSpaceFn
    whenSpaceFn := true
}
*Space up::
{
    global whenSpaceFn
    global spaceFnTriggered
    global altSpace
    ; Alt + Space では通常の Alt + Space 動作にする
    if altSpace {
        altSpace := false
        Return
    }

    if !spaceFnTriggered {
        ; Space 単体押しの場合は通常の Space 動作
        Send "{Blind}{Space}"
    } else {
        ; スペースとコンビネーションキーがほぼ同時に離れた際の判定バッファ
        while (A_TimeIdlePhysical < 60) {
            Sleep 10
        }
    }
    whenSpaceFn := false
    spaceFnTriggered := false
    altSpace := false
}
sendKeyWithSpaceFn(key) {
    global spaceFnTriggered
    spaceFnTriggered := true
    SendEvent "{Blind}{" . key . "}"
}
sendKeyAfterSpace(key) {
    global spaceFnTriggered
    if spaceFnTriggered {
        Send "{Blind}{" . key . "}"
    } else {
        spaceFnTriggered := true
        Send "{Blind}{Space}{" . key . "}"
    }
}
#HotIf whenSpaceFn
    *j::sendKeyWithSpaceFn("Left")
    *k::sendKeyWithSpaceFn("Down")
    *l::sendKeyWithSpaceFn("Right")
    *i::sendKeyWithSpaceFn("Up")
    *o::sendKeyWithSpaceFn("Home")
    *sc027::sendKeyWithSpaceFn("End") ; ;キー
    *h::sendKeyWithSpaceFn("Backspace")
    *m::sendKeyWithSpaceFn("Delete")
    *sc033::sendKeyWithSpaceFn("PgUp") ; ,キー
    *sc034::sendKeyWithSpaceFn("PgDn") ; .キー
    *p::sendKeyWithSpaceFn("PrintScreen")

    *Enter::sendKeyAfterSpace("Enter")
    *Left::sendKeyAfterSpace("Left")
    *Right::sendKeyAfterSpace("Right")
    *Up::sendKeyAfterSpace("Up")
    *Down::sendKeyAfterSpace("Down")
#HotIf
```

## 主な機能の説明

### 基本操作

- **Space + J/K/L/I**: 左/下/右/上にカーソル移動
- **Space + H/M**: Backspace/Delete
- **Space + O/;**: Home/End (行頭/行末へい)
- **Space + ,/.**: PageDown/Up
- **Space + P**: PrintScreen

### 特徴的な実装

1. **自然な操作感**: スペース単体押しでは通常のスペースとして機能
2. **同時押し判定**: キーリピートや、Enterキー等を際どいタイミングで押した際の誤判定を防ぐ工夫
3. **Alt+Spaceの互換性**: Alt+Spaceの通常動作を維持

## カスタマイズのヒント

上記がおすすめの形ですが、キーアサインはお好みで変更可能です。

例えば：

```
#HotIf whenSpaceFn
    ; Vimスタイルの移動
    *h::sendKeyWithSpaceFn("Left")
    *j::sendKeyWithSpaceFn("Down")
    *k::sendKeyWithSpaceFn("Up")
    *l::sendKeyWithSpaceFn("Right")
#HotIf
```

## おわりに

このSpaceFnを導入すれば、カッコを書いた後に矢印キーに手を伸ばす必要がなくなり、コーディングや文章作成が格段に快適になります。

`console.log('hogehoge');` のように、「カッコを入力 → カーソルを内側に → シングルクォーテーションを入力 → カーソルを内側に → "hogehoge" を入力 → 末尾にEnd (Space+;) で移動」といった操作をしてみると、右手をまったく動かさなくて済むことに驚くのではないかと思います。

最初は慣れが必要かもしれませんが、一度使いこなすと手放せなくなること間違いなしです！ぜひお試しください。
IAMグループ単位でS3のアクセス制御をCloudFormationで自動化する

## 🎯 この資料は CloudFormation でグループ毎のアクセス制御を自動構築するテンプレート群です。
以下の 3 つのテンプレートから構成されます。
- **グループを作成するテンプレート**
- **グループに所属するユーザを作成するテンプレート**
- **グループ毎に更新 / 読み取り / 参照不可となる S3 の作成テンプレート**

---

## 🎯 サンプルとして次の操作が行えます

| 目的 | 内容 |
|------|------|
| **IAM グループ作成** | `group-a, group-b, group-c` を自動作成（`create_groups.sh` 実行） |
| **IAM ユーザー作成** | `user-a1, user-b1, user-b2, user-c1` を自動作成し、所属を設定（`create_users.sh` 実行） |
| **S3 バケット作成 & 権限付与** | S3バケットを作成し、同時にグループ別権限を付与<br> &nbsp;&nbsp;• group-a: 更新 + 一覧<br> &nbsp;&nbsp;• group-b: 読み取り + 一覧<br> &nbsp;&nbsp;• group-c: 一覧のみ <br>（`deploy_s3_and_policies.sh` 実行）|

---

## 📂 ファイル構成と役割

```bash
├── cf_create_group.yaml                         # IAM グループ作成
├── cf_create_user_in_group.yaml                 # IAM ユーザー作成 + 所属設定
├── cf_create_s3.yaml                            # S3 バケット作成
├── cf_attach_s3_write_policy_to_group.yaml      # group-a 用: s3:* 権限
├── cf_attach_s3_read_policy_to_group.yaml       # group-b 用: 読み取り権限
├── cf_attach_listallbuckets_policy_to_group.yaml # 全グループ: バケット一覧権限
├── create_groups.sh                             # グループ作成
├── create_users.sh                              # ユーザー作成
├── deploy_s3_and_policies.sh                    # S3 + ポリシー一括適用
├── delete_all_stacks.sh                         # 全リソース削除（S3 中身削除込み）
```

---

## 🚀 デプロイ手順

### 1. リポジトリ取得 & 実行権限付与

```bash
# クローン
git clone https://github.com/hirayama-yuuichi/cloudformation-iam-s3-access.git
cd cloudformation-iam-s3-access

# Linux / macOS
chmod +x *.sh
```

### 2. IAM グループ & ユーザー作成

```bash
./create_groups.sh   # group-a / group-b / group-c
./create_users.sh    # user-a1 / user-b1 / user-b2 / user-c1
```

### 3. S3 バケット + ポリシー一括適用

```bash
BUCKET="s3-$(date +%Y%m%d-%H%M)"   # バケット名はグローバルで一意
./deploy_s3_and_policies.sh "$BUCKET"
```

---

## ✅ 動作確認ポイント

| ユーザー | 期待される操作 | 確認方法 |
|----------|----------------|-----------|
| **user-a1** | アップロード／削除可 | CLI または S3 コンソールで Put/Delete |
| **user-b1 / user-b2** | オブジェクト参照可（更新不可） | GetObject は成功するが PutObject は拒否される |
| **user-c1** | バケット一覧のみ可 | コンソールでバケットは見えるがオブジェクト閲覧は拒否 |

> 🔍 **バケットが一覧に出ない場合**：`s3:ListAllMyBuckets` が付与されているか確認。

---

## 🧹 クリーンアップ手順

```bash
./delete_all_stacks.sh "$BUCKET"   # デプロイ時と同じバケット名を渡す
```

スクリプトは
1. バケット内オブジェクトを `aws s3 rm s3://$BUCKET --recursive` で削除
2. CloudFormation スタックを依存順に削除
を自動実行します。

---

## ⚠️ はまりどころ

1. **バケット名競合**：S3 バケット名はグローバルで一意。`s3-日付-時刻` などで衝突を回避。
2. **削除失敗**：バケット内にオブジェクトが残っているとスタック削除エラー。
3. **一覧表示不可**：`s3:ListAllMyBuckets` 欠如でコンソールに何も出ない。

---

## 📝 補足

- **初期パスワード管理**：`as456A!we` はサンプル。本番環境では必ず変更してください。

---
AtCoder 入青しました【色変記事】

こんにちは、ぽえです。先日行われた AtCoder Beginner Contest 407 で念願の入青を果たしました！入青までに取り組んだことや、コンテスト中に考えていたことについて書きます。
# はじめに
入青するまでのレート推移です。
![IMG_3073.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3928187/2758f98a-0a30-4e91-adb6-481c4abf1e04.jpeg)
競プロを始めてから半年ほどで入青しているので、早い方ではないでしょうか。
# 競プロを始めたきっかけ
僕はテトリスというゲームに熱中していた時期がありました。テトリスでミノの積み方の探索などにプログラミングを使っている人を見かけ、プログラミングを始めてみることにしました。
また、たまたま学校においてあった情報オリンピックのポスターが目に入り、とりあえず出てみることにしました。(その頃は「競プロ」という言葉すら知りませんでした…)
そうして9月ごろ、情報オリンピック1次予選に出ました。ここで初めて競プロの問題を解くことの楽しさを知り、AtCoderを初めてみることにしました。
# 競プロの環境について
実は、3月末ごろにPCが故障して使えなくなってしまったので、スマホでコードを書いています。
といっても、フリック入力をしているのではなく、エレコムのSlintを使ってコーディングしています。持ち運びが容易なので、外でも精進しやすくなりました。
また、エディタはGithub Codespaces を使っています。自動化ツールも導入でき、サクサク動くので、むしろPCのときより快適になったかもしれません。需要があれば導入記事を書こうかと思います。
# テンプレート
普段はこのファイルにコードを書いています。
```
#include "template"

int main() { IO();
    int T=1;
    // cin >> T;
    while (T--) solve();
}

void solve() {
}
```
提出するときは、下のコードがoj-bundle によって埋め込まるようになっています。
https://mackerel38.github.io/competitive/util/template.hpp
長いので特に中身の解説はしませんが、不明な点があったらぜひ聞いてださい。
# 精進
水色50問、青色50問を入れたバチャを作り、前から飛ばさずに解いていました。
https://kenkoooo.com/atcoder/#/contest/show/222cf130-a4d7-40ba-a3ae-20ee994a5b99
また、最近はABC で解けなかった問題を全て入れて苦手分野を把握しようとしています。
https://kenkoooo.com/atcoder/#/contest/show/ec6ed6c5-108d-4b32-93ad-837da0b442f8
# ライブラリ
モチベがないときは、いろいろな記事を読んで、ライブラリを書いてコンテスト中使えるようにしていました。
ライブラリはこちらから見ることができます。バグってたらごめんなさい...
https://mackerel38.github.io/competitive/
# 学んだアルゴリズム・データ構造
コンテストに活かすため、もちろんアルゴリズムやデータ構造の勉強をしました。
特に、動的計画法は思いつきさえすれば単純な配列上の計算だけで解けるものが多く、コンテストにすぐ活かせそうだったので重点的に勉強しました。
# コンテスト中の動き方
競プロを始めた時から一貫して、コンテスト中は「できるだけ高い順位を目指す」を意識した行動をしていました。上手くいかなかったこともありましたが、ここでは上手く行ったABC383を挙げます。
![IMG_3083.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3928187/8df5d4a0-2564-4327-8ceb-8534beb383cc.jpeg)
1472パフォでレートは501→739 でした。
自分が得意とするDPがF問題にあり、D問題の解法が思い浮かんでいなかったのでF問題を解きました。結果としてぎりぎり解けたので大きなプラスとなりました。これが決まるととても気持ちがいいです。もちろん、失敗した時は大抵冷えます…
このように自分が得意な分野は積極的に解くといいと思います（保証はできません...）。
# 余談
実は数学が好きで、OMCを最近始めました。
![IMG_3084.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3928187/3dd0b8ea-ca8f-478d-af95-6aaa792837d5.jpeg)
競技数学というものに触れ始めたのはほんの最近なのですが...
そのおかげもあってか、数学的な問題にあまり困ってないような気がしています。
# さいごに
もちろんまだまだ上を目指します！
**次の目標は黄色**です、半年ぐらいで達成できたら嬉しいです！
ここまで見てくださってありがとうございました！
SwiftUI ビューの境界を自在に変更

iOS / Mac / MacCatalyst どれも使える

これは便利

[![SplitView](https://user-images.githubusercontent.com/1020361/219515082-6e657bee-e4e2-4efd-9e78-f5c98aaa3083.mov)](https://github.com/stevengharris/SplitView)


https://github.com/stevengharris/SplitView
Unity初心者が1か月でデスクトップマスコットを作ってみた話

# はじめに
4月26日から開発を始めて、5月25日までの1か月で「LLM × VRM」で動く**デスクトップマスコットエンジン**を作ってみた話です。

GitHubリポジトリはこれ

https://github.com/segfo/Aetherith

# 動機
DifyでAIエージェントを作ったし、それを組み合わせてなんか「いい感じ」のアプリ作れねーかな？と思ったのがきっかけ。
で、AIエージェントを擬人化したキャラ（VRM）を作ってみたんですよ。

そしたら、「このキャラが喋って動いたらマジのエージェントじゃね？」って思って、勢いで作り始めました。

方向感はuDesktopMascotにインスパイアされました。
ちょうど「開発するかー」って気分のときに、「人のやつ改造した方が楽か？」→「探してみるか」→「おっ、これ良さそうじゃん！」って感じで出会いました。（ちょうどSteam版がリリースされたタイミングでした）

https://github.com/MidraLab/uDesktopMascot

こちらも良作なのでぜひ。VRM以外の形式にも対応してるし、音声も流せたりします。
ちなみに、VRM1.0のロード部分は丸パクリさせてもらった。（VRM0.xやFBXとかのロード部分は削る感じ）

そんな感じで当初はuDesktopMascotを改造しようと思ったんすけど、機能が多くてUnity初心者の自分には改造がしんどかったので、結局は新規開発しました。（てかUnity触るの初めてだったし）

急がば回れってやつですね。

これは余談ですが、UIの配置や考え方はまるっきり違う感じなのでそこは棲み分けできそうな感じがします。

# 開発テーマ

**「そこで生きているキャラクター」**
これが今回のクソデカテーマ。

あくまで“それっぽく”動くことを目指して作っています。
LLMとVRMの組み合わせって、なんかもう最高じゃないですか？


# UIの方向性
- **ウィンドウの透過処理**
  - Windows APIを直接叩くのは面倒だったので、[UniWindowController](https://github.com/kirurobo/UniWindowController)を使う

- **チャットUI**
  - 本当は別ウィンドウで出したかったけど、Unityの仕様上ディスプレイの数しかウィンドウを作れない
    - 同一ウィンドウ内に仮想ウィンドウを作って実現した。TextMesh ProなどのUnity標準機能を活用）

- **VRMとチャットウィンドウの位置**
  - VRMの吹き出しっぽくチャットウィンドウを常時表示。
  - ウィンドウの最小化機能も今後欲しいかもしれない。

# Unityのパイプライン

VRM使うし、とりあえず **3D Universal Render Pipeline（URP）** でいこう、という感じで採用した。特に深い意味はない

# メイン機能

- **LLMチャット機能**
  - ローカルLLM（対応済み）
  - リモートLLM（Dify APIでの対応を予定）

- **LLMによる表情モーフィング**
  - ローカルLLM（対応済み）
  - リモートLLM（こちらもDify API予定）

- **VRMとのインタラクション**

  - 撫でる・つつく・キャラが「振られた」ときのリアクション
  - 「振られた」は実装済み
  - 撫でる・つつく動作は複数パターン用意できるとよさそう

# サブ機能
- LLM設定、システムプロンプト、VRMモデルの外部ファイル差し替え機能
- LLMパラメータのカスタマイズ

  * `Temperature`, `Top-K`, `Top-P` など
* VRMの表示調整機能

  * スケール調整（推奨：0.5〜1.8）
  * トーンマッピングや外力（SpringBone）設定
* チャット窓のRGBA背景・透過度調整
* **瞬き抑制機能**

  * 特定の表情が一定以上の重みのとき、瞬きをオフにする
  * 目を細める系の表情（Happyとか）だと、通常の瞬きが「目を閉じすぎ」になる問題を回避する機能です
  * 糸目キャラのためにデフォルト瞬き禁止で、特定の表情（怒り、驚き）で目を見開く系のムーブするときだけ瞬きオンにもできます
* キャラが「振られた」ときの感知強度を調整可能です


そのほか細かい機能もいろいろありますが、ひとまずこんな感じで。

# 紹介

Qiitaはgifの容量的にアウトだったので、GitHubで見てもらえたらなと。
[使っているところ（GIF）](https://github.com/segfo/Aetherith/blob/main/README_resources/Play.gif)

好きなキャラのVRMを突っ込んで、システムプロンプトを調整するだけで、かなり「いい感じ」に動いてくれます。
多少プロンプトのチューニングは必要ですが、そこは慣れです。


# 苦労ポイント

* 非矩形ウィンドウを作る（ウィンドウを透過する）処理

https://qiita.com/segfo/items/67f26a8643b57498fe98

* **ScrollViewの挙動が謎すぎて死んだ**
  → パラメータを一日中ポチポチ調整して、なんとか解決

* **VRMの頭の横にチャットUIをちょうど良く配置する機能**

* **VRMスケール変更時の調整**

  * 透明化されたUnityウィンドウに、いい感じに収まるように
  * チャットUIのスケーリングに影響しないよう動的に配置計算

* **ウィンドウ移動時にSpringBoneに外力を与えて「それっぽく」動かす**

* **タイプライター風の文字出力機能**
  * LLMからStreamingでテキストが出力される際に、順次描画されることで自然な表示に
  * LLMのメッセージとシステムメッセージ出力の違和感をなくすための地味な調整
  * 非同期メソッドじゃないとUIが固まる、という初歩の罠にもハマった

# まとめ

**デスクトップマスコットエンジン、作るのめっちゃ楽しい。**

本当はRustで書きたかったけど、今回は目的優先でUnityにしました。
Unity、最初は取っつきにくかったけど、慣れてくるとまぁまぁ良いですね。
🍅 AppStore不要！Mac用ポモドーロアプリ『TomatoBar』をインストールする方法

# はじめに
会社のMacにAppStoreが入れられず、ポモドーロアプリが使えない…。
Macのショートカットでポモドーロタイマーを作るしかない…。

という状況に自分が陥り、ちょうどいいアプリがあったのでご紹介。


# 前提 
1. Macを使っていること


# 今回インストールするアプリ『TomatoBar』とは？

特徴
1. シンプルでメニューバーに表示
2. 無料でオープンソース
3. AppStore経由のインストールが不要

https://github.com/ivoronin/TomatoBar




# インストール 下記のどちらか

## 方法①：Homebrew
1.	ターミナルを起動する
2.	以下のコマンドでインストールする

```
brew install --cask tomatobar
```

※Homebrewの導入方法はこちらを参照してください。
[Homebrewインストール手順(Qiita)](https://qiita.com/Meycha/items/2a07fcd7920d3c6af4fa)


## 方法②：zipファイル

1. [TomatoBar](https://github.com/ivoronin/TomatoBar/releases)にアクセスして最新版のzipをダウンロード
2. zipを解凍
3. 解凍後の『TomatoBar』を右クリックし、表示されたメニューから『開く』を選択
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4006283/1ec7dcb7-fa17-421b-9cd1-4b3cb7b72707.png" width=50%><br/>

4. 警告が表示される場合は『開く』をクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4006283/8610928d-8474-4302-b820-bbc8fbaed96a.png" width=20%><br/>

以上 メニューバーにトマトマークが表示されているはずです。
# 設定
時間設定や通知音などをカスタマイズできます。

設定後はメニューバーに残り時間が表示され、簡単にポモドーロテクニックを実践できます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4006283/a1325aea-0a93-4ee2-b27f-8b39d49e8563.png" width=25%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4006283/6d6eab37-33d1-4079-a795-97426970fc0a.png" width=24%><br/>



<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4006283/ceb3d249-6de4-4942-b18a-65f1f2eeabd4.png" width=20%><br/>
Django 5.2 でのDEFAULT_FILE_STORAGEの指定方法

Django 4.2 LTS までは `DEFAULT_FILE_STORAGE` にアップロードファイルを扱うストレージクラスを指定することで、ローカルフォルダ以外のストレージに対応することができました。

Django 5.2 LTS では `DEFAULT_FILE_STORAGE` は廃止されているため、4.2でも導入されていた `STORAGES` 設定を利用する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73788/9d670aa2-f67b-4b4b-b0cc-54598ef6cc91.png)


`STORAGES` では アップロードファイルだけではなく、静的ファイル (`staticfiles`) の扱いも定めることができます。

これまでの設定を置き換えるには次のように書き換えると良いです。

```python:旧方式
DEFAULT_FILE_STORAGE = "app.storage_backends.MediaStorage"
```

```python:新方式
STORAGES = {
    "default": {
        "BACKEND": "app.storage_backends.MediaStorage",
    },
    "staticfiles": {
        "BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage",
    },
}
```
統計学実践ワークブック10章


## ■ 背理法と統計的仮説検定の構造比較

| 数学的背理法（Reductio ad Absurdum） | 統計的仮説検定（Statistical Hypothesis Testing） |
| ---------------------------- | --------------------------------------- |
| (1) 証明したい命題Aを考える             | (1) 対立仮説H₁：「母平均μはμ₀と異なる」と主張したい          |
| (2) 命題Aの否定（¬A）を仮定する          | (2) 帰無仮説H₀：「母平均μはμ₀である」と仮定する            |
| (3) ¬Aから矛盾を導く                | (3) H₀の下であり得ない（≒稀な）標本統計量が観測される          |
| (4) 矛盾により¬Aを否定（Aが正しい）        | (4) 稀な事象の観測によりH₀を棄却し、H₁を支持              |

---

## ■ 基本用語と構造

* **帰無仮説 H₀**：原則として「差がない」「効果がない」といった保守的な仮説。
* **対立仮説 H₁**：H₀に反して「差がある」「効果がある」と主張する仮説。
* **検定統計量**：H₀の下での標本から算出する値（例：Z統計量など）。
* **有意水準 α**：稀な事象とみなす境界（例：5% → α = 0.05）。
* **P値**：観測されたデータ以上にH₀の下で「稀」な値が観測される確率。
* **棄却域・臨界値**：H₀を棄却する基準値（片側：Z ≥ 1.645、両側：|Z| ≥ 1.96）。

---

## ■ Z検定の例（母分散既知）

* **仮定**

  * 母集団分布： $X_i \sim N(\mu, \sigma^2)$
  * 標本平均： $\bar{X} \sim N(\mu, \sigma^2/n)$
  * 検定統計量：

    $$
    Z = \frac{\bar{X} - \mu_0}{\sqrt{\sigma^2 / n}} \sim N(0,1) \quad \text{under } H_0
    $$

* **棄却域の設定**

  * 両側検定の場合、有意水準5%なら：

    $$
    |Z| \geq 1.96 \Rightarrow \text{棄却}
    $$
  * 片側検定（上側）なら：

    $$
    Z \geq 1.645 \Rightarrow \text{棄却}
    $$

---

## ■ 検定の誤りと検出力

| 区分         | 説明                 | 記号  |
| ---------- | ------------------ | --- |
| 第一種の過誤     | H₀が正しいのに棄却する誤り     | α   |
| 第二種の過誤     | H₁が正しいのにH₀を棄却しない誤り | β   |
| 検出力（Power） | 第二種の過誤を犯さない確率      | 1−β |

* 第一種の過誤：制御すべき指標。有意水準で制御される。
* 第二種の過誤：対立仮説のもとで起こりうる。**検出力**が重要。

---

## ■ サンプルサイズ設計の理論

対立仮説の平均をμ₁とし、H₀の平均μ₀との差をΔとする：

$$
\Delta = \mu_1 - \mu_0
$$

$$
n = \left( \frac{z_{\alpha/2} + z_{\beta}}{\Delta/\sigma} \right)^2
$$

* $z_{\alpha/2}$：第一種の過誤（α）に対する正規分布の上側分位点
* $z_{\beta}$：第二種の過誤（β）に対応する分位点
* $\Delta/\sigma$：効果量（エフェクトサイズ）

---

## ■ P値の定義と解釈

* P値（P-value）：帰無仮説の下で、**現在の観測統計量以上に極端な値が出る確率**
* 解釈例：

  * 片側検定で Z = 2.1 → P(Z ≥ 2.1) ≈ 0.018
  * 両側検定 → P = 2 × P(Z ≥ 2.1) ≈ 0.036
* P値 < α → 有意 → H₀を棄却
* P値 > α → 非有意 → H₀を棄却しない

---

## ■ 抜取検査（Acceptance Sampling）

* 抜取検査は、ロット全数を検査せず、サンプルから**合否判定**を行う方式。
* 判定基準：

  * サンプルサイズ：n
  * 許容不良数：c
  * 不良個数 k ≤ c → 合格、k ≥ c+1 → 不合格

---

## ■ まとめ図（例：Z検定の棄却域）

```
   棄却域      受容域         棄却域
 <------|----------------|-------->
      -1.96            1.96
    (α/2=2.5%)      (α/2=2.5%)
```

---
第2回 tableau データ分析

# ポケモンデータから分析するビジネスインサイト
データに基づく意思決定は、ゲーム業界だけでなく、リテール・メディア領域でもカギになっている点についてtableauで作成したVizとその分析について記事にしたいと思います。
⇒ 人気なポケモン、強いポケモン、レアなポケモンを商材に使うことが、商品のカギとなる⁇

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872484/d633c535-6d74-4039-a3c5-3de342ecd2a7.png)


タイプ別分類、世代別種族値トレンド、捕獲度と強さの負の相関の三つを軸に考察していきます。

Viz1：タイプ別分類
※タイプ別分類に関しては、主タイプのみで分析しております。
主タイプ最多はみず (144種)、次いでノーマル (125種)、くさ (113種)となっており、みずタイプは全体の約12%を占めている。
一番新しく登場した、フェアリータイプよりも、ひこうタイプの方が種類はすくなく、
伝説のみでフィルタリングすると、エスパーが最多となる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872484/0339c540-6b8d-44f7-8b57-02a3f009f746.png)
⇒身近な商品を観察すると、代名詞といえるピカチュウだけでなく、水タイプのポケモン（ポッチャマ、カイオーガ、パルキア、コイキング、ギャラドス）を見ることが多いい気がするが、季節キャンペーン（夏シーズン）との相性が高いだけでなく、母数が多いいことも考えられる。

Viz2：世代別種族値トレンド
緩やかであるが、世代が進むにつれ、種族値（ポケモンの強さ）は、上昇傾向にある。
新世代リリース時は新しいだけでなく、強さを訴求する商品（カード、フィギュア）が売れやすくなるのかもしれない。
ただ、伝説に絞った場合は、緩やかに下降傾向にある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872484/790b7712-9942-44f4-9d49-e2cc1398702d.png)


Viz3：捕獲度と強さの負の相関
種族値が高いほど、捕獲できなくなる。
⇒強いほど捕まえにくいは真実
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872484/2ad92815-6e87-4522-a419-625ef9ccb962.png)


強いポケモン、捕まえられないは、ガチャ設計（レアキャラとして当たりにくく）やレア商品パッケージの希少度設定に活用可能であると考えられる。

最後に個人的な気づきとしては、
tableau上では、タイプごとにフィルタリングを容易にできるため、タイプ別分析がとてもやりやすいと感じました。世代別種族値トレンドでは、インフレ傾向にはあるものの予想よりは、インフレしていなく、ゲーム関連を加味した適切な調整が行われていると感じました。
また、公式のポケモン図鑑では、各ポケモンのページURLがパラメータ（ポケモンの番号）をもっているので、
+αポケモン検索できるようなVizも作ってみたいと。

次回は、総務省統計局「統計でみる都道府県のすがた」を利用した分析を行ってみたいとおもいます！
統計学実践ワークブック7



---

## 🔶 第1章：確率変数の収束の種類

---

### 1.1 概収束（Almost Sure Convergence）

$$
X_n \xrightarrow{\text{a.s.}} X \quad \text{⇔} \quad P\left( \lim_{n \to \infty} X_n = X \right) = 1
$$

* 強い収束。例：ベルヌーイの大数の法則
* 測度論的定義が必要（Lebesgue理論）

---

### 1.2 確率収束（Convergence in Probability）

$$
X_n \xrightarrow{p} X \quad \text{⇔} \quad \forall \varepsilon > 0, \quad \lim_{n \to \infty} P(|X_n - X| > \varepsilon) = 0
$$

* 実用的には最もよく用いられる
* 平均二乗収束や概収束 ⇒ 確率収束を含意する

---

### 1.3 平均二乗収束（Mean-Square Convergence）

$$
X_n \xrightarrow{L^2} X \quad \text{⇔} \quad \lim_{n \to \infty} E[(X_n - X)^2] = 0
$$

* モーメントベースの収束
* 確率収束より強い条件

---

### 1.4 分布収束（Convergence in Distribution）

$$
X_n \xrightarrow{d} X \quad \text{⇔} \quad \lim_{n \to \infty} F_n(x) = F(x) \quad (\text{F の連続点で})
$$

* 推定量や検定統計量の漸近分布に使う
* 実際の確率変数の値ではなく“分布そのもの”の収束

---

## 🔶 第2章：主要な極限定理

---

### 2.1 大数の法則（Law of Large Numbers）

* **弱法則（WLLN）**：

$$
\bar{X}_n = \frac{1}{n} \sum_{i=1}^n X_i \xrightarrow{p} \mu
$$

* **強法則（SLLN）**：

$$
\bar{X}_n \xrightarrow{\text{a.s.}} \mu
$$

* i.i.d.な $X_i$ が有限の平均 $\mu$ を持てば成立

---

### 2.2 中心極限定理（Central Limit Theorem）

* i.i.d.な確率変数 $X_i \sim (\mu, \sigma^2)$ に対し、

$$
Z_n = \frac{\sqrt{n} (\bar{X}_n - \mu)}{\sigma} \xrightarrow{d} \mathcal{N}(0,1)
$$

* 標本平均が正規分布に近づく

---

### 2.3 ポアソンの少数法則（Law of Rare Events）

* $X_n \sim \text{Bin}(n, \lambda/n)$ とすると：

$$
X_n \xrightarrow{d} \text{Poisson}(\lambda)
$$

* 希少イベントの合計はポアソン分布に収束

---

## 🔶 第3章：極値理論と連続補正

---

### 3.1 極値分布（Extreme Value Distribution）

* 最大値（または最小値）の極限分布
* 適切な位置・尺度変換で3種類に分類：

| 名前             | 分布関数                             |
| -------------- | -------------------------------- |
| ガンベル (Gumbel)  | $G(x) = e^{-e^{-x}}$             |
| フレシェ (Fréchet) | $G(x) = 1 - x^{-\alpha}, x > 0$  |
| ワイブル (Weibull) | $G(x) = e^{-(-x)^\alpha}, x < 0$ |

---

### 3.2 連続補正（Continuity Correction）

* 離散分布（例：二項分布）を正規分布で近似する際、
  区間の境界を $\pm 0.5$ 補正して滑らかさを確保
* 例：

$$
P(a \le X \le b) \approx P(a - 0.5 < Z < b + 0.5)
$$

---

## 🔶 第4章：連続写像定理とスルツキーの補題

---

### 4.1 連続写像定理（Continuous Mapping Theorem）

* $X_n \xrightarrow{d} X$, $g$ が連続 ⇒ $g(X_n) \xrightarrow{d} g(X)$

---

### 4.2 スルツキーの補題（Slutsky’s Theorem）

* $X_n \xrightarrow{d} X$, $Y_n \xrightarrow{p} c$ ⇒

  * $X_n + Y_n \xrightarrow{d} X + c$
  * $X_n \cdot Y_n \xrightarrow{d} cX$

---

## 🔶 第5章：デルタ法（Delta Method）

---

* 標本平均 $\bar{X}_n \sim \mathcal{N}(\mu, \sigma^2/n)$
* 関数 $g(\cdot)$ に対して：

$$
\sqrt{n}(g(\bar{X}_n) - g(\mu)) \xrightarrow{d} \mathcal{N}(0, \sigma^2 (g'(\mu))^2)
$$

* 応用：検定統計量、推定量の変換、信頼区間など

---

## 🔶 応用例：分布収束の導出

---

### 例1：標準化二乗平均

$$
X_n \sim \mathcal{N}(0, 1/n) \Rightarrow X_n \xrightarrow{d} \delta_0
$$

* $\delta_0$：原点に集中する点質量分布（1点分布）

---

### 例2：X²のデルタ法

$$
\bar{X}_n \sim \mathcal{N}(\mu, \sigma^2/n) \quad \Rightarrow \quad \bar{X}_n^2 \text{ は？}
$$

* $g(x) = x^2$ にデルタ法適用

$$
g'(\mu) = 2\mu \Rightarrow \text{分布は } \mathcal{N}(0, 4\mu^2\sigma^2)
$$

---
今日からできる！AWS Security Hubを使ったお手軽セキュリティ運用①

# はじめに
最近は、生成AIを活用して誰でも簡単に攻撃ツールが作れてしまう世の中になりました。
便利な反面、非常に怖いですね…

こういった状況下でもセキュリティをしっかり担保していくには、
判断材料をすばやく集め、運用を含めた日々の対策見直しが重要になってきます。

弊社では複数のプロダクトがAWS上で動いており、それらのセキュリティ担保のためにAWS Security Hubを使って運用体制の再構築を行いました。

今回は、スタート～体制の再構築までのステップを簡単に振り返ります。

# 1. ”責任共有モデル”に基づいたAWSクラウドセキュリティ対策範囲の整理
[AWSクラウドセキュリティ 責任共有モデル](https://aws.amazon.com/jp/compliance/shared-responsibility-model/) では、AWS側とクラウド利用者側とで意識すべきセキュリティの責任範囲を明確化しています。
※ 簡単にいうと **「自分たちのデータとアプリケーションのセキュリティは、自分たちで責任を持ちましょう」** ということが書いてあります。

一言でセキュリティ対策と言っても非常に広範囲なので、
まずはこの考えに沿って、どこからどこまでの範囲で責任を持てばいいのか整理を行いました。

# 2. どこから手を付ける？NIST CSFの利用
具体的にどこから手を付けたらいいのか？
先ほどの”責任共有モデル”に基づいて考えなければならない範囲はわかったものの、具体策とその実施優先度はどのように決めればよいでしょうか。

ケースバイケースだと思いますが、弊社では現状分析と不足部分の強化に重きを置いて **NIST CSF（サイバーセキュリティフレームワーク）** を利用して優先度決めを行いました。

NIST CSFは元々、米国オバマ政権時代に国防強化のために作られたものですが、汎用性があるため一般企業でも適用可能です。
必要なセキュリティ対策を「識別」「防御」「検知」「対応」「復旧」の5つの機能で整理し、強化ポイントがどこかを効果的に洗い出すことができます。

# 3. AWS Security Hubで必要な情報を一元化
そのあとは洗い出し結果に基づいて対応を進めていきました。
例えばNIST CSF「検知」に該当するAWSのセキュリティ強化サービスとしては、以下があります。

* Amazon GuardDuty：脅威検知
* Amazon Inspector：ソフトウェアの脆弱性検知
* Amazon Macie：個人情報検知
etc…

これらを組み合わせてセキュリティ対策を行うことは非常に効果的である一方で、
個々の管理画面を都度確認し、対応優先度を判断していくのはかなり運用負荷が高くなります。

そこで登場するのがAWS Security Hub。
[主要なセキュリティ対策サービス群](https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/securityhub-internal-providers.html)と連携して検出結果を一箇所に集約し、分かりやすく可視化してくれます。

※ AWS Security Hubはあくまでも情報集約・可視化のサービスです。
　 情報ソースとなる各種セキュリティ対策サービス群は、別途有効化が必要です。

# 4. リスク優先度に沿った対応
Security Hubには、 **リスクをグルーピングして深刻度を自動付与** する機能が標準搭載されています。
※ 重大度：重要 ＞ 高 ＞中 ＞ 低 で表現されます。

連携したセキュリティ対策サービス群すべての情報を集約表示してくれているので、
これだけで「どのリスクに、いつ、どれくらいの優先度で対応すべきか」を判断しやすくなり、運用負荷が大きく下がります。

なお重要度はAWSのベストプラクティスに沿って優先度付けされているので、
基本的には上から順に対応を検討していくのが良いと思います。

### 出力サンプル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3954314/e651a268-3de7-4f85-b122-855348dbf132.png)


# まとめ
セキュリティ対策は「運用」が肝心です。
AWSを使っているなら、AWS Security Hubによって対策判断材料をすばやく集めるられるのは大きなポイントですね。

ただ環境によっては集まる情報が膨大になってしまって、対策判断がつけられない…というケースも十分ありそうです。
よりコストパフォーマンスのいい運用方法については、弊社もまだまだ模索段階ですので、
ここは折を見てまた触れたいと思います。
　 
最後まで読んでいただきありがとうございました。
この記事がどなたかの参考になれば幸いです。
アプリ開発未経験者がアップルストアに申請したプロセス　（初心者向け🔰）

今回はアプリ開発未経験者がアップルストアに申請したプロセスを簡単に説明してみました！

同じようにこれから挑戦する方の参考になれば嬉しいです。
特にエンジニア未経験者にとって、少しでも役立つ内容になれば幸いです🙌


✅ ざっくり全体の流れ
Xcodeでアプリ開発

Apple Developer Programに登録

App Store Connectでアプリ情報を登録

Xcodeでアプリを申請

Appleの審査を待つ（数日〜1週間ほど）

App Storeで公開！🎉

① アプリ開発：Xcode + Swiftで挑戦！
まずはMacを用意し、Apple公式の開発ツール「Xcode」をインストールします。

私はネット記事、YouTube動画、書籍などを活用しながら、完全に独学でSwiftを学びました。

最初は難しく感じましたが、とにかくシンプルな「ToDoアプリ」や「メモ帳アプリ」から始めるのがオススメです。
理由は、開発〜申請〜公開までの一連の流れを早い段階で体験できるからです。

✍️ 正直、私もこの一歩をもっと早く踏み出しておけば、申請作業がスムーズだったと思っています…！

② Apple Developer Programに登録（年額12,800円）
アプリをApp Storeに公開するには、Appleの「Developer Program」に登録が必要です。

年額12,800円（2025年時点）

Apple公式サイトから申し込み

本人確認書類の提出が必要

登録から有効化まで数日かかることもあるので、余裕をもって早めに登録しておくのが吉です。

③ App Store Connectでアプリ情報を登録
Appleが提供している「App Store Connect」というWebサイトにログインし、アプリの基本情報を入力します。

必要な主な項目はこちら：

アプリ名（他アプリと重複不可）

カテゴリ（例：教育、健康、ツールなど）

アイコン画像（1024×1024px）

各端末用スクリーンショット（iPhone SE〜iPhone Pro Maxなど）

アプリの説明文・キーワード・サポートURLなど

⏳ 正直ここが一番時間かかりました。
入力する項目が想像以上に多いので、余裕を持って準備しましょう！

④ Xcodeからアプリを申請（アーカイブ → アップロード）
アプリが完成したら、Xcodeで「アーカイブ」してApp Store Connectにアップロードします。

チェックポイント：

ビルド設定が「Release」になっているか

バージョン番号／ビルド番号の整合性

アプリに重大なバグがないか最終チェック

アップロードが完了すると、TestFlightというツールを使って、自分のiPhoneでテストプレイも可能になります📱

⑤ Appleの審査を待つ（通常は1〜2日）
いよいよAppleの審査フェーズです！

チェックされるポイント：

ガイドライン違反がないか

クラッシュやエラーがないか

ユーザーにとって有益なアプリか

❗私は実際に4回リジェクト（却下）されました…泣
でもAppleは必ずフィードバックをくれるので、しっかり読んで直せばOKです！

ちなみに、審査期間は日によってバラつきがありましたが、最短で半日で通ったこともありました。

⑥ App Storeで公開！🎉
審査を通過すれば、いよいよアプリがApp Storeに公開されます！

世界中の人が自分のアプリを見つけて、ダウンロードしてくれる。
その瞬間は、自分の努力が形になった感動的な体験でした😭

💬 最後に
アプリをリリースするまでは、細かい作業やトラブルも多く、めげそうになる瞬間もありました。
でも、一度経験すると「開発→申請→公開」のイメージがつかめて、次回からはグッと楽になります。


🎥 参考になった動画教材
私が実際に参考にしたYouTube動画はこちら👇
初心者向けに丁寧に解説されていて、とても助かりました！

👉 https://youtube.com/watch?v=fXeDe9tafG8
統計学実践ワークブック6


## 🔶 第1章：基礎的連続分布

---

### 1.1 **連続一様分布**（Uniform Distribution）

* **定義**：区間 $[a, b]$ で等確率
* **PDF**：

  $$
  f(x) = \frac{1}{b - a}, \quad a \le x \le b
  $$
* **期待値**：$\frac{a + b}{2}$
* **分散**：$\frac{(b - a)^2}{12}$

---

### 1.2 **正規分布**（Normal Distribution）

* **定義**：$X \sim \mathcal{N}(\mu, \sigma^2)$
* **PDF**：

  $$
  f(x) = \frac{1}{\sqrt{2\pi\sigma^2}} e^{-\frac{(x - \mu)^2}{2\sigma^2}}
  $$
* **再生性**：和も正規分布に従う
* **標準化**：$Z = \frac{X - \mu}{\sigma} \sim \mathcal{N}(0, 1)$

---

### 1.3 **指数分布**（Exponential Distribution）

* **定義**：平均間隔 $\lambda^{-1}$ の到着間隔分布
* **PDF**：

  $$
  f(x) = \lambda e^{-\lambda x}, \quad x \ge 0
  $$
* **期待値**：$\frac{1}{\lambda}$, **分散**：$\frac{1}{\lambda^2}$
* **無記憶性**：$P(X > s + t | X > s) = P(X > t)$

---

### 1.4 **ガンマ分布**（Gamma Distribution）

* **定義**：指数分布の一般化、待ち時間の合計
* **PDF**：

  $$
  f(x) = \frac{\lambda^\alpha}{\Gamma(\alpha)} x^{\alpha - 1} e^{-\lambda x}, \quad x > 0
  $$
* **期待値**：$\frac{\alpha}{\lambda}$, **分散**：$\frac{\alpha}{\lambda^2}$

---

### 1.5 **ベータ分布**（Beta Distribution）

* **定義**：$[0,1]$上での分布、事前分布や比率モデルに
* **PDF**：

  $$
  f(x) = \frac{x^{\alpha - 1}(1 - x)^{\beta - 1}}{B(\alpha, \beta)}
  $$
* **期待値**：$\frac{\alpha}{\alpha + \beta}$, **分散**：$\frac{\alpha \beta}{(\alpha + \beta)^2 (\alpha + \beta + 1)}$

---

### 1.6 **コーシー分布**（Cauchy Distribution）

* **定義**：重い裾、平均・分散未定義
* **PDF**：

  $$
  f(x) = \frac{1}{\pi \gamma \left[1 + \left(\frac{x - x_0}{\gamma}\right)^2 \right]}
  $$
* **特徴**：平均・分散が定義されない。標本平均も収束しない

---

### 1.7 **対数正規分布**（Log-normal Distribution）

* **定義**：$\log X \sim \mathcal{N}(\mu, \sigma^2)$
* **PDF**：

  $$
  f(x) = \frac{1}{x\sigma\sqrt{2\pi}} \exp\left(-\frac{(\log x - \mu)^2}{2\sigma^2}\right)
  $$
* **応用**：所得・株価・寿命データなど

---

## 🔶 第2章：多変量分布

---

### 2.1 **2変量正規分布**

* **定義**：2次元正規ベクトル
* **PDF**：

  $$
  f(x, y) = \frac{1}{2\pi \sigma_x \sigma_y \sqrt{1 - \rho^2}} \exp\left(-\frac{1}{2(1 - \rho^2)} Q\right)
  $$

  （$Q$：2次形式）
* **周辺分布**：1変数正規分布
* **条件付き分布**：正規分布
* **相関係数** $\rho = \frac{\text{Cov}(X,Y)}{\sigma_X \sigma_Y}$

---

### 2.2 **多変量正規分布**

* **定義**：$\mathbf{X} \sim \mathcal{N}_k(\boldsymbol{\mu}, \Sigma)$
* **PDF**：

  $$
  f(\mathbf{x}) = \frac{1}{(2\pi)^{k/2} |\Sigma|^{1/2}} \exp\left( -\frac{1}{2} (\mathbf{x} - \boldsymbol{\mu})^\top \Sigma^{-1} (\mathbf{x} - \boldsymbol{\mu}) \right)
  $$
* **特徴**：各成分の任意の線形結合も正規分布に従う

---

### 2.3 **混合正規分布**

* **定義**：複数の正規分布の加重平均
* **PDF**：

  $$
  f(x) = \sum_{i=1}^k w_i \cdot \mathcal{N}(x|\mu_i, \sigma_i^2), \quad \sum w_i = 1
  $$
* **応用**：クラスタリング（GMM）、異常検知、EMアルゴリズム

---

## 🔶 第3章：標本分布（カーネル分布群）

---

### 3.1 **カイ二乗分布**（Chi-square）

* **定義**：標準正規分布の2乗和
* **自由度** $k$：正規変数の個数
* **期待値**：$k$, **分散**：$2k$
* **非心性**：$\chi^2(k, \lambda)$（非心度 $\lambda$ ）

---

### 3.2 **t分布**

* **定義**：正規分布とカイ二乗分布から定義される

$$
T = \frac{Z}{\sqrt{V/k}} \quad (Z \sim \mathcal{N}(0,1), V \sim \chi^2(k))
$$

* **特徴**：裾が重い、自由度大で正規分布に近づく
* **非心t分布**：平均 $\mu \neq 0$ をもつ場合

---

### 3.3 **F分布**

* **定義**：2つのカイ二乗分布の比

$$
F = \frac{(U / d_1)}{(V / d_2)}, \quad U \sim \chi^2(d_1), V \sim \chi^2(d_2)
$$

* **応用**：分散分析（ANOVA）
* **非心F分布**：片方の分子に非心度あり
「RDB・オブジェクト指向・PMBOKなど」基本IT知識のまとめ

🧩 1. RDB（Relational Database）の誕生
提唱者: Edgar F. Codd（1970年、IBM）

特徴:

データは「テーブル（表形式）」で管理

SQL（Structured Query Language）で操作

スキーマによって構造を定義

代表的なRDBMS:

Oracle, MySQL, PostgreSQL, SQL Server

🧱 2. ソフトウェア開発方法論の進化
時代	方法論	特徴
1970年代	ウォーターフォール	段階的、一方向型、変更に弱い
1980年代	スパイラル、プロトタイピング	繰り返し、リスク分析を強調
1990年代	RUP、オブジェクト指向開発	UMLによる設計標準化
2000年代以降	アジャイル（Scrum、XP）	柔軟性、反復型、顧客との連携重視
2010年代〜	DevOps、CI/CD	自動化、開発と運用の統合

⚙️ 3. PMBOKとは？
正式名称: Project Management Body of Knowledge

発行元: PMI（アメリカのプロジェクトマネジメント協会）

5つのプロセス群:

立ち上げ（Initiating）

計画（Planning）

実行（Executing）

監視・コントロール（Monitoring & Controlling）

終結（Closing）

目的: プロジェクトの成功率を高めるための共通言語とフレームワークの提供

🖥️ 4. Intel 8086 とは？
リリース年: 1978年

ビット数: 16ビット

メモリアドレッシング: セグメント方式で最大1MBまでアクセス可能

意義: x86アーキテクチャの元祖であり、現在のPCの祖先

🧠 5. オブジェクト指向の台頭
起源: 1967年、Simula 67 → Smalltalk（1979）

本格化: 1980年代〜 C++, Java の登場

主な特徴: 抽象化、カプセル化、継承、多態性（ポリモーフィズム）

利点: 保守性・再利用性の向上、現実世界のモデル化

🏢 6. 丸の内と三菱グループ
丸の内: 東京駅近くの日本を代表するビジネス街

三菱:

創業者: 岩崎弥太郎

分野: 金融、商社、重工業、自動車、不動産など

丸の内の再開発・所有に深く関与

丸の内は「三菱村」とも呼ばれるほど、三菱の影響が強い

✍️ 最後に
今日は基本を振り返るとともに、それぞれのトピックがどのようにつながっているかも整理できました。
Qiitaを通して、今後も自分の学習記録を残し、同じように学ぶ方の助けになれればと思います。
統計学実践ワークブック5



## 🟦 1. 離散一様分布（Discrete Uniform Distribution）

* **定義**：$X \in \{1,2,\dots,K\}$ を**等確率**で取る
* **確率関数**：$P(X = x) = \frac{1}{K}$
* **期待値**：$E[X] = \frac{K+1}{2}$
* **分散**：$V[X] = \frac{K^2 - 1}{12}$
* **確率母関数**：$G(s) = \frac{s(1 - s^K)}{K(1 - s)}$

---

## 🟦 2. ベルヌーイ分布（Bernoulli）

* **定義**：成功1、失敗0をとる確率変数 $X \sim \mathrm{Bern}(p)$
* **確率関数**：$P(X = x) = p^x(1 - p)^{1 - x},\; x = 0,1$
* **期待値**：$E[X] = p$
* **分散**：$V[X] = pq$
* **確率母関数**：$G(s) = ps + q$

---

## 🟦 3. 二項分布（Binomial）

* **定義**：$n$ 回の独立なベルヌーイ試行で成功回数
* **記法**：$X \sim \mathrm{Bin}(n, p)$
* **確率関数**：$P(X = k) = \binom{n}{k} p^k q^{n-k}$
* **期待値・分散**：

  * $E[X] = np$
  * $V[X] = npq$
* **確率母関数**：$G(s) = (ps + q)^n$
* **再生性**：独立な Bin 分布の和も Bin 分布

---

## 🟦 4. 超幾何分布（Hypergeometric）

* **定義**：母集団 $N$ 個中 $M$ 個が成功、非復元抽出で $n$ 個取り出し、成功の個数
* **記法**：$Y \sim \mathrm{HG}(N, M, n)$
* **確率関数**：

  $$
  P(Y = y) = \frac{\binom{M}{y} \binom{N - M}{n - y}}{\binom{N}{n}}
  $$
* **期待値**：$E[Y] = n \cdot \frac{M}{N}$
* **分散**：

  $$
  V[Y] = n \cdot \frac{M}{N} \cdot \left(1 - \frac{M}{N} \right) \cdot \frac{N - n}{N - 1}
  $$
* **有限母集団補正係数 (FPC)**：$\frac{N - n}{N - 1}$

---

## 🟦 5. ポアソン分布（Poisson）

* **定義**：希な事象の発生回数、二項分布の極限
* **記法**：$Y \sim \mathrm{Po}(\lambda)$
* **確率関数**：

  $$
  P(Y = y) = \frac{\lambda^y}{y!} e^{-\lambda}
  $$
* **期待値・分散**：$E[Y] = V[Y] = \lambda$
* **確率母関数**：$G(s) = e^{\lambda(s - 1)}$
* **再生性**：独立な Po 分布の和も Po 分布

---

## 🟦 6. 幾何分布（Geometric）

* **定義**：「初めて成功するまでの失敗回数」
* **記法**：$X \sim \mathrm{Geo}(p)$
* **確率関数**：

  $$
  P(X = x) = q^x p,\quad x = 0,1,2,...
  $$
* **期待値**：$E[X] = \frac{q}{p}$
* **分散**：$V[X] = \frac{q}{p^2}$
* **性質**：**無記憶性** $P(X > s + t \mid X > s) = P(X > t)$

---

## 🟦 7. 負の二項分布（Negative Binomial）

* **定義**：「r回目の成功が出るまでの失敗回数」
* **記法**：$Y \sim \mathrm{NB}(r, p)$
* **確率関数**：

  $$
  P(Y = y) = \binom{y + r - 1}{y} p^r q^y
  $$
* **期待値**：$E[Y] = \frac{rq}{p}$
* **分散**：$V[Y] = \frac{rq}{p^2}$
* **母関数**：$G(s) = \left( \frac{p}{1 - qs} \right)^r$

---

## 🟦 8. 多項分布（Multinomial）

* **定義**：k通りの結果がある試行をn回行い、それぞれの出現回数
* **記法**：$\mathbf{Y} = (Y_1, ..., Y_K) \sim \mathrm{Mult}(n; p_1, ..., p_K)$
* **確率関数**：

  $$
  P(Y_1 = y_1, ..., Y_K = y_K) = \frac{n!}{y_1! \cdots y_K!} p_1^{y_1} \cdots p_K^{y_K}
  $$
* **期待値・分散・共分散**：

  * $E[Y_j] = np_j$
  * $V[Y_j] = np_j(1 - p_j)$
  * $\mathrm{Cov}(Y_i, Y_j) = -np_ip_j\ (i \neq j)$
* **母関数**：

  $$
  G(s_1, ..., s_K) = (p_1 s_1 + \cdots + p_K s_K)^n
  $$

---
セッション認証とステートレス認証（JWT）の違い

## はじめに
認証の代表的な方法である「セッション認証」と「ステートレス認証（JWTなど）」について違いを整理する。

---

## セッション認証とは

セッション認証は、ユーザーがログインしたときにサーバー側に「セッション情報（ログイン状態）」を保存し、そのセッションIDをクライアント側のCookieに渡して保持させる方式。

### 特徴

* サーバーがユーザーのログイン状態を保持
* クライアントはセッションIDのみをCookieに保持
* リクエストごとにCookieが自動で送信されるため、明示的な認証情報の送信は不要

### メリット

* サーバーが状態を持つため、状態を操作/管理できる。

### デメリット

* サーバーがセッション情報を持つため、複数サーバーでスケールする場合に状態の共有が手間

---

## ステートレス認証（JWT）とは

サーバー側は状態を一切保持せず、クライアントに署名付きトークンを発行し、それを以降の全リクエストにトークンを含める方式。

### 特徴

* トークンにはユーザー情報などの認証情報が埋め込まれており、サーバーはトークンを検証するだけ。

### メリット

* サーバーが状態を持たないため、拡張しやすい。

### デメリット

* トークンが盗まれたら、第三者がそのユーザーになりすますリスクがある

---

## 選定のポイント

### セッション認証を選ぶべきケース

* Webブラウザのみを対象とする
* 複数端末を想定しない

### JWT認証を選ぶべきケース

* モバイルアプリやSPA、外部APIなど多端末対応が必要
* サーバーのスケーラビリティを重視したい

---

## まとめ
「どちらが優れているか」ではなく、「自分たちのプロジェクトにどちらが合っているか」を判断することが大切だとわかった。
react.jsでファイルダウンロードリンクのメモ

react.jsでファイルダウンロードする処理をメモする。

## 要件

- リンクを叩くとファイルダウンロードが走る
- クライアント側の日付をダウンロードファイル名に入れる

## 実装方法

- next/linkで別タグを開くリンクを用意
  - リンクのdownload属性にファイルを設定
- webサーバ設定でダウンロードファイルのレスポンスヘッダのContent-Dispositionにファイル名を設定しない
  - ここのファイル名が優先になるため、リンクのdownload属性のファイル名が無視されてしまう


## ソースコード

```typescript
import Link from 'next/link';
import { useState } from 'react';
import { format } from 'date-fns';

const getName = () => {
  return `${format(new Date(), 'yyyyMMddHHmm')}.csv`;
};

export const Test = () => {
  const [fileName, setFileName] = useState(getName());

  return (
      <div >
        <Link
          href="/files/test.txt"
          download={fileName}
          target="_blank"
          rel="noopener noreferrer"
          onClick={() => setFileName(getName())}
        >
          ダウンロード
        </Link>
      </div>
  );
};

```

## 参考

- [MDN](https://developer.mozilla.org/ja/docs/Web/HTML/Reference/Elements/a#download)
Ethernet規格で使われるケーブルについて

ネットワーク接続用の規格で代表的なものの一つに数えられるEthernet。
Wi-FiやBluetoothなどの無線で使われる通信技術とは違い、有線(ケーブル)による通信規格である。

ではEthernet規格ではどのようなケーブルが使われているのか。今回の投稿ではそれに触れていく。

## Ethernet規格のケーブル

- LANケーブル(ツイストペアケーブル)：Ethernet規格の中で最も一般的に使われているケーブル。
- 光ファイバーケーブル：非常に高速で大容量のデータ通信が可能で長距離にも適している。
- DACケーブル：銅線ケーブルのこと。両端にコネクタを使って接続をする。短距離接続に適している。
- 同軸ケーブル：現在ではあまり使われなくなった。LANケーブルや光ファイバーよりも性能では劣るとされている。

## 各ケーブルの特色

Ethernetネットワークで最も使われるのはLANケーブルである。値段が安く、耐久性も強いため導入がしやすい特徴を持っている。
最大速度は40Gbpsだが、その速度に対応するスイッチや関連機器を揃えるのにコストがかかるため、そこまで大規模な環境でなければ10Gbpsで使われている。10Gbpsの速度で問題なければLANケーブルを使う、という認識はどのユーザさんにとっても共通のものである。

10Gbps以上の速度で使いたい場合、選択肢の中に光ファイバーケーブルやDACケーブルが挙がってくる。
DACケーブルは短距離接続に適した選択肢だが、光ファイバーケーブルよりもコストを抑えられるというメリットもある。その反面、接続する両デバイスの互換性や相性を選ぶ性質があるため通信が不安定になることがある。

両端のコネクタを用意する必要があるため価格が高く、ケーブル自体も脆く故障しやすい光ファイバーケーブルだが、接続する両デバイスの互換性などは特に気にせずに安定した通信が期待できる。
光ファイバーケーブルに使われるコネクタは低速のものから、1G(SFP)・10G(SFP＋)・25G(SFP28)・40G(QSFP＋)・100G(QSFP28)が選択できる。

## 光ファイバーケーブルにも種類がある

- シングルモードファイバー(SMF)：コアの中心に向かって放射された1つの光線を伝送する。
- マルチモードファイバー(MMF)：ケーブルのコアに向かって異なる角度で放射された複数の光線を同時に伝送する。

SMFの特徴としては長距離伝送に適している。信号の減衰が少ないため、10km前後の距離に対応できる。大容量データを高速で伝送するためにはこちらを使う。
MMFはケーブル内の複数光線が分散して衝突する傾向にあるため短距離伝送に適している。SMFよりも安価に導入できる側面もある。

## ひとりごと

大相撲夏場所は大の里の優勝。千秋楽の2日前、連勝を13まで伸ばしたところで優勝を決めた。

これで横綱昇進はほぼ確定だろう。豊昇龍が横綱不在の角界の都合で無理やりのように横綱にさせられたのとは異なり、なるべくしてなった横綱。他にも楽しみな若手力士がたくさんいるので7月の名古屋場所もワクワクが続いている。
SwiftUIのVStack / HStack / ZStack について簡単にまとめてみました　（初心者向け🔰）

SwiftUIでUIを作るときに絶対に使うのが VStack / HStack / ZStack
これらは「どう並べるか（レイアウト）」を決める大事なパーツです。

この記事では、初心者の方に向けて、3つのStackの使い方をシンプルに紹介します！

----
1 - VStack（縦に並べる）

VはVertical（垂直）の略。縦にUIを並べたいときに使います。

ポイント
- 上から下にUIが並ぶ
- spacingで間隔も調整可能

![Screenshot 2025-05-26 at 17.25.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977742/cfc80112-f011-4e47-8b21-9a16fdbad7b2.png)

----

2 - HStack（横に並べる）
HはHorizontal（水平）の略。横にUIを並べたいときに使います。
左から右にUIが並ぶ


ポイント

- spacing
- alignment も使える

![Screenshot 2025-05-26 at 17.31.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977742/d5e5347d-a764-4cff-9e8f-3799cb1167e4.png)


----
3 -  ZStack（重ねて表示）
ZはZ軸（奥行き）のこと。UIを重ねて表示するときに使います。

![Screenshot 2025-05-26 at 17.32.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977742/b03f7ff5-3126-489d-b079-38e915c57cb5.png)


----
組み合わせて使ってみた

![Screenshot 2025-05-26 at 17.34.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977742/7f4d876f-5b32-4139-9438-c10660cb5c7b.png)

----

まとめ  

VStack  

- 縦に並べる	
- リストや縦レイアウトの画面

HStack	

- 横に並べる	
- アイコンと文字を横並びにするとき

ZStack	
- 重ねて表示	
- 背景画像＋テキストなどの重ね表示

---- 
最後に
VStack、HStack、ZStackを覚えるだけで、SwiftUIのレイアウトはぐっと自由になります！
ぜひ自分で色々試してみてください！
Flask appをOpentelemetryでGCP Cloud Traceに連携する

## Prerequisite

`roles/cloudtrace.agent`権限を、アプリケーションが使っているSAに付与しておく必要があります。

tfの場合:

```hcl
resource "google_project_iam_member" "helloworld_is_cloud_trace_agent" {
  project = var.project
  role    = "roles/cloudtrace.agent"
  member  = google_service_account.helloworld.member
}
```

## コード

```py
from opentelemetry import trace
from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
from opentelemetry.instrumentation.flask import FlaskInstrumentor
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor

resource = Resource.create(
    {
        "service.name": "<app name>",
        "version": os.getenv("VERSION", "unknown"),
        "env": os.getenv("ENV", "dev"),
    }
)
tracer_provider = TracerProvider(resource=resource)
trace.set_tracer_provider(tracer_provider)
cloud_trace_exporter = CloudTraceSpanExporter(resource_regex="env|version|service.name")
span_processor = BatchSpanProcessor(cloud_trace_exporter)
tracer_provider.add_span_processor(span_processor)
tracer = trace.get_tracer(__name__)


app = Flask(__name__)

FlaskInstrumentor().instrument_app(app)

@app.route("/")
def hello():
    return "Hello!"

if __name__ == "__main__":
    app.run(debug=True)
```

## ポイント

- Resource名を入れることでspan attributeに値を入れてfilterを使って絞りやすくなる
- FlaskInstrumentorなど自動計装を使うと便利

## Ref

- https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/flask/flask.html
- https://cloud.google.com/trace/docs/setup/python-ot
【Go】pq: password authentication failed for user XXX にハマった話

## はじめに

Private IPを持ったCloud SQLに、Cloud Run Jobsから、Direct VPC Egressで接続しようとしていました。
しかし、接続がうまくいきません。

ユーザー名やパスワードはあっているはずなのに、以下のエラーが発生しました。

```sh
pq: password authentication failed for user XXX
```

なぜでしょうか？

## 修正前のコード

以下を参考に、TCPで接続する方法を選択しました。

https://cloud.google.com/sql/docs/postgres/connect-run?hl=ja#private-ip_1

```go
package cloudsql

import (
	"database/sql"
	"fmt"
	"os"

	_ "github.com/lib/pq"
)

func connectTCPSocket() (*sql.DB, error) {
	dbURI := fmt.Sprintf("host=%s user=%s password=%s port=%s database=%s",
		os.Getenv("INSTANCE_HOST"), os.Getenv("DB_USER"), os.Getenv("DB_PASS"), os.Getenv("DB_PORT"), os.Getenv("DB_NAME"))

	dbPool, err := sql.Open("postgres", dbURI)
	if err != nil {
		return nil, fmt.Errorf("sql.Open: %w", err)
	}

	// ...

	if err := dbPool.Ping(); err != nil {
		return nil, err
	}

	return dbPool, nil
}
```

## 原因

DBのパスワードに、バックスラッシュ（`\`）を含んでいたことが原因でした。
公式ドキュメントにも、キーバリュー形式の接続文字列では、値中のシングルクォート（`'`）とバックスラッシュ（`\`）を バックスラッシュでエスケープする必要があるとあります

> To write an empty value, or a value containing spaces, surround it with single quotes, for example keyword = 'a value'. Single quotes and backslashes within a value must be escaped with a backslash, i.e., \' and \\. [^1]

[^1]: https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING

また、URI 形式の接続文字列では、スキームやパス、パラメータ部に “特別な意味を持つ記号” を含む場合は パーセントエンコーディング が必要です。

> The connection URI needs to be encoded with percent-encoding if it includes symbols with special meaning in any of its parts.  [^2]

[^2]: https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING-URIS

## 解決

`net/url`を使って、URI 形式の接続文字列を使用することにしました。
`url.UserPassword`を使用して、ユーザー情報をパーセントエンコードします。

```go
package cloudsql

import (
	"database/sql"
	"fmt"
	"net/url"
	"os"

	_ "github.com/lib/pq"
)

func connectTCPSocket() (*sql.DB, error) {
	u := &url.URL{
		Scheme: "postgres",
		User:   url.UserPassword(os.Getenv("DB_USER"), os.Getenv("DB_PASS")),
		Host:   fmt.Sprintf("%s:%s", os.Getenv("INSTANCE_HOST"), os.Getenv("DB_PORT")),
		Path:   os.Getenv("DB_NAME"),
	}

	dbPool, err := sql.Open("postgres", u.String())
	if err != nil {
		return nil, fmt.Errorf("sql.Open: %w", err)
	}

	if err := dbPool.Ping(); err != nil {
		return nil, err
	}

	// ...

	return dbPool, nil
}
```
[スニペット] OpenPyXlで動的に列の幅を設定する

```python
from openpyxl import Workbook
from openpyxl.utils import get_column_letter

def set_column_widths_based_on_longest_part(sheet, target_row):
    """
    指定した行（1-based index）のセルをスキャンし、
    改行で分割した中で最も長い文字列を基準に列幅を設定する。
    """
    col_widths = {}

    # target_row 行だけを見る
    for cell in sheet[target_row]:
        if cell.value and isinstance(cell.value, str):
            parts = cell.value.split('\n')
            # 改行で分割したすべての要素の最大長を取得
            max_len = max(len(p) for p in parts)

            col_idx = cell.column  # 1-based index
            # 同じ列でより長い要素があれば更新
            if col_idx not in col_widths or max_len > col_widths[col_idx]:
                col_widths[col_idx] = max_len

    # 列幅を設定（余白として +2）
    for col_idx, width in col_widths.items():
        letter = get_column_letter(col_idx)
        sheet.column_dimensions[letter].width = width + 2


# --- 使用例 ---
wb = Workbook()
ws = wb.active

# 13行目に改行入りデータをセット
ws['A13'] = "氏名\nやまだたろう"
ws['B13'] = "部署\n開発部\n第二開発課"
ws['C13'] = "役職\n主任"

# 13行目を基準に列幅を自動調整
set_column_widths_based_on_longest_part(ws, target_row=13)

wb.save("output.xlsx")
```
情報漏洩を防ぐための基本的なセキュリティ対策

# 情報漏洩を防ぐための基本的なセキュリティ対策
## はじめに
近ごろ情報漏洩が多いので
情報漏洩を防ぐためのセキュリティ対策をまとめました。
## 技術的対策
### 1. アクセス制御の徹底
ユーザーごとにアクセス権限を設定し、権限を必要最小限にとどめます。(最小権限の原則)
不正アクセスを防ぐため、アクセスログの出力とそのログの確認も重要です。
### 2. パスワード管理の強化
強力なパスワード（英数・記号含む）を利用する
多要素認証（MFA）の導入することで万が一パスワードが漏洩してしまってもリスクを減らすことができる。
### 3. ネットワークセキュリティ
ファイアウォールやIDS/IPSを導入して不正アクセスをブロックします。
VPNを利用することで、外部からの安全な接続を確保できます。
### 4. 暗号化の活用
機密データは送信・保存時ともに暗号化して保護する。
個人情報やパスワードは、ハッシュ化などで管理する。
### 5. マルウェア対策
ウイルス対策ソフト・エンドポイントセキュリティの導入をする。
定期的なウイルススキャンとパターンファイルの更新をする。
### 6. ソフトウェア更新
OSやアプリケーションの脆弱性対策パッチを適用する
## 人的対策
### 1. セキュリティ教育の実施
全従業員に対し、情報の扱い方やリスクについてを周知を行う。
フィッシングや誤送信などの事例を交えて定期的に研修を行う。
### 2. 社内ルールの整備
機密情報の持ち出しやコピーを行う際のルールを決め、周知する。
### 3. 内部不正対策
業務内容ごとに権限を分けてリスクを軽減する。
退職者のアカウントやアクセス権の速やかな無効化を行う。
## 物理的対策
### 1. 入退室管理
重要エリアへの立ち入りはICカードや生体認証で管理する。
不審者の侵入を防ぐため、監視カメラや記録も有効。
### 2. 機器の管理
PCやUSBメモリなどは社外持ち出しを禁止もしくは制限して、対策を行う。
## 緊急対応体制
### 1. インシデント対応手順の策定
漏洩などのトラブルが起きた際、迅速に対応できる手順を決めておく。
トラブルが起きた際には誰に報告を入れるかも決めておく。
### 2. 定期的なルールの見直し
最新の情報をリサーチして、マニュアルや体制を定期的に最新化する。
## さいごに
これからもどんどん新たなセキュリティリスクが出てくると思うので
日々アンテナを立てて情報を更新していこうと思います
KubernetesのログをFilebeatで収集しElasticsearchへ送ろう

## はじめに
Kubernetesの環境では、Podのログを効率よく収集し分析することが重要です。本記事では、Filebeatを活用してログを収集し、Elasticsearchに送る手順を解説します。
前提条件としてElasticsearchとLogstashとKibanaは構築を終えています。
- こちらが構成図です
![構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3889854/530fc40a-4e1f-4803-8f32-5de337326f5a.png)



## 環境
- Kubernetesクラスタ（ディストリビューション：K3s、バージョン：v1.29.3）
- Filebeat（バージョン：8.5.1）
- Elasticsearch（バージョン：8.5.1）
- Kibana (バージョン：7.17.3)

## Filebeatの設定
Kubernetes環境でFilebeatをデプロイし、ログを収集できるようにします。

### Filebeatのインストール
Elastic社が提供するHelmチャートを利用すると、簡単にFilebeatを導入できます。

1.helmコマンドをインストールします
```bash
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
```

2.ネームスペースを作ります
```bash
kubectl create ns elastic
```

3.Filebeatの設定ファイルを作成します
Filebeatの設定を変更し、Kubernetesのコンテナログを収集するようにします。
```yaml:fb-values.yaml
extraEnvs: []
daemonset:
  filebeatConfig:
    filebeat.yml: |
      logging.level: error
      filebeat.autodiscover:
        providers:
          - type: kubernetes
            hints.enabled: true
            hints.default_config:
              type: container
              paths:
                - /var/log/containers/*.log
              fields:
                index: logstash
      output.logstash:
        hosts: ["ls-logstash:5044"] #Logstashのアドレスを表しています
      setup.template:
        name: "k8s"
        pattern: "k8s-*"
        enabled: false
      setup.ilm.enabled: false
  secretMounts: []
  deployment:
    extraEnvs: []
    annotations: {}

```

4.YAMLファイルの設定でFilebeatをインストールします
```bash
helm install fb elastic/filebeat -n elastic -f fb-values.yaml
```

5.Filebeatがインストールできたか確認します
- 下記のコマンドでFilebeatのPodが動作しているか、ステータスを確認できます
```bash
kubectl get pods
```
- 下記のコマンドでHelmを使ってインストールしたアプリケーションの状態を確認できます
```bash
helm list
```

## Kibanaの動作確認をする
実際にKibanaで可視化した画面がこちらです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3889854/e9fece0e-6a11-4f14-8cc0-123c4d0e16ef.png)


## まとめ
本記事では、Kubernetes環境でFilebeatを用いてログを収集し、Elasticsearchへ送信する方法を紹介しました。これにより、クラスタのログを効率よく管理し、分析できるようになります。
Git のコメントをAIに書かせるためのプロンプト例

# 🚀 GitコミットメッセージをAIで生成する際のプロンプト

開発中に「コミットメッセージ、なんて書けばいいんだっけ…？」となること、ありますよね。  
特に**複数ファイルをまとめてコミットする派**にとって、適切なコメントを毎回手で書くのは地味に大変です。

そこで今回は、**AI（ChatGPTなど）に渡すと完璧な日本語コミットメッセージを生成してくれるプロンプト**を紹介します。
ってか、説明する Markdown まで ChatGPT に書かせたら異様にテンション高いんだが？
それにコメント作ってるのは claude 3.5 だし…(2025/05/26現在)

---

## ✅ このプロンプトでできること

- 複数ファイルにまたがる変更を1つのまとまったコミットメッセージにできる  
- Conventional Commits形式に対応（`feat`, `fix`, `refactor`など）
- **50文字以内の主文＋目的・変更点の補足**が含まれた日本語メッセージを出力
- `git diff` や `変更点の要約` さえ渡せばOK！

---

## 🧠 プロンプト（日本語）

```text
以下の複数ファイルの変更内容を元に、Conventional Commits形式に従った日本語のGitコミットメッセージを作成してください。

【指示】
- 先頭に適切なType（feat, fix, refactor, style, docs, test, ci, build, perf）を接頭辞として付けてください（例：feat: ○○を追加）
- 50文字以内で要点をまとめた主文（命令形）を1行目に書いてください
- 2行目以降に、目的や背景、どのようなファイルが変更されたかの補足説明を日本語で2〜3行以内にまとめてください
- コミット対象のファイルやdiffが複数ある場合は、全体を要約して1つのコミットメッセージにしてください

【変更内容】
[ここに git diff、変更ファイル一覧、または要約を貼ってください]
```

---

## 🌍 英語版プロンプト（英語で指示を出すとき用）

```text
Based on the following changes across multiple files, please generate a Git commit message in Japanese, following the Conventional Commits format.

【Instructions】
- Begin with a suitable Type prefix (feat, fix, refactor, style, docs, test, ci, build, perf), like: feat: ○○を追加
- On the first line, include a short imperative summary (within 50 characters)
- In the second and third lines, provide a brief explanation in Japanese: the purpose, background, and key files affected
- If multiple files are involved, summarize the overall intent into one cohesive message

【Changes】
[Insert git diff, file list, or summary here]
```

---

## 💡 使用例

```text
【変更内容】
- UserController.php: パスワード変更処理を追加  
- ChangePasswordRequest.php: バリデーションルールを追加  
- profile.blade.php: 成功メッセージの表示を追加  

目的：ユーザーがパスワードを変更できるようにし、UXとセキュリティを向上させたい。
```

⬇️ AIによる出力例

```
feat: パスワード変更機能を追加  
ユーザーが自身のパスワードを変更できるようにし、セキュリティを強化しました。  
バリデーションやメッセージ表示も対応済み。
```

---

## 🖥️ JetBrains IDEでの使い方（例：PhpStorm）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730521/d9b96fab-40bf-47ff-bf98-6f6719f96653.png)

1. `Git`タブで変更を確認  
2. `AI Assistant`サイドバーに上記プロンプトを貼り付け  

---

📌 **お気に入りの使い方があったらぜひコメントで教えてください！**  
また、この記事が役に立ったら「いいね」＆「ストック」もお願いします🙏
統計学実践ワークブック4


## 【11. 変数変換と確率分布】まとめ

---

### ◆ 11.1 連続確率変数の**1変数変換**

#### 変数変換 $Y = g(X)$, $g$ が1対1対応のとき：

* **変換後の確率密度関数**：

  $$
  f_Y(y) = \frac{f_X(g^{-1}(y))}{\left| \frac{d}{dy} g^{-1}(y) \right|} = \frac{f_X(x)}{ |g'(x)| } \quad (x = g^{-1}(y))
  $$

#### 例：自由度1のカイ二乗分布

* $X \sim N(0, 1)$, $Y = X^2$
* $Y$の密度関数は：

  $$
  f_Y(y) = \frac{1}{\sqrt{2\pi y}} \exp\left(-\frac{y}{2}\right),\quad y > 0
  $$

---

### ◆ 11.2 2変数変換（ヤコビアンを用いる）

#### $(Z, W) = (u(X,Y), v(X,Y))$ への変換

* **ヤコビアン行列**：

  $$
  J(x, y) = \begin{vmatrix}
  \frac{\partial u}{\partial x} & \frac{\partial u}{\partial y} \\
  \frac{\partial v}{\partial x} & \frac{\partial v}{\partial y}
  \end{vmatrix}
  $$

* **変換後の密度関数**：

  $$
  f_{Z,W}(z,w) = \frac{f_{X,Y}(x,y)}{|J(x,y)|}, \quad \text{with } (x, y) = (s(z, w), t(z, w))
  $$

---

### ◆ 11.3 線形結合の分布

#### 【正規分布】

$X \sim N(\mu_1, \sigma_1^2),\quad Y \sim N(\mu_2, \sigma_2^2),\quad X \perp Y$
⇒ $Z = aX + bY + c \sim N(a\mu_1 + b\mu_2 + c,\ a^2 \sigma_1^2 + b^2 \sigma_2^2)$

#### 【二項分布】

$X \sim Bin(n_1, p),\ Y \sim Bin(n_2, p),\ X \perp Y$
⇒ $X+Y \sim Bin(n_1+n_2, p)$

#### 【ポアソン分布】

$X \sim Poi(\lambda_1),\ Y \sim Poi(\lambda_2),\ X \perp Y$
⇒ $X+Y \sim Poi(\lambda_1+\lambda_2)$

---

### ◆ 11.4 データの変換（実データの前処理）

#### ① **対数変換 (log transformation)**

* 多くの**積の誤差** → **正規分布**へ変換可能
* 使用例：人口・株価・所得など非負データ
* $x \rightarrow \log(x)$

#### ② **ベキ乗変換 (power transformation)**

* $x \rightarrow x^\lambda$、変動の強調 or 抑制

#### ③ **Box-Cox変換**

$$
x \rightarrow
\begin{cases}
\frac{x^\lambda - 1}{\lambda}, & \lambda \neq 0 \\
\log x, & \lambda = 0
\end{cases}
$$

* $x > 0$ のみ対応
* パラメータ $\lambda$ により最適な正規性を探索

#### ④ **ロジット変換 (logit transformation)**

* $p \in (0, 1) \rightarrow \mathbb{R}$
* $$
  $$

\text{logit}(p) = \log\left(\frac{p}{1 - p}\right)
]

* **ロジスティック回帰**に応用：
  $p = \frac{1}{1 + e^{-(a + bx)}}$

#### ⑤ **プロビット変換 (probit transformation)**

* 累積分布関数の逆関数（標準正規分布）：

$$
\text{probit}(p) = \Phi^{-1}(p)
$$

---

このセクションは、統計的モデリングや回帰分析、機械学習における**変数処理**の重要な基礎概念です。必要があれば、各変換の**Pythonコード例や可視化**も提供できます。
IT業界の作業単価や案件傾向はどう変わった？ コロナ禍前～2025年現在までを営業・人事目線で振り返る

## はじめに
2020年初頭から始まったコロナ禍は、IT業界にも大きな変化をもたらしました。
「リモートワークの浸透」「DXの加速」「エンジニア需要の変化」など、技術トレンドや働き方だけでなく、案件内容や単価相場にも大きな影響がありました。

本記事では、2020年以前／2020〜2022年（コロナ禍）／2023年以降（現在）の3つの時期に分けて、IT業界の「単価の推移」と「案件傾向の変化」についてまとめていきます。

## 2020年以前（コロナ禍前）：客先常駐が主流、リモート案件はごく一部
案件傾向：大企業SIerの受託案件・ウォーターフォール型が多く、BtoB中心
単価水準(中央値)：月55〜60万円前後
特徴：常駐案件が圧倒的多数

補足：「とにかく現場に入ってもらえればOK」という時代で、スキルマッチより「空いてる人を埋める」案件が目立ちました。

## 2020〜2022年：コロナ禍の混乱とリモート転換期
案件傾向：リモート案件が急増
単価水準：作業指示が不要な層(中堅〜上級者)の単価上昇（月60〜80万）
特徴：ZoomやSlackなどコミュニケーションツールの活用がデフォルトに

補足：リモート案件が急増し作業指示が不要で一人称で動ける層の需要が増えたことで、
　　　業務責任が増え（募集ハードルが上がり）、単価が上昇しました。

## 2023〜2025年（現在）：リモートワークの定着＆スキルが評価される時代
案件傾向：出社、リモートなど働き方を選べる
単価水準：2020〜2022年から大きく変化なし
特徴：スキルに応じた単価差が明確化
　　　スキルセット：TypeScript／React／Python／クラウド技術などが高単価領域
　　　「技術×マネジメント（PM／PdM）」でさらに上積み可能

補足：リモートワーク前提の時代を経て、対面コミュニケーションを好む人が増え、
　　　多様な働き方を選択できる時代になりました。

## これから求められるスキルとキャリア戦略
安定より変化に強いスキル：特定の言語よりも、「自走力」「環境構築力」「設計力」
ポジションも重要：単なる開発者より「要件を決められる人」の市場価値が高い
学び直し（リスキリング）の重要性：クラウド技術・Webアプリ技術などへの継続学習

## まとめ
2020年以前：常駐がメインで、スキルマッチより稼働優先の傾向が強い
2020年～2022年：リモートが急増し、一人称で動ける人が重宝される
2023年〜2025年現在：多様な働き方が選択可能で、スキルに応じた単価差が明確に

IT業界は、これからも「変化が速い市場」です。
エンジニアとして市場価値を高めていくためには、「環境に依存せずに成果を出せる力」を意識して身につけていく必要があります。

気に入って頂けましたら、「いいね」を押してください。
今後とも、よろしくお願いいたします。