OmniAICreator/Qiita-1.07M huggingface dataset:
TechDojo参加しての感想！（More編）

お久しぶりです、とくりんです！

最近は他言語の勉強と旅行と忙しくしておりましたら体調を崩してしまい熱などはないのですが咳が止まらないです笑

3/18追記
PHPでの開発に熱中してたら更新遅れました😢
技術課題が終わったので夢のオンライン有給インターン！？になりたいですね

本題に入りますと今回はTechDojoでの経験を踏まえたMoreの点になります。
# AIの使い方 #
私は今回主にAIについて深く考えるきっかけになりました。Claude sonet3.7などどんどん性能が進化しており、知識がなくてもアプリが作れるとまで言われています。ですが私は情報を取捨選択できるための他言語の知識やプログラミング全体の構造理解があった上でのみ、成り立つと考えています。実際、同じグループの友人と私はAIを利用していく中で上記のような知識に私と差があり、成果の進捗が異なったと考えています。
ですが、初心者はAIを使うなというつもりはございません。私が大切だと考えたポイントは、

***生成したコードをペーストする際に理解を伴えるようにしよう
プロンプトは細かく記載して自分の欲しい情報を出力できる方法を学ぼう
言語やアーキテクチャなどのインプットを同時並行で行おう***

だと思います。理由については過去の課題の項目で感じていることがほとんどです。強いて言うとすればインプットをサボって理解を伴わないペーストはまじで自分の首を絞めることになると思います。まだAIが普及したてでこれがベストプラクティスってのは見つかっていないので積極的に使いながらそのたび自問自答して考え続けていきたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4016682/79f3c9fc-dc5c-4aea-8719-0416eff0b5a1.png)

# 思考の言語化 #
次は思考の言語化するためのプロセスについてです。
これは質問があまりできなかった課題と関連しています。
コードやアーキテクチャを考えていく中で詰まることやエラーが起きてしまうことがあると思います。その際に私はエラーのメッセージでとにかく検索や質問していました。
それでは、コードのこの部分で何をしたいのか（**抽象化**）、コードをどのように編集したらそのエラーが起きたのか（**具体化**）で自分の中での整理できておらず、質問するのに適切な答えが得られなかったり調べ方の選択がうまくできなかったりすると考えました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4016682/0d290b04-6fb5-4e7c-b2af-14616c716286.png)

これは社員さんとの会話での内容を自分なりに解釈してまとめたものです。このように考えていく中で自分の段階を理解しながら一つずつこなしていくことが解決で効率的に施行する方法だと思います。

# Figmaでのアーキテクチャ理解 #
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4016682/35d3b670-9450-448b-8cfa-58d3600a0ed3.png)
前回にお見せしたようにアーキテクチャの理解に文字だけでなく、Figmaなど視覚的にわかりやすくすることは初学者にとってプロジェクトの全体像をつかむのにとてもいい学習法だと思います。設計ができていない場合は無暗にコードを書いてしまって、ファイルの競合や親子関係など技術的な問題だけでなく、自分の達成度でのモチベーションの維持やスケジュール管理といったところでも大変になることが分かりました。
新しい開発をする際には毎回行っていこうと思います。


# まとめ
初学者として臨んだモバイルアプリ開発でうまくいかず悔しい思いもしましたが、Androidアプリの知識やエンジニアとしての考え方などを学び、考えるきっかけになったと思います。
拙い文章でしたが最後まで書ききれてよかったです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4016682/85bb462b-5f03-4e96-b85a-e6be4176c44a.png)


***CyberAgentの皆様、Dojo生のみんなありがとうございました！***
仮想化とは？ ハイパーバイザ型とコンテナ型の違いについて

仮想化技術は、物理的なハードウェアを効率的に利用し、複数の仮想環境を作成する技術です。この記事では、仮想化の基本的な概念を説明し、ハイパーバイザ型とコンテナ型の仮想化技術について、その特徴や仕組みを解説します。

## 仮想化とは？

仮想化とは、物理的なサーバーやPCを仮想環境に変換し、1台の物理機器上で複数の仮想マシン（ゲストOS）を動作させる技術です。これにより、ハードウェアのリソースを効率的に利用し、柔軟なシステム運用が可能となります。

仮想化の基本的な仕組みとして、物理サーバー（ホスト）上に仮想化ソフトウェアをインストールし、その上で複数の仮想マシンを実行するという形になります。仮想化された環境内では、各仮想マシンが個別のOSを持ち、独立して動作します。

## 仮想化の種類
仮想化には大きく分けて、ハイパーバイザ型とコンテナ型があります。それぞれの違いを簡単に説明します。

## ハイパーバイザ型（Type 1）
ハイパーバイザ型は、物理サーバーに直接インストールされる仮想化ソフトウェアです。物理サーバーのリソースを管理し、その上で複数の仮想マシン（ゲストOS）を動作させます。
•特徴:
    •ホストOSは不要。
	•物理サーバーに直接インストールされ、仮想化ソフトウェア（ハイパーバイザ）が直接ハードウェアを管理します。
	•各仮想マシンは個別のOSを持ち、完全に独立しています。
•代表的な仮想化ソフトウェア:
	•VMware ESXi
	•Microsoft Hyper-V

## コンテナ型
コンテナ型は、仮想マシンとは異なり、ホストOS上で複数のコンテナを立ち上げる技術です。コンテナは、仮想マシンのように完全に独立したOSを持たず、ホストOSのカーネルを共有しながら、アプリケーションごとに分離された環境を提供します。
•特徴:
	•ホストOSのカーネルを共有。
	•コンテナは軽量で、仮想マシンよりも起動が早く、リソースのオーバーヘッドが少ない。
	•それぞれのコンテナはアプリケーションを独立して動作させることができますが、OSは共有しています。
•代表的なコンテナ技術:
	•Docker
	•Kubernetes（コンテナのオーケストレーションツール）

## ハイパーバイザ型の詳細
ハイパーバイザ型は、物理サーバーに直接インストールされ、ホストOSを持たずに仮想化を行います。仮想化ソフトウェアが物理サーバーのリソースを直接管理し、その上で複数の仮想マシン（ゲストOS）を作成し、それぞれにリソースを割り当てます。

ハイパーバイザ型の構造
[物理サーバー] 
    ↓
[ハイパーバイザ（仮想化ソフトウェア）]
    ↓
[ゲストOS1]  [ゲストOS2]  [ゲストOS3]

この構造により、物理サーバーのリソース（CPU、メモリ、ストレージなど）を仮想マシンごとに割り当てることができ、仮想マシンは独立して動作します。

## ゲストOS（仮想マシン）とは？

ゲストOS（仮想マシン）は、物理サーバーの仮想化ソフトウェア上で動作する、仮想的なPCです。実際の物理的なPCは存在しませんが、仮想化技術によって、あたかも物理PCが存在するかのように動作します。
	•ゲストOSは、物理サーバーのリソースを仮想化ソフトウェアを通じて使用し、実際のPCと同じように動作します。
	•ゲストOSには、WindowsやLinuxなどのOSをインストールすることができます。
	•遠隔操作でゲストOSにアクセスして利用することができ、物理PCがなくても、あたかも別のPCを使っているように感じることができます。

## ゲストOSとアクセス方法

ゲストOS（仮想マシン）には、リモートデスクトップ（RDP）やSSHを通じてアクセスすることができます。これにより、物理的に存在しないPCを遠隔で操作できるため、複数の仮想マシンを管理する場合でも非常に便利です。

## 結論
仮想化技術は、物理サーバーのリソースを効率的に活用し、複数の仮想サーバー（ゲストOS）を立ち上げて独立して動作させるための重要な技術です。ハイパーバイザ型とコンテナ型のそれぞれに特徴があり、利用するシーンに応じて使い分けることが重要です。
家計簿アプリを作る＃１７

モバイル用のDrawerを見ていきます。

![スクリーンショット 2025-03-18 133255.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/f6a3d02e-e3c0-4af2-8da8-be1e04072eab.png)
xsは、画面のサイズが０ピクセル以上で、display "block"を適用し、smは、画面のサイズが６００ピクセル以上で、display "none"を適用してます。

![スクリーンショット 2025-03-18 133622.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/6b3d67b0-d25a-414a-9a51-dd74df239dd4.png)
画面のサイズが６００ピクセル以上なったときに、👆の左側のメニューが消えます。

![スクリーンショット 2025-03-18 133834.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/1b6d56ac-9b05-426f-8c95-18771a5b35fb.png)
また、variant="temporary"とすることで、

![スクリーンショット 2025-03-18 133928.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/301a7899-8b4c-424e-b68d-103e40ee4750.png)
こちらを押したりして、Drawerの表示と非表示を切り替えることができます。
なるべく簡単にtensorflowでGPUを使いたい

## はじめに
tensorflowでGPUを使用するためには、使用するtensorflowのバージョンに合わせて、CUDAやCuDNNをダウンロードしなくてはいけない。(いちいち画面操作でダウンロードしに行くのはめんどい....)
そこで、コマンドのみで簡単に行う方法をいくつか見たので自分でアレンジして実際にやっていきます


## やり方
やり方については↓のファイルを保存して実行するだけです

```yaml:environment.yml
name: tf_gpu #作りたい環境の名前
channels:
  - conda-forge
dependencies:
  - python=3.9
  - cudatoolkit=11.2 #tensorflowのverにあわせて
  - cudnn=8.1 #tensorflowのverにあわせて
  - pip
  - pip:
    - tensorflow==2.10.1
    - numpy==1.20.3  

```
Windowsで使いたいのでtensorflowは2.10までを使用します。
理由としては[TensorFlow公式](https://www.tensorflow.org/install/pip?hl=ja#windows-native)にも記載している通りTensorflow2.10がWindowsでGPUをサポートする最後のバージョンだからです

### 実行
では実行して環境を作りましょう。
↓のコマンドを先ほどのファイルを置いてあるディレクトリで実行すればいいだけです
```
conda env create -f environment.yml
```
環境ができたら↓のコマンドでGPUが使用できるか確認します

```python:check.py
import tensorflow as tf
print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU')))
```
↓のように1と表示されればOKです
```
Num GPUs Available:  1
```
## 参考
https://qiita.com/TatsuyaOyb/items/8c838cb1f26c26ba06c2
notesscript

Option Public
Option Declare

Sub ExtractAttachments()
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim rtItem As NotesRichTextItem
    Dim embeddedObjects As Variant
    Dim obj As NotesEmbeddedObject
    Dim filePath As String
    Dim targetDir As String
    Dim matchedFiles As Integer
    
    ' ダウンロード先フォルダ
    targetDir = "C:\\temp\\download\\"
    If Dir(targetDir, 16) = "" Then MkDir targetDir
    
    ' 現在のデータベースを取得
    Set db = session.CurrentDatabase
    ' 現在開いている文書を取得
    Set doc = session.DocumentContext
    
    ' リッチテキストフィールド R を取得
    If Not doc.HasItem("R") Then
        Msgbox "フィールド R が見つかりません。", 16, "エラー"
        Exit Sub
    End If
    
    Set rtItem = doc.GetFirstItem("R")
    If rtItem.Type <> RICHTEXT Then
        Msgbox "フィールド R はリッチテキストではありません。", 16, "エラー"
        Exit Sub
    End If
    
    ' 添付ファイルをチェック
    embeddedObjects = rtItem.EmbeddedObjects
    matchedFiles = 0
    
    Forall obj In embeddedObjects
        If obj.Type = EMBED_ATTACHMENT Then
            ' 拡張子のチェック
            If Right$(Lcase$(obj.Name), 4) = ".zip" Or Right$(Lcase$(obj.Name), 5) = ".xlsm" Then
                matchedFiles = matchedFiles + 1
                filePath = targetDir & obj.Name
                Call obj.ExtractFile(filePath)
                
                ' ZIP の場合は解凍
                If Right$(Lcase$(obj.Name), 4) = ".zip" Then
                    Call UnzipFile(filePath, targetDir)
                End If
            End If
        End If
    End Forall
    
    ' 条件エラー処理
    If matchedFiles = 0 Then
        Msgbox "適切な添付ファイルがありません（.zip または .xlsm）。", 16, "エラー"
        Exit Sub
    ElseIf matchedFiles > 1 Then
        Msgbox ".zip または .xlsm のファイルが複数あります。", 16, "エラー"
        Exit Sub
    End If
    
    Msgbox "処理が完了しました。", 64, "完了"
End Sub

' ZIPファイルを解凍する
Sub UnzipFile(zipPath As String, extractTo As String)
    Dim shellCmd As String
    shellCmd = "powershell -command ""Expand-Archive -Path '" & zipPath & "' -DestinationPath '" & extractTo & "' -Force"""
    Call Shell(shellCmd, 0)
End Sub
PL-900 一夜漬け合格体験記

PL-900をほぼ一夜漬けで合格したので、今後受験する人の参考になればと思いこちらの記事を書きます

## 結果
合格点は700点のところ、884点で合格でした
思ったより取れたなという印象です
時間は見直しを1周して、15分くらい余っていました

## Power Platformの実務経験など
- Power Apps 2年程度
- Power Automate クラウドフロー 3年程度
- Power Automate Desktop　試しに触った程度
- Power BI 1年程度

他は触ったことないです

## 学習方法
### 1.合格体験記を呼んでほかの人の学習方法を把握(1時間くらい)
効率よく資格を取るならこの作業が最も重要だと思います。
これをやればいいんだなってのを把握することを心がけます

※PL-900 : Microsoft Power Platform Fundamentals 試験対策が最もよさそうだったのですが、登録しようとしてもメール来なかったので諦めました・・・

#### 参考にさせていただいた記事
https://qiita.com/ponponmikankan/items/fd363bb0323569d3676f

https://qiita.com/HIROrata/items/311f3bc9e7335a1da9c3

https://qiita.com/Hiro_lcnc/items/5243d1d948010bee0e1a

### 2.Learnのラーニングパス（1時間くらい）
こちらは流し読み程度で1周終わらせてこんなのが出るんだくらいの雰囲気をつかみます
コース最後にある演習問題以外は正直何も見てないかもしれない・・・

https://learn.microsoft.com/ja-jp/training/courses/pl-900t00

### 3.練習評価初回(10分くらい)
直訳みたいなよくわからん日本語のせいでイライラしてきて投げました
これで勉強するのは学習コストが高すぎるという判断で一旦撤退です
本番の試験がこんな日本語だったら嫌だなと思いながら、違う教材を試すことに・・・
※本番試験はもう少しわかりやすい日本語なので安心してください

https://learn.microsoft.com/ja-jp/credentials/certifications/power-platform-fundamentals/practice/assessment?assessment-type=practice&assessmentId=34&practice-assessment-type=certification

### 4.PL-900 Power Platform Fundamentals 模擬問題集（5時間くらい）
無償の教材だけで合格したかったのですが、さすがに厳しそうでしたので、急遽評判が良いこちらの教材を購入しました
問題ごとになぜ間違っているかという解説もついていたので、間違ったところは特になぜ間違ったのかをしっかりと確認して4コースとも進めました

Youtubeで動画を見ながらまったりと3周ずつ回し、すべて90%程度正解できるように仕上げました

https://www.udemy.com/course/2023pl-900-power-platform-fundamentals/?couponCode=ST11MT170325G2

### 5.練習評価(1時間くらい)
改めて練習評価に3周チャレンジしました
80%取れるのが目安だよって表示されるのですが、78%くらい取れるようになったことと、眠気が限界に来たのでここで終了しました

ここまでが試験前日の学習内容です

### 6.練習評価(15分くらい)
試験開始まで時間がありましたので、念のため練習問題をもう1周しました
間違ったところを重点的に確認することを心掛けました
80%には最後まで届かず不安ですが、時間もないので学習はここまででした

### 7.試験サンドボックス(5分くらい)
実際の出題形式のサンプルが出てきます
回答形式が練習評価や模擬問題集とは異なる形式が実際の試験でも出てくるので、これはやっておいたほうが良いかと思います

https://www.starttest.com/ITDVersions/22.0.0.0/ITDStart.aspx?SVC=2cffa9b6-7419-49ca-a32f-eef785b2372c

以上だいたい8時間くらいの一夜漬けで挑みました

## 感想など
練習評価は実際の試験より難しいなという印象です（日本語のせいもありそうですが・・・）
実際の試験では、迷った際によく読んで違う選択肢を除外していけば、案外絞れましたね
「PL-900 Power Platform Fundamentals 模擬問題集」をメインで学習するのがストレスが少ないんじゃないかなと感じました。

## 余談
今回自宅受験を選んだのですが、手の届く範囲に受験実施する端末以外置いてはいけないなど、制約が多すぎてめんどくさかったです・・・
次回からは自宅受験ではなく会場での受験にしたいとおもいました
TAPで係り受けのあるポジ/ネガカテゴリを作成する(SPSS Modeler データ加工逆引き13-12)

# TAPで係り受けのあるポジ/ネガカテゴリを作成する

![スクリーンショット 2025-03-11 11.45.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/123b1add-b2b0-4ce4-a58a-4f388801f0fb.png)
　（TAP=Text Analytics Package/テキスト分析パッケージ）

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

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

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

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

・典型的なポジティブ/ネガティブカテゴリの作成方法を知るために製品同梱のTAPを利用します。

https://www.ibm.com/docs/ja/spss-modeler/18.6.0?topic=data-using-text-analysis-packages

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

ストリーム

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

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

![スクリーンショット 2025-03-11 11.46.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/7d18b8e3-3192-4026-bc62-4c73b2667303.png)

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

![スクリーンショット 2025-03-11 11.49.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f957fad9-94c7-44ea-8c2d-7b6db1d3865f.png)

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

![スクリーンショット 2025-03-11 11.50.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/2b1d3069-fdc8-4067-bc98-589cf5912849.png)


[モデル]タブを編集します。[テキストリンク分析...]を選択します。[テキスト分析パッケージ]の[読み込み]ボタンを押して[Hotel Satisfaction(Japanese)]を選択します。

![スクリーンショット 2025-03-11 11.50.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/53889552-1cad-4aa8-b002-c945d9cfafc0.png)

![スクリーンショット 2025-03-11 11.49.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/11ea568f-32b7-4612-9bd0-bf35d19d5764.png)


[実行]します。テキスト分析パッケージに定義済みのカテゴリ（辞書とテキストリンクを考慮）がすでに生成されています。右上のドロップダウンリストから[カテゴリーとコンセプト]を選択します。

![スクリーンショット 2025-03-11 11.52.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/692cb450-ac20-4f22-bcb3-d51770220154.png)

左上の[モデル生成]ボタンを押してモデルを生成します。マネージャーウィンドウにcが生成されます。

![スクリーンショット 2025-03-11 11.53.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/480d0778-316f-455e-bc75-64ff01f5f76e.png)

c.[テキストマイニング]ナゲットを編集します。[設定タブ]で真偽をT/Fから1/0へ[フィールド名拡張子]をブランクにします。

![スクリーンショット 2025-02-24 11.59.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/a075eadd-c39d-4b68-9b55-90141b9ec9f0.png)

d.[フィルター]ノードで表示するフィールドを絞り込みます。

![スクリーンショット 2025-03-11 11.54.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/44f76523-efcb-487d-82a2-4b1d630b5141.png)

[テーブル]ノードを編集します。

![スクリーンショット 2025-03-11 11.54.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d1d08431-c64b-402a-b1ae-01d2412147ef.png)


#### 注意事項

テキスト分析パッケージは、ご自身で辞書を整えて試行錯誤したカテゴリ作成を保存/共有/再利用するものです。


## 4.参考情報

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

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

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

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

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

https://qiita.com/416nishimaki/items/4bf813e6cba84b2a1008
EC2にDNSサーバを構築してRoute53インバウンドエンドポイントへのフォワードを試す（別アカウントのホストゾーンを関連付けする方法）

# 内容

下記オンプレミスからAWS上の名前解決の検証を行う記事の別パターンとなります。両方ともオンプレミスのDNS設定にDNSインバウンドエンドポイントへのフォワード設定を行い、Route53のプライベートホストゾーン内のレコードで名前解決を行います。下記記事との違いは別アカウントで作成したプライベートホストゾーンの関連付けを行っている点です。

https://qiita.com/infra365/items/ec8150fb998eca9764c9

# 構成

赤線の流れで名前解決（オンプレミスのDNSサーバからDNSインバウンドエンドポイントにフォーワード）を行った後、黄色線の流れでNLBにアクセスする環境を想定します。このアーキテクチャの特徴は緑線の流れとなります。Account Bで作成したexample.localというプライベートホストゾーンをAccount AのVPCに関連付けを行います。

![dns12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/b28eef17-28a0-42ad-9e53-e7ad0aa55457.png)


# 構築

Account B側でexample.localというプライベートホストゾーンを作成します。その後、www.example.localというAレコード（エイリアスを有効化）を作成してNLBのDNS名と紐づけます。設定完了後のプライベートホストゾーンは下記の様な状態となります。

![dns10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/33b3d8c3-3db9-40f3-b5b8-a89170e1baa5.png)

Account Bからプライベートホストゾーンの関連付けリクエストを行います。下記では上記Account Bで作成したプライベートホストゾーンのIDとAccout A側で紐づけるVPCのIDを指定します。

```shell
aws route53 create-vpc-association-authorization \
  --hosted-zone-id Z00XXXXXXXXXXXX \
  --vpc VPCRegion=ap-northeast-1,VPCId=vpc-0axxxxxxxxxxxxx
```

続いてAccout A側の作業になります。Accout A側で関連付けの承認を行います。

```shell
aws route53 associate-vpc-with-hosted-zone \
  --hosted-zone-id Z00XXXXXXXXXXXX \
  --vpc VPCRegion=ap-northeast-1,VPCId=vpc-0axxxxxxxxxxxxx
```

なお、上記の設定はRoute53コンソールから行うことは出来ません。

https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/hosted-zone-private-associate-vpcs-different-accounts.html

これでプライベートホストゾーンの関連付けが完了です。Account B側にログイン後、プライベートホストゾーンを確認すると、上記で指定したAccount A側のVPCがプライベートホストゾーンに紐づいていることが確認出来ます。

![dns11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/96b46201-8850-408a-92ee-19f22866c2de.png)

ここからEC2にログインして名前解決が可能であるか確認していきます。なおEC2側のDNSサーバの設定は[こちらの記事](https://qiita.com/infra365/items/ec8150fb998eca9764c9)と同様です。

現在の状態では、example.localに関する設定がないため、www.example.localの名前解決を行うことは出来ません。

```shell
nslookup www.example.local
;; communications error to 172.20.1.10#53: timed out
;; communications error to 172.20.1.10#53: timed out
;; Got SERVFAIL reply from 172.20.1.10
Server:         172.20.1.10
Address:        172.20.1.10#53
```

example.localドメインへのリクエストをDNSインバウンドエンドポイントに転送する設定を行った後、bindの再起動を行います。

```shell
vim /etc/named.conf

zone "example.local" IN {
    type forward;
    forward only;
    forwarders { 172.20.1.20; 172.20.1.30; };
};

systemctl restart named
```

これでAccout Bから共有されたプライベートホストゾーンのレコードを使用して名前解決することが出来ました。

```shell
nslookup www.example.local
Server:         172.20.1.10
Address:        172.20.1.10#53

Non-authoritative answer:
Name:   www.example.local
Address: 172.20.1.40
Name:   www.example.local
Address: 172.20.1.50
```
【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/)
***
　まずは、ニュースです。

　マーベリックが
　　解説動画生成AI
　　　NoLang 3.0を
　　　　リリースしました！
　　　　　[マーベリック公式ポスト](https://x.com/sayhi2ai_jp/status/1901436561369309485?t=2s3ZXz43wc7J5y2AQ6R-ZA&s=19)

　バージョンアップの特徴は
　❶ショート動画の
　　　直接生成・編集が可能に
　❷動画編集機能が大幅リニューアル
　❸PDF資料を「1分要約」する
　　　新モード登場

　【🎁期間限定キャンペーン】
　・全プランで
　　　「縦型動画の生成
　　　　・編集・ダウンロード可能」
　・新規ユーザー限定で、
　　　サインアップ時の
　　　　付与クレジットが200増加
***
　では、【本題】です。

　今回は、
　　病院を訪ねた際に
　　　記入する問診票に
　　　　書き写すため事前に
　　　　　インタビュー形式で
　　　　　　質問してもらうための
　　　　　　　Promptです。

　病院を訪ねるということは
　　病気を疑っている（確信している）
　　　ということですよね。

　でも、
　　イザ、病院を訪ねても
　　　問診票に答えることが
　　　　つらいこともあります。

　事前に、
　　自宅で、落ち着いて
　　　記入できれば、
　　　　書き写すだけになります。

　また、
　　家族に病人が出ても
　　　家族にインタビューして
　　　　先に問診票を作成できれば
　　　　　助かります。

　今回のPromptは
　　問診票に記入することを
　　　インタビューをしてくれて
　　　　問診票を作成するものです。
***
　こちらが、そのPromptです。
　　基本情報と生活習慣の“=”以降に
　　　必要な情報を書き込んで
　　　　送信してください。
```Text:問診票インタビューPrompt
医者にかかるつもりです。
問診票に記入することをインタビューをしてください。
ただし、個人情報は聞かないこと。
インタビュー終了後、記入された問診票をマークダウンで作表。
コードブロックに入れない。

基本情報：
　性別=
　年齢=
　身長=
　体重=
　既往歴（過去の大きな病気や手術）=

生活習慣：
　タバコ=
　お酒の頻度=
　アレルギー=
　睡眠時間=
　運動=
　家族の病歴=

インタビューは、一度に質問を出せずに、一問一答でお願いします。
```

　最後の文言を外して行なえば
　　質問集が出てきます。

　最後まで答えると、
　　問診票が作成されます。

　ただし、
　　病院や何科かによって
　　　内容が異なりますので、
　　　　ご注意ください。
***
　自分が呼ばれて
　　診察を受ける際の
　　　医師からの質問も
　　　　想定しておけば、
　　　　　助かるかと思います。

　こちらのPromptを
　　続けて送信してください。
```Text:医師からの質問想定Prompt
この問診票から医師が聞きそうなことを教えて
```

　このPromptにより
　　想定される質問集が
　　　出力されます。

　すべてが聞かれることはなく
　　大きな枠組みで
　　　聞かれるかと思います。

　それでも
　　質問集に対する答えを
　　　事前に用意出来ていると
　　　　お互いに助かります。

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

　今回は、ここまで。
AWSにおけるMLOpsの各プロセスを GUIベースで管理できるツールたち

AWS独自のオペレーター的な役割を果たすサービスやGUI管理ツール** を紹介します。

## **AWS上でMLOpsをGUIで管理するツール**

### **1. データ取り込み・前処理**
#### **🔹 AWS Glue Studio**
- **機能**: ノーコードでETLパイプラインを作成し、データ変換、クレンジングをGUIで管理
- **ユースケース**:
  - S3, RDS, DynamoDB などのデータソースを統合
  - PySpark / Python でデータ前処理を行い、Amazon Redshift などに保存

#### **🔹 AWS Data Wrangler (Pandas on AWS)**
- **機能**: GUIなしだが、PandasライクにAWS上のデータ操作が可能
- **ユースケース**:
  - Athena, S3, Redshift などのデータを統合し、前処理を簡単に実装

---

### **2. モデルのトレーニング・評価**
#### **🔹 Amazon SageMaker Studio**
- **機能**: Jupyter NotebookベースのGUIで、データ準備からトレーニング、デプロイまで管理
- **ユースケース**:
  - GUIからデータの前処理、特徴量エンジニアリング
  - SageMaker Autopilot を活用し、自動で最適なモデルを探索
  - モデルの実験管理 (MLflowのような機能)

#### **🔹 AWS Step Functions (MLOps Workflow Management)**
- **機能**: GUI上でワークフロー（データ処理 → モデルトレーニング → 推論）を管理
- **ユースケース**:
  - MLOpsパイプラインのフローを可視化・管理
  - Glueでデータを処理し、SageMakerで学習し、Lambda経由でデプロイするパイプラインを構築

---

### **3. モデルのデプロイ・推論**
#### **🔹 Amazon SageMaker Endpoints**
- **機能**: ワンクリックでモデルをデプロイし、API経由で推論可能
- **ユースケース**:
  - SageMakerで学習したモデルをリアルタイムAPIで提供
  - GPUインスタンス（Inf1, Trn1）で低レイテンシーな推論

#### **🔹 AWS Lambda + API Gateway**
- **機能**: サーバーレスでモデルをデプロイ（軽量な推論用）
- **ユースケース**:
  - 小規模なモデル（100MB未満）のデプロイ
  - APIリクエストで推論を実行し、結果を返す

#### **🔹 AWS Fargate + Triton Inference Server**
- **機能**: コンテナベースで大規模推論サーバーを管理
- **ユースケース**:
  - NVIDIA Tritonを活用し、GPU推論をスケールアップ

---

### **4. モデルの監視・継続学習**
#### **🔹 Amazon CloudWatch + AWS Lambda**
- **機能**: モデルのログ・パフォーマンスを監視
- **ユースケース**:
  - 推論のレスポンスタイムやエラー率を監視
  - モデルのドリフト検出（CloudWatch Events + Lambda）

#### **🔹 Amazon SageMaker Model Monitor**
- **機能**: 自動でモデルの精度劣化（ドリフト）を検知
- **ユースケース**:
  - 入力データの分布変化を検出
  - モデルの再学習をトリガー

#### **🔹 Amazon SageMaker Pipelines**
- **機能**: MLOps向けのパイプライン管理ツール
- **ユースケース**:
  - モデルのバージョニング、再学習、自動デプロイのワークフローをGUIで管理

---

## **5. AWSでMLOpsパイプラインをGUIで管理するベストプラクティス**
1. **AWS Step Functions** を使って、Glue → SageMaker → APIデプロイ のワークフローを構築
2. **SageMaker Pipelines** で、データ前処理から推論までのMLOpsを統合
3. **SageMaker Model Monitor + CloudWatch** でモデルの精度と動作を監視
4. **Amazon SageMaker Studio** でGUIを使い、ノートブックベースで開発・管理
5. **API Gateway + Lambda** でサーバーレスな推論を提供
6. **AWS Fargate + Triton** で大規模な推論環境を管理

---

## **結論**
AWSでは、**MLOpsの各フェーズをGUIベースで管理できるツールが豊富に揃っている** ため、MLOpsワークフローを視覚的に構築・運用可能です。特に **SageMaker Studio, Step Functions, Model Monitor, Pipelines** は、AWSでのMLOpsの要となるサービスです。

GUIで操作しつつ、より細かいカスタマイズが必要な部分では **LambdaやFargateを活用してサーバーレス化** することで、柔軟なMLOps環境を構築できます。
MLOpsにおけるオペレーターの種類とユースケース


## 1. はじめに

MLOps（Machine Learning Operations）は、機械学習モデルの開発、デプロイ、運用、監視、継続的改善を支援するためのプロセスとツールのセットです。その中でも **オペレーター（Operator）** は、機械学習パイプラインの自動化、スケジューリング、リソース管理を支援する重要な要素です。

本記事では、MLOpsにおけるオペレーターの種類と、それぞれのユースケースについて詳しく解説します。

## 2. MLOpsにおけるオペレーターとは？

オペレーターとは、MLOpsのワークフロー内で **特定の処理を自動化するコンポーネント** です。これにより、データの前処理、特徴量エンジニアリング、モデルのトレーニング、評価、デプロイメント、モニタリングなどの作業を効率化できます。

オペレーターは主に以下の役割を担います：
- **データの取り込み・前処理の自動化**
- **機械学習モデルのトレーニングとデプロイの管理**
- **パイプラインのスケジューリングと実行管理**
- **運用中のモデルのモニタリングと再トレーニング**

## 3. オペレーターの主な種類とユースケース

MLOpsのオペレーターにはさまざまな種類があります。それぞれのユースケースとともに紹介します。

### **1. データ取り込み・前処理オペレーター**

#### **a. Apache Airflow Operators（PythonOperator, BashOperator, etc.）**
- **ユースケース**：ETL（Extract, Transform, Load）プロセスの自動化
- **例**：データの抽出、クリーニング、特徴量エンジニアリングをスケジュール実行

#### **b. Kubeflow Pipelines - Data Preprocessing Components**
- **ユースケース**：機械学習用のデータ前処理を自動化
- **例**：データの正規化、欠損値処理、特徴量エンジニアリング

#### **c. Spark Operator（Kubernetes用）**
- **ユースケース**：分散処理を活用した大規模データの前処理
- **例**：Apache Spark を活用し、ペタバイト規模のデータを分散処理

### **2. モデルのトレーニング・評価オペレーター**

#### **a. Kubeflow TFJob Operator / PyTorchJob Operator**
- **ユースケース**：分散環境での大規模モデルの学習
- **例**：TensorFlow や PyTorch を使用した分散学習のスケジューリング

#### **b. MLflow Training Operator**
- **ユースケース**：モデルの学習管理・トラッキング
- **例**：実験管理、学習パラメータのログ記録、学習結果のバージョン管理

#### **c. SageMaker Training Operator（for Kubernetes）**
- **ユースケース**：AWS SageMaker でのスケーラブルな学習
- **例**：クラウドリソースを活用したトレーニングジョブのスケジューリング

### **3. モデルのデプロイ・推論オペレーター**

#### **a. KFServing / KServe Operator**
- **ユースケース**：Kubernetes上でのモデルのデプロイとスケーリング
- **例**：オンライン推論APIのデプロイと、負荷に応じたスケールアップ/ダウン

#### **b. TensorFlow Serving Operator**
- **ユースケース**：TensorFlowモデルの効率的なデプロイ
- **例**：モデルをREST API経由で提供し、バッチ推論にも対応

#### **c. Triton Inference Server Operator**
- **ユースケース**：GPUアクセラレーションを活用した高効率な推論
- **例**：NVIDIA GPUを活用した低レイテンシーな推論サービス

### **4. モデルの監視・継続学習オペレーター**

#### **a. Evidently AI Operator**
- **ユースケース**：モデルのドリフト（精度劣化）を監視
- **例**：データの分布変化を検知し、再学習をトリガー

#### **b. Prometheus + Grafana Operator（MLモデルのメトリクス監視）**
- **ユースケース**：モデルの性能やシステムの監視
- **例**：APIのレスポンス速度、エラーレート、推論レイテンシーを監視

#### **c. AutoML Retraining Operator**
- **ユースケース**：モデルの自動リトレーニング
- **例**：新しいデータが一定量蓄積されたタイミングで再学習を実施

### **5. MLOps全体のオーケストレーションオペレーター**

#### **a. Airflow MLflow Operator**
- **ユースケース**：MLOpsパイプライン全体の管理
- **例**：データ取得 → 前処理 → 学習 → モデル評価 → デプロイの一連のワークフローを自動化

#### **b. Argo Workflows Operator**
- **ユースケース**：Kubernetesネイティブなワークフロー管理
- **例**：機械学習の大規模バッチ処理や、非同期トレーニングジョブの管理

#### **c. Metaflow Operator**
- **ユースケース**：データサイエンティスト向けのシンプルなワークフロー管理
- **例**：ステップベースのモデル開発、試験、デプロイの自動化

## 4. まとめ

MLOpsにおけるオペレーターは、機械学習の **データ処理、トレーニング、デプロイ、監視、オーケストレーション** の各フェーズにおいて活用されます。それぞれのオペレーターには特化したユースケースがあり、適切に組み合わせることで、効率的でスケーラブルな機械学習運用が可能になります。

今後のMLOpsの発展とともに、新たなオペレーターが登場することが予想されるため、最新の動向をチェックしながら適切なツールを選択していきましょう。
Kubernetes上でのKafka運用とStrimzi Operatorの活用


Kubernetes上でKafkaを運用する場合、ネットワーク設定やストレージの問題が発生することが多くあります。これを解決するために、Strimzi Operatorを活用してKafkaクラスタを管理する方法を解説します。

## 1. Strimzi Operatorとは？
Strimziは、Kubernetes上でKafkaクラスタを簡単にデプロイ・管理できるオープンソースのオペレーターです。Kafkaのスケール管理や永続ストレージの設定を容易にする機能を提供します。

## 2. Strimziを用いたKafkaのセットアップ手順

### 1. Kubernetesクラスターの準備
まず、Kubernetesクラスターが稼働していることを確認します。

```bash
kubectl get nodes
```

### 2. Strimzi Operatorのインストール
Strimziを利用するには、まずOperatorをインストールします。

```bash
kubectl create namespace kafka
kubectl apply -f https://strimzi.io/install/latest?namespace=kafka
```

### 3. Kafkaクラスタのデプロイ
Strimziのカスタムリソース（CRD）を使用してKafkaをデプロイします。

```yaml
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
  namespace: kafka
spec:
  kafka:
    replicas: 3
    listeners:
      - name: plain
        port: 9092
        type: internal
    storage:
      type: persistent-claim
      size: 100Gi
      deleteClaim: false
  zookeeper:
    replicas: 3
    storage:
      type: persistent-claim
      size: 50Gi
      deleteClaim: false
  entityOperator:
    topicOperator: {}
    userOperator: {}
```

この設定で、3ノードのKafkaクラスタがデプロイされます。

### 4. Kafkaの永続ストレージ設定

Kafkaのデータを永続化するために、Persistent Volume（PV）を適切に設定します。

```yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: kafka-pv-claim
  namespace: kafka
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi
```

この設定を適用することで、Kafkaのデータがノードの再起動後も保持されます。

### 5. Kafkaに接続するクライアントの設定
Kafkaにメッセージを送信するPythonクライアントの設定を行います。

```python
from kafka import KafkaProducer

producer = KafkaProducer(bootstrap_servers='my-cluster-kafka-bootstrap.kafka.svc.cluster.local:9092')
producer.send('test-topic', b'Hello Kafka in Kubernetes!')
producer.flush()
```

## 3. まとめ
Kubernetes上でKafkaを運用する際には、Strimzi Operatorを活用することで、
- 簡単にKafkaクラスタを管理
- 永続ストレージを適切に設定
- スケーラブルなデータストリーミング環境を構築

することができます。これにより、Kafkaの安定運用が可能になります。
生成AIによる論文の英文校正のテンプレート（Copilot用）

生成AIで論文の英文校正をするテンプレートを作りました。Copilot用です。校正の精度を高めるために指示文は英語にしています。あまり細かく指示を出すとかえって変な挙動をする場合があるため、なるべくシンプルにしました。

# Prompt template

Can you help me improve the **\<SECTION\>** of my manuscript given below?
I need to make its quality sufficiently high, being ready to submit to a peer-reviewed journal. Please rewrite it in a more formal tone. If given, please adhere to the word count limit.

Word count limit: **\<MAXIMUM WORDS\>**

**\<COPY&PASTE YOUR SECTION HERE\>**

# 使い方

1. **\<SECTION\>** にセクション名を入れて下さい（例えば、Abstract, Introduction, Materials and Methodsなど）
2. **\<MAXIMUM WORDS\>** に最大の単語数を入れて下さい（例えば200、制限無しの場合は空欄で可）
3. **\<COPY&PASTE YOUR SECTION HERE\>** に英文校正にかけたい原稿の一部をコピぺし、指示を実行して下さい

# 補足

単語数は原稿全体ではなく、一回ごとの英文校正の対象範囲に対してです。Abstract以外では不要と思います。

一度に処理できる文字数を超えてしまう場合は、複数に分割して下さい。その場合、セクション名は細かい名前にしなくて構いません。

私の環境だけかもしれませんが、続けて処理していくとハルシネーションが起こりやすくなるようです。もし同様の現象が出た場合はCopilotを毎回再起動しながら使って下さい。
AIはSupabaseなどのBaaSとコラボできるようになった！

# AIはSupabaseなどのBaaSとコラボできるようになった！

## はじめに
これは自身の議事録として記載しております。
当たり前かもしれませんが、CursorやBolt.newなどを使うと上手くコーディングできるということで驚いたのでこちらに記載しておきます。
近年、ChatGPTを活用した開発がますます進化し、バックエンドとしてSupabaseなどのBaaS（Backend as a Service）と組み合わせて使うケースが増えてきました。しかし、ChatGPTを使ってSupabaseのクライアントライブラリを記述すると、意図しないエラーが発生したり、APIキーを手動で管理する必要があったりと、スムーズに開発を進めるのが難しい場面もありました。

しかし、最新のAI技術の進化により、これらの問題が大幅に改善されました！この記事では、どのようにAIがSupabaseと連携し、開発を効率化できるようになったのかを解説していきます。

## これまでの課題

### 1. クライアントライブラリのコードが正しく書けない

ChatGPTにSupabaseのクライアントライブラリを使ったコードを生成してもらうと、APIのバージョンや最新の仕様に適合していないコードが生成されることがありました。その結果、エラーが頻発し、手動で修正する手間がかかっていました。

### 2. APIキーの手動入力の手間

Supabaseを利用する際、環境変数を設定する必要がありますが、ChatGPTが直接APIキーを適切な場所に設定するのは難しく、手動で入力する手間が発生していました。

## CursorやBolt.newを使うとそこら辺は上手くできるみたいです！
### 参考動画
Cursor
- [I Built an Airbnb Clone in 30 Minutes… and You Can Too! (bolt.new + Supabase)](https://www.youtube.com/watch?v=6eUL1Wo9ZRc)

Bolt.new
- [How to Use Cursor Agent and Supabase to Maximize Productivity!](https://www.youtube.com/watch?v=GFxOwNiioT0)

### 費用
Cursor費用
![Screenshot 2025-03-18 at 12.48.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1878133/ebca9761-9b4e-4566-a863-5072760c0013.png)
Bolt.new費用
![Screenshot 2025-03-18 at 12.50.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1878133/f2951bb9-54ba-4ac9-8f1f-3b43fc2bac08.png)
ネットワーク入門：デフォルトゲートウェイがないとどうなる？仕組みと設定方法を解説してみた

## はじめに

デフォルトゲートウェイとは、コンピュータやネットワークデバイスが他のネットワークへ通信を行う際に経由するルーターのことを指します。

***デフォルトゲートウェイの設定により、異なるネットワークへの通信が適切にルーティングされ、インターネットアクセスや外部ネットワークとの接続が可能になります。***

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

ネットワーク設定のトラブル対応をする中で、デフォルトゲートウェイの重要性を実感しました。

:::note info
**特に、設定ミスによる通信障害を防ぐために、基本知識や設定方法を整理しておきたいと考えました。**
:::

また、初心者向けの分かりやすい解説や、チーム内の教育資料としても役立てたいと思いました。

## デフォルトゲートウェイの役割

### 異なるネットワーク間の通信の中継
- 同じネットワーク内（ローカルネットワーク）では直接通信できますが、異なるネットワークへデータを送る場合、デフォルトゲートウェイを通じて転送されます。

### インターネットアクセスのためのルート提供
- 家庭や企業のネットワークでは、通常、デフォルトゲートウェイはルーターのIPアドレスとして設定され、インターネットへ接続する際に必ず通る経路となります。

### 動的ルーティングと静的ルーティングの管理
- ルーターは複数のネットワークを管理し、デフォルトゲートウェイを適切に設定することで、異なるサブネット間の通信を効率的に処理します。

## デフォルトゲートウェイの設定方法

### Windowsの場合
1. コマンドプロンプトを開く（`cmd`）
2. `ipconfig` コマンドを実行し、デフォルトゲートウェイのIPアドレスを確認する
3. 必要に応じて `route add` コマンドで設定変更可能

### Linux/macOSの場合
1. ターミナルを開く
2. `ip route` または `route -n` を実行し、デフォルトゲートウェイの設定を確認
3. 新しいゲートウェイを設定するには `sudo route add default gw [ゲートウェイIP]` を使用

**実際のターミナル画面（macOSの場合）**

![Screenshot 2025-03-18 at 12.41.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/c7d6b8a1-6e11-4dcc-8b3d-487633bb9b2a.png)

## デフォルトゲートウェイが設定されていない場合の影響

- インターネットに接続できない
- 異なるネットワークへの通信ができない
- ネットワーク内の一部のサービスが利用できない

## まとめ

デフォルトゲートウェイはネットワーク通信において重要な役割を担っており、正しく設定されていないとインターネットアクセスや他のネットワークとの通信に支障をきたします。

**家庭環境でも企業ネットワークでも、デフォルトゲートウェイの適切な設定と管理が必要です！**
3D プリント用の 3D スキャン方法: ステップバイステップ ガイド

3Dプリンターの技術が進化し、個人でも簡単に利用できるようになった今、オリジナルのオブジェクトを作成するために「3D Scan for 3D Printing」の技術が注目されています。3Dスキャンを活用すれば、実物のオブジェクトを高精度でデジタル化し、3Dプリントを行うことが可能になります。特に、オリジナルデザインの製作や、既存のオブジェクトの複製、カスタマイズが求められる場面で、大きな可能性を秘めています。本記事では、3Dスキャンの基本から、3Dプリンターへのデータ変換までの流れ、さらには実際の応用事例について詳しく解説します。

3Dスキャンとは？基本概念を理解する

3Dスキャンとは、実物のオブジェクトをデジタルデータとしてキャプチャし、3Dモデルを作成する技術です。3Dスキャンの方法には、大きく分けて以下のようなものがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824290/629693f2-af24-4da1-9837-5ad62f154756.png)

1.構造化光スキャン：特定のパターンの光を投影し、その歪みを解析して形状を捉える方法。

2.レーザースキャン：レーザーを使用して物体の形状を精密に測定する方法。

3.フォトグラメトリ（写真測量）：複数の写真を撮影し、ソフトウェアを用いて3Dデータに変換する方法。

3Dプリント用のスキャンでは、高解像度でノイズの少ないデータを取得することが求められるため、専用の3Dスキャナーを使用するのが理想的です。MIRACOのような高性能なオールインワン3Dスキャナーを使用すれば、簡単かつ高精度なスキャンが可能になります。

3D Scan for 3D Printingの手順

1. スキャンするオブジェクトの準備

スキャンするオブジェクトの状態は、スキャン精度に大きな影響を与えます。光沢のあるものや透明なオブジェクトは、光が反射しやすく、正しくスキャンできないことがあります。そのため、スキャンスプレーを使用して表面をマットにするか、ライティングを調整して反射を抑えることが重要です。

2.3Dスキャナーの選定と使用

高品質なスキャンを行うためには、適切なスキャナーを選ぶことが重要です。たとえば、MIRACOのような高精度3Dスキャナーは、オブジェクトを360度スキャンし、高解像度データを取得できます。スキャンの際には、カメラの角度を適切に調整し、データの抜けがないように注意しましょう。

3.スキャンデータの編集と修正

スキャンデータには、ノイズや不要な部分が含まれることがあるため、専用ソフトウェア（例：Meshmixer、Blender、ZBrush）を使用してクリーンアップします。穴を埋めたり、表面を滑らかにすることで、3Dプリント時の精度を向上させることができます。

4.3Dプリント用データへの変換

修正が完了したら、データをSTLまたはOBJ形式に変換し、3Dプリント用のスライスソフトウェア（例：Ultimaker Cura、PrusaSlicer）を使用してプリント設定を行います。レイヤーの厚み、充填率、プリント速度を適切に調整することで、出力品質を最適化できます。

実際の活用事例

アートとデザイン

有名なデジタルアーティスト、オリバー・クリフトン氏は、3Dスキャン技術を活用して歴史的な彫刻のデジタルアーカイブを作成しました。「3Dスキャンにより、オリジナルのディテールを忠実に再現し、文化財を未来に残すことができる」と彼は述べています。博物館や美術館では、貴重な作品をデジタル化し、教育や研究に活用する事例が増えています。

医療分野での活用

3Dスキャン技術は、義肢や歯科インプラントのカスタマイズ製作にも利用されています。患者の体に完全にフィットする形状を正確に再現できるため、治療の精度が向上し、快適性も増します。特に、骨折治療用のカスタムフィット装具や、手術シミュレーション用の3Dモデル作成などで大きな成果を上げています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824290/3481ea9c-14e9-4b34-9016-470051545c75.png)


製造業での活用

工業製品の試作段階では、3Dスキャンを用いて既存の部品をデジタル化し、CADデータとして再利用するケースが増えています。これにより、設計変更や品質検査が容易になり、生産効率が大幅に向上します。特に、自動車業界や航空宇宙産業では、3Dスキャンによる部品のリバースエンジニアリングが不可欠となっています。

まとめ

「3D Scan for 3D Printing」は、単なる技術ではなく、さまざまな分野で応用可能な強力なツールです。適切なスキャン手順を踏み、データの最適化を行うことで、高品質な3Dプリントを実現することができます。アート、医療、製造業など多岐にわたる分野で活用されているこの技術を、自身のプロジェクトにも取り入れてみてはいかがでしょうか？

https://www.revopoint3d.jp/pages/3d-printing
動的スパース化における「重要な単語」の学習とは

## **1. 動的スパース化における「重要な単語」の学習とは？**
通常の Transformer モデルでは、**すべての単語（トークン）が相互作用** します。しかし、動的スパース化では、**「意味的に重要な単語」のみを選択し、計算を集中** させます。

例えば、  
- **ニュース記事の要約** → 主語・動詞・固有名詞が重要  
- **金融データの分析** → 数値やトレンドワードが重要  
- **会話データの処理** → 文脈を形成する単語が重要  

こうした「重要な単語」を学習するために、以下の手法が使われます。

---

## **2. 重要な単語を学習するための手法**
### **2.1 トークンの自己重要度学習（Token Importance Scoring）**
動的スパース化では、各単語（トークン）の **「重要度」** を **モデルが自動学習** します。具体的には、Attention 機構を使って以下のように計算します。

1. **トークンごとのスコア計算**  
   - 各トークンに対し、「どれだけ他のトークンと関連しているか？」をスコア化
   - スコアが高いほど、その単語は「重要な単語」として選択される
   - 一般的には `Softmax` を使って確率的に処理

2. **閾値（Thresholding）によるフィルタリング**  
   - 重要度が **一定の閾値** を超えるトークンのみを計算対象にする
   - 例: 文章中の上位 `K%` の単語のみを Attention に含める

3. **バックプロパゲーションによる最適化**  
   - モデルが訓練される中で、「どのトークンが重要か？」を自動で学習する
   - これにより、文章ごとに最適なトークン選択が行われるようになる

### **2.2 学習時のマスク適用（Adaptive Token Masking）**
動的スパース化では、「どの単語を計算するか？」を学習するために **マスク（Masking）** を活用します。

- **マスクの種類**  
  - `Hard Masking`：重要なトークンのみを 1（計算）にし、他は 0（計算しない）
  - `Soft Masking`：確率的にトークンを選択し、0～1 の重みを適用する

- **マスクの適用方法**  
  1. 最初はランダムにマスクを適用  
  2. 学習が進むにつれ、「意味的に重要な単語」が選ばれるように最適化  
  3. バックプロパゲーションで、「どの単語を残すと精度が高まるか？」を学習  

こうすることで、**最適なスパース Attention パターン** を学習し、重要な単語を適切に抽出できるようになります。

---

## **3. 動的スパース化の代表的なアプローチ**
### **3.1 Longformer (Sliding Window Attention)**
- **手法:** トークン間の関係をスライディングウィンドウ（局所的な範囲）で計算
- **学習方法:** 「重要な単語は長距離でも関連性が高い」ことを学習し、スコアを動的に調整

### **3.2 BigBird (Random + Global Attention)**
- **手法:** 重要な単語をランダム選択 + グローバルな重要単語を維持
- **学習方法:** 重要なトークンが選ばれる確率を学習し、適応的に更新

### **3.3 Dynamic Sparse Attention (DeepSpeed)**
- **手法:** 重要な単語を動的に決定し、計算量を削減
- **学習方法:** 重要度スコアを自動学習し、最も情報を持つ単語を選択

---

## **4. 具体的な実装（PyTorch）**
以下は、**動的スパース Attention を学習するサンプルコード** です。

```python
import torch
import torch.nn as nn

class DynamicSparseAttention(nn.Module):
    def __init__(self, hidden_dim, top_k=10):
        super().__init__()
        self.hidden_dim = hidden_dim
        self.top_k = top_k  # 重要なトークン数
        self.attn = nn.MultiheadAttention(embed_dim=hidden_dim, num_heads=8)

    def forward(self, x):
        # (batch, seq_len, hidden_dim)
        seq_len = x.shape[1]

        # スコア計算 (簡易版: トークンごとの L2 ノルム)
        importance_scores = torch.norm(x, dim=-1)  # (batch, seq_len)

        # 上位 k 個のトークンを選択
        topk_values, topk_indices = torch.topk(importance_scores, self.top_k, dim=1)

        # 選択されたトークンのみを計算対象に
        x_selected = torch.gather(x, 1, topk_indices.unsqueeze(-1).expand(-1, -1, x.shape[-1]))

        # Attention 計算
        attn_output, _ = self.attn(x_selected, x_selected, x_selected)

        return attn_output

# 実行
x = torch.rand(2, 50, 128)  # (batch, seq_len, hidden_dim)
model = DynamicSparseAttention(hidden_dim=128, top_k=10)
output = model(x)
print(output.shape)  # (2, 10, 128)
```

---

## **5. まとめ**
### **動的スパース化が「重要な単語」を学習する仕組み**
✅ **トークンごとに「重要度スコア」を学習**（Attention 重みの最適化）  
✅ **マスクを活用して適応的にスパースパターンを変更**（Adaptive Token Masking）  
✅ **バックプロパゲーションで動的に最適化**（トークン選択が学習される）  
✅ **DeepSpeed, Longformer, BigBird などで活用される**（計算コストを削減）  

動的スパース化は、**大規模言語モデル（LLM）の計算最適化** に不可欠な技術です。  
今後も、Sparse Attention の最適化技術が進化し、より効率的な LLM の学習・推論が可能になるでしょう！
【Linux】uptimeコマンド


## はじめに

こんにちは。アメリカ在住で独学でエンジニアを目指している taira です。
現在Linuxを学習中ですが、本日はuptimeコマンドの使い方について記事を書こうと思います

## `uptime`とは

Linuxシステム上で `uptime` コマンドを実行すると、以下の情報を素早く確認できます。

1. **現在時刻**\
   コマンドを実行した時のシステム時刻。

2. **起動後の経過時間 (uptime)**\
   システムが最後に起動してから、どのくらいの時間が経過しているか。

3. **ログインしているユーザー数**\
   現在システムにログインしているユーザー数。

4. **ロードアベレージ (load average)**\
   CPUが処理待ちを含めてどれだけ負荷を受けているかを示す指標。1分、5分、15分の平均負荷が表示されます。
   この数値がCPUコア数を大幅に超えると、システムが高負荷状態であることを意味します。

## `uptime` の基本出力例

```bash
$ uptime
 18:25:45 up 3 days,  2:14,  2 users,  load average: 0.04, 0.05, 0.01
```

- `18:25:45` → 現在時刻
- `up 3 days, 2:14` → 起動後の経過時間
- `2 users` → ログイン中のユーザー数
- `0.04, 0.05, 0.01` → 1分、5分、15分のロードアベレージ

---

## ロードアベレージの目安

ロードアベレージは、CPUが処理中や処理待ち状態にある「タスクの平均数」です。以下の点を確認しておくと負荷状況を判断しやすいでしょう。

- **コア数以下の値の場合**： ほぼ余裕があるか、正常に稼働している状態
- **コア数程度の値の場合**： CPUがしっかり使われている状態（問題とは限らない）
- **コア数を大幅に超える値の場合**： CPUがタスクを捌ききれず、処理待ちが多くなっている可能性があります。サーバー上で稼働している処理を見直して軽くするか、ハードウェアを増強するかを検討する必要があります。



### CPUコア数の確認例

```bash
grep -c ^processor /proc/cpuinfo
```

例えば、4コアの場合でロードアベレージが2や3なら余裕、4で並行、8近くあると処理待ちや遅延が発生し始めているかもしれません。

---

## まとめ

- システムの稼働時間や現在の負荷、ログインユーザー数を素早く把握するためのコマンド。
- 日常的なシステム監視やトラブルシュートに役立つ。
AWS AMI で作成した Redash を v8 から v10.1 にアップグレードする手順

# 公式

- https://redash.io/help/open-source/setup/
- https://github.com/getredash/redash/releases/tag/v10.0.0


# 手順

EC2サーバーにssh接続して、以下の手順をとる


```
sudo su -
```

```
cd /opt/redash/
```

```
vim docker-compose.yml
```

docker compose を以下に書き換える

```yaml
version: "2"
x-redash-service: &redash-service
  image: redash/redash:10.1.0.b50633
  depends_on:
    - postgres
    - redis
  env_file: /opt/redash/env
  restart: always
services:
  server:
    <<: *redash-service
    command: server
    ports:
      - "5000:5000"
    environment:
      REDASH_WEB_WORKERS: 4
  scheduler:
    <<: *redash-service
    command: scheduler
  scheduled_worker:
    <<: *redash-service
    command: worker
    environment:
      QUEUES: "scheduled_queries,schemas"
      WORKERS_COUNT: 1
  adhoc_worker:
    <<: *redash-service
    command: worker
    environment:
      QUEUES: "queries"
      WORKERS_COUNT: 2
  worker:
    <<: *redash-service
    command: worker
    environment:
      QUEUES: "periodic emails default"
      WORKERS_COUNT: 1
  redis:
    image: redis:5.0-alpine
    restart: always
  postgres:
    image: postgres:9.6-alpine
    env_file: /opt/redash/env
    volumes:
      - /opt/redash/postgres-data:/var/lib/postgresql/data
    restart: always
  nginx:
    image: redash/nginx:latest
    ports:
      - "80:80"
    depends_on:
      - server
    links:
      - server:redash
    restart: always
```

停止

```
docker-compose stop server scheduler scheduled_worker adhoc_worker
```

```
docker-compose up --force-recreate --build
```

redashデータのマイグレーション

```
docker-compose run --rm server manage db upgrade
```

起動

```
docker-compose up -d
```


# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura
Rust学習日記2~Classねぇの？~

# Rustでオブジェクトつくりたい
まんまなんですが、オブジェクト作ると言うとclassですよね。
じゃぁ他言語のようにClassを……ないやんけGoみたいに色々としないといけないの！？
安心してください、高級言語ですよ。
とにかく難しいRustさん！？

### struct
雑に言ってしまえば、クラスって構造体に色々くっついた何かですよね？（雑にぶん投げんな）
Pythonとかは構造体がなく、クラスで構造体も表現しちゃうって3年前にIoTの現場でげろげろしてた自分が言ってた！！
それとはちがい、Rustは構造体が存在するので、作っちゃいましょう
```Rust
struct Car {
    make: String,
    model: String,
    year: u32,
    engine: String,
}
```
みんな大好き車構造体です。オブジェクト指向の解説の時に、いやと言うほどみたんじゃないでしょうか？
これだとメンバ関数とかコンストラクタもないので、クラスと同じようには使えないです。
Rustってメソッドが前回の値の所有権の関係上やたら面倒臭いことになるって聞いたんですがまじっすかね？

### impl
さてすでに作られている車構造体に対して、実装を定義していきましょう。Implementationであってるよね？（調べなさいよ）

```Rust
// 車構造体
struct Car {
    make: String,
    model: String,
    year: u32,
    engine: String,
}
// 実装
impl Car {
    fn new(make: &str, model: &str, year: u32, engine: &str) -> Self {
        Car {
            make: make.to_string(),
            model: model.to_string(),
            year,
            engine: engine.to_string(),
        }
    }

    fn display_info(&self) {
        println!("{} {} ({}) - Mileage: {} km", self.year, self.make, self.model, self.engine);
    }
}
```
Rustにはコンストラクタなんて便利なものはないので、自前でnewを実装しコンストラクタ代わりにします。
「コンストラクターがなければ、作ればいいじゃない」精神ですね。マリー・アントワネットかよ（史実では言っていない）
impleは文字通りCarのコンストラクターやメソッドなど実装を作っています。これで基本的にはクラスはできます。

```Rust
// 車構造体
struct Car {
    make: String,
    model: String,
    year: u32,
    engine: String,
}
// 実装
impl Car {
    fn new(make: &str, model: &str, year: u32, engine: &str) -> Self {
        Car {
            make: make.to_string(),
            model: model.to_string(),
            year,
            engine: engine.to_string(),
        }
    }

    fn display_info(&self) {
        println!("{} {} ({}) - Mileage: {} km", self.year, self.make, self.model, self.engine);
    }
}
fn main() {
    let mut my_car = Car::new("Toyota", "Corolla", 2020, "V8");

    my_car.display_info();
}
```
ね？簡単でしょ。

### 抽象クラスは？
クラスといえば抽象化が欲しいですよね。もろちんそちらの方もご用意されています。
``` Rust
trait Adder {
    fn add(&self, a: i32, b: i32) -> i32;
}

struct MyClass;

impl Adder for MyClass {
    fn add(&self, a: i32, b: i32) -> i32 {
        a + b
    }
}

fn main() {
    let obj = MyClass;
    obj.add(1 + 2);
}
```
```Adder```の抽象実装を```MyClass```に入れるという意味となります。へー（興味薄い）
いまいち、これだけでクリーンアーキテクチャやろうとしたら爆発しちゃいそうなんで……ちょっと何か手を考えないといけないですね。
回答は持っているので、読み込み学習になるはず
次はトレイト + dynでの動的ディスパッチですかね。
花粉症で死にすぎて思うように作業が進まぬ。
【バイブコーディング】AIと共に創る新時代のプログラミング

# はじめに
近年、AI技術の進化により、プログラミングの手法が大きく変わりつつあります。その中でも特に注目されているのが「バイブコーディング（Vibe Coding）」です🚀

# （追記）この記事を音声対話形式で

対話形式の音声でも聞けます😂
https://notebooklm.google.com/notebook/6c99a911-b95b-456f-ad23-342b99cc72e8/audio
NotebookLMにて2人のAIが対話形式で話しています！

# バイブコーディングとは
バイブコーディングとは、AIを活用して、開発者が自然言語で指示を出すだけでコードを生成し、アプリケーションを構築する新しいプログラミング手法です！

つまり、**AIとの対話及びコピペのみで作成する**コーディングスタイルのことです！

![youtube-thumbnail-1742308001821.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/dc5269d0-4d18-4af4-8eb6-e63deff5d822.png)

# 名付け親
[アンドレイ・カルパシー](https://x.com/karpathy "X")さんによって名付けられました

こちらのポストから広がっています↓

https://x.com/karpathy/status/1886192184808149383

<details><summary>グーグル翻訳↓　私が「バイブコーディング」と呼ぶ新しい種類のコーディングが...
</summary>

> 私が「バイブコーディング」と呼ぶ新しい種類のコーディングがあります。
> バイブに完全に身を任せ、指数関数を受け入れ、コードが存在することすら忘れるコーディングです。
> LLM (例: Cursor Composer w Sonnet) があまりにも優れすぎているため、それが可能になっています。
> また、私は SuperWhisper を使って Composer と対話するだけなので、キーボードにはほとんど触れません。
> 「サイドバーのパディングを半​​分に減らす」など、最も馬鹿げたことを要求します。
> 探すのが面倒だからです。
> 常に「すべて受け入れる」を選択し、差分はもう読みません。
> エラー メッセージが表示されたら、コメントなしでコピーして貼り付けるだけです。
> 通常はそれで解決します。
> コードが私の通常の理解を超えてしまうと、しばらくはじっくり読む必要があります。
> LLM ではバグを修正できないこともあるので、回避するか、バグがなくなるまでランダムな変更を依頼します。
> 週末の使い捨てプロジェクトとしては悪くありませんが、それでもかなり面白いです。
> 私はプロジェクトや Web アプリを構築していますが、実際にはコーディングをしているわけではありません。
> ただ何かを見て、何かを言って、何かを実行して、何かをコピーして貼り付けるだけで、ほとんど動作します。</details>

# バイブコーディングの背景
大規模言語モデル（LLM）の進化により、AIが高精度なコード生成やデバッグを行えるようになりました。
これにより、従来のプログラミングの概念が再定義されています！

# 動画
こちらの方がバイブコーディングについて動画で分かりやすく紹介されています💪

<iframe width="560" height="315" src="https://www.youtube.com/embed/sR81guBQmw8?si=3Yy47-s-uqWtmcal" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

# バイブコーディングのメリット✨
- 開発速度の向上🚀
  - AIがコード生成を担うことで、プロジェクトの開発スピードが飛躍的に向上します

# バイブコーディングツール🛠️
Replit、Cursor、Windsurf、LovableなどのAI搭載開発環境が登場し、AIと対話しながらコードを生成・修正することが可能です💻️

## Replit
https://replit.com/

## Cursor
https://www.cursor.com/ja

## Windsurf
https://codeium.com/windsurf

## Lovable
https://lovable.dev/

# 終わりに📝
お読み頂きありがとうございました！

**バイブコーディング**は、AIと人間が協働する新しいプログラミングの形を示しています。効率性と創造性を両立させるこの手法は、今後ますます注目されそうです！

参考↓のbackspace.fm、ドリキンさんの動画も最高です！

# 参考
https://www.perplexity.ai/page/vibe-coding-s-rise-in-software-.OYRvZGhSlGYIqjRND04fA

https://www.youtube.com/watch?v=D2bJ1KdRYuw

https://www.youtube.com/watch?v=ltKeFVLFsYw
Ollamaのインストール手順

## はじめに

Ollamaをインストールする手順になります。インストール方法には、自動でインストールする方法と、手動でインストールする方法とがあります。

自動でインストールするとすべての環境設定を自動でやってくれます。Ollamaを動かすためのデーモン（Ollama.service）も一緒にインストールされます。

手動でインストールすると、ollamaユーザー、ollamaグループを自分で新規登録したり、Ollama.serviceを自作したりと何かとやることが大変です。

手動の方が勉強になりますが、トラブルを最小限にしたい場合は、自動でインストールした方が無難ではあります。下記にあるスクリプトがスラスラと読めない場合は自動で行った方が無難でしょう。

```
https://ollama.com/install.sh
```

## 環境
Ubuntu20.4　(Windows10 + Vagrant)

## 公式サイト

https://github.com/ollama/ollama/blob/main/docs/linux.md

## 手順

インストール用のスクリプトを公式サイトからダウンロードして、Bシェルに渡して実行しています。インストールには結構時間がかかります。

```
$curl -fsSL https://ollama.com/install.sh | sh
```

インストールされたことを確認します。

```
$ollama -v
$ollama --version
```

サービスが起動されていることを確認します。

```
$systemctl status ollama.service
```

GPUでなくてもCPUで動作するDeepSeekの一番軽いモデルを動かしてみます。軽いといっても、それでも容量は1.1GBあります。くれぐれも、パラメータ数が多いモデル（容量が多いモデル）をCPUで動かさないようにご注意ください。

初回はモデルのインストールから始まります。

```
$ollama run deepseek-r1:1.5b
```

実行してみたところ日本語に質問に対し中国で答えてきました。日本語に翻訳してくださいと言ったところ、次は英語で答えてくれました。折角ではありますが、日本語には対応していないようです。

国産のLLMもOllmadeで使えるようになっています。国産のLLMは探せばとわりとたくさんあるようです。たくさんありすぎてどれがいいのかは分かりませんが、多くの日本語を学習して、更にファインチューニングもしているようなので、日本語には強いはずです。

インストールの仕方は公式サイトに載っています。

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94029/e2dce20d-52bb-c341-950f-f9a698f77172.png)

## その他のコマンド（参考）

インストール済のLLMの一覧を表示します。

```
$ollama list
```

LLMを削除します。

```
$ollama rm llama3
```

Ollamaをアンインストールをしたい場合はこちらに手順があります。

https://github.com/ollama/ollama/blob/main/docs/linux.md#uninstall
Amazon BedrockエージェントでThe server encountered an error processing the Lambda response.のエラーが出た時の対処法

## 事象

Amazon Bedrockエージェントで、アクショングループに外部APIを叩いてレスポンスを受け取るLambda関数を選択し、テストエージェントでメッセージを送って動作確認をしようとしたところ、以下のエラーが発生しました。

```
The server encountered an error processing the Lambda response. Check the Lambda response and retry the request
```

訳: 「サーバーで Lambda レスポンスの処理中にエラーが発生しました。Lambda レスポンスを確認してリクエストを再試行してください。」

## 解決法

Lambdaのレスポンスを[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/agents-lambda.html#agents-lambda-response)の形式に合わせることで解決しました。

Lambda関数例
```
import json
import urllib.request

def lambda_handler(event, context):
    api_url = "https://example.com/api"
    request_data = json.dumps(event.get('requestData', {})).encode('utf-8')
    request = urllib.request.Request(api_url, data=request_data, headers={'Content-Type': 'application/json'}, method='POST')
    
    with urllib.request.urlopen(request) as response:
        response_data = response.read().decode('utf-8')
        response_body = {
            'application/json': {
                'body': json.loads(response_data)
            }
        }

        action_response = {
            'actionGroup': event.get('actionGroup'),
            'apiPath': event.get('apiPath'),
            'httpMethod': event.get('httpMethod'),
            'httpStatusCode': response.getcode(),
            'responseBody': response_body
        }

        api_response = {
            'messageVersion': '1.0',
            'response': action_response,
            'sessionAttributes': event.get('sessionAttributes', {}),
            'promptSessionAttributes': event.get('promptSessionAttributes', {})
        }

        return api_response
```


## 終わりに

APIのレスポンスをそのままエージェントに渡せば良いと思っていたため、Lambdaからのレスポンス形式に細かい指定があるのは盲点でした。
参考になれば幸いです。

参考
https://note.com/yutaito_opst/n/nb10b685073ec
クラウド入門：「SaaS・PaaS・IaaS」の違いを体系的にアウトプットしてみた

## はじめに

クラウドコンピューティングの普及に伴い、SaaS、PaaS、IaaSといった用語を耳にする機会が増えました。

:::note info
**しかし、それぞれの違いを明確に理解している人は意外と少ないかもしれません。**
:::

本記事では、それぞれの特徴や違いについて解説します。

## 書こうと思ったきっかけ
近年、企業のクラウド導入が加速する中で、適切なサービス選択が求められています。

:::note warn
***しかし、SaaS・PaaS・IaaSの違いが分からず、最適な選択ができていないケースもあります。***
:::

そこで、それぞれの特徴を分かりやすく整理し、理解を深める手助けになればと思い、本記事を投稿しました。

**IaaS、PaaS、SaaSのイメージ図について**

![Screenshot 2025-03-18 at 11.28.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/2605ffb9-9df5-472c-aa01-9bef4d127bf7.png)
引用画像：https://cloud-ace.jp/column/detail01/

## SaaS（Software as a Service）
SaaSは「サービスとしてのソフトウェア」を意味し、インターネット経由でソフトウェアを提供する形態です。ユーザーはインストール不要で、ブラウザなどを通じてソフトウェアを利用できます。

#### **特徴**
- ソフトウェアのインストールや管理が不要
- インターネット接続があればどこからでも利用可能
- 運用・保守が不要で、常に最新バージョンを利用可能

#### **代表的なSaaSの例**
- Google Workspace（Googleドキュメント、スプレッドシート、Gmailなど）
- Microsoft 365
- Dropbox
- Slack

## PaaS（Platform as a Service）
PaaSは「サービスとしてのプラットフォーム」を意味し、アプリケーション開発や運用のためのプラットフォームを提供するサービスです。開発者はインフラの管理を気にせず、アプリケーション開発に専念できます。

#### **特徴**
- サーバー、OS、ミドルウェアの管理が不要
- アプリケーションの開発・デプロイが容易
- 自動スケーリングや負荷分散機能を提供

#### **代表的なPaaSの例**
- Google App Engine
- AWS Elastic Beanstalk
- Microsoft Azure App Services
- Heroku

## IaaS（Infrastructure as a Service）
IaaSは「サービスとしてのインフラ」を意味し、仮想サーバーやストレージ、ネットワークなどのインフラを提供するクラウドサービスです。企業はオンプレミスのサーバーを持たず、必要に応じてリソースを利用できます。

#### **特徴**
- 物理的なハードウェアの管理が不要
- 柔軟なスケーリングが可能
- 高度なカスタマイズが可能

#### **代表的なIaaSの例**
- Amazon Web Services（AWS EC2、S3など）
- Microsoft Azure（Azure Virtual Machinesなど）
- Google Cloud Platform（Compute Engineなど）

## SaaS・PaaS・IaaSの比較表

|   | SaaS | PaaS | IaaS |
|---|------|------|------|
| **提供内容** | アプリケーション | 開発プラットフォーム | インフラ（サーバー・ストレージなど） |
| **ユーザーの管理範囲** | なし（運用不要） | アプリ開発のみ | OSやミドルウェアの設定が必要 |
| **メリット** | 手軽に利用可能 | 開発が容易 | 柔軟なカスタマイズが可能 |
| **デメリット** | カスタマイズが難しい | 特定の環境に依存する可能性 | 運用管理の負担がある |

## まとめ
SaaS、PaaS、IaaSはそれぞれ異なる用途に適したクラウドサービスの形態です。企業や個人のニーズに応じて適切なサービスを選択することで、業務の効率化やコスト削減が可能になります。

- **手軽にソフトウェアを利用したいなら「SaaS」**
- **アプリケーション開発に集中したいなら「PaaS」**
- **インフラを自由に構築・管理したいなら「IaaS」**

自社のIT戦略や開発ニーズに合わせて、最適なクラウドサービスを活用してみてください！！