OmniAICreator/Qiita-1.07M huggingface dataset:
AWS CLF(CLF-C02) 合格体験記

## AWS CLF(CLF-C02) について
>AWS Certified Cloud Practitioner は、AWS クラウド、サービス、用語の基礎的かつ高度な理解を持っていることを証明します。 これは、IT やクラウドの経験がまったくない個人でクラウドのキャリアに切り替えるか、基礎的なクラウドリテラシーを求めている基幹業務の従業員にとって、AWS 認定ジャーニーの良い出発点となります。

引用元: 公式サイト

https://aws.amazon.com/jp/certification/certified-cloud-practitioner/

### 試験概要
- 試験形式: 選択問題と複数選択問題
- 試験時間: 90分
- 試験費用: 100 USD
- 試験範囲:
    - AWSクラウドの概念
    - セキュリティとコンプライアンス
    - テクノロジー
    - 請求と料金

:::note info
Tips
AWSの公式から割引になる特典が行われていたりするので、資格取得の際には是非チェックしてみてください！！
:::


## はじめに
この記事では、AWS認定クラウドプラクティショナー試験（CLF-C02）について、受験の理由や学習方法、試験内容、感想を共有します。

## 受験した理由
開発案件でAWSサービスが使われており、色々なサービスや開発案件でAWSに関わるな、知らないとまずいぞ！っていう危機感もあり、これを機に勉強するなら資格も取ろうと決意しました。
結果資格取得によって汎用的な理解が深まり、さらに学習意欲が増し受験して良かったと思います。

## 学習方法
Udemyでの学習を中心に進めました。
- 【CLF-C02版】これだけでOK! AWS認定クラウドプラクティショナー試験突破講座（豊富な試験問題300問付き）
- 【CLF-C02版】この問題だけで合格可能！AWS 認定クラウドプラクティショナー 模擬試験問題集（6回分390問）

## 試験内容と感想
試験結果は...

無事合格できました！！Udemyの講座に感謝です🙇
![aws_clf.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1495990/79ca25fe-28e3-3528-24db-0bf5b69ada68.png)

試験はテストセンターで受験し、特に不具合なく快適に進められました。内容はAWSサービスの概要を選択する問題が中心で、Udemyの講座をしっかり受講していれば合格可能だと思います。
特に模擬試験は復習して、しっかり回答できるようになっておけば大丈夫だと思います。8割とか取れていれば問題ないかと。

## まとめ
AWS認定クラウドプラクティショナー試験を受験することで、AWSのサービスに対する汎用的な理解が深まりました！！
資格取得はさらなる学習意欲を高めるきっかけにもなり、おすすめです。
cscの作法 その515

# 概要
cscの作法、調べてみた。
練習問題やってみた。

# 練習問題
TreeViewで、JSON Viewerを作れ。

# 方針
- Litjson使う。
- 再帰使う。
- try使う。


# サンプルコード

```
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System;
using System.Text;
using System.Data;
using System.Windows.Forms;
using System.Drawing;
using LitJson;

class FormMain: Form {
	private TreeView tv;
	FormMain() {
		Text = "treeview";
		Size = new Size(500, 500);
		tv = new TreeView();
		tv.Size = new Size(450, 420);
		string jsonFileName = "nasa.json";
		string fileText = "";
		FileInfo fi = new FileInfo(jsonFileName);
		using (StreamReader sr = new StreamReader(fi.OpenRead(), Encoding.UTF8))
		{
			fileText = sr.ReadToEnd();
			Console.WriteLine(fileText);
			LitJson.JsonData json = LitJson.JsonMapper.ToObject(fileText);
			TreeNode docNode = new TreeNode("json");
			BuildTree(json, docNode);
			tv.Nodes.Add(docNode);
		}
		this.Controls.Add(tv);
	}
	public void BuildTree(LitJson.JsonData json, TreeNode node) {
		foreach (KeyValuePair<string, JsonData> item in json)
		{
			TreeNode parentNode = new TreeNode(item.Key);
			node.Nodes.Add(parentNode);
			Console.WriteLine(">" + item.Key);
			try 
			{
				switch (item.Value.GetJsonType())
				{
				case JsonType.String:
					Console.WriteLine(item.Value.GetJsonType());
					TreeNode finalNode = new TreeNode(item.Value.ToString());
					finalNode.ForeColor = Color.Blue;
					parentNode.Nodes.Add(finalNode);
				break;
				case JsonType.Array:
					Console.WriteLine(item.Value.GetJsonType());
				break;
				case JsonType.Object:
					Console.WriteLine(item.Value.GetJsonType());
					BuildTree(item.Value, parentNode);
				break;
				default:
					Console.WriteLine("ng");
				break;
				}
			}
			catch (Exception)
			{
			}
		}
	}
	[STAThread]
	public static void Main() {
		Application.EnableVisualStyles();
		Application.SetCompatibleTextRenderingDefault(false);
		Application.Run(new FormMain());
	}
}





```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/c34805d2-7252-11b1-a058-e52f48ccf623.png)


以上。
【VSCode】from ~ import~ がうまくできない時の対処

Kaggleコンペで既に実装されたカスタム評価指標をローカルで利用する場合、実装pyコードをダウンロードして利用することによくなります。

VSCodeのJupyter拡張機能を使ってnotebookで書く際、train実装にfrom <評価指標pyコード> import <関数名>として読み込むのですが、よく”ModuleNotFoundError”に遭遇し、その場で調べて対応を繰り返してたのでまとめます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3605750/650fc3e9-bad8-1b87-0c0b-ac9686c3e8d0.png)

## 結論: ワークスペースディレクトリに.envファイルを作成する
根本原因はパスが通ってないことです。なので利用シェルの設定ファイルに追記しても良いですが、kaggleコンペ時など一時的に追加したい場合、リポジトリと本ファイルを管理すればOKで相性が良さそうなので私はこの方法を採用しています。

### 前提
以下のようなディレクトリ構成を前提とします
本ケースではまずutilsは以下にあるmoduleたちをimportで読み込みたいとします

```bash
.
└── src
    └── utils
    |   └── module1.py
    └── utils2
        └── module2.py

```

### 作業
対象のワークスペースディレクトリに.envファイルを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3605750/971cfc17-fb8d-6156-ef83-1d0f79bc34ae.png)

```bash
PYTHONPATH=./src/utils
```
中身は以下のように記載する

これだけ。
ワークスペースオープン時に.envファイルを見てパス設定が自動でされます。
これで検索パスが通ったので以下で読み込みができます。

```python
import module1
```

src配下にutils以外のディレクトリがあって使い分けしてimportしたいとなった場合はPYTHONPATHの設定パス階層を一つ上にしてsrcまでとし、プログラムでは以下のように読み込めばOK

```python
from utils import module1
from utils2 import module2
```

### 参考文献

[VisualStudio CodeでNode\.jsを実行するときに\.envに定義したものをロードする \#Node\.js \- Qiita](https://qiita.com/kmatae/items/74ef951499265cc42070)

[Anaconda仮想環境の環境変数設定 \#Python \- Qiita](https://qiita.com/KodaiS/items/5c177dd1b332130e4e26)
ソリューションアーキテクトに求められる視点(13/14) EFSへのファイルアップロードを検知して、通知するソリューション

## はじめに
ソリューションアーキテクトに求められる視点を整理してみました。

今回は、**EFSへのファイルアップロードを検知して、通知するソリューション**です。実務や試験で、ご参考にして頂けましたら、幸いです。

:::note info
EFSに保存されているファイルやEFSに入ってくるファイルがあれば、それをトリガーできますか？**S3のように、EFSにEventbridgeを使用できますか？**

**Amazon EFS は**現在、ファイルの作成または変更に関する **EventBridge 通知をサポートしていません。** これは、EFS への**書き込みが API 経由で行われないため**、EventBridge をトリガーするものがないためです。
:::

https://repost.aws/ja/questions/QUxhRcSK0WREOHEMTu_Qo2RQ/efs-integration-with-eventbridge

Amazon S3のように、Amazon EFS（Elastic File System）に対して直接EventBridgeを使用してイベントをトリガーすることは現時点ではサポートされていません。Amazon S3はオブジェクトストレージであり、オブジェクトの作成、削除、更新などのイベントをトリガーする機能が組み込まれていますが、EFSはファイルシステムであり、同様のイベントトリガー機能は提供されていません。

## **アーキテクトに求められる視点**

EFSへのファイルアップロードを検知して、通知するソリューションを教えて下さい。

## **パターン　その1**
Lambda 関数 　LambdaFunctionCheckEFSFileSystemStatusを使って、CloudWatch カスタムメトリクスとして表示させ、 CloudWatch アラームより SNS を使用した通知 を行う。

参考記事

https://dev.classmethod.jp/articles/efs-lambda-cloudwatch-file-system-state-surveillance/



## **パターン　その2**

ファイルアップロードのストレージをEFSではなく、Amazon S3 バケットに移行します。処理コードを更新して Amazon S3 を使用します。オブジェクトが作成されたときに Lambda 関数を呼び出すように S3 イベント通知を設定します。

## **パターン　その3**
EFSのファイルシステムに対する操作を監視し、イベントをトリガーするための代替手段を構築する。

Amazon EFSに対して直接EventBridgeを使用してイベントをトリガーすることはできませんが、CloudWatch LogsとLambdaを組み合わせることで、EFSファイルシステムの操作を監視し、イベントをトリガーするソリューションを構築することができます。この方法により、EFSファイルシステムの操作に対するリアルタイムの監視と通知が可能になります。

### CloudWatch LogsとLambdaを使用した監視と通知

1. **EFSファイルシステムのログをCloudWatch Logsに送信**
EFSファイルシステムのログをCloudWatch Logsに送信する設定を行います。これにより、ファイルシステムに対する操作（例：ファイルの作成、削除、更新）をログとして収集できます。

2. **CloudWatch Logsでログフィルターを設定**
CloudWatch Logsで特定のログイベントをフィルタリングするログフィルターを設定します。これにより、特定の操作に対するログイベントをキャプチャできます。

3. **CloudWatch Logsでログフィルターに基づくアラームを設定**
CloudWatch Logsでログフィルターに基づくアラームを設定し、特定のログイベントが発生した際にアラームをトリガーします。

4. **CloudWatchアラームをEventBridgeルールでトリガー**
CloudWatchアラームをEventBridgeルールでトリガーし、特定のアクション（例：Lambda関数の実行、SNS通知の送信）を実行します。

### 手順の詳細

#### ステップ1: EFSファイルシステムのログをCloudWatch Logsに送信
1. **EFSファイルシステムの作成**
AWS Management Consoleにログインし、EFSサービスに移動します。
「Create file system」をクリックし、必要な設定を行ってファイルシステムを作成します。

2. **EFSファイルシステムのログ設定**
EFSファイルシステムの「Monitoring」セクションで、CloudWatch Logsへのログ送信を有効にします。
ロググループを作成し、ログストリームを設定します。

#### ステップ2: CloudWatch Logsでログフィルターを設定
1. **CloudWatch Logsに移動**
AWS Management Consoleにログインし、CloudWatchサービスに移動します。

2. **ロググループの選択**
EFSファイルシステムのログが送信されるロググループを選択します。

3. **ログフィルターの作成**
「Create metric filter」をクリックし、フィルターパターンを設定します。
例：特定のファイル操作（例：ファイルの作成）をフィルタリングするパターンを設定します。

#### ステップ3: CloudWatch Logsでログフィルターに基づくアラームを設定
1. **メトリックフィルターの設定**
メトリックフィルターの名前とフィルターパターンを設定し、フィルターを作成します。

2. **アラームの作成**
メトリックフィルターに基づいてアラームを作成します。
アラーム条件を設定し、特定のログイベントが発生した際にアラームをトリガーします。

#### ステップ4: CloudWatchアラームをEventBridgeルールでトリガー
1. **EventBridgeに移動**:
AWS Management Consoleにログインし、EventBridgeサービスに移動します。

2. **ルールの作成**
「Create rule」をクリックし、ルール名を入力します。
イベントソースとして「CloudWatch Alarms」を選択し、先ほど作成したアラームを指定します。

3. **ターゲットの設定**
ターゲットとしてLambda関数やSNSトピックを選択し、必要なアクションを設定します。



#### ソリューションは、あくまで、一例です。他の解決方法もあるので、参考程度にしてください。

#### 読んでいただき、ありがとうございました。
[AWS #19] Amazon S3

<!--
 <font color="c00000"></font> 赤
-->
## はじめに
こんにちは
今回はストレージサービス分野である **<font color="c00000">「Amazon S3」</font>** について紹介したいと思います。
:rolling_eyes:「S3」ってなんか見たことありますね。バケツみたいなマークだった気がします。
:upside_down:そうですね あのバケツの中にデータなどを入れる（保存できる）イメージですね。

## Amazon S3
「S3」はインターネット対応の<font color="c00000">**完全マネージド型のオブジェクトストレージ**</font>です。
「Simple Storage Service」の略称で、Sが3つ並ぶことからそう呼ばれています。

:upside_down:S3には **「バケット」** と **「オブジェクト」** があります。バケットはオブジェクトを保存する場所です。オブジェクトは、バケットに保存するデータそのものです。

S3には次の特徴があります。
・無制限のストレージ容量
・インターネット経由のアクセス
・高い耐久性

### 無制限のストレージ容量
S3は、格納可能なデータの総量と、オブジェクト数に**制限がありません**。これにより、データ容量を気にする必要が無くなります。

### インターネット経由のアクセス
S3は、**アクセス許可の無い利用者によるデータへのアクセスを禁止にする**ため、柔軟なセキュリティ機能を提供しています。

### 高い耐久性
S3の耐久性は、**99.999999999%** で9が11個並ぶことから「イレブンナイン」と呼ばれています。一例ですがS3に10,000,000のオブジェクト（データ）が格納されている場合、1つのオブジェクトで損失が起きる発生確率は10,000年に一度と言われています。

## S3のアクセス制御
:upside_down:S3には次の3つの方法でアクセス許可の無いユーザーによる、データへのアクセスブロックを行います。
### ACL
:rolling_eyes:ACLですか？:soccer:
:upside_down:AFC Champions League（アジアチャンピオンズリーグ）ではありません。今回の場合は **「アクセスコントロールポリシー」** です。

ACLは他のAWSアカウントなどにバケット、オブジェクトへのアクセスを許可するものです。
### バケットポリシー
バケットポリシーは、バケットに付与することができ、**特定のIPアドレスからのアクセスを許可、拒否する**などACLよりも<font color="c00000">**細かくアクセス制御が可能**</font>になります。
![AWS19_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806875/e91f1c7f-4b30-1edb-7076-5be4e8daaa21.png)
### IAMポリシー
EC2からS3へアクセスする場合などは、**EC2にS3へのアクセスを許可するIAMロールを付与する**必要があります。

## おわりに
今回のちょっとしたまとめになります。

:::note info
S3は**世界中のどこからでもアクセスができる**
:::
:::note info
S3のオブジェクト容量は<font color="c00000">**無制限**</font>である
:::
:::note info
S3の耐久性は**99.999999999%** である
:::


S3はその場に応じて自由な使い道が想定され、より柔軟なデータ保存が実行できるというのがわかりました。最後までお読みいただきありがとうございました！
>>日頃より活用している参考書です。
>> **「参考書」**
[AWS認定クラウドプラクティショナー改定第3版](https://x.gd/19i6N)
>
> **「AWS公式サイト」**
[Amazon S3](https://aws.amazon.com/jp/s3/)
>
> **「参考元」**
[Amazon S3とは？](https://www.itechh.ne.jp/blog/column/S3-explain.html)
>
> **「Youtube」**
[【CLF-C02：AWSクラウドプラクティショナー】第23回 Amazon S3 (クラウドテクノロジーとサービス分野)](https://x.gd/GJ3wz)
ソリューションアーキテクトに求められる視点(14/14)  API の使用を制御および制限する方法

## はじめに
ソリューションアーキテクトに求められる視点を整理してみました。

今回は、**API の使用を制御および制限する方法**です。実務や試験で、ご参考にして頂けましたら、幸いです。

## **アーキテクトに求められる視点**
Amazon API Gateway API を作成し、その API を外部の開発チームと共有している。
API は AWS Lambda 関数を使用し、本番ステージにデプロイされている。
API の使用量は特定の時間に急増し、コスト増加の懸念が生じている。
Lambda 関数を作り直すことなく、コストと使用量を制限する必要がある。

## **ソリューション**
API Gateway API キーと使用プランを作成する。使用プランでスロットル制限とクォータを定義する。使用プランを本番ステージと API キーに関連付ける。API キーを外部開発チームと共有する。

:::note info
API キーと使用プランを作成すると、API の使用を制御および制限できます。使用プランでは、スロットリング制限 (1 秒あたりのリクエスト数) とクォータ (1 日または 1 か月あたりのリクエスト数の合計) を定義できます。使用プランをプロダクション ステージと API キーに関連付けることで、外部開発チームにこれらの制限を適用し、API の使用量が目的の範囲内に収まるようにすることができます。このアプローチは、使用量の急激な増加の懸念に直接対処し、既存の Lambda 関数や全体的なアーキテクチャを変更することなくコストを管理するのに役立ちます。
:::


AWS API GatewayのAPIキーと使用量プランは、APIのアクセス制御とリソースの管理に役立つ機能です。これらを使用することで、APIの利用を制限し、特定のユーザーやアプリケーションに対して異なる使用量制限を設定することができます。

AWS API GatewayのAPIキーと使用量プランを使用することで、APIのアクセス制御、トラフィック管理、コスト管理が可能になります。これにより、APIの利用を効率的に管理し、セキュリティを強化し、リソースの最適化を図ることができます。

### APIキー
APIキーは、API GatewayでAPIを呼び出す際に必要となる一意の識別子です。APIキーを使用することで、特定のユーザーやアプリケーションに対してAPIのアクセスを制御できます。

#### 特徴
- **アクセス制御** APIキーを使用して、特定のユーザーやアプリケーションに対してAPIのアクセスを制御できます。
- **トラフィック管理** APIキーを使用することで、APIの利用状況を監視し、トラフィックを管理できます。
- **セキュリティ** APIキーを使用することで、APIへの不正アクセスを防ぎ、セキュリティを強化できます。


### 使用量プラン
使用量プランは、APIの利用に対して制限を設定するための機能です。使用量プランを使用することで、特定のユーザーやアプリケーションに対して異なる使用量制限を設定できます。

#### 特徴
- **使用量制限** 使用量プランを使用して、APIの利用に対して制限を設定できます。例えば、1日あたりのリクエスト数や1分あたりのリクエスト数を制限できます。
- **トラフィック管理** 使用量プランを使用することで、APIの利用状況を監視し、トラフィックを管理できます。
- **コスト管理** 使用量プランを使用することで、APIの利用に対するコストを管理し、予算内での運用が可能になります。



### 使用例

#### 1. **開発者向けのAPIアクセス制御**
APIを提供する企業が、開発者向けに異なる使用量制限を設定する場合に、APIキーと使用量プランを使用します。例えば、無料プランの開発者には1日あたり1000リクエスト、プレミアムプランの開発者には1日あたり10000リクエストを許可することができます。

#### 2. **APIの利用状況の監視と管理**
APIの利用状況を監視し、特定のユーザーやアプリケーションが過剰にリクエストを送信していないかを確認するために、APIキーと使用量プランを使用します。これにより、APIのパフォーマンスを維持し、リソースの無駄遣いを防ぐことができます。

#### 3. **コスト管理**
APIの利用に対するコストを管理するために、使用量プランを使用します。例えば、特定の使用量を超えた場合に追加料金を請求することで、予算内での運用を確保できます。

参考資料　API GatewayのAPIキーと使用量プランについて調べてみた

https://dev.classmethod.jp/articles/try-api-gateway-usage-plan/

#### ソリューションは、あくまで、一例です。他の解決方法もあるので、参考程度にしてください。

#### 読んでいただき、ありがとうございました。
TypeScriptの導入に関するエラー

typescript導入にあたり以下のエラーが出たため、解決方法もふくめ記録
書き方分からないので我流で
ユーザー名も最初は変更したけど、今後の事も考えると怠いので修正せずにそのまま

:::note
PS C:\Users\kodai> npm install -g typescript
npm error code EEXIST
npm error path C:\Users\xxxx\AppData\Roaming\npm\tsc
npm error EEXIST: file already exists
npm error File exists: C:\Users\xxxx\AppData\Roaming\npm\tsc
npm error Remove the existing file and try again, or run npm
npm error with --force to overwrite files recklessly.
npm error A complete log of this run can be found in: C:\Users\kodai\AppData\Local\npm-cache\_logs\2024-07-15T20_43_05_301Z-debug-0.log
:::

調べた限り重要なのは

:::note
npm error File exists: C:\Users\xxxx\AppData\Roaming\npm\tsc
npm error Remove the existing file and try again, or run npm
:::
ぽい

意味としてはこのディレクトリにあるtscファイルを消してねって書いてあるっぽい
実際そのファイルが存在していたので消してみて
再度 npm i -g typescript@latestを入力すると今度は

:::note
npm error File exists: C:\Users\xxxx\AppData\Roaming\npm\tsc.cmd
npm error Remove the existing file and try again, or run npm
:::

と出た（他の部分は同じなため省略）
同じく削除して再度インストしてみたら

:::note
added 1 package in 1s
:::

と表示された。
成功？

と思いtsc -vと入力すると

:::note
tsc : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\kodai\AppData\Roaming\npm\tsc.ps1 を読み込むことができ
ません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ tsc -v
+ ~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAcces
:::

とでてエラー
OMG

これについても調べてみたら、他サイトではある解決策がある
https://zenn.dev/dollaga_saiore/scraps/98fcc5da6b1a26
ここに書いてある通りにしてみると

:::note
PS C:\Users\kodai> Get-ExecutionPolicy
Restricted
PS C:\Users\kodai> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
PS C:\Users\kodai> Get-ExecutionPolicy
RemoteSigned
PS C:\Users\kodai> tsc -v
Version 5.5.3
PS C:\Users\kodai>
:::

となり、最終的にバージョンを確認できた。
解決。ちゃんちゃん
「何か質問はありますか」と言わないなら何を言えばよいのか

[「組織」や「チーム」でのコミュニケーションについて、あなたの考えをシェアしよう! - Qiita](https://qiita.com/official-events/640648f4dc7d69b3d830)

> あなたが「組織」や「チーム」の中で実施してきたコミュニケーションに関する実践内容や考え方をぜひシェアしてください！ コミュニケーション改善の一例
1on1、チームビルディング、MTG、モブプロ、デイリーミーティング、リモートワークでのコミュニケーションなどなど

... を思い浮かべてのポエムです。1on1、チームビルディング、MTG、モブプロ、デイリーミーティング、リモートワークでのコミュニケーションにて会議、会話の終盤にて自分が説明し終わった後。

**「ほかに 何か 質問は ございますでしょうか」**

言ってしまいます。言ってしまいますね…。これに対して [質問が出ないのは話し手の責任が8割](https://blog.tinect.jp/?p=62265) という説があります。話し手の責任です。私もそう思います。話し手の準備、具体性、雰囲気作り、気遣いだよな、など。

そんな悩みに対して各種記事や [気遣いできる人は知っている！ 会話のキホン](https://www.amazon.co.jp/dp/4799104268) という本を最近読みました。その読書感想文というほど内容には即していませんが、心に引っかかった内容をまとめます。


## 「何か質問はありますか」ではなくて、何を言えばよいのか


### 聞き手にアクションを想起してもらう

> 次のトピックに移る前に、～～について、
今のうちにすっきりさせておきたいこと、
気になっていることはありませんか？

[「何か質問はありますか？」がNGワードなわけ – ダイナミックヒューマンキャピタル](https://www.d-hc.com/2010/03/51435476/)

会議、1on1 の後、「よしこうしよう」が明確だとやって良かったなと自分も思えます。

- 〇〇 に取り掛かれそうですか。
- 〇〇 をしようとしたときに手を動かせそうですか。

等々。

### 話し手から話を具体的にする

> この対応は誰が取り組むべきでしょうか？（Who）
期限はいつまででしょうか？（When）
特にどのあたりがポイントとお考えでしょうか？（Where）
具体的に、どういう方法が考えられるでしょうか？（How）

[質問が思い浮かばないとき、無理やり出すテクニック｜小島ツトム](https://note.com/2tom/n/n70ec882cec9e?sub_rt=share_b)

5W1H ですね。

>問いかけに対して、相手がより詳細な具体例を説明をしてくれればこちらの理解は一層深まります。さらに「こんな条件の時には具体的にどうなるのでしょうか？」のように次から次へと質問を重ねていけば、議論がどんどん広がっていきます。

[どんな会議でも通用する質問フレーズ４つ #38 | 会計士ハットさんのプロフェッショナル仕事術](https://the-professional-skills-of-the-cpa.com/3763/)

「条件」などを明確にしてみる。

- 今の話はこういうこと (5W1H) であっていますか？

等々。


### 比較する

> ご紹介頂いた「○○」ですが、他社の「××」とはどう違うのですか？
△△という観点で、他の製品と比較するとどうですか？

[質問が思い浮かばないとき、無理やり出すテクニック｜小島ツトム](https://note.com/2tom/n/n70ec882cec9e?sub_rt=share_b)

5W1H、条件、の発展ですね。

- 〇〇 に似てますね。
- 〇〇 に比べるとどうですか。

等々。


### トピックに関して聴衆から背景を聞く

> 「なぜ」を「WHY」以外の4W1Hに言い換えて質問します。

>例文1
「なぜ進捗が予定よりも遅れているの？」
>WHATを使う：「何が遅れの要因になっているの？」
WHENを使う：「いつのきっかけから遅れ始めたの？」

>例文2
「なぜその仕様になったの？」
>WHATを使う：「そのソリューションにした決め手は何だったの？」
HOWを使う：「どういう経緯でその仕様に至ったの？」
WHEREを使う：「どこか参考にした情報があったの？」

>例文3
「なぜルールを破ったの？」
>WHATを使う：「何があなたをルール破りにさせてしまったの？」
WHEREを使う：「ルールのどういうところが守りづらかったの？」

[「なぜ」と聞かずに理由を引き出す！「詰めてる」感を減らす言い換えテク #コミュニケーション - Qiita](https://qiita.com/ynmc0214/items/068afccca9693baf298d)

- 何がきっかけでそう思いついたのですか
- このまま話を続けても大丈夫ですか

等々。


### 提案してみる

- こうやってみるのはどうでしょう。

### 思ったことをそのまま声に出す

- 時間余っちゃいましたね。

等々。


## 参考

[質問が出ないのは話し手の責任が8割。だから「質問が出る」ようにルールを決めたら、大成功した話。 | Books&Apps](https://blog.tinect.jp/?p=62265)
[質問が思い浮かばないとき、無理やり出すテクニック｜小島ツトム](https://note.com/2tom/n/n70ec882cec9e?sub_rt=share_b)
[会議を制するマワシ力。質問ありますかという愚問 | 企業ホームページ運営の心得 | Web担当者Forum](https://webtan.impress.co.jp/e/2009/10/14/6674)
[ジョブズは｢なにか質問はありますか｣を言わない | MASHING UP](https://www.mashingup.jp/2018/06/steve_jobs.html)
[「何か質問や意見ありますか」の後の無言対策 - Konifar's ZATSU](https://konifar-zatsu.hatenadiary.jp/entry/2021/05/12/232722)

- 事柄ではなく気持ちに焦点をあてる
- 断るときは、感謝、断る、代替案を用意する
- 頼むときは、頼んで良いか、頼む理由、感謝
- ほめるときは自分の気持ち
    - 具体的にほめてみる
    - 間接的にほめてみる (誰誰が言ってたよ等)

**アナウンサーはイベント半年前からスピーチ原稿を作っている** … という話が読んだ本には出てきました。話し手のプロですら準備している、いやプロだからこそ準備しているのかもしれません。話に自信が無ければ余計、準備するしかないな、と思いました。


以上、「何か質問はありますか」以外の、締めの質問のヒントになりましたか、と自分に問いつつ。読書記録おそまつさまでした :bow:
【2024マラソン32】メタバース会話から学んだオンライン会議対策

# 何の記事？
3Dアバターでのコミュニケーションから、オンラインミーティングに活かせるなと思った話を書きます。

# 誰向け？ どんな役にたつ？
- 最近ZoomやTeamsなどを使ったオンラインミーティングが増えて、難しさを感じている人
- オンラインミーティングだと暗いねと言われてしまう人

# あらすじ
最近、メタバースでの会話を始めてみて、顔が見えないアバター越しでもアバターの身振り手振りや温度感でコミュニケーションがうまく取れるものだなぁと感心しました。

ただ、弊社ではオンラインのコミュニケーションどころかIT知識も明るくない人が多く、オンラインミーティングの難しさが残っていました。
オンラインミーティングだと反応がわかり辛い、聞いているのに聞いている感をだし辛い、声がどうしてもかぶる……など。

そこで、普段メタバース会話をしている時に何気なく使っている技術が使えないかなー……と思い、記事にしてみることにしました。

# メタバース会話は何故伝わるのか
- アバターを介することで、緊張せずに済む
- アバターの表情や動きなどでリアクションを伝えられる
- テキストやボイスなど、使いたい方を選べる

顔が見えず、実際の身振り手振りがそのままアバターに伝えられない分、それを補う機能が整備されているため、違和感なくコミュニケーションが取れるようになっています。
では、オンライン会議でも同様にそれを補う対策を取れれば、オフライン会議と比べた時に、忌避感をあまり持つことなく参加してもらえるのではないでしょうか。
そう思って、それぞれの難しいところに対する対策を考えてみました。

# オンライン会議の難しいところと、解決策
### 画面操作がわからない
事前にここがわからない！……と聞いていた項目は下記です。
- 画面共有がわからない
- 音声が聞こえない時がある
- 部屋立て方法がわからない

会議に積極的に参加したい!……となったところで、操作がわからない……というのはネックなようです。
オフライン会議であれば、会議資料を共有したり、会議場所がわからず迷子になる……ということもありませんしね……。
今回聞いた内容は口頭で伝えましたが、それだけだと忘れてしまうので、今後A3用紙1枚で操作メモでも作ろうかなと思います。

### リアクションがないと辛い
リアクションボタンを上手く使うことを勧めます。
最初はどう使っていかわからない……など、対抗があるかもしれませんが、
最初に候補に上がってくる絵文字はどれも使いやすいものが揃っています。
👍や😂など、ちょっとしたときにどんどん使っていくと慣れていきますし、周りも真似して使ってくれるようになっていきます。
また、話を聞きながら頷いたり、顎に手を当てて考えるポーズをとってみたりと、オーバーリアクションかな？……と思えるくらいがビデオ通話ではちょうどいいように感じました。それこそアバターを動かすように、自分の体を動かしながら参加してみましょう。

### 会話のタイミングが被る
Bluetoothイヤホンなどで繋いでいたり、リモートデスクトップで繋いでいると、遅れは顕著です。
あまり被らないようにするコツとしては、頭をフル回転させて、相手が言い終わる数文字前位を目標にしゃべり始めると、他の人と被らずスムーズに話すことができます。

### 温度感が伝わり辛い
会議ツールのリアクションも使いつつ、よく頷いて聞くと、相手にも安心感を与えられるのではないかと思います。
電話応対でも同じ「はい」や「ええ」には色々な言い方があります。
会議の時の頷きにも、小刻みに早く頷いてみたり、深く１度だけ頷いたりと、変化をつけると聞いていることが伝わって良いと思います。


# 参考

https://web-eventbase.com/column/reaction/

https://www.nojima.co.jp/support/koneta/90422/
bokehで時系列グラフを作成し指定した時系列の背景を塗る

## bokehとは
pythonでインタラクティブなグラフが作成できるライブラリです。

## 折れ線グラフを作成する

![スクリーンショット 2024-07-16 5.14.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398994/d017f154-38a1-459f-6781-1c0eda716b6e.png)


```
# 必要なライブラリをインポート
from bokeh.plotting import figure, output_file, save
from bokeh.models import ColumnDataSource
import pandas as pd
from datetime import datetime

# データを準備
data = {
    'date': ['2024-07-01', '2024-07-02', '2024-07-03', '2024-07-04', '2024-07-05'],
    'value': [6, 7, 2, 4, 7]
}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])

# BokehのColumnDataSourceにデータを変換
source = ColumnDataSource(df)

# 出力ファイルの設定（HTMLファイル）
output_file("timeseries_line_plot.html")

# 図を作成
p = figure(title="Time Series Line Plot Example",
           x_axis_label='Date',
           y_axis_label='Value',
           x_axis_type='datetime',
           toolbar_location=None,
           background_fill_color="#fafafa")

# 折れ線グラフを追加
p.line('date', 'value', source=source, line_width=2)

# グラフを保存
save(p)
```

### 2020年から2021年のグラフの背景を灰色にする

![スクリーンショット 2024-07-16 5.15.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398994/94798e9a-d7e8-747c-5846-66f955dad79d.png)


```
# 必要なライブラリをインポート
from bokeh.plotting import figure, output_file, save
from bokeh.models import ColumnDataSource, BoxAnnotation
import pandas as pd

# データを準備
data = {
    'date': ['2024-07-01', '2024-07-02', '2024-07-03', '2024-07-04', '2024-07-05'],
    'value': [6, 7, 2, 4, 7]
}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])

# BokehのColumnDataSourceにデータを変換
source = ColumnDataSource(df)

# 出力ファイルの設定（HTMLファイル）
output_file("timeseries_line_plot_with_annotation.html")

# 図を作成
p = figure(title="Time Series Line Plot Example",
           x_axis_label='Date',
           y_axis_label='Value',
           x_axis_type='datetime',
           toolbar_location=None,
           background_fill_color="#fafafa")

# 折れ線グラフを追加
p.line('date', 'value', source=source, line_width=2)

# 特定期間の背景を灰色にする
highlight = BoxAnnotation(left=pd.to_datetime('2024-07-02'),
                          right=pd.to_datetime('2024-07-04'),
                          fill_color='gray', fill_alpha=0.3)
p.add_layout(highlight)

# グラフを保存
save(p)
```

### 今後について

https://data.nber.org/data/cycles/
こちらのサイトでアメリカのリセッション期間のデータが掲載されていますので株価のグラフをプロットし。リセッション期間の背景をぬりつぶすことでリセッション期間の株価の動きについて分析しようと思います。
初学者用

# 全体で6ヶ月のカリキュラム

> 弊社ではスクールを用意しております。
> 東京中野で開校しておりますが、
> 遠方の方はLINE通話等でも対応しております。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17342/f756e8a5-64a6-2eb1-8729-363ecdeab5e7.png)





## 初学者はまず"progate"を2ヶ月挑戦する


### 1ヶ月目:

- HTML&CSS: 上級まで（道場除く）
- JavaScript: 上級まで


### 2ヶ月目から:

- jQuery: 全レッスン
  - React: 全レッスン
    - Command Line: 全レッスン
      - Git: 全レッスン
- Sass: 全レッスン


```md
【progateの修了目安】

①HTML/CSS, JavaScript(以下Js): 1ヶ月
- 上級編も含めます
- 「道場コース」は省略してOK

- HTML/CSSはマークアップ言語(覚えゲー)で、Jsはプログラミング言語(アルゴリズムを書くことができる)
- 頭が飽和状態になったら双方切り替えて味変してよい
- ヒトの頭は2~3hが記憶力の限界。
- よって理想は: 朝、晩 2~3時間に分けて毎日取り組む


②progate修了: 2ヶ月目
- gitやcommand lineなど環境系や
- reactやjQueryなどのフレームワークやライブラリに慣れてもらいます。

```

### 3ヶ月目~6ヶ月

③３ヶ月目から実績作り
- 商談時に提出するスキルシート作り。
- 実際の企業の実際の業務内容を触りながら実践的に学びます
- 実名の企業なので、そのままスキルシートに記載していきます

---

## progateの進め方

- progateの答えは絶対見てはいけません。わからない場合は60分(or30分)おきに質問してください。
- 他の生徒とアカウントを共有してるため、毎回「リセット」ボタンを押して学習を始めて下さい。
- HTML/CSSコースとJavaScriptコースは並行してすすめて問題ないです。片方やってて脳が飽和状態になったら味変(気分転換)にもう片方やってみて下さい。
- HTML/CSS/Jsコースは1ヶ月目安ですべて終わらせて下さい。



【メモの取り方】

- なるべく紙媒体を使わない。(検索ができない。コードや画像貼れない。書き換えたり、書き足せない。)
- EvernoteやBearなどを使う
フロントエンドエンジニアが抑えるべき項目


## 初学者

初学者はまずprogateから:

- https://qiita.com/howling_wolf/items/b45d63ec08426933c1e3

## TypeScript

- https://speakerdeck.com/recruitengineers/typescript-2023

## デザインパターン

- オブジェクト指向
    - ポリモーフィズム, 継承, カプセル化
- アンチパターン
  - DRYの法則: 同じコードは書かないという思想。弊社では徹底しています
  - 車輪の再発明: 同じものを発明してしまうこと。ライブラリを使いましょう
  - グローバル汚染
  - スパゲッティコード: 依存関係が絡み合いすぎてパスタみたい
  - 秘伝のタレ: 属人化したコードのこと
- シングルトン
- 三大柱: 汎用性(=保守性)、拡張性、可読性


## デバッグ

- Chromeのデベロッパーツール(要素の検証)を使いこなす
    - 例: console画面
        - `$0` で検証中の要素にアクセスできる
- `debugger` をコード内に書いて、ブレークポイントを作る



## 運用系

- Git, Github, たまにAzure
- SourceTree
- Atlassian製品系
    - JIRA
    - Confuluence
- Slack
- スクラム開発
    - アジャイルボード
    - カンバンボード
- Evernote, Bear
- PDCAサイクル


## テスト

- (テスト駆動開発)[https://www.youtube.com/watch?v=hZuUufSOE5c&list=PLVfguzhs1GgPClzBDeVt7nrWKGQ8EFIRS&index=3]
- Jasmin
- Jest
- Selenium


## SPA -> SSR(SSG)

- React x NextJs
- (Gatsby)


## ナレッジキュレーションサイト

- Zenn
- Qiita

## エディター

- VSCode
- Sublimt Text 3


## マーケティング（フロントより）

- SEO
- Google Analytics
- OGP (SEM )
- A/Bテスト

## デザイン（フロントより）

- Figma
- Sketch


## バックエンド（フロントより）

- API通信: REST API, GraphQL
  - GET, POSTなどの通信プロトコルもセットで
- CORS（クロスオリジン)問題


## 知っておくと評価に繋がる

- API: GraphQL
- ツール系: Postman
- バックエンド系(CGI): Go, Python, Ruby on Rails
- インフラ系: もちろんAWSだが、FirebaseやHerokuなどの軽めのものでもOK
- ネイティブアプリ開発知見



## ハイブリッドアプリ

- PWA

## おさえておくと評価に繋がる

- 基本情報技術者試験、応用情報技術者試験
- Google Trends, Node Trends
- Macのショートカット（まじで）
    - Spotlight検索:
        - ⌘ + Space して 2~3文字打つだけでアプリを手前にもってける
    - Dockの切り替え
        - ⌘ + Tab
        - ⌘ + Shift + Tab
    - ⌘ + Q: アプリのkill（停止）
    - ⌘ + H: アプリの非表示
    - ⌘ + T: タブの生成
    - ⌘ + N: 新規生成


## 知っトク！言葉

- CUI, GUI
- BaaS: Firebaseとか
- CI: Jenkinsとか
- テストツール: Jasminとか
- SPA, SSR
- API通信系: RESTfulAPI, GraphQL, SQL, RDB
- インフラ系: AWS
- CMS: WordPress
- ECサイト: Base, Stores.jp
- userAgent
- 三項演算子
- 関数型プログラミング
- オブジェクト指向
- デザインパターン
- ベンダープレフィックス
- サードパーティ
Javaで「メソッドの定義」の動作を確認してみた

# 概要

Javaで「メソッドの定義」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/method/index2.html

# 実装

以下のファイルを作成しました。
```JSample2_1.java
class JSample2_1{
  public static void main(String args[]){
    hello();
    bye();
    hellobye();
  }

  private static void hello(){
    System.out.println("こんにちは。");
  }

  private static void bye(){
    System.out.println("さようなら。");
  }

  private static void hellobye(){
    hello();
    bye();
  }
}
```

以下のコマンドを実行しました。
```
$ javac JSample2_1.java 
$ java JSample2_1 
こんにちは。
さようなら。
こんにちは。
さようなら。
```

# まとめ

何かの役に立てばと。
2024/7/16主にITとかセキュリティの記事

MSI、ユーザーの個人情報を公開状態に設定。60万件以上が誰でも閲覧できる状態に(7/14)
https://www.nichepcgamer.com/archives/msi-web-site-critical-vulnerability.html

憲法「通信の秘密」は善良な市民よりハッカーを守る？能動的サイバー防御報道の奇怪
新聞に喝！　国防ジャーナリスト・小笠原理恵(7/14)
https://www.sankei.com/article/20240714-DAVB5VXTGJLMTLANP52VATEHWQ/

「犯罪関与の回線、迅速・完全遮断」…韓国政府ボイスフィッシング対策(7/14)
https://www.afpbb.com/articles/-/3528953

政府が「メタ情報」を平時監視へ　能動的サイバー防御巡り検討(7/14)
https://www.47news.jp/11197323.html

SECのルールの改正によるサイバーセキュリティ開示 (10-K) IBM, Intel, Boeing, AMEX, Jonson & Johnson, Pfizer, Coca-Cola. McDonaldsの場合(7/14)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2024/07/post-4c52c5.html

能動的サイバー防御で「国民の安全確保」 英NCSC長官 中ロなど4カ国警戒(7/14)
https://www.nikkei.com/article/DGKKZO82082330T10C24A7EA3000/

攻撃されやすい人向け、Gmail「強固なセキュリティ機能」が誰でも利用しやすくなる(7/14)
https://forbesjapan.com/articles/detail/72333

特定秘密、海自現場と乖離＝「漏えい」定義も認識せず―不正常態化、複合的要因(7/14)
https://www.risktaisaku.com/articles/-/93382

巨額の暗号資産詐欺のインフラとして機能、カンボジアに潜む110億ドル規模の“犯罪エコシステム”の正体(7/14)
https://wired.jp/article/pig-butchering-scam-crypto-huione-guarantee/

【Go言語】におけるテスト駆動開発の実践：マイグレーションファイル作成からSQLインジェクション対策まで(7/14)
https://zenn.dev/kazu098/articles/85d39201dbe7b8

不正アクセス事件　結果へ焦り、名刺盗み見 「Sansan取れないかな」 あしき風土、社員に浸透(7/14)
https://www.nikkei.com/article/DGKKZO82081760T10C24A7CM0000/

ブテリン氏、イーサリアムの強みと弱み、その「強化」を語る(7/14)
https://www.coindeskjapan.com/240529/

自社データ×生成AIがもたらすビジネス革新！メリットや活用方法、注意点を徹底解説(7/14)
https://weel.co.jp/media/use-of-in-house-data/

NewsPicks トピックス 『デジタル政策と未来社会』のまとめ(2024.7.8～2024.7.14）
https://blogs.itmedia.co.jp/business20/2024/07/newspicks_2024782024714.html

イランにおけるサイバー攻撃の現状と課題とは？
https://cybersecurity-park.com/1807/

“ロシアの「ハイブリッド攻撃」欧州で激化”NATO 各国対抗へ(7/14)
https://www3.nhk.or.jp/news/html/20240714/k10014511521000.html
CliticGPT

https://openai.com/index/finding-gpt4s-mistakes-with-gpt-4/

いつでも読み返せるように上記ページの訳をメモ。。。

## CliticGPTとは
GPT-4に基づくモデルであるCriticGPTは、ChatGPTの応答の批評を書き、人間のトレーナーがRLHF中に間違いを見つけるのを助けます。

## 概要
私たちは、GPT-4 をベースにした CriticGPT というモデルをトレーニングし、ChatGPT のコード出力のエラーを検出できるようにしました。その結果、CriticGPT の助けを借りて ChatGPT コードをレビューすると、助けを借りていない人よりも 60% 優れたパフォーマンスを発揮することがわかりました。私たちは、CriticGPT のようなモデルを RLHF ラベリング パイプラインに統合し、トレーナーに明示的な AI 支援を提供する作業を開始しています。これは、より優れたツールがなければ人間が評価するのが難しい高度な AI システムの出力を評価できるようにする第一歩です。

ChatGPT を動かす GPT-4 シリーズのモデルは、「人間からのフィードバックによる強化学習」 ( RLHF )を通じて、有用かつインタラクティブになるように調整されています。RLHF の重要な部分は、AI トレーナーと呼ばれる人々が ChatGPT のさまざまな応答を互いに評価する比較を収集することです。

推論とモデルの動作が進歩するにつれて、ChatGPT はより正確になり、その間違いはより微妙になります。これにより、AI トレーナーが不正確な点を発見することが難しくなり、RLHF を強化する比較タスクがはるかに困難になります。これは RLHF の基本的な制限であり、フィードバックを提供できる人よりもモデルの知識が徐々に増えるにつれて、モデルの調整がますます困難になる可能性があります。

この課題を解決するために、私たちはCriticGPT にChatGPT の回答の不正確な点を指摘する批評を書くようにトレーニングしました。

![code_desktop_dark__2_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/3baad5c8-b467-3b97-85f9-8bdde876d606.jpeg)

CriticGPT の提案は常に正しいとは限りませんが、AI の助けを借りない場合よりも、モデルが作成した回答でトレーナーがより多くの問題を見つけるのに役立つことがわかりました。さらに、人々が CriticGPT を使用すると、AI がスキルを増強し、人々が単独で作業する場合よりも包括的な批評が得られ、モデルが単独で作業する場合よりも幻覚的なバグが少なくなります。私たちの実験では、2 人目のランダムなトレーナーが、支援を受けていない人からの批評よりも、Human+CriticGPT チームからの批評を 60% 以上好むという結果が出ました。

![bug_chart_desktop_light-1__1_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/7157a176-edd1-7b45-8c75-6344cfc9d9a8.jpeg)

## 方法
CriticGPT も ChatGPT と同様に RLHF でトレーニングされました。しかし ChatGPT とは異なり、CriticGPT は間違いを含む入力を大量に確認し、それを批評する必要がありました。AI トレーナーに、これらの間違いを ChatGPT によって記述されたコードに手動で挿入し、挿入したバグを見つけたかのようにサンプルのフィードバックを書いてもらいました。次に、同じ人が変更されたコードの複数の批評を比較し、批評が挿入したバグを見つけたことを簡単に判断できるようにしました。実験では、CriticGPT が挿入されたバグと、以前のトレーナーが見つけた「自然発生的な」ChatGPT バグの両方を検出できるかどうかを調べました。自然発生的なバグの場合、63% のケースで、CriticGPT の批評がトレーナーに ChatGPT の批評よりも好まれることがわかりました。これは、新しい批評家が「細かい点にこだわる」(役に立たない小さな苦情) ことを少なくし、問題を幻覚に見せる頻度も低いためです。

また、批評報酬モデルに対して追加のテスト時間検索を使用することで、より長く包括的な批評を生成できることもわかりました。この検索手順により、コード内の問題をどれだけ積極的に探すかのバランスを取り、幻覚と検出されたバグの数の間で精度と再現率のトレードオフを設定できます。つまり、RLHF に可能な限り役立つ批評を生成できるということです。詳細については、当社の研究論文をご覧ください。

## 制限事項
* 私たちは、非常に短い ChatGPT の回答で CriticGPT をトレーニングしました。将来のエージェントを監督するには、トレーナーが長くて複雑なタスクを理解するのに役立つ方法を開発する必要があります。

* モデルは依然として幻覚を起こし、トレーナーはそれらの幻覚を見た後にラベル付けの間違いを犯すことがあります。

* 現実世界では、間違いが回答の多くの部分に分散している場合があります。私たちの作業は、1 か所で指摘できる間違いに焦点を当てていますが、将来的には分散した間違いにも取り組む必要があります。

* CriticGPT が役立つことは限られています。タスクまたは応答が非常に複雑な場合は、モデルの支援を受けた専門家であっても正しく評価できない可能性があります。

## 次のステップ
ますます複雑化する AI システムを調整するには、より優れたツールが必要です。CriticGPT の研究では、RLHF を GPT-4 に適用すると、人間が GPT-4 用のより優れた RLHF データを生成するのに役立つ可能性があることがわかりました。私たちはこの作業をさらに拡大し、実践する予定です。
Grove Base HAT for Raspberry Pi Zero を使う

Grove 端子が使いたかったので、Grove Base HAT for Raspberry Pi Zero を購入してみました。

![IMG_20240715_174510.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/acb55d14-c394-85f1-d595-50debd5dc10e.jpeg)

- D15
- D5
- PWM
- A0
- I2C
- A2
- UART
- A4

のコネクタが搭載されています。A0/A2/A4というのは何かな?


裏側。ICはバッファかと思ったら、STM32マイコンらしい。
![IMG_20240715_174523.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/3092f3aa-a8bb-1852-bdc3-87374b41243d.jpeg)

A0/A2/A4は、RaspberryPiとは直接つながってなくて、STM32マイコンにつながっている。
STM32マイコンは、I2C で RaspberryPi と通信し、ADコンバータとして動作しているらしい。



![IMG_20240715_174538.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/d6af1c45-6fa5-7595-33e5-cd912d1c7f72.jpeg)

for Raspberry Pi Zero となってますが、Raspberry Pi 3 にアタッチして使いました。

![IMG_20240715_174555.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/11f6149c-227d-0b6e-56a8-5686cf3777a6.jpeg)

連結ピンが搭載されているので、別のHATをスタックすることができます。

# 資料

公式 Wiki はこちら

https://wiki.seeedstudio.com/Grove_Base_Hat_for_Raspberry_Pi_Zero/


## 回路図を参照する

I2C 関係の回路図を確認したいのだけれど、オンラインビューアは何も表示されない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/45a17d4c-73a3-0e80-6446-0ef27b6ff3c4.png)


Wiki の 「Resources」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/3ecf74f3-8945-8ca1-698d-0a5ef757efac.png)

Eagle とあるが、この中に pdf も入っている。

# I2C を使いたい

先の回路図を見てみると、I2C と名前のついている Grove コネクタは GPIO2 と GPIO3 につながっている。標準の I2C のピンアサインですね。プルアップ抵抗もついているのでつなぐだけで使えそうです。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/29db6083-69fa-ebef-deaa-eab92a4cfb5d.png)


# NeoPixel を使いたい

この HAT 経由で NeoPixel をつなぐにはどうしたらいいかな?

https://learn.adafruit.com/neopixels-on-raspberry-pi/raspberry-pi-wiring
によると、GPIOGPIO10、GPIO12、GPIO18、または GPIO21 に接続する必要があるそうです。

![image.png](https://qiita-image-store.s3.ap-nohttps://learn.adafruit.com/neopixels-on-raspberry-pi/raspberry-pi-wiring
によると、GPIOGPIO10、GPIO12、GPIO18、または GPIO21 に接続する必要があるそうです。
rtheast-1.amazonaws.com/0/139524/be6293d5-6127-ac89-a6da-08efeb915592.png)
Grove Base HAT for Raspberry Pi Zero では、 PWM のコネクタが GPIO12 に割り当てられているのでこれを使いました。

# おまけ NeoPixel を Python で動かす

ライブラリインストール
```
$ sudo pip install --break-system-package Adafruit-Blinka
$ sudo pip install --break-system-package rpi_ws281x adafruit-circuitpython-neopixel
Looking in indexe 
```

ソースコード
```
import board
import neopixel
pixels = neopixel.NeoPixel(board.D12,30)
pixels[0]=(255,0,0)

```
あれれ?

```


# python3 neopixel.py 
Traceback (most recent call last):
  File "/home/pi/neopixel.py", line 2, in <module>
    import neopixel
  File "/home/pi/neopixel.py", line 3, in <module>
    pixels = neopixel.NeoPixel(board.D12,30)
             ^^^^^^^^^^^^^^^^^
AttributeError: partially initialized module 'neopixel' has no attribute 'NeoPixel' (most likely due to a circular import). Did you mean: 'neopixel'?
```

ただ単にプログラムを neopixel.py としてしまったのでモジュールと名前の競合が起きただけでした。
プログラム名を led.py にしたらうまくいきました。
javascript-algorithmsでアルゴリズムを学ぼう！

https://github.com/trekhleb/javascript-algorithms/blob/master/README.ja-JP.md

```text
このリポジトリには、JavaScriptベースの一般的なアルゴリズムとデータ構造に関する多数のサンプルが含まれています。

各アルゴリズムとデータ構造には独自のREADMEがあります。 関連する説明、そして参考資料 (YouTube動画)も含まれています。
```
すごい！

データ構造、アルゴリズム、aradigmによるアルゴリズムという項目に分けられておりそれぞれの項目内でさらに各要素に初心者、上級者のタグがつけられている。

内容的には初心者用のデータ構造とアルゴリズムに関する入門書では乗っていないような内容も含まれているため、学びごたえもありそうで良いと思います。

Repository名の通りjavascriptで実装されているので他の言語に書き直したりしても面白そうです。
30歳まで1冊も技術書を読んだことのなかった自分が転職後1年間で読んだものとその所感

## はじめに
はじめまして [＠Y.Kishi](URL "https://qiita.com/Y_Kishi") です。
来歴などについてはプロフィールをご参照ください。

転職して一年が経ち、そろそろなんらかのアウトプットを出したいなと思ったため、
ここ1年程で読んだ技術書をまとめたいと思います。

お恥ずかしながら転職するまで技術書というものを全く読んだことが無かったため、
これと言ってニッチなものはないですが、
読み始めるものを探している初心者の方にとっては優しい内容となっていると嬉しい。

※個人的に感じた読みやすさ順に並べましたので参考にしてください。

## ★： すらすら読める
### [リーダブルコード -より良いコードを書くためのシンプルで実践的なテクニック]("https://www.amazon.co.jp/dp/4873115655")
はい、リーダブルコードすら読んだことがありませんでした。
ひとまず読んでいないならこれを読むことをおすすめします。

チームでものを作る全ての方に必携の、可読性とは何かを優しく教えてくれる一冊。

###  [コンピュータはなぜ動くのか 第２版 知っておきたいハードウエア＆ソフトウエアの基礎知識]("https://www.amazon.co.jp/dp/429600123X")
コンピューターのハード面の基礎知識を解説している。

メモリ管理など言語の学習や様々な場面で前提となる知識になっている場合があるため、
読んでおいて損はないと思います。

### [プリンシプル オブ プログラミング 3年目までに身につけたい一生役立つ101の原理原則]("https://www.amazon.co.jp/dp/4798046140")
リーダブルコードからさらに一歩前進。

しばしば用いられる共通原則やキーワード（DRYやYAGNIとか）
などについて網羅的に解説しており、持っていれば辞書代わりにも使えます。

### [ドメイン駆動設計入門 ボトムアップでわかる！ドメイン駆動設計の基本]("https://www.amazon.co.jp/dp/B082WXZVPC")
ドメイン駆動設計の関連書籍の中では一番やさしく書かれているものであると思われる。
これだけを読んでDDDをやろうとするのは危険であるが、
DDD初学者が具体的にコードにどのように落とし込むかを考えたり、
コードリーディングの助けにする際には役に立ってくれるでしょう。

### [アジャイルサムライ−達人開発者への道]("https://www.amazon.co.jp/dp/4274068560")
チームでスクラム開発をやろうということになり、
転職前はずっとウォーターフォール開発であったため学習のために購入
（ちなみにそのスクラムは全てのアンチパターンを踏み倒してゾンビ化し解体した）

## ★★： そこそこのカロリー
### [達人プログラマー ―熟達に向けたあなたの旅― 第2版](URL "https://www.amazon.co.jp/dp/B08T9BXSVD")
プログラマーのソフトスキルの教科書として非常に秀逸な内容でした。
あなたのメンタルモデルの形成に一役買ってくれることでしょう。

### [ソフトウェアアーキテクチャの基礎 ―エンジニアリングに基づく体系的アプローチ]("https://www.amazon.co.jp/dp/4873119820")
アーキテクチャを学ぶならまずはここからかと思い購入。
アーキテクチャの各要素とその説明、
主要なアーキテクチャの種類と解説が書かれています。

### [Clean Architecture　達人に学ぶソフトウェアの構造と設計]("https://www.amazon.co.jp/dp/4048930656")
クリーンアーキテクチャを学ぶ為に購入。
購入当初思っていた様な具体的な内容ではなく、
再利用性の高いアーキテクチャを実現するために必要な要素について書かれている。

### [リファクタリング(第2版): 既存のコードを安全に改善する]("https://www.amazon.co.jp/dp/4274224546")
大きめのリファクタ業務の為に購入。
リファクタリングを行うタイミングと必要性、
具体的にどうやって行うのか等参考になった。

### [セキュア・バイ・デザイン: 安全なソフトウェア設計]("https://www.amazon.co.jp/gp/product/B00GRKD6XU")
ドメイン駆動設計がセキュリティ面に及ぼす有用な点について解説している。

### [実践ドメイン駆動設計]("https://www.amazon.co.jp/dp/479813161X")
ドメイン駆動設計の原点に近しいものとなるエヴァンズ本が書かれたのは結構前な為、
より現状に適したDDDの実現方法について解説している。

## ★★★：熟読の必要あり
### [エリック・エヴァンスのドメイン駆動設計]("https://www.amazon.co.jp/gp/product/B00GRKD6XU")
プロダクト内でドメイン駆動設計（DDD）を用いている為、
学習のため転職後最初に購入。

正直難しい考えで当初は理解しきれていなかったが他の本も読みつつ業務をする中で
近頃は大分インプット出来てきたのではないかと思いたい。

### [オブジェクト指向における再利用のためのデザインパターン]("https://www.amazon.co.jp/dp/4797311126")
有名なGoFのデザインパターン本。
全部読むというよりはざっと目を通した後辞書代わりに置いておくと良いかも。

### [アナリシスパターン 新装版: 再利用可能なオブジェクトモデル]("https://www.amazon.co.jp/dp/4894716933")
上記同様辞書代わりに置いてあります。
GoFはデザインパターン、こちらはモデリングの参考書として。

### [A Philosophy of Software Design, 2nd Edition]("https://www.amazon.co.jp/dp/B09B8LFKQL")
クリーンアーキテクチャを神格化してはいけないという言説を時折目にするため、
他のものも参照しようと思い購入。
共通面も多いが上記の本と食い違う部分もあるため、
異なる思想のトレードオフを考えるのが学習に良いのだという学びがあった。
内容自体は★2なのですが日本語訳が無いので★3です

## さいごに
積読もたくさん生まれてしまったので消化していきたい。
今月と来月あたり良さそうな技術書がたくさん刊行されるようで、
また増えてしまうのですが……
Amazon Linux 2023 で libvips を使う

Rails 7のActive Storageなどでlibvipsを使いたいときのメモ。
Amazon Linux 2023は、[APELに対応していない](https://repost.aws/ja/knowledge-center/ec2-enable-epel)ため、手動でビルドする必要があります。

以下を事前にインストール
```
yum install build-essential pkg-config glib2-static expat-devel ImageMagick-devel libjpeg-turbo-devel libpng-devel libwebp-devel meson
```

libjpeg-turbo-devel libpng-devel libwebp-devel が無くてもビルドは通ってしまうので注意。なおテストを通したり、JPEG, PNG, WEBPをそれぞれ使用するにはこれらが必要。

まずはクローン
```
git clone git@github.com:libvips/libvips.git
cd libvips
```

configureを実施
```
sudo meson setup build --prefix /usr/local
```

ライブラリ不足などでconfigureをやり直すときは--reconfigureを付ける
```
sudo meson setup build --prefix /usr/local --reconfigure
```

ビルド
```
cd build
sudo meson compile
sudo meson test
sudo meson install
```

~/.bashrc の末尾に以下を追加してパスを通す
```
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib64"
```

設定が終わったら、Railsのプロセスを再起動してActive Storageで画像をリサイズしている箇所などで動作確認してみましょう。
AttributeError: module 'wandb.proto.wandb_internal_pb2' has no attribute 'Result'

とあるライブラリを使用しようとしたときに以下のエラーに遭遇…。

```AttributeError: module 'wandb.proto.wandb_internal_pb2' has no attribute 'Result'```

エラーが出たバージョン
|library|version|
|-|-|
|protobuf|3.20.3|
|wandb|0.15.3|

以下のバージョンに変更すると解決した。
|library|version|
|-|-|
|protobuf|3.20.1|
|wandb|0.16.6|
LINE WORKSのリアクションアイコンとその意味を知り、その先の運用を考える

# はじめに
会社でLINE WORKSを利用し、その活用も増えてきた事で度々目にするリアクションアイコン。
ある日、リアクションアイコンでこんな話題になりました。

### 内容

* 上司相手に使いにくい **（わかる）**
* アイコンの意味が人それぞれの解釈で異なる **（脅威）**

考えてみれば当たり前ですが、リアクションアイコンの解釈が個人で異なる、というのはよくないな、と思いLINE WORKSのリアクションアイコンの意味を調査する事に。

## LINE WORKSのリアクションアイコンの意味
調べてみると公式にアイコンの意味が掲載されていました。

https://lineworks-blog.ryogeisya.co.jp/faq/1232/

### アイコンの内容
左から **感謝/OK/最高/笑い/泣き/拍手** との事。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119455/244d384a-155e-7f0b-dd8d-a16666adc0de.png)

文字とアイコンを比較して見れば分からなくもないですが **感謝アイコン** は **お願いアイコン** と思っている人もいるので、意思疎通を図る上で何かしらルールの様な周知を行う必要があると感じました。

しかし、このリアクション機能が何故作られたのかよく分かってないので、理解を深めるべくリアクション機能のご先祖様を調査する事にしました。

## リアクションの元祖
リアクションの元祖を調べていると **いいねボタン** に辿り着きました（それ以外にもあるかもしれませんが）

https://ja.wikipedia.org/wiki/%E3%81%84%E3%81%84%E3%81%AD!%E3%83%9C%E3%82%BF%E3%83%B3

社内でも、リアクションアイコンの意味を深く考えずに **いいね** 程度の解釈で捉えていただければよいのでは、と思いましたが「上司相手に使いにくい」というのは残ったまま。

# まとめ

* LINE WORKSのリアクションアイコンは公式に意味が書いてある
* 運用という程ではないがアイコンの説明と社内ルールっぽい事は決めておいた方が良い（気がする）
railsレンダリングを減らしたい

## はじめに
そこまでログを意識していなければ、レンダリングがログに出ていても見過ごしてしまうと思います。
ただ、レンダリングはパフォーマンスに影響するので改善できるならしておきたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/794432a8-6c4f-77b5-ee7f-2d7a2cc50bcf.png)

今回はレンダリングを減らす方法を試してみたいと思います。

## レンダリングを減らす方法
railsでレンダリングを減らす方法は、collectionです。
collectionを使って、同じレンダリングを再利用してあげれば良いです。
今回はcollectionのやり方で詰まったところもあったのでその部分も紹介していきます。

### 部分テンプレートの部分をひとつにまとめる
scaffoldでusersテーブルと関連ファイルを作成します。
`index.html.erb`はこのように記載されていると思います。
`<%= render user %>`の部分でレンダリングが個別に行われるため、頻繁にレンダリングが発生してしまいます。
```erb:app/views/users/index.html.erb
<div id="users">
  <% @users.each do |user| %>
    <%= render user %>

    <p>
      <%= link_to "Show this user", user %>
    </p>
  <% end %>
</div>
```

まずは上記のlink_toの部分を以下のように`_user.html.erb`にまとめます。
```erb:app/views/users/_user.html.erb
<div id="<%= dom_id user %>">
  <p>
    <strong>Name:</strong>
    <%= user.name %>
  </p>

  <p>
    <strong>Email:</strong>
    <%= user.email %>
  </p>

</div>

<p>
  <%= link_to "Show this user", user %>
</p>
```

### collectionで部分テンプレートを再利用する
以下のように、colletionに@usersを渡すことで、同じレンダリングを再利用することができます。
```erb:app/views/users/index.html.erb
<div id="users">
  <%= render partial: "user", collection: @users %>
</div>
```

### ログを確認
レンダリングが一つになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/391d1754-4496-dd76-0e89-c8e4eabb570e.png)

### renderのやり方で詰まったところ
partialを省略して、以下のやり方でやろうとしたのですがエラーが出てしまいました。
```erb
<%= render "user", collection: @users %>
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/7b5bf356-50c3-280b-4cf1-57440d5fc0b7.png)

partialはcollectionを使用するとき、省略できないみたいです。

## 終わりに
レンダリングを減らす方法をためしてみました。
パフォーマンスを意識し、レンダリング部分も意識していきたいです。
Transparent Backgroundでの背景透過がいい感じだった！

背景透過ツールのTransparent Backgroundを使ってみたらなかなかいい感じだったので紹介です。


https://github.com/plemeri/transparent-background


## Install
Install from localで入れました。
```sh
git clone https://github.com/plemeri/transparent-background.git
cd transparent-backbround
pip --extra-index-url https://download.pytorch.org/whl/cu118 install .
```

## Command Line
私はCommand Lineからの使用で試してみました。

```sh
# for apple silicon mps backend, use "PYTORCH_ENABLE_MPS_FALLBACK=1" before the command (requires torch >= 1.13)
$ transparent-background --source [SOURCE]
$ transparent-background --source [SOURCE] --dest [DEST] --threshold [THRESHOLD] --type [TYPE] --ckpt [CKPT] --mode [MODE]  (--fast) (--jit)
```
引数の詳細はgithubをご確認ください。

GUIやPython APIもあるようなので
試してみたいですね。

## Example

これが…
![test1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/97f74541-52d5-14cf-edbd-656fec86b407.jpeg)
こう！
![test1_rgba.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/9592c88a-2f36-5906-a888-9dae1078953b.png)
なかなかいい感じ！

これも…
![test2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/af09a550-d5b1-930d-a4dc-1f24b3179831.jpeg)
こう！
![test2_rgba.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/f605a557-1f45-bbb2-3dcb-5cf8b0e263e1.png)
結構いい感じ！

これは…
![images07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/c18a6a3c-376e-1805-83b7-73f1d23d6ae1.jpeg)
こう
![images07_rgba.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/84eb407f-6924-1b61-b342-5e1483ec0551.png)
失敗するパターンもありますね…。

※画像貼ると透過部分は白で補完されてしまっていますが実際は透過画像になっています。

ちょっと甘い部分はありますが、個人的にはこれだけできれば満足です。
チャットボットにおすすめのAPIまとめ【初学者向け】

:::note info
この記事は、チャットボットなどで役立つおすすめの生成系APIを紹介しています
:::

# はじめに

初めまして、僕は情報系の学部に通う大学4年生でエンジニアを目指しています。

そろそろ開発経験を積みたいなぁとインターン探しをしていたところ、どのインターンも応募条件に開発経験が必須と書いてあり、いや応募できないじゃん！とつっこむ日々を送っています。開発経験を積むために開発経験が必要、、、理系学生あるあるですね笑

そこで、なんでもいいから個人開発をして面接で見せられるものが欲しい！と考えて、とりあえずチャットボットを作成してみよう！と考える学生が多いのではないでしょうか。僕もまずは簡単なチャットボットからはじめようと思い、初めての個人開発に挑戦しました（Reactを勉強中だったので、Next.jsを使いました）。チャットボットに関する記事はたくさん存在しますが、今話題のChatGPTなどを使った記事があまりなく、APIの使用に苦労しました。

そこで、チャットボットなどの対話型のアプリで使える生成系のAPIを比較し、アプリ開発初心者でも簡単に使えるAPIをまとめてみました。初めてのアプリ開発でチャットボットを作成しようとしている方向けの記事なので、とてもシンプルで分かりやすいと思います。

:::note warn
typescriptでの実装を前提としています。それ以外の言語でもAPIの叩き方自体は大きく変わらないと思うので、問題ないと思います。
:::


# APIのリスト

今回比較するAPIはこちらです。
- ChatGPT API
- Gemini API
- Talk API
- LINE WORKS API

# Gemini APIがおすすめ！

各APIについて使い勝手などを説明しようかとも思いましたが、僕自身あまり使いこなせてないのと需要がないだろうと思うので省略（後述）します。 <font color="gree">**結局のところGemini APIが圧倒的におすすめです！**</font> 以上！！さっそくGemini APIを使ってチャットボットを作成してみてください笑！

# Gemini APIがおすすめの理由

一応、なぜGemini APIがおすすめなのか簡単に説明しておきます。
| API | 使い勝手 |
|:---:|---------|
| Gemini API | とにかくオススメ！一部有料ですが、1分あたり15リクエストまでは無料で使えます！チャットボットを作成するには無料版で十分です。Googleが開発しているので精度も十分ですし、何よりコードがシンプルです([これだけ](#サンプルコード)で完成です！)|
| ChatGPT API | 有料です。１リクエストごとに料金が発生するので、試しにAPIを叩いただけでもお金が取られてしまいます。本格的なサービスを開発するならおすすめですが、ポートフォリオ用のアプリならわざわざ課金をしなくてもいいでしょう。 [ChatGPT API Key](https://platform.openai.com/docs/api-reference/authentication)|
| Tak API | 無料ですし、使い方も簡単です。コードを書かなくても、サイト上でどのような返答が返ってくるかのデモを行うこともできます。しかし、自然言語処理によって対話するAIなので回答の精度がイマイチです、、、一問一答はできますが今までの会話を踏まえた回答はできないので、ターン数が増えるほど不自然な会話になります。[Talk API](https://a3rt.recruit.co.jp/product/talkAPI/)
| LINE WORKS API | 無料です。Talk APIよりも精度が高いのでGemini APIの次におすすめです。また、複数種類のAPIがあるため取り扱うリソースによって使い分けができるみたいです。LINE WORKS APIを使う前に、Gemini APIに出会ってしまったので、実際にコードを書いてはいないのですがGemini APIほどシンプルには書けなそうだなと感じました。この[サイト](https://zenn.dev/collabostyle/articles/217f93a5b12f58)がわかりやすかったです。　[LINE WORKS API](https://developers.worksmobile.com/jp/docs/api)|

僕自身、Gemini API以外に関してはただコピペしていただけであまりきちんと理解していません。ですので、もし他のAPIを使いたい場合には、ドキュメントやわかりやすく解説してくれてる記事があるのでそちらを参照してください笑。

# サンプルコード（Typescript）
```typescript
// Gemini APIに必要なインポート文
import { GoogleGenerativeAI } from "@google/generative-ai";
// Gemini API を実行
const api = 取得したAPI_KEY; //ここには自分で取得したAPI KEYを入れてください
const genAI = new GoogleGenerativeAI(api);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash-latest" });
const result = await model.generateContent("送りたいメッセージ");
const response = await result.response;
const text = response.text();
// 返答結果の表示
console.log(text);
```
たったこれだけです！  

# 最後に

これからチャットボットを開発しようとしている僕みたいな初学者の方に少しでも参考になればうれしいです。これからも一緒に頑張りましょう！
react-routerでネストした画面遷移をする方法

## react-routerでネストしたURLの配下で画面遷移ができなかったときの解決方法について

# バージョン
react-router-dom: 6.24.1

# やりたいこと
Page1配下にあるDetailA、DetailBのリンクをクリック時に、詳細画面のコンポーネントのみ表示する
⇒Page1ページですというテキストが表示されないようにする

# 今回の原因
* Page1配下にあるDetailA、DetailBのリンクをクリック時、画面遷移したときにPage1とDetailA、DetailBの両方がヒットするようになRoute設定になっていたこと。
* それぞれのコンポーネント（DetailA、DetailB）の親ルートであるpage1をRouteで括れていなかったため。

# 解決方法
* ネスト化したコンポーネントをRouteで括る
* 親ルートのindexをtureにする。
⇒親ルートのパスに合致した場合親ルートのパスを通って配下のURL（path）にアクセスできるようにする。

# 画面遷移して詳細画面のコンポーネントのみ表示できなかったときのコード
```App.jsx
import { BrowserRouter, Link, Routes, Route} from "react-router-dom";
import { Home } from "./Home";
import { Page1 } from "./Page1";
import { Page2 } from "./Page2";
import { Page1DetailA } from "./Page1DetailA";
import { Page1DetailB } from "./Page1DetailB";

export default function App() {
  return(
    <BrowserRouter>
    <div className="App">
      <Link to="/">Home</Link>
      <br />
      <Link to="/Page1">Page1</Link>
      <br />
      <Link to="/Page2">Page2</Link>
    </div>
    <Routes>
      <Route path="/" element={<Home />} />
      <Route path="/page1" element={<Page1 />} >
          <Route path="detailA" element={<Page1DetailA />} />
          <Route path="detailB" element={<Page1DetailB />} />
          </Route>
      <Route path="/page2" element={<Page2 />} />
    </Routes>
    </BrowserRouter>
  );
}
```
```Page1.jsx
import { Link,Outlet } from "react-router-dom";

export const Page1 = () => {
    return(
        <div>
            <h1>Page1ページです</h1>
            <nav>
            <Link to="detailA">DetailA</Link>
            <br/>
            <Link to="detailB">DetailB</Link>
            </nav>
            <Outlet />
        </div>
    );
};
```
# 実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789688/77aedcc0-8226-9059-4bf9-d5b75f0b1d4a.png)


# 画面遷移して詳細画面のコンポーネントのみ表示できた際のコード
```App.jsx
import { BrowserRouter, Link, Routes, Route} from "react-router-dom";
import { Home } from "./Home";
import { Page1 } from "./Page1";
import { Page2 } from "./Page2";
import { Page1DetailA } from "./Page1DetailA";
import { Page1DetailB } from "./Page1DetailB";

export default function App() {
  return(
    <BrowserRouter>
    <div className="App">
      <Link to="/">Home</Link>
      <br />
      <Link to="/Page1">Page1</Link>
      <br />
      <Link to="/Page2">Page2</Link>
    </div>
    <Routes>
      <Route path="/" element={<Home />} />
      <Route path="/page1">
      <Route index={true} element={<Page1 />} />
          <Route path="detailA" element={<Page1DetailA />} />
          <Route path="detailB" element={<Page1DetailB />} />
          </Route>
      <Route path="/page2" element={<Page2 />} />
    </Routes>
    </BrowserRouter>
  );
}
```
補足：Page1.jsxはどちらの場合も同じコードになります。

# 実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789688/e337c247-a0aa-fd5e-5660-f60db3c86a4e.png)