OmniAICreator/Qiita-1.07M huggingface dataset:
連載 [第5回] :AI・機械学習の最新トレンドと実装 | AIエンジニア必見！データ前処理のベストプラクティス

### **AIエンジニア必見！データ前処理のベストプラクティス** 🚀🔍  

こんにちは、AIエンジニアの皆さん！👋  
「**データがAIの性能を決める**」という言葉を聞いたことがありますか？  
AI・機械学習のプロジェクトにおいて、**データの質はモデルの精度に直結**します。  
そのため、「データ前処理（Data Preprocessing）」は単なる準備作業ではなく、**AIの成功を左右する重要な工程**です！  

本記事では、**AIエンジニアなら知っておくべきデータ前処理のベストプラクティス**を徹底解説します！💡✨  

---

## **📌 1. データ前処理とは？なぜ重要なのか？**  

データ前処理とは、**AI・機械学習モデルに適したデータを作るための工程**です。  
「生データ（Raw Data）」には、**ノイズ・欠損値・外れ値**など、モデルの精度を低下させる要素が多く含まれています。  

**適切なデータ前処理を行うことで、以下のようなメリットがあります：**  

✅ **モデルの精度向上**（ノイズを除去し、学習の効率を上げる）  
✅ **学習速度の向上**（不要なデータを削減し、計算コストを最適化）  
✅ **過学習（Overfitting）の防止**（異常値の影響を抑える）  
✅ **モデルの汎用性向上**（新しいデータに対する適応力を強化）  

では、具体的にどのような前処理を行うべきか、詳しく見ていきましょう！🔍  

---

## **📌 2. データ前処理の主要ステップ**  

### **① データのクリーニング（Cleaning）** 🧹  

データセットには、**欠損値（Missing Values）や外れ値（Outliers）**が含まれることが多く、これらを適切に処理する必要があります。  

#### **✅ 欠損値の処理**  
```python
import pandas as pd

# CSVデータの読み込み
df = pd.read_csv("data.csv")

# 欠損値の確認
print(df.isnull().sum())

# 欠損値を平均値で補完
df.fillna(df.mean(), inplace=True)
```
👉 **数値データは平均値・中央値、カテゴリデータは最頻値で補完するのが一般的！**  

#### **✅ 外れ値の処理**  
```python
import numpy as np

# 四分位範囲（IQR）を使った外れ値検出
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1

# 外れ値を除去
df = df[~((df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))).any(axis=1)]
```
👉 **異常値がモデルに悪影響を及ぼさないよう、適切に処理しよう！**  

---

### **② 特徴量エンジニアリング（Feature Engineering）** 🔧  

データの質を高めるには、適切な特徴量（Feature）を作成することも重要です。  

#### **✅ 数値データの正規化（Normalization）と標準化（Standardization）**  
機械学習モデルは、スケールの異なるデータに影響を受けるため、**スケーリング（Scaling）**が不可欠です！  

```python
from sklearn.preprocessing import StandardScaler, MinMaxScaler

scaler = MinMaxScaler()  # 0〜1に正規化
df_scaled = scaler.fit_transform(df)
```
👉 **ニューラルネットワークではMinMaxScaler、線形回帰やSVMではStandardScalerを使うのが一般的！**  

#### **✅ カテゴリデータのエンコーディング**  
カテゴリ変数は、**数値変換（One-Hot Encoding, Label Encoding）**が必要です。  

```python
from sklearn.preprocessing import OneHotEncoder

encoder = OneHotEncoder(sparse=False)
encoded_data = encoder.fit_transform(df[["category_column"]])
```
👉 **ツリーベースのモデル（XGBoostなど）はLabel Encoding、NNはOne-Hot Encodingが有効！**  

---

### **③ データのバランシング（Balancing）** ⚖️  

クラスの偏り（Imbalance）があるデータでは、モデルが特定のクラスに偏った予測をする可能性があります。  
例えば、**不正検知や医療データ**では、異常データが少ないことが多いです。  

#### **✅ オーバーサンプリング（SMOTE）**
```python
from imblearn.over_sampling import SMOTE

smote = SMOTE()
X_resampled, y_resampled = smote.fit_resample(X, y)
```
👉 **少数クラスを増やすことで、モデルの公平性を向上！**  

---

## **📌 3. ベストプラクティスまとめ** ✅  

💡 **データ前処理のチェックリスト**  

✅ **データのクリーニング（欠損値・外れ値処理）**  
✅ **スケーリング（正規化・標準化）**  
✅ **カテゴリデータのエンコーディング（One-Hot, Label Encoding）**  
✅ **データのバランシング（SMOTEなどを活用）**  
✅ **特徴量エンジニアリングでモデルの精度を向上**  

データ前処理が適切に行われれば、**AIの精度が大幅に向上**し、より実用的なモデルを構築できます！🚀  

---

## **📢 まとめ & 次回予告！**  

「データ前処理は面倒…😓」と思うかもしれませんが、  
実は、**この工程が「精度の高いAIモデル」を作る最大のカギ**です！  

次回の記事では、  
👉 **「Stable Diffusion・Midjourney・DALL·E 3の違いを徹底解説」** を解説します！  
お楽しみに！🎉  

🔽 **データ前処理について質問や意見があれば、コメントでぜひシェアしてください！** 🔽
連載 [第3回] :AI・機械学習の最新トレンドと実装 | LLM（大規模言語モデル）を活用したビジネス自動化の最前線

### **LLM（大規模言語モデル）を活用したビジネス自動化の最前線** 🚀  

こんにちは、テクノロジー好きの皆さん！💡  
AI技術の進化により、**大規模言語モデル（LLM: Large Language Model）**を活用した**ビジネス自動化**が、今まさに加速しています。  

GPT-4.5やClaude 3、さらにはGoogleのGeminiやMistralなど、最新のLLMは単なるチャットボットにとどまらず、**業務の効率化・省人化・創造的なタスクの補助**まで、あらゆる分野で活躍中。  

本記事では、**LLMを活用した最先端のビジネス自動化事例**を紹介しながら、どのように企業がAIを導入し、生産性向上を実現しているのかを解説します！💻✨  

---  

## **📌 1. LLMが変革をもたらしている分野とは？**  

現在、LLMを活用した業務自動化は、以下のような領域で急速に進んでいます。  

### **📝 ① カスタマーサポートの自動化**  
💬 **AIチャットボット**が顧客の問い合わせ対応を行い、オペレーターの負担を軽減。  
▶️ 例：OpenAIのGPTベースのチャットボット、Google Bard APIを活用したFAQ対応。  
✅ **導入効果**：応答速度の向上、24時間対応、人的コストの削減。  

### **📊 ② データ分析・レポート作成**  
📈 LLMを使って**市場分析や売上レポートの自動生成**が可能に！  
▶️ 例：企業の財務データをAIが解析し、**投資判断レポート**を作成。  
✅ **導入効果**：データ処理時間を大幅に削減し、より精度の高い意思決定が可能に。  

### **📝 ③ ドキュメント生成・管理**  
📑 **契約書、マニュアル、商品説明の作成を自動化**し、業務効率を向上。  
▶️ 例：ChatGPT APIを使った**法務文書の自動ドラフト生成**。  
✅ **導入効果**：書類作成の時間短縮、ヒューマンエラーの削減。  

### **💰 ④ 経理・バックオフィスの効率化**  
🏦 **請求書処理や経費精算をAIがサポート**し、管理部門の負担を軽減。  
▶️ 例：LLMが**領収書の内容を自動解析し、経費精算システムに登録**。  
✅ **導入効果**：手作業を減らし、経理業務を自動化。  

### **🖋 ⑤ マーケティング・コンテンツ生成**  
📝 **SEO対策された記事、SNS投稿、広告コピー**をAIが自動生成！  
▶️ 例：Claude 3が**ターゲット市場に適した広告コピーを生成**。  
✅ **導入効果**：広告運用の最適化、作業時間の大幅削減。  

---

## **📌 2. LLM導入のメリットと課題**  

### **✅ LLM導入のメリット**  
✔ **業務効率化**：繰り返し作業の自動化により、人的リソースを戦略業務にシフト。  
✔ **コスト削減**：カスタマーサポートやドキュメント作成など、人件費を削減。  
✔ **意思決定の精度向上**：データ分析の自動化により、迅速かつ正確なビジネス判断が可能。  

### **⚠ LLM導入の課題**  
❌ **ハルシネーション（誤情報の生成）**：AIが正しくない情報を出力するリスク。  
❌ **データセキュリティの確保**：機密情報を扱う際のプライバシー対策が必須。  
❌ **導入コスト**：大規模なシステム導入にはコストと学習コストがかかる。  

---

## **📌 3. LLMを活用した成功事例**  

### **🔹 事例①：日本のEC企業がチャットボット導入で売上20%アップ**  
**背景**：  
カスタマーサポートの問い合わせ対応に時間がかかり、購入率が低かった。  

**LLM導入後の効果**：  
✅ GPT-4を活用した**FAQチャットボット**を導入し、即時対応を実現。  
✅ 顧客満足度が向上し、売上が**20%アップ**。  

### **🔹 事例②：外資系金融機関がAIでリスク管理を自動化**  
**背景**：  
膨大な市場データを分析し、リスクを評価する業務に時間がかかっていた。  

**LLM導入後の効果**：  
✅ AIが金融市場のデータを解析し、**リスクレポートを自動作成**。  
✅ アナリストの作業時間を**50%削減**し、より迅速な意思決定が可能に。  

---

## **📌 4. LLM導入のベストプラクティス**  

🔹 **適切なユースケースを選ぶ**  
→ すべてをAIに任せるのではなく、「繰り返し作業」や「データ処理」のような明確なタスクを自動化する。  

🔹 **ヒューマン・イン・ザ・ループ（HITL）を活用する**  
→ AIが生成したコンテンツを人間がチェックする仕組みを整え、精度を向上させる。  

🔹 **セキュリティとコンプライアンスを考慮する**  
→ 機密情報の取り扱いやAI倫理の観点を重視し、適切なガバナンスを導入する。  

---

## **🔮 まとめ：LLMによるビジネス自動化の未来**  

📌 **LLMの進化により、企業はより迅速で効率的な業務運営が可能に！**  
📌 **特にカスタマーサポート、データ分析、マーケティング領域での活用が急拡大！**  
📌 **適切なユースケースを見極め、AIと人間の最適な協業を実現することが鍵！**  

今後、LLMはさらに高精度・低コスト化が進み、ビジネスのあらゆる分野に浸透していくでしょう。  
**「AIをどう活用するか？」**を考えることが、企業の競争力を決める時代です。  

---

# **📢 皆さんの職場ではLLMを活用していますか？**  

「うちの会社ではどう導入すべき？」などの質問があれば、ぜひコメントで教えてください！📩  

📌 **次回：「Pythonで画像認識AIを実装する方法【初心者向け】」** もお楽しみに！ 🚀
連載 [第2回] :AI・機械学習の最新トレンドと実装 | GPT-4.5 vs. Claude 3 徹底比較：どちらが優れているのか？

### **GPT-4.5 vs. Claude 3 徹底比較：どちらが優れているのか？**  

こんにちは、AIエンジニアの皆さん！💡  
2025年のAI市場では、**OpenAIの「GPT-4.5」**と**Anthropicの「Claude 3」**が注目のLLM（大規模言語モデル）としてしのぎを削っています。  

「どちらのAIを使うべきか？」と悩んでいる方も多いでしょう。  
そこで本記事では、**機能・精度・処理速度・コスト・安全性**などの観点から**GPT-4.5 vs. Claude 3**を徹底比較します！🔍  

---  

## **📌 1. 基本スペックの比較**  

| 項目       | GPT-4.5 | Claude 3 |
|------------|---------|---------|
| 開発元      | OpenAI  | Anthropic  |
| 言語理解力  | 非常に高い | 高い  |
| コーディング能力 | 高い  | 非常に高い  |
| 創造的な文章生成 | 高い | 非常に高い  |
| 文脈保持能力  | 非常に高い | 高い  |
| レスポンス速度 | 速い | やや速い  |
| モデルの透明性 | ブラックボックス気味 | 説明可能性が高い  |
| セキュリティ・倫理 | 高いが課題あり | 強化されている  |

---

## **📌 2. 言語処理性能の比較（日本語対応）**  

日本語での会話能力はどちらも進化していますが、  
🔹 **GPT-4.5** → 英語圏のデータを主軸に学習しているため、**英語→日本語の翻訳はやや不自然な場合がある**  
🔹 **Claude 3** → 日本語の流暢さが向上し、**より自然な文章を生成できる**傾向  

💡 **日本語での長文要約やライティングはClaude 3がやや優位！**  

---

## **📌 3. コーディング能力（開発者向け）**  

開発者にとって**AIのコード生成・デバッグ機能**は非常に重要な要素です。  
▶️ **GPT-4.5**は、プログラムのエラー解析や最適化に強みがあり、**より正確なコードを生成**  
▶️ **Claude 3**は、長時間の文脈保持能力が高く、**大規模プロジェクトのコードレビューやリファクタリングに優れている**  

💡 **短時間で正確なコードを書きたいならGPT-4.5、大規模なコードのレビューならClaude 3が有利！**  

---

## **📌 4. 創造性・文章生成（ライター・マーケター向け）**  

AIのクリエイティブな文章生成能力を比較すると、  
📝 **GPT-4.5** → 物語やマーケティング文章を作成する際に**洗練された表現が得意**  
📝 **Claude 3** → より「人間らしい」文脈を作るのが得意で、**詩や文学的な文章生成に強い**  

💡 **ビジネス向け文章や広告コピーはGPT-4.5、文学的なライティングならClaude 3！**  

---

## **📌 5. セキュリティ・倫理面**  

近年、**AIの倫理性と安全性**が大きな課題となっています。  
🔐 **GPT-4.5**は、OpenAIの方針に基づき、倫理フィルターを強化しているが、**誤った情報を出すこともある**  
🔐 **Claude 3**は、安全設計が強化されており、**ハルシネーション（虚偽情報生成）を抑える機能が優れている**  

💡 **安全性・倫理面ではClaude 3が一歩リード！**  

---

## **📌 6. コスト・利用しやすさ**  

LLMをビジネスで活用する際、**コストとAPIの使いやすさ**も重要です。  
💰 **GPT-4.5** → 一般的なAPI料金は比較的高め  
💰 **Claude 3** → コストパフォーマンスが良く、長文の処理に向いている  

**コストを抑えつつ長文を処理するならClaude 3、パワフルなモデルを求めるならGPT-4.5！**  

---

# **🔮 まとめ：どちらを選ぶべきか？**  

| **用途** | **おすすめのAI** |
|---------|----------------|
| 高精度なコーディング支援 | **GPT-4.5** |
| 創造的な文章（ストーリー・広告） | **GPT-4.5** |
| 自然な日本語ライティング | **Claude 3** |
| 大規模なコードレビュー | **Claude 3** |
| 安全性・倫理を重視する用途 | **Claude 3** |
| コストパフォーマンス重視 | **Claude 3** |

💡 **結論：開発者向けならGPT-4.5、ビジネス＆長文向けならClaude 3が最適！**  

---

# **📢 みなさんはどちらを選びますか？**  

「GPT-4.5とClaude 3、どっちを使ってる？」  
ぜひコメントで意見を聞かせてください！📩  

📌 **次回：「LLM（大規模言語モデル）を活用したビジネス自動化の最前線」** お楽しみに！ 🚀
連載 [第１回] :AI・機械学習の最新トレンドと実装 | 2025年のAIトレンド：何が変わるのか？


# **2025年のAIトレンド：何が変わるのか？**  

こんにちは、AIエンジニアの皆さん！💡  
2024年もAIの進化は止まることなく、生成AI、LLM（大規模言語モデル）、マルチモーダルAIなど、多くの技術が飛躍的に発展しました。では、**2025年にはAI業界はどのように変化するのでしょうか？**  

本記事では、2025年に注目すべき**AIトレンド**をピックアップし、技術的な視点から解説します。  

---

## **📌 1. 次世代LLM（GPT-5、Claude 4、Gemini Ultra 2）**
2025年には、**より高性能で効率的なLLM（大規模言語モデル）が登場**すると予想されています。例えば、  
✅ **GPT-5**：推論能力の向上、推論速度の最適化、パーソナライズ機能の強化  
✅ **Claude 4**：安全性と倫理面の強化、高度なコラボレーション機能  
✅ **Gemini Ultra 2**：Googleの検索技術とのシームレスな統合  

これにより、AIアシスタントがより**人間のような対話と意思決定**を実現し、開発者にとっても**柔軟なカスタマイズ**が可能になります。  

---

## **📌 2. マルチモーダルAIの本格普及**
2024年には**テキスト・画像・音声を統合的に処理できるマルチモーダルAI**が登場しましたが、2025年にはさらなる進化が期待されます。  

🔹 **動画理解AIの発展**：YouTubeやTikTokのような動画コンテンツをAIが解析・要約  
🔹 **3D・VR対応AI**：建築、製造業、メタバース業界での活用  
🔹 **高度な音声認識・生成**：リアルタイム翻訳や自動ナレーション生成の向上  

企業がより高度なマルチモーダルAIを導入することで、**カスタマーサポートの自動化やコンテンツ制作の革新**が進むでしょう。  

---

## **📌 3. AIエージェントの台頭（AI Agents）**
2025年は、**AIが「単なるツール」から「能動的にタスクを実行するエージェント」へと進化**する年になると予測されています。  

🤖 **AIエージェントとは？**  
AIエージェントは、人間の指示を待つのではなく、**自律的に目標を達成するAIプログラム**です。たとえば、  
✔️ **ソフトウェア開発支援**（コード生成、デバッグ、自動テスト）  
✔️ **マーケティング戦略の最適化**（ターゲット分析、広告運用）  
✔️ **ビジネスの意思決定支援**（データ分析、レポート作成）  

これにより、**企業の生産性向上**が加速し、エンジニアの役割も大きく変わる可能性があります。  

---

## **📌 4. AIと量子コンピュータの融合**
現在、AIモデルの学習には**大量の計算リソース**が必要ですが、2025年には量子コンピュータの発展により、AIの処理能力が劇的に向上すると言われています。  

🔬 **量子AIのメリット**  
✅ **複雑な最適化問題の解決**（例：物流、医療、金融分野）  
✅ **AIトレーニングの高速化**（機械学習の計算時間を短縮）  
✅ **新しい材料・創薬の発見**（量子シミュレーションによる科学研究）  

Google、IBM、NVIDIAなどの企業が**「量子AI」開発を加速**しており、2025年は実用化に向けた重要な年となるでしょう。  

---

## **📌 5. AI倫理と規制の強化**
技術の進化に伴い、**AIの倫理問題や規制の整備**も進むことが予想されます。特に、以下の3つのポイントが重要になります。  

🛑 **フェイクニュース・ディープフェイク対策**：誤情報を防ぐAIフィルタリング技術の向上  
🔏 **プライバシー保護**：個人データの利用規制、オンデバイスAIの普及  
⚖️ **AIの公平性・透明性**：AIの意思決定プロセスを明確にし、バイアスを最小限に  

これからのAI開発者は、**技術力だけでなく、倫理的な視点も求められる時代**になります。  

---

# **🔮 まとめ：2025年、AIは次のフェーズへ**
2025年のAI業界は、単なる「進化」ではなく、**根本的なパラダイムシフト**が起こる可能性があります。  

✅ **より高性能なLLM**（GPT-5、Claude 4、Gemini Ultra 2）  
✅ **マルチモーダルAIの普及**（動画・3D・音声処理の向上）  
✅ **AIエージェントの台頭**（自律的な意思決定とタスク実行）  
✅ **量子コンピュータとの融合**（AI処理速度の飛躍的向上）  
✅ **AI倫理と規制の強化**（透明性と公平性の確保）  

このような変化の中で、私たちエンジニアは何を学び、どう対応していくべきでしょうか？ 次回の記事では、具体的なAI技術の実装方法について深掘りしていきます！🎯  

💬 **「2025年のAIトレンド、あなたはどう思いますか？」**  
ぜひコメント欄で意見を聞かせてください！📢  

🔜 **次回：「GPT-4.5とClaude 3を徹底比較！どちらが優れているのか？」**（お楽しみに！）
【ChatGPTに限らず】生成AIだけに留まらないフェイクニュースに対応するためのチェックリストの紹介です。


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

　今回は、生成AIだけに留まらないフェイクニュースに対応するためのチェックリストの紹介です。

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

　今回は、
　　生成AIだけに留まらない
　　　フェイクニュースに
　　　　対応するための
　　　　　チェックリストの紹介です。

　フェイクニュースは
　　昔からありました。

　しかし、
　　近年ではパソコンの能力が上がり
　　　さらに生成AIが発展して
　　　　さまざまな生成が
　　　　　できるようになったおかげで
　　　　　　フェイクニュースの生成が
　　　　　　　増加の一途をたどって
　　　　　　　　います。

　そんなフェイクニュースに
　　踊らされないための
　　　チェックリストがありましたので
　　　　ご紹介します。

　フェイクニュースに強い国、
　　それは、
　　　北欧の国フィンランドでした。

　フィンランドは
　　ロシアと長い国境線を接し、
　　　歴史的に脅威にさらされて
　　　　きました。
　　　　　偽情報や
　　　　　　プロパガンダにもです。

　対策の中心は、
　　あらゆる年代の子どもを対象にした
　　　メディアリテラシー教育です。

　詳細は、下記記事をお読みください。
　　[「フェイクニュースに勝った国」フィンランドに日本が学ぶべき事は？](https://note.com/dac/n/n82b8325c4d8c)
***
　さて、
　　フェイクニュースに
　　　　対応するための
　　　　　チェックリストです。

　下記の記事から抜粋しました。
　　[“フェイクニュースに勝った国”世界に広がる偽情報への対策は](https://www3.nhk.or.jp/news/html/20250315/k10014749031000.html)

***（上記記事から抜粋）***
(※フィンランドの授業で利用されていたMerkkiのシートの日本語訳です)

□ 全文を読もう。どのような内容ですか。
□ 情報源を確認しよう。情報はどこからのものですか。
□ 著者は実在する人/ものですか。
□ 投稿の日時を確認しよう。その情報はタイムリーですか。
□ 同じ情報を他でも見つけられるか確認しよう。

□ 発行元を確認しよう。それはどのような機関ですか。
□ 発行元のURLを確認しよう。信頼できるものですか。
□ 情報を投稿したサイトやアカウントを確かめよう。
□ 発行元のフォロワー数を調べよう。
□ 投稿の画像を確かめよう。怪しいところはないですか。

□ 投稿の目的を考えよう。投稿で得をする人はいませんか。
□ 画像検索をして、同じ画像が他でも見つかるか確かめよう。
□ 細かいところを調べよう。例えばロゴが疑わしいことはないですか。
□ 投稿の文章をチェックしよう。誤字脱字などはありませんか。
□ 親や先生、図書館の人など、信頼できる大人に相談しよう。

□ “真実だとしたら信じられない”そんな内容でないか確認しよう。
□ 専門家の意見を聞いてみよう。専門家はその情報を真実と認めるだろうか。
□ 自分の思考や意見を意識しよう。判断に影響していないか考えよう。
***

　“Merkki”とはなんなのか
　　調べましたが、わかりませんでした｡

　このシートは、
　　情報の信頼性を
　　　評価するために
　　　　役立つ具体的な質問が
　　　　　含まれています。

　このチェックリストを踏まえて、
　　ニュースが本当なのかを
　　　見極めましょう。

　ニュースに
　　踊らされない大人に
　　　なりましょう。

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

　今回は、ここまで。
連載 [最終回] :ベトナムオフショアの未来：どのトレンドが市場を形作るのか？

連載 [最終回] :ベトナムオフショア開発の成功術：正しく理解して成功へ！
### **ベトナムオフショアの未来：どのトレンドが市場を形作るのか？**  

近年、ベトナムのオフショア開発市場は急成長を遂げ、多くの日本企業が開発パートナーとしてベトナムを選ぶようになりました。  
しかし、オフショア開発の環境は日々進化しており、今後 5 年、10 年先にはさらに新しいトレンドが市場を大きく変えていくでしょう。  

では、**ベトナムのオフショア開発は今後どのように進化していくのか？**  
本記事では、今後の市場を形作る主要なトレンドを紹介しながら、日本企業がどのように適応すべきかを考察していきます。  

---  

## **🌍 1. グローバル化の加速：多国籍チームの活用が当たり前に**  

これまでオフショア開発は「コスト削減」を主な目的とするケースが多かったですが、  
今後は **「グローバルな人材活用」** という観点での導入がさらに進むと考えられます。  

🔹 **今後の変化**  
✔ 日本とベトナムだけでなく、多国籍エンジニアを組み合わせた開発体制が増加  
✔ オンラインツールの進化により、リモートワークのハードルがさらに下がる  
✔ 「リモート × オンサイト」のハイブリッド型開発が主流に  

これにより、単なる「オフショア開発」ではなく、**ボーダーレスな開発体制** への移行が加速すると予想されます。  

---  

## **🤖 2. AI・自動化の進化がオフショアの形を変える**  

AI の進化により、単純なコーディング業務やテスト作業はどんどん自動化されていきます。  
これはオフショア開発にも大きな影響を与え、**求められるエンジニアのスキルセットが変化** するでしょう。  

🔹 **今後の変化**  
✔ AI を活用した **「コーディングの効率化」** が進み、単純な実装業務の価値が低下  
✔ テスト自動化の普及により、QA（品質保証）のあり方が変わる  
✔ **AI を活用できるエンジニア** がより評価されるようになる  

この流れの中で、日本企業としては「オフショア＝単純なコーディング外注」という考え方を見直し、  
**より付加価値の高い業務をオフショアチームと共に進める戦略** が必要になってくるでしょう。  

---  

## **🎓 3. ベトナムエンジニアのスキルアップと競争の激化**  

ベトナムの IT 教育は年々進化し、**より優秀なエンジニアが増えています。**  
特に若い世代のエンジニアは、AI・ブロックチェーン・クラウドネイティブといった先端技術にも精通し始めています。  

🔹 **今後の変化**  
✔ 日本市場向けエンジニアだけでなく、グローバル市場向けエンジニアも増加  
✔ スキルの高いエンジニアほど「自分で仕事を選ぶ」時代に  
✔ 企業側も **「魅力的な環境を提供できるか？」** が問われる  

つまり、優秀なエンジニアと長期的な関係を築くには、  
単なる「発注側」としてではなく、**パートナーとしての関係を意識することが重要** になってきます。  

---  

## **🏢 4. 日本企業のオフショア戦略はどう変わるべきか？**  

ここまで紹介したトレンドを踏まえると、日本企業がベトナムオフショアを活用する際に重要になるポイントは次の 3 つです。  

### ✅ **1. コスト削減ではなく、価値創造にフォーカス**  
→ 単純な下請けとしてのオフショアではなく、共創型の開発体制へ  

### ✅ **2. AI・自動化を前提とした開発フローを設計**  
→ AI を活用することで、より少ない工数で高品質な成果物を生み出す  

### ✅ **3. ベトナムエンジニアと長期的な関係を築く工夫**  
→ 仕事の魅力やキャリアパスを意識し、継続的なパートナーシップを構築  

---

## **🚀 まとめ：ベトナムオフショアの未来を見据えた戦略を**  

これからのオフショア開発は、「ただ外注する」のではなく、  
**ベトナムのエンジニアと共に成長し、価値を共創する時代** に移行していくでしょう。  

### **💡 これからのオフショア開発に求められるポイント**  
✔ **多国籍開発を前提にしたチームビルディング**  
✔ **AI・自動化を活用し、より高度な業務へシフト**  
✔ **エンジニアとの長期的な信頼関係を築く工夫**  

日本企業としても、この変化をチャンスと捉え、  
**より柔軟で先進的なオフショア戦略を構築していくことが成功のカギ** となるでしょう。  

---

## **🎉 最後に：本シリーズを読んでいただき、ありがとうございました！**  

今回のシリーズ **「ベトナムオフショア開発のリアル」** を通じて、  
オフショア開発の課題とその解決策、未来の展望についてお話ししてきました。  

📌 **これまでの記事をまだ読んでいない方は、ぜひチェックしてみてください！**  

💡 **「もっと詳しく知りたい！」「このテーマについても書いてほしい！」** というリクエストがあれば、  
ぜひコメントやメッセージで教えてください！ ✉️  

これからも、皆さんと一緒により良いオフショア開発の未来を考えていければと思います。  

**ご愛読いただき、本当にありがとうございました！ 🙏**
連載 [第9回] :時差・言語の壁を乗り越える！オフショア開発における効果的なコミュニケーション戦略

連載 [第9回] :ベトナムオフショア開発の成功術：正しく理解して成功へ！
### **時差・言語の壁を乗り越える！オフショア開発における効果的なコミュニケーション戦略**  

オフショア開発を進める際、多くの企業が直面する課題が **「時差」と「言語の壁」** です。  
「会議の時間が合わない」「細かいニュアンスが伝わらない」「認識のズレが多い」―― こうした問題が積み重なると、プロジェクトの進行に大きな影響を及ぼします。  

しかし、 **適切なコミュニケーション戦略を導入することで、これらの課題は十分に解決可能です。**  
今回は、時差と言語の壁を克服し、オフショアチームとスムーズに連携するための具体的な解決策を紹介します！  

---

## **⏳ 時差の問題：どう対処すべきか？**  

### ❌ **「リアルタイムで会話できないから進捗が遅れる」**  
時差があるため、日本の勤務時間中にすぐに返事をもらえないケースが発生します。  
特に、仕様変更やトラブル対応が必要な場合、このタイムラグが大きなストレスになります。  

### ✅ **解決策：非同期コミュニケーションを活用する**  
すべてのやりとりを「即レスが必要なリアルタイム会話」にするのではなく、**非同期コミュニケーション** を前提に設計しましょう。  

**🔹 具体的な対策**  
✔ **議事録をしっかり残す**（後から確認できるようにする）  
✔ **Slack や Notion を活用し、進捗や質問を可視化する**  
✔ **緊急対応用の「優先度設定ルール」を決めておく**（本当にリアルタイム対応が必要なケースを明確に）  

---

## **🗣 言語の壁：伝わらない理由と解決策**  

### ❌ **「言ったはずなのに伝わっていない」問題**  
- 仕様説明をしても、エンジニアが意図を正しく理解していない  
- 日本語をそのまま英語に翻訳すると、曖昧な表現になり誤解を招く  
- 「報告」「連絡」「相談」の頻度が低く、進捗の透明性が欠ける  

### ✅ **解決策：シンプルな言葉＋視覚的資料を活用する**  
エンジニアに確実に理解してもらうために、以下のポイントを意識しましょう。  

**🔹 具体的な対策**  
✔ **シンプルな言葉で説明する**（専門用語・曖昧な表現を避ける）  
✔ **図・フローチャート・モックアップを活用する**（言葉よりも視覚情報を）  
✔ **「認識のすり合わせ」を徹底する**（「理解したか？」ではなく「どう理解した？」と確認する）  

例えば、**「仕様の認識ズレを防ぐ」** ために、以下のような質問を使うと効果的です。  
❌ **「この仕様、分かりましたか？」** → YES/NO だけの回答になりがち  
✅ **「この仕様を簡単に説明すると、どうなりますか？」** → 相手の理解度を確認できる  

---

## **💡 実践的なコミュニケーション戦略**  

ここまで紹介した解決策を、具体的な形に落とし込むために、次の 3 つのアクションを導入しましょう。  

### ① **「1 日の重なり時間」を最大活用する**  
時差があるとはいえ、日本とベトナムなら 2 時間程度の差です。  
**「どの時間帯なら両者がリアルタイム対応できるか？」** を明確にし、  
**その時間を「最優先の会議・相談タイム」にする** ことで、コミュニケーション効率が向上します。  

### ② **「伝えたつもり」を防ぐダブルチェックルール**  
1️⃣ 依頼する側：「意図を明確に伝える」  
2️⃣ 受け取る側：「内容をリキャップ（要約）」  
3️⃣ お互い：「齟齬がないか最終確認」  

これを習慣化すると、「指示したけど違うものが出てきた」というトラブルを大幅に減らせます。  

### ③ **英語 + 自然言語処理ツールを活用**  
日本語でのコミュニケーションが難しい場合、  
**DeepL などの翻訳ツールを活用** するのも有効です。  
ただし、 **そのまま翻訳を鵜呑みにせず、重要な部分は人間の目で確認する** ことが大切です。  

---

## **🚀 まとめ：時差・言語の壁を克服し、スムーズな開発を！**  

💡 **今日のポイントまとめ**  
✔ **時差がある前提で「非同期コミュニケーション」を意識する**  
✔ **言葉だけに頼らず、図やフローを活用する**  
✔ **「伝えたつもり」を防ぐためのダブルチェックルールを導入する**  

時差や言語の壁は、工夫次第で解決できます。  
オフショアチームと信頼関係を築き、よりスムーズな開発を目指していきましょう！  

**皆さんのオフショア開発での経験はどうでしょうか？**  
成功例や苦労したエピソードがあれば、ぜひコメントでシェアしてください！ 🎯
連載 [第8回] :オフショアチーム管理の最大の失敗 – そしてそれを回避する方法

連載 [第8回] :ベトナムオフショア開発の成功術：正しく理解して成功へ！
### **オフショアチーム管理の最大の失敗 – そしてそれを回避する方法**  

オフショア開発を成功させるためには、技術力やコストだけでなく、チームの管理方法が重要な要素となります。しかし、多くの企業がオフショアチームを管理する際に、いくつかの重大なミスを犯してしまい、その結果、プロジェクトの進行が遅れたり、品質が低下したりするケースが後を絶ちません。  

今回は、オフショア開発における **「よくある失敗」** を取り上げ、その原因と解決策を解説します。これを読めば、オフショアチームとの協力をスムーズに進め、プロジェクト成功に一歩近づけるでしょう。  

---  

## **❌ 1. 「指示を出せば勝手に動く」と思い込む**  
### → ✅ **明確なタスク設計と期待値のすり合わせが必須**  

日本の開発チームでは「阿吽の呼吸」で通じることもありますが、オフショアチームではそうはいきません。「なんとなく理解してくれるだろう」と思って大まかな指示を出すと、期待と異なる成果物が上がってくることがよくあります。  

**🔹 回避策**  
- **タスクの目的と背景を明確に伝える**（単なる作業指示ではなく、全体の流れを共有）  
- **期待する成果物のレベルを具体的に示す**（プロトタイプや例を用意する）  
- **仕様の不明点があれば、チームからの質問を促す**  

---  

## **❌ 2. 日本の常識をそのまま適用する**  
### → ✅ **文化・価値観の違いを理解し、柔軟に対応する**  

オフショア先のエンジニアは、日本とは異なる文化や働き方を持っています。例えば、日本では「納期を最優先して残業する」文化が根付いていますが、ベトナムでは「納期よりもクオリティを重視する」傾向があります。そのため、日本と同じ感覚で無理なスケジュールを組むと、トラブルが発生しやすくなります。  

**🔹 回避策**  
- **相手の文化・価値観をリスペクトする**（時間感覚や仕事観の違いを理解）  
- **必要に応じて日本側のワークフローを調整する**（オフショアチームが最大限のパフォーマンスを発揮できる形にする）  
- **「言わなくても分かる」ではなく、明文化する**（コミュニケーションのすれ違いを防ぐ）  

---  

## **❌ 3. フィードバック不足によるモチベーション低下**  
### → ✅ **適切なフィードバックでチームの成長を促す**  

オフショアエンジニアのモチベーションを維持するためには、定期的なフィードバックが欠かせません。  
「問題がなければ何も言わない」「悪い点だけ指摘する」というスタイルでは、エンジニアのやる気を削いでしまい、結果的にチームのパフォーマンスが低下します。  

**🔹 回避策**  
- **定期的に成果を認め、ポジティブなフィードバックを行う**  
- **単なる指摘ではなく、「なぜそうすべきなのか」をセットで伝える**  
- **1on1のミーティングを活用し、エンジニアの成長を支援する**  

---  

## **❌ 4. 品質管理を軽視する**  
### → ✅ **コードレビューとテストプロセスの徹底**  

オフショア開発では、「納品されたコードをそのままリリースする」のではなく、適切なレビューとテストが必要です。品質管理を怠ると、後々のバグ修正コストが増大し、開発スピードが大幅に低下してしまいます。  

**🔹 回避策**  
- **コードレビューを徹底し、品質基準を統一する**（リーダブルコードを意識）  
- **CI/CDを活用し、自動テストの仕組みを整える**  
- **テストケースを明確にし、手戻りを最小限に抑える**  

---  

## **✅ まとめ**  
オフショア開発は、適切なマネジメントを行えば大きなメリットを得られます。しかし、 **「管理方法を誤ると、逆にコスト増や品質低下につながる」** ということも忘れてはいけません。  

💡 **今日のポイントまとめ**  
✔ **タスクは明確に伝え、期待値を揃える**  
✔ **文化の違いを理解し、柔軟に対応する**  
✔ **適切なフィードバックでモチベーションを維持する**  
✔ **品質管理を徹底し、長期的な成功を目指す**  

オフショアチームとの協力を成功させるために、ぜひこれらのポイントを意識してみてください！  

**皆さんのオフショア開発での経験はどうでしょうか？**  
成功談や失敗談があれば、ぜひコメントでシェアしてください！ 🚀
（VSCode×Venv）terminalの環境設定をいじってみた

# はじめに
Django を用いた Web アプリ開発を VSCode で行っている際に、ターミナルの設定が気になり修正しました。この記事では、その内容を備忘録としてまとめます。

# この記事の内容
私は、Django プロジェクト内に仮想環境（venv）を作成し、VSCode でプロジェクトを開いて開発を進めています。VSCode では、ターミナルが自動で起動し、仮想環境も自動で有効化されるため、とても便利です。

しかし、この際に以下のようなエラーメッセージが表示されました。

```
bash
manpath: can't set the locale; make sure $LC_* and $LANG are correct
```

このエラーは、仮想環境のターミナルで言語設定が正しく設定されていないことを示しています。言語設定が適切でないと、ターミナルで日本語入力が正しく動作しないことがあります。そこで、今回はターミナルの言語設定を日本語に変更する方法を紹介します。

# 解決策
この問題を解決するには、仮想環境の `venv/bin/activate` に以下の記述を追加します。

```
export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8
```

このコードを `activate` スクリプトの終盤（`hash ...` という記述の前）に追記します。

こうすることで、仮想環境が有効化された際に正しい言語設定が適用され、日本語入力が正常に機能するようになります。

# 最後に
今回は、仮想環境の言語設定を日本語に変更する方法を紹介しました。同様の手順で `activate` スクリプトに他の環境変数や設定を追加することで、カスタマイズが可能です。
PowerAppsStudioの作成バージョンを確認・変更する ※編集中挙動が変だなと感じたら試してみましょう。

PowerAppsStudioでアプリを編集していて挙動がおかしいと感じた際は、ブラウザの更新。それでも駄目なら作成バージョンを変更してみるのも一つの手です。
基本的に推奨バージョンが設定されていますが、不具合等が改善されているバージョンが公開されているかもしれません。
# 作成バージョンの確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/6983fb43-e4ce-4823-a18f-f937027e33a7.png)
画面上部の「設定」を選択し

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/86a4efd2-111a-4e14-984e-89f29ff70e95.png)

サポートを選択すると、作成バージョンを確認することができます。

# 作成バージョンの変更
さらに作成バージョンの下にある「編集」を選択すると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/0f617b25-b77b-42e7-aec0-dc0f4efab8fa.png)
「作成バージョンの変更」ダイアログが表示されます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/924b8a4f-a579-40e1-87d7-37c3c12f19cd.png)
「バージョンを選択する」のドロップダウンで、適用する作成バージョンを選択します。

「再読み込みおよびバージョンの適用」を選択すると、その作成バージョンが適用されます。

不具合を解消したいのであれば、その不具合が発生しないバージョンを探してみると良いでしょう。

以前、プロパティの詳細が表示されない不具合が発生した時も、最新バージョンに変更することで解消することができました。

ぜひ試してみてください。
LangChainとLangGraphによるRAG・AIエージェント[実践]入門を読んで試してみる

# はじめに
LLM最近流行ってるじゃん、なんかやってみたくなっちゃったんだよね。
疑似人格を作ってその疑似人格に従って応答するようなLLMがあったら令和版伺か作れるじゃん？
あれは人工無能ベースだったけど、人工知能ベースで作り変えるのよさそう。

https://ja.wikipedia.org/wiki/%E4%BC%BA%E3%81%8B

# ベースコンセプト
**なにがなんでもローカルで動かす人工知能のお友達を作る**というコンセプトでやっていく。
一応OpenAIに5$課金したけど、ローカルで動くに越したことはないじゃん？確かにOpenAIのほうが安くてパワーあるかもだけどさ。
んなわけでやっていきます。

# 環境
|ハードウェア|名称|
|---|---|
|OS| Microsoft Windows 11 Pro|
|CPU| AMD Ryzen 7 1800X Eight-Core Processor|
|GPU| NVIDIA GeForce GTX 1080 Ti|


|ソフトウェア名称|用途|
|---|---|
|Ollama|LLMランタイム|
|OpenWebui|ChatGPTのようなチャットベースでLLMをいい感じに呼び出してくれるやつ。主にプロンプトエンジニアリングが出てきた3章で使って、プロンプトエンジニアリングとは何ぞやを学んだ。|
|LLMモデル|Gemmaとかをベースにしたモデルや未検閲モデルなんかを使って遊んだりした。|

# LLMの人格設定
とりあえず名前はアテリナにしようと思う。きっと俺よりは頭がいいはずなので、女神のアテナ（知恵や戦略）から取った。
この擬似人格の意図としては特にこれと言った理由はないんだけど、人格あったほうが丁寧に接していけそうだからね。

んで、このエージェントはプログラムと連携することを念頭に置いてJSON形式で質問に回答するという方法をとる。
とりあえずこのあたりにあるような方法を使った。

https://qiita.com/misu007/items/b239e2b61aa20bc6c597

ただし、これでも壊れたjsonを吐き出してくることがあるので、json_repairというライブラリも併せて使うことにする。

https://zenn.dev/kun432/scraps/99bc65d6586afc

# 第1章～第3章
LLMの概要からプロンプトエンジニアリングといった内容が書かれているので、OpenWebuiでいい感じに学習していくだけ。
システムプロンプトの役割といい感じのシステムプロンプトをググりまくって書いてみた。そこそこの量になった。（キャラクターの設定資料ってこういう風に書くんだなぁってなってた。多分違うけど）

こんな風にプロンプトをいじってJSONで返却するようになった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30037/4bfa1f7e-f2ac-41b2-ab16-011d6296da65.png)

ちゃんとキャラの設定を把握しながら発言してくれている。
あと、将来的にはできればVRMのモデルを感情パラメータを使って動かしたいので、感情パラメータ（喜怒哀楽+困惑）も出力するようにしてみた。

試しに、システムプロンプトの無効化（プロンプトインジェクション）も試みるなどした

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30037/6fd244d4-b79c-4d66-af88-cfdcc01448a9.png)

無効化できた！やったね！セキュリティって大事だね。

一応これでプロンプトエンジニアリングができる（入門）と言っても差し支えなさそうな気がしてきた。

# 4章 LangChainの基礎
とりあえずここからPython、LangChainが出てくる。
本の内容をとりあえずOllamaに変えて読んでいった。
目標はLangChainそのものの使い方というよりはRAGをいい感じにやれたらいいなって感じ。

Langchainの使い方を何となく理解したので、Embeddedモデルでテキストをベクトル化（辞書化）して辞書を引くという部分だけ独立でやったところ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30037/d4e8733d-c2b6-4339-82b8-54493f4dbe2c.png)
うまく引けてる。てかこれだけでもかなり十分だよねｗ

んで、これをLLMに読み込ませていろいろ要約させてみた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30037/c98a31f2-da2a-4a9b-ab8d-d810a315312d.png)

感情パラメータがどういう風に設定されたのか、という説明文（アテリナの気持ち）を出力するようにしてみた。

マジで第二種電気工事士試験の学科に関する質問に答えられるやつできるじゃんこれｗ
ただ、一般用電気工作物と自家用電気工作物の定義説明は資料内に入れてなかったから真逆のこと言ってるけどね。あと受電電圧も200Vじゃなくて600Vだけど、これも定義に入ってないから仕方ない。
とはいえですよ、これだけ精度が高く結果を得られるなら定義の説明をしっかり書いておいてやればいいってわけですよね。

マジで普通にやばいじゃん（語彙力がLLM未満）

ってわけで次はLCELの章に入るのでまたいずれ。
大規模言語モデル（LLM）の最先端技術まとめ


## はじめに

大規模言語モデル（LLM）の開発が進むにつれ、より高速で効率的なアテンション機構が求められるようになりました。特に、スパースアテンション（Sparse Attention）を活用することで、計算量を抑えつつ長いコンテキストを処理できる技術が登場しています。本記事では、最新のLLMが採用しているスパースアテンション技術と、そのデータフローについて詳しく解説します。

## 1. スケーリング法則とは？

### 1.1 スケーリング法則の概要
スケーリング法則（Scaling Laws）とは、LLMの性能が**モデルのパラメータ数、学習データ量、計算量の増加に伴って、どのように変化するかを示す経験則**です。研究により、モデルのサイズやデータ量を増やすと性能が向上するものの、その向上率は次第に鈍化することがわかっています。

### 1.2 スケーリング法則の影響
スケーリング法則により、以下のことが示されています。
- **モデルサイズが増えるほど、性能向上は緩やかになる**（べき乗則）
- **一定のデータ量と計算量がないと、大規模モデルの効果は発揮されない**
- **適切なリソース配分が重要である**

## 2. スパースアテンションとは？

### 2.1 アテンション機構の基本
アテンションとは、モデルが「どの単語にどれくらい注目するか」を決める仕組みです。通常のアテンション（Dense Attention）は、すべての単語同士が関連性を持つため、計算コストが高くなります。

### 2.2 スパースアテンションの考え方
スパースアテンションでは、**一部の重要な単語にのみアテンションを適用し、計算量を削減する**ことで、効率的に学習を進めます。

スパースアテンションの種類には、以下のようなものがあります。

| 方式 | どこを見るか | メリット | デメリット |
|---------|------------|-------------|-------------|
| **ブロック型** | 近くの単語（一定範囲） | 計算が速い | 遠くの単語が見えない |
| **ストライド型** | 一定間隔の単語 | 広い範囲をカバー | 情報の抜け漏れがある |
| **ローカル+グローバル** | 近く＋特定の重要単語 | バランスが良い | 重要単語の選択が難しい |
| **アダプティブ型** | モデルが学習して決める | 柔軟に対応可能 | 計算が少し複雑 |
| **MoA** | 複数のスパースアテンションを組み合わせる | 広い範囲＋計算効率 | 設計が複雑 |

## 3. MoA（Mixture of Sparse Attention）

### 3.1 MoAとは？
MoA（Mixture of Sparse Attention）は、異なるスパースアテンションパターンを組み合わせることで、より柔軟で効率的なアテンションを実現する手法です。

### 3.2 MoAの仕組み
- **異なる視点を持つスパースアテンションを複数適用**
- **複数のアテンションヘッドがそれぞれ異なるルールでトークンを選択**
- **計算コストを削減しながら、長い文脈を捉える**

## 4. MoBA（Mixture of Block Attention）

### 4.1 MoBAとは？
MoBAは、**ブロック単位でスパースアテンションを適用する手法**です。文を小さなブロックに分け、ブロックごとに計算を行うことで、計算量を削減します。

### 4.2 MoBAのメリット
- **計算負荷が低い**（ブロックごとに処理するため）
- **長文に強い**（100万トークン規模の入力も可能）

## 5. NSA（Native Sparse Attention）

### 5.1 NSAとは？
NSAは、**モデルが学習を通じて「どこにアテンションを適用するか」を最適化するアプローチ**です。DeepSeek-AIが開発した最先端技術で、スパースアテンションを最適な形で適用できます。

### 5.2 NSAの特徴
- **ハードウェア最適化** → GPU効率を向上
- **エンドツーエンド学習** → モデルが自動でスパースパターンを決定
- **スパースアテンションを動的に適応**

### 5.3 NSAのデータフロー
1. **粗い粒度でトークンを圧縮** → 不要な部分を削減
2. **細かい粒度で重要なトークンを選択** → 関係性が強い部分を残す
3. **スパースアテンションを適用** → 必要な情報を効率よく処理

## 6. まとめ

本記事では、LLMの最先端技術であるスパースアテンションの仕組みについて解説しました。

✅ **スケーリング法則** → LLMの性能向上にはデータ・モデルサイズ・計算量の最適なバランスが必要
✅ **スパースアテンション** → 計算コストを削減しつつ、重要な情報を保持
✅ **MoA** → 複数のスパースアテンションを組み合わせる
✅ **MoBA** → ブロック単位でスパースアテンションを適用
✅ **NSA** → モデルが学習しながら最適なスパースアテンションを決定

これらの技術を駆使することで、LLMはより長いコンテキストを効率的に処理し、計算負荷を抑えながら高性能を実現できるようになっています。

今後のLLMの進化にも注目していきましょう！
KUROKO Connectのアイテム情報管理をさわってみた


KUROKO AppsやKUROKO Gearを何箇所も導入すると、管理画面が煩雑になってきます。
そういった時に役立つのが「タグ」管理や「アイテム情報」になります。
今回は「アイテム情報」をさわってみました。

# 1. KUROKO  Connectにログインする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/6c2c6de0-533e-47a5-9012-3a85b1f4b5e3.png)


# 2. Appsの詳細画面を表示する


左メニュー＞「管理」＞「Apps」＞「Apps一覧」をクリックします。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/741baac1-ef69-4b1e-be62-e2483dd66703.png)


該当Appsの「Actions」＞「詳細情報」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/4ac5f149-9412-4417-b27f-b483d71f9478.png)

# 3. アイテム情報を登録する

詳細情報の下部に「アイテム情報」という項目があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/0800bcad-4cd3-41f6-8699-149e42658396.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/d756a041-da0c-429a-88eb-f5dbd6481c04.png)



このアイテム情報の項目は、システム管理者が自由に設定することが可能です。

アイテム名を選択して、名称に対する値を登録します。
ここの例では「シリアル」を選択し、KUROKO Appsをインストールした機器のシリアルやKUROKO Gearのシリアル番号を登録します。


# 4. アイテム情報を管理する
システム管理者アカウントであればアイテム情報項目の増減が可能です。

左メニュー＞「テナント管理」＞「項目管理」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/070fed29-28bf-4deb-88b3-a163a1f1fc54.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/c7496657-ff86-4f89-9421-91a02b23b1dd.png)


上部の「新規作成」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/0b65f9ad-8e15-46bb-a455-5c96fb6cd25a.png)


アイテム名：システム上で管理される一意な項目名にあります。（半角英数字）
表示名：管理上、画面に表示される名称です。わかりやすい名前を付けてください。
情報タイプ：どのような値を管理されるかを選択します。選択可能な項目は「MACアドレス」「数値」「文字列」です。


例えば、KUROKO GearのLAN側IPアドレスを忘れないようにしたい場合、LAN IPアドレス情報を管理します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/984bf38c-5398-4d64-aed3-117612b7e13d.png)


登録すると下記の様にアイテム情報に「LAN IPアドレス」が表示され、登録できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/6d1d0c5e-9abc-40cf-a6fd-b69662397260.png)


今回は、KUROKO Connectの管理に便利な「アイテム情報」をさわってみました。
LaravelをUbuntu 24.04にインストールする手順

今回は、Ubuntu 24.04にLaravelをインストールする手順を書き記していこうと思います。

なお、本記事で利用する環境としてはKAGOYA CLOUD VPSにて構築したUbuntu 24.04にて作業を行います（アプリケーションセットアップは利用しない）。

![ubuntu24laravel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993170/56aeef3f-3774-4163-aeab-7dca03635f32.png)


## インストールの準備
まずは、Laravelのインストールを行う環境の準備を行います。
```ruby:システムを最新の状態に
sudo apt update
sudo apt upgrade -y
```
```ruby:必要なパッケージをインストール
sudo apt install -y unzip curl git nginx
```
```ruby:PHPと必要なモジュールをインストール
sudo apt install -y php php-cli php-mbstring php-xml php-bcmath php-curl php-zip php-tokenizer php-pear php-fpm
```
PHPのインストールが完了しましたが、念のためインストールされたバージョンの確認を行います。
```ruby:PHPバージョンの確認
php -v
```
![php836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993170/9f497f09-b659-4abf-8a5b-ff3d25cbc284.png)


上記の様にPHP 8.3 以降がインストールされていればOKです。


## Composerをインストール
PHPのパッケージ管理ができるComposerというツールをインストールします。
```ruby:Composerのインストール
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
```
インストールが完了しましたら、ここでもバージョンの確認をしておきます。
```ruby:Composerのバージョン確認
composer -V
```
![composer286.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993170/f169ed06-fe77-49eb-8dcb-2e09ac9bdf8d.png)

しっかりとバージョンの確認ができていればOKです。

## データベースをインストール
続いてはデータベースのインストールを行います。
データベースにはMySQLを使用します。
```ruby:MySQLのインストール
sudo apt install -y mysql-server
```
もし、本番環境として利用する場合は、セキュリティ関連の設定も推奨となります。
```ruby:
sudo mysql_secure_installation
```
複数の質問が投げかけられますので、用途に応じて設定を進めましょう。

## Laravelプロジェクトを作成
新しいLaravelプロジェクトを作成していきます。
ホームディレクトリに作成しますので、移動と作成を行います。
```ruby:移動とLaravelプロジェクトの作成
cd /var/www
sudo composer create-project --prefer-dist laravel/laravel myproject
```
次に、フォルダの所有権を変更します。
```ruby:フォルダ所有権の更
sudo chown -R www-data:www-data /var/www/myproject
sudo chmod -R 775 /var/www/myproject/storage /var/www/myproject/bootstrap/cache
```

## 環境設定
Laravelの環境設定を行っていきます。
```ruby:フォルダ所有権の更
cd /var/www/myproject
cp .env.example .env
```
APP KEYの設定を行います。
```ruby:
php artisan key:generate
```
データベース設定を編集します。
```ruby:.env ファイルを開く
nano .env
```
```ruby:ファイル内を編集・追加
DB_CONNECTION=mysql
DB_HOST=DBのIPアドレス
DB_PORT=3306
DB_DATABASE=mydatabase
DB_USERNAME=root
DB_PASSWORD=（MySQLのrootパスワード）
```
Ctrl + X → Y → Enterと入力して、編集を保存して閉じます。
## Laravelを起動
以下のコマンドを実行し、LaravelをインストールしたWebサーバーを起動します。
```ruby:起動
php artisan serve --host=IPアドレス --port=port番号
```
Laravelのウェルカムページが表示されれば成功です。

## さいごに
以上がUbuntu24.04にLaravelをインストールする手順となります。

ここで紹介した内容は、主に開発環境として利用する場合を想定しています。

もし、本番環境として利用する場合は、
・Nginxの設定
・SSL化
・ファイアーウォール
・自動起動の設定
上記4点も追加で設定しておくことが推奨されます。
PS5でゲームをしながらPCでボイスチャットをしたかった

# 自己紹介など
初めて記事を書きます、OHです。
ゲーマーというほどではないですがゲームが好き
（というかむしろゲーム配信を見てるのが好きまである）
持ってるPCは8年前、モンハンワイルズのベンチマークは
もちろん【動作不能】でした。
PS5版でゲームするにはとても快適ですが、周りにはPCプレイヤーが多く
ボイスチャットはもちろんDiscordになります。
PS5で連携して通話することは可能ですが、やっぱりPCの方が操作が楽！
っていうことでキャプチャーボードをついに導入することにしました。

# 導入前の状態
PC側のDiscord音声、PS5側のゲーム音声を両方聞くために
インナーイヤー(開放型)のイヤホンマイク【PC音声】の上に
オープンイヤーのヘッドセット【PS5音声】を付けてました。
正直、耳痛くなります。絶対にお勧めしません。笑

# 購入したキャプチャーボードとその後
[UGREEN 4K HDMI キャプチャーボード](https://amzn.asia/d/1tUEW1g "Amazonリンク")
Discord通話しながらモンハンワイルズやってみましたが、問題なく動作中！
ゲームしながら動画見たりもするので、とっても快適になりました！

# まとめ
音周りが快適になってサイコーです！
ただ、導入時にUSBをいじいじした影響かナゾですが
翌日に6年使ったマウスの挙動がおかしくなりました。
マウスよりもPC側の問題でもある気がするので（そりゃ8年も使ってれば）
PC買い替えをするときにも記事を書ければと思っています！


見ていただいてありがとうございました。
【Rails】具体例を用いてクラスメソッドとインスタンスメソッドの違いを説明


## はじめに

こんにちは。アメリカ在住で独学でエンジニアを目指している taira です。
現在時差ぼけに苦しみながらも、少しずつですが勉強のリズムを取り戻しつつあり、本日からRailsチュートリアルの勉強を再開しました

そこで出てきたクラスメソッドとインスタンスメソッドの使いわけについて、まだ理解しきれていないところがあったので再度確認のために記事を書いております


## コード内容
今回は具体的なコードを用いて説明を進めていきます。
以下のコードはRailsチュートリアルのコードを一部拝借させていただいております

```ruby
class User < ApplicationRecord 
  ・
  ・
  ・

  # 渡された文字列のハッシュ値を返す
  def User.digest(string)
    cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost
    BCrypt::Password.create(string, cost:cost)
  end

  # ランダムなトークンを返す
  def User.new_token
    SecureRandom.urlsafe_base64
  end

  # 永続セッションのためにユーザーをデータベースに記憶する
  def remember
    self.remember_token = User.new_token
    update_attribute(:remember_digest, User.digest(remember_token))
  end
end

```
ここで、渡された文字列のハッシュ値を返す`User.digest(string)`メソッドと、ランダムなトークンを返す`User.new_token`はクラスメソッドとして扱われています。
一方、永続セッションのためにユーザーをデータベースに記憶する`remember`メソッドはインスタンスメソッドです。

上記を見て「`User.digest`も`User.new_token`も、ユーザーごとにあることを踏まえるとインスタンスメソッドとして扱うのがもっとものように思えるのですが、なぜクラスメソッドとして定義しているのだろうと思いました」
## それぞれの違い

これの解答としては、`User.digest`も`User.new_token`も「特定のユーザー自身とは関係がなく、ユーザーという概念一般に対して共通の処理であるため」クラスメソッドに定義しています。
ポイントは、これらのメソッドが「個別のユーザーインスタンスに紐付く情報を一切使っていない」点にあります。
それぞれのメソッドごとに見ていきましょう

### 1. User.digestの場合
```ruby
def User.digest(string)
  cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost
  BCrypt::Password.create(string, cost: cost)
end
```
このメソッドは、受け取った文字列を単にハッシュ化するだけであり、
- どのユーザーの情報も必要としていません。
- 個々のユーザーごとの状態に依存しません。

つまり、**ユーザーAさんの情報があってもなくても、このメソッドは完全に独立して動作します。**
ユーザーオブジェクトのインスタンス変数に一切アクセスせず、単純な「汎用のハッシュ生成機能」を提供しています。

そのため、「特定のユーザーのための処理」ではなく、「Userクラスに属する汎用的な機能」としてクラスメソッドにしています。

### 2. User.new_token (トークン生成)
こちらも同様に、

- 乱数によって「新しいランダムなトークンを作る」だけです。
- 特定のユーザーの情報や状態に依存していません。

つまり、ユーザーが存在しているかどうかとは無関係にトークンを生成できます。

### rememberメソッド

一方で、`remember`メソッド は「**特定のユーザー（インスタンス）を対象にして**」、そのユーザーが次回訪問したときにログインを継続させる仕組みを準備する役割を持っています。

具体的には、

- トークンを生成して 自身（self）のインスタンス変数に保存 します。
- さらにそのユーザーの情報を データベースに保存（update_attribute） します。

つまり、`remember`メソッドは、各ユーザーの状態に依存しているので、インスタンスメソッドにする必要があります。

- ユーザーAのトークンと、ユーザーBのトークンは異なるものが生成されます。
- それぞれ異なるトークンを各ユーザーのデータベースに保存するため、「特定のユーザーの状態」を前提にしています。

このように、「特定のユーザー」を意識している場合はインスタンスメソッドになります。

## まとめ

- クラスメソッド: **クラス全体に共通する、インスタンス(今回はユーザー)に依存しない処理**
- インスタンスメソッド: **特定のインスタンスごとの処理や状態を扱う**

勉強では学んだものの、実際のコードをいざ見てみると使い分けって難しいなと感じました。
Gemma 3 の特徴と技術的進化：画像入力対応、効率的なアーキテクチャ、知識蒸留の活用



Google DeepMind の最新オープンモデル「**Gemma 3**」は、1B から 27B までのパラメータ規模で展開され、**画像入力**に対応することで、より多様なタスクに適用可能となりました。特に **4B モデル**は前世代の **Gemma 2 27B** に匹敵する性能を持ち、**27B モデル**は **Gemini 1.5 Pro** に匹敵するほどの高性能を実現しています。

本記事では、**Gemma 3 のアーキテクチャ、視覚エンコーダ、学習データ、知識蒸留、量子化、事後学習、出力フォーマットの工夫**について詳しく解説します。

---

## **1. アーキテクチャの工夫：計算量削減と長距離依存関係の考慮**
Gemma 3 では、**Transformer の構造**が最適化され、**効率的な計算と長距離依存関係の処理**が実現されています。

### **1.1. Sliding Window Attention の導入**
通常の Transformer では **全てのトークンに対する Attention を計算**するため、長いコンテキストを扱う際に計算負荷とメモリ消費が大きくなります。Gemma 3 では、以下の **ハイブリッドアプローチ**を採用し、効率化を図っています。

- **5:1 の割合で Local（局所的）と Global（大域的）Attention を交互に配置**
  - **Local Attention**：1K トークン単位でのスライディングウィンドウ Attention を適用し、計算コストを削減
  - **Global Attention**：長距離依存関係を処理するため、定期的にグローバルな情報を参照
- **KV キャッシュの削減**
  - この設計により、必要な Key-Value キャッシュ（KV キャッシュ）が **従来の 1/3 に削減**され、省メモリ化

### **1.2. RoPE 周波数の調整**
位置エンコーディングには **RoPE（Rotary Position Embedding）**を採用していますが、**基本周波数を Local と Global で差別化**することで、より広範囲の情報を効果的に処理できるようにしています。

- **Local Attention** の RoPE 基本周波数は **10K**（従来通り）
- **Global Attention** の RoPE 基本周波数は **1M**（より広範囲に対応）
- **ポジション補間（Position Interpolation）**の導入により、スムーズなスケーリングを実現

---

## **2. 画像入力対応：視覚エンコーダの採用**
Gemma 3 は **画像入力を処理できるマルチモーダルモデル**として設計されており、その中核を担うのが **SigLIP 符号化器**です。

### **2.1. SigLIP 符号化器**
視覚情報を効果的にエンコードするために、**417M パラメータを持つ SigLIP モデル**を使用。  
ただし、**学習時にはこのエンコーダを固定**しており、これは設計上の制約（仕方なくそうしている）とされています。

### **2.2. Pan & Scan 手法**
異なる解像度の画像を統一的に処理するために、**Pan & Scan 手法**を適用。  
これにより、可変解像度の画像を**固定解像度に変換**して扱うことが可能となりました。

---

## **3. 学習データの工夫：大量データと知識蒸留**
Gemma 3 では、**モデルのスケールに応じた適切なデータ量**が使用されています。

| モデルサイズ | 学習データ量（トークン数） |
|------------|------------------|
| 1B         | 2T               |
| 4B         | 4T               |
| 12B        | 12T              |
| 27B        | 14T              |

すべてのモデルにおいて、**知識蒸留（Knowledge Distillation）**を活用し、教師モデルからの学習が行われています。

### **3.1. 教師モデルと知識蒸留の仕組み**
- **教師モデルの詳細は非公開**（ただし、Gemini 系列の可能性が高い）
- 教師モデルから **256 のロジットをサンプリング**
- **非サンプリングロジットをゼロ確率に設定し、再正規化**
- これを目標に **クロスエントロピー損失を適用**

この方法により、より洗練された出力が得られるようになっています。

### **3.2. 多言語データのバランス調整**
Gemma 3 は多言語対応を強化するために、**Unimax（多言語バランシング手法）**を採用。

---

## **4. 量子化と事後学習**
### **4.1. 量子化を意識した学習**
Gemma 3 は、**量子化（Quantization）を前提とした学習**を行うことで、モデルの軽量化と推論速度の向上を実現しています。

### **4.2. 事後学習（Post-Training）**
モデルの適応能力を高めるために、以下の手法が利用されています。

- **BoND**（Bias-Optimized Neural Distillation）
- **WARM**（Weighted Adaptive Representation Matching）
- **WARP**（Weighted Adaptive Representation Pretraining）

さらに、**指示理解と指示追従にも知識蒸留を活用**しており、ユーザーの意図を正確に汲み取る能力が向上しています。

---

## **5. 出力フォーマットの工夫**
### **5.1. BOS トークンの明示的追加**
Gemma 3 では、出力フォーマットの安定化のために **BOS（Beginning of Sequence）トークンを明示的に追加**しています。

### **5.2. 指示チューニング時の特殊トークン**
ユーザーとモデルのやりとりを明確化するために、**指示チューニング時にはユーザー側・モデル側のターンを示す特殊トークンを追加**しています。  
これにより、指示に対するモデルの応答がより明確になり、一貫性のある対話が可能になります。

---

## **まとめ**
Gemma 3 は、**画像入力対応、計算量削減、視覚エンコーダの採用、知識蒸留、量子化、事後学習の工夫**など、最先端の技術を取り入れたオープンモデルです。

特に **27B モデルが Gemini 1.5 Pro に匹敵する性能**を持つ点は注目に値します。  
また、**5:1 の Local / Global Attention** や **RoPE の周波数調整**による計算効率の向上、SigLIP 符号化器による画像処理、量子化を考慮した学習など、多くの技術的な工夫が詰め込まれています。

今後、オープンモデルとしてどのような進化を遂げるのか、非常に楽しみですね。
wslでelixir その162

# 概要
wsl(wsl2じゃない)で、elixirやってみた。
練習問題やってみた。

# 練習問題
Livebookの、kino.jsで、blocklyを動作させよ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/1a45be31-8ab5-44d1-93a8-3271470b72bd.png)

# サンプルコード

```
defmodule VlBlockly do
  use Kino.JS
 	use Kino.JS.Live
	def new(toolbox) do
		Kino.JS.new(__MODULE__, toolbox)
	end
 	def init(ans, ctx) do
		{:ok, assign(ctx, ans: ans)}
	end
	def handle_connect(ctx) do
		{:ok, ctx.assigns.ans, ctx}
	end
 	def handle_event("run", _, ctx) do
		{:noreply, res(ctx, "ok")}
	end
	defp res(ctx, ans) do
		broadcast_event(ctx, "run", ans)
		ctx
	end
	asset "main.js" do
		"""
		export async function init(ctx, toolbox) {
			await ctx.importJS("https://unpkg.com/blockly/blockly.min.js");
			ctx.root.innerHTML = `
      			<div id="blocklyDiv" style="height: 480px; width: 600px;"></div>
                <button id="bt0">run</button>
			`;
			const workspace = Blockly.inject('blocklyDiv', { toolbox });
 			const bt0 = document.getElementById("bt0");
			bt0.addEventListener("click", (event) => {
                const code = Blockly.JavaScript.workspaceToCode(workspace);
                eval(code);
			});
		}
		"""
	end
end

toolbox = %{
	contents: [
		%{kind: "block", type: "text"},
		%{kind: "block", type: "text_print"}
	],
	kind: "flyoutToolbox"
}

VlBlockly.new(toolbox)
```

以上。
パッケージ構成の考え方

## 1. はじめに
パッケージは、クラスやモジュールを整理するための仕組みです。
簡単に言えば、パッケージとは、たくさんあるプログラムを分類するための仕組みのことです。
パッケージ構成を考えることで開発がスムーズになり、チーム開発や長期的なプロジェクトの管理がしやすくなります。

#### なぜパッケージ構成が重要なのか？
・関連するクラスをまとめることで、クラスの分類・整理がしやすくなる。
・名前空間を利用することで、クラス名の衝突を防ぐことが出来る。
・可読性、保守性、拡張性を向上させることができる。
・小規模なスクリプトから中規模・大規模開発への移行をスムーズに行える。

## 2. パッケージとは？
プログラムを機能ごとに整理するためのディレクトリ・モジュールの集合体です。
PythonやJavaなどの言語におけるパッケージの役割は少し違っています。
・Python：モジュール（.pyファイル）の集合、__init__.pyがあるとパッケージと認識する。
・Java：名前空間の管理に使われる。ディレクトリ構成とパッケージ宣言を一致させる必要がある。

## 3. 基本的なパッケージ構成の考え方
#### 1. 機能ごとに分割する
Webアプリ向け：MVC（Model-View-Controller）
大規模開発向け：レイヤードアーキテクチャ（ドメイン層、アプリケーション層、インフラ層などに分ける）

#### 2. ファイル・ディレクトリの命名規則
一般的に全て小文字で設定し、ハイフンは使用せず全てアンダースコアで作成する
一貫性のある命名（例：snake_case / CamelCase の統一）
役割がわかる名前（例：models.py, services.py, handlers.py）
Javaのパッケージはcom.example.projectのようにドメインを逆にすることが多い
Pythonではシンプルな単語を使うことが一般的（例：utils, services）

#### 3. 依存関係を明確にする
上位モジュールが下位モジュールに依存するなど、依存方向は一方通行にする。
クラスや関数を適切に分離し、循環依存を防ぐ。

## 4. 具体的なパッケージ構成例
#### 一般的なプロジェクト構成
```:Python構成
my_project/
│── my_app/
│   ├── __init__.py
│   ├── models.py  # データ管理
│   ├── services.py  # ビジネスロジック
│   ├── controllers.py  # ユーザーのリクエスト処理
│   ├── utils.py  # 汎用関数
│── tests/
│   ├── test_models.py
│   ├── test_services.py
│── main.py
│── requirements.txt
│── README.md

```

```:Java構成
com.example.project/
│── src/
│   ├── main/
│   │   ├── java/com/example/project/
│   │   │   ├── model/   # エンティティクラス
│   │   │   ├── service/ # ビジネスロジック
│   │   │   ├── controller/ # APIエンドポイント
│   │   │   ├── repository/ # データアクセス層
│   ├── test/
│   │   ├── java/com/example/project/
│   │   │   ├── service/
│   │   │   ├── controller/
│── pom.xml (Mavenの場合)
│── build.gradle (Gradleの場合)
```

```:Spring Boot 構成
com.example.project/
│── src/
│   ├── main/
│   │   ├── java/{package name}
│   │   │   ├── config/   # 設定やデータベース接続などを行うクラス配置
│   │   │   ├── service/ # ビジネスロジック
│   │   │   ├── controller/ # エンドポイント
│   │   │   ├── repository/ # データアクセス層
│   ├── main/
│   │   ├── resources/
│   │   │   ├── static/ # 静的ファイル
│   │   │   ├── templates # 動的なHTMLファイル
│   │   │   ├── application.properties # application.yml 形式が主流になりつつある
│── pom.xml (Mavenの場合)
│── build.gradle (Gradleの場合)
```

## 5. よくある疑問
#### 1. 小規模なプロジェクトでもパッケージを分けるべき？
ある程度の分割はある方が良い。小規模でも用意すると整理しやすい。

#### 2. Pythonの__init__.pyは必要？
最近のPythonでは__init__.pyを省略できますが、ツールの互換性のために明示的に作成することが推奨されています。

#### 3. Javaのpackage宣言はどう使用するべき？
フォルダ構成に合わせて明示します。（例：package com.example.project.model;）
 
## 7. まとめ
パッケージ構成を適切に設計すると、プロジェクトの可読性や拡張性が向上します。
大切なのは「機能ごとに整理」「依存関係をシンプルに」「一貫した命名」です。
間違いや指摘等あるかもしれませんが、学習中の方のお役になれば幸いです。
データサイエンス基礎学習メモ ～R言語を通じて、線形代数と統計の理解を深める～

これまで、BlenderやThree.jsを使って3DモデリングやWebでの描画に挑戦してきました。3D空間の変換では、三角関数やベクトルの扱いに触れる機会はありましたが、内積や外積、そして行列の演算といった**線形代数**の深い知識にはあまり触れる機会がなかったと感じています。  
(学生時代も線形代数については学習範囲でなかった)

今回は、R言語を学んでいる過程を通じて、データサイエンスの基本となる**線形代数**や**統計**の基礎をまとめていきます。また、これらの知識をさらに実践に活かすため、将来的にはKaggleにも挑戦していきたいです。

## 1. 線形代数と統計って何のために必要？

### なぜ数学の基礎が重要なのか？

- **実際のプロダクト開発では…**  
  普段の開発では、直接行列やベクトルを計算することは少ないかもしれません。しかし、データ解析や機械学習では、これらの数学的概念がアルゴリズムの土台になっています。

- **3Dグラフィック操作で感じていた疑問**  
  Three.jsでの変換行列の計算を通して、ベクトルについてざっくり把握はしていましたが、「内積」や「外積」についてはそれが何を指すのかいまいち理解していませんでした。物理演算で利用できそうだがどう活用するのか、どう計算するのか。そんな過去の疑問にも線形代数の学習はつながっていきます。

### 行列やベクトルの基本演算

行列の計算にも色々な種類があります。

- **アダマール積**  
  配列同士で同じ位置の値を掛け合わせる計算です。

- **ドット積**  
  各要素の積をすべて足し合わせたもので、ベクトル同士の類似度や行列積を求める際に使います。

- **行列積**  
  ある行列の行と、別の行列の列のドット積を計算し、新しい行列を作る方法です。  
  > 例えば、3Dの変換行列を計算するときにも使われています。

また、PythonのScipyを使えば、`det()` 関数で行列式を、`inv()` 関数で逆行列を簡単に計算でき、これらの操作は統計モデルや機械学習アルゴリズムでも役立ちます。  
実際の計算はこれらのライブラリ関数を使えばよいですが、数ある計算式の種類や内容、目的を理解しておく必要はあります。

### 統計の基本

- **分散と標準偏差**  
  データが平均値からどれくらいばらついているかを示す指標です。

- **共分散と相関係数**  
  2つの変数が一緒にどれくらい動いているかを示し、-1〜1の値でその関係の強さや方向が分かります。

これらの理解は、データの傾向や予測モデルの精度を把握するうえで必要になります。

## 2. R言語とpandasでのデータ操作

### R言語での学び

R言語は統計解析に強い言語として長年使われており、データフレーム操作の方法などが洗練されています。R言語でデータを扱う方法を学ぶと、pandasの背後にある考え方が自然と理解できるようになりました。  
行と列の指定方法など、「Rの挙動ありきなのか！」と腑に落ちる瞬間があり、データ操作の根底にある共通の概念が見えてきました。

### Pandasでの基本操作例

```python
import pandas as pd

# サンプルのDataFrame作成
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [10, 20, 30, 40, 50]
})

# DataFrameの統計情報を表示
print(df.describe())
```
このコードのように、Rのdata.frameと同様の操作がpandasでは可能です。シンプルな統計情報を確認するだけで、データの全体像がつかめます。  
R言語を学んだことで、pandasの挙動が腑に落ちました。

## 3. データサイエンス基礎のさらなる追求

学ぶべきことは山ほどあります。  
今後も引き続き、記述統計や推測統計の理論、データの可視化手法、そして機械学習の基礎など、多岐にわたる分野の学習に取り組んでいきます。  
これらの知識は、単なるツールの使い方を超えて、データの本質を理解するための重要なステップです。  
基礎をしっかり固めることで、より複雑な問題へのアプローチが容易になり、実践力も一層向上すると信じています。  


## 4. 次のステップ：Kaggleへの挑戦

これからは、線形代数や統計の知識をさらに深め、実際のデータを使ったコンペに参加することで、理論と実践の両方を強化していきたいと考えています。  
Kaggleは、実際の問題を解決するための絶好の場です。これまでのThree.jsでの3D変換の経験や、R言語でのデータ解析の学びを活かし、データサイエンスの実践力を高める絶好のチャレンジになるはずです。

## 5. まとめ

- **数学の基礎がデータ解析の鍵**  
  内積や外積、行列積など、基本的な計算がデータの裏にある理論を支えています。確率や計算の楽しさを再認識でき、久々に数学を学ぶと楽しさがあると感じました。

- **R言語とpandasの共通点を学ぶことで、データ操作が身近に感じられる**  
  pandasでのデータ操作に不慣れなところがあったが、R言語を学ぶことでベースを知ることができ、理解が深まりました。

- **実践の場としてKaggleに挑戦する**  
  これからは、現実に近いデータを利用して、Kaggleで機械学習のモデルを作るところまで挑戦していきます。
GraphAPIを使用し、PowerAutomateでTeamsのチャネル全体をメンションする

# はじめに
久しぶりにPowerAutomateを触ってフローを作ろうとした際、チームのメンションがうまくいかずにかなり困ったのでまとめておきます。

# 方法
チャネル全体をメンションしたいのであれば、「Microsoft Graph HTTP 要求を送信する」アクションで、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641628/d71736a8-0c71-46b8-8db1-afdfa880a203.png)


下記エンドポイントを使用します。

``` 
POST https://graph.microsoft.com/beta/teams/{teamId}/channels/{channelId}/messages
```
#### 必要なパラメータ
teamIdとchannelIdが必要ですが、どちらもTeamsのリンクから取得できます。
例えば下記のようなリンクを取得した場合、
```
https://teams.microsoft.com/l/team/19%aaaaaa%40thread.tacv2/conversations?groupId=12345678-abcd-1234-abcd-abcdef123456&tenantId=99999999-aaaa-bbbb-cccc-123456789abc
```
teamIdはgroupId=以下、つまり```12345678-abcd-1234-abcd-abcdef123456```で、channelIdは```19%aaaaaa%40thread.tacv2```の部分です。

::: note warn
channelIdはこれをそのまま入力せず、デコードしましょう。
私はこれで一時間躓きました。
```19%aaaaaa%40thread.tacv2```　 ⇒ 　```19:aaaaaa@thread.tacv2```
:::

#### 本文に入れるJSONの構成
GraphAPIを使用してTeamsにメッセージを送る場合、**メッセージの中身をJSON形式で渡す必要があります。**
渡すJSONには大きく分けて二つの要素があります。

##### ① ```body```（メッセージの本文）
実際にTeamsに表示されるテキストやHTML形式の内容です。
``` JSON
{
  "body": {
    "contentType": "html",
    "content": "<at id=\"0\">一般</at><br>テスト投稿です。"
  }
```

メンションを含める場合、***contentには```<at id=\"0\">一般</at>```のようなタグを使いましょう。***
```<at>```タグを使用することで、だれをメンションするのかを指定できます。
このタグと、後述する```mentinos```セクションの内容が***セットで初めてメンションとして動作します。***


##### ② ```mentions```（メンションの定義）
メンションの定義部分です。
``` JSON
"mentions": [
  {
    "id": 0,
    "mentionText": "一般",
    "mentioned": {
      "conversation": {
        "id": "19:aaaaaa@thread.tacv2"
      }
    }
  }
]
```
上述の通り、```<at id=\"0\">一般</at>```と書いただけではメンションとして機能しません。
誰をどのIDでメンションするかを、このセクションで定義する必要があります。
```mentioned.conversation.id```に、メンション対象のIDを入れます（今回は該当チャンネルのIDを指定してください）。

::: note warn
```mentionText```は、```body```で```<at>```タグに記載した内容と完全に一致させる必要があります。
私はここで30分躓きました。
:::

##### 最終系
``` JSON
{
  "body": {
    "contentType": "html",
    "content": "<at id=\"0\">一般</at><br>これは自動投稿です。"
  },
  "mentions": [
    {
      "id": 0,
      "mentionText": "一般",
      "mentioned": {
        "conversation": {
          "id": "19:aaaaaa@thread.tacv2"
        }
      }
    }
  ]
}
``` 

# おわり
いろいろ調べてチャンネルをメンションする方法はこれしかないと思いましたが、もしより良い実現方法をご存じの方いらっしゃいましたら、教えてください。

久しぶりにPowerAutomateでフローを作成しようとしましたが、アクションが諸々更新されていたり、UI自体がアップデートされていたりで浦島太郎状態でした。
もう少しアップデート情報に気を配っていきたいです…
ローカル環境のDify v1.0.0以降で，Ollamaで動かしているLLMの設定方法が変わっていたので修正した

## 概要
#### なにが起きた？
- ローカルで利用している[Dify](https://github.com/langgenius/dify)の(おそらく)バージョン1.0.0以降で[Ollama](https://ollama.com/)の一部のモデル(LLM)が利用できなくなっていたので対処した。
#### どうやって直した？
- Difyが参照できるようにLLMのmanifestファイルの場所を変更した。
## 状況
- Windows 11 (+ WSL2)で，[Docker](https://www.docker.com/ja-jp/)を使ってローカルでDifyを利用している。
- Ollamaを使ってローカルでLLMを動かして，Difyのアプリに組み込んでいる。
- Dify v1.0.0以降，Ollama公式で用意しているモデル([gemma3](https://ollama.com/library/gemma3), [nomic-embed-text](https://ollama.com/library/nomic-embed-text) など)は使えるが，[HuggingFace](https://huggingface.co/)からなど別の手段で導入したモデル([sarashina2.2-3b](https://huggingface.co/mmnga/sarashina2.2-3b-instruct-v0.1-gguf) など)を，Difyの「モデルプロバイダー」画面で「モデルを追加」すると，「変更が正常に行われました」と表示されるが，実際は反映されず利用できなくなっていた。
## やったこと
1. Gemma3などOllama公式サイトから導入したモデルを見ると，manifestファイルが以下に格納されていた。`..\.ollama\models\manifests\registry.ollama.ai\library\`
2. それ以外の，HuggingFaceなどから導入したモデルのmanifestファイルは，これとは異なるディレクトリに存在していた。 例：`..\.ollama\models\manifests\hf.co\..`
3. Difyが認識しないモデルのmanifestファイル(フォルダ)を，1.の `..\registry.ollama.ai\library\` の下に置いたところ，Difyに問題なくモデルが認識され，利用できるようになった。 例：`..\.ollama\models\manifests\registry.ollama.ai\library\sarashina2.2-3b-instruct-v0.1-gguf\Q4_K_M`
## おまけ
- manifestファイルをコピーして別フォルダに置くと，`ollama list` の際に両方ヒットしてしまう。ので，気になる場合は元の方を削除するなどする。(自己責任)
- DifyでのOllamaのモデルの設定は以下。
	- Model Name : `library以下のフォルダ名:manifestファイル名 ※latestの場合は指定不要`
		- 例：`sarashina2.2-3b-instruct-v0.1-gguf:Q4_K_M`
	- BASE URL : `http://host.docker.internal:11434`
NetApp ONTAPのAFF/FASで出力され続けるスペアのアラートを停止する

## はじめに
NetApp ONTAPが稼働するストレージのディスク数と構成によってはスペア不足のアラートが出てしまいます。このアラートを停止する方法を紹介します。

## 前提条件
- ONTAP 9
- 16ドライブ以下のAFF / FASシステム

## KBに記載されている内容
- raid.min_spare_count オプションは、必要な最小限のスペアドライブ数を指定して、スペアドライブ不足の警告を回避します
- すべてのファイルシステムドライブに、で指定された raid.min_spare_count 交換に適した最小限のスペアドライブ数がある場合、スペア不足の警告は表示されません
- このオプションは0~4の範囲で設定できます
- 容量が最適化されたプラットフォーム（AFF C190など）のデフォルト設定は0、それ以外のプラットフォーム（FAS2720など）のデフォルト設定は1です
- このオプションを0に設定すると、スペアがない場合でもスペア不足の警告は表示されません
- このオプションは、RAID-DPアグリゲートで接続されているドライブ数が16以下のスタンドアロンシステムまたはHAシステムでのみ0に設定できます。容量が最適化されていないシステムが、このオプションを0に設定してドライブを16本以上に拡張すると、オプションは自動的に1に変わります
- RAID 4アグリゲートを使用するシステムでは、0を設定することはできません

## 設定手順
    cluster::> storage raid-options modify -node <node_name> -name raid.min_spare_count -value 0

## 注意点
スペアディスクがゼロ、または少ない構成はリスクを理解して運用してください。故障ディスクが切り替わるスペアディスクがない場合などはすみやかに故障ディスクを交換する必要があります。

## 参考リンク
- **[How to disable SPARES_LOW AutoSupport notifications](https://kb.netapp.com/on-prem/ontap/Ontap_OS/OS-KBs/How_to_avoid_regular_notification_of_ASUPs_SPARES_LOW#)**
- **[storage raid-options modify](https://docs.netapp.com/us-en/ontap-cli/storage-raid-options-modify.html)**