OmniAICreator/Qiita-1.07M huggingface dataset:
ADFI画像認識でノーコードでAIアプリを作成する

# はじめに
本記事では、[ノーコードAI開発プラットフォーム ADFI（アドファイ）](https://adfi.jp/ja/ai/)を使って、スマホやタブレットで利用できるAIアプリを作成する手順を解説します。
本記事は、ADFI画像認識のAIモデルを作成した後の手順になります。AIモデル作成手順については下記記事で解説しています。
 - [ADFIで路面検査AIを作成する](https://qiita.com/karakurai_rena/items/5e92743814e05d84c8ad)
 - [ADFIで混雑検知AIを作成する](https://qiita.com/karakurai_rena/items/b931bba9a5a347a460c1)

![ADFI画像認識概要2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/b7428194-5d8f-5ce5-5262-f62893cd6af7.png)

# AIアプリの作成手順
## 1. AIアプリの作成
- 「ADFI画像認識」で作成したAIモデルの「AIモデル評価」画面を開き、「AIアプリを作成」ボタンを押してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/4c6d00f3-9ef7-b9b0-88ae-174af98e6b9e.png)


- 「AIアプリ名」「アプリに表示するタイトル」「カラーテーマ」を入力して、「OK」ボタンを押してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/3b32534b-0d68-2cc6-6ed6-29918a03aa21.png)

- AIアプリを作成できました。「QRコードを表示」ボタンを押すと、スマートフォンでAIアプリを利用するためのQRコードが表示されます。
- スマートフォンでQRコードを読み取ってください。AIアプリが起動します。
  - 「アプリ公開URL」のURLにブラウザでアクセスすることでもAIアプリを利用可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/52363e73-c91e-060b-2d63-23b63c67206b.png)

## 2. AIアプリの利用
作成したAIアプリを使って、スマートフォンで画像認識AIを実行してみましょう。
 - AIで認識したい対象物を写した状態で、「撮影実行」ボタンを押します。
   - もしスマートフォンに保存されている画像に対して画像認識AIを実行したい場合は、 「画像アップロード」ボタンを押して、画像を選択してください。
 - 確認画面が表示されますので、「実行」ボタンを押します。AIの認識結果が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/de3c0add-9fe6-0401-2d42-270405d33d8a.png)
【簡単AWS】【AWS初心者向け】Amazon CloudWatchの基本と使い方

## 機能概要
**Amazon CloudWatch**は、AWSが提供する**監視・ログ管理サービス**です。  
AWSリソースやアプリケーションの**状態をリアルタイムで監視・可視化**し、アラート通知やログ分析が行えます。  

この記事では、CloudWatchの基本的な機能や使い方を分かりやすく説明します。  
AWSの運用監視に取り組んでいる方や、CloudWatchを使い始めた方の参考になれば幸いです。

---

## CloudWatchの主な機能  

### 1. メトリクスの監視  
CloudWatchは、**EC2、RDS、Lambda**など主要なAWSサービスのメトリクスをリアルタイムで監視できます。  
代表的なメトリクスには以下があります：  

| サービス | 主なメトリクス                 | 説明                         |
| -------- | ---------------------------- | ---------------------------- |
| **EC2**  | CPU使用率、ディスク使用率      | インスタンスの負荷を確認       |
| **RDS**  | 接続数、クエリ実行数           | データベースの状態を監視      |
| **S3**   | リクエスト数、エラー数          | S3バケットの利用状況を確認    |
| **Lambda** | 実行回数、エラー数、実行時間 | サーバーレスアプリの監視     |

#### **カスタムメトリクスの利用**  
CloudWatchでは**独自のメトリクス**も追加可能です。  
例えば、アプリケーションのエラー数やAPIリクエストの応答時間をカスタムメトリクスとして監視できます。

---

### 2. アラームの設定  
CloudWatchアラームを使うと、指定した**メトリクスが閾値を超えたときに通知やアクション**を自動化できます。  

**アラームの例：**  
- CPU使用率が80%以上になった場合、**SNSを通じてメール通知**  
- EC2インスタンスの異常時に**自動再起動**  

```
例）CPU使用率 > 80% → メール通知 + インスタンス自動再起動
```

---

### 3. ログ管理（CloudWatch Logs）  
**CloudWatch Logs**は、アプリケーションやAWSサービスから生成される**ログを収集・保存・分析**できる機能です。  
- **Lambda、ECS、API Gateway**のログも自動で収集可能  
- ログデータを**リアルタイム分析**してエラーの原因を特定  
- **保存期間の設定**も柔軟に可能  

---

### 4. CloudWatch Logs Insights  
CloudWatch Logs Insightsは、ログデータをSQL風の**クエリ言語**で分析する機能です。  

#### **主な用途**  
- 特定のエラーコードの発生頻度を調べる  
- 特定ユーザーのアクセス数をカウント  
- アプリケーションログから応答時間を集計  

---

### 5. カスタマイズ可能なダッシュボード  
CloudWatchには**ダッシュボード機能**があり、複数のメトリクスを1つの画面にまとめて可視化できます。  
例えば、**EC2のCPU使用率**と**RDSのクエリ数**を同時に表示してパフォーマンスを監視できます。  

ダッシュボードは**リアルタイム更新**が可能で、運用監視の効率化に役立ちます。  

---

## CloudWatchのメリット  

- **AWSサービスとシームレスに連携**  
- **リアルタイムで監視・通知が可能**  
- **カスタマイズ性が高い**（カスタムメトリクス・ダッシュボード）  
- **使った分だけ課金されるコスト効率の良さ**  

CloudWatchを活用することで、AWS環境全体の可視化と安定運用が実現します。  

---

## まとめ  
Amazon CloudWatchは、AWSリソースの監視やログ分析を一元管理できる強力なツールです。  
適切にメトリクスとアラームを設定することで、システムの安定稼働を支援します。  

今後の記事では、CloudWatchアラームの具体的な設定方法やCloudWatch Logs Insightsのクエリ例も紹介する予定です。 

---

## 参考リンク  
- [Amazon CloudWatch公式ドキュメント](https://docs.aws.amazon.com/ja_jp/cloudwatch/)
クラウドVMの価格比較(2025年2月)

# 概要
クラウドのVMを使っていろいろやりたいが、特に個人で使いたい場合は毎月かかる費用が気になります。
ここではどれくらいの費用がかかるか各クラウドの価格サイトから計算してみました。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/94f4dc4b-4fac-3411-4305-c56b73a2a844.png">

# 比較の前提
国内外のクラウドベンダーにより提供されていますので選択肢は多くありますが、管理やセキュリティにも関心がありますのでデジタル庁が[ガバメントクラウド](https://www.digital.go.jp/policies/gov_cloud)として認定した5事業者を対象にしたいと思います。
■ Amazon Web Services
■ Google Cloud
■ Microsoft Azure
■ Oracle Cloud Infrastructure
■ さくらのクラウド（※2025年度末までに全ての要件を満たす条件付き）

- 3つのシェイプを計算
    - 一番安いVM
    - 2vCPU 8GBメモリ 50GBディスクの無料Linux
    - 2vCPU 8GBメモリ 50GBディスクのWindows
    　 要件に合うプランがない場合は要件を満たす近いプランを選択
- VMアーキテクチャはx64
- CPUパフォーマンスは考慮しないが、なるべく古すぎずコストパフォーマンスがよいシェイプを選択
- できるだけ東京リージョンで提供しているシェイプを選択
- 1か月使い続ける
- 容量予約や前払い等は使用しない
- 無料枠は使用しない
- 通貨単位がUSDの場合は155円/USDで計算

# 月額試算
**この試算は比較のための参考情報ですので各事業者から公式情報の入手をお願いします。**
2025/2/1現在の価格サイト情報です。
- 小数点は切り捨て
- 単位 円/月
## Amazon Web Services(AWS) 
試算したサイト:https://calculator.aws/
- t3a.nano 2vCPU 0.5GBメモリ gp3 8GBディスク Linux  
    - 8.87USD(1,374円)
- m6a.large 2vCPU 8GBメモリ gp3 50GBディスク Linux  
    - 89.92USD(13,937円) 	
- m6a.large 2vCPU 8GBメモリ gp3 50GBディスク Windows
    - 157.08USD(24,347円)	

(*)パブリックIPv4アドレス利用については2024/2/1から有料(0.005USD/時間)となりましたので試算に追加
[パブリック IPv4 アドレスの利用に対する新しい料金体系を発表](https://aws.amazon.com/jp/blogs/news/new-aws-public-ipv4-address-charge-public-ip-insights/)

## Microsoft Azure 
コンソールにて確認
- B1ls 1vCPU 0.5GBメモリ Standard HDD 32GBディスク Linux  
    - 10.15USD(1,573円)
- D2as_v4 2vCPU 8GBメモリ Premium SSD 64GBディスク Linux  
    - 105.91USD(16,416円)
- D2as_v4 2vCPU 8GBメモリ Premium SSD 128GBディスク Windows  
    - 184USD(28,520円)

(*)パブリックIPv4アドレス利用については有料(0.005USD/時間)となりましたので試算に追加
[IP Addresses pricing](https://azure.microsoft.com/en-us/pricing/details/ip-addresses/)

## Google Cloud
コンソールにて確認
- e2-micro 2vCPU 12.5%Baseline 1GBメモリ 標準永続20GBディスク Linux 
    - 8.88USD(1,376円)	
- n2d-standard-2 2vCPU 8GBメモリ バランス永続50GBディスク Linux 
    - 69.8USD(10,819円)  利用割引適用済
- n2d-standard-2 2vCPU 8GBメモリ バランス永続50GBディスク Windows 
    - 136.96USD(21,228円) 利用割引適用済

(*) 4分の1以上使用すると、1時間ごとに継続利用割引が自動的に適用
 [Compute Engine の継続利用割引](https://cloud.google.com/compute/docs/sustained-use-discounts?hl=ja)

## Oracle Cloud Infrastructure (OCI) 
試算したサイト:https://www.oracle.com/jp/cloud/costestimator.html
- VM.Standard.E4.Flex 2vCPU 12.5%Baseline 1GBメモリ 50GBディスク Linux  
    - 862円
- VM.Standard.E4.Flex 2vCPU 8GBメモリ 50GBディスク Linux   
    - 5,634円
- VM.Standard.E4.Flex 2vCPU 8GBメモリ 50GBディスク Windows 
    - 16,243円

## さくらのクラウド 
試算したサイト:https://cloud.sakura.ad.jp/payment/simulation/
- 1vCPU 1GBメモリ SSD 20GBディスク Linux   
    - 2,530円
- 2vCPU 8GBメモリ SSD 100GBディスク Linux   
    - 11,330円
- 2vCPU 8GBメモリ SSD 100GBディスク Windows 
    - 13,970円

## 比較表
試算した結果を表にまとめました。
- 小数点は切り捨て
- 単位 円/月

|クラウド  |最安     |2vCPU Linux |2vCPU Windows |
|---------|--------:|------------:|--------------:|
|AWS  |1,374  |13,937  |24,347 |
|Azure  | 1,573 | 16,416 |28,520 |
|Google Cloud  |1,376  |10,819  |21,228 |
|OCI  | 862 |5,634  |16,243 |
|さくらのクラウド   |2,530  |11,330  |13,970 |

# その他
費用を抑えるヒントとして以下が挙げられます。各社によって異なりますがご参考ください。
- 無償枠の利用
- スポットインスタンスの利用
- 使わない時はVMを停止
- CPU使用頻度によってシェイプサイズを変更(再起動が必要)
- 予算を設定しておき、費用が予算を超えそうな場合に通知
Codewars 8 kyu Add Length

# Codewars
8 kyu Add Length
https://www.codewars.com/kata/559d2284b5bb6799e9000047/train/python
What if we need the length of the words separated by a space to be added at the end of that same word and have it returned as an array?

# verbalization
Split words with space. (use .split(“ ”))
Count each length of words. (use len())
Add 2. after each words. (use append)

# Code 
```py
def add_length(str_):
    w = str_.split(" ")
    n = []
    for i in w:    
        l = i + " " + str(len(i))
        n.append(l)
    return n
 
```
バイナリエディタでファイル内部を確認してみよう！（過去記事2024）

# はじめ
ファイル名とと中身が同じか限らない？！
みなさん、拡張子にpngと書いてあるからってそのファイルの中身つまり、データがpngじゃないかもしれません。
何と恐ろしい、、
そこで、今回は、ファイルを開く前にファイルの中身がなんなのかいくつか覗いてみたいと思います！

# 目次

1. 正解が欲しい！！
1. あなたの資料拝見します。



# 正解が欲しい！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3593749/a4c72649-9f96-26f0-5264-4ddd626c5915.png)
なんと！ここに「中身気になる.XLS」がいます！
非常に気になりますね、、
でも、この子本当にXLSファイルなんでしょうか、、？
調べてみると、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3593749/afde0e44-a820-27db-763e-bb31415ed695.png)

あれ、、？
GIF形式ですね、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3593749/4091028c-7f81-7288-6ef4-40b120b7971d.png)

## あなたの資料拝見します。
プレゼン資料を送ってもらったけど、もしかしたら送信時にデータが変わってるかも、、？
これも調べてみましょう！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3593749/0d9f8302-6af0-7195-460a-03d21c81ecf2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3593749/e92b2d83-ad07-c8fd-40de-be9339dffbd3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3593749/b6ce0884-e752-0d51-f994-545c12714e0e.png)

あれ？！正真正銘PPTX形式のファイルなんですが、バイナリエディタでファイル内部を確認してみたらZIP形式のファイルという結果に、、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3593749/27e21b20-408b-24ba-6aa3-ae543eafb5a0.png)

ZIPにしてみることに
展開してみると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3593749/71c91301-f701-67d4-5484-fa933ae0b4ad.png)

何と全く身に覚えのないファイルちゃんたちが、

調べてみると、
「.pptxファイルの実態はzipされたファイル群」
実は、末尾にxのつく他のMS Officeのファイル（.xlsx、.docx）も同様です！
知りませんでした、、

つまり、ファイル名の拡張子を.pptx➔.zipに変更して展開すると、中身が見れちゃうってわけですね。

非常に面白いですね！
このことによって直接編集ができちゃうわけですよねｗ、
ちょっと中身をのぞいてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3593749/c0610648-9230-0e32-7486-bf8f5ae26bf3.png)
文字の色指定っぽい数値が！
こんな感じに書かれているんですね、
3次元点群の曲率を計算

# この記事では
MATLABの点群処理系のToolboxに、曲率を計算する機能が無かったので簡易的なものを作成してみました。

# 環境
MATLAB R2024bもしくはR2024
Computer Vision Toolbox

# 曲率計算手法
まじめにやろうとすると、局所点群に対して球にフィッティングすることになるかと思いますが、簡易的な方法として、固有値をベースに下記の計算で曲率とするケースもあります。
## 手順

1. **点群データの取得**  
   点群データを取得し、各点の近傍点を探索します。近傍点の探索には$k$-近傍法や半径検索法が一般的に用いられます。

2. **共分散行列の構築**  
   各点の近傍点を用いて共分散行列$\mathbf{C}$を構築します。共分散行列は次のように計算されます：

   $$
   \mathbf{C} = \frac{1}{N} \sum_{i=1}^{N} (\mathbf{x}_i - \bar{\mathbf{x}})(\mathbf{x}_i - \bar{\mathbf{x}})^\top
   $$

   ここで、$\mathbf{x}_i$は$i$番目の近傍点の座標、$\bar{\mathbf{x}}$は近傍点の重心、$N$は近傍点の数です。

3. **固有値と固有ベクトルの計算**  
   共分散行列$\mathbf{C}$の固有値$\lambda_1, \lambda_2, \lambda_3$（$\lambda_1 \geq \lambda_2 \geq \lambda_3$）と対応する固有ベクトルを計算します。

4. **曲率の計算**  
   曲率は以下のように最小固有値$\lambda_3$を用いて計算されます。
   
     $$
     \text{曲率} = \frac{\lambda_3}{\lambda_1 + \lambda_2 + \lambda_3}
     $$

# MATLABコード
下記のように書くことが可能です。

```matlab
ptCloud = pcread('teapot.ply');
% 近傍計算に用いる点数
numNeighbors = 10;

% 無効点・重複点を除去
[ptCloud_val, isValid] = ptCloud.removeInvalidPoints;
locs = unique(ptCloud_val.Location,"rows");
ptCloud_val = pointCloud(locs);

% 近傍点のインデックスを取得
ind = ptCloud_val.multiQueryKNNSearchImpl(locs,numNeighbors); % R2024bまではこちら
% ind = findNearestNeighbors(ptCloud_val, locs, numNeighbors); % R2025aからはこちら

% 各点の近傍点座標の抽出
neighPts = reshape(locs(ind(:),:),numNeighbors,[],3);
neighPts = permute(neighPts,[1 3 2]);

% 共分散行列の計算
n_neighPts = neighPts - mean(neighPts,1);
covs = pagemtimes(permute(n_neighPts,[2 1 3]), n_neighPts) ./ (numNeighbors-1);

% 固有値計算
eigVals = pageeig(covs);

% 曲率計算
curvatures = squeeze(eigVals(1,1,:) ./ sum(eigVals,1)); % 一つ目が最小固有値になっている
```

# 結果の確認
曲率に応じて色を変えて表示します。
```matlab
cmap = turbo(256)
pcshow(locs,cmap(round(curvatures*3*255+1),:),'MarkerSize',10);
```
今回出している曲率の最大値は$\lambda_3=\lambda_2=\lambda_1$となるときで、このとき曲率は1/3となります。カラースケールが0-255なので3*255を掛けています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202697/0b1e6e65-0401-bb01-3249-cec91270d54e.png)

それっぽい結果になっています。値が小さいところでもっと変化付けてもいいかもしれませんｎ。。。

# まとめ
3次元点群の曲率を直接計算する関数が無かったので、簡易的なものを作成してみました。点群の局所特徴量として固有値をベースにしたものはほかにもたくさんあるようなので、また紹介できればと思います。
【OCVS Migration】オンプレミスVMware環境からOCVSへのクラウドリフトについて

みなさん、こんにちは！

2023年11月、Broadcom社によるVMware社の買収に伴い、VMwareの代替製品の検討や、オンプレミスVMware環境からクラウドリフトを模索する動きが広がりつつあります。
今回はクラウドリフトに焦点を当て、クラウドの中でもOracle Cloud Infrastructure(OCI)のVMwareソリューション
「Oracle Cloud VMware Solution(OCVS)」について紹介いたします。

## Oracle Cloud VMware Solution(OCVS)とは
Oracle Cloud VMware Solution(以下OCVS)とは、※Oracle Cloud Infrastructure(以下OCI)上でVMware vSphere環境を提供するサービスです。
※OCI...Oracle社が提供しているクラウドサービスであり、PaaSやIaaSのサービスを提供している

OCVSは、オンプレミスと同じVMware vSphere環境をそのままクラウド上で利用することが可能です。
そのため、新たにツールの使用方法や管理方法を覚える必要がなく、従来通りの操作でVMware環境の管理を実現します。

OCVSのようなVMwareクラウドサービスはいくつかありますが、その中でもなぜOCVSを選定するのか。
次のセクションでは、OCVSのようなVMware関連サービスと比較してOCVSの特徴を紹介します。

## VMwareクラウドサービスの中でもなぜOCVSなのか
今回は6つのポイントからOCVSの特徴を見ていきます。
|  | OCVS | VMware Cloud on AWS | Google Cloud VMware Engine | Azure VMware Solution |
|:-|:-|:-|:-|:-|
| ①ライセンス  | あり  | あり  | あり  |  あり |
| ②配置されるネットワーク  | ユーザの仮想ネットワーク内  |  別ネットワーク |  別ネットワーク | 別ネットワーク  |
| ③管理者権限の所有  | 	ユーザが保持  | AWSが保持  | GCPが保持 | Azureが保持  |
| ④Oracle Databaseとの連携  | 可能  |  可能 |  可能 | 可能  |
| ⑤HCXの利用  | 可能  | 可能  | 可能  | 可能  |
| ⑥CPUタイプ  |  	Intel/AMD Denseシェイプ、Intel/AMD Standardシェイプ | Intel Denseシェイプ  | Intel Denseシェイプ  |Intel Denseシェイプ   |

**①ライセンス** 
VMwareライセンスは、NSX-T/vSphere/vSAN/vCenter/HCXを提供しています。
・ライセンス費用はOCVSに含まれている

**②配置されるネットワーク**
OCI上のクラウド・ネットワーク内にVMware専用仮想ネットワークを構成し、VMware環境を構築します。
・セキュリティやポリシーをオンプレミス同等に設定することも可能
・同じネットワーク内でデータベースやクラウドサービスを稼働することで、安定且つ、低遅延なアクセスと連携を実現

他クラウドサービスでは、VMware環境を別のネットワークへデプロイするため、VMware環境の管理が制限されます。
また、ベンダーが管理者権限を保持しているため、管理者アクセスが制限されます。

**③管理者権限の所有**
OCVSはフルマネージドサービスではないため、ユーザが管理者権限を保持します。
・ユーザが管理者権限を保持することで、vCenter ServerやESXiホストへの管理者アクセス、パッチ適用やバージョンアップなどの作業をユーザのタイミングで実施することが可能
・他のシステムやソフトウェアの利用においても管理者権限が必要になる場合があるため、ユーザが権限をコントロールできることは、運用の自由度を高める

**④Oracle Databaseとの連携**
OCVSは、Oracle Databaseとの連携を柔軟に行えます。
・OCVS上でデータベースやアプリケーションを稼働させたり、別のハードウェアでデータベースをPaaSまたはIaaSで稼働させたりすることが可能
・Oracle DatabaseライセンスのBYOLが可能のため、新たにライセンスを購入する必要がなくコストを最小限に抑えることが可能

**⑤HCXの利用**
HCXとは「Hybrid Cloud Extension」の略で、データセンターからクラウドといった異なるサイト間で仮想マシンの移行を実現できるソフトウェアです。
・HCXの機能の一つである「L2延伸」を利用することで、既存のネットワーク構成を維持しつつ、異なるサイト間の移行を可能とする
・HCXによる移行方法は数種類あるため、要件に合った移行方法を選択することが可能

**⑥CPUタイプ**
CPUタイプに関してはOCVSではなくOCIの特徴となりますが、OCVSを構築する上で土台となる部分のため紹介します。
・他クラウドサービスで使用できるCPUは「Intel Denseシェイプ」のみだが、OCIではクラウドサービスで唯一AMDを使用することが可能
・16種類のサーバが提供されており、「Intel/AMD Denseシェイプ」「Intel/AMD Standardシェイプ」から要件や用途に合ったスペックを選択することが可能
OCIのサーバの詳細については、以下Oracle公式サイトをご参照ください。
[コンピュート・シェイプ](https://docs.oracle.com/ja-jp/iaas/Content/Compute/References/computeshapes.htm)

## 最後に
簡単ではありますが、OCVSについて紹介いたしました。
オンプレミス環境とクラウド環境に互換性があり、使い慣れた仮想化基盤をクラウド上で利用できること、そして何よりも柔軟性と自由度の高さがOCVSの特長だと思います。

次回は「オンプレミス環境からOCVSへのVM移行方法」について紹介しますので、是非ご覧ください。
AI応用開発の浅見

生成的AI技術の急速な発展に伴い、AIは現代ソフトウェアの不可欠な一部となりました。AIをより良く製品に統合する方法が、各業界や各開発者が直面しなければならない課題となっています。以下、13の重要事項を8つの核心トレンドに絞り込み、わかりやすい言葉で各トレンドを解説し、実例を用いて説明します。

- **AIと業界の「深い結合」が未来の主旋律**

  AIは万能薬ではありません。業界の状況に深く結びつくことで初めて真価を発揮します。異なる分野には異なるニーズがあり、カスタマイズされた解決策が主流となります。

  分かりやすく言うと：AIは「地に足をつけ」、業界の知識を理解してこそ実績を上げることができます。

  例：  
  医療分野で、AIは医師の画像解釈を助けることができます。例えばGoogleのAIシステムは、肺がんの画像を正確に分析できます。また、DeepMindのAlphaFoldはタンパク質構造を予測し、製薬会社の研究時間を数年短縮しました。簡単に言えば、AIは単なるツールではなく、業界の「専門アドバイザー」のようなものです。

- **ユーザーはますますAIがどのように決定を下すのか知りたがる**

  AIの決定を透明化することがますます重要になっています。企業でも個人ユーザーでも、AIの「思考回路」を知りたいのです。不透明なAIは信頼できないだけでなく、法律や倫理の問題を引き起こす可能性があります。

  分かりやすく言うと：誰もが「ブラックボックス操作」が嫌いであり、AIがどのように考えているかを見たがっています。

  例：  
  銀行の信用スコアリングシステムが良い例です。もしAIモデルがある人へのローンを拒否する決定を下す場合、銀行はなぜ拒否したのかを明確に説明できなければなりません。LIMEやSHAPのようなツールは、開発者がモデルの決定に至った根拠を示すのに役立ちます。

- **データプライバシーと安全の問題は一つも無視できない**

  AIがどれほど強力でも、「プライバシーを守る」ことが基盤にあります。ユーザーはますますデータの安全性に関心を持っており、AI製品は技術的にユーザーに安心感を与えなければなりません。

  分かりやすく言うと：私のデータを盗らないでください、そして悪者が私のモデルを持って行かせないでください。

  例：  
  Googleのフェデレーレーニング技術は、革新的です。これは、ユーザーのデバイスでAIモデルをローカルトレーニングすることを許可し、データをアップロードせずに、プライバシーを保護しながらAIの能力を向上させます。例えば、Android携帯のパーソナライズされた入力提案はこの技術を使用して実現されています。

- **小さくて精巧なAIが人気、特にエッジデバイス上で動作するもの**

  スマートスピーカー、ドローン、産業センサーなどの場面では、AIモデルに対して「賢く小さな」要求があります。モデル圧縮技術を通じて、AIはこれらの小型デバイス上でも動作できるようになります。

  分かりやすく言うと：AIは「大きさ」だけではなく、「賢く」やりくりする方法を学ぶ必要があります。

  例：  
  アマゾンのAlexaスマートスピーカーはこの方法を取っています。音声認識モデルが非常に軽量化されているため、低消費電力のハードウェア環境でもスムーズなユーザー体験を提供しています。

- **マルチモーダルAIがより「自然な」インタラクションを実現し、より「魅力的な」体験を提供**

  将来のAIは単一機能のツールではなく、テキスト、画像、音声、ビデオなど様々な情報を統合できます。ユーザーはAIに自分をもっと理解してもらい、インタラクションが友達と話しているように自然であることを望んでいます。

  分かりやすく言うと：AIは「見る、聞く、話す、理解する」を学び、万能選手になることが必要です。

  例：  
  OpenAIのChatGPTとDALL-Eが組み合わさることで、例として「サングラスをかけた猫を描いて」と言えば、描くだけでなく、その猫についての質問にも答えることができます。教育、エンターテインメント、コンテンツ制作の体験がどれほど異なるものになるか想像してみてください。

- **AIとエコシステムの共同で1+1>2**

  孤立したAIは先に進みづらいです。将来のAIアプリケーションは、オープンなエコシステムを構築してAPIやパートナーシップを通じて、より多くの人々が参加し、共に製品を改善する傾向があります。

  分かりやすく言うと：AIは団結し、より速く、良く発展していく必要があります。

  例：  
  Microsoft AzureのOpenAIサービスは、GPTモデルのAPIをオープンにし、企業が生成的AIの能力を直接自社製品に組み込むことを可能にしています。このような協力モデルは、Microsoftを強化するだけでなく、小規模な企業も先進的なAI技術を使う機会を得ています。

- **継続的な学習能力がAIをより「賢く」、より理解してくれる**

  ユーザーのニーズは常に変わり続けているため、AIは自らを常に更新し、変化に追随できる方法を学ぶ必要があります。継続的学習と適応技術は、将来のAI製品において重要な方向性となるでしょう。

  分かりやすく言うと：AIは「生きた知識」とし、「変わらない」でいることはできません。

  例：  
  Netflixの推薦システムが一つの例です。ユーザーの視聴習慣を分析し、推薦アルゴリズムを継続的に調整することで、ユーザーが常に好みの映画やドラマを見つけられるようにします。この「時代遅れにならない」AI体験は、ユーザーの満足度を大いに向上させました。

- **AI製品には技術と倫理のバランスが必要、長期的な発展が未来を築く**

  AIがより強力になるほど、もっと規制が必要です。倫理問題、例えばバイアス、誤用、さらには「AIの偽造」などは十分な注目を集めるべきです。法令遵守のデザインは単なる技術的な問題ではなく、社会的責任に関わることです。

  分かりやすく言うと：AIは効率だけではなく、「人情」も考慮する必要があります。

  例：  
  ヨーロッパのGDPR法は、AI製品のデータ使用ルールを明確に規定しており、乱用やバイアスを防ぐことができます。多くの企業は、製品設計段階で、潜在的な倫理的リスクを避ける方法を既に考慮し始めています。例えば、生成的AIの有害なコンテンツを制限することがあります。

**まとめ**

この8つのトレンドを一言でまとめると：

**AIは単なる技術ではなく、製品、業界、ユーザー体験、および社会的責任の結合体です。**

業界シーンを理解し、プライバシーを保障し、多モードインタラクションを促進し、エコシステムを構築するなど、各トレンドは、未来のAIが「より強く」なるだけでなく、「より親切で、より信頼できる」方向に進むことを示しています。企業と開発者は着実に一歩一歩とAIを私たちの生活に真に統合し、ユーザーにより大きな価値を提供していく必要があります。

(Translated by GPT)
2024年のまとめ

2024年をもうすぐ見送るにあたり、この1年を振り返ると、収穫と成長に満ちていました。この1年、私は生成AIの発展に大いに関与し、創作、共有、実践の中で多くの忘れがたい瞬間を残しました。

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

### 50以上のブログ記事

私は『桂迹』というWeChat公式アカウントで、生成AI、技術実践、製品経験に関する50篇以上の記事を発表しました。各ブログには私の考察と探究が込められており、読者に洞察と価値を届けられたらと願っています。これらの記事は、AI技術と業界動向に対する私の観察を完全に記録しています。具体的な内容は『桂迹』の「歴史記事」欄を参照してください。

### 5つのイベント

**1. 3月10日イベント: 生成AIアプリケーション開発**

- **開催場所:** 東京
- **共有したテーマと内容:**
  1. 「生成AIの紹介」生成AIの概念、現状、GPTの原理とアルゴリズム、生成AIの応用レベル
  2. 「プロンプトエンジニアリング」プロンプトのガイドライン、構造、構築
  3. 「GPTを使った開発」ChatGPTのプロダクト支援とアーキテクチャ支援、Copilotによる開発とテスト支援
  4. 「セマンティックカーネルケース」Chat、DallE、GPTVision、エージェント、LaMA2i

- **イベントのまとめ:**
  東京で開催された「生成AIアプリケーション開発」のイベントの詳細なまとめを見ることができます。

---

**2. 6月14日: Microsoft AI Day in Beijing**

- **開催場所:** 北京
- **共有したテーマと内容:**
  - 「Semantic Kernelケース紹介」: セマンティックカーネルを伝統的なアプリケーション開発言語と大規模言語モデル（LLM）との橋渡しとして、アプリケーションのAI化を推進する重要なツール。この活動では、「SmartFill」のケースを通じて、セマンティックカーネルとLLMを組み合わせて業務プロセスを最適化し、作業効率を向上させる方法を紹介しました。

- **活動ビデオ:**
  ビデオを見ることができます。

---

**3. 11月16日: AIアプリ開発の旅**

- **開催場所:** 東京
- **開催テーマと内容:**
  - 「AIアプリ開発の実用的なシェアリング」: セマンティックカーネルの主要機能を深く解析し、どのようにAIの基本機能を通して開発者に力を与えるかを考察します。「SmartFill」の開発における私の実務経験を組み合わせ、どの機能をAIで実現するかを効果的に選択し、AIの役割を適切に位置付け、開発におけるAIのコストを合理的に判断し、プロジェクトを完了していく過程での苦労などを紹介します。

- **イベント結果:**
  [イベント詳細](https://just-agi.com/event202411.html)

---

**4. 12月14日: .NET Conf China 2024**

- **開催場所:** 上海
- **開催テーマと内容:**
  - 「Semantic Kernelで企業向けのAIベースを構築」: 広範な製品とサービスを有する企業がAI機能を迅速に統合し、AIの開発作業を省き、AIの制御性と適合性を保証し、モデルのパフォーマンスと信頼性を確保する方法について議論。この課題を解決するために、統一AIベースの構築が重要です。 Semantic Kernelは、様々なモデルをサポートする軽量のオープンソース開発ツールキットであり、AIベースの構築に適しています。本プレゼンテーションでは、Semantic Kernelの機能とAIベースの基盤の重要性を説明し、AIベースが企業に与える価値を話し合います。

- **イベント関連情報:**
  [.NET Conf China 2024，六年の約束](https://mp.weixin.qq.com/s/1vn8PLEcnQ-vauu3tbr-QA?token=1729762357&lang=zh_CN)

---

**5. 12月14日: After MS Ignite & .Net Conf 2024**

- **開催場所:** 北京
- **開催テーマと内容:**
  - 「AIアプリケーション開発の実用的なシェアリング」

- **参加方法:** 録画ビデオ
- **活動関連情報:**
  [マイクロソフト技術直通車（第二十二期） .Net Conf 2024（Beijing）現場記録](https://mp.weixin.qq.com/s/MZhUSyGRCiE8UIXmVMiZlQ)

### AI製品：「SmartFill」

今年、「SmartFill」のリリースが私の重要な里程標となりました。このインテリジェントAIデータ入力支援ツールはLLMをコア基盤とし、Chrome拡張機能を通じて情報の抽出、集約、分類、変換を行い、効率的で正確な入力体験をユーザーに提供します。「SmartFill」の導入により、AI製品の実践で新たな突破口を得ることができました。[詳細はこちら](https://just-agi.com/smartfill/index.html)

(Translated by GPT)
カテゴリ作成定義をTAPとして保存し再利用する(SPSS Modeler データ加工逆引き13-6)

# カテゴリ(類似ワード群)作成定義をTAPとして保存し再利用する

![スクリーンショット 2025-01-21 12.51.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/5895de74-dc8f-39cb-7551-82f591a64260.png)

この記事はSPSS Modeler Premium Ver18.6から追加された日本語テキスト機能を利用して書いています。SPSS Modeler Professionalをお使いの方はアップグレードするかPython連携を用いて実現します。

Python連携を紹介する記事はこちら

https://qiita.com/harrowharrow16/items/248ff8fe3879b63e7ae3

## 1.想定される利用目的

・抽出されたコンセプトを統合したカテゴリの定義を再利用する

## 2.ストリームとデータのダウンロード

ストリーム

https://github.com/yoichiro0903n/blue/raw/refs/heads/main/concept2category_tap.str

データ

https://github.com/yoichiro0903n/blue/blob/b02b11130c8c35ff26b8f2336d1aa8001374316a/comments2024_mac.csv

TAP

https://github.com/yoichiro0903n/blue/blob/main/telecotest.tap


## 3.サンプルストリームの説明


この記事は　データ加工逆引き13-3で扱った内容の後続プロセスです。

https://qiita.com/416nishimaki/items/23ea2059a7bf7d8f1cfc


#### インタラクティブワークベンチの定義をTAPとして保存する

![スクリーンショット 2025-01-21 12.54.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c5a3b9ef-2e77-481c-a4f9-d2a996d10e4f.png)

画面左上のファイルメニューからテキスト分析パッケージ（TAP）を作成

![スクリーンショット 2025-01-21 13.04.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/6fa7011f-fd97-9aaf-158b-1c9ebe3a3549.png)

任意の名前をつけてTAPとして保存します。

![スクリーンショット 2025-01-21 13.12.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/0efd447c-2af5-2f6d-9328-fb7a5402a821.png)

#### 保存済みのTAPを呼び出して利用する

![スクリーンショット 2025-01-21 13.08.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/fcd75e72-fe20-2d4a-5c0b-285d7fd048c5.png)

a.入力データは以下の通りです。

![スクリーンショット 2024-12-13 10.41.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/5e740adc-dfde-7dfd-f7b6-6a51676d053c.png)

b.[テキストマイニング]ノードを編集します。[IDフィールド]と[テキストフィールド]を以下の通り選択します。

![スクリーンショット 2024-12-18 10.04.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/609a7ddc-efbd-b432-79e7-25a97ce54674.png)

[モデル]タブを編集します。テキスト分析パッケージを保存先から[読み込み]ます。

![スクリーンショット 2025-01-21 13.12.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/7b1b19b2-b125-88e8-2a1a-409345204501.png)

[実行]します。定義済みのカテゴリに分類されています。

![スクリーンショット 2025-01-21 13.13.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f5879252-2c39-4160-0500-a54223f349d6.png)


#### 注意事項

テキスト処理の度に全く同じカテゴリ定義でフラグ化する場合には、作成済みのナゲットを保存してスコアリングに利用します。

## 4.参考情報

#### Python連携によるテキストマイニング

https://qiita.com/harrowharrow16/items/248ff8fe3879b63e7ae3

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/items/4bf813e6cba84b2a1008
暫定メモ　外部リンクを削除するVBA

Sub ディレクトリのすべてのExcelファイルの外部リンクを解除()
    Dim ファイルパス As String
    Dim 検索フォルダ As String
    Dim fs As Object
    Dim 外部リンク解除状況 As String

    ' 処理対象のディレクトリを指定（手動で変更）
    検索フォルダ = "C:\対象のディレクトリ\"

    ' ファイルシステムオブジェクトを初期化
    Set fs = CreateObject("Scripting.FileSystemObject")

    ' 外部リンク解除状況を初期化
    外部リンク解除状況 = "外部リンク解除状況：" & vbNewLine

    ' 自動更新や警告メッセージの抑制
    Application.DisplayAlerts = False
    Application.AskToUpdateLinks = False
    Application.EnableEvents = False

    ' 再帰的に探索し、外部リンクを解除
    Call 探索とリンク解除(fs.GetFolder(検索フォルダ), 外部リンク解除状況)

    ' 自動更新や警告メッセージの設定を戻す
    Application.DisplayAlerts = True
    Application.AskToUpdateLinks = True
    Application.EnableEvents = True

    ' 結果をコンソール（イミディエイトウィンドウ）に表示
    Debug.Print 外部リンク解除状況

    MsgBox "処理が完了しました。結果はイミディエイトウィンドウで確認してください。", vbInformation
End Sub

Private Sub 探索とリンク解除(フォルダ As Object, ByRef 外部リンク解除状況 As String)
    Dim ファイル As Object
    Dim サブフォルダ As Object
    Dim wb As Workbook
    Dim 外部リンク As Variant
    Dim ファイルパス As String
    Dim ファイル名 As String
    Dim リンク解除されたか As Boolean

    ' フォルダ内のすべてのExcelファイルを探索
    For Each ファイル In フォルダ.Files
        ファイル名 = ファイル.Name
        ファイルパス = ファイル.Path

        ' ファイル名に「あいうえお」が含まれる場合はスキップ
        If ファイル名 Like "*[あいうえお]*" Then
            ' スキップした場合は何も出力しない
            GoTo 次のファイル
        End If

        リンク解除されたか = False

        ' ファイルをポップアップなしで開く（ReadOnlyでリンク更新しない）
        On Error Resume Next
        Set wb = Workbooks.Open(Filename:=ファイルパス, ReadOnly:=True, UpdateLinks:=False)
        On Error GoTo 0

        If Not wb Is Nothing Then
            ' 外部リンクをチェック
            外部リンク = wb.LinkSources(Type:=xlLinkTypeExcelLinks)

            If Not IsEmpty(外部リンク) Then
                リンク解除されたか = True

                ' 外部リンクをすべて解除
                Dim i As Integer
                For i = LBound(外部リンク) To UBound(外部リンク)
                    wb.BreakLink Name:=外部リンク(i), Type:=xlLinkTypeExcelLinks
                Next i
            End If

            ' ブックを保存せずに閉じる
            wb.Close SaveChanges:=False
            Set wb = Nothing
        End If

        ' 結果を記録
        If リンク解除されたか Then
            外部リンク解除状況 = 外部リンク解除状況 & ファイルパス & " - 外部リンクを解除しました" & vbNewLine
        Else
            外部リンク解除状況 = 外部リンク解除状況 & ファイルパス & " - 外部リンクはありません" & vbNewLine
        End If

次のファイル:
    Next ファイル

    ' サブフォルダを再帰的に探索
    For Each サブフォルダ In フォルダ.SubFolders
        Call 探索とリンク解除(サブフォルダ, 外部リンク解除状況)
    Next サブフォルダ
End Sub
CSM：ケース管理2：ケース管理概論［ServiceNow］

※この記事はServiceNow初心者が学習用のために記載した記事です。内容について誤っている場合がございます。不足点などございましたらコメントいただけますと幸いです。

# ServiceNow のケース管理（Case Management）とは？
- ケース管理（Case Management） とは、顧客からの問い合わせや問題（ケース）を追跡・管理し、適切に解決するための仕組み
- ServiceNow の Customer Service Management（CSM） では、ケース管理を中心に、問い合わせ対応を自動化・効率化 する機能が提供

# ケース管理の基本概念
| 用語 | 説明 |
|------|----------------------------------|
| **ケース（Case）** | 顧客からの問い合わせや問題のこと |
| **エージェント（Agent）** | ケースを担当し、解決するユーザー |
| **顧客（Customer）** | サポートを受けるエンドユーザー |
| **SLA（Service Level Agreement）** | ケースの対応期限やサービス品質の基準 |
| **ワークフロー（Workflow）** | ケースの進行プロセス（例: 受付 → 調査 → 解決） |


# ケースのライフサイクル
- ケースの作成
    - 顧客からの問い合わせが メール・チャット・ポータル などから届く
    - API 連携や手動でケースを作成することも可能
    - ケースの分類と優先度設定
- ケースをカテゴリ別（例: "ネットワーク障害", "請求関連"）に分類
    - 優先度（High, Medium, Low）を設定し、重要な案件を先に対応
- ケースの割り当て
    - 自動割り当て: AI やルールベースで適切な担当者（エージェント）に割り当て
    - 手動割り当て: 管理者がエージェントに直接割り当て
- ケースの対応
    - エージェントが顧客とやり取りし、解決策を提案
    - ナレッジベースを活用し、類似ケースの解決方法を参考にする
- ケースの解決とクローズ
    - 問題が解決したら 解決ステータスに変更
    - 必要に応じて 顧客に解決確認 を行い、ケースをクローズ

# ケース管理の主な機能

| 機能 | 説明 |
|------|------------------------------------------------|
| ケースの自動作成 | メール・チャット・API から自動でケースを作成 |
| インテリジェントルーティング | AI を活用して適切なエージェントにケースを割り当て |
| SLA の適用 | ケースの対応期限を自動管理 |
| ワークフローの自動化 | ケースの進行ステータスを自動更新 |
| ナレッジベースの活用 | 類似ケースの解決策を参照し、迅速な対応を支援 |
| セルフサービスポータル | 顧客自身が解決策を検索し、自己解決を促進 |
| レポート & ダッシュボード | ケースの対応状況や KPI を可視化 |
［ServiceNow］Customer Service Management（com.sn_customerservice）プラグインについて：概論１

※この記事はServiceNow初心者が学習用のために記載した記事です。内容について誤っている場合がございます。不足点などございましたらコメントいただけますと幸いです。

# Customer Service Management（com.sn_customerservice）プラグインとは
Customer Service Management (CSM) の基本機能を提供するプラグインを指す

# 有効化の方法
以下の記事に記載
https://qiita.com/hashikazu20540/items/beb1759f9bb97ec72f17

# 主な機能
- ケース管理
    - 顧客からの問い合わせや問題を一元的に追跡・管理
- ナレッジ管理
    - よくある質問や解決策をナレッジベースとして蓄積し、共有
- オムニチャネル対応
    - メール、チャット、電話、ポータルなど、複数のチャネルを通じて顧客対応が可能
- ワークフロー自動化
    - 問題解決プロセスを自動化し、対応時間を短縮
- フィールドサービス管理
    - 現場対応（オンサイトサポート）のスケジュール管理が可能
- コミュニティポータル
    - 顧客が自分で問題を解決できるセルフサービスポータルを提供
- AI & チャットボット: AI を活用した自動応答やインテリジェントルーティングを実現
Perplexity AI: AI検索エンジンを今更知った。

## はじめに
近年、AI技術の進化によって検索エンジンのあり方が大きく変わりつつあります。その中でも特に注目を集めているのが、AIスタートアップ企業 Perplexity AI, Inc. が2022年に公開した 「Perplexity AI」 です。

**Perplexity AIとは？**
Perplexity AIは、従来の検索エンジンとは異なり、AIチャットボット型の検索エンジン です。従来のGoogleなどの検索エンジンは検索結果としてウェブページの一覧を表示しますが、Perplexity AIは ユーザーの質問に対して直接、具体的な回答を提供 します。これは、最新の自然言語処理技術を活用することで可能になりました。

従来の「ググる」に代わり、よりスムーズに知りたい情報へアクセスできることから、「パプる（Perplexity AIを使って検索する）」という言葉が登場するほど、注目を集めています。

詳しくは、以下の記事で紹介されています。
https://data.wingarc.com/perplexity-ai-76920

### Perplexity AIの特徴

**1. 対話型の検索**
Perplexity AIは、単なる検索結果の提示ではなく、ユーザーとの対話を通じて情報を提供します。ユーザーが追加の質問をすることで、より深く情報を掘り下げることができます。

**2. 高精度な回答生成
最新のAI技術を活用し、信頼性の高い情報をもとに回答を生成します。インターネット上の複数の情報源を統合し、コンテキストを理解した上で適切な回答を提供することが可能です。

**3. リアルタイムな情報取得**
通常のAIチャットボットとは異なり、Perplexity AIは最新の情報を取得し、ユーザーの質問に対してリアルタイムに適切な回答を提示します。これにより、常に最新の情報にアクセスできます。


### 実際に使ってみた

https://www.perplexity.ai/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490027/037f0d21-de47-ff5f-cacb-1a34fb109745.png)

#### 1.軽く聞いてみた
**Expo (react native)で縦にスワイプしたら、表示するモーダルが変わるようにしたい。**
です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490027/57b58257-1fe8-5a82-2214-54536dc2f9b4.png)

８つも記事を提案してくれてる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490027/1d7c88eb-0d41-3ef7-3d6f-bde1b642b498.png)

コードも生成してくれてる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490027/7196e0aa-e98e-93c0-9172-d6d22784b3a7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490027/22982e79-edab-bba3-2f5b-1b26acba6203.png)

### 2.さらに具体的にを聞いてみた。

**ID１のモーダルを表示しているとして、横ではなく縦にスワイプしたらある関数を実行してID１のモーダルを非表示にしてID２のモーダルを表示させるという流れをID20個分のデータで行いたい。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490027/80f05bd5-11f6-a5be-d147-1abca145ea54.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490027/b5fe9734-5c6a-9ca1-e0d5-9c2726236398.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490027/50b4cc4a-9436-e88b-999d-41b0d58c4485.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490027/a3e40f02-6c09-09ee-ec1c-7bc872f28b01.png)

なんか実装できそうな気がする。

### 終わりに
Perplexity AI、本当に優秀でした。
関連の記事を複数提示してくれたり、次に試すべきプロンプトの例を提案してくれたりと、検索の効率が格段に上がるのを実感しました。特に驚いたのは、検索結果の中に含まれる画像や動画を、視認性の高いプレビューとして表示してくれる点です。視覚的に情報を整理しながらアクセスできるので、調べもののストレスが大幅に軽減されました。

本当に「ググる」の時代は終わり、「パプる」時代が来るのかもしれませんね。
まだまだ使いこなせていない機能も多くありそうなので、これから毎日活用しながら、より効果的な使い方を模索していきたいと思います。AIが進化するにつれ、情報を探す手段も大きく変わっていくことを実感しました。

これからは、ただ情報を探すのではなく、「どうAIを活用するか」が重要になってくる時代。便利なツールが次々と登場する中で、積極的に試し、柔軟に適応していくことが、今後ますます求められるでしょう。Perplexity AIのようなツールを活用することで、単なる検索作業ではなく、より深く、より広く情報を探索できるようになりそうです。

これからも、新しい技術に触れ、試し、学びながら、自分なりの最適な情報収集スタイルを確立していきたいと思います。
CS50 2021年 Lecture 0 ~ 2 疑問点まとめ

# lecture 0: Scratch
### Q: コンピュータはバイナリで表されるけど、数字と文字はどうやって区別してるの？？
ASCII Codeでの「A」→ 01000001
数字の「65」→ 01000001

ビット列だと全く同じだけど、数字か文字をどう区別してるんだ？？

### A: プログラムやデータ型によって指定している

- データ型で指定
```
(整数型)int num = 65;
(文字型)string code = 'A';
```
- CPUの命令で指定
```
mov num, 65 (数字として格納)
mov code, 'A' (文字として格納)
```
普段何気なく使用しているデータ型や命令の役割を再確認できた。

# lecture 1: C
### Q:intで40億くらいの計算をすると計算が狂う
ソースコード
```
// calculator.c
#include <cs50.h>
#include <stdio.h>

int main(void)
{
    int x = get_int("x: ");
    int y = get_int("y: ");

    int z = x + y;
    printf("%i\n", z);
}
```
実行結果
```
//ターミナル
make calculator
./calculator
x = 2000000000
y = 2000000000
-294967296
```

### A: データ型ごとに使用できるメモリの量が有限であるため、それ以上の計算をするとオーバーフローしてしまうから
整数型intの使用量は32bit
→負の数も入れて大体-20億~+20億くらいまで数えられる

ex)簡略化のために3bitで考える
3bitは0~7まで数えられるが、8を数えようとすると、、、
7:　111
8: (1)000→0と同じ

bitを超えた数を考えると、数値が反転してしまう→intに限らずfloatやlongでも同様
→数を扱う際は、オーバーフローや桁落ちなどに注意した方がいいな

# lecture 2: Arryas
### Q: コンパイルって聞くけど具体的に何をしてるの？？
基本的には人間が書いたコードをコンピュータが認識できるコードに変換する処理のこと
→具体的な動作は？？

### A: コンパイルで行われていること
1. 前処理
    headerの#includeの中身を取得
    ```
    #include <cs50.h>
    #include <stdio.h>
    ```
2. コンパイル
    人が描いたコードをアセンブリ言語に変換（より機械語に近い低レイヤーの言語)
3. アセンブリ
    アセンブリコードをバイナリデータに変換
4. リンキング
    変換したバイナリデータをそれぞれ結合する

### Q': なぜ1回アセンブリ言語に変換する必要があるのだろうか？？最初からバイナリに変換すればよくないか？？

### A': アセンブリに変換したほうが開発的に効率的だから
1. デバックのしやすさ
    開発者がソースコード→バイナリの変換処理を開発する際に、色々最適化とかしたい
    ・いきなりバイナリだと可読性が皆無
    ・アセンブリで最低限人間が読める形のほうが開発しやすい
2. CPUごとの命令セットに対応しやすい
    CPUごとに命令の仕方が異なる→バイナリの記述も異なる
    ・一度アセンブリを経由したほうが、CPUごとの命令セットに対応しやすい
3. 再利用性がある
    アセンブリ→バイナリ処理を再利用できる
    ・もし直接バイナリに変換した場合、プログラミング言語毎にバイナリ変換の処理を開発しないといけない
グローブ照明の明るさと等比数列

# はじめに
球形プローブ内に電球がありその発光で照明にすることを考える。その場合、電球から放たれた光線は球内で反射を繰り返し外部に透過する。したがって、プローブが放出する全光束は電球が放つ光束に反射を繰り返した透過分が加算されるので、大きくなる。そこで、今回は球形プローブの中で、光線がどのように進むのかを調査する。

![集光器原理.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/292d7d99-4389-5155-0669-245d486bf883.png)

# 前提

令和3年度電験2種1次試験機械科目問6を参考にした。
詳細は電験王様を参照されたい。

https://denken-ou.com/c2/kikair3-6/



電球が生成する全光束を$F_{in}$として、プローブが反射・透過により増幅させる全光束を$F_{out}$とする。

そのまま透過される光束、1回反射後透過される光束、2回反射後透過される光束・・・と光束は存在して、全光束はそれらの総和になることから、等比数列の無限和の公式より、

```math
F_{out}=\tau F_{in}+\tau \rho F_{in}+\tau \rho^2 F_{in}+\cdot \cdot \cdot=\frac{\tau F_{in}}{1-\rho}
```

となる。ただし、$0<\rho<1$である。

# 光線の軌跡

ところで、光線がプローブ表面で反射する場合、入射角と反射角が常に等しいという反射の法則が成立しているはずである。そこで、$xy$座標上の点$(-1,0)$に点光源を置いたとき、反射を繰り返して点$(1,0)$から出力される光線の軌跡を考える。ただし、今回は点光源に反射して戻ってしまい、点$(1,0)$から出力されない光線は除くものとする。

# プログラム

以下のようなプログラムを作成した。ここでは、球面上の反射なので入射角はいずれも等しくなることに注意する。

```python reflect.py
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import japanize_matplotlib
import math

theta_ary=np.linspace(0,2*math.pi,100)

#球プローブ表面
x=np.cos(theta_ary)
y=np.sin(theta_ary)
#光線の情報
X=[]
Y=[]
#初期位置
theta = -math.pi
delta = math.pi/2-math.pi/9

#反射角と入射角の関係
def reflection(theta):
  #中心角
  return theta-2*delta

#反射回数
## 光源の反対側付近に出力される条件
while   abs(math.cos(theta)-1)>0.001:
  #光線の位置
  X.append(math.cos(theta))
  Y.append(math.sin(theta))
  theta=reflection(theta)
#光線の位置
X.append(math.cos(theta))
Y.append(math.sin(theta))
plt.plot(x,y,color="red")
plt.plot(X,Y,color="blue")

#光源の位置
plt.scatter(-1,0,color="black")
#出力の位置
plt.scatter(1,0,color="black")
plt.savefig("集光器原理.png")
plt.show()
```

これを実行すると以下のようになる。

![集光器原理.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/79147d0b-10a6-3f8f-953c-fdf80f3ec046.png)

このように、反射が何度か繰り返されて放出されることが分かる。実際の反射ではエネルギーロスが生じるので少しずつ減衰する。

# まとめ
今回はプローブ球内の光線の反射の軌跡についてシミュレーションを行った。前提として、入射角と反射角は等しく、球面より各入射角は全て等しい。このことを用いてプログラムを作成して、プローブに対して光源の反対側に出力される光線の軌跡を調査した。これは、正多角形の作図問題にも繋がっていて数学においては解析学というよりも幾何学の内容に近かった。
Azureの資格を勉強してみた（AZ-900編）

システムエンジニアの大沼です。

仕事でAzureを触ることがあるのですが部分的な知識しかなくもう少し根本的な部分の知識があれば迷うこともなく仕事がスムーズにできそうだなと考えていました。

そこでAzureの資格勉強をすることで資格も取りつつ仕事にも役立てることができそうだなと考え資格について調べAZ-900にたどり着きました。

今回はそのAZ-900について記事にまとめてみようと思います。

この記事は以下のような人におすすめです。

:::note info
- Azureの初級資格にどんなものがあるのかそもそも知らない人
- AZ900がどんな資格なのか知りたい人
:::
 

## 目次

- Azure関連の初級資格について
- AZ-900とは
- 導入
    - コスト感
- まとめ

## Azure関連の初級資格について

Microsoftの公式に行ってAzureの初級資格に絞ると以下の４つが出てきます。

- AIエンジニア
- データエンジニア
- 管理者
- セキュリティエンジニア

その中でも管理者の資格に目を付けました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/2b8abd3a-f5c7-f53e-7946-b0574d2ad4bb.png)

## AZ-900とは

資格取得に向けて更にページを開いていくとAZ-900は以下のような知識が必要なようです。

[Microsoft Certified: Azure Fundamentals - Certifications | Microsoft Learn](https://learn.microsoft.com/ja-jp/credentials/certifications/azure-fundamentals/?practice-assessment-type=certification#two-ways-to-prepare)

この認定資格の受験者は、クラウドの概念全般、特に Microsoft Azure に関する基本的な知識の実証を望むテクノロジの専門家です。 この認定資格は、Azure のキャリアに向けた一般的な出発点です。

次のような Azure アーキテクチャ コンポーネントと Azure サービスについて説明できます。

- Compute
- ネットワーク
- ストレージ

また、Azure をセキュリティで保護、制御、管理するための機能とツールについても説明できます。

次のような IT 分野でのスキルと経験が必要です。

- インフラストラクチャの管理
- データベースの管理
- ソフトウェア開発

### コスト感

資格取得には `**¥12180 JPY***` かかるためご留意いただければと思います。

## 導入

学習用のページがあるのでそちらで学習していきます。

[コース AZ-900T00-A:Microsoft Azure の基礎 - Training | Microsoft Learn](https://learn.microsoft.com/ja-jp/training/courses/az-900t00)

細かく章立てされ、サクサク読み進めることができます！
途中動画が出てきたり、サンドボックス環境で操作したりできるようです。
内容が気になる方は気軽に開いてみてもよいと思います。（無料です）

## まとめ

今回はAZ-900とはというところから資格勉強の導入のことろまでをまとめてみました。
資格取得に向けてこれから勉強し、取得出来たらまた記事にしようと思います。
以上、大沼でした。
個人的な備忘録：ダウンタイムなしのデプロイ戦略としてAWSのBlue/Greenデプロイを体系的に整理してみた

## はじめに
現在、ITスクールで学習しながらAWSのインフラ構築をコード化しています。

その中で、より実践的な運用を試すためにBlue/Greenデプロイに挑戦することにしました。

:::note warn
**このデプロイ手法は、ダウンタイムを最小限に抑えつつ、新しいバージョンを安全にリリースできるのが特徴です。**
:::

本記事では、Blue/Greenデプロイの概要やメリット・デメリット、AWSにおける実装方法について整理していきます。

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

詳細は省略しますが、今回は受講しているITスクールで、以下のようなAWSインフラ構成をコード化しています。

![Screenshot 2025-02-03 at 18.50.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/b5c205af-9d3e-ceca-3db5-5e3164e6b296.png)

その中で時間的に余裕がありますので、追加機能としてBlue/Green デプロイを試したいと思い、現在それに向けてキャッチアップ中になります。


## Blue/Green デプロイとは？
Blue/Green デプロイメント は、アプリケーションの新バージョンを安全にリリースするためのデプロイ手法 です。

![Screenshot 2025-02-05 at 4.40.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/d6c13aeb-7362-e82d-a01f-00de929a529e.png)
引用画像：https://aws.amazon.com/jp/blogs/news/bluegreen-deployments-with-amazon-ecs/

この方法では、2つの環境（Blue と Green）を用意し、切り替えることでシームレスに新バージョンをリリース できます。

## Blue/Green デプロイの流れ

1. **Blue 環境（現行バージョン）** を本番環境として稼働させる  
2. **Green 環境（新バージョン）** をデプロイする（本番にはまだ影響しない）  
3. **Green 環境で動作確認やテストを実施**  
4. 問題がなければ **トラフィックを Blue から Green に切り替える**  
5. **Blue 環境を削除する or 次のリリース用に残しておく**

## Blue/Green デプロイのメリット

- **ダウンタイムなし**  
  新バージョン（Green）を準備してから切り替えるため、ユーザーへの影響が最小限。

- **即時ロールバック**  
  もし新バージョンに問題が発生した場合、トラフィックを Blue に戻すだけで元の状態に復旧可能。

- **本番環境と同じ条件でテストできる**  
  Green 環境は Blue 環境と同じ構成なので、本番同等の環境で動作確認できる。

- **A/B テストが可能**  
  Blue と Green の両方を一部のユーザーに振り分け、比較テストを行うことも可能。

## Blue/Green デプロイのデメリット

- **コストがかかる**  
  一時的に 2 つの環境を同時に維持するため、リソースコストが増える。

- **データベースの切り替えが難しい**  
  DB のスキーマ変更がある場合、両バージョンで互換性を持たせる工夫が必要。

- **設定・運用が複雑**  
  トラフィックの切り替えやデータの一貫性を保つための仕組みが必要。

## AWS での Blue/Green デプロイ

AWS では、以下のサービスを使うことで Blue/Green デプロイを簡単に実現できます。

| サービス | 役割 |
|----------|--------------------------------------|
| **AWS CodeDeploy** | EC2、ECS の Blue/Green デプロイを管理 |
| **AWS Elastic Beanstalk** | デプロイ中のトラフィック管理機能あり |
| **AWS ECS (Fargate)** | タスクセットを使った Blue/Green デプロイが可能 |
| **AWS Route 53** | DNS レベルでの切り替えが可能 |
| **AWS ALB (Application Load Balancer)** | ターゲットグループを使ったトラフィック分割 |

## まとめ
Blue/Greenデプロイは、新しいバージョンを安全にリリースするための強力な手法ですが、コストの増加やデータベースの切り替えなどの課題もあります。

:::note info
***AWSではCodeDeploy・ECS・ALBなどのサービスを活用することで、比較的簡単に導入できます。***
:::

今回の学習を通して、より実践的なデプロイ戦略を理解し、今後の開発に活かしていきたいと思います！
【Vue】検索機能の二重送信防止

こんにちは、新人エンジニアの三上です。

今回は、Vueにおいて処理に時間がかかる機能（例として検索機能）を付加したボタンによる二重送信を防ぐ方法をご紹介いたします。

## loading 属性

```Vue:Vue: ver2.6.11
<template lang="pug">
    // 検索ボタン
    v-btn(@click="searchExample" :loading="searchLoading")
</template>

<script lang="ts">
    const searchLoading = false
    
    private async searchExample() {
        this.searchLoading = true
        // --検索処理開始--
        // --検索処理終了--
        this.searchLoading = false
    }
</script>
```
上記実装で検索ボタン押下により以下のような
ローディング状態のぐるぐるマークが表示されるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/0d42f12a-e54b-b996-5926-edf333494925.png)

このローディング状態では、ボタンを押下することができないので
検索処理に時間がかかり、その検索処理中に再度検索ボタンが押下されるということがなくなります。
これにより、検索処理が2度実行されるような想定外の動作を防ぐことができます。
例）2回検索処理が実行されたために検索結果が2重で返ってくることがなくなる。

## まとめ
以上のように、loading属性を使用することで2重送信による想定外の動作を防ぐことができます。

以上、三上でした。
【SQL】DML 作成時の注意点

こんにちは、新人エンジニアの三上です。

今回は、SQLのDML作成時に気を付けたいポイントを紹介したいと思います。

## DML
DMLというのはテーブルに対して
> ① 検索（SELECT）
> ② 更新（UPDATE）
> ③ 挿入（INSERT）
> ④ 削除（DELETE）

上記の操作を行う命令文のことです。

今回は ② 更新（UPDATE） の命令文作成時のポイントを記載したいと思います。
実際に、例を示しながら説明します。

```SQL:UPDATE
UPDATE tmp_table SET tmp_column = 'change' WHERE 
 tmp_id IN (
    'tmp1',
    'tmp2',
    'tmp3');
```
UPDATE文を使用するときは基本的にWHERE句によって更新対象のカラムを絞り込むと思います。
その際に上記のように、WHERE句とその対象のカラムを別の行に記載します。
そうすることで、誤って更新対象カラムを絞り込むことなくSQLが実行されるということを防ぐことが出来ます。
どういうことかというと、
> ① DML作成
> ② 作成したDMLから実行する命令文をコピー
> ③ ② でコピーした命令文を実行

② でコピーする際に、上で記載したUPDATE文の途中までしかコピーせずに
命令文を実行した場合、
UPDATE文として成立せず、実行前にエラーが起きます。

---

もし以下のUPDATE文で1行目のみをコピーして、命令文を実行した場合
テーブル内の全レコードに対して更新処理が行われることとなります。
このような事故を防ぐことが出来るのです。

```SQL:UPDATE文（悪い例）
UPDATE tmp_table SET tmp_column = 'change' 
WHERE tmp_id IN ('tmp1','tmp2','tmp3');
```

## まとめ
以上のように、WHERE句の位置を工夫するだけでSQL実行時の事故を防ぐことが出来ます。

SQL作成時には、実行する時に何の負担も気を付けることもないようなものを作成することを心がけるとよいと思います。

以上、三上でした。
PHPで「文字列を連結する」の動作を確認してみた。

# 概要

PHPで「文字列を連結する」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/php/string/index2.html

# 実装

以下のファイルを作成しました。

```sample.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHPテスト</title>
</head>
<body>

<p>
<?php
$pref = "大田区";
echo "東京都".$pref."<br>";
echo "東京都{$pref}";
?>
</p>

</body>
</html>
```

以下のコマンドを実行しました。

```
$ php sample.php 
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHPテスト</title>
</head>
<body>

<p>
東京都大田区<br>東京都大田区</p>

</body>
</html>
```

# まとめ

何かの役に立てばと。
【Excel】手前に行挿入してもズレない連番を振る（ROW()を使わない！）

## 概要
縦方向に連番を振るときによく使う`=ROW() - n`では、連番より上の行を追加/削除すると連番がズレてしまいますよね。

`=N(INDIRECT("R[-1]C",FALSE))+1`を使えば、以下を満たす連番を振ることができます。
* 手前の行を追加/削除してもズレない
* 1から始まる連番を、同じExcel列に複数配置できる

## 使ってみる
まず、3通りの方法で記入した連番からなる表を、同一Excelシート内、2つの領域に配置しました。先頭2行および連番表の間の1行は空白としています。`ROW() - n`で実現する連番は、この時点ですでに`n`の部分がメンテしづらそうな感じが出ていますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/98978155-39b6-8eb6-ca49-2acd7e210f9a.png)

先頭行に空白行を追加し、2つ目の表途中に行を挿入（後ろの行をコピーして挿入）した状態がこちら。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/a159251d-ff4e-6d11-4ffc-6d139ec46c4e.png)

手打ちと`ROW() - n`の2パターンは、以下の点で不都合が出ていてメンテナンス性に難があります。`=N(INDIRECT("R[-1]C",FALSE))+1`を使えば、それらを解決できます。

* 手打ちの難点
  * 行をコピーして挿入した場合に、コピー元の連番が複製される
  * 挿入した行の後続行が連番更新されない
  * 上記2点より、挿入行以後の連番を自分で変更する必要がある
* `ROW() - n`の難点
  * 先頭行に追加が入ったために、連番がすべて1つずつズレてしまう
  * 連番表のそれぞれにおいて、`n`を再度数えて手で修正する必要がある

## `=N(INDIRECT("R[-1]C",FALSE))+1`が動いてる理屈
1. `INDIRECT（参照文字列, 参照形式）`を使って、「現在の行から 1 行上、同じ列」を参照しています。
    * 参照形式
      * 参照形式を省略、またはtrueとするとA1形式での参照となります。（参照先のセル位置を"A1"と指定するアレ）
      * これに対して、今回の例のように参照形式をfalseにすると、R1C1形式での参照となります。これは、行と列を相対的に指定するスタイルです。
    * 参照文字列`R[-1]C`の意味
      * `R[-1]`がRow（行）を示します。`-1`がついているので、現在の行から1つ上を指します。
      * `C`がColumn（列）を示します。数字が無いので、現在と同じ列を指します。
      * これらを合わせると「現在の行から 1 行上、同じ列」の意味になります。現在のセルがB5ならB4を、D10ならD9を参照します。
2. 1で得られた値を`N()`で数値に変換します。数値として解釈できない値は0が返ります。
3. 2で得られた値に1を加算します。

これにより、連番開始位置は1つ上のセル値に`N()`をかまして取得した0に1を加算して1を表示します。次行以降は1つ上のセル値 + 1が続いて行って、連番を実現します。行の挿入や削除があっても、連番開始位置が1である限りは崩れません。

## `=N(INDIRECT("R[-1]C",FALSE))+1`が使えないケース
連番開始位置（1にしたいところ）の1つ上のセル値が数値である場合、「連番開始位置の値が1つ上のセル値 + 1」になってしまうので使えません。1つ上のセルが真偽値（TRUE/FALSE）である場合も、TRUEは1扱いとなるので連番がズレます。まぁそんな使い方しないと思うので、大丈夫。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/bdf2a95d-cb36-8f2a-a926-69cd9374469c.png)

## 参考
Qiita「[エクセル連番式いろいろ](https://qiita.com/ikedat16/items/7753a8253e73e1d66b91)」
Remote Developmentで「Manage Unsafe Repositories」が表示される

## 概要
WSL2でRemote Developmentを利用して、コンテナにアタッチしつつVSCodeを開いた際、サイドバーからGitを利用を試みると、`Manage Unsafe Repositories`と記載されたボタンが表示される場合の対策を記載します。

要するにリポジトリの所有者とコンテナ内での実行ユーザーが異なるせいで出ている警告なので、実行ユーザーをリポジトリ所有者に合わせるようDockerfileを変更すればOK。他にも解決手法があるので、併せて記載します。

## 現象：リポジトリがUnsafeやぞ、ってやんわり怒られる
コンテナをビルドしてReopen in Containerした際、サイドバーからGitを利用を試みると、`Manage Unsafe Repositories`と記載されたボタンが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/aec02e0b-2b5c-3835-8030-dea0ab75905f.png)

ボタンをクリックすると、画面上部に「安全なものとして扱い、開くリポジトリを指定しろ」といってリポジトリ選択UIが開きます。クリックすると、Gitによるソース差分確認機能等が使えるようになります。

ボタンをクリックすれば使えるは使えるけど、コンテナのビルドする度に復活するし、Unsafeとか言われると気分がよくないので、何とかしていきます。

## 原因：リポジトリの所有者とコンテナ内での実行ユーザーが異なるせい
以下例は、コンテナ内のルートディレクトリで`ls -al`を実行した結果です。リポジトリの所有者は`node`になっていますが、コンテナの実行ユーザーは`root`になっています。（ターミナルの実行ユーザーとして表示されているほか、`whoami`コマンドでも実行ユーザーの確認ができる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/5c602da3-d9e2-663f-0971-14d4fb040a07.png)

VSCodeのドキュメントによると以下の通り記載があり、リポジトリの所有者と実行ユーザーが食い違うせいであることが分かります。
> VS Code uses git.exe for executing all Git operations. Starting with Git 2.35.2, users are prevented from running Git operations in a repository that is in a folder that owned by a user other than the current user as the repository is deemed to be potentially unsafe.If you try to open such a repository, VS Code will show a welcome view in the Source Control view or an error notification.
> （VSCodeはすべてのGit操作を実行するためにgit.exeを使用します。Git 2.35.2以降、**現在のユーザー以外のユーザーが所有するフォルダ内にあるリポジトリでGit操作を実行することが禁止されています**。これは、そのリポジトリが潜在的に安全でないと見なされるためです。このようなリポジトリを開こうとすると、VSCodeはソース管理ビューにウェルカムビューを表示するか、エラー通知を表示します。）
>（中略）
> Marking a repository as safe will add the repository location to the safe.directory git configuration.
>（リポジトリを安全としてマークすると、そのリポジトリの場所がGitのsafe.directory設定に追加されます。）
>
> （Visual Studio Code "[Source Control FAQ](https://code.visualstudio.com/docs/sourcecontrol/faq)"）

ちなみに、リポジトリの所有者をコンテナ内ではなくWSL2側で確認すると、`node`などコンテナのユーザーではなく、WSL2の実行ユーザーになる（`ubuntu`とか）　これは、WSL2側で`Git clone`したユーザーと一致します。今回のケースはコンテナ内の実行ユーザーの問題なので、ここは気にする必要なしです。

## 対策
### 正攻法：コンテナ内実行ユーザーをリポジトリの所有者に合わせる
シンプルにDockerfileにて実行ユーザーを`root`から変更すればOK。そもそも、コンテナ内の実行ユーザーを`root`にすることは、セキュリティ上推奨されなかったはず（攻撃者がコンテナに入ったときに、サービス稼働に必要な権限以上に実行できる範囲が増えてしまう）

以下、Dockerfileの一例。
```text
FROM node:18.19.0
USER node # この行がpoint!
WORKDIR /workspaces
WORKDIR /app
EXPOSE 4200

COPY package.json* package-lock.json* ./

RUN npm ci

ENTRYPOINT [ "npm", "run", "start", "--", "--host" , "0.0.0.0" ]
```

当然、コンテナで利用するイメージによって、指定するユーザーが誰かは変わるので都度確認してください。

Dockerfileを編集してコンテナをリビルド、`Reopen in Container`すれば、リポジトリはUnsafeになっているはず。

### 他の方法
Unsafeな状態なのを受け入れつつ「いいからやれよ！」ってVSCodeに教えてあげる方法。Unsafeなままであることに変わりないので、あくまでも先述の実行ユーザー変更による対策を推奨としますが、、

#### リポジトリを安全なものとして登録する
WSL2側のターミナルなり、`devcontainer.json`なりで、`git config`コマンドから対象リポジトリを安全なものとして登録します。

`devcontainer.json`で設定する場合、以下のように記載します。コンテナが作成された後に`git config`が走ｒ。
```json
{
    "postCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
}
```
新しい方法！Fortnite V-Bucksジェネレーター2025新コードリスト更新

Fortnite V-Bucks ジェネレーター 2025 新コード リスト アップデート

<h1> <a href="https://ftnitevbks.blogspot.com/">無料のFortnite V-Bucksを入手するにはここをクリックしてください </a>

V-Bucksカードを引き換えましょう - フォートナイト - Fortnite
FortniteのV-Bucksはどうやって集めますか？
フォートナイトのV-Bucksはどこで買えますか？
フォートナイトのV-Bucksは何に使えますか？

に記載のある、AWS CodeBuildをGitHub ActionsのSelf-hosted Runnerとして使用可能な機能を試します。
確認時点では英語のドキュメントのみあり、日本語版ではページごとありませんでした。
Monopoly GO free Dice links (May 2024) Dot Esports
Six ways to get free Dice rolls in Monopoly GO · 1) Claim daily login rewards · 2) Increase your net worth · 3) Play Community Chests · 4) Bring friends to the ...MONOPOLY GO! FREE DICE LINKS

Facebook · MONOPOLY GO! FREE DICE LINKS Dice Free For Everyone ✓This will not require anything from you collect it... Immediatelly Claim 10.000 Dice Free For Everyone✓ 1BB9DCXQ3V.

+~(LIMITED-EDITION) Free Monopoly Go Dice Links ... hours ago — Aside from the social media links, there are other ways to acquire free dice in Monopoly GO. One option is to participate in giveaways and ...

Reddit · r/MonopolyGoDiceLinks Short on Monopoly Go! Dice? This is the community for you! Dice links posted daily for all users! Interested in trading…

2024-05-14時点での内容です。最新情報は上記ドキュメントを参照ください。また実際に動かしてみるのが一番わかると思います。
普段はGitHub ActionsをGitHub-hosted Runnerで動かしているので、CodeBuildにはあまり慣れていません。CodeBuild使っていれば常識的な部分もあるかもしれません。

基本的な使い方
AWS CodeBuild上でGitHubに接続設定したプロジェクトを用意し、その名前をGitHub Actionsのyamlのruns-onに記載することで動作します。
Terraformで表すと以下のような設定です。
新しい方法！モノポリーゴーフリーダイス2025

Monopoly Go 無料ダイスリンク 2025 お金を払わずに無料で 50 個のダイスロールを獲得する方法

<h1> <a href="https://monopolygofreediceg.blogspot.com/">Monopoly Goの無料ダイスを入手するにはここをクリックしてください </a> 

に記載のある、AWS CodeBuildをGitHub ActionsのSelf-hosted Runnerとして使用可能な機能を試します。
確認時点では英語のドキュメントのみあり、日本語版ではページごとありませんでした。
Monopoly GO free Dice links (May 2024) Dot Esports
Six ways to get free Dice rolls in Monopoly GO · 1) Claim daily login rewards · 2) Increase your net worth · 3) Play Community Chests · 4) Bring friends to the ...MONOPOLY GO! FREE DICE LINKS

Facebook · MONOPOLY GO! FREE DICE LINKS Dice Free For Everyone ✓This will not require anything from you collect it... Immediatelly Claim 10.000 Dice Free For Everyone✓ 1BB9DCXQ3V.

+~(LIMITED-EDITION) Free Monopoly Go Dice Links ... hours ago — Aside from the social media links, there are other ways to acquire free dice in Monopoly GO. One option is to participate in giveaways and ...

Reddit · r/MonopolyGoDiceLinks Short on Monopoly Go! Dice? This is the community for you! Dice links posted daily for all users! Interested in trading…

2024-05-14時点での内容です。最新情報は上記ドキュメントを参照ください。また実際に動かしてみるのが一番わかると思います。
普段はGitHub ActionsをGitHub-hosted Runnerで動かしているので、CodeBuildにはあまり慣れていません。CodeBuild使っていれば常識的な部分もあるかもしれません。

基本的な使い方
AWS CodeBuild上でGitHubに接続設定したプロジェクトを用意し、その名前をGitHub Actionsのyamlのruns-onに記載することで動作します。
Terraformで表すと以下のような設定です。