OmniAICreator/Qiita-1.07M huggingface dataset:
ERC-20とSolanaを駆使するIntelMarketsのデュアルチェーン戦略


# 🚀 IntelMarkets（INTL）トークンの技術解剖：ERC-20とソラナのデュアルチェーン対応を徹底解説 💡

こんにちは！今回は、暗号通貨プロジェクト「**IntelMarkets（INTL）**」の技術的な仕組みについて掘り下げます。このプロジェクトが採用している**ERC-20トークン規格**と**ソラナ（Solana）ブロックチェーン**のデュアルチェーン対応について、初心者にもわかりやすく説明します。暗号通貨やブロックチェーンに興味がある方はぜひご覧ください！✨

---

## 🌟 IntelMarkets（INTL）とは？

IntelMarketsは、AI（人工知能）とDeFi（分散型金融）を組み合わせた次世代型の暗号通貨プロジェクトです。そのトークンである**$INTL**は、以下の特徴を持っています：

- **デュアルチェーン対応**：EthereumとSolanaの両方で利用可能。
- **AI駆動型取引**：高度なAI技術を活用した自動取引システム。
- **低コストで高速な取引**：特にSolana上での取引が効率的。

これらの特徴により、IntelMarketsは柔軟性と革新性を兼ね備えたプロジェクトとして注目されています。

---

## 🛠️ ERC-20とSPLトークンとは？

### **1. ERC-20トークン（Ethereum上）**
ERC-20は、Ethereumブロックチェーン上で動作するトークン規格です。多くの暗号通貨プロジェクトがこの規格を採用しており、以下のような標準機能を提供します：

- **`transfer()`**: トークンを他のアドレスに送信。
- **`balanceOf()`**: 特定アドレスの残高確認。
- **`approve()` と `transferFrom()`**: 第三者が指定された範囲内でトークン操作を行うことを許可。

#### ✅ メリット:
- **広範なサポート**：多くのウォレットや取引所で対応。
- **スマートコントラクトとの連携**：DeFiアプリケーションで活用可能。

#### ⚠️ 注意点:
- **ガス代が高い場合もある**：Ethereumネットワークが混雑すると手数料が増加します。

---

### **2. SPLトークン（Solana上）**
SPL（Solana Program Library）は、Solanaブロックチェーン上で動作するトークン規格です。ERC-20と同様に標準化されていますが、以下の点で異なります：

- **高速処理**：Solanaは1秒間に約65,000件以上のトランザクションを処理可能。
- **低コスト**：1回の取引手数料は0.00025ドル程度と非常に安価。

#### ✅ メリット:
- **スピード重視**：リアルタイム性が求められるアプリケーションに最適。
- **エコフレンドリー**：エネルギー効率が高い設計。

#### ⚠️ 注意点:
- **エコシステムが発展途上**：Ethereumほど成熟していないため、対応アプリケーションが少ない場合があります。

---

## 💡 デュアルチェーン対応のメリット

IntelMarketsが採用しているデュアルチェーン対応には、多くの利点があります：

1. **柔軟性**  
   EthereumとSolanaという異なるブロックチェーンを選択できるため、ユーザーは自身のニーズに合った環境でトランザクションを行えます。

2. **相互運用性（Interoperability）**  
   Ethereum上で発行された$INTLをSolanaに移動させたり、その逆も可能です。これにより、異なるエコシステム間で資産を自由に移動できます。

3. **リスク分散**  
   単一のブロックチェーンに依存しない設計により、ネットワーク障害や規制リスクへの耐性が向上します。

---

## 🤔 実際に触ってみた感想

私自身、IntelMarketsトークンをEthereumとSolana両方で試してみました。それぞれ以下のような印象でした：

### Ethereum上
- セキュリティと信頼性が高い。
- しかしガス代が高く、小額取引には不向き。

### Solana上
- トランザクション速度が非常に速い。
- 手数料がほぼゼロなので、小額でも気軽に使える。

どちらも一長一短ですが、自分の用途によって使い分けることで最大限活用できると感じました。

---

## 🔗 参考リンク

以下はさらに学びたい方向けの参考資料です：

- [ERC-20トークンとは？](https://eips.ethereum.org/EIPS/eip-20)
- [SPLトークンについて](https://spl.solana.com/token)
- [Ethereum公式サイト](https://ethereum.org/en/)
- [Solana公式サイト](https://solana.com/)

---

この記事が皆さんのお役に立てれば嬉しいです！IntelMarketsや暗号通貨についてさらに知りたいことがあれば、お気軽にコメントしてくださいね！🚀
ソラナ（Solana）で少額から始める暗号通貨購入ガイド：技術的解説と実践

# 🚀 ソラナ（Solana）ブロックチェーンで少額から始める暗号通貨トークン購入ガイド：技術的解説と実践

こんにちは！今回は、**ソラナ（Solana）ブロックチェーン**を活用した暗号通貨トークンの購入方法について、技術的な側面から詳しく解説します。初心者の方でも理解しやすいように、専門用語をかみ砕きながら進めていきます。ソラナの特徴や仕組み、実際のトランザクションの流れまで、技術的に深掘りしていきましょう！💻

---

## 🌟 ソラナ（Solana）とは？技術的特徴

ソラナは、高速で低コストな取引を実現する**次世代ブロックチェーン**です。以下が主な技術的特徴です：

1. **Proof of History (PoH)**  
   ソラナの最大の特徴は、**Proof of History**というコンセンサスアルゴリズムです。これは、トランザクションの順序をタイムスタンプで記録し、ネットワーク全体の効率を大幅に向上させます。従来のブロックチェーンとは異なり、トランザクションの順序付けが高速で行えるため、処理速度が飛躍的に向上しています。

2. **高いスループット**  
   ソラナは1秒あたり**65,000トランザクション**を処理可能です。これは、イーサリアム（約30トランザクション/秒）やビットコイン（約7トランザクション/秒）と比べて圧倒的に高速です。

3. **低コストな取引**  
   ソラナの取引手数料は非常に安く、1トランザクションあたり**0.00001 SOL**（約0.001円）程度です。少額取引にも最適です。

4. **スマートコントラクト対応**  
   ソラナは**Rust**や**C**で書かれたスマートコントラクトをサポートしており、開発者にとって柔軟性の高いプラットフォームです。

---

## 🛠️ ソラナを使ったトークン購入の技術的流れ

ソラナを使ってトークンを購入するまでの流れを、技術的な観点から解説します。

### 1. ウォレットの準備 🪙
ソラナネットワークに対応したウォレットが必要です。以下が代表的なウォレットです：
- **Phantom Wallet**（ブラウザ拡張機能やモバイルアプリ）
- **Sollet**（ウェブベースのウォレット）

これらのウォレットは、**公開鍵（Public Key）**と**秘密鍵（Private Key）**を生成し、ユーザーの資産を安全に管理します。秘密鍵は絶対に他人と共有しないようにしましょう。

#### 技術的ポイント：
- **公開鍵**：ウォレットのアドレスとして機能し、他のユーザーが資産を送信する際に使用します。
- **秘密鍵**：資産へのアクセスを制御するための鍵。紛失すると資産が取り出せなくなるため、厳重に管理する必要があります。

### 2. SOLトークンの入手 💳
ソラナネットワーク上で取引を行うためには、**SOLトークン**が必要です。SOLは、取引手数料（ガス代）やスマートコントラクトの実行に使用されます。

#### 入手方法：
1. **取引所で購入**：BinanceやCoinbaseなどの取引所でSOLを購入し、ウォレットに送金します。
2. **Peer-to-Peer取引**：他のユーザーから直接SOLを購入することも可能です。

### 3. トークン購入の技術的流れ 🛒
ソラナネットワーク上でトークンを購入する際の技術的な流れは以下の通りです：

1. **ウォレット接続**  
   購入ページでPhantom Walletなどのウォレットを接続します。これは、**Web3.js**や**Solana Wallet Adapter**のようなライブラリを使用して実装されています。

2. **トランザクションの作成**  
   購入リクエストを送信すると、ウォレットがトランザクションを作成します。このトランザクションには、以下の情報が含まれます：
   - 送信元アドレス（自分のウォレットアドレス）
   - 送信先アドレス（トークン販売用のスマートコントラクトアドレス）
   - 送金額（SOLまたはUSDTなど）

3. **トランザクションの署名**  
   ウォレットがトランザクションに署名します。これにより、トランザクションが改ざんされていないことが証明されます。

4. **トランザクションの送信**  
   署名されたトランザクションがソラナネットワークに送信され、ノードによって検証されます。

5. **ブロックチェーンへの記録**  
   トランザクションが承認されると、ソラナのブロックチェーンに記録されます。これにより、トークンの所有権が移転されます。

---

## 💡 技術的に学べること

1. **ブロックチェーンの仕組み**  
   トランザクションがどのように検証され、ブロックチェーンに記録されるかを理解できます。

2. **ウォレットのセキュリティ**  
   公開鍵と秘密鍵の役割、そしてウォレットのセキュリティ管理について学べます。

3. **スマートコントラクトの活用**  
   トークン販売の裏側で動くスマートコントラクトの仕組みを理解できます。

---

## 🤔 ソラナを使った感想

ソラナの技術的な特徴である**Proof of History**や**高いスループット**を実際に体験してみて、その速さと低コストに驚きました。特に、少額取引が気軽にできる点は、初心者にとって非常に魅力的です。

---

## 🔗 参考リンク

- [Solana公式ドキュメント](https://docs.solana.com/)
- [Phantom Wallet公式サイト](https://phantom.app/)
- [Web3.jsドキュメント](https://web3js.readthedocs.io/)

---

この記事が、ソラナブロックチェーンの技術的な側面に興味を持つ方の参考になれば幸いです。ぜひ、ソラナの高速で低コストな取引を体験してみてください！🚀
Pythonの引数はこう使う！お菓子のオーダーで楽しく理解しよう

プログラミングの世界では、関数という便利な道具があり、私たちの命令を正確にこなしてくれます。でも、その関数たちに「何を」「どうしてほしいか」を伝えなければ、ただの無口なロボットになってしまいます。そこで登場するのが **「引数」** です！

引数とは、関数に渡す情報であり、まるで「お菓子の注文票」のようなものです。適切に使えば、関数はあなたの意図どおりに動いてくれます。
例えば、カフェで「チョコレートクッキーを5個、ストロベリー味で」と注文する場面を考えてみましょう。

店員：「どんなお菓子をご注文ですか？」

あなた：「クッキーを5個、ストロベリー味で！」**（←これが引数）**

このように、関数に渡す引数をうまく活用することで、必要な情報を適切に伝え、プログラムの動作をコントロールできます。

では、一緒に引数の世界を楽しく探検していきましょう！


## そもそも引数って何？

引数とは、**関数やメソッドに渡す情報（データ）のこと**です。
たとえば、友達に「コンビニでお菓子買ってきて」とお願いするとします。

- 友達：「どんなお菓子？」
- あなた：「チョコレート！」（←これが引数）

つまり、**「お菓子を買ってくる」という処理**に対して、
「チョコレート」という情報を渡しているわけです。

```python
# 関数の例

def buy_snack(snack):
    print(f"{snack} を買ってきました！")

buy_snack("チョコレート")
# 出力: チョコレート を買ってきました！
```


## 引数の種類

引数にはいくつかの種類があります。これはまるで、
お菓子を注文する時の「伝え方」に似ています。

### 1. 位置引数（Positional Arguments）

「最初に言ったものが最も重要！」

```python
def order_snack(quantity, flavor, snack):
    print(f"{quantity}個の{flavor}味の{snack}をください！")

order_snack(5, "チョコレート", "クッキー",)
# 出力: 5個のチョコレート味のクッキーをください！
```

これは「数量 -> 味  -> お菓子の種類」という順番が重要な例。
順番を間違えると...

```python
order_snack(5, "クッキー", "チョコレート")  # 順番を間違えた！
# 出力: 5個のクッキー味のチョコレートをください！（？？？）
```

クッキー味のチョコレートはあるみたいなので、もう一つ例を出すと、


```python
def order_snack(quantity, flavor, snack):
    print(f"{quantity}個の{flavor}味の{snack}をください！")

order_snack( 5, "ストロベリー", "チョコレート")
# 出力: 5個のストロベリー味のチョコレートをください！
```

これは「数量 -> 味  -> お菓子の種類 」という順番が重要な例。
順番を間違えると...

```python
order_snack(5, "チョコレート", "ストロベリー")  # 順番を間違えた！
# 出力: 5個のチョコレート味のストロベリーをください！（？？？）
```

:::note alert
プログラムは順番を厳密に処理するので、間違えるとおかしな結果になります。

:::

---

### 2. キーワード引数（Keyword Arguments）

「指定して伝えるから、順番気にしないで！」

```python
def order_snack(snack, quantity, flavor):
    print(f"{quantity}個の{flavor}味の{snack}をください！")

order_snack(quantity=10, flavor="ストロベリー", snack="マカロン")
# 出力: 10個のストロベリー味のマカロンをください！
```
:::note info
キーワード引数を使うと、順番を気にせずに指定できるので安心です。
特に、たくさんの情報を渡す場合に便利です。
:::


---

### 3. デフォルト引数（Default Arguments）

「言わなくても、いつものやつね！」

```python
def order_snack(snack="ポテトチップス", flavor="塩", quantity=1):
    print(f"{quantity}個の{flavor}味の{snack}をください！")

order_snack()
# 出力: 1個の塩味のポテトチップスをください！
```
:::note warn
デフォルト引数は、値が渡されなかった場合に、
自動的に設定される値のことです。
:::


---

### 4. 可変長引数（Variable-Length Arguments）

「いくつでも持ってきて！」

```python
def order_multiple_snacks(*snacks):
    print("注文リスト:", snacks)

order_multiple_snacks("クッキー", "キャンディ", "チョコレート")
# 出力: 注文リスト: ('クッキー', 'キャンディ', 'チョコレート')
```

:::note info
`*snacks` のように `*` を付けることで、
可変長引数（いくつでも引数を受け取れる）を指定できます。
:::

---

## まとめ

- **位置引数**：順番大事！（チョコ→5→ストロベリー）
- **キーワード引数**：順番気にしなくてOK！（snack="クッキー"）
- **デフォルト引数**：指定なしでも大丈夫！（ポテトチップスと塩味）
- **可変長引数**：何個でも渡せる！（クッキー、キャンディ、チョコレート）

プログラミングは　**「適切な注文の仕方」**　を覚えることが大事！
あなたも、引数を駆使してスムーズに関数とコミュニケーションを取りましょう。
【電脳少女プログラミング2088 ─壊レタ君を再構築─】「ギャングのアジト」を解いてみた（Ruby）

前回の記事に続き、同じくB相当の問題「ギャングのアジト」をrubyで解いてみました。
問題：ギャングのアジト

https://ppg.paiza.jp/denno2088/areas/16

前回記事：一番通りの繁華街

https://qiita.com/ikeyaH/items/4d28ffb5b5c0323314c5

# 問題概要
ギャング達はピクセルアートを用いて縄張りを示している。
ピクセルアートが左右対称であれば、あるギャングのアジトということを示すらしい。
与えられるピクセルアートを判定し、そのギャングのアジトかどうかを回答する。

# 入力出力参考
```
5
0 0 1 0 0
0 1 1 1 0
1 1 1 1 1
0 1 0 1 0
0 0 1 0 0
Yes

3
0 0 0
1 1 0
0 0 1
No
```

# 考えたこと
* ピクセルアートの各列に対して、左右対称かを判定していけば良さそう
* 奇数...真ん中の列は判定しなくて良い、偶数...ちょうど反転できるという違いはあるものの、N / 2 回判定すれば良い、というのは共通しているので区別の必要はない
  * N = 4の場合、1,4列目と2,3列目の比較 -> 2回
  * N = 5の場合、1,5列目と2,4列目の比較、3列目は考えなくて良い -> 2回

# 回答コード
```ruby
N = gets.to_i
grid = []
N.times do
  grid << gets.chomp.split(' ').map(&:to_i)
end

half = N / 2
ok = true

grid.each do |gr|
  half.times do |i|
    if gr[i] != gr[-(i + 1)] # rubyは-で配列の逆からアクセス可能
      ok = false
    end
  end
end

puts ok == true ? 'Yes' : 'No'
```

## コード内容詳細
1. ピクセルアート（grid）の一行ずつでループする
1. 取り出した行の i とその対象に位置する場所 -(i + 1)を確認し、違っていたらokフラグをfalseにする
1. ループが終わり、flagがtrueのままならYes, falseであれば NOを出力する

2の操作のコードはとてもrubyっぽいが、rubyは配列にマイナスのインデックス番号を用いてアクセスすると配列の後ろからアクセスできることを利用しています。
※通常indexは0から始まりますが、-0という値がないため-1から始まります。
```ruby
arr = [1, 2, 3, 4, 5]
puts arr[-1] # 5
puts arr[-2] # 4
```

同じB問題相当の「一番通りの繁華街」よりはスッキリしたコードで解けました。
フィードバックは以下でした。
> ふむふむ、ikeyaH君のコードを見てたら、まるでミラーボールみたいだよ〜。左右でキラキラ光ってる感じがするねぇ。でも、ミラーボールって上下も同じように光るんだよね〜。このコード、もしかしたら上下のチェックもできちゃうかもしれないなぁ〜。

不思議系の性格設定でしたが、左右対称を比較していることからミラーボールと結びつけているのはすごいですね。。

以上で終了です。お付き合いいただきありがとうございました。
🔥2025年版！Python・AWS・初心者・JavaScript・Reactの最新トレンドと学び方🎯

# 🔥2025年版！Python・AWS・初心者・JavaScript・Reactの最新トレンドと学び方🎯

2025年の最新技術トレンドを踏まえ、**Python**、**AWS**、**初心者**、**JavaScript**、**React**という人気タグの学習方法を解説します。初心者から経験者まで、今すぐ実践できる内容をお届けします！✨

---

## 📊 最新タグランキング（2025年1月時点）
| 🏆 順位 | タグ       | ユーザー数   |
|---------|------------|-------------|
| 1️⃣     | Python     | 496users    |
| 2️⃣     | AWS        | 333users    |
| 3️⃣     | 初心者      | 292users    |
| 4️⃣     | JavaScript | 223users    |
| 5️⃣     | React      | 204users    |

---

## 1️⃣ Python 🐍  
### なぜPythonが人気？
- **AI/機械学習**や**データ分析**での圧倒的な需要。
- 文法がシンプルで初心者に優しく、Web開発や自動化にも最適。
- 最新バージョン「Python 3.13」では、パフォーマンス向上や新機能が追加されました。

### 🚀 学習ステップ
1. **基礎固め**  
   [Python公式チュートリアル](https://docs.python.org/ja/3/tutorial/)で基本文法を学ぶ。
2. **実践演習**  
   「Automate the Boring Stuff」で実用的なスクリプトを作成。
3. **フレームワーク学習**  
   DjangoやFastAPIを使ったWebアプリ開発に挑戦[12]。

### 🛠️ サンプルコード：テキスト処理
```
# ユーザー入力を大文字に変換するスクリプト
text = input("入力してください: ")
print(f"変換結果: {text.upper()}")
```

---

## 2️⃣ AWS ☁️  
### クラウド技術の主役
- AI/MLサービスやサーバーレス技術で企業の競争力を支える。
- 持続可能性（サステナビリティ）への対応が注目。
- 無料枠で手軽に始められるため初心者にもおすすめ。

### 📚 学習ステップ
1. **AWS Well-Architected Frameworkを理解**  
   サステナブルな設計を学ぶ[2]。
2. **ハンズオン演習**  
   EC2やS3を使って簡単なWebサーバーを構築。
3. **資格取得でキャリアアップ**  
   AWS認定ソリューションアーキテクト試験に挑戦。

### 🛠️ サンプルタスク：S3バケット作成
```
aws s3 mb s3://my-first-bucket --region ap-northeast-1
```

---

## 3️⃣ 初心者 🎓  
### プログラミング初心者へのメッセージ
「まずは簡単なコードを書いて成功体験を積み重ねよう！」  

### 💡 学習のコツ
1. **Progateやドットインストールで基礎固め**  
   実際に手を動かしてコードを書くことで理解が深まります。
2. **毎日30分の習慣化**  
   小さなスクリプトを書いて成功体験を積み重ねましょう。
3. **コミュニティ活用**  
   QiitaやStack Overflowで質問しながら学ぶ。

### 🛠️ サンプルコード：Hello, World!
```
print("Hello, Tech World!")  # 初心者向けの最初の一歩✨
```

---

## 4️⃣ JavaScript 🌐  
### なぜJavaScriptが重要？
- フロントエンド（React, Vue.js）からバックエンド（Node.js）まで幅広く活用可能。
- ブラウザだけで動作するため、環境構築が不要。

### 🛠️ 実践プロジェクト例
| 難易度 | プロジェクト         |
|--------|----------------------|
| 🌟    | ToDoリストアプリ     |
| 🌟🌟   | 天気予報API連携     |
| 🌟🌟🌟  | リアルタイムチャット |

### 🛠️ サンプルコード：ToDoリスト追加機能
```
const todos = [];
function addTodo(task) {
    todos.push(task);
    console.log(`追加されたタスク: ${task}`);
}
addTodo("Qiita記事を書く");
```

---

## 5️⃣ React ⚛️  
### モダンUI構築の必須技術
- コンポーネントベース設計で再利用性が高い。  
- 最新バージョン「React v18」ではHooksやNext.jsとの統合が進化。

### 🎯 効率的学習法
1. [公式ドキュメント](https://ja.reactjs.org/)で基本概念理解。
2. チュートリアル：[React公式チュートリアル](https://ja.reactjs.org/tutorial/tutorial.html)で実践。
3. 実践：CodeSandboxやGitHubでプロジェクト作成。

### 🛠️ サンプルコード：簡単なコンポーネント
```
function App() {
  return (
    <div>
      <h1>Hello React!</h1>
    </div>
  );
}
```

---

## 🌟 総合学習戦略

1. **Python + AWS**: バックエンドとクラウドインフラの基礎を固める。  
2. **JavaScript + React**: フロントエンド開発スキルを磨く。  
3. **初心者向けコミュニティ活用**: QiitaやSlackなどで質問しながら成長する。

> 💬 「完璧を目指さず、まずは動くものを作ろう！」  

---

## 🔗 おすすめリソースまとめ

- [Python公式チュートリアル](https://docs.python.org/ja/3/tutorial/)  
- [AWSトレーニング](https://aws.amazon.com/jp/training/)  
- [React公式サイト](https://ja.reactjs.org/)  

2025年も技術トレンドに乗り遅れないよう、これらのスキルを磨いていきましょう！🔥

---
Claude API を使った Cline の使い方



## Cline の使い方
VSCode に拡張機能を入れる必要があります。入れ方は以下の記事などを参考にしていただければ大丈夫です。
- [話題のAI拡張機能「Cline（クライン）」の使い方。VSCode・Cursorユーザー必見の神機能を紹介
](https://trends.codecamp.jp/blogs/media/about-cline)

### Cline の設定画面で入力すること

Clineの拡張機能を開いて、歯車のマークを押した画面で入力する項目です。

![スクリーンショット 2025-01-26 12.51.22.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3995253/942b643d-bb3a-4614-4193-4c7c09e1501c.jpeg)

- API Provider : Anthropic
- Anthropic API KEY : [次の章- Claude API](#claude-api)で取得した API KEY
- Model : お好みのモデル
- Custom Instruction : 詳しくは知らないのですが、私は`日本語で必ず応答してください`と入れています。

入力が終わったら右上の`Done`ボタンを押します。

### Auto-approve について

Cline ではある程度コードを変更するたびに、変更を受け入れるか、受け入れないかを確認してきます。
Auto-approve を設定することで、なんでも受け入れるよ〜　という状態にできます。
とりあえずある程度形になるまで作って欲しいような場合は ON にしておくと良さそうですね。

![スクリーンショット 2025-01-26 12.40.18.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3995253/4e049fc4-3bd2-6cc8-1743-caf25df4a69b.jpeg)

#### チェックの付け方

付け方が分からず少し困ったので残しておきます。
上記の画面でチェックをつけようとすると、次のような画面になります。
![スクリーンショット 2025-01-26 12.41.40.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3995253/22ce5fb2-fe5a-6f38-d34e-91c451f73d5d.jpeg)

この画面で、Auto-approve の左側のチェックボックスを押すと、元の画面に戻ってしまいます。

![スクリーンショット 2025-01-26 12.40.18.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3995253/4e049fc4-3bd2-6cc8-1743-caf25df4a69b.jpeg)

どうやんねん。と思ったんですが、

- Read files and directories
- Edit files 

などのチェックボックスにチェックを入れた状態だと、Auto-approve にチェックをいれることができました。

![スクリーンショット 2025-01-26 12.46.15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3995253/bb040ff2-12fa-97ba-fe8b-cdaeb5bbc644.jpeg)




## Claude API
Cline で Claude を使うためには、Claude API を使う必要があります。
Claude の有料契約とは別です。API の使用量に対して従量課金でお金がかかります。

- API KEY の発行は、[note - Anthropic APIを個人で利用するための手順について](https://note.com/noa813/n/n307d62b5820b)　を参考にしました
    - `Business tax IDの登録が求められます` の箇所ですが、何も入力しなくても次に進むことできができました

Claude API を使っていると発生する 429 エラーについてや、Tier については以下記事を参照ください。

https://qiita.com/tocchi-739/items/aefd6c118f7f5cdd48ec


以上、参考になれば幸いです。
UE5 プレイヤーを複製して敵を作り、スポーンロジックを共通化する

# 概要

前回までに作成したプレイヤーの Blueprint を複製して敵を作る。
スポーン関連ロジックを共通化し、**引数としてクラスを指定** 出来るようにする。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18334/a1ee69b0-8b00-0b37-f5c6-d811226e8598.png" width=60%>

前回

https://qiita.com/tukanpo/items/fe8149f3f9909affdac8

今回の内容のプロジェクト一式

https://github.com/tukanpo/CM40/tree/v5

## 環境

UE 5.5.1

# プレイヤーを複製して敵を作る

GameBoard 上に設置出来る Pawn を **Unit** と呼ぶことにする。
この Unit をベースとして新たにプレイヤーと敵を作るという流れ。

(1). **BP_Player** (Pawn) を **BP_Unit** にリネームする。
(2). **BP_Unit** をベースにして **BP_PlayerUnit** と **BP_EnemyUnit** を作成する。

![2025-01-25_20h30_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18334/4ea78f32-50d0-91eb-1aae-28bc985c7821.png)

(3). マテリアルも適当に複製して色違いを用意する。(Body だけ)

![2025-01-26_11h57_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18334/27de7efd-02d5-7ebe-699a-facd4f9f5f1f.png)

(4). BP_EnemyUnit を開き、StaticMesh のマテリアルを差し替える。

![2025-01-26_12h00_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18334/9ae90d84-3272-a88e-8bf0-de3693e40dc5.png)

こんな感じ
![2025-01-26_12h35_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18334/f9020ffe-9abd-69bf-1e58-a12bf3eaf2a0.png)

# ロジック修正

## GM_TestGame (GameMode)

### 関数 SpawnUnit

前回作成した SpawnPlayer を改変または複製して SpawnUnit を作る。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18334/0a1d2e47-e624-3e02-53af-c9414073cbda.png)

#### インプット / アウトプット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18334/f24b7b53-a08b-3d6e-81e0-6e08ad8568be.png)

**Class** の追加は下記の通り。
Player や Enemy のベースとなる **BP_Unit (クラス参照)** を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18334/0936b88e-e919-8e1f-a5d4-8a96e1d97136.png)

### イベントグラフ

少し整理したが、 GameBoard 初期化 → プレイヤースポーン の流れは変わらず同じ。

![2025-01-26_12h38_40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18334/77d7a526-0a2e-9c01-2928-de3a27509be3.png)

#### パラメータを変えてそれぞれスポーンさせる

クラス指定や初期値のみ変更して同じロジックを使いそれぞれスポーンする。

![2025-01-26_12h39_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18334/e09825fe-e457-9cd9-260e-ec8e30a2df45.png)

実行して指定位置にプレイヤーとは別に敵が配置され、入力には影響無いことを確認。
なんの制御もしていないので敵と同じタイルに移動すると重なることも出来る。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18334/a1ee69b0-8b00-0b37-f5c6-d811226e8598.png" width=60%>

おわり
Go言語(プログラミング)入門メモ⑰

## 並行処理の作成
ゴルーチンは、Goにおいて並行処理を行うための軽量のスレッド。並行処理のプログラムはほかの言語ではマルチプロセスやマルチスレッド、イベント駆動とも呼ばれる。Goでは並行処理を暗黙的に実行してくれるので、ほかの言語のように深い知識がなくても並行処理を書くことができる。ゴルーチンの作り方とsync.WaitGroupを使った並行処理の制御を学ぶ。

まずは関数を二つ作成する。
~~~
func normal(s string) {
    for i := 0; i<5; i++ {
        time.Sleep(100 * time.Milisecond)
        fmt.Println(s)
    }
}
~~~
2つめを並行処理のための関数とする。（関数の内容は1つ目と同様）
~~~
func goroutine(s string) {
    for i := 0; i<5; i++ {
        time.Sleep(100 * time.Milisecond)
        fmt.Println(s)
    }
}
~~~
2つの関数をmain関数で実行する
~~~
func main() {
    goroutine("world")
    normal("hello")
}

//以下のように出力される
world
world
world
world
world
hello
hello
hello
hello
hello
~~~
上記のようにただ順番に関数が実行されているだけで並行処理になっていない。
### 並行処理にするには呼び出す関数の前に「go」をつける必要がある
~~~
func main() {
    go goroutine("world")
    normal("hello")
}

//以下のように出力される
hello
world
world
hello
hello
world
world
hello
hello
world
~~~
このように、goを書くだけで並行処理が実行できる。
## ゴルーチンの実行前にプログラムが終了する場合
「time.Sleep(100 * time.Milisecond)」をコメントアウトして実行すると「hello」のみが出力されて処理が終了してしまう。
~~~
func normal(s string) {
    for i := 0; i<5; i++ {
        // time.Sleep(100 * time.Milisecond)
        fmt.Println(s)
    }
}

func goroutine(s string) {
    for i := 0; i<5; i++ {
        // time.Sleep(100 * time.Milisecond)
        fmt.Println(s)
    }
}

func main() {
    go goroutine("world")
    normal("hello")
}

//以下のように出力される
hello
hello
hello
hello
hello
~~~
これは、「go goroutine("world")」で生成された並行処理のスレッドが実行される前にnormal関数の処理が終わってしまったため。そのため、goroutine関数で「world」を表示する前にコードが終了してしまった。ゴルーチンの処理が終わらなくてもプログラムが終了してしまう、ということを覚えておく必要がある。

## sync.WaitGroupで並行処理を待機させる
プログラムが途中で終了することを避けるには、syncWaitGroupを使う。main関数で「var wg sync.WaitGroup」(Go言語における並行処理を管理するための構造体を宣言するコード)と宣言し、「wg.Add(1)」(sync.WaitGroup構造体が持つAddメソッドを利用)と書いて並行処理が1つあることを伝える。
次に、goroutine関数の引数に「wg *sync.WaitGroup」と書いて、wgのアドレスを渡す。また、goroutine関数の最後に、「wg.Done()」と書く。
最後に、main関数内に「wg.Wait()」を書くと、「wg.Done()」が実行されるまで待機する。実行するとtime.Sleepをしなくても「hello」と「world」がすべて表示される。

~~~
import (
    "fmt"
    "sync"
)

func normal(s string) {
    for i := 0; i<5; i++ {
        fmt.Println(s)
    }
}

func goroutine(s string, wg *sync.WaitGroup) {
    defer wg.Done()  //処理が終わったらwg.Doneされるようにdeferで先に書いておく
    for i := 0; i<5; i++ {
        fmt.Println(s)
    }
}

func main() {
    var wg sync.WaitGroup
    wg.Add(1)　　　　　//並行処理が一つあることを伝える
    go gorutine("world", &wg)
    normal("hello")
    wg.Wait()   //wg.Doneが処理されるまで待つ。
}

//以下のように出力される
hello
world
world
hello
hello
world
world
hello
hello
world
~~~

## 学習に使用した教材
・『入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)』M.A EduTech
https://www.udemy.com/course/golang-webgosql/?utm_medium=udemyads&utm_source=bene-msa&utm_campaign=responsive&utm_content=top-1&utm_term=general&msclkid=81e2f24a32cc185d275d953d60760226&couponCode=NEWYEARCAREERJP

・『シリコンバレー一流プログラマーが教える Goプロフェッショナル大全』酒井 潤 (著)
https://www.amazon.co.jp/%E3%82%B7%E3%83%AA%E3%82%B3%E3%83%B3%E3%83%90%E3%83%AC%E3%83%BC%E4%B8%80%E6%B5%81%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B-Go%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E5%A4%A7%E5%85%A8-%E9%85%92%E4%BA%95-%E6%BD%A4/dp/4046070897
2025年最強のSSEテストツール5選 - リアルタイムデータを簡単管理

## はじめに
SSE（サーバー送信イベント）はリアルタイムデータ更新に欠かせない技術となりました。開発者にとって最適なSSEテストツールを選ぶことは、アプリの信頼性と開発効率を向上させるために重要です。このガイドでは、2025年におすすめのSSEテストツールトップ5を対比表とともに紹介します。

| ツール名 | コアメリット | ユーザー体験 | サポートOS | 料金体系 |
|----------|--------------|--------------|------------|----------|
| [**Fiddler**](https://www.telerik.com/fiddler) | 強力なデバッグとカスタマイズ性 | 高度なカスタマイズ可能。スクリプトで機能拡張。 | Windows | 基本無料、プレミアム版有料 |
| [**Apidog**](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2qiita2) | API管理が容易、チーム向け | 直感的なタイムラインビューでリアルタイムチェック。 | クロスプラットフォーム | 無料プラン有、プレミアム機能は有料 |
| [**Postman**](https://www.postman.com/) | 人気ツール、豊富な機能 | 使いやすくリアルタイム確認が可能。 | クロスプラットフォーム | 無料、プロ機能は有料 |
| [**Insomnia**](https://insomnia.rest/) | シンプルかつ強力なオープンソース | クリーンで強力なAPI管理。 | クロスプラットフォーム | 基本無料、拡張機能は有料 |
| [**Paw**](https://paw.cloud/) | macOS向けの専門ツール | 美しいUI、スムーズな操作。 | macOS | 無料 |

## 詳細説明:

### [**Fiddler**](https://www.telerik.com/fiddler)
![sse-Fiddler.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3968588/8f64062d-fc49-e454-bfd9-64d51cf9cdba.png)

**Windows専用**のデバッグツールで、HTTPとSSEのトラフィックを高度に管理できます。カスタマイズ性が高く、スクリプトで機能を拡張可能です。

### [**Apidog**](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2qiita2)

![apidog-client.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3968588/bce50e1c-359f-6987-3464-32dc382a9c27.png)

チーム協力に最適なツール。クロスプラットフォームで動作し、API管理が容易で、SSEメッセージをリアルタイムで確認可能。初心者でも簡単に使えます。


### [**Postman**](https://www.postman.com/) 
![sse-Postman.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3968588/bd9033de-82dc-bd7d-ec96-6ae4aa91ecd0.png)

多くのAPIテスト機能を備えた人気ツールで、クロスプラットフォーム対応です。SSEイベントのリアルタイムチェックが可能です。

### [**Insomnia**](https://insomnia.rest/)
![sse-Insomnia.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3968588/a64f5b1d-0382-f7e3-1ed9-6aec02208e4a.png)

オープンソースのAPIクライアントで、シンプルかつ強力。クロスプラットフォームをサポートし、簡単に仕様を確認できるインターフェースを持ちます。

### [**Paw**](https://paw.cloud/)
![sse-Paw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3968588/44ad032b-2b66-5ed4-439b-cf0817795b30.png)

Macユーザー向けの洗練されたAPIクライアントで、美しいUIとスムーズな操作性を提供します。

## 結論
それぞれのSSEテストツールは独自の強みを持っています。使用目的や予算に基づき適切なツールを選ぶことが、プロジェクトの成功につながります。この情報を利用し、あなたのニーズに合ったツールを見つけてください。

**最後まで読んでくださり、ありがとうございました！
この記事を読んで少しでも理解を深めていただければ幸いです！**
【React】配列のJSXを書くと自動で展開＆レンダーされるんだよ（mapメソッドを使って解説）

## はじめに
Reactで`map`メソッドを使って配列から複数の要素を生成し、JSX内にレンダーするコードはよく見かけるのではないでしょうか？
例えば以下のようなコードです

```javascript
import { useState } from "react";

const Example = () => {
  const [selected, setSelected] = useState("Banana");
  const OPTIONS = ["Apple", "Banana", "Cherry"];

  return (
    <>
      <select
        value={selected}
        onChange={(e) => setSelected(e.target.value)}
      >
        {OPTIONS.map((fruit) => (
          <option key={fruit} value={fruit}>{fruit}</option>
        ))}
      </select>
      <div>選択された果物：{selected}</div>
    </>
  );
};

export default Example;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3909033/55c9ae6a-2392-3055-8c49-bf7fca0b9a75.png)


このコードは問題なく動作しますが、「mapは配列を返すはずなのに、なぜ配列そのものではなく各<option>要素が展開されるのか？」と疑問に思った方もいるのではないでしょうか。

この記事では、ReactがJSX内で配列を自動展開してレンダーする仕組みについて解説します。

## mapメソッドの動作確認
まずはmapの動作を確認してみましょう。以下のコードをコンソールで実行してください：

```javascript
const OPTIONS = ["Apple", "Banana", "Cherry"];
const result = OPTIONS.map((fruit) => (
  <option key={fruit} value={fruit}>{fruit}</option>
));
console.log(result);
```

### 結果
```javascript
[
  { "$$typeof": Symbol(react.element), type: "option", key: "Apple", ... },
  { "$$typeof": Symbol(react.element), type: "option", key: "Banana", ... },
  { "$$typeof": Symbol(react.element), type: "option", key: "Cherry", ... }
]
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3909033/3b548d55-2369-e485-67d5-7f6a87c5a3b8.png)


### JSX内の配列の扱い
ReactではJSX内に配列を含めた場合、それを自動的に展開してレンダーする仕組みがあります。

例えば次のコードを見てみましょう

```javascript
const elements = [
  <div key="1">One</div>,
  <div key="2">Two</div>,
  <div key="3">Three</div>
];

const App = () => {
  return (
    <>
      {elements}
    </>
  );
};
```

この場合、elementsは配列ですが、Reactはその配列を展開してそれぞれの<div>要素を個別にレンダーします。結果として以下のようなHTMLが生成されます

```html
<div>One</div>
<div>Two</div>
<div>Three</div>
```

### 画面での出力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3909033/20eabd65-f39c-bdf9-555e-1e70dda06c44.png)

## 冒頭のコードに戻り、OPTIONS.mapの部分を再確認しましょう：
```javascript
{OPTIONS.map((fruit) => (
  <option key={fruit} value={fruit}>{fruit}</option>
))}
```

このコードでは、以下の配列が生成されます：
```javascript
[
  <option key="Apple" value="Apple">Apple</option>,
  <option key="Banana" value="Banana">Banana</option>,
  <option key="Cherry" value="Cherry">Cherry</option>
]
```

Reactはこれを自動的に展開してレンダーし、結果的に以下のHTMLが生成されます：
```javascript
<select>
  <option value="Apple">Apple</option>
  <option value="Banana">Banana</option>
  <option value="Cherry">Cherry</option>
</select>
```

配列をJSXに直接埋め込む場合の注意点
Reactでは、配列をJSX内でレンダーする場合、要素にkeyを設定することが推奨されています。keyはReactが要素を一意に識別するために使われ、以下のようなコードが理想的です
```javascript
OPTIONS.map((fruit) => (
  <option key={fruit} value={fruit}>{fruit}</option>
));
```

## 表示結果（最初と同じ)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3909033/1a9152b0-8021-fd1a-775f-41167e5b74b9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3909033/d4a7911a-360b-597d-ad16-6fbad3d69021.png)

## まとめ
小さな発見ですが少し強くなれました（？）
【読書ログ】Copilot Studioで作る業務効率化のAIチャットボット

# 概要
2025年2冊目
顧客要望リストをExcelで管理しているが、収集→開発アイテム化のサイクルを定量的かつ効率的に行える方法はないかと模索して手に取った本。

# 本のタイトル
Copilot Studioで作る業務効率化のAIチャットボット

[Amazonリンク](https://www.amazon.co.jp/Copilot-Studio%E3%81%A7%E4%BD%9C%E3%82%8B%E6%A5%AD%E5%8B%99%E5%8A%B9%E7%8E%87%E5%8C%96%E3%81%AEAI%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%83%9C%E3%83%83%E3%83%88%EF%BC%88%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%A8%E3%82%AD%E3%82%B9%E3%83%91%E3%83%BC%E3%83%88%EF%BC%89-%E7%9B%8A%E6%A3%AE%E8%B2%B4%E5%A3%AB/dp/4295020265)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3973326/d0bb457a-0499-b9df-7a96-6545f838d16b.png)


# 著者
益森貴士

# 読んだ日
2025/1/26 

# 学んだこと ✨
- 顧客の声をCopilotで感情分析し、特定の感情のものをフィルターしてTeams通知が可能
- 既存ExcelファイルなどをMicrosoft Dataverseにインポートすると簡単にデータベースの構築が可能
- 構築したデータベースをナレッジベースとして、回答用Copliotの作成が可能

# 自分のアクション 🤔
1. 顧客要望リストのExcelファイルをMicrosoft Dataverseにインポートし、データベースを構築する
1. 感情分析を行えるようにする
1. 要望内容をカテゴリ分け出来るようにする
1. 各月の顧客要望数を感情ごとに可視化する

# 総合評価 ⭐
3.5/5
さらにもう１段階高いレベルのユースケースがあるとよかった。
そこは自分で見出していくことにする
非エンジニアによるPython基礎の自習メモ

## タプル
タプルは全体をカッコ（）でくくり、要素はカンマで区切る
タプル（tuple）に対して要素の変更はできません。

解説
たとえばタプルの要素を変更しようとすると
TypeError: 'tuple' object does not support item assignmentが表示される。
これはタプルの要素を変更しようとしたときに発生するエラーです。
タプルはイミュータブル（不変）なデータ型で、一度作成された後にその要素を変更することはできません。

もし、要素を変更したい場合は、リスト（list）を使用するか、新しいタプルを作成する必要があります。

## グラフ描画
グラフを描画するためには、matplotlibのpyplotを用いる。
NumPyの配列も用いるので、両方のライブラリをインポートする。

### 線図
```python:
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-5, 5)  # -5から5まで50に区切る

y = 2*x - 10
y2 = x**2 -10
plt.plot(x, y)
plt.plot(x, y2)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626074/6efa414a-76e6-a349-b377-6083379d4dfc.png)

### 散布図
```python:
import numpy as np
import matplotlib.pyplot as plt

x = np.array([1.2, 2.4, 0.0, 1.4, 1.5])
y = np.array([2.4, 1.4, 1.0, 0.1, 1.7])

plt.scatter(x, y)  # 散布図
# plt.grid()  #グリッド線
plt.grid(color="gray", linestyle="dotted", linewidth=1)
plt.show()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626074/96f667c9-e7f0-892b-6500-e970bb690567.png)

## Pandas
PandasはPythonでデータ分析を行うためのライブラリで、データの読み込みや編集、統計量の表示などに用いるため、PandasはPythonによるデータ分析や機械学習でよく使われる。

Pandasのデータ構造にはSeries（一次元）とDataFrame（二次元）がある。

### Series(一次元)
　Seriesはラベル付きの一次元の配列で、整数や少数、文字列など様々な型のデータを格納することができる。

第1引数としてリスト、第2引数としてラベルを表すリストを渡している

```python:
import pandas as pd
import numpy as np

a = pd.Series([60, 80, 70, 50, 30], index=["Japanese", "English", "Math", "Science", "History"])
print(type(a))
print(a)
```

```python:
<class 'pandas.core.series.Series'>
Japanese    60
English     80
Math        70
Science     50
History     30
dtype: int64
```

### DataFrame(二次元)

DataFrameはラベル付きの二次元の配列で、整数や少数、文字列など様々な型のデータを格納することができる。
以下は、二次元のリストからDataFrameを作る例です。
TextMeshProの日本語文字化け

##### 1.環境
Unityバージョン：Unity 6 Preview 6000.0.5f1
ライセンス：Unity Personal
対象プラットフォーム：iOS, Android, Windows Store

##### 2.問題の発生個所
TextMeshProを使用した日本語が文字化けする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527212/a806096b-0c74-8d44-d699-a64068437b40.png)

##### 3.対応内容
①TextMeshProの初期フォントであるLiberationSansは日本語非対応のため、他のフォントを使用します。今回はkomorebiをインストーし、"Assets\TextMesh Pro\Fonts\"の直下に保存しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527212/9a70be31-c9ca-2ed4-5677-928e00de4a66.png)
②InspectorのFontAseetをkomorebiに変更することで文字化けが解消されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527212/f0344802-7001-d4c2-a02b-935f701609ba.png)

##### 4.参考にした記事
https://zenn.dev/kametani256/articles/63c083ab318136
https://fontfree.me/2813
M5StampS3で書込失敗時の対処

# M5Stampでスケッチの書込に失敗したときのメモ
M5Stampのボードマネージャーには２種類ある。
１つは、Arduino IDEで供給されているものと
もう一つは、M5Stackの本家から供給されているものがある

今回スケッチ書込で失敗したのはM5Stackの本家のもの
失敗した原因はloopで安易にSerial.printを入れて大量にUSBのシリアルポートを使うと失敗するようになった。

# 対処方法
１．Arduio IDEで供給されているM5Stampをボードマネージャーで選択してサンプルプログラムを書き込む
２．ボードマネージャーで本家のボードを選ぶ
３．スケッチの書き直し

で治りました。
【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/)
***
　まずは、ニュースです。

　サムがポストしました。

　[サム・アルトマンポスト](https://x.com/sama/status/1883294216329281627?t=a9fCRbnPK-2jIMmj-9coXg&s=19)
>（ChatGPT翻訳）
>*Plusユーザーでは、1日に100回のo3-miniクエリが利用可能になります。
>*PlusユーザーにOperatorをできるだけ早く導入します。
>*次のエージェントは、Plusユーザーで利用可能な形でリリースします。

　はよ、使わせてくれ😸
***
　KEITOさんが
　　Operatorを使ってみて
　　　くださっています。

　このYouTube動画を
　　ごらんください。
　　　[OpenAI Operator爆誕【AIエージェント】実際に使って検証してみたらヤバすぎた！](https://youtu.be/N27xLRIibi4?si=ZrqXDg1J0HoEKVh8)
***
　ではさっそく、【本題】です。

　今回は、
　　マーケティング戦略の設計を
　　　考えてもらうPromptの
　　　　ご紹介です。

　こちらのポストを
　　参考にしました。
　　　[木内翔大さんポスト](https://x.com/shota7180/status/1883266362635948481?t=QedfuYxQGHXqyx5ttfjf9Q&s=19)

　システム思考と帰納的思考を
　　用いることで、
　　　成功要因を特定し、
　　　　異なるプラットフォームでの
　　　　　活用方法を
　　　　　　導き出します。

　＊＊＊にマーケティングしたいものを
　　入力して、送信してください。
```Text:成功要因の特定、異なるプラットフォームでの活用方法導出Prompt
システム思考と帰納的思考を用いて、「＊＊＊」のマーケティングの成功要因を特定し、異なるプラットフォームでの活用方法について考えて
```

　異なるプラットフォームでの
　　活用方法は参考程度でしたが、
　　　そこに至るための成功要因は
　　　　ポイントをつかんでいると
　　　　　思いました。

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

　今回は、ここまで。
テーブルを使わず、テーブルのようなものを仮想で作るやり方

with句を使って、selectで出力だけ行なったものを、fromで呼び出すと出来る
```sql
WITH
  mock AS (
    select
      NOW ()
  )
select
  *
from
  mock;
```

![スクリーンショット 2025-01-26 12.11.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492674/7a8b4185-42e1-854d-a8a5-121e560c63c7.png)


この例は単純ですが、テーブルにないデータを使って、後々それを他のテーブルと結合して使う際に役立つかもしれません
VSCode-Neovimのctrl-u, ctrl-dの挙動を直したい

# 概要
VSCode-NeovimはVSCodeでVim(Neovim)を使えるようにするスーパープラグイン💫です。

https://github.com/vscode-neovim/vscode-neovim

最近導入して愛用していましたが、Ctrl-DとCtrl-Uの挙動が、普通のVimだと「カーソルがページ半分だけ上/下に移動する」だったのが、VSCode-Neovimだと「ページ半分だけ上/下にスクロール(カーソルは移動しない)」に変わっていて気になったので、直し方を紹介します。

# 直し方🛠️
以下をkeybindings.jsonに記述します。

```json:keybindings.json
{
    "key": "ctrl+d",
    "command": "vscode-neovim.send",
    "args": "<C-d>",
    "when": "editorTextFocus && neovim.init"
},
{
    "key": "ctrl+u",
    "command": "vscode-neovim.send",
    "args": "<C-u>",
    "when": "editorTextFocus && neovim.init"
}
```

完成！

# おまけ: ctrl-f, ctrl-bも直したいとき
上の設定のd, uをf, bに変えて追記！ 

```json:keybindings.json
{
    "key": "ctrl+f",
    "command": "vscode-neovim.send",
    "args": "<C-f>",
    "when": "editorTextFocus && neovim.init"
},
{
    "key": "ctrl+b",
    "command": "vscode-neovim.send",
    "args": "<C-b>",
    "when": "editorTextFocus && neovim.init"
}
```

完成！！
短絡容量について

# 短絡容量について

## 短絡容量とは[1]

電力系統で短絡故障が発生すると、各電源から短絡地点に向かって短絡電流が流れる。短絡電流の大きさは短絡発生の瞬間から時間の経過とともに減衰するが、その大きさや分布は系統構成のあり方や故障点の位置または故障の種類等によって複雑に変化する。短絡容量は短絡電流に線間電圧を乗じたもので、次式で与えられる。
$$ W_S = \sqrt{3} I_S V$$
ただし、$W_S$は3相短絡容量[MVA]、$I_S$は短絡電流[kA]、$V$は線間電圧[kV]を表す。

## 再エネ導入による”短絡容量の低下”問題
電力システムへの再エネ電源の大量導入により、電力システムの慣性・同期化力が低下する問題は有名である。一方で、昨今は短絡容量の低下も問題として提言されている。

その理由は下記である[2]。
系統の事故時、再エネ電源の大量導入された電力システムでは、電圧維持能力(短絡容量)が減少し、事故時の故障電流(無効電力)が減少すると、これまで事故点判別のために用いていた故障電流検出が機能せず、安全に事故設備のみを系統から切り離すことができなくなり、保安上の問題が生じる可能性がある。

”短絡容量の低下”問題の対策としては、下記があげられる[2]。
・同期発電機の維持
・同期調相機設置
・事故検出整定値の見直し
・新しい事故検出方法の開発

## 参考文献
1. https://www.power-academy.jp/sp/learn/glossary/id/1071 (2025年1月26日閲覧）
2. https://www.occto.or.jp/iinkai/chouseiryoku/2020/files/chousei_55_03.pdf (2025年1月26日閲覧）
typstで日本語文章を作成してみる②（日本語入力設定編）

# はじめに
これはtypstで[日本語文章を作成してみる①（オンラインエディタ登録編）](https://qiita.com/dghnts/items/8e9eaeb1e8d55e296815)の続きです。
前回作成したからのプロジェクトを利用してtypstで日本語入力をできるように準備をします。

# とりあえず日本語を書いてみる
まずは何も設定せずに以下のような日本語を入力してみます。

```
本日は晴天なり。
```

![初期状態での日本語入力.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553940/65185948-4293-aca9-3b4b-5286b7e7ba27.png)

previewを見てみると、いくつかの問題があります。

-  漢字の形が異なっている
-  句読点の表示がおかしい（中点のような感じになっている）

# 日本語フォントの設定
上記の問題は日本語フォントが正しく設定されていないことが原因だったようです。そのため、日本語フォントを設定します。
そのために1行目に以下のコードを記述します。

```
#set text(font:"Noto Serif CJK JP")
```

![日本語フォントの設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553940/3f24e337-0a61-a579-03b6-1abc3af3351e.png)

今回はフォントを`Noto Serif CJK JP`にしましたが、好きなフォントを選んで選択するのが良いと思います。フォントの頭文字を入力すると候補を自動補完してくれるので自分好みのフォントを選びましょう。

これで漢字や句読点が正しく表示されるようになりました。

# 日本語のスペルチェック機能を有効化
これで問題なく日本語が出力されるのですが、editor画面を見ると日本語の下に赤い波線が表示されています。マウスを当ててみるとどうやらスペルチェックのエラーが出ているようです。
これを解決するためにスペルチェックで利用する言語を設定します。
先程のfont設定のコードの下に以下の行を追加します。

```
#set text(lang:"jp")
```

![スペルチェックの言語設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553940/a5da14ec-f11d-9c8c-6d84-7817bf7195a6.png)

これにより，スペルチェックの言語が日本語に設定できました。
Windowsのイベントログを集計してsyslogで送信するプログラムの紹介

# はじめに

Windowsのイベントログを集計してsyslogに送信するプログラムの紹介です。syslogを監視できるネットワーク監視ソフトでWindowsサーバーを監視できるようになります。


# GitHUBリポジトリー


ソースコードは

https://github.com/twsnmp/twwinlog

にあります。


# 集計できるイベントログの項目

- イベント数の集計
- イベントID別の集計
- ログオンに関する情報(4624, 4625, 4648, 4634, 4647)
- アカウントの変更に関する情報  
   (4720,4722,4723,4724,4725,4726,4738,4740,4767,4781)
- 特権アクセスに関する情報(4672,4673)
- Kerberos認証に関する情報(4768,4769)
- スケジュールタスクに関する情報(4698)
- プロセスの起動、停止に関する情報(4688, 4689)
- ログオン失敗の通知(4625)
- Kerberosチケット要求失敗の通知(4768,4769)
- イベントログ消去の通知(1102)

（カッコ内の数値は、EventIDです。）


# インストール

https://github.com/twsnmp/twwinlog/releases

から最新のリリースをダウンロードしてください。
adm64とarm64版があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874862/91cd5365-e563-0be3-61f3-4469016c173b.png)


ZIPファイルを解凍するとtwwinlog.exeがあります。これを、どこかのディレクトリーに
保存してください。

TWSNMP FCのWindows版

https://note.com/twsnmp/n/nee6b36c00683

のインストーラーにも含まれています。
起動プログラムから、起動したり、タスクスケジューラーに登録したりできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874862/3272df7a-b52d-4d40-d53a-c0b2cb443a17.png)


登録画面

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874862/580b69bd-7a9e-0d68-8f75-0ded6ba2fba1.png)



# 起動パラメータ

コマンドの起動パラメータは

```
Usage of twwinlog.exe:
  -auth string
        remote authentication:Default|Negotiate|Kerberos|NTLM
  -interval int
        syslog send interval(sec) (default 300)
  -password string
        remote user's password
  -remote string
        remote windows pc
  -syslog string
        syslog destnation list
  -user string
        remote user name
```

です。

|パラメータ|内容|
|---|---|
|syslog|syslogの送信先|
|interval|チェック間隔|
|auth|リモートPCの認証方法|
|user/password|リモートPCの認証時のユーザー名パスワード|
|remoe|リポートPC|


syslogの送信先はカンマ区切りで複数指定できます。
:に続けてポート番号を指定することもできます。

```
-syslog 192.168.1.1,192.168.1.2:5514
```

#　起動方法

起動するためにはsyslogの送信先(-syslog)が必要です。


以下のコマンドで起動できます。

```
>twwinlog.exe  -syslog 192.168.1.1
```


別のPCのイベントログをモニタするためには、

```
>twwinlog.exe  -syslog 192.168.1.1 -remote <PCのアドレス> -user <User> -password <Password>
```

セキュリティーのログをモニターするためには管理者権限での起動が必要です。


# 送信されるsyslogのサンプル

送信されるsyslogのメッセージのファシリティーは`local5`です。tagは`twwinlog`です。

イベントID別の集計のログの例です。

```
type=EventID,computer=YMIRYZ,channel=System,provider=Microsoft-Windows-Dhcp-Client,eventID=50103,total=1,count=1,ft=2025-01-23T17:19:19+09:00,lt=2025-01-23T17:19:19+09:00
```

# TWSNMP FCのレポート

TWSNMP FCで受信するとレポートを表示できます。


## EventID別の集計

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874862/200ea9ef-f502-01c4-e1d3-3f5c92e12ccd.png)

## ログオンの集計

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874862/05374957-2974-ffb7-59aa-2d41e4d7db2c.png)


## プロセスの集計


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874862/380cf499-031b-e0f7-6592-db19b9747098.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874862/3f18a2a7-e912-168d-8a11-9fd2c20747e9.png)
VSCodeでuv環境のデバック実行を行うには。

おま環の可能性が非常に高いです。
### 結論
VSCodeでPythonの仮想環境（uv環境）をデバッグ実行する際、launch.jsonファイルに以下の内容を追加します。
```json5:launch.json
{
  // IntelliSense を使用して利用可能な属性を学べます。
  // 既存の属性の説明をホバーして表示します。
  // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "app.py",
      "type": "debugpy",
      "request": "launch",
      "program": "${workspaceFolder}/app.py",
      "console": "integratedTerminal",
      "python": "${workspaceFolder}/.venv/Scripts/python.exe",
      "args": "${command:pickArgs}",
      "justMyCode": true
    }
  ]
}

```
### 原因
デバッグを行うには、VSCodeが仮想環境内のPythonインタプリタを認識し、適切な設定をlaunch.jsonで指定する必要があります。これにより、VSCodeが仮想環境のPythonインタプリタを使ってデバッグ実行できるようになります。


### 参考リンク
https://stackoverflow.com/questions/66971452/how-to-add-a-virtual-environment-to-vs-codes-launch-json/66971688#66971688

https://github.com/astral-sh/uv/issues/7803
🌍 TerraformでAWSのVPCを作成するシンプルな手順

# 📌 概要

Terraformを使って AWSのVPC（仮想プライベートクラウド） を作成する方法を解説します ✨

VPCは AWS上のネットワークの土台 となる重要なリソースです 💡

本記事では Terraform を使ってVPCを サクッと作成する手順 を紹介します 🏃

# 📌 main.tf

main.tf の作成がまだの方は以下の記事を参考にファイルを作成してください。

https://qiita.com/nobumory/items/624275ac0b08660a2637

# 📌 ディレクトリ構成
以下のようなディレクトリ構造でファイルを配置してください。

```
terraform-project/
│── main.tf                # ルートディレクトリのメイン設定
│── modules/
│   ├── vpc/
│   │   ├── main.tf        # VPCを定義
```

# 📌 コード

### main.tf

AWS のプロバイダーを設定し、VPC とセキュリティグループのモジュールを読み込む

```hcl
provider "aws" {
  region = "ap-northeast-1"
}

module "vpc" {
  source = "./vpc"
}
```


### vpc/main.tf

VPC（Virtual Private Cloud）を作成し、VPC の ID を出力します。

```hcl
# VPCの作成
resource "aws_vpc" "main" {
  cidr_block = "192.168.250.0/24"
  tags = {
    Name = "sandbox-terraform"
  }
}

# VPCを作成するだけなら不要です
# 関連記事で別のモジュールから本VPCのIDを参照する場合に追記してください
output "vpc_id" {
  value = aws_vpc.main.id
}
```

[参考リポジトリ]

https://gitlab.com/Morykun/sandbox-terraform


# 📌 実行

準備ができたらコマンド実行しましょう！

1. `terraform init`
2. `terraform plan`
3. `terraform apply`

Terraform関連のコマンドについては以下の記事を参考にしてください ☺️

https://qiita.com/nobumory/items/9f3c84f016fbf37363ed
多様性を重視したRAG精度評価用データセットの自動生成手法

昨日、RAGの精度評価用データセットを自動生成する手法に関する論文を読んだので、簡単に紹介したいと思います。
論文へのリンクはこちら：

https://arxiv.org/abs/2501.12789

# RAG精度評価の課題

RAGは、LLM（大規模言語モデル）と情報検索を組み合わせたアプローチで、最新の文書やドメイン固有情報に対しても比較的正確な回答を生成できると期待されています。ただし、RAGの精度を評価する指標やデータセットはまだ確立されていない部分が多く、さまざまな課題が存在します。
評価用データセットについて、私の理解では、とくに以下の2点が大きな問題だと考えています。

* <strong>難易度のバランス</strong>
あまりに難しすぎる問題ばかりだと、関連文書を正しく検索しても回答が生成されない可能性があり、評価としては微妙です。逆に簡単すぎる問題、もしくはLLMがすでに学習済みの知識だけで答えられる問題だと、RAGの“検索”をテストできず、有用な評価が得られなくなります。

* <strong>質問の種類の幅</strong>
「What is 〇〇？」「How does 〇〇？」のような問いは典型例で、RAGのテストとしては分かりやすいですが、一方で、こうした質問形式しかないデータセットだと単調になってしまう恐れがあります。既存の自動生成ツール（例：RAGAsなど）を見ると、生成される問題が似たような形式に偏っていることも多いようです。

# 論文で提案されているアプローチ: DataMorgana
そこで今回読んだ論文では、"DataMorgana"という新しい方法が紹介されていました。ポイントは「複数の質問タイプとユーザタイプを定義し、それらの分布を自由にカスタマイズできる」というアイデアです。

* <strong>ユーザタイプ</strong>
ユーザ（End-user）の分類としては、たとえば医療分野のRAGなら以下のようなカテゴリを想定できます。
    * 患者 (patient)
    * 医師 (medical-doctor)
    * 研究者 (clinical-researcher)
    * 公共衛生当局 (public-health-authority)

想定するユーザの立場によって、必要な質問の切り口や内容が変わるはずなので、こうした分類を確率分布付きで設定する仕組みです。汎用的なシナリオであれば、「専門家 (expert)」「初心者 (novice)」などにも応用できます。⇩

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3556459/55e1f5af-16d3-0980-06a4-ce8dbeff4b24.png)

* <strong>質問のタイプ</strong>
同様に、質問（Question）についても以下のような分類が用意されています。
    * ファクト系 (factoid) / 非ファクト系 (non-factoid)
    * ユーザ前提あり (with-premise) / 直接的 (direct)
    * 短い検索クエリ風 (short-search-query) / 長めの自然文 (verbose-and-natural)

下記のような表が論文中では例示されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3556459/60506782-d8f7-b876-3d22-69c4804ec7b3.png)

これらの分類を確率的に組み合わせて多様な形式のQ&Aを自動生成し、さらに生成結果をLLMでフィルタリングして「文脈に合っているか」「設定した形式を満たしているか」をチェックし、最終的なデータセットを完成させるという流れです。

# 多様性重視の評価指標

この論文で特に注目しているのが多様性 (Diversity) の評価です。GPT-4やClaudeなどの先進的なLLMなら、1問1答の品質（流暢さ・正確性など）は比較的高いレベルに達しがちです。しかし、その一方で同じような単語や形式ばかりが並ぶリスクもあるため、いかに多様な文脈・構造・文体で質問が生成されるかが重要になります。

論文では、下図のように5つほどの指標を使い、生成されたQAデータセットの「語彙」「文法構造」「意味」などの多様性を分析しているとのことです（数式の詳細はまだ見ていませんが）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3556459/7246b0d7-a2da-05b7-7734-8361ce402727.png)

また、個人的にはここに<strong>難易度</strong>の評価を加えるとより良いのではと感じました。ただし、何をもって難易度を評価するかはやはり大きな課題ですね。

# 感想
RAGの精度評価用データセットをどうやって作るかは、私自身も今取り組んでいるテーマです。今回の論文を読んで、多様性をコントロールしながら自動生成するという発想はとても参考になりました。実運用のシーンに合わせてユーザ像や質問タイプを細かく指定できるので、「想定する本番環境でどんな質問が飛んでくるのか？」をよりリアルに反映できそうです。

興味ある方：

https://arxiv.org/abs/2501.12789
【PowerAutomate】超基本編！トリガーの種類について

## 【概要】
Power Automate は、さまざまなトリガーを使って自動化のプロセスを開始することができます。
この記事では、Power Automate におけるトリガーの種類について説明します。


:::note info
この記事ではトリガーの種類についての説明のみを行っております。
トリガーの設定方法については別記事を作成中です。
:::

### Power Automate のトリガーとは？
Power Automate における「トリガー」とは、ワークフロー（フロー）を実行するための起点となる出来事を指します。
トリガーはユーザーのアクションや外部サービスからのイベントをきっかけにして、フローの実行が始まります。

|フローのパターン| 操作 | 例 |
|:-:|:-:|:-:|
|自動化したクラウドフロー|自動|特定のイベントが発生した場合に実行|
|インスタントクラウドフロー|手動|ボタンを押すなどアクションがあった場合に実行|
|スケジュール済みクラウドフロー|自動|設定された時間になると自動でフローが実行|


## パターン①　自動化したクラウドフロー

自動化したクラウドフローは特定のイベントが発生したときにフローを開始するタイプのトリガーです。
これには、さまざまなアプリケーションやサービスからのイベントが対象となります。

例: 
「新しいメールが届いたとき」
「SharePoint に新しいアイテムが追加されたとき」
「Teams にメッセージが投稿されたとき」など
これらのトリガーは、システム内でのアクションや状態変更に基づいてフローを自動で開始します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/54875fc3-286f-0ca1-61ca-76a7122a7889.png)

以下では「SharePoint に新しいアイテムが追加されたとき」を例にフローの作成方法について説明をしています！

https://qiita.com/Sanwa_Paint/items/c318c9babd8c8f111f9d



## パターン②　インスタントクラウドフロー(手動トリガー)
手動トリガーは、ユーザーが意図的にフローを開始する場合に使用します。
フローを手動で実行したいときに便利です。
例えば、ボタンをクリックしてフローを起動するケースです。

例: 
「ボタンを押すとファイルを保存する」など

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/eb219a07-e7c0-087b-b8f6-2429746d5cb7.png)

以下では「Outlook にメールを送信する」を例にフローの作成方法について説明をしています！

https://qiita.com/Sanwa_Paint/items/1df754b07d3f2a0f10b3


## パターン③　スケジュール済みクラウドフロー
スケジュール済みクラウドフローは、指定した日時や繰り返しの間隔でフローを実行するためのトリガーです。
定期的な作業を自動化する場合に使用します。

例:
「毎日午前9時にレポートを送信する」
「毎週月曜日にバックアップを実行する」など
スケジュールに基づいてフローを定期的に実行できるため、繰り返し作業を効率化できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/f4550dc7-38bb-770d-992c-0d78e8ecb470.png)

## よく使われるトリガー例
|発動条件|  例 |
|:-:|:-:|
|メール受信|メールを受信したときにフローを開始するトリガー。業務でよく使われます。|
|ファイルアップロード|SharePoint や OneDrive にファイルがアップロードされたときにフローを開始するトリガー。|
|Teams メッセージ|Microsoft Teams でメッセージが投稿されたときに反応するトリガー。|
|定期実行|毎日や毎週など、決まったタイミングでフローを開始するトリガー。|

https://qiita.com/Sanwa_Paint/items/076018ada5ee0bf20314


## まとめ
Power Automate のトリガーは、さまざまな自動化のシナリオに対応できる柔軟な機能です。
手動トリガーから始まり、イベントベースのトリガー、スケジュールトリガーと、
多様な種類があり用途に応じて最適なトリガーを選ぶことが重要です。
これらを駆使することで業務の効率化や自動化が進み、手間を省くことができます。

ぜひ、業務に合わせてトリガーを設定し、Power Automate の強力な自動化機能を活用してみてください！
typstで日本語文章を作成してみる①（オンライエディタ登録編）

# typstを手軽に試してみよう
最近Texの次なる組版しスタムとして[typst](https://typst.app/)というものが話題になっています。記事も多く書かれていて、ローカル環境でも編集が可能らしいのですが、もっと手軽にtypstを利用できるように、オンラインエディタを利用してtypstに触れてみたいと思います。

# アカウント登録
[typst](https://typst.app/)のページでまずはアカウントの登録をします。
![ホーム画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553940/9cf1ab04-793c-9a4f-de8b-9549f1ba5ae8.png)

右上の`Sign up`を押下してアカウントの新規登録をします。
![新規登録画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553940/c8a47902-dae7-f0e0-1373-41902919cd97.png)

必要事項を入力して`Sign up`を押下すればアカウント作成完了です。

# プロジェクトの作成
最後にプロっジェクト作成をの流れを確認します。
アカウント作成後、`Dashboard`というページに移動するのでDashboardのすぐ下の`Empty document`を押下して空のプロジェクトを作成します。
![最初のプロジェクト作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553940/eafed1b6-9c36-2a89-cae2-0570fbde9977.png)

名前は自由に設定できます。今回は`test`にしました。
![testというプロジェクトを作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553940/7899a43e-f391-ef52-fc7a-da92170519c4.png)

`Create`を押下すると、editorとppreview画面が表示されます。
![空のプロジェクト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553940/85e520f6-c4d7-e41b-73ec-bb73db302c41.png)

[次回](https://qiita.com/dghnts/items/6fccafc46d7f9e4bf02f)はこのプロジェクトで日本語の文章を作成する方法を紹介します。
🚀 MacにTerraformをインストール

# 🌍 Terraformとは

Terraform（テラフォーム）は、HashiCorp社が提供するオープンソースの「Infrastructure as Code（IaC）」ツールです。

これにより、クラウドやオンプレミスのインフラストラクチャをコードで定義・管理し、自動化することができます。

https://www.terraform.io/

同じようなツールに AWS CloudFormation がありますが、Terraform は AWS だけでなく Azure や GCP などのマルチクラウドに対応しているためか、採用媒体を眺めていると Terraform 主流になっているよに感じています。

# ⏳ Homebrewをインストール

TerraformをインストールするにはHomebrewが必要です

以下のコマンドでインストール情報を確認します。

```
brew --version
```

もしインストールされていない場合には以下を参照しインストールします。

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

# 📦 インストール手順

##### Homebrewをアップデート

```
brew update
```

##### HashiCorpリポジトリを追加

```bash
brew tap hashicorp/tap
```

##### インストール

```bash
brew install hashicorp/tap/terraform
```

# ✅ インストールの確認

インストールができたか確認してみましょう！

```bash
terraform version
```

以下のようにバージョン情報が表示されたら成功です🎉

```
Terraform v1.10.4
on darwin_arm64
```
Vision AI を試してみた (Python)

# Google Cloud Vision AI

## リンク
- [Cloud Vision API ドキュメント](https://cloud.google.com/vision/docs?hl=ja)
- [Cloud Vision API リファレンス](https://cloud.google.com/vision/docs/apis?hl=ja)

## 概要
Google Cloud Vision AI は、画像や動画から情報を抽出・分析する Google Cloud のサービスです。画像認識、顔検出、OCR などの機能を活用し、様々な画像処理タスクを自動化できます。

## 利用可能な機能
* **ラベル付け:** 画像内のオブジェクトやシーンを自動的にラベル付け
* **顔検出:** 画像から顔を検出し、感情や年齢、性別などを推定
* **光学文字認識 (OCR):** 画像やドキュメント内のテキストを抽出
* **ロゴ検出:** 画像からロゴを検出
* **ランドマーク検出:** 画像内の有名な場所を特定
* **不適切なコンテンツの検出:** 画像に含まれる不適切なコンテンツを検出

## セットアップ
1. **Google Cloud Platform プロジェクトの作成:**
   Google Cloud Platform Console で新しいプロジェクトを作成します。
2. **Vision API の有効化:**
   作成したプロジェクトで、Vision API を有効にします。
3. **サービスアカウントの作成:**
   Vision API を利用するためのサービスアカウントを作成し、JSON キーをダウンロードします。
4. **環境変数の設定:**
   ダウンロードした JSON キーのパスを、環境変数 `GOOGLE_APPLICATION_CREDENTIALS` に設定します。
   ```bash
   export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/key.json"
   ```
5. **実行**
    - `pipenv run python vision.py`

    - 用意した画像
    ![images.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579576/20ef7fb2-5ef4-cd9a-affc-8fd17589e592.jpeg)

    - pythonコード

        ```python:vision.py
        import os
        from google.cloud import vision
        
        def detect_text(path):
            """Detects text in the file."""
            client = vision.ImageAnnotatorClient()
        
            with open(path, 'rb') as image_file:
                content = image_file.read()
        
            image = vision.Image(content=content)
        
            response = client.text_detection(image=image)
            texts = response.text_annotations
            print('Texts:')
        
            for text in texts:
                print('\n"{}"'.format(text.description))
        
                vertices = (['({},{})'.format(vertex.x, vertex.y)
                             for vertex in text.bounding_poly.vertices])
        
                print('bounds: {}'.format(','.join(vertices)))
        
        if __name__ == '__main__':
            print(os.getenv("GOOGLE_APPLICATION_CREDENTIALS")) # jsonファイルのパス
            detect_text('images.jpeg')
        ```
    - 環境
        ```zsh:Pipfile
        [[source]]
        url = "https://pypi.org/simple"
        verify_ssl = true
        name = "pypi"
        
        [packages]
        google-cloud-vision = "*"
        
        [dev-packages]
        
        [requires]
        python_version = "3.10"
        ```
    - 結果
        ```zsh
        Loading .env environment variables...
        /Users/taketo/Downloads/naturallanguageapipractice-1372273acbf4.json
        Texts:
        
        "歌舞伎町一番街"
        bounds: (105,32),(194,32),(194,45),(105,45)
        
        "歌舞伎町"
        bounds: (105,32),(156,32),(156,45),(105,45)
        
        "一番"
        bounds: (157,32),(182,32),(182,44),(157,44)
        
        "街"
        bounds: (182,32),(194,32),(194,44),(182,44)
        taketo@MacBook-Pro-4 vision-api % 
        ```
        文字が認識できており、バウンディングボックスの座標が表示されています。

## まとめ
Vision AIを利用して、文字検出を行いました。