OmniAICreator/Qiita-1.07M huggingface dataset:
DartでListの文字を連結してStringにする

# Listの文字を結合して文字にしたい
DartでTagの機能を作っていてそのときに、そのまま送信すると、`List<String>`になる。AIにプロンプトを送る機能を作るのを想定してます。

```dart
[dart, flutter, android, ios, java, kotlin]
```

この場合はどうするのか？
join functionを使うと良い。
https://api.flutter.dev/flutter/package-path_path/join.html

**使用例）**
```dart
void main(List<String> args) {
  List<String> tags = ['dart', 'flutter', 'android', 'ios'];

  tags.add('java');
  tags.add('kotlin');
  print(tags);
  print(tags.runtimeType);
  print(tags.join(', '));
  print(tags.join(', ').runtimeType);
}
```

実行結果）
```shell
[dart, flutter, android, ios, java, kotlin]
List<String>
dart, flutter, android, ios, java, kotlin
String

Exited.
```

実行した結果だと`.join`で結合する前は、`List<String>`ですが`String`に変換されております。これでtagのテキストを文字として送ることができるようになるでしょう。

## 最後に
Listの文字を結合してただの文字にしたいときは、`.join`を使いましょう。
IOTのお仕事をしたときは、APIから渡されてくる文字情報の結合に使っていましたね。
Keycloak のインストール

Docker にインストールします。

## Docker が動いていることを確認

```text
$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; preset: >
     Active: active (running) since Sat 2025-03-15 16:41:40 JST; 44min ago
```

Docker のバージョン

```text
$ docker --version
Docker version 28.0.1, build 068a01ea94
```

## Keycloak のインストール

```bash
docker run -p 8080:8080 -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:26.1.4 start-dev
```

インストールの確認

```text
$ docker ps
CONTAINER ID   IMAGE                              COMMAND                   CREATED          STATUS          PORTS                                                             NAMES
9d367621dff7   quay.io/keycloak/keycloak:26.1.4   "/opt/keycloak/bin/k…"   12 minutes ago   Up 12 minutes   8443/tcp, 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp, 9000/tcp   kind_newton
```

## Sign in

http://localhost:8080 にアクセス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/02e83152-5535-4edc-ac0f-e6588531f26a.png)


Username: admin
Password: admin

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/0af1e153-09ea-4a8b-8c27-f283182622be.png)

## コンテナーの操作

停止

```bash
docker stop kind_newton
```

開始

```bash
docker start kind_newton
```
switch文をinterfaceに置き換えるという考え方

# はじめに
最近読んだ、「[良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方](https://www.amazon.co.jp/%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89-%E6%82%AA%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A7%E5%AD%A6%E3%81%B6%E8%A8%AD%E8%A8%88%E5%85%A5%E9%96%80-%E2%80%95%E4%BF%9D%E5%AE%88%E3%81%97%E3%82%84%E3%81%99%E3%81%84-%E6%88%90%E9%95%B7%E3%81%97%E7%B6%9A%E3%81%91%E3%82%8B%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9-%E4%BB%99%E5%A1%B2/dp/4297127830)」という本に以下のような内容が書かれていました。
（この本はかなり良かったのでおすすめです）

「雑にswitch文を書くと、色々なところに同じようなswitch文が書かれることになったり、case文の追加漏れだったりが発生してしまうので、一か所にまとめたり、**interface**を利用した形に置き換えた方が良い」（ざっくりとした要約）

こういった、interfaceを使った書き方のことを「ストラテジパターン」と言い、今まで、switch文の代わりにinterfaceを使う、という考え方・視点でinterfaceを使おうとしたことがなかったので、少し調べて、実際にコードを書いて試してみました。


# 変更前
・コード
　Animalクラスのsound()メソッドにswitch文を使用し、typeの値で処理を変えています。
```Animal.java
public class Animal {
	final String type;
	
	public Animal(String type) {
		this.type = type;
	}
	
	public void sound() {
		switch (this.type) {
			case "dog": 
				System.out.println("ワン");
				break;
			case "cat": 
				System.out.println("ニャー");
				break;
			default:
				System.out.println("エラーです");
		}
	}
}
```

```Main.java
import animal.Animal;

public class Main {
    public static void main(String[] args) {
		Animal dog = new Animal("dog");
		dog.sound();

		Animal cat = new Animal("cat");
		cat.sound();
    }
}
```


# 変更後
・イメージ図
```mermaid
classDiagram
    class Animal{
    }
    class AnimalStrategy{
    }
    <<Interface>> AnimalStrategy
    class Dog{
    }
    class Cat{
    }
    Animal --> AnimalStrategy
    AnimalStrategy <|.. Dog
    AnimalStrategy <|.. Cat
```
AnimalStrategyというinterfaceを作成して、それを継承したDogとCatクラスを作成します。
<br>


・コード
```AnimalStrategy.java
public interface AnimalStrategy {
	public void sound();
}
```
```Dog.java
public class Dog implements AnimalStrategy {
	@Override
	public void sound() {
		System.out.println("ワン");
	}
}
```

```Cat.java
public class Cat implements AnimalStrategy {
	@Override
	public void sound() {
		System.out.println("ニャー");
	}
}
```

```Animal.java
public class Animal {
	final AnimalStrategy animalStrategy;

	public Animal(AnimalStrategy animalStrategy) {
		this.animalStrategy = animalStrategy;
	}

	public void sound() {
		this.animalStrategy.sound();
	}
}
```

```Main.java
import animal.Animal;
import animal.Cat;
import animal.Dog;

public class Main {
	public static void main(String[] args) 		
		Animal dogAnimal = new Animal(new Dog());
		dogAnimal.sound();

		Animal catAnimal = new Animal(new Cat());
		catAnimal.sound();
	}
}
```
作成したinterface（AnimalStrategy）を Animalクラスにプロパティとして持たせ、コンストラクタで受け取る形にします。
Mainクラスで呼び出す際には、最初のインスタンス化時に実際に使用したいクラスを渡します。
確かにこれでswitch文を使わずに、同じ処理のコードが書けました。


# おわりに
今回は、本の書き方と異なる形で書いてみました。
Animalクラスみたいなクラスでこれをするのは、少し分かりにくかった気もするので、気になった方は「ストラテジパターン」で調べて、より分かりやすい記事を探してみてください。

今度からswitch文を使う際には、interfaceを使った書き方で置き換えることが可能か、一考してみようと思いました。
【Microsoft Defender for Endpoint】ネットワーク保護とQUICプロトコルの関係

## 結論
Microsoft Defender for Endpoint (MDE) のネットワーク保護機能は QUIC プロトコルに対応していないが、**ブラウザーの QUIC に関する設定を変更することで、Chrome のような、QUIC プロトコルを使用するブラウザーにおいてもMDE のネットワーク保護機能を適用できるようになる**。

###  Microsoft 公開情報の抜粋
> トラブルシューティングを開始する前に、使用されているブラウザーで QUIC プロトコルを `disabled` に設定してください。QUIC プロトコルは、ネットワーク保護機能ではサポートされていません。

https://learn.microsoft.com/ja-jp/defender-endpoint/network-protection#network-protection-troubleshooting

---

## 事象と対処方法

### 事象
MDE のインジケーターに `google.com` をブロック対象として登録。
しかし、以下のような動作の違いが発生した。

- **Edge**: `google.com` へのアクセスがブロックされる（期待通りの動作）。
- **Chrome**: `google.com` へのアクセスが許可されてしまう（期待と異なる動作）。

#### 例: Defender ポータル：MDE の指標 (インジケーター) の設定画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762983/64b12963-4d18-4950-9e4e-bccde13e766b.png)


#### 例: Edge（画面 左） と Chrome（画面 右） の挙動比較
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762983/83d26f72-bca0-4286-9370-20dc44e90dfa.png)

###  原因
Chrome ブラウザで **QUIC プロトコル** が使用されていたことが原因。MDE のネットワーク保護機能ではサポートされておらず、MDE のインジケーターによる評価対象にならない。

### 対処方法
Chrome の設定から、QUIC プロトコルの使用を `disabled` に変更することで、通信方式が TCP に切り替わり、MDE のネットワーク保護機能の対象になる。

#### QUIC を無効化する手順

1. Chrome のアドレスバーに chrome://flags/#enable-quic を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762983/963cad2f-8917-453a-9334-c6234eb24240.png)

2. Experimental QUIC protocol を Disabled に変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762983/7952307e-6b31-48aa-a381-1ef710331f60.png)

3. Chrome を再起動
---

## まとめ
MDE のネットワーク保護機能を適切に動作させるためには、ブラウザーで QUIC プロトコルを無効化することが重要です。
Chrome などのブラウザーを使用している場合は、QUIC が有効になっていないか確認し、必要に応じた設定を行うことで、組織のエンドポイントからのアクセスを期待通りの制御にしましょう。

---

### ✍️ 参考情報
- [Microsoft Defender for Endpoint - ネットワーク保護](https://learn.microsoft.com/ja-jp/defender-endpoint/network-protection)
- [RFC 9000 QUIC: A UDP-Based Multiplexed and Secure Transport](https://www.rfc-editor.org/rfc/rfc9000.html)
🚀 MacにをAnsibleをインストール

# 🤔 Ansibleってなに？

Ansible は、サーバーやネットワーク機器の設定管理、自動化を行うための 構成管理ツール（Configuration Management Tool） です。

主に インフラの自動化 に使われ、手動でのサーバー設定やデプロイ作業を効率化できます。


# 🍺 Homebrewをインストール

ターミナルを開き以下のコマンドを実行します

```bash
brew --version
```

インストールされていない場合はこちらを参照しインストールします。

https://qiita.com/nobumory/items/dad4a7fe0c9cc408f531

# 🛠️ インストール

HomebrewでAnsibleをインストールします。

```bash
brew install ansible
```

以下のコマンドでAnsibleのバージョンを確認し、インストールされていることを確認します。

```bash
ansible --version
```

以下のようにバージョンが出力されたら成功です🎉

```bash
ansible [core 2.18.3]
  config file = None
  configured module search path = ['/Users/user_name/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /opt/homebrew/Cellar/ansible/11.3.0_1/libexec/lib/python3.13/site-packages/ansible
  ansible collection location = /Users/mory/.ansible/collections:/usr/share/ansible/collections
  executable location = /opt/homebrew/bin/ansible
  python version = 3.13.2 (main, Feb  4 2025, 14:51:09) [Clang 16.0.0 (clang-1600.0.26.6)] (/opt/homebrew/Cellar/ansible/11.3.0_1/libexec/bin/python)
  jinja version = 3.1.6
  libyaml = True
```
Visual Studio Code でPythonファイルをデバッグしてみた

# 背景
printでデバッグしていたが、コード量が多い場合は非効率であり、VCコードで手軽に試せそうだったので試してみた

# 事前準備
## VSコードに拡張機能をインストール
1. 画面左のバーの中からExtentionsというボタンをクリック
1. Pythonと検索
1. 画像にあるPythonという拡張機能をインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156536/9de33fb6-9adb-4613-a335-20884548364a.png)

# デバック実行
1. デバックしたいファイルを開く
1. ファイル実行を一時停止したいポイント（解析を開始したいポイント）にブレークポイントを設定
- 行数の左側をクリックで赤い丸（ブレークポイントを設定）
- この行の実行前（重要）で止まります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156536/1f9af173-b753-486c-8e9f-2acbeac73f51.png)
1. 画面左のバーの中から"実行とDebug"というボタンをクリック(虫のアイコン)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156536/f0bdbd5c-2d1e-4b64-a381-58ea455126d3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156536/9c5222fc-fa20-43ed-9c31-7107fc64aa2b.png)

1. Python Fileを選択するとすぐにデバッグが始まる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156536/ff062a0f-58d2-4676-a876-8fed7be66b0f.png)

1. ブレークポイント前まで実行されます

# デバッグ実行中の機能
##　デバッグ中に出てくるバーの使用法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156536/b9353164-275b-472b-b174-1320a2915394.png)
左からContinue,Step Over, Step Into, Step Out, Restart, Stop
### Continue（F5）
次のブレークポイントまでプログラムを実行。         
複数ブレークポイントを設定しているときに使用する。
### Step Over（F10）
プログラムを一行だけ実行
### Step Into（F11）
関数が呼ばれるとその中に入ってプログラムを実行     
Step Overでは呼び出している関数の中身のデバッグはSkipする
### Step Out（Shift + F11）
入っている関数から抜け出す    
今いる関数の処理を最後までSKipしたい場合。
### Restart（Cmd⌘ + Shift + F5）
一度プログラムの実行をやめて、再び実行を始める
### Stop（Shift + F5）
プログラムの実行を終了する

## データインスペクション
### 左側の窓で実行行の関数の変数の値が見れる    
- 呼び出し元の関数の変数は見えないので注意。    
- 下記の場合main.pyで print_person_info(person_dict):を呼び出しているが、main.pyのローカル変数は表示されていない。
- ウォッチ式もローカル変数しか表示できない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156536/fa330842-25f4-4940-b74c-69edce66c58e.png)

### デバッグコーンソール
変数がたくさんあって、左側の窓で確認しにくい場合はデバッグコンソールに見たい変数値を入力することで閲覧可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156536/04553939-c0cc-4fc9-922f-dc17c7a0ebb0.png)

### ウォッチ式
左側のウォッチ式で見たい変数を絞りたい場合や、その変数に対してlenやtype、加算(a+b)、減算(a-b)などデバッグしたい場合も確認することが可能。
デバッグ解析するときはこれメインになりそうな気がする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156536/5b507e07-f9c8-4059-8232-e497b9d84201.png)



### launch.jsonの使用方法
後日調査予定（引数が必要な場合もこれで設定する模様）

# 参考にした記事
https://qiita.com/Shunkicreate/items/f078b392e31b0c122392
https://laid-back-scientist.com/debug-vscode
Excelマクロを動かすVBAは”ThisWorkBook”に書けば良いの？

# 概要
レガシーなのか、あるいはJTCではまだまだ主力なのか。Excelマクロを動かすVBA（Visual Basic for Applications）のプロジェクト構成とモジュールごとの役割について整理しました。<br>
結論としては、**"ThisWorkBook"に書いても動きます。ただし、きちんと役割ごとにモジュールを分けることが推奨されます。** です。ThisWorkBookは文字の通りそのBook（Excelファイル）に閉じた場所となっています。<br>※この記事では、VBAの実行手順やコードについてはほとんど触れていません

# 経緯
最近ちょっとしたcsv変換の依頼があり、VBAで書きながらふと「VBAにおける実行ファイルの置き場や記述場所って決まりがあったかな？」と思いましたので調べてみました。初学時には、いきなりボタンとThisWorkBookにVBAを書き、ぽちぽちとトライ・エラーしていたと思います。ただ、コードがどこに記述され、どのように保存・実行されるのか、Excelファイルを中心に全体像を理解することで、VBAを効果的に利用することができるのではないかと思います。

# マクロとVBA
今更ですが、マクロとVBAの違いを整理すると以下の通りです。
- マクロ: いくつかの動作をまとめて呼び出し実行する機能のこと（Excelに限定されない）
- VBA: MicrosoftのOffice製品（ppt, word, access, excelなど）に組み込まれたプログラミング言語、VBE(Visual Basic Editer)というEditerを用いて記述する

この定義に従うと、Excelマクロとは「Excelを中心としたいくつかの動作をまとめて実行する機能（あるいはその機能をもつファイル）」を表します。そしてその実行方法を実現する手段の一つがVBAによるプログラミング、と言えます。<br>
|  | マクロ | VBA (Visual Basic for Applications) |
| :-- | :----------------------- | :------------------------------- |
| 定義 | 一連の操作を記録・実行する機能 | Microsoft Office製品に組み込まれたプログラミング言語 |
| 役割 | 定型的な作業の自動化 | Office製品の機能拡張、自動化、カスタマイズ |
| コードの記述方法 | 記録マクロ、VBAコードを直接記述 | VBAコードを直接記述 |
| 柔軟性 | 比較的低い（記録された操作の範囲内）| 高い（複雑な処理や高度なカスタマイズが可能）|


# ExcelにおけるVBE（Visual Basic Editer）のプロジェクト構成と役割
Excelファイルで開発タブ > VBEを開くと左側に"プロジェクト"というサイドバーが見えます。この中身は現時点でのアクティブなExcelファイルの情報が記載されています。
<br>
![スクリーンショット 2025-03-15 15.40.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485454/83abdbdd-3439-467a-b1c5-06d34fe2cbf3.png)<br>
| 項目名 | 概要 |
| :--- | :----------------------- |
| VBAProject(XXXXX) | 開いているExcelファイル（あるいはExcelファイルのアドイン）ごとに階層化するもの | 
| Microsoft Excel オブジェクト | ThisWorkBookモジュール, Sheetモジュール、などオブジェクトをまとめたフォルダ |
| ThisWorkBookモジュール | WorkBook (Excelファイル）全体 に関連するイベント (ブックのオープン、クローズ、保存など) に応答する処理を記述 | 
| Sheetモジュール | 特定のWorkSheetに関連するイベント (シートの選択、セルの変更など) に応答する処理を記述 |
| （標準）モジュール | 特定のBookやSheetに依存しない汎用的な共通処理を記述 |
| クラスモジュール | （必要に応じた）独自のオブジェクト (クラス) を定義する場所 |
| ユーザーフォーム | ユーザーからの入力を受け付け、ダイアログ・ポップ表示の処理を記述 |

# 結局どこに書けば良いのか？
極端な話、すべて **ThisWorkbookモジュール** に記述しても、一応は動作させることができます。なので、そこまで長いコードでなく再利用や他のブックからの呼び出しがなければそれで問題ないと思います。しかし、可読性や再利用なども視野に入れると推奨はされません。


### 以上です
大規模なコードをVBAで書くことは今後あるのか・・・
VBA事始め３　DX内製化はExcelで出来る　(Accessデータベース)

# VBAからAccessデータベースを使う
Excelからデータベースを使う方法として、DAO(Data Access Object)を使用するかAOD(ActiveX Data Object)を使います。
DAOはAccessのデータベースエンジンを使用し、ADOはODBCドライバを使ってデータベースに接続します。

今回は、DAOを使う方法について説明します。

# DAO(Data Access Object)
ExcelにはDAOと呼ばれるAccessデータベースを操作する、オブジェクトがインストールされているためAccessがなくってもAccessで使うデータベースファイルを操作することができます。

# 具体的な方法
DAOは、使用できるように参照設定をしないと動きません。
参照設定の具体的な方法は、以下の動画をご覧くださいませ。

https://youtu.be/dS8rhbc8pow

# データベース操作が出来ると・・・
動画では、データベースを読み取るためにThisWorkbookのPathプロパティをもとにデータベースのパスを合成しており、ファイルを移動してもこの関係性は一定なので始めに言った問題点が解決されます。
これについては、次回以降で詳しく解説いたします。

[インデックスへ戻る](https://qiita.com/kawamo55/items/84ba4068e728813b7624)
ChatGPT 料金設定ページの利用可能な内容などの表をメモ（2025/3/15時点、OpenAI公式）

以下の公式ページで「無料版・Plus・Pro・Team・Enterprise」のそれぞれで、利用可能な内容の違いが表になっています。

●ChatGPT 料金設定 | OpenAI
　https://openai.com/ja-JP/chatgpt/pricing/

それを 2025/3/15時点でメモしてみたものです。
（とある個人関連の案件で、どのプランで何が利用可能かを確認したくなり）

## 表の内容
以下、2025/3/15時点でのキャプチャメモです。

### 基本情報

このあたりは、どのプランも同じ内容が書かれています。

![2025-03-15_16-13-41.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/479f89ba-1c7c-4f5d-9d30-82bdd594382c.jpeg)

### モデル関連

以下をあらためて見てみると、例えば GPT-4o でプランごとの制限の違いがけっこうあったり、コンテキストウィンドウの違いがあったりなど、あまり自分が認識できてなかった違いがありました。

![2025-03-15_16-14-25.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/8b1f3cde-3ab4-4979-84a2-aa00568f5d68.jpeg)

![2025-03-15_16-15-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/3380acad-f64a-41a8-a38c-bfb105500541.png)

### 機能関連

このあたりは存在は認識しているものの、いざ何があるか自分で書き出してみようとすると、書き出しきれない自信がありますｗ

あと記事執筆時点で、機能の利用可否の観点で見ると、Proプラン限定なのが Operator くらいになっているんだな、とあらためて思ったりしました。

![2025-03-15_16-18-10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/28b7598b-82f8-4d27-b4ce-8b5783ac13fc.jpeg)

![2025-03-15_16-19-18.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/355787a9-0ae8-4b1d-92e6-3def29c12e94.jpeg)

![2025-03-15_16-19-52.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1c91dcd9-5b07-4b36-86c4-90e5bfc3ab14.jpeg)

リリース当初、とりあえず試したけど現状は使っていない、という機能がけっこうあるな、とも思ったりしました。

### プライバシー

Plus と Pro で、オプトアウトか、そもそも利用されないのか、という違いがあるのは今認識しました（無料版や Plus のオプトアウトは、当初から認識していたのですが）。

![2025-03-15_16-22-38.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/e8f31ea8-c722-4d46-b71d-694fbc50b686.jpeg)

### セキュリティと管理・カスタマーサービス

「セキュリティと管理・カスタマーサービス」の内容は、Team・Enterprise にしか関わらない内容になっているので、今回の自分の用途では対象外になるので省略します。


## その他： 料金
あと、記事執筆時点での料金を、掲載されている数値どおりにメモしてみます。

- 無償版： $0/月
- Plus： $20/月
- Pro： $200/月
- Team： ユーザー1人あたり$25／月（年額課金）、ユーザー1人あたり$30／月（月額課金）
- Enterprise：（記載なし）セールスに
ICMP Timestamp Request Remote Date Disclosureの確認方法

## はじめに
業務でセキュリティ診断やっててNessus使ってますが、誤検知が多いんです。
加速度的に発見されていく脆弱性を非破壊検査で日々検査項目に追加しなければいけないので仕方ないところもあります。
その誤検知の多い脆弱性の中の一つ[ICMP Timestamp Request Remote Date Disclosure](https://www.tenable.com/plugins/nessus/10114)の確認方法について解説します。

## どんな脆弱性か？
[CVE(CVE-1999-0524)](https://www.cve.org/CVERecord?id=CVE-1999-0524)
Refarecesに記載の他のサイトも確認するとこんな感じでしょうか

・ICMPtype13に応答すると機器の内部時刻を知ることができ、それによって暗号生成時の乱数を予測できて、暗号解読されるかもしれない。
・ICMPtype17に応答するとサブネットマスクを知ることができシステム内部の構成を把握されて攻撃に利用されるかもしれない。

古い脆弱性なので大抵の製品は対応されてるはず・・・・

## Nessusの動作
Nessusの各Plugin(検査プログラム)の動作はnaslという言語で書かれたスクリプトでインストールしたPCの下記フォルダもしくは[Vulners](https://vulners.com/)というサイトで確認できます。
C:\ProgramData\Tenable\Nessus\nessus\plugins

本件のはicmp_timestamp.naslですが、ざっくりとしか読めない・・・
とりあえず何となくわかるのは
①ICMPtype13の応答以外にもいろいろ見てそう
②ICMPtype17の応答は検査してない
ってところで、①が誤検知につながってるのかもしれませんね。

:::note
naslの言語解説は[Nessus Attack Scripting Languageリファレンスガイド]＃(http://www.puni.net/~mimori/nessus/nasl-ja.html)を見てください。
:::


## 確認方法
自分でICMPtype13打てばいうんですがどうやって標準のWindowsクライアントではできません。

### 仮想のkalilinuxを使う(使えるとは言ってない)
Kalilinuxにhping3というツールがあってICMPtypeを選択して送信することが可能です。（要管理者権限）
VM上のKalilinux(NAT接続)でやってみました。
~~~
hping3 -C 13 <IP_ADDRESS>
~~~
ところが応答してくるはずの対象にやっても応答返ってこない・・・
![hping3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818903/f1a97064-86a5-4db6-b66f-238e25f2c4d5.png "hping結果")

wiresharkで確認するとVMの仮想ネットワークからホストに転送されているもののホストPCからは全く転送されてないことがわかりました。ホストPCのfirewallは全部無効なのに
![wireshark1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818903/03acc1dd-596f-483a-9515-2e69209776dc.png "VM仮想ネットワーク")
![wireshark2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818903/58be0a96-50e7-4bab-bcb1-e4566b9551c9.png "ホストPCの外部向けインタフェース")


どうもOSで転送できないみたいになってるらしいです。（ソース行方不明）
なのでホストPCから直接やる方法を考えます。

### Nmapを使う
-PPを使えばtype13を送信できるみたいです。
~~~
Nmap -sn -PP <IP_ADDRESS>
~~~
:::note alert
`-sn`オプションは必ずつけてください、でないとポートスキャンを実施してしまいます。
もともとNmapはポートスキャン用のツールですが、許可なくポートスキャンを行うと、不正アクセス禁止法違反などの法的リスクがあります。かつ倫理的にも問題があり、信用を損ねる恐れがあります。
:::
`host up`と出れば応答あり 

![cmd2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818903/d7589531-7418-4d00-98ea-46ccc94e3ebe.png "Nmap結果")

割愛しますが、あとPythonとかWSLとかですかね・・・

## 応答した対象は脆弱なのか？
上の項目で述べた通り、この脆弱性は暗号解読される可能性があるもので、じゃあ応答したパケットの情報から解読できるか否かは内部時計を乱数生成に使ってるのかどうかという点を抑える必要があります。

以下はAkamaiのナレッジです。
[Akamai(TCP & ICMP Timestamp)](https://community.akamai.com/customers/s/article/TCP-ICMP-Timestamp?language=en_US)（解答見るには無料でアカウント作ってログインする必要があります）

要するに該当脆弱性の影響は受けないけどICMPtype13本来の目的のために応答してるよって事ですね。
scanfの欠点

質問：「scanfの欠点を挙げてください．」
以下はChatGPTの回答．

---

`scanf`はC言語でよく使われる入力関数ですが、いくつかの欠点が存在します。以下に代表的な欠点を挙げます。

### 1. **入力の形式に依存する**
`scanf`は入力されたデータの形式に非常に厳密に従います。ユーザーが期待される形式と異なるデータを入力した場合、`scanf`は正しく動作しません。例えば、`scanf("%d", &a);`とした場合、整数を期待しているにも関わらず、文字列や浮動小数点数が入力された場合、正しく値を読み取れません。

#### 例:
```c
int a;
scanf("%d", &a);  // 整数を期待
```

もしユーザーが「hello」を入力すると、プログラムはエラーを起こし、変数`a`に予期しない値が入ってしまう可能性があります。

### 2. **バッファオーバーフローのリスク**
特に文字列を入力する際に、`scanf`でバッファサイズを指定しないと、入力がバッファサイズを超えた場合にバッファオーバーフローが発生し、メモリ破壊やプログラムのクラッシュが起こる可能性があります。

#### 例:
```c
char buffer[10];
scanf("%s", buffer);  // バッファオーバーフローのリスク
```

ここでユーザーが「thisisaverylongstring」と入力した場合、`buffer`配列のサイズを超えてデータが書き込まれ、予期しない動作を引き起こすことがあります。

### 3. **入力の残りを処理しない**
`scanf`は、入力中にエラーが発生すると、バッファに残ったデータを適切に処理しません。そのため、次回の`scanf`呼び出し時に誤ったデータが入力されることがあります。

例えば、`scanf`で整数を入力した後、改行文字がバッファに残っていると、次回の入力がうまく処理されないことがあります。

#### 例:
```c
int a;
scanf("%d", &a);  // 整数を入力
scanf("%s", buffer);  // 改行文字が残っていて予期せぬ動作
```

### 4. **入力の失敗を検出しにくい**
`scanf`は入力が失敗した場合、戻り値が`0`または`EOF`を返しますが、エラーが発生した原因を詳細に確認するのが難しいです。そのため、入力が不正な場合のエラーハンドリングがしにくいという欠点があります。

#### 例:
```c
int a;
if (scanf("%d", &a) != 1) {
    printf("Invalid input!\n");
}
```

`scanf`が失敗した場合、戻り値は`1`（成功）以外の値ですが、エラーが発生した原因（例えば、予期しない形式の入力）がわからないので、エラーハンドリングが難しくなります。

### 5. **改行文字の取り扱いが難しい**
`scanf`は入力中に改行文字を取り込まないことが多いため、複数回の入力に対する制御が難しくなることがあります。特に、`scanf`で一度読み取ったデータが次の入力に影響を与える場合、予期しない動作を引き起こします。

#### 例:
```c
char buffer[10];
scanf("%s", buffer);  // 入力後に改行文字が残る
scanf("%d", &a);  // 次回の入力で改行が影響する可能性
```

### 6. **複数の入力を一度に読み取るのが難しい**
複数の異なる型のデータを一度に`scanf`で処理する場合、形式指定子が複雑になりやすく、入力が途中で失敗する可能性が高くなります。また、エラーが発生した場合にどの部分が原因で失敗したのかを特定しづらいです。

#### 例:
```c
int a;
float b;
scanf("%d %f", &a, &b);  // 複数の入力を一度に処理
```

ここで、入力が不正だった場合に、`a`と`b`のどちらに問題があるかを特定するのは難しいです。

### 7. **浮動小数点数や他の複雑な型の処理が難しい**
`scanf`は浮動小数点数や長整数など、複雑な型を読み込む際に慎重に使わないと、予期しない動作を引き起こすことがあります。特に`%f`や`%lf`の使い方が正しくないと、型の不一致によるエラーが発生することがあります。

#### 例:
```c
double x;
scanf("%f", &x);  // %fはfloat型、%lfを使うべき
```

この場合、`%f`を使うと`float`型が指定されてしまい、`double`型の変数には正しい値が代入されない可能性があります。

### まとめ
`scanf`は便利ですが、上記のようにいくつかの欠点を持っています。特にバッファオーバーフローや入力形式に厳密に依存することから、入力を安全に処理するためには`scanf`を使う際に注意が必要です。より安全な方法としては、`fgets`や`strtol`、`sscanf`などの関数を使う方が推奨されます。
AHC でローカルテストを行う（Python）

## 概要

https://qiita.com/boilingpoint36c/items/7f7e4a89f7acf374113c

AHC のローカルテストを Windows で行う方法を残したが、後々スコアを分析したりするには機能が弱いので、Python を通したほうが良さそうな感じがした。Jupyter で、回すのも楽そうだし。

## 前提
* AHC の大会で配布しているチェッカを使える状態にしてある
    * `vis.exe in.txt out.txt`

## 本編
### スコアチェックを Python 上から動かす
Python の subprocess モジュールでコマンド実行する。

* コマンド実行は `subprocess.run(command)` で流すが、以下を指定
    * [subprocess.run のドキュメント](https://docs.python.org/ja/3/library/subprocess.html#subprocess.run)
    * シェル実行を指定するのに `shell=True`
    * 出力したときのスコア（の文字列）がほしいので `stdout=subprocess.PIPE`
    * 戻り値が文字列ではなくて、[CompletedProcess](https://docs.python.org/ja/3/library/subprocess.html#subprocess.CompletedProcess) が返ってくるので、`obj.stdout.decode()` で文字列を取り出す

`command` は `vis.exe in.txt out.txt` を実行するので、これをこのまま文字列で指定

```Python
import subprocess

command = "vis.exe in.txt out.txt"

out = subprocess.run(command, shell=True, stdout=subprocess.PIPE)
print(out.stdout.decode())
```

### 複数のスコアチェックを Python 上から動かす

複数のファイルが有るなら、`in.txt` `out.txt` が変わるだけ。

* 連番になっているなら for .. in range() で回してもいいし
* Path オブジェクトでフォルダを取得しておいて、`iterdir()` で回す、というというのもあるか

```Python
# 確認プログラムの実行関数
def check(filename, print_cmd: bool = False):
    # ファイルパス folder_in や folder_out は、計算した結果を入れておくフォルダの Path オブジェクト
    file_in = folder_in.joinpath(filename)
    file_out = folder_out.joinpath(filename)

    command_check = f"{str(file_check)} {str(file_in)} {str(file_out)}"  # 確認プログラムの実行
    if print_cmd:
        print(command_check)

    # コマンド実行
    out = subprocess.run(command_check, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    string_out = out.stdout.decode()
    return int(string_out.split()[2])  # Score = #####


# folder_in 内のファイルを逐次処理 / スコア確認
score_total = 0
count = 0

for p in folder_in.iterdir():
    # execute(p.name)  # 計算実行
    score_total += check(p.name)   # スコア確認事項
    count += 1

```

これで値は取り出せました。
C#のWindows Formsアプリでフォーム間でデータをやり取りする

# 1. はじめに
* C#のWindows Formsアプリでフォーム間でデータをやり取りしたい
* フォーム間でデータをやり取りする方法を調べておきたい

# 2. 開発環境
* C# 
* .NET 8
* Visual Studio 2022
* Windows 11

# 3. コンストラクタを使用する方法
新しいフォームを作成するときに、コンストラクタの引数としてデータを渡す

## 手順
- 1 . フォームのコンストラクタを修正
- 2 . データを受け取って表示

## サンプルコード
**Form1（データを送る側）**
```Csharp:Form1.cs
private void btnOpenForm2_Click(object sender, EventArgs e)
{
    string data = txtInput.Text; // テキストボックスの内容を取得
    Form2 form2 = new Form2(data); // データを渡してForm2を作成
    form2.Show();
}
```

**Form2（データを受け取る側）**
```Csharp:Form2.cs
public partial class Form2 : Form
{
    public Form2(string receivedData)
    {
        InitializeComponent();
        lblReceivedData.Text = receivedData; // ラベルに受け取ったデータを表示
    }
}
```

---
# 4. プロパティを使用する方法
フォームのプロパティを使ってデータを渡す方法

## サンプルコード
**Form1（データを送る側）**
```Csharp:Form1.cs
private void btnOpenForm2_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    form2.ReceivedData = txtInput.Text; // プロパティを設定
    form2.Show();
}
```

**Form2（データを受け取る側）**
```Csharp:Form2.cs
public partial class Form2 : Form
{
    public string ReceivedData { get; set; } // データを格納するプロパティ

    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        lblReceivedData.Text = ReceivedData; // ラベルにデータを表示
    }
}
```
---
# 5. 静的変数を使用する方法
グローバルなデータとして、静的変数を使ってやり取りする方法

## サンプルコード
**データを共有するクラス**
```Csharp:DataStore.cs
public static class DataStore
{
    public static string SharedData { get; set; }
}
```

**Form1（データを送る側）**
```Csharp:Form1.cs
private void btnOpenForm2_Click(object sender, EventArgs e)
{
    DataStore.SharedData = txtInput.Text; // データを設定
    Form2 form2 = new Form2();
    form2.Show();
}
```

**Form2（データを受け取る側）**
```Csharp:Form2.cs
private void Form2_Load(object sender, EventArgs e)
{
    lblReceivedData.Text = DataStore.SharedData; // ラベルにデータを表示
}
```
---
# 6. イベントを使用する方法
データを受け取る側のフォームでイベントを定義し、送る側のフォームがイベントを起動する方法

## サンプルコード
**Form1（データを送る側）**
```Csharp:Form1.cs
private void btnOpenForm2_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    form2.DataReceived += (data) => { lblStatus.Text = data; }; // イベントハンドラを設定
    form2.Show();
}
```

**Form2（データを受け取る側）**
```Csharp:Form2.cs
public partial class Form2 : Form
{
    public event Action<string> DataReceived;

    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        DataReceived?.Invoke("Form2が開かれました");
    }
}
```

# 7. 参考文献

https://johobase.com/windows-form-dialogresult/

https://dobon.net/vb/dotnet/form/modelessformresult.html

https://qiita.com/eiyp_8r/items/1e5993c316f4a78fac79
node module

# node module とは
node module （ノードモジュール）とは、[実行環境のNode.js](https://qiita.com/h-suehiro/items/adfe228f1ced26e36914) 上で動く、「組み込みモジュール」や「ツール」のこと。
- 組み込みモジュール
node.js で動かす プログラムに組み込んで使用するモジュール （fs, http, path など）
- ツール（単体で動くモジュール）
node.js で動くプログラム （webpack, express など）
# モジュールの管理方法
Node.jsのパッケージ管理ツールである npm(Node Package Manager) を使って管理する。
組み込みモジュール fs の追加（インターネット経由で追加される）
``` bash
npm install fs
```
# 具体的なモジュール管理の仕組み
- node_modules
ディレクトリの中にモジュールが収められる。
- package.json
に追加したモジュールの情報や依存関係が記述される。
Node.js とは

# Node.js とは
Node.js（ノード・ジェイエス）は プログラム言語の javascript を動かすために必要な実行環境の１つ。
# Node.jsの開発元
Node.jsの開発は現在(2025年)、[OpenJS Foundation](https://openjsf.org/)（オープンJSファウンデーション）という非営利団体が主導している。
Node.jsはオープンソースであり、コミュニティによっても活発に改善されており、コードはGitHubで管理されている。
# Node.jsの開発元の遷移
2009年: [Ryan Dahl](https://en.wikipedia.org/wiki/Ryan_Dahl) が Node.js を開発し、初めて公開。
2015年: Node.js の開発が OpenJS Foundation（旧称: Node.js Foundation）によって引き継がれ、管理されるようになる。
# Node.jsの公式サイト
https://nodejs.org
# Node.jsのGitHub
https://github.com/nodejs/node
YouTubeでサジェストされる関連動画を非表示にする拡張機能を開発してみた

# はじめに
世の中には仕事や研究の合間に「ちょっとYouTubeでも見て休憩しよう」とブラウザを開き、気がついたら貴重な数時間を無駄にしていたなんていう愚行を犯す人がいます。そうです、私のことです。
YouTubeではユーザーの興味を持ちそうな関連動画をサジェストし、できる限りサイト内にとどまらせようとする悪魔の仕組みが備わっています。今回はこれを非表示する拡張機能を作ってみました。

# 作ったもの
成果物はchromeウェブストアに公開しております。

https://chromewebstore.google.com/detail/yt-hide-related/bcnnjjlaahehhchjndemgnpagmpbnhcb?hl=ja

## 機能
主な機能としては
- サイドバーや動画のエンド画面にサジェストされる関連動画を非表示
- 自動再生機能のオフ

の2つになります。こんな感じ。
![スクリーンショット 2025-03-15 15.11.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677573/fe67f652-343e-4197-88c8-22f757ce0039.png)

注意として、動画のエンドカードは非表示にできません。今後対応していきたいと思います。

# サジェスト動画を非表示する処理
そこまで複雑な処理は必要としません。JavaScriptで要素を取得して、CSSをあてるだけです。

非表示したい要素を取得します。
```JavaScript
const getRelatedElements = () => {
    const related = document.getElementById('related');
    const secondaryInner = document.getElementById('secondary-inner');
    const endScreen = document.querySelector('.ytp-endscreen-content');

    return [related, secondaryInner, endScreen].filter(Boolean);
};
```
取得した要素に`display`プロパティに`none`を適応します。
```JavaScript
function hideRelatedVideos() {
    const elements = getRelatedElements();
    elements.forEach(element => {
        if (element) {
            element.style.display = 'none';
        }
    });
}
```

# 感想
アウトプット学習の一環として、拡張機能を開発・公開するところまでをやってみました。
拡張機能開発なんて遠い存在だと思っていましたが、シンプルなものであれば案外あっさりできました。心理的ハードルがかなり下がりましたね。
アイディアがあれば、今後もやっていきたいと思います。

# 参考
https://qiita.com/eycjur/items/f690a7d03d0781a116a5
[OCI][備忘録]VCN作成済みなのに、インスタンスにSSH接続ができない

## 無償でずっと使えるOCIのAlwaysFree
OCIのAlways Freeは無償で複数のVM、オブジェクトストレージ、DBCS、
サーバレスサービスとCloudの様々なサービスを使うことができるという
便利なものです。

小さいながらもVMが無償で複数利用でき、オブジェクトストレージも
使えるサービスはとても貴重です。

## クライアント端末から繋がらず苦戦

過去に作成したOCIの環境を使おうと思ったところ、
Cloudshellからアクセスするもパスワードを失念。
TeratermからのSSHを試みました。

**「接続がタイムアウトしました」** と表示されては
Teratermが終了するの繰り返し。
解決に時間かかったため備忘録として残しておきます。

SSHで繋がらない、という記事もつぶやきもなく。
皆さん、難なく繋がっています。

## 繋がらなかった原因

VCN、パブリックサブネット、パブリックIPはあり、
セキュリティリストで22番は開いているが
**「しばらくCloud環境を使わないため、VCNから
安全のために自分でインターネットゲートウェイを削除。
ルートテーブルも削除していたことを失念していた」**

元々繋がっていたものが、繋がらなくなるのはクライアントPCが
MacからWindows11になったからに違いない。
Windowsセキュリティが怪しいと思っていましたが、
影響していませんでした。

## OCIネットワーク設定参照記事

 yosakataさんの[OCIのVCNを構築](https://qiita.com/yosakata/items/dbe32d3833862a266fed) を参照させていただき、
 この通り設定すると無事にSSH接続できました。
【情報セキュリティマネジメント試験】問題に出てくる英文字の組織名まとめ【用語集】

:::note info
「IPA」とは
:::

:::note warn
IPA（Information-technology Promotion Agency, Japan）は、
日本の独立行政法人情報処理推進機構の略称であり、日本政府（経済産業省）所管の機関です。
:::

:::note info
「J-CSIP（ジェイシーシップ）」とは
:::
:::note warn
J-CSIP（サイバー情報共有イニシアティブ）とは？

J-CSIP（Japan Cybercrime Information-sharing Platform） とは、IPA（情報処理推進機構）が運営する、国内の重要インフラ企業や製造業などの組織がサイバー攻撃に関する情報を共有するための枠組み。
「公的機関であるIPAを情報ハブ（集約点）の役割として、参加組織間で情報共有を行い、高度なサイバー攻撃対策に繋げていく。」
:::

:::note info
「CRYPTREC（クリプトレック）」とは
:::
:::note warn
日本における電子政府推奨暗号リストの策定や、暗号技術の評価を行うプロジェクトです。
総務省、経済産業省、独立行政法人情報処理推進機構（IPA）が中心となり、日本で使用される暗号技術の安全性を評価し、推奨リストを作成しています。
:::

:::note info
「CSIRT（シーサート）」とは
:::
:::note warn
コンピュータやネットワークのセキュリティインシデント（不正アクセス、情報漏えい、マルウェア感染など）に対応するための専門チームのことです。

企業や組織内に設置される場合は「組織内CSIRT（Enterprise CSIRT）」と呼ばれ、インシデントの監視・分析・対応・予防策の策定を行います。
:::

:::note info
「JISEC（ジセック）」とは
:::
:::note warn
JISEC は Japan IT Security Evaluation and Certification Scheme の略で、日本におけるIT製品のセキュリティ評価・認証制度を指します。
この制度では、IT製品やシステムが情報セキュリティの国際標準（ISO/IEC 15408, 通称「CC（Common Criteria）」）に適合しているかを評価し、認証を行います。

JISECの運営は、IPA（情報処理推進機構） が行っており、認証を受けた製品は政府調達などでも優遇されることがあります。
:::

:::note info
「JPCERT/CC（ジェーピーサート シーシー）」とは
:::
:::note warn
JPCERT/CC（Japan Computer Emergency Response Team Coordination Center） は、
日本のCSIRT（シーサート）を統括するコーディネーションセンターであり、
サイバーセキュリティインシデントの監視・対応・情報共有を行う組織です。
:::
:::note info
「NISC（ナイスク）」とは
:::
:::note warn
NISC（National center of Incident readiness and Strategy for Cybersecurity） は、
内閣サイバーセキュリティセンターの略称で、日本政府のサイバーセキュリティ対策を統括する組織です。
	•	NISCは、日本政府のサイバーセキュリティ対策を統括する組織
	•	政府機関のセキュリティ強化、サイバー攻撃監視、国際連携などを担当
	•	JPCERT/CCや警察庁、防衛省と連携して活動する

:::
:::note info
「ISO/IEC」とは
:::
:::note warn
国際標準化機構（ISO）と国際電気標準会議（IEC）の共同機関で、国際的な標準化活動を行う団体です。
主なISO/IEC規格

ISO/IEC 27001（情報セキュリティマネジメントシステムの規格）
	•	情報セキュリティの管理体制の確立に関する規格で、企業や組織の情報セキュリティのリスクマネジメントを支援します。

ISO/IEC 27002（情報セキュリティ管理策の実践ガイドライン）
	•	ISO/IEC 27001を実践するための具体的な管理策（セキュリティ対策）を提供します。

ISO/IEC 9001（品質マネジメントシステム）
	•	品質管理のための国際的な規格で、製品やサービスの品質向上を目指します。

ISO/IEC 20000（ITサービスマネジメント）
	•	ITサービスの品質と管理を高めるための標準規格で、組織のITサービスの改善を目指します。

ISO/IEC 12207（ソフトウェアライフサイクルプロセス）
	•	ソフトウェア開発のライフサイクルにおける標準プロセスを定めた規格です。

:::
:::note info
「NIST（ニスト）」とは
:::
:::note warn
NIST とは、National Institute of Standards and Technology の略で、アメリカ合衆国の連邦政府機関である国立標準技術研究所のことです。
:::
:::note info
「JIS（ジェイ・アイ・エス）」とは
:::
:::note warn
Japanese Industrial Standards（日本工業規格）の略で、日本の工業規格を指します。

:::
:::note info
「ISMS認証機関」とは
:::
:::note warn
ISMS認証機関（Information Security Management System Certification Body）とは、情報セキュリティマネジメントシステム（ISMS）の認証を実施するための機関です。ISMSは、組織の情報セキュリティを体系的に管理し、保護するためのフレームワークであり、これを適切に運用しているかどうかを評価し、認証を付与する役割を持っています。

:::
:::note info
「CISO（Chief Information Security Officer）」とは
:::
:::note warn
情報セキュリティ対策に関する最高責任者で、最高情報セキュリティ責任者と訳される。
:::
:::note info
「CA（Certificate Authority）」とは
:::
:::note warn
鍵の真正性を証明する認証機関
認証局は、申し出のあった証明書を失効させて、証明書執行リスト（CRL）に追加する。
:::
:::note info
「RA（Registration Authority）」とは
:::
:::note warn
鍵の登録局。
デジタル証明書を発行するために必要な情報を登録する機関です。具体的には、ユーザーやエンティティ（組織など）が証明書を取得する際に、証明書を発行する機関（CA：Certificate Authority）と連携して、認証を行います。
:::
SIEGE: 多ターン対話によるLLMのJailbreakingを検証する新手法

# SIEGE: 多ターン対話によるLLMの自律的Jailbreakingとツリー探索

今回は、最新の研究成果である **「SIEGE: Autonomous Multi-Turn Jailbreaking of Large Language Models with Tree Search」** という論文をご紹介します。本研究では、**大規模言語モデル（LLM）の安全性が多ターンの対話を通じてどのように侵食されるのかを体系的に評価する新たなフレームワーク「Siege」** を提案しています。

Siegeは、従来の単一ターンのJailbreak攻撃とは異なり、**モデルの部分的なコンプライアンス（Partial Compliance）を追跡し、ツリー探索（Tree Search）を活用して攻撃をエスカレートさせる** ことで、LLMの安全性評価をより包括的に行うことが可能になります。

---

## 📄 論文情報
- **タイトル**: SIEGE: AUTONOMOUS MULTI-TURN JAILBREAKING OF LARGE LANGUAGE MODELS WITH TREE SEARCH
- **リンク**: [arXiv:2503.10619](https://arxiv.org/abs/2503.10619)
- **発表日**: 2025年3月13日
- **著者**: Andy Zhou (Intology AI)
- **DOI**: arXiv:2503.10619v1

---

## 🔍 背景と目的

大規模言語モデル（LLM）の進化と普及により、その安全性の確保がより重要になっています。しかし、従来の安全性評価は **単一ターンのJailbreaking手法** に依存しており、**多ターン対話を通じて徐々に安全バリアが崩れるプロセス** を適切に評価できていませんでした。

現実世界の攻撃者は、一度のプロンプトではなく、**多ターンの対話を通じてモデルの制約を徐々に侵食し、最終的な目的を達成する** ケースが多く見られます。このため、本研究では **多ターンの対話を通じた攻撃シナリオ** を体系的に分析し、LLMの脆弱性をより現実的な環境で評価する新たな手法を提案します。

Siegeは、**ツリー探索（Tree Search）と部分的コンプライアンスの追跡（Partial Compliance Tracking）** を組み合わせることで、LLMの脆弱性をより詳細に解析し、より効果的な安全対策の開発につなげることを目的としています。

---

## 🎯 研究の焦点

本研究では、LLMの脆弱性を多ターン対話で解析するために、以下の革新的な技術を導入しました。

### **1️⃣ 部分的コンプライアンスの追跡**
- 各ターンでのLLMの応答を数値化し、**部分的なコンプライアンス（γ(mt) ∈ [0, 10]）を定量化**。
- **γ(mt) = 0** → 完全拒否、**γ(mt) = 10** → 完全なポリシー違反。
- **中間値は部分的な情報開示を示し、それを蓄積して次の攻撃に利用する。**

### **2️⃣ ツリー探索（Tree Search）による攻撃エスカレーション**
- **1つの攻撃プロンプトに依存せず、複数の攻撃パスを同時に探索**。
- 各ターンで **B個の異なるプロンプトを生成し、成功率の高いものを選択**。
- **成功率の低い分岐を剪定（Pruning）し、最も効果的な攻撃戦略に集中**。

### **3️⃣ 適応型攻撃（Adaptive Attacks）**
- **LLMの拒否応答を分析し、それに応じた攻撃戦略を動的に変更**。
- 以下の技術を組み合わせることで、より高度な攻撃戦略を展開：
  - **役割変更（Persona Shift）** → 例：「セキュリティ研究者として情報を求める」
  - **質問の再構成（Re-framing）** → 例：「教育目的のシナリオとして提示」
  - **拒否の抑制（Refusal Suppression）** → 例：「仮説的な議論の形で表現」

---

## 🧪 実験の概要と結果

本研究では、**JailbreakBench** データセット（100種類のプロンプト）を使用し、Siegeの効果を評価しました。対象モデルは以下の3種類：

- **GPT-3.5-Turbo**
- **GPT-4-Turbo**
- **Llama-3.1-70B**

### **主要な実験結果**

| モデル | 方法 | 試行回数 | 成功率 (%) | クエリ数 |
|--------|------|--------|----------|--------|
| GPT-3.5-Turbo | Crescendo | 1 | 40.0 | 6 |
| GPT-4 | Crescendo | 1 | 31.7 | 6 |
| GPT-3.5-Turbo | GOAT | 1 | 55.7 | 6 |
| GPT-4 | GOAT | 1 | 46.6 | 6 |
| GPT-3.5-Turbo | **Siege** | **1** | **100.0** | **44.4** |
| GPT-4 | **Siege** | **1** | **97.0** | **84.2** |

### **🔹 Siegeの優位性**
✅ **従来手法よりも高い成功率（GPT-3.5-Turboで100%、GPT-4で97%）**  
✅ **少ないクエリ数で高い攻撃成功率を達成（CrescendoやGOATより効率的）**  
✅ **BFS探索と部分的コンプライアンス追跡により、より洗練された攻撃パスを構築可能**

---

## ⚖️ 賛否両論

### **🟢 賛成意見**
✅ **LLMの安全評価に新たな視点を提供**
  - 従来の単一ターン評価では見えなかった脆弱性を明らかに。

✅ **現実的な攻撃シナリオを再現可能**
  - 実際の攻撃者が使う戦略を模倣し、より実用的な安全性評価が可能。

✅ **テストコストを削減**
  - クエリ数を削減しながら、より深い安全性評価を実現。

### **🔴 反対意見**
❌ **悪用のリスク**
  - 本手法が攻撃者によって利用される可能性がある。

❌ **完全な防御策の確立が困難**
  - Siegeのような手法に対抗するため、LLMの安全対策がさらに複雑化。

---

## 🔮 まとめ

本研究では、**多ターン対話を活用したLLMの安全性評価手法** を提案し、**部分的なコンプライアンスの蓄積がどのようにポリシー違反へとつながるかを詳細に解析** しました。

特に、**ツリー探索と適応型攻撃戦略を組み合わせることで、従来の単一ターン評価を超えた効果的な安全性評価が可能** であることを示しました。

### **📝 今後の課題**
- **Siegeに対抗する新たな防御メカニズムの開発**
- **倫理的な観点からの適用範囲の制限**
- **対話型LLMにおける安全プロトコルの強化**

---

この記事が、皆さんの研究や実務に役立つことを願っています。  
**ご質問やフィードバックがありましたら、コメント欄にお寄せください！**
Amazon S3

## S3(Amazon Simple Storage Service)とは
データを保存、管理、取得するオブジェクトストレージサービス

## S3の基本概念
### バケット
オブジェクトを整理するためのコンテナのようなもの

### オブジェクト
バケット内に保存されるデータそのもの

### キー
オブジェクトの一意の識別子。オブジェクトのファイルパスと考えることができます。
各オブジェクトは 「バケット名 + キー」 の組み合わせで一意に識別されます

## メリット
### 耐久性と可用性が高い
- 耐久性99.999999999%（11 9’s）：データが失われるリスクは非常に低いです
- 可用性99.99%（S3 Standard）：アクセスできなくなる可能性がほぼないです
- 自動的に複数のAZ（アベイラビリティゾーン）にレプリケーションできます

### 保管先を自由に設定できる
データの配置を分散管理することで、リスクの軽減につながります

## デメリット
### 動的処理を要するWebサービスに使用できない
- データの部分更新ができず、新規作成 or 削除しかできない

#### 対策
- 画像アップロード・変換ではS3 + Lambdaを使う

### レイテンシがある（ディスクストレージより遅い）
- S3はオブジェクトストレージのため、ブロックストレージ（EBS, EFS）よりもアクセス速度が遅い
- 高速な読み書きが必要なデータには不向き
- 画像や動画の保存・配信なら問題なし

#### 対策
- 頻繁にアクセスするデータはEC2 + EBSを使う
- CloudFront（CDN）を使ってキャッシュすることで高速化

### ディレクトリ構造がない（キーで管理）
- S3にはフォルダの概念がなく、「キー（Key）」でオブジェクトを管理する
- ファイル一覧取得（ListObjects）に時間がかかる

#### 対策
- 「プレフィックス（例: `logs/2025/03/`）」を工夫して整理
- DynamoDBと組み合わせてメタデータを管理する

## S3のストレージクラス
- Standard: 高速アクセス向け（デフォルト）
- Standard-IA: 低頻度アクセス向け（コスト削減）
- One Zone-IA: 低頻度＋単一AZ（コスト最安）
- Intelligent-Tiering: 自動で最適なクラスに移行
- Glacier: アーカイブ用（取り出しに時間がかかるが安価）
- Glacier Deep Archive: 超長期保存向け（最安）

## 機能
### ストレージ機能
#### オブジェクトストレージ
ファイルをオブジェクトとして保存
#### バケット管理
バケット内にオブジェクトを整理して保存
#### マルチパートアップロード
大容量ファイルを分割して効率的にアップロード

### データライフサイクル管理
- ストレージクラスの自動移行（ライフサイクルルール）
- 不要なデータの自動削除

### バージョン管理
#### オブジェクトのバージョニング
変更前のデータを保存して復元可能

### 静的Webサイトホスティング
- S3で静的ウェブサイトを公開可能（HTML, CSS, JavaScriptなど）
- カスタムドメイン + CloudFrontで高速CDN対応

### アクセス管理
 - IAMポリシー：S3へのアクセス権限をAWS IAMで管理
- バケットポリシー：バケットごとにアクセス制御を設定可能
- パブリックアクセスブロック：誤ってインターネット公開しないように保護
- S3オブジェクトロック：特定の期間データを変更不可にする（WORM: Write Once Read Many）
- 暗号化：
  - SSE-S3（S3管理のキーで暗号化）
  - SSE-KMS（AWS KMSを使った暗号化）
  - SSE-C（ユーザー管理のキーで暗号化）

### ログ管理・監視
- S3アクセスログ：S3バケットへのアクセス履歴を記録
- CloudTrail統合：AWS CloudTrailでS3の操作履歴を確認
- S3 Event Notifications：オブジェクトの変更を通知（SNS, SQS, Lambdaと連携）

## 使用場面
### ストレージとしての使用
- RDSバックアップの保存
- ログデータのアーカイブ
- 画像や動画のアップロード

### 静的ウェブサイトのホスティング
- ポートフォリオサイトやブログ
- SPA（シングルページアプリケーション）
- 企業ウェブサイト

## まとめ
S3は、高耐久・高可用性のオブジェクトストレージで、データの保存や管理に優れています。ストレージ用途や静的ウェブサイトホスティングなど多様な場面で活用され、コスト最適化も可能です。
datetime からマイクロ秒を抜く

## 問題

Python の日時操作オブジェクトの [`datetime.datetime`](https://docs.python.org/ja/3.13/library/datetime.html#datetime-objects) にはマイクロ秒の精度があり、そのまま文字列に直すと、秒にコンマ以下の値が付きます。

```python
>>> from datetime import datetime
>>> str(datetime.now())
'2025-03-15 18:08:36.781144'
```

ヒトにとっての可読性を上げたいとか、SQL の `DATETIME` 型（マイクロ秒なしのケース）にそのまま挿入したいとか、諸般の事情で小数点数以下がほしくないこともあります。

以下、その方法をいくつか示します。


## ①文字列操作で削除する

最も安直な手は文字列操作でしょう。`datetime` の文字列表現には `.` が1か所しかないことを利用して、`str.split('.')` で分割し、最初のものだけを抜き出します。

```python
>>> str(datetime.now()).split('.')[0]
'2025-03-15 18:12:48'
```

類似の手はいくつかあります。

```python
>>> str(datetime.now())[:19]                    # 先頭19文字スライス
'2025-03-15 18:17:00'
>>> str(datetime.now())[:-7]                    # 末尾7文字を削る
'2025-03-15 18:17:29'

>>> import re
>>> re.sub(r'\.\d+', '', str(datetime.now()))   # いや、そこまでせんでも...
'2025-03-15 18:20:57'
```


## ②フォーマットメソッドを使う

`datetime` オブジェクトのメンバーを書式フォーマットにのっとって記述させるよう、[`datetime.strftime()`](https://docs.python.org/ja/3.13/library/datetime.html#strftime-and-strptime-behavior) メソッドを使う手もあります。おそらく、これが最も教科書的な解法でしょう。

```python
>>> datetime.now().strftime('%Y-%m-%d %H:%M:%S')
'2025-03-15 18:14:16'
```


## ③マイクロ秒を強制的に0にする

`datetime` オブジェクトのマイクロ秒メンバーを [`replace()`](https://docs.python.org/ja/3.13/library/datetime.html#datetime.datetime.replace) メソッドで強制的に0に置き換えてから文字列に直すという、凝った技法もあります。文字列化されるとき、マイクロ秒が0ならば表示をしないというあまり知られていないルールを使った手です。

```python
>>> str(datetime.now().replace(microsecond=0))
'2025-03-15 18:26:10'
```


## ④ISOフォーマットメソッドを使う

`datetime`を `yyyy-mm-ddThh:mm:ss`（あるいはそのバリエーション）というISO形式に変換する [`isoformat()`](https://docs.python.org/ja/3.13/library/datetime.html#datetime.datetime.isoformat) メソッドを使う手もあります。リファレンスによれば、日と時刻を分ける「T」は `sep` キーワード引数で変更でき、時刻のフォーマットは `timespec` キーワード変数から選択できます。「時：分：秒」のフォーマットにするなら、`timespec="seconds"` です。

```python
>>> datetime.now().isoformat(sep=' ', timespec='seconds')
'2025-03-15 18:28:59'
```


## おわりに

“TMTOWTDI”（There's more than one way to do it）は Perl のスローガンですが、Python でやってみても悪くはないと思います。

他に妙手があったら、お教えください。
Linux入門：ファイル検索は「find」にお任せ！覚えておきたい基本オプションについても解説してみた

## はじめに
`find` コマンドは、LinuxやUnix系OSでファイルやディレクトリを検索するためのコマンドです。

シンプルな構文で柔軟な検索が可能なため、システム管理や開発作業で便利に使えます。

## 書こうと思ったきっかけ
日々の作業で特定のファイルを素早く見つける必要があり、`find` コマンドの基本的な使い方を整理しておくと便利だと感じました。

本記事では、シンプルで分かりやすい `find` コマンドの使い方を紹介します。

## 1. 基本的な構文
```sh
find [検索開始ディレクトリ] [検索条件]
```
- **検索開始ディレクトリ**: 検索を開始するルートディレクトリ
- **検索条件**: ファイル名や種類の指定

## 2. よく使う検索方法
### 2.1 名前で検索
```sh
find /path/to/search -name "filename"
```
- 例: `find /home -name "test.txt"`
  - `/home` ディレクトリ以下で `test.txt` を検索

### 2.2 ファイルかディレクトリかを指定
- **ファイルのみを検索**
```sh
find /path/to/search -type f
```
- **ディレクトリのみを検索**
```sh
find /path/to/search -type d
```

### 2.3 特定の拡張子のファイルを検索
```sh
find /path/to/search -name "*.ext"
```
- 例: `find /var/log -name "*.log"`
  - `.log` ファイルを検索

## 3. 検索結果に対する処理
### 3.1 削除する
```sh
find /path/to/search -name "filename" -delete
```
- 例: `find /tmp -name "*.tmp" -delete`
  - `.tmp` ファイルを削除

### 3.2 コマンドを実行する
```sh
find /path/to/search -name "filename" -exec command {} \;
```
- `{}` は検索結果のファイル名が入る
- `\;` で `-exec` を終了
- 例: `find /var/log -name "*.log" -exec ls -lh {} \;`
  - `.log` ファイルの詳細情報を表示

## 4. まとめ
`find` コマンドはシンプルな検索から応用的な処理まで幅広く使えます。

基本的なオプションを覚えておけば、ファイル管理がより効率的になりますので、使ってみてください！
MLflow 2.21.0のOpenAI Agent SDKサポートを試す

どこもかしこも動きが早い。MLflowも[OpenAI Agents SDK](https://qiita.com/taka_yayoi/items/3161baddac7c745dcef9)のトレースに対応しました。

https://x.com/MLflow/status/1900606185415602553

こちらを試します。

> 🖥️ OpenAI Agent SDK: MLflow Tracing now supports OpenAI Agent SDK, a multi-agent framework developed by OpenAI.

```py
%pip install -U mlflow
%pip install openai-agents
%restart_python
```

```py
import os

os.environ['OPENAI_API_KEY'] = dbutils.secrets.get("demo-token-takaaki.yayoi", "openai_api_key")
```

```py
import mlflow
mlflow.openai.autolog()
```

```py
from agents import Agent, Runner

agent = Agent(name="アシスタント", instructions="あなたは役に立つアシスタントです")

result = await Runner.run(agent, "プログラミングにおける再帰について俳句を書いてください。")
display(result.final_output)
```

```
'コードの中  \n自らを呼ぶ声  \n再帰の美'
```

![Screenshot 2025-03-15 at 14.28.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/275750b0-bb08-4b79-8be8-2432a90f5fb9.png)

### はじめてのDatabricks

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

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
035 AI屋さんの　AIエージェント以降の　LLMにトークン全文入力　webアプリ

035 AI屋さんの　AIエージェント以降の　LLMにトークン全文入力　webアプリ



大規模言語モデルの機能拡張として、何らかの実行手段を
ツール経由で実現する　エージェント　機能ですが、

自ら検索キーワードを生成して、
自動で検索した結果から、
複数のサイトを開いて全部読み込んで
その内容も踏まえて、大規模言語モデルが回答してくれます。
勝手にググるエージェントLLMは、
リアルタイムにググるくらいなら、容易に実現できます。
ググった結果を追加して、トークン全文入力の大規模言語モデルに
資料全体を漏れなく、俯瞰した検討をしてもらえます。

---


折角なので
何でも出来る大規模言語モデルさんに
HTMLとCSSの作成も　エージェントしてもらいます。

　大変素晴らしい！
　エクセレント！

デザイン性に優れたHTMLを作ってくれました。
動的に毎回異なるデザインを楽しめますし、
同じURLなのに、見た目を変えられます。


![スクリーンショット 2025-03-15 13.41.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/8e0c0d11-1a52-405b-93a2-5125ca8a9780.png)

---


pythonのフレームワークで

　１、streamlit　→　ダッシュボード
　２、Django　→　伝統と格式のポータルサイト
　３、FASTAPI　→　webapi
　４、flask　→　エージェントHTML
 
選択肢が広がります。


今回、使用したサーバーレス、
CloudFunctions（flask）ひとつで、
一問一答の　webアプリもwebapiも　全部こなせますし、
また、CloudFunctionsは、
　WEBサーバー＋アプリサーバー
のアプリ部のみ実装します。
それ以外のWeb関連はクラウド側が全部面倒見てくれます。
すでに動くアプリの雛形の関数に、少し書いたら完成です。



---


![スクリーンショット 2025-03-15 13.50.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/0c4e0072-2331-43ac-91d6-e0bece6d3ce2.png)


![スクリーンショット 2025-03-15 13.26.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/6d1cfec1-e4db-4f0b-8e14-6ec1d21d7ea8.png)



---

目次

https://qiita.com/bono0/items/dc1d000c98af7e07c9a7



今回も無事に、機能拡張した大規模言語モデル

　035 AI屋さんの　AIエージェント以降の　LLMにトークン全文入力　webアプリ


HTML込み　AIエージェント完成で。



ー以上ー
<Terraform学習>AWSにルートテーブルとInternetGatewayを作成してみる

# 前提条件
学習のため細かく分けて作成していきます。  
VPCは以前作成したVPCを使用します。（[<Terraform学習>AWSにVPCを作成してみる](https://qiita.com/TTG/items/59f0579383c705870ee8)）

## バージョン情報
- Terraform: `Terraform v1.10.5`
- AWS CLI: `aws-cli/2.24.11 Python/3.12.9 Windows/11 exe/AMD64`

---

# Terraform ファイル
## `03_routetable.tf`
以下の Terraform ファイルを作成しました。  

```json
provider "aws" {
    region = "us-west-2"
}

# 既存の VPC を取得
data "aws_vpc" "terraform-vpc" {
    filter {
        name = "tag:Name"
        values = ["terraform"]
    }
}

# Internet Gateway の作成
resource "aws_internet_gateway" "terraform-igw" {
    vpc_id = data.aws_vpc.terraform-vpc.id

    tags = {
        Name = "terraform-igw"
    }
}

# パブリックルートテーブルの作成
resource "aws_route_table" "terraform-public-routetable" {
    vpc_id = data.aws_vpc.terraform-vpc.id

    route {
        cidr_block = "0.0.0.0/0"  # すべてのトラフィックを IGW にルーティング
        gateway_id = aws_internet_gateway.terraform-igw.id
    }

    tags = {
        Name = "terraform-public-routetable"
    }
}

# プライベートルートテーブルの作成、S3 Endpointは次回作成するためここでは空のルートテーブル
resource "aws_route_table" "terraform-private-routetable" {
    vpc_id = data.aws_vpc.terraform-vpc.id

    tags = {
        Name = "terraform-private-routetable"
    }
}
```

---

# 実行コマンド (init, plan, apply)
## `terraform init`
Terraform を初期化します。
```powershell
PS C:\work\Terraform\01_basic\03-routetable> terraform init
```
出力結果:
```log
Terraform has been successfully initialized!
```

## `terraform plan`
Terraform の適用計画を確認します。
```powershell
PS C:\work\Terraform\01_basic\03-routetable> terraform plan
```
出力結果:
```log
Terraform will perform the following actions:
  + aws_route_table.terraform-private-routetable
  + aws_route_table.terraform-public-routetable

Plan: 2 to add, 0 to change, 0 to destroy.
```

## `terraform apply`
ルートテーブルを作成します。
```powershell
PS C:\work\Terraform\01_basic\03-routetable> terraform apply
```
出力結果:
```log
aws_route_table.terraform-private-routetable: Creating...
aws_route_table.terraform-public-routetable: Creating...
aws_route_table.terraform-private-routetable: Creation complete after 1s [id=rtb-xxxxxxxxxxxxxxxxxxx]
aws_route_table.terraform-public-routetable: Creation complete after 2s [id=rtb-xxxxxxxxxxxxxxxxxxx]

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
```

---

# 作成したAWSリソース情報
1. InternetGateway
1. Publicサブネット用ルートテーブル
1. Privateサブネット用ルートテーブル

※Privateサブネット用ルートテーブルにはVPC内のルートしか定義されていないです。

---

# 作成したリソースの詳細 (パラメータ一覧)
<details><summary>パラメータ一覧</summary>
参考：https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route_table

| パラメータ名 | 説明 |
|-------------|------|
| `vpc_id` | ルートテーブルを作成する VPC の ID |
| `route` | ルートテーブルに設定するルート情報 |
| `cidr_block` | ルーティングの宛先CIDR（例: `0.0.0.0/0` は全トラフィック） |
| `gateway_id` | インターネットゲートウェイ (IGW) の ID |
| `tags` | ルートテーブルのタグ情報 |
</details>

---

# 気づいたこと・勘違いしていたこと
- InternetGatewayはルートテーブルを作成する前に作ること
  前に作成しておけば、ルートテーブル作成する時点でルートを設定できる
- S3エンドポイントはルートテーブル作成後に作ってアタッチしたほうがよさそう
  S3エンドポイント作成時にルートテーブル情報が必要なので先に作るべきだと思う。。。
 
---

# まとめ
- 既存の VPC を参照してパブリックルートテーブルとプライベートルートテーブルを作成しました。

次回は **S3 Gateway Endpoint の追加** を行います。
【ChatGPT】第一原理思考と要素分解を使って課題の本質を掘り下げるPromptのご紹介です。


　どうも、カーブミラーです。

　今回は、第一原理思考と要素分解を使って課題の本質を掘り下げるPromptのご紹介です。

:::note info
本記事は、ChatGPT（Plus版）
で行なっております。
画像はありません。あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)
***
　こちらも載せますね。
　　[ChatGPTが使えない？ログインできない・反応しない原因やエラー時の対処法を解説](https://aismiley.co.jp/ai_news/chatgpt-error-resolution-explanation/)
***
　まずは、ニュースです。

　ICT教育ニュースから
　　[ChatGPTなどの対話型生成AI、「学校で利用したことがある」小学生は16.8%、高校生は27.7% ＝学研調べ＝（2025年3月14日）](https://ict-enews.net/2025/03/14gakken-19/)

***（一部抜粋）***
ChatGPTなどの対話型生成AIを「学校」で利用したことがあるかを聞いたところ、「ある」と回答したのは、小学生では16.8%、高校生では27.7%だった。一方、対話型生成AIを「家庭」で利用したことがある小学生は18.3%で、高校生は39.5%だった。
***
　次に

　滋賀大学、
　　国内初のChatGPT Educationを導入

***（Perplexity調べ）***
滋賀大学は2025年4月1日より、国内の大学として初めてOpenAI社が提供する「ChatGPT Education（ChatGPT Edu）」を導入します。この取り組みは、学生の学習環境向上や実践的スキル習得を目的としています。

**導入の背景と目的**  
- 滋賀大学は日本初のデータサイエンス学部を持つ教育機関で、生成AI技術を活用した教育や研究を推進してきました。
- ChatGPT Eduは、個別指導、学習支援、研究サポート、大学運営効率化など、多岐にわたる教育現場での活用が期待されています。

**活用例**  
- Pythonプログラミングのエラー修正や最適化支援。
- 語学学習や論文執筆の文章添削。
- 学生の学習データ分析による個別プラン提供。
- 夜間・休日の質問対応を行う自動応答システム。

この導入により、滋賀大学はデジタル・キャンパス実現を加速し、日本の大学教育に革新をもたらすことを目指しています。
***
　次に

　何よりもニュース？

　GPT-4が公開されて
　　二年が経過しました。

　GPT-4からはじまり、
　　GPT-4 Turbo (2023年11月):
　　　GPT-4o (Omni) (2024年5月)となり
　　　　GPT-4.5(2025年2月)へと進化。

　GPT-5の登場が
　　目前に迫っており、
　　　そちらも楽しみですね。

　実は、
　　GPT-4とともに
　　　発表されたのが、
　　　　AnthropicのClaudeです。

　Claudeも
　　順調にバージョンを重ね、
　　　ほかの主要な生成AIとともに
　　　　私たちを楽しませています。
***
　では、【本題】です。

　今回は、
　　第一原理思考と要素分解を使って
　　　課題の本質を掘り下げるPromptの
　　　　ご紹介です。

　木内さんが
　　提供してくださいました。
　　　[木内翔大さんポスト](https://x.com/shota7180/status/1898154661770883472?t=PnBpb6wyqII1Wg10hdzekQ&s=19)

　課題の本質を掘り下げながら、
　　新しい解決策が見えてきます。

　こちらが、そのPromptです。
　　一部変えていますが、
　　　内容は同じです。

　＊＊＊に課題を入力、
　　送信してください。
```Text:第一原理思考と要素分解で思考Prompt
「＊＊＊」について、第一原理思考と要素分解を用いて考えて
```

　要素を分解して
　　説明してくれるので、
　　　意外なヒントや考えが
　　　　得られるかもです。

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。