OmniAICreator/Qiita-1.07M huggingface dataset:
🚀 強化学習によるエージェントAIの最適化: 最新技術と実践的アプローチ



## **1️⃣ 強化学習とは？エージェントAIにおける役割**  

強化学習（Reinforcement Learning, RL）は、エージェントAIの最適化において極めて重要な技術です。従来のルールベースAIや教師あり学習では対応しきれない**未知の環境への適応能力** を持つため、ロボティクス、自動運転、金融市場予測、ゲームAIなど、多くの分野で活用されています。  

🎯 **強化学習の特徴:**  
✔️ 環境とのインタラクションを通じて最適な行動を学習  
✔️ 明示的な教師データなしで試行錯誤による最適化が可能  
✔️ 報酬関数を活用して、長期的な利益を最大化  

💡 **エージェントAIにおける強化学習の役割:**  
- 複雑な意思決定を自動化  
- 環境の変化に応じた適応能力向上  
- 動的システムにおけるリアルタイム最適化  

それでは、実際にどのようにエージェントAIの最適化に強化学習を活用できるのか、詳しく見ていきましょう。  

---

## **2️⃣ 強化学習によるエージェントAIの最適化手法**  

### **🔹 1. モデルベース vs. モデルフリー強化学習**  

強化学習には、大きく**モデルベース（Model-Based）** と **モデルフリー（Model-Free）** の2つの手法があります。  

#### **📌 モデルベース強化学習**  
- **環境の動作をモデル化し、事前に最適な戦略を計算する手法**。  
- 学習が高速でサンプル効率が高いが、環境のダイナミクスを正確にモデル化する必要がある。  

🛠 **技術例:**  
- AlphaGo（モンテカルロ木探索 + 深層学習）  
- ロボティクス（シミュレーションベースの学習）  

#### **📌 モデルフリー強化学習**  
- **環境モデルなしで、試行錯誤によって最適な戦略を学習する手法**。  
- 直接的な報酬から学習するため、未知の環境にも適応可能。  

🛠 **技術例:**  
- Deep Q-Networks (DQN)  
- Proximal Policy Optimization (PPO)  
- Soft Actor-Critic (SAC)  

💡 **結論:**  
**環境の予測が可能な場合はモデルベース、未知の環境への適応が求められる場合はモデルフリーが適している。**  

---

### **🔹 2. オンライン vs. オフライン強化学習**  

エージェントAIの最適化では、学習方法を**オンライン（リアルタイム学習）** と **オフライン（事前学習）** のどちらにするかも重要です。  

#### **📌 オンライン強化学習**  
- エージェントがリアルタイムで環境とやり取りしながら学習。  
- 動的な環境への適応に強いが、計算コストが高い。  

🛠 **活用事例:**  
- 自動運転（リアルタイムで最適ルートを学習）  
- スマートファクトリー（機械の異常検知と適応制御）  

#### **📌 オフライン強化学習**  
- 事前に収集したデータをもとに学習し、実際の環境で適用。  
- データの質が高ければ高速かつ安定した学習が可能。  

🛠 **活用事例:**  
- 顧客行動予測（ECサイトの推薦システム最適化）  
- ロボット制御（事前にシミュレーションで学習）  

💡 **結論:**  
**高頻度の変化がある環境ではオンライン学習、安定したデータが利用できる環境ではオフライン学習が適している。**  

---

## **3️⃣ 業界における実践的な応用事例**  

### **📌 事例 1: Teslaの自動運転 AI**  
TeslaのAutopilotは、**強化学習と模倣学習を組み合わせたハイブリッドモデル** を採用。  
- カメラデータとLiDARを活用し、走行環境を分析  
- モデルフリー強化学習で最適な運転戦略を学習  

🚗 **結果:**  
✔️ 自律運転時の安全性向上  
✔️ ドライバーの運転パターンを学習し、より自然な運転動作を実現  

---

### **📌 事例 2: OpenAIのゲームAI（Dota 2 & StarCraft II）**  
OpenAI Five（Dota 2 AI）は、**分散強化学習と模倣学習を組み合わせ**、プロプレイヤーと互角の対戦が可能に。  

🕹 **技術ポイント:**  
- PPOアルゴリズムを活用した自己学習  
- 数千台のGPUとTPUを用いた並列学習  

💡 **結果:**  
✔️ 人間のプレイスタイルを超える高度な戦略を習得  
✔️ 戦略的な意思決定AIとして、金融や防衛分野にも応用可能  

---

## **4️⃣ 強化学習によるエージェントAI最適化の成功ポイント**  

🎯 **強化学習の成功のための3つのポイント:**  
1️⃣ **適切なアルゴリズム選択:** 環境の特性に応じて、モデルベースかモデルフリーを選択  
2️⃣ **データ効率の最適化:** サンプル効率を向上させるための経験再利用（Replay Buffer）を活用  
3️⃣ **計算コストの管理:** 分散学習やクラウドリソースを活用し、スケーラブルな学習環境を構築  

💡 **「強化学習の進化が、次世代のエージェントAIを加速させる！」** 🚀
[スニペット]openpyxl でsaveしたExcelの比較

```py
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
import math

# 許容誤差（丸め誤差のため）
TOLERANCE = 1e-9

def extract_numeric_values(ws):
    values = {}
    for row in ws.iter_rows(values_only=True):
        for col_index, val in enumerate(row):
            if isinstance(val, (int, float)):
                col_letter = get_column_letter(col_index + 1)
                cell_ref = f"{col_letter}{row[0].row if hasattr(row[0], 'row') else '?'}"
                values[cell_ref] = val
    return values

# ① 元ファイルの読み込み
wb_original = load_workbook("original.xlsx", data_only=True)
ws_original = wb_original.active
original_values = extract_numeric_values(ws_original)

# ② 保存後ファイルの読み込み
wb_saved = load_workbook("saved.xlsx", data_only=True)
ws_saved = wb_saved.active
saved_values = extract_numeric_values(ws_saved)

# ③ 比較
print("=== 差分チェック結果 ===")
for cell, original_val in original_values.items():
    saved_val = saved_values.get(cell)
    if saved_val is None:
        print(f"{cell}: 元にあったが保存後に消失")
    elif not math.isclose(original_val, saved_val, rel_tol=TOLERANCE):
        print(f"{cell}: 値が異なります → 元: {original_val}, 保存後: {saved_val}")

for cell in saved_values:
    if cell not in original_values:
        print(f"{cell}: 保存後に新たに出現（元にはなかった）")

```
```py
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
import math

TOLERANCE = 1e-9

def extract_numeric_values(ws):
    values = {}
    for row in ws.iter_rows(values_only=False):
        for cell in row:
            if isinstance(cell.value, (int, float)):
                values[cell.coordinate] = cell.value
    return values

# ① 元ファイルの読み込み
wb_original = load_workbook("original.xlsx", data_only=True)
ws_original = wb_original.active
original_values = extract_numeric_values(ws_original)

# ② 保存後ファイルの読み込み
wb_saved = load_workbook("saved.xlsx", data_only=True)
ws_saved = wb_saved.active
saved_values = extract_numeric_values(ws_saved)

# ③ 比較
print("=== 差分チェック結果 ===")
diff_found = False
for cell, original_val in original_values.items():
    saved_val = saved_values.get(cell)
    if saved_val is None:
        print(f"{cell}: 元にあったが保存後に消失")
        diff_found = True
    elif not math.isclose(original_val, saved_val, rel_tol=TOLERANCE):
        print(f"{cell}: 値が異なります → 元: {original_val}, 保存後: {saved_val}")
        diff_found = True

for cell in saved_values:
    if cell not in original_values:
        print(f"{cell}: 保存後に新たに出現（元にはなかった）")
        diff_found = True

if not diff_found:
    print("差分は見つかりませんでした。")
```
🚀 自律型エージェントAIの設計パターン：実践的アプローチと業界活用事例



## **1️⃣ 自律型エージェントAIとは？**  

近年、AI技術の進化により、エージェントAIは単なるタスク実行ツールではなく、**「自ら学習・判断し、意思決定を行う自律型エージェント」** へと進化しています。  

🎯 **自律型エージェントAIの特徴:**  
✔️ **自己学習**（強化学習・転移学習を活用）  
✔️ **環境適応**（リアルタイムで状況を認識し最適な行動を選択）  
✔️ **分散協調**（複数エージェントが連携して業務を遂行）  

このようなAIシステムは、**金融、製造、物流、ヘルスケア、マーケティング** などの幅広い分野で活用されています。  

では、これらのAIをどのように設計・開発すればよいのでしょうか？ 本記事では、自律型エージェントAIの設計パターンと、その実際の活用事例について詳しく解説します。  

---

## **2️⃣ 自律型エージェントAIの主要設計パターン**  

### **🔹 1. ルールベース vs. 強化学習（Reinforcement Learning, RL）**  

#### **📌 ルールベース設計**  
- 人間が事前に定義したルールに基づいて動作するAI。  
- 比較的単純な環境での利用に適しているが、複雑なタスクには対応しにくい。  
- **活用事例:**  
  - 自動運転の基本的なルール（例: 信号検知）  
  - シンプルなチャットボット  

#### **📌 強化学習（RL）を活用した設計**  
- AIが試行錯誤を繰り返しながら、最適な行動を学習する。  
- 動的な環境で適応力が求められるタスクに適している。  
- **活用事例:**  
  - 自律走行ドローン  
  - 金融市場のトレーディングアルゴリズム  
  - AIを活用したカスタマーサービス最適化  

🛠 **技術ポイント:**  
- **Deep Q-Networks (DQN)**, **Proximal Policy Optimization (PPO)** などのアルゴリズムを活用  
- **環境のシミュレーションとエージェントの試行錯誤による最適化**  

💡 **結論:**  
シンプルなタスクはルールベースで十分だが、**高度な意思決定を求められる場合はRLが最適**。  

---

### **🔹 2. マルチエージェントシステム（MAS: Multi-Agent Systems）**  

複数のAIエージェントが連携してタスクを処理するモデル。物流や製造業など、**大規模システムの最適化** に活用される。  

✅ **活用事例:**  
- **倉庫ロボットの協調作業**（例: AmazonのKivaロボット）  
- **スマートシティの交通最適化**（信号制御の最適化による渋滞緩和）  
- **ゲームAI（StarCraft II、Dota 2 AI）**  

🛠 **技術ポイント:**  
- **分散型強化学習（Distributed RL）** を活用し、各エージェントが独立しつつ協調できるよう設計  
- **Federated Learning（連合学習）** により、プライバシーを守りながら学習を最適化  

💡 **結論:**  
自律型エージェントAIを分散化することで、**スケーラビリティと効率性を向上** させることが可能。  

---

### **🔹 3. 知識グラフとエージェントAIの融合**  

エージェントAIに**知識グラフ（Knowledge Graph）** を統合することで、文脈理解と高度な意思決定を実現。  

✅ **活用事例:**    
- **医療診断AI**（症状や治療法を関連付けて最適な診断を提案）  
- **法律AI**（法律文書の分析と自動アドバイス提供）  

🛠 **技術ポイント:**  
- **Graph Neural Networks (GNN)** を活用し、関係性を学習  
- **推論エンジン（Reasoning Engine）** を組み込み、文脈に応じた適切な判断を行う  

💡 **結論:**  
知識グラフを統合することで、**エージェントAIの論理的推論能力が向上** し、より高度なタスクにも対応可能に。  

---

## **3️⃣ 実際の業界応用事例**  

### **📌 事例 1: Teslaの自動運転AI**  
TeslaのAutopilotは、**ルールベースと強化学習を組み合わせたハイブリッドモデル** を採用。  
- ルールベース：基本的な交通ルールを適用  
- 強化学習：運転パターンを学習し、よりスムーズな運転を実現  

🚗 **結果:**  
✔️ 自律走行時の安全性向上  
✔️ 道路環境への適応能力向上  

---

### **📌 事例 2: OpenAIのChatGPTと知識グラフの統合**  
ChatGPTは、知識グラフを組み合わせることで、**より深い文脈理解と高度な質問応答が可能** に。  

💬 **結果:**  
✔️ 回答の正確性向上  
✔️ 企業のナレッジマネジメントにも応用可能  

---

## **4️⃣ まとめ: 自律型エージェントAI設計の成功ポイント**  

🎯 **成功のための3つのポイント:**  
1️⃣ **ルールベースと強化学習の適切なバランスを取る**  
2️⃣ **マルチエージェントシステムを活用し、スケーラブルな設計を行う**  
3️⃣ **知識グラフを統合し、文脈理解と推論能力を向上させる**  

💡 **「自律型エージェントAIの時代が、これからのビジネスの鍵を握る！」** 🚀
.NET10：JSONシリアル化時に自分を参照する問題の解決

現在のビジネスシナリオとして、雇員クラスがあり、その中に管理者という属性があり、それも同じ雇員クラスのタイプです。通常の雇員の管理者はマネージャー、マネージャーの管理者はCEOであり、CEOの管理者は空か自分自身を管理しています。空は正常ですが、もしCEOの管理者が自分自身の場合、.NET9では以下のように実現します：

```csharp
using System.Text.Json;

var ceo = new Employee { NO = 1, Name = "CEO" };
ceo.Manager = ceo;  // ここでエラーが発生
Console.WriteLine(JsonSerializer.Serialize(ceo));
Console.WriteLine("---------------");

var manager = new Employee { NO = 2, Name = "Manager" };
manager.Manager = ceo;
Console.WriteLine(JsonSerializer.Serialize(manager));
Console.WriteLine("---------------");

var employee = new Employee { NO = 3, Name = "Employee" };
employee.Manager = manager;
Console.WriteLine(JsonSerializer.Serialize(employee));

class Employee
{
    public int NO { get; set; }
    public string? Name { get; set; }
    public Employee? Manager { get; set; }
}
```

実行すると、循環参照の例外が発生します：

![画像](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRC8XdsANicpjrhqHo56RpQask7M75bYbIELOf4GfomWvsRpe5PibEMLR6pKeGpO70AJLJqyIYoMCLZA/640?wx_fmt=png&from=appmsg)

源生成器を用いてJSONシリアル化を行う場合、生成されるコンテキストは循環参照でシリアル化やデシリアル化を行う際に例外をスローします。今では、`JsonSourceGenerationOptionsAttribute`において`ReferenceHandler`を指定することでこの動作をカスタマイズすることができます。以下は、`JsonKnownReferenceHandler.Preserve`を使用した例です：

```csharp
using System.Text.Json;
using System.Text.Json.Serialization;

var ceo = new Employee { NO = 1, Name = "CEO" };
ceo.Manager = ceo;
Console.WriteLine(JsonSerializer.Serialize(ceo, ContextWithPreserveReference.Default.Employee));
Console.WriteLine("---------------");

var manager = new Employee { NO = 2, Name = "Manager" };
manager.Manager = ceo;
Console.WriteLine(JsonSerializer.Serialize(manager, ContextWithPreserveReference.Default.Employee));
Console.WriteLine("---------------");

var employee = new Employee { NO = 3, Name = "Employee" };
employee.Manager = manager;
Console.WriteLine(JsonSerializer.Serialize(employee, ContextWithPreserveReference.Default.Employee));
Console.ReadLine();

[JsonSourceGenerationOptions(ReferenceHandler = JsonKnownReferenceHandler.Preserve)]
[JsonSerializable(typeof(Employee))]
internal partial class ContextWithPreserveReference : JsonSerializerContext
{
}
class Employee
{
    public int NO { get; set; }
    public string? Name { get; set; }
    public Employee? Manager { get; set; }
}
```

実行結果は以下の通りです：

![画像](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRC8XdsANicpjrhqHo56RpQassCWOla4S98m5vCptssujdeysQFtXULcibppvDoW7CyDlVVT7VnCRvuw/640?wx_fmt=png&from=appmsg)

(Translated by GPT)
元のリンク：https://mp.weixin.qq.com/s/GLdh4ZHzNVz3xqeEenqG9g?token=1135395277&lang=zh_CN&wt.mc_id=MVP_325642
🚀 ビジネスの未来を変えるエージェントAI：実践的活用法と成功事例 


## **1️⃣ エージェントAIとは？ビジネスにおける役割**  

エージェントAI（Agent AI）は、**自律的にタスクを遂行し、意思決定を最適化する人工知能** です。現在、企業では **業務の自動化、カスタマーサポート、マーケティング最適化、データ分析** など、様々な分野で活用が進んでいます。  

例えば、以下のような用途でビジネスの生産性を大幅に向上させることができます。  

✅ **カスタマーサポートの自動化**（例：AIチャットボット、バーチャルアシスタント）  
✅ **マーケティングの最適化**（例：パーソナライズ広告、顧客行動予測）  
✅ **業務プロセスの自動化**（例：RPA + AIエージェント）  
✅ **高度なデータ分析**（例：財務分析、リスク予測）  

では、これらの活用法を深掘りし、実際の企業事例とともに解説していきます。  

---

## **2️⃣ エージェントAIのビジネス活用事例**  

### **💬 1. AIチャットボット & バーチャルアシスタント**  

🔹 **事例：Amazon & ChatGPTのカスタマーサポート**  
Amazonでは、顧客対応の大部分をAIチャットボットが担っています。例えば、商品の配送状況や返品手続きを自動で案内することで、**オペレーターの負担を軽減し、カスタマーエクスペリエンスを向上** させています。  

🔹 **技術ポイント**  
- **自然言語処理（NLP）** を活用し、顧客の質問を理解  
- **会話履歴の分析** によるパーソナライズ対応  
- **音声認識との統合  

💡 **ビジネスインパクト:**  
✔️ **24時間365日対応** で顧客満足度向上  
✔️ **問い合わせコスト削減**（約30-50%のコールセンター費用削減）  

---

### **📊 2. マーケティングの最適化**  

🔹 **事例：NetflixのレコメンデーションAI**  
Netflixは、エージェントAIを活用し、ユーザーごとに最適なコンテンツを推薦しています。この技術により、**約80%の視聴者が推薦された動画を視聴する** という高いエンゲージメントを実現しています。  

🔹 **技術ポイント**  
- **強化学習（RL）** による視聴行動の最適化  
- **ディープラーニング** を用いたパターン分析  
- **リアルタイムデータ処理** による動的なコンテンツ推薦  

💡 **ビジネスインパクト:**  
✔️ **売上増加**（エンゲージメント向上による収益アップ）  
✔️ **マーケティングコスト削減**（広告精度向上）  

---

### **🛠️ 3. 業務プロセスの自動化（RPA + AI）**  

🔹 **事例：銀行業界の自動融資審査システム**  
大手銀行では、AIエージェントを活用し、**融資審査プロセスを自動化** しています。従来の人手による審査と比べ、**処理時間が90%短縮** され、審査の精度も向上しました。  

🔹 **技術ポイント**  
- **OCR（光学文字認識）** を使った書類デジタル化  
- **機械学習モデルによる信用スコアリング**  
- **不正検出AI** によるリスク管理  

💡 **ビジネスインパクト:**  
✔️ **業務効率向上（処理時間90%削減）**  
✔️ **人的ミスの削減**（データドリブンな意思決定）  

---

## **3️⃣ エージェントAI導入の課題と解決策**  

エージェントAIの導入には多くの利点がありますが、いくつかの課題も存在します。  

### **❌ 課題 1: データ不足 & データ品質の問題**  
🛠 **解決策:**  
- **データ拡張（Data Augmentation）** や **合成データ（Synthetic Data）** を活用  
- **転移学習（Transfer Learning）** を利用し、少量のデータでも高精度を実現  

### **❌ 課題 2: AIのブラックボックス問題**  
🛠 **解決策:**  
- **Explainable AI（XAI）** を活用し、意思決定の透明性を向上  
- **SHAP（Shapley Additive Explanations）** や **LIME（Local Interpretable Model-agnostic Explanations）** を利用  

### **❌ 課題 3: セキュリティ & プライバシーリスク**  
🛠 **解決策:**  
- **フェデレーションラーニング（Federated Learning）** による分散学習  
- **データ匿名化 & 暗号化技術の導入**  

---

## **4️⃣ 未来のエージェントAIとビジネスの展望**  

エージェントAIの進化により、今後のビジネス環境は大きく変わるでしょう。  

🔮 **未来予測:**  
✅ **完全自動化の企業運営（AI主導のビジネス）**  
✅ **マルチエージェントシステム（協調AIの発展）**  
✅ **AGI（汎用人工知能）の登場によるさらなる変革**  

これからの時代、エージェントAIを活用する企業が **市場競争で圧倒的な優位性を持つ** ことは間違いありません。  

---

## **💡 まとめ: ビジネスにおけるエージェントAIの成功戦略**  

✅ **カスタマーサポートAIで業務負担を削減**  
✅ **マーケティングAIで売上最大化**  
✅ **業務自動化（RPA + AI）で生産性向上**  
✅ **データ活用 & セキュリティ対策が重要**  

💡 **「エージェントAIを活用できる企業が未来の市場をリードする！」** 🚀
.NET10：文字と数値


![画像](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRC8XdsANicpjrhqHo56RpQasyDDHPZAIiaxB5q2GfeibqRvzzVVHOqufKl5R2FJHrkme3aPmC3V1Jn4A/640?wx_fmt=png&from=appmsg)

生成的AIの初期テストでは、AIに0.9と0.11のどちらが大きいかを回答させるものがありました。初期バージョンのAIは0.11が大きいと答え、「AIの知性」に関する議論を巻き起こしました。今日、異なる場面で0.11が実際に0.9より大きいケースについて話します。

以下の例を見てみましょう：

```csharp
foreach (string version in new[] { "v0.0.0.1", "v0.0.0.2", "v0.0.0.11" }.Order())
{
    Console.WriteLine(version);
}
```

このコードの出力は、ASCALLの並びで出力されます：

```
v0.0.0.1
v0.0.0.11
v0.0.0.2
```

しかし、バージョン番号から見れば、v0.0.0.2はv0.0.0.11より小さいはずです。.NET10の第1プレビュー版では、この問題を解決する方法が提供されました：

```csharp
var numericStringComparer = StringComparer.Create(CultureInfo.CurrentCulture, CompareOptions.NumericOrdering);
foreach (string version in new[] { "v0.0.0.1", "v0.0.0.2", "v0.0.0.11" }.Order(numericStringComparer))
{
    Console.WriteLine(version);
}
```

実行結果：

```
v0.0.0.1
v0.0.0.2
v0.0.0.11
```

さらに、この数値比較オブジェクトを使えば、以下の2つの数値を比較することもできます。これらは文字列ですが、比較した結果は等しいです。

```csharp
var numericStringComparer = StringComparer.Create(CultureInfo.CurrentCulture, CompareOptions.NumericOrdering);
Console.WriteLine(numericStringComparer.Equals("01008", "1008"));
```

次に、集合での利用例です。ソートされたディクショナリで、数値比較オブジェクトを使用します：

```csharp
var numericStringComparer = StringComparer.Create(CultureInfo.CurrentCulture, CompareOptions.NumericOrdering);
var versions = new SortedDictionary<string, string>(numericStringComparer)
{
    ["v0.0.0.11"] = "第十一个版本",
    ["v0.0.0.1"] = "第一个版本",
    ["v0.0.0.2"] = "第二个版本",
};
foreach (var version in versions)
{
    Console.WriteLine($"{version.Key} {version.Value}");
}
Console.WriteLine("-----------------");
Console.WriteLine(versions["v0.0.0.02"]);
```

結果は以下の通りです："v0.0.0.02"と"v0.0.0.2"は同一です：

```sql
v0.0.0.1 第一个版本
v0.0.0.2 第二个版本
v0.0.0.11 第十一个版本
-----------------
第二个版本
```

(Translated by GPT)
元のリンク：https://mp.weixin.qq.com/s/dt1Aiq-74F5XhS9J_FUmUw?token=1135395277&lang=zh_CN&wt.mc_id=MVP_325642
# Semantic Kernel：ローカル deepseek-r1:1.5b の接続


Ollamaにおいて、deepseekはランキングで1位に位置し、ダウンロード数は17Mを記録しています。2位のllama 3.3のダウンロード数は1.3Mであり、その人気の高さが伺えます。

Ollamaの具体的なアドレスは以下の通りです：https://ollama.com/search

![画像](https://mmbiz.qpic.cn/sz_mmbiz_png/4CAA63nvHRC6ib0qkkPnzdGOFDQafnuKBWqLDicoV4wBO4yxBNqWsOBjaOjvbrFmUjCEUBfcmSARFsiaEXXaIYNhg/640?wx_fmt=png&from=appmsg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

私たちはSKを用いてOllamaと組み合わせ、ローカルモデルをテストしました。まずOllamaをインストールし、deepseek-r1:1.5bをローカルに取得します。以下にSKのOllamaを用いて1.5bをロードする方法を示します。

```csharp
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.Ollama;
using OpenAI.Chat;
using System.ComponentModel;

#pragma warning disable
var modelId = "deepseek-r1:1.5b";
var endpoint = new Uri("http://localhost:11434");
var builder = Kernel.CreateBuilder();
builder.Services.AddOllamaChatCompletion(modelId, endpoint);
var kernel = builder.Build();
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
var streamContent = chatCompletionService.GetStreamingChatMessageContentsAsync("出几道勾股定理的题");
await foreach (var content in streamContent)
{
    Console.Write(content.Content);
}
```

以下はテスト結果です。結果が正確か否かにかかわらず、その速度は非常に速く、ローカルでの実行において良好な効果を示しています（**動画のオリジナル速度再生**）。

![動画画像](http://mmbiz.qpic.cn/sz_mmbiz_jpg/4CAA63nvHRC6ib0qkkPnzdGOFDQafnuKBZicoqJsufwe0LRkTupMObxbN8dtDTpibVYokicdnmFu46KRREfGgXH5Yg/0?wx_fmt=jpeg)

依然としてfunction callingをサポートしていないため、開発に対しては若干不親切です。結果からは、deepseek-r1が大部分において推理に時間を費やし、<think>の後に結果を提供していることがわかります。

(Translated by GPT)
元のリンク：https://mp.weixin.qq.com/s/KdhXed2_bqKituUKjSySoQ?token=1135395277&lang=zh_CN&wt.mc_id=MVP_325642
🤖 エージェントAIの開発完全ガイド：効率的な設計・実装・最適化


## **1️⃣ エージェントAI開発の全体像**  

エージェントAI（Agent AI）は、自律的に意思決定を行い、目標を達成するために環境と相互作用する人工知能です。開発の際には、次のようなステップが重要になります。  

### **💡 エージェントAI開発の基本フロー**  
📝 **要件定義** → 🤖 **アーキテクチャ設計** → 🛠️ **学習 & モデル開発** → 🚀 **デプロイ & 最適化**  

それぞれのステップを詳しく解説し、実際の開発に役立つベストプラクティスを紹介します。  

---

## **2️⃣ 効率的なAIエージェントの設計アプローチ**  

エージェントAIの設計には、大きく分けて **3つの主要アプローチ** があります。  

### **🧠 1. ルールベース vs. 機械学習ベースの選択**  
🔹 **ルールベース（Rule-based AI）**  
- 条件分岐（if-else）を使って動作  
- 実装が簡単だが、柔軟性に欠ける  
- 例：従来型のチャットボット  

🔹 **機械学習ベース（ML-based AI）**  
- データに基づいて学習し、意思決定を最適化  
- 自動化と適応性が向上  
- 例：AlphaGo, 自動運転AI  

現在のAIエージェント開発では、ほとんどが **機械学習 + ルールベースのハイブリッドアプローチ** を採用しています。  

### **📡 2. エージェントの認識能力の強化（Perception）**  
エージェントAIは環境を正確に理解する必要があります。これには **コンピュータビジョン（CV）、自然言語処理（NLP）、音声認識** などが重要です。  

✅ **コンピュータビジョン（CV）** — 画像・動画データを解析（例：自動運転の物体認識）  
✅ **自然言語処理（NLP）** — テキストデータの理解・応答（例：音声アシスタント）  
✅ **マルチモーダルAI** — テキスト、画像、音声の統合処理（例：ChatGPT-4o）  

### **🧩 3. 意思決定モデルの選択（Decision Making）**  
エージェントAIの行動は、**強化学習（RL）、生成AI（LLM）、教師あり学習（SL）** など、複数のアルゴリズムによって制御されます。  

| **アルゴリズム**  | **特徴** | **代表的な用途** |  
|----------------|-----------------|-----------------|  
| 強化学習（RL）  | 試行錯誤で最適な行動を学ぶ | 自動運転, ゲームAI |  
| 生成AI（LLM）  | 大規模データから文章を生成 | チャットボット, 文書作成 |  
| 教師あり学習（SL） | ラベル付きデータで学習 | 画像認識, 音声認識 |  

適切なモデルを選択することで、より賢いエージェントを開発できます。  

---

## **3️⃣ 効率的なAIエージェントの実装手法**  

### **🔧 1. モジュール化設計（Modular Design）**  
AIエージェントの開発では、**システムをモジュール化** することが重要です。例えば：  

📌 **知覚モジュール（Perception）** — カメラ・センサーからのデータ解析  
📌 **意思決定モジュール（Decision Making）** — 強化学習や推論エンジン  
📌 **行動モジュール（Action）** — ロボットの制御、API呼び出し  

モジュール化することで、個別の改善やスケールアップが容易になります。  

### **⚡ 2. 強化学習の効率的なトレーニング手法**  
強化学習（RL）は計算コストが高いため、次のような最適化技術を使います。  

🖥️ **分散学習（Distributed Training）** — GPUクラスタを活用し、大規模データを並列処理  
🎭 **シミュレーション環境（Simulation）** — OpenAI Gym, MuJoCo, Unity ML-Agentsを活用  
🔄 **転移学習（Transfer Learning）** — 既存の学習済みモデルを再利用  

実際に **Teslaの自動運転AI** では、数百万時間のシミュレーションを活用し、効率的に学習を進めています。  

### **🌐 3. API連携 & エージェントフレームワークの活用**  
現在の開発では、**オープンソースのエージェントフレームワーク** を活用することで開発速度を向上できます。  

✅ **LangChain** — LLMを活用したエージェントAI開発  
✅ **AutoGPT** — 自律的なタスク実行が可能なエージェント  
✅ **OpenAI Gym** — 強化学習環境の提供  

---

## **4️⃣ エージェントAIの最適化 & デプロイ**  

開発したエージェントAIを **実際に運用するには、最適化とデプロイが不可欠** です。  

### **🚀 1. エッジAIとクラウドの組み合わせ**  
エージェントAIの処理は **クラウド** と **エッジデバイス** を組み合わせることで最適化されます。  

🌥️ **クラウドAI** → 高度な計算を担当  
📲 **エッジAI** → リアルタイム処理（スマートフォン、IoTデバイス）  

例えば、**Teslaの自動運転システム** では、**車載エッジAIがリアルタイム認識** を行い、**クラウドAIが長期的な学習** を担います。  

### **⚡ 2. A/Bテストによる最適化**  
エージェントAIのパフォーマンスを向上させるために、A/Bテストを実施し、**最適なハイパーパラメータ** を見つけます。  

---

## **5️⃣ 未来のエージェントAI開発トレンド**  

今後、エージェントAI開発はさらに進化し、以下のような技術が鍵となるでしょう。  

🚀 **マルチエージェントシステム（MAS）** — 協調AIの活用（例：協調型ロボット）  
🧠 **自律学習型エージェント** — 少量のデータでも高精度で学習  
🔗 **ブロックチェーン x AI** — 分散型エージェントの登場  

これらの進化により、エージェントAIは **より高度な意思決定を行う次世代AI** へと進化していくでしょう。  

---

## **💡 まとめ：エージェントAIを効率的に開発するために**  
✅ **モジュール化設計 & API活用で開発をスピードアップ**  
✅ **分散学習 & 転移学習を活用し、効率的にトレーニング**  
✅ **エッジAI & クラウド連携でパフォーマンスを最適化**  

エージェントAIの進化を支えるのは **私たち開発者の創造力** です。次世代のAI技術を一緒に切り拓いていきましょう！ 🚀
Tailwind CSS v4 + Next.js Canary 環境でのプラグイン設定トラブルシューティング

### 目的
Next.js (v15 Canary) + React (v19 Canary) 環境で、react-markdown コンテンツを @tailwindcss/typography の prose クラスでスタイリングする。

### 問題
1. `prose` クラスが効かず、スタイルが適用されない
1. TailwindCSSは動作するが、設定ファイル`tailwind.config.ts` が見つからない。また、`node_modules/.bin/tailwindcss` や `tailwind/cli.js` とかが生成されていない。
1. `npx tailwindcss init -p` を実行するが、`could not determine executable` エラーで設定ファイルを生成できなかった。
1. 環境変更 (Volta→nvm) や依存関係再構築でも解決しなかった。

これらの問題に対し、主にチャットボットの提案に従って進めたが、根本原因の特定には至らなかった。

#### 解決のきっかけ
各種問題が解決しないため、Tailwind CSS v4 のプラグイン設定方法をググると、v4 ではプラグインの追加方法が変更されていることが分かった。

`app/global.css` に `@plugin` をつけて指定すると有効化できた。

```diff_css
@import "tailwindcss";
@import "tw-animate-css";
...
+@plugin '@tailwindcss/typography';
```

### 反省

エラー発生時、チャットボットの回答だけで行き詰まった際は、Google検索や公式ドキュメント確認など他の情報源も活用する必要があると学んだ。バイブコーディングは便利だが、今回のようにAI（チャットボット）だけでは特定・解決困難だった仕様変更や環境依存のエラーに直面することもあるため、柔軟に対応できるようエラー対応は様々な手段で調査するようにしたい。

### 参照リンク

- [Zenn: Tailwind CSS v4 での外部プラグインの追加方法](https://zenn.dev/toms74209200/scraps/ce5189db42fa57)
【ToDoアプリ開発講座 第4回】まとめと振り返り

こんにちは！
この記事は、**Spring Boot と Vue.js で作る超シンプルToDoアプリ開発シリーズ** の最終回、振り返り編です。

---

## ここまでのおさらい

### 第1回 概要編
- Spring Boot と Vue を使ったアプリを作成する方針を説明

### 第2回 Spring Boot API編
- Task エンティティとレポジトリ、コントローラを作成
- GET / POST / DELETE の REST API を実装
- Postman や curl で動作確認

### 第3回 Vue画面編
- Vite + Vue 3 でプロジェクト生成
- タスク一覧の表示 / 追加 / 削除
- Axios でバックエンドAPIと連携

---

## 開発の流れ（シリーズ総まとめ）

1. **バックエンド構築**（Spring Boot）
   - Entity, Repository, Controller を用意
   - REST API（GET / POST / DELETE）を実装
   - フロントと通信できるように CORS を設定

2. **フロントエンド構築**（Vue 3）
   - Vite で Vue プロジェクトをセットアップ
   - タスクの表示、追加、削除機能を実装
   - Axios でバックエンドAPIと非同期通信

3. **テストと確認**
   - curl や Postman でAPI確認
   - フロント画面から一通り操作して動作確認

---

## 学んだこと

- Spring Boot でシンプルな REST API を作成する手順
- Vue 3 (Composition API) の基本的な使い方
- Axios での非同期API呼び出し
- CORS問題との向き合い方
- フロントエンドとバックエンドの分離と連携

---

## これからの発展アイデア

- タスクに「完了状態」を追加して切り替え
- デザインを表示してもっと見やすく
- DB を MySQL / PostgreSQL に変更
- リファクタリング (edit 機能)の実装
- ログイン機能（管理者用）
- テストの作成 (Spring Boot Test / Vitest)

---

## おわりに

ここまで読んで頂きありがとうございました！

このシリーズは、フルスタックWeb開発の最初の一歩として、有益な練習になるように考えて作成しました。

この記事が良かったら、ストックやコメントで応援頂けると幸いです！
【ToDoアプリ開発講座 第3回】Vueで画面を作成しAPIを呼び出す（フロントエンド）

こんにちは！

前回は [Spring BootでREST APIを作成](https://qiita.com/ryusei_engineer/items/14d3157fcdbf2133edd3) しました。 この第3回では、**Vue 3を使って画面を作成し、APIを呼び出す手順**を解説します！

---

## 今回の目標

- Vite + Vue 3 のプロジェクト作成
- 画面にタスク一覧を表示
- 新規追加と削除の実装
- Axios で Spring Boot API を呼び出す

---

## 1. Vue 3 + Vite のプロジェクト作成

```bash
npm create vite@latest todo-frontend -- --template vue
cd todo-frontend
npm install
npm install axios
npm run dev
```

---

## 2. コンポーネント構成

`src/components/TodoApp.vue`

```vue
<template>
  <div>
    <h1>ToDo App</h1>
    <input v-model="newTask" @keyup.enter="addTask" placeholder="新しいタスク" />
    <button @click="addTask">追加</button>
    <ul>
      <li v-for="task in tasks" :key="task.id">
        {{ task.title }}
        <button @click="deleteTask(task.id)">削除</button>
      </li>
    </ul>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import axios from 'axios'

const tasks = ref([])
const newTask = ref('')

const fetchTasks = async () => {
  const res = await axios.get('http://localhost:8080/api/tasks')
  tasks.value = res.data
}

const addTask = async () => {
  if (!newTask.value.trim()) return
  await axios.post('http://localhost:8080/api/tasks', { title: newTask.value })
  newTask.value = ''
  fetchTasks()
}

const deleteTask = async (id) => {
  await axios.delete(`http://localhost:8080/api/tasks/${id}`)
  fetchTasks()
}

onMounted(fetchTasks)
</script>
```

解説

このコンポーネントはタスクの表示・追加・削除という基本的なToDo機能を実装しています。

`ref([])`/ `ref('')`：Vue 3 の Composition API を使ってリアクティブな状態を定義しています。

`onMounted(fetchTasks)`：初回マウント時に API からデータを取得して画面に表示。

`fetchTasks()`：バックエンドの GET /api/tasks を呼び出して、全タスクを取得。

`addTask()`：新しいタスクのタイトルを POST で送信し、登録後に一覧を更新。

`deleteTask(id)`：指定IDのタスクを DELETE で削除し、再度一覧を取得。

`v-model` / `v-for`：Vueのテンプレート構文で、フォーム入力とループ表示を制御しています。


---

## 3. App.vue で表示

```vue
<template>
  <TodoApp />
</template>

<script setup>
import TodoApp from './components/TodoApp.vue'
</script>
```

---

## 4. CORS について

Spring Boot 側の Controller に

```java
@CrossOrigin(origins = "http://localhost:5173")
```

を追加しておきましょう！

---

## おわりに

これで、Vue 側の画面作成 & Spring Boot API 連携が完了です！

次回は、このシンプルアプリ開発を振り返って、今後の発展も考えてみます！

次回：https://qiita.com/ryusei_engineer/items/695e198a4a9f6e75b45b

---

この記事が良かったら、ストックやいいねをしてもらえると嬉しいです！
【ToDoアプリ開発講座 第1回】Spring Boot × Vue.jsで超シンプルToDoアプリを作る 概要編


こんにちは。今回は **Spring Boot (Java)** と **Vue.js (JavaScript)** を使って、超シンプルな **ToDoアプリ** を作成します。

---

## 目標

最小限の機能だけに縛って、**フロントエンドとバックエンドを連携させる経験** をするのが目的です！

実装する機能：

- タスク一覧表示 (GET)
- タスク追加 (POST)
- タスク削除 (DELETE)

✅ **完了状態切り替えなし**\
✅ **CSSなし (デザインなし)**

---

## 技術スタック

| 分類      | 技術              |
| ------- | --------------- |
| フロントエンド | Vue 3 (Vite)    |
| バックエンド  | Spring Boot     |
| DB      | H2 (開発用インメモリDB) |
| API通信   | Axios           |
| ビルドツール  | Maven / npm     |

---

## 完成イメージ
下記のようなシンプルなUIです（cssは本講座では記述しませんが、vueの初期CSSが適用され、下記のようなデザインになります）。

![スクリーンショット 2025-04-04 160005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785879/9e160edd-4320-46fe-aedd-71c67359e682.png)

---

## 開発の流れ（全体像）

1. **Spring Boot の準備と REST API の作成**

   - Java で Task エンティティ・リポジトリ・コントローラを作る
   - GET / POST / DELETE API を実装
   - フロントからアクセスできるように CORS を設定

2. **Vue でフロントエンドの画面作成**

   - Vite で Vue プロジェクトを作成
   - タスク一覧表示・追加・削除の UI を作る
   - Axios で Spring Boot のAPIと通信

3. **動作確認とまとめ**

   - curl や Postman でAPI確認
   - フロントエンドで実際に動かしてチェック

---

## このシリーズで学べること

- Vue と Spring Boot の役割の分離
- REST API の基本 (GET / POST / DELETE)
- CORS 設定とフロントエンドとバックエンドをつなぐ方法
- Webアプリ開発の最低限の流れ

---

## 今後の構成（全4回）

このシリーズは、全4回で完結します：

1. 第1回：概要編（この記事）
2. 第2回：Spring Boot で REST API を作成
3. 第3回：Vue で画面を作成し API を呼び出す
4. 第4回：まとめと振り返り

---

## こんな人にオススメ

- Vue も Spring Boot も体験してみたい
- フルスタックの最初の一歩を踏み出したい
- UI/デザインより、コードに集中したい

---

## おわりに

次回は Spring Boot 側の開発に入ります。プロジェクト作成から、API の設計までやっていきましょう！

次回はこちら：https://qiita.com/ryusei_engineer/items/14d3157fcdbf2133edd3

---

このシリーズで、Web開発の初歩を楽しんでもらえると幸いです。この記事が良かったら、ストックやいいねをしてもらえると嬉しいです！
AtCoderに挑戦してみる(準備編)

## はじめに

最近、YouTubeで検索もしていないのに、AtCoder関連の動画がオススメへ表示されるようになりました。

競技プログラミングサイトであるAtCoderの利用を始めました。本日(2025年4月4日)時点でまだレーティングコンテストには参加していません。

今週の進捗などを書いていきたい所存です。

## まずはじめに(APG4b)

AtCoderのサイトには、『はじめかた』のページがあります。
ここで『プログラミング言語を学ぶ』という項目があり、APG4b(C++入門 AtCoder Programming Guide for beginners)があったのでまずはここからはじめることにしました。

C++は業務で5年ほどやっていましたが、いかんせん昔の話なので、新たなプログラミング言語を学んでいる感覚を受けました。配列もstd::vectorじゃなくて[]でしたし。

現在は第2章を終えたところです。

## 次はお試しでバーチャル参加(ABC399)

続いて、まだAPG4bを終えていませんが、試しにAtCoder Beginner Contest 399(ABC399)をバーチャル参加してみました。
お好みの開始時刻から規定時間(ABCなら100分)だけ参加できるというものです。
反面結果がレーティングには反映されませんが、練習という意味では十分でしょう。

結果は、AとBの2問しか解けませんでした。
まだ競技プログラミングに慣れていないというのもあるようです。

APG4bでC++の勉強をしていましたが、今回はPython3(CPy)を使って参加しました。

問題Aは然程難しくありませんでした。

<details><summary>A - Hamming Distance提出コード</summary>

```python:A_Hamming_Distance.py
ef main() -> None:
  N = int(input())
  S = input()
  T = input()

  result = 0
  for i in range(N):
    if S[i] != T[i]:
      result += 1

  print(result)


if __name__ == "__main__":
  main()
```

</details>

問題Bは愚直過ぎたなあと反省しています。
クールな手段が思いつかず、解説文通りに書いてしまいました。
他の方の解答を見ると、とても短くてクールな解答もありますね……。

<details><summary>B - Ranking with Ties提出コード</summary>

```python:B_Ranking_with_Ties.py
def max_score_in_no_rank(N, P, rank) -> int:
  high_score = -1
  for count in range(N):
    if rank[count] < 0 and P[count] > high_score:
      high_score = P[count]
  return high_score


def quitting(N, rank) -> bool:
  result = False
  for count in range(N):
    if rank[count] < 0:
      result = True
  return result


def main() -> None:
  N = int(input())
  P = list(map(int, input().split()))
  rank = [-1] * N

  r = 1
  while quitting(N, rank):
    max_score = max_score_in_no_rank(N, P, rank)
    k = 0
    for count in range(N):
      if P[count] == max_score:
        k += 1
        rank[count] = r
    r += k

  for count in range(N):
    print(rank[count])


if __name__ == "__main__":
  main()
```

</details>

出題される問題は流石に一筋縄ではいかないな、という印象です。

とりあえず、ぶっつけ本番からの絶望→退会にはならずに済んだので良しとします。レートもそう簡単には上がらないそうですし。

## AtCoder Daily Trainingで練習する

C++の勉強をしつつ、AtCoder Daily Trainingで練習しました。
これは、ABCの過去問題(のうち難度が低い問題)を5問(ALLは9問)を1時間以内(ALLも1時間)に解く、というもので、毎週火水木の夕方〜夜に行われています。

4月1日はパスし、4月2日から参加しました。というか、その存在を知ったのが2日だったというお話。
難易度はEASYを選択しました。まだ未参加ですし。

なお、出題される問題は(EASYの場合)AABBCなのですが、出題記号はABCDEとして出題されます。

### 4/2 16:00

使用言語はすべてC++です。コードは省略。

- A Edge Checkerで苦戦3ミス。考え方をリセットしてようやくクリア
- B Not Overflow。1ミス。C++だとdouble型にしないとオーバーフローすることを失念
- C Same Name。ノーミス。引っ掛けポイントを上手に回避できた

合計400点(A, B, C)。
D問題はタイムオーバー、E問題は問題文すら見ていません。
今回はA問題でスタックしてしまったのが反省点でしょうか。

誤提出によるペナルティ5分の意味も理解できたので良しとします。
(残り時間が減るのではなく、誤提出1回毎に回答時間が5分追加されます)

### 4/3 16:30

使用言語はすべてC++です。今回はすべてノーミスでした。コードは省略。
明らかにコーディングが遅いです。競技に不慣れというのはあります。ただ、知命(アラフィフ)という年齢のせいにしたくはないですね……。

- A Alternately。もうちょっと最適化できたかもしれない
- B Move Right。int型で読み込んで10で割ってprintfを使って出力。ちょっと邪道だったか？
- C 3^A。数学が苦手なのかもしれないと思った今日この頃。問題文が理解できず即パスしてDへ
- D Typing。インデックスを用意してwhile文で回して判定、という愚直な手段を採った
- E digitnum。入力と出力の関係性は理解したが、どうするか考える時間が無かった

合計400点(A, B, D)。
数学を再履修せねばいかんなーと思いました。

## おわりに：明日(2025年4月5日土曜日)に向けて

明日はABC400ということで、400回記念ということもあって是非参加(初参加)したい所存です。

なお、準備編と言っていますが、続くかどうかはわかりません。
VScodeのLaravelで「コード整形」のショートカットキー作成

# 目標
Bladeファイル（.blade.php）を ⌥ + ⌘ + L のショートカットで綺麗に整形できるようにする

# ① Blade Formatter 拡張機能をインストール
## インストール手順
①VSCode左メニューの「拡張機能」アイコンをクリック（または ⌘ + Shift + X）
↓
②検索バーに「Blade Formatter」と入力
↓
③「Laravel Blade formatter by Shufo」をインストール


# ②VSCodeの設定ファイル（settings.json）に以下を追加
```jsonc
"[blade]": {
  "editor.defaultFormatter": "shufo.vscode-blade-formatter", // Bladeファイル用の整形ツールを指定
  "editor.formatOnSave": true // 保存時に自動整形（任意）
}
```

## 補足
・「command + Shift + P」→「settings json」と入力して
「Preferences: Open Settings (JSON)」を選べば編集できる。
・「"editor.formatOnSave": true」を使うと、保存時に自動で整形されるので便利


# ③Blade整形用のショートカットキーを設定する
## 手順
①「command + K」→「command + S」でショートカット設定画面を開く
　⇨コマンドはどのファイルからでもOK
↓
②上部検索バーに「Blade: Format Document」と入力
![スクリーンショット 2025-04-04 15.00.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726068/6e9f0fed-96cf-449c-b4d7-d638b838a753.png)
↓
③出てきたコマンドに「鉛筆アイコン」クリック → 任意のキー割り当てを追加
　⇨好きなキーを設定（例：⌥ + ⌘ + L）
| キー | 用途 | 
|:-----------|:----------- |
| option + command + L | LaravelのL、整形（Format）のFと被らずおすすめ | 


# ④ 整形が反映されない・変な挙動が出るときの対処法
| 問題 | 解決法 | 
|:-----------|:----------- |
| Shift + Option + F で Ï が出る | macOS日本語キーボードの仕様。別のキーに割り当てる（例：option + command + L） | 
| 整形されない | settings.json に [blade] の設定が入っているか確認 | 
| 他のフォーマッタと競合 | 他にインストールされている整形系拡張（Prettierなど）を一時的に無効にして確認 | 


# 動作確認
任意の「.blade.php」ファイルを開き、設定したショートカット（例：option + command + L）を押す。
💡 正常なら、インデントや改行が整い、コードが読みやすくなる！


# まとめ
| やること | 内容 | 
|:-----------|:----------- |
| 拡張機能 | Blade Formatter（Shufo氏作） | 
| settings.json | [blade]に整形設定 | 
| キーバインド | option + command + L を割り当てる | 
| トラブル対処 | 他拡張との競合、日本語キーボードの特殊キー |
[エラー対処]サーブレットコンパイル:パッケージjavax.servletは存在しません

サーブレットコンパイル時に、下記のようなパッケージがないというエラーが出たときの対処
　javax.servletは存在しません
 ![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759593/6c478f55-233f-40c5-b4fb-c4920eddfec5.png)

たいていは、環境設定「CLASSPATH」のパスが現認。

コマンドプロンプトで、CLASSPATHの内容を表示する

次のような応答、または、「servlet-api.jar」のパスと異なる場合、
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759593/ab229d3e-94e9-47ec-9293-cb60cdf514b9.png)

次のコマンド入力で、再起動なしで反映される。
　set CLASSPATH=(格納場所のパス)\servlet-api.jar

改めてecho命令を実施、設定が反映されていれば、エラーも解消する。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759593/0359a39b-fdff-440a-bcd3-5872dfc44a65.png)

以上
情動/感情の機能 - 基礎理解


## はじめに
もし、「感情」を実装するとしたなら、どのように実装しますか？

## 感情の初源：原始的生存メカニズム

感情表現は単なる内的状態の漏れではなく、生存と社会的相互作用のための精巧に調整された進化的適応です。原始時代において、感情表現は以下の機能を果たしていました。

- **即時的コミュニケーション** - 言語発達前の重要な情報伝達手段
- **集団内の協調促進** - 危険や機会の共有認識を可能にした
- **競争優位性の確立** - 資源や配偶者獲得の際の社会的立場を強化

## 威嚇と防御としての怒りの表現

怒りの表現は特に強力な生存メカニズムとして進化しました。

- **身体的変化**：
  - 歯の露出と食いしばり（攻撃準備の信号）
  - 顔の紅潮（血流増加による戦闘準備）
  - 姿勢の拡大（身体サイズの見かけ上の増大）
  - 眉の下降と目の強調（視線の集中と威嚇）

- **適応的利点**：
  - 潜在的な攻撃者への警告として機能
  - 実際の物理的衝突なしで葛藤を解決可能に
  - 集団内での社会的階層の確立と維持

## 感情表現の社会的影響力

感情表現は他者の思考・行動に直接的影響を与えます。

- **同調現象** - 感情の伝染による集団行動の促進
- **意思決定の操作** - 特定の感情表現が他者の判断に影響
- **信頼構築** - 適切な感情表現が社会的絆を強化
- **意図の透明化** - 行動予測を可能にし社会的協力を促進

## 一次感情のコミュニケーション機能

基本感情（一次感情）は文化横断的に認識可能であり、特定のコミュニケーション目的を果たします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348593/0969cd10-abb9-40af-bf96-f149bd92be8f.png)

## 現代社会における意義

原始的機能を保持しながらも、現代社会では感情表現が新たな適応的役割を担っています。

- 複雑な社会的階層における地位交渉
- 大規模集団における協力関係の構築・維持
- 複雑な技術環境における集団的意思決定

## 感情資本主義

感情資本主義とは、感情が商品化され、経済的価値を持つようになった現代社会の経済システムを指す概念です。感情資本主義では、以下の特徴が見られます。

- **感情の商品化**: 感情そのものが市場価値を持ち、売買される対象になる
- **感情労働の増加**: サービス業を中心に、自身の感情を管理・演出することが労働の一部となる
- **感情の計量化**: 「いいね」や評価システムを通じて感情反応が数値化される

## 社会的影響

感情資本主義は社会に多大な影響を与えています。

1. **人間関係の変容**:
   - 親密さや共感が経済的価値を持つことで、真正な人間関係と商業的関係の境界が曖昧化
   - SNSにおける「友情」や「つながり」がソーシャルキャピタルとして機能

2. **労働環境の変化**:
   - 感情管理が職業スキルとして重視される（「感情労働」）
   - 「熱意」や「パッション」が雇用条件となり、内面まで労働の対象に

3. **テクノロジーとの関係**:
   - アルゴリズムが感情を予測・操作することで消費行動を誘導
   - 感情データが市場価値を持ち、ビッグデータとして取引される

## 参考：理論的背景

感情資本主義の理論は複数の思想家によって形成されています。

- **エヴァ・イルーズ**: 「感情資本主義」という用語を普及させ、親密さが市場に取り込まれるプロセスを分析
- **アーリー・ラッセル・ホックシールド**: 「感情労働」概念を提唱し、感情の商品化を理論化
- **ジル・ドゥルーズ**: 「情動」の資本による捕獲について論じた

---
# 感情の実装方法の検討

## 基本的な感情アーキテクチャ

```
感情システム = {
  内部状態の監視 + 外部刺激の評価 + 行動への影響メカニズム
}
```

### 1. 基本構造

- **感情の分類システム**：基本感情（喜び、悲しみ、怒り、恐怖、驚き、嫌悪）とその組み合わせによる複合感情を定義
- **感情強度の連続スケール**：各感情の強さを0〜100などの数値で表現
- **感情状態の時間的変化モデル**：感情の発生、持続、減衰のパターンを定義

### 2. 認知的評価メカニズム

- **刺激→評価→感情の因果関係モデル**
- **出来事の関連性評価**：自己目標との一致/不一致の判定
- **対処能力評価**：状況への対応可能性の判断
- **社会的文脈評価**：社会規範や他者との関係性の考慮

### 3. 身体的反応システム

- **自律神経系シミュレーション**：心拍数、呼吸、発汗などの変化
- **表情表現モデル**：顔の筋肉動作のパラメータ化（表情筋の42の動きを数値化）
- **姿勢・動作変化**：体の緊張度、動作速度、姿勢の変化

### 4. 行動への影響システム

- **意思決定バイアス機構**：感情状態による判断の偏り
- **行動優先度の動的調整**：感情に基づく行動選択の優先順位変更
- **社会的相互作用パターン**：感情表出と他者反応の予測モデル

## 実装上の考慮事項

感情実装の最大の課題は、感情の主観的体験（クオリア）と客観的表出・行動の間のギャップを埋めることです。

### パーソナリティとの連携

- **感情閾値の個別化**：同じ刺激に対する感情反応の個人差
- **感情表出制御メカニズム**：感情の抑制または増幅の個人差
- **基本感情の配分比率**：各感情の発生しやすさの個人差

### 感情の学習メカニズム

- **感情記憶システム**：過去の経験と感情の関連付け
- **状況別感情予測モデル**：類似状況における感情反応の予測
- **社会的学習機能**：他者の感情反応の観察からの学習
【C#で学ぶ】応用情報技術者試験のためのアルゴリズム入門

こんにちは！今回は応用情報技術者試験（AP）の受験者を対象に、試験でよく出題される「アルゴリズム」の基礎を筆者と共に学びましょう。アルゴリズムはプログラミングの根幹であり、試験でも重要なトピックです。この記事では、代表的なアルゴリズムである「線形探索」と「二分探索」を取り上げ、筆者の得意なC#で実装例を挙げていきます。

# アルゴリズムとは？
アルゴリズムとは、問題を解くための手順や計算方法のことです。たとえば、「部屋にある本の中から特定のタイトルを探す」という課題があった場合、「本を1冊ずつ確認する」という方法もアルゴリズムの一種です。応用情報技術者試験では、効率的なアルゴリズムを選ぶ能力や、その仕組みを理解する力が求められます。

試験では以下のようなトピックが頻出です：

* **探索アルゴリズム**（線形探索、二分探索）
* **整列アルゴリズム**（バブルソート、クイックソートなど）
* **時間計算量**（O記法）

ここでは、探索アルゴリズムを中心に解説します。

# 1. 線形探索（Linear Search）
### 概要
線形探索は、配列やリストの要素を先頭から順番に調べていくシンプルな方法です。目的の値が見つかるまで1つずつ確認するため、単純ですがデータ量が多いと時間がかかります。

### 特徴
* **時間計算量**: `O(n)（nは要素数）`
* **メリット**: 実装が簡単、ソートされていないデータでも使える
* **デメリット**: データ量が多いと非効率

### C#での実装例
以下は、配列から特定の値を検索する線形探索のコードです。

```csharp
using System;

class Program
{
    static int LinearSearch(int[] array, int target)
    {
        for (int i = 0; i < array.Length; i++)
        {
            if (array[i] == target)
            {
                return i; // 見つかったインデックスを返す
            }
        }
        return -1; // 見つからなかった場合は-1を返す
    }

    static void Main()
    {
        int[] numbers = { 4, 2, 7, 1, 9, 5 };
        int target = 7;

        int result = LinearSearch(numbers, target);
        if (result != -1)
        {
            Console.WriteLine($"値 {target} はインデックス {result} にあります。");
        }
        else
        {
            Console.WriteLine($"値 {target} は見つかりませんでした。");
        }
    }
}
```

### 実行結果
```text
値 7 はインデックス 2 にあります。
```

# 2. 二分探索（Binary Search）
### 概要
二分探索は、ソート済みのデータに対して使える効率的な探索方法です。配列の中央値を確認し、目的の値がそれより大きいか小さいかを判断して探索範囲を半分に絞り込む、という手順を繰り返します。

### 特徴
* **時間計算量**: `O(log n)`
* **メリット**: 大量のデータでも高速に動作
* **デメリット**: データがソート済みである必要がある

### C#での実装例
以下は、ソート済み配列で二分探索を行うコードです。

```csharp
using System;

class Program
{
    static int BinarySearch(int[] array, int target)
    {
        int left = 0;
        int right = array.Length - 1;

        while (left <= right)
        {
            int mid = (left + right) / 2;

            if (array[mid] == target)
            {
                return mid; // 見つかったインデックスを返す
            }
            else if (array[mid] < target)
            {
                left = mid + 1; // 右半分を探索
            }
            else
            {
                right = mid - 1; // 左半分を探索
            }
        }
        return -1; // 見つからなかった場合は-1を返す
    }

    static void Main()
    {
        int[] numbers = { 1, 2, 4, 5, 7, 9 }; // ソート済み配列
        int target = 5;

        int result = BinarySearch(numbers, target);
        if (result != -1)
        {
            Console.WriteLine($"値 {target} はインデックス {result} にあります。");
        }
        else
        {
            Console.WriteLine($"値 {target} は見つかりませんでした。");
        }
    }
}
```

### 実行結果
```text
値 5 はインデックス 3 にあります。
```

# 試験対策のポイント
1. **アルゴリズムの流れを理解する**
試験では疑似コードやフローチャートが出題されることがあります。コードを読む前に、手動でアルゴリズムをシミュレーションしてみましょう。
2. **時間計算量を押さえる**
`O(n)`や`O(log n)`の意味を理解し、どのアルゴリズムが効率的かを説明できるようにしましょう。
3. **ソートの有無を確認**
二分探索はソート済みデータが前提なので、問題文の条件をよく読みましょう。

# おわりに
今回は線形探索と二分探索をC#で実装しながら学びました。これらは応用情報技術者試験だけでなく、実務でも役立つ基本的なアルゴリズムです。ぜひ手を動かしてコードを書き、動作を確認してみてください。試験対策としては、過去問でアルゴリズム関連の問題を解きながら感覚を掴むのがおすすめだそうです。ともに頑張りましょう！
【入門】Vue × Spring BootでToDoアプリを作ってみた！REST API連携の解説

# Vue × Spring BootでToDoアプリを作ってみた！REST API連携の解説

## はじめに

Spring Boot と Vue 3 を使って ToDo アプリを作ってみたので、記録用にまとめておきます！

- 初心者向け
- REST API 連携
- CORS問題の対処方法など、はまりやすいポイントを解説

## システム構成

- **Frontend:** Vue 3 + Vite + Axios
- **Backend:** Spring Boot + Java 17 + Lombok + Spring Data JPA
- **DB:** (今回は使用していないが抽象化)
- **Port:** Vue = 5173, Spring Boot = 8000

---

## Vue 側の設定

### プロジェクト作成

```bash
npm create vite@latest vue-todo-app --template vue
cd vue-todo-app
npm install
npm install axios
npm run dev
```

### 初期表示

```vue:TodoList.vue
<script setup>
import axios from 'axios';
import { onMounted, ref } from 'vue';

const tasks = ref([]);

onMounted(async () => {
  const res = await axios.get('http://localhost:8000/api/todos');
  tasks.value = res.data;
});
</script>

<template>
  <div v-for="task in tasks" :key="task.id">
    <span>{{ task.context }}</span>
  </div>
</template>
```

---

## ☕ Spring Boot 側の設定

### Spring Initializr で生成

- Web
- Lombok
- Spring Data JPA
- Validation

### Controller

```java:TodoController.java
@RestController
@CrossOrigin("http://localhost:5173")
@RequestMapping("/api/todos")
@RequiredArgsConstructor
public class TodoController {
    private final TodoService service;

    @GetMapping
    public List<Todo> getAllTodos() {
        return service.getAllTodos();
    }

    @PostMapping
    public Todo createTodo(@RequestBody Todo todo) {
        return service.createTodo(todo);
    }

    @PutMapping("/{id}")
    public Todo updateTodo(@PathVariable Integer id, @RequestBody Todo updateTodo) {
        return service.updateTodo(id, updateTodo);
    }

    @DeleteMapping("/{id}")
    public void deleteTodo(@PathVariable Integer id) {
        service.deleteTodo(id);
    }
}
```

---

## ⚠️ よくあるハマりポイント

| 問題 | 原因 |
|--------|------|
| 404 エラー | URLのポート間違い (`5173` と `8000` の間違い) |
| CORS エラー | Spring側に `@CrossOrigin` 設定がない |

---

## ✅ まとめ

- Vue と Spring Boot を組み合わせると、フロントエンドとバックエンドを分離して開発できる
- axiosと REST API の連携は役立つ
- CORS問題は最初に決着しておくとよい
Cloudflare workers 過去のコードについて

workerの過去のコードについて、なかなかに特殊なのでまとめます。

## 保持する過去のバージョン

現行のバージョンを含めて、29個保持するようです。
なんで30じゃないんだろ。

## ロールバックできる世代数

最新の10世代の中で、ロールバックが可能なようです。
11世代〜29世代前は何のために存在するの？

## コンソール画面上で、コードを確認できない

10世代前までロールバックはできるが、そのコードは確認できない。
意味不明。

## バージョンIDは2種類ある

16進数8桁のものはあるが、実際には使えない。
画面表示用のようだ

## 正確なバージョンIDを確認する方法

`wrangler versions list --name [ワーカー名]`

ここで`Version ID`として表示されるものが、正確なバージョンIDです。
UUID（16進数で8桁-4桁-4桁-4桁-12桁、合計32桁、36文字）形式です。
最初の8桁が、画面表示されます。

## 過去のコードを取得する方法は存在しない

`wrangler versions view --name [ワーカー名] [Version ID]`

というコマンドがあるが、概略が表示されるだけでソースコードが表示されたり、取得できたりする訳ではない。

## コードが見たければデプロイすること

現在のコードを含めて10世代のバージョンがデプロイできるので、コードを見たければデプロイするしかない。
プロダクション環境だったらお手上げですね。なにせ、コードが見られないのだから。
digでDNS参照のタイムアウトへの対応

# digでDNS参照のタイムアウトへの対応

自宅用にzabbixを立ち上げたので、dynamic DNSが更新できているかのチェックを入れてみました。

自宅が外部からどのIPに見えているかを外部サービスを使って取得した値と、dnsを参照した値と比較する、という作りにしました。以下のパラメータでDNSからIPを参照しています(example.orgのところはダミーです)。

```
UserParameter=net.ipv4.ext.dns,dig example.org | grep ^example | awk '{print $5;}'
```

が、不一致が結構出てアラートがそればかりになってしまいました。

## 不一致の原因

不一致の原因を調べると、digによるDNSに登録されているIPアドレスの取得が失敗していたことが分かりました。感覚的なものですが20~30%は失敗していました。

digを実行して取得できるはずの値が取得できなかった、という記憶がなく意識していなかったのですが、タイムアウトなどが結構厳しく失敗は起こりうるもののようです。

## DNSサーバの指定

OSのdnsサーバーとしては自宅ルーターのアドレスと、googleの8.8.8.8を指定していたのですが、8.8.8.8を参照したときにエラーとなったので、参照するDNSサーバーを明示するよう`dig @自宅ルーターのIP FQDN`に修正しました。

DNSはUDPを使用するため、ある程度遠い8.8.8.8ではパケットの損失が起こり得る、と、深くは考えませんでした。この対応でエラーは減ったような気もしましたが、結局再発しました。

## タイムアウト時間の指定

ここでようやく原因を調べたところ、digではDNSクエリのタイムアウトが5秒(The default timeout is 5 seconds.)なので、何かで詰まっているとエラーになってしまうようです。

Zabbixエージェントからの実行であるため、多少応答に時間がかかっても問題はないと判断し、 `dig +time=30 @192.168.100.1 example.org`のように変更したところ取得の失敗がなくなり、警告が出なくなりました。

おそらく、タイムアウトの指定だけでも大丈夫だと思いますが、自宅ルーターへのDNSサーバー指定も残しています。ただ、googleなど外部のDNSを参照したほうが目的からすると意味がありそうな気もします。

# 感想

今までdigを叩いて取得できるはずのアドレス取得に失敗した記憶がなかったのに結構な頻度で失敗することが、ちょっと意外でした。

原因はきちんと調べたほうが結局早く解決することに繋がる、という教訓にもなりました。
個人的備忘録：「> /dev/null 2>&1」の意味を知って、スクリプトが少し好きになったのでまとめてみた

## はじめに
Linux環境で作業しているとよく見かける "/dev/null" という特殊なファイル。初めて見たときは「これは何？」と思うかもしれません。

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

この記事では、/dev/null の役割と使いどころについて、個人的な学習メモとしてまとめておきます。

## 書こうと思ったきっかけ
cronジョブやシェルスクリプトで `> /dev/null 2>&1` のような記述を見かけ、「これって何をしてるの？」と疑問に思ったのがきっかけです。実際に使う場面も増えてきたので、備忘録として整理しておきます。

## /dev/null の基本
- **"何でも吸い込むブラックホール"のような特殊ファイル**
- 書き込まれたデータはすべて破棄され、読み込んでも何も返ってこない

例：
```bash
$ echo "Hello" > /dev/null
```
この場合、"Hello" という出力は表示されずに捨てられます。

## よく使う用途

### 不要な出力を無視する
```bash
$ some_command > /dev/null
```
- 標準出力（stdout）を捨てる

### 標準エラー出力も含めて無視
```bash
$ some_command > /dev/null 2>&1
```
- 標準出力（stdout）と標準エラー出力（stderr）の両方を破棄
- cronジョブやスクリプトでよく使われるパターン

### コマンドの存在確認だけしたい場合
```bash
$ command -v nginx > /dev/null 2>&1 && echo "nginx installed"
```
- 出力を表示せず、成功時にメッセージを表示する用途など

## 注意点
- /dev/null は出力を確認したい場面では使わないよう注意
- デバッグ時は逆にログを残すようにリダイレクトを工夫する必要あり

## まとめ
/dev/null は「ログを残さず静かに処理したい」場面で非常に便利なツールです。cronや自動化スクリプトでは特によく使うので、用途や構文をしっかり押さえておくと安心です！
単一責任の原則について勉強してみた

# 概要
SOLID原則について調査したシリーズです  
今回はSingle responsibility principle(単一責任の原則)について調査してみました  
※以降、単一責任の原則と記載します

# 本題
## 原則
以下の原則があります
1. モジュールを**変更する理由**はたったひとつだけであるべきである

### 言葉を分解して説明
- モジュール: 一つの部品。複数のクラスや関数をまとめたもの(ファイルやフォルダ)

## 2つの原則を実現する
### Step1: モジュールを変更する理由はたったひとつだけであるべきである
#### 図を用いた抽象的な説明
例えば、会社でバックオフィス系の多くを一人で実施できているHogeさん  
図を見るとHogeさんは多くの業務知識に依存していることがわかります  
![モジュール変更理由_抽象的な説明_1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1952885/290a0c9d-920b-4da5-87e1-b3a9edf5e7c5.png)

しかし、国レベルでのルール変換や会社独自のルール変換が多いため、常に各業務の知識をアップデートする必要があり、大変です  
![モジュール変更理由_抽象的な説明_2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1952885/e20d84c0-759a-403c-9976-a6ad31f3bd12.png)

つまり、多くの要因がHogeさん(モジュール)の知識をアップデートする理由となっている状態です  
  
そこで、各業務に主担当を置くようにします  
![モジュール変更理由_抽象的な説明_3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1952885/14821823-fb81-4528-8e4a-e547c0b5a522.png)

そうすることで、該当の知識をアップデートする人を制限することができます  
つまり、担当業務をする人の知識(モジュール)をアップデート(変更)する理由が、該当の担当範囲だけに絞れたことになります  

#### 具体例
ユーザーの処理を管理するUserクラスで考えます  
##### 単一責任の原則に反している場合
```python:bad_example.py
class User:
    def __init__(self, name, age, mail_address)
        self.name = name
        self.age = age
        self.mail_address = mail_address
    
    def save_user(self, db_session)
        db_session.save_user({"name": name, "age": age, "mail_address": mail_address})
    
    def send_mail(self, sender, send_mail_address, text)
        context = _create_context(text)
        sender.send(from=self.mail_address, destination=send_mail_address, context)

    def _create_context(self, base_text)
        # メールの文章を作る処理
        return context

user = User(name="tom", age=16, mail_address="tom@hoge.com")
user.save_user(db_session=db)
user.send_mail(sender=mail_serveice, text="初めましてトムです")
```
- データベース処理の内容を変更しようとすると、save_userを修正する必要あり
- メール処理も同様。メールの文章を作る処理とかを修正したいとなるとプライベート関数を修正する必要あり

##### 単一責任の原則に適応できている場合
```python:database.py
class UserDatabase:
    def save_user(user)
```

```python:email.py
class EmailService:
    def send_mail(user, text)

    def _create_context(base_text)
        # メールの文章を作る処理
        return context
```

```python:good_example.py
class User:
    def __init__(self, name, age, mail_address)
        self.name = name
        self.age = age
        self.mail_address = mail_address

user = User(name="tom", age=16, mail_address="tom@hoge.com")
db = UserDatabase()
db.save_user(user)
mail_service = EmailService()
mail_service.send_mail(user, "初めましてトムです")
```
- 上記のように役割を分ける
    - データベースモジュールを変更したい理由はユーザー情報を保存する理由だけ
    - メール送信モジュールを変更したい理由はメール送信を処理を変更したい理由だけ

# 参考サイト
- [現実世界の事象から学ぶSOLID原則](https://speakerdeck.com/h0r15h0/xian-shi-shi-jie-noshi-xiang-karaxue-busolidyuan-ze?slide=38)
- [SOLID原則完全に理解した！になるための本](https://zenn.dev/nakurei/books/solid-principle-kanzen-rikai/viewer/single-responsibility-principle)
- [SOLID原則の単一責任原則(SRP)についてRubyで解説](https://blog.chiyuu.co.jp/2024/05/09/single-responsibility-principle/)
【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/)
***
　まずは、ニュースです。

　[Tibor Blahoさんポスト](https://x.com/btibor91/status/1907812140251009371?t=90Ckj81gdBmTDtzF7R-O5Q&s=19)

***（ChatGPT翻訳）***
1億3,000万人以上のChatGPTユーザーが、わずか1週間で7億枚以上の画像を生成しました。

まさに驚異的なスピードと規模ですね！
***

　マジか！
　　それだけ、4o Image Generationが
　　　驚異的な性能だったのでしょうね｡
***
　では、【本題】です。

　今回は、
　　何かの説明を
　　　対話物語形式で
　　　　行なってもらう
　　　　　Promptのご紹介です。

　通常、
　　ChatGPTに
　　　説明を求めると
　　　　きちんと説明してくれますが、
　　　　　きちんと過ぎて
　　　　　　逆にわからない場合が
　　　　　　　あります。

　そこで
　　その説明を
　　　ふたりの人物に会話させて
　　　　説明してもらう。
　　　　　それが対話物語形式です、

　すぐるさんという方が
　　教えてくださいました。
　　　[すぐるさんポスト](https://x.com/SuguruKun_ai/status/1907650247335227545?t=8w_TsIOlb4FJr9P_OxuIYw&s=19)

　ではPromptです。
　　＊＊＊に説明して欲しいことを
　　　記述して、送信してください。
```Text:対話物語形式で説明するPrompt
「＊＊＊」について、対話物語形式で説明して。
```

　この説明を読んで
　　わからなければ、
　　　さらに深堀りしてください。

　何度か対話物語形式が
　　続きますが、
　　　次第にこちらとの対話形式に
　　　　移行します。

　私もゆうべ
　　ハマりました😅
　　　とはいえ、わからなかったから
　　　　ラリーが続いただけなのです。
　　　　　最終的には理解しました。

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

　今回は、ここまで。
個人的備忘録：同じ数字を何回入力した？Pythonで比較処理を実装したのでアウトプットしてみた

## はじめに
このプログラムは、Pythonを使ってユーザーから10回数字を受け取り、前回と同じ数字を入力した回数をカウントし、すべて同じだった場合には「test」と表示するものです。

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

## 書こうと思ったきっかけ
ループ処理や状態比較の練習として、単純ながらロジックが試されるこの課題に挑戦しました。特に「前回の入力値を保持して比較する」部分を丁寧に作り込む良い題材だったためです。

## 実装コード（Python）
```python
def main():
    count_same = 0
    previous = None
    all_same = True

    for i in range(10):
        try:
            num = int(input(f"{i + 1}回目の数字を入力してください: "))
        except ValueError:
            print("数字を入力してください。")
            return

        if i == 0:
            previous = num
        else:
            if num == previous:
                count_same += 1
            else:
                all_same = False
            previous = num

    if all_same:
        print("test")
    else:
        print(f"前回と同じ数を入力した回数: {count_same}")

if __name__ == "__main__":
    main()
```

## 実行例
### 一部同じだった場合：
```
1回目の数字を入力してください: 5
2回目の数字を入力してください: 5
3回目の数字を入力してください: 5
4回目の数字を入力してください: 1
5回目の数字を入力してください: 1
6回目の数字を入力してください: 1
7回目の数字を入力してください: 2
8回目の数字を入力してください: 2
9回目の数字を入力してください: 2
10回目の数字を入力してください: 2
前回と同じ数を入力した回数: 6
```

### すべて同じだった場合：
```
1回目の数字を入力してください: 9
...
10回目の数字を入力してください: 9
test
```

**実際のターミナル画面**

![Screenshot 2025-04-04 at 13.55.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/2109ea6a-c561-4117-b629-7812e0f4fb47.png)

## まとめ
このプログラムでは、前回との比較やカウンタ管理といった基本的な構文を活用しています。連続性のチェックや状態保持の理解に役立つシンプルで効果的な練習題材でした！
[ショートカット]システムのプロパティ

環境設定などの変更で、システムのプロパティを開くときのショートカット。

①「windows」+ Rをクリック
　⇒名前を指定して実行ダイアログがでる

②「sysdm.cpl」と入力、実行する
　⇒システムのダイアログがでる


 以上
reactを書いていてariaラベルで迷ったら

ariaラベルで迷ったら下記の仕様書を見て整理しましょう


## 🌐 1. WAI-ARIA（公式仕様） - W3C
https://www.w3.org/TR/wai-aria/
📚 最も正式な仕様書です。

各 role, aria-* 属性の説明、使い方、使用可能な要素などが載ってます。

正直読みづらいけど「ちゃんと調べたい時」には必須。


## 🧪 2. ARIA Authoring Practices Guide（APG）
https://www.w3.org/WAI/ARIA/apg/
WAI公式の「実践ガイド」

よくあるUIコンポーネント（タブ、メニュー、アコーディオンなど）にどうARIAを使うか、サンプルコード付きで解説してます。

実装ベースで知りたい人には超おすすめ！


## 🧠 3. MDN Web Docs – ARIA
https://developer.mozilla.org/ja/docs/Web/Accessibility/ARIA
読みやすさで言えばNo.1。日本語あり。

aria-label, role, aria-labelledby など各属性の用途と例が載ってる。

初心者にも優しく、実用的。

## 🛠 4. Accessibility Cheatsheet – Inclusive Components
https://inclusive-components.design/
英語だけど「実際のUI部品ごとにアクセシビリティの考慮点」がまとまってて実用的。

ARIAだけじゃなく、HTMLセマンティクスやキーボード操作もカバー。
詳細画面で、説明文などを「改行」させる方法

# はじめに
Laravelなどでtextareaに入力されたテキストを、show画面(表示画面)で改行を反映させたい場合は、
Bladeで改行文字(\n)をHTMLの<br>に変換する必要がある。

# やり方：nl2brを使う
```
{!! nl2br(e($yourModel->your_text_column)) !!}
```

# 解説
・e(...)：HTMLエスケープ（XSS対策）
・nl2br(...)：改行（\n）をbrタグに変換
・{!! ... !!}：HTMLタグとして表示（{{ }} だとタグが無効になる）

# 例
DBにこんな値が入ってたとする：
```
こんにちは
これはテストです。
よろしくお願いします。
```
表示部分に下記を使えば：
```
{!! nl2br(e($post->body)) !!}
```
表示はこうなります：
```
こんにちは<br>
これはテストです。<br>
よろしくお願いします。

```