OmniAICreator/Qiita-1.07M huggingface dataset:
【VBA入門③】If文・For文を完全マスター！条件分岐と繰り返しの基本✨

# 第3章：条件分岐と繰り返し構文

こんにちはっ🌟  
マクロ魔法少女のまくるだよ🐰

今回は、**「もし〜だったら」「何回も繰り返す」** を実現する  
VBAの超重要スキル「条件分岐」と「繰り返し」について学んでいこう！

---

## 🔍 If文（条件分岐）の基本

「もし〇〇だったら〜する」っていうロジックを書くのが **If文**！

```vba
If 条件 Then
    ' 条件が真のときの処理
End If
```

### 例：

```vba
Dim score As Integer
score = 85

If score >= 80 Then
    MsgBox "合格おめでとう🎉"
End If
```

---

## 🧭 If ～ Else ～ End If（分岐あり）

「もし〇〇なら〜、それ以外は〜」の形も使えるよ！

```vba
If score >= 80 Then
    MsgBox "合格！"
Else
    MsgBox "不合格…"
End If
```

さらに複雑な分岐も👇

```vba
If score >= 90 Then
    MsgBox "優秀！"
ElseIf score >= 70 Then
    MsgBox "合格！"
Else
    MsgBox "もう一息！"
End If
```

---

## 🔁 For文（繰り返し）の基本

「〇回くり返す」は **For文** を使うよ！

```vba
For i = 開始値 To 終了値
    ' 繰り返す処理
Next i
```

### 例：1〜5まで表示

```vba
Dim i As Integer

For i = 1 To 5
    MsgBox i
Next i
```

---

## 🔄 Do While（条件付きループ）

条件がTrueの間、ずっとループするのが **Do While**！

```vba
Dim i As Integer
i = 1

Do While i <= 5
    MsgBox i
    i = i + 1
Loop
```

無限ループにならないように、カウンタの更新（`i = i + 1`）を忘れずにねっ⚠️

---

## 🔥 ExitやContinueで制御する

ループを途中で抜けたいときは `Exit For` や `Exit Do`  
一部をスキップしたいときは `GoTo` や `If` との組み合わせ！

```vba
For i = 1 To 10
    If i = 3 Then Exit For
    MsgBox i
Next i
```

---

## 📌 まとめ

- If文で「条件によって処理を分ける」
- For文・Do文で「くり返す処理」を実装！
- Exitやカウント変数でループ制御を忘れずに！

---

次回は、**「第4章：SubとFunctionの違い」**  
あなたの魔法を部品化して、もっと使いやすくしていこうっ✨

#VBA初心者 #Excelマクロ #業務効率化
【GitHub】ブランチ直接プッシュ禁止の設定

## はじめに

開発のメインブランチやリリース用のブランチにに対して直接のプッシュを禁止して、プルリクを出さないと変更を反映できないようにできます。
誤操作やレビューなしの変更は危険であり、チーム開発する際の安全性を高められます。

これにより  
・指定されたリモートブランチへのプッシュが拒否される  
・プルリク経由でのレビュー・テストフローが徹底できる

## 手順

### 1. リポジトリ設定ページの表示

- GitHubで対象リポジトリを開く  
- 上部メニューから `Settings` をクリック  
- 左メニューの `Branches` を選択

### 2. ブランチ保護ルールの追加

- `Branch protection rules`内の `Add rule` または `Create rule` をクリック  
- `Branch name pattern`に保護対象のブランチ名を入力
![スクリーンショット 2025-06-05 233602.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820411/62f5ce74-3810-4ab0-89a2-4e522889ca66.png)

### 3. プッシュ禁止の設定

- `Require a pull request before merging`にチェック  
- `Block force pushes`にチェック
- ページ下部の `Create` または `Save changes` をクリック  
![スクリーンショット 2025-06-06 093320.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820411/dc6bcce1-dcaf-419c-8ee5-0cf1a6aef375.png)


## 補足
「Require a pull request before merging」内項目（オプション）は下記の記事で。
[【GitHub】プルリクのルール設定](https://qiita.com/isshi777/items/91ff31755e5145e48e9e)
docker代替 for mac

# overview

Macだとdocker desktopを使っても良いのだが、よりライセンス的に使いやすいものを、、、というわけでcolima.

# setup

```
brew install colima
brew install docker
```

# how-to

* 起動: ```colima start```
* 状態確認: ```colima status```
* list: ```colima list```
* 停止: ```colima stop```

* If you want to start without explicitly executing, ```brew services start colima```

* If you want to change the config, ```colima start --edit```
    * or, ```colima stop; colima start --cpu 8 --memory 8```
サブカル数学(日記



## ✅ 1. 統計 × ネット文化 × 数理モデル

### 第1章：ネット文化データと統計の基礎

* 1.1 SNSの「いいね数」「RT数」の特徴量と単位
* 1.2 ヒストグラム・代表値（平均・中央値・最頻値）
* 1.3 箱ひげ図と外れ値の視覚化
* 1.4 ログ変換と歪度・尖度の確認

### 第2章：時系列とバズの統計分析

* 2.1 時系列データの取得と可視化（投稿数/日）
* 2.2 移動平均・差分・トレンド分離
* 2.3 自己相関・周期性の導入

### 第3章：確率と分布の導入

* 3.1 ポアソン分布とネット投稿頻度
* 3.2 ベルヌーイ・二項分布とバズ投稿の成否
* 3.3 正規分布・指数分布と滞在時間・再生時間の分布

---

## ✅ 2. 音楽 × 波

### 第1章：音と波の基本概念

* 1.1 音波の正体と媒質：縦波・横波の違い
* 1.2 振幅・波長・周波数と音の関係
* 1.3 単音（正弦波）と複雑音の違い

### 第2章：信号処理と時間領域分析

* 2.1 サンプリング定理とナイキスト周波数
* 2.2 離散時間信号と配列化
* 2.3 波形の可視化（時間軸 vs 振幅）

### 第3章：フーリエ変換による周波数解析

* 3.1 基本的なフーリエ級数とスペクトルの意味
* 3.2 離散フーリエ変換（DFT）とFFTの導入
* 3.3 単音・和音のスペクトル分解

---

## ✅ 3. カメラ × CMOSイメージセンサー

### 第1章：イメージセンサーの基本構造

* 1.1 光電効果とフォトダイオードの仕組み
* 1.2 CMOSとCCDの違い
* 1.3 各画素の読み出し処理（ローリング／グローバルシャッター）

### 第2章：画質の決定要因

* 2.1 解像度・画素ピッチ・受光面積
* 2.2 ISO感度・S/N比・ダイナミックレンジ
* 2.3 セル構造とカラー補間（ベイヤー配列）

### 第3章：画像データの基本形式

* 3.1 RGB画像と3次元配列
* 3.2 NumPyによるピクセル操作
* 3.3 輝度ヒストグラムと輝度変換

---

## ✅ 4. サブカル × 機械学習

### 第1章：サブカルデータの収集と整備

* 1.1 Webスクレイピングによるメタデータ収集（作品名・ジャンル・年代）
* 1.2 データの整形（欠損補完・カテゴリ整理）
* 1.3 データフレーム操作と可視化（pandas・matplotlib）

### 第2章：教師なし学習による特徴把握

* 2.1 距離と類似度：ユークリッド距離とコサイン類似度
* 2.2 K-meansクラスタリングとジャンル分布
* 2.3 主成分分析（PCA）による次元削減と散布図表示

### 第3章：テキストベースの特徴量化

* 3.1 Bag-of-Wordsによるキャラ名のベクトル化
* 3.2 TF-IDFと登場頻度の重み付け
* 3.3 Word2Vecの意味ベクトル導入（基礎）
初投稿

# はじめに

これから投稿する記事は自身が学んだことをフィードバックとして記載するものです。

# 自己紹介

現在、ヘルプデスクの業務をしている社会人２年目です。妻と子供がいます。
現職の業務はやりがいのある業務ではあるが自身の技術力が上がらず将来に不安を感じており、エンジニアへ転職する為に勉強中。
# 目標

・基本情報技術者試験取得
・JavaSilver取得
・プログラミングの実務経験が詰める会社への転職

# 最後に
技術ともに未熟な為、投稿内容に誤りがあるかもしれませんがよろしくお願いいたします。
スパークルアイコン とは？CSA対策3

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

## ✨ スパークルアイコンとは？

* **意味**：AI（Now Assist）が提案・補助してくれている場所に表示
* AIによる推奨値を提供する。フォームの入力をこうりつかすｒ
* **表示場所の例**：

  * フィールドの横（自動入力候補があるとき）
  * サジェストされた返信や解決策
  * レコード作成時のAIによる推奨値
![スクリーンショット 2025-06-05 214942.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624279/fa9a54f6-f538-4125-a00a-6ef4da42d35d.png)

## PDIで出すには？
- PDIでは出せないみたいです。
SLAとは？CSA対策2

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

# SLAとは

* **SLA = タスク対応の時間目標を自動で管理・監視する仕組み**
* 指定した時間内に完了するように管理するため
* タスクごとに自動的に適用される
* 期限が過ぎるとアラートをトリガーできる
* 例：P1インシデントは4時間以内に解決、など。

## 🔧 主な構成

| 要素      | 役割                     |
| ------- | ---------------------- |
| SLA定義   | どの条件にどんな時間目標を適用するか     |
| スケジュール  | 対応時間を測る営業時間（例：平日9-17時） |
| ポリシー    | SLAの優先順位を制御            |
| SLAレコード | タスクごとのSLAの進捗記録         |

## 🔄 状態

* **In Progress**：計測中
* **Paused**：一時停止中（顧客待ちなど）
* **Completed**：時間内に完了
* **Breached**：時間超過


 ## SLAに関する主なテーブル一覧
 
| テーブル名（技術名）               | UI名／役割                                        |
| ------------------------ | --------------------------------------------- |
| **`contract_sla`**       | **SLA Definition（SLA定義）**：どの条件にどんな時間目標を適用するか。 |
| **`task_sla`**           | **SLA（Task SLA）**：タスクごとに作成されるSLA記録。進捗・状態を持つ。  |
| **`sla_definition`**（旧名） | `contract_sla`と同義。古いバージョンで使用。                 |
| **`cmn_schedule`**       | **Schedule（スケジュール）**：営業時間の定義（SLAの時間計測に使用）。    |
| **`cmn_schedule_span`**  | スケジュールの具体的な時間帯（時間範囲）                          |
| **`business_calendar`**  | ビジネスカレンダー（※補助的に使用されることあり）                     |
| **`task`**               | SLA対象となるタスク（Incident, Request などの親テーブル）       |

## 🧠 補足（管理メニュー）
メニュー名：Service Level Management

ナビゲーターで：
Service Level Management > SLA Definitions
Service Level Management > Task SLAs
Service Level Management > Schedules
【Bedrock開発入門 刊行後サポート】8章のStep Functionsのところが激変してます

Claude 9に続いてStep Functionsに背中を刺されております。

Amazon Bedrock 生成AIアプリ開発入門まだまだイケると思います。

https://www.sbcr.jp/product/4815626440/

8章で扱っているStep Functionsですが、大幅な機能更新があったので書籍のままではできないことが発覚しました。

はじめの手順が大幅に変わっているので、本投稿を参考にしてください。

## 開始手順

1. Step Functionsの管理画面を開きます。「今すぐ始める」をクリックします

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/f947fb29-6bd3-455d-b960-3c0c3e595e1c.png)

1. 「自分で作成する」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/df3f5049-cff9-4096-96a7-8b28c4ccfacd.png)

1. ここの手順が変更になってます。ステートマシン名に「 **Bedrock-StateMachine** 」と入力し、ステートマシンのタイプを「 **Express** 」に変更し、「続行」をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/b50ce626-bcbf-484f-af0a-4d5a2d0ade34.png)

1. はい。ここが超絶つまりポイントです。右側のワークフローのステートマシンクエリ言語を「JSONPath」に変更します。「JSONPath」に変更します。「JSONPath」に変更します。大事なので、はい、連打しました

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/133b6b38-7566-40c4-8cc0-65dfac84fd38.png)


ここまで行けたらあとは書籍の通りで大丈夫（であることを期待）


書籍執筆時点では、JSONPath形式しか存在しなかったのですが、2024/11頃に新しく「JSONata」に対応しました。更にデフォルト値がこちらになってしまったようです。

JSONataに関するブログ記事を紹介しておきます。

https://aws.amazon.com/jp/blogs/news/simplifying-developer-experience-with-variables-and-jsonata-in-aws-step-functions/

## 参考URL

https://github.com/minorun365/bedrock-book


https://qiita.com/moritalous/items/43f885d33c18a6a97381
API Gateway+Lambda+S3で画像アップロードサイトを作ってみた

## はじめに
こちらの内容はハンズオン形式ではなく、大まかな手順と所感を記載した投稿となります。
悪しからず。
結婚式で写真を撮ってもらった際に、それぞれから写真を送ってもらうのが手間なので、QRコードを配布し、そこからアップロードサイトに飛んでもらって写真や動画をアップロードしてもらおうという案から構築しようと思った次第です。

## 機能のイメージ
・S3の静的ホスティングで画像アップロードサイトを公開
・セキュリティを高めるためにLambdaで署名付きURL発行
・サイトはアップロードの機能のみで、アップロードされる画像は別のS3に保存され、CLIコマンドでS3バケットからダウンロードする

## やってみた
とりあえず、Claudeに作ってみてもらった。
以下文章を投下
「S3への画像アップロードサイトを作成したいです。 画像アップロード画面はS3の静的ホスティングを利用する予定です。 画像の拡張子は全てに対応したいです。 ある程度セキュアで簡単に実装できる方法を教えて。」

回答としてはやはり署名付きURLを使った方法を提案してもらった。
（コードが長すぎるのでここでは割愛）

構成は「**API Gateway＋Lambda＋S3**」

### 手順まとめ
■フロント側
・静的ホスティング機能を持ったS3バケットを作成し、画像アップロードサイト（index.html）を配置
・パブリックアクセスを許可し、バケットポリシーには誰でもOKだがやれることは「GetObject」だけにする

■バックエンド側
・画像を保存するためのS3バケットを作成
・パブリックアクセスはブロックでOK
・バケットポリシーも空でOK
・CORSの設定が必要なため、S3のCORSに以下を追加
```:json
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": []
    }
]
```
・Lambdaで署名付きURL生成をする設定
・LambdaにはS3（画像保存用バケット）にアクセスする権限を付与
・API GatewayでREST APIを構築
・Lambdaプロキシ統合とCORS有効化が必須
・出来たエンドポイントをフロントエンド（index.html）に設定



S3バケットは公開用と保存用で分けることで、セキュアになる。
（公開用とまとめてしまうと、公開用の方で保存される画像がさらされることになるため）
保存用のS3バケットはパブリックアクセスを不可としており、なおかつ発行された署名付きURLでしか画像を置くことができないためセキュアになっている。
署名付きURLには期限を設定でき、例えば期限を5分にしておくと、もし署名付きURLが何らかの形でさらされても5分後には使えなくなる。

## 追加要件
ここまでで動作確認が取れたところで、複数アップロードが出来ないことに気付いた。
自分はインフラエンジニアでコードのことは全然なので、Claudeに助けてもらい複数枚アップロードの機能も実施。
さらに、動画も入れたいと思い、動画も入れられるようにした。
そうすると、アップロード時間がかなり掛かることに気付く。

ここからさらにアップロード時間を早めるため、マルチアップロード機能を追加する。
複数枚アップロードの機能はフロントエンド側だけの修正で良かったが、
動画アップロード、マルチアップロード機能はフロントとバックエンド両方の修正が必要だった。
コードがほとんど分かっていないまま進めているので、どちらがなんの機能を持っているか把握しておらず詰まることが多いと感じる。
最後に、画像アップロードをすることしかできないと言えど誰でも入れるURLなので、QRコードでしか入れないようにする。
URLの後ろに「/?token=******」と入れて、QRコードにし、フロントとバックエンドでそのトークンが入ったものしかアクセスできないようにすることでセキュリティを高める。

## 所感
ClaudeのコーディングはChatGPTよりかなり制度が高いように感じた。
ChatGPTは調べるのがめんどくさそうなことを聞くと簡潔に答えてくれるがコード生成の制度は微妙だった。
（ただ最近Codexと呼ばれるコーディングエージェント機能が追加されたらしい。有料会員じゃないと使えないけど）
いきなり色々な機能を頼んでコード生成してもらうと大体うまくいかない。まず最小限で動く構成を提案し、そこから1つ1つ機能の追加を頼んでいくと上手くいく。
画像アップロードサイトなんて単純だと思っていたが、拡張子の対応だったり、一括でのアップロードだったり、アップロードの速度が単純な設定だと遅かったり、1つ1つ改善を行っていく作業は新鮮だった。
生成してもらったものをそのまま使っているのでデバッグも簡単なものしか出来ないが、今はデバッグ機能さえもAIの発展により可能になってそうなので、インフラエンジニアがコードを勉強する際はどこまで知識をつけるべきなんだろうという疑問🤔

以上！！
生成AIアップデートまとめ（2025/5/26週）

[週刊生成AI with AWS(2025/5/26週）](https://aws.amazon.com/jp/blogs/news/weekly-genai-20250526/)



## Amazon Neptune MCP サーバーの発表
グラフデータベースの Amazon Neptune の MCP サーバーが発表されました。
簡単な英語を使ったやり取りで、正確なグラフ回答を受け取ることができます。

・openCypherおよびGremlinクエリ、スキーマ発見、自然言語クエリがサポート
・Amazon Q CLI、Cursor、Claude CodeのようなMCP対応ツールにNeptuneをシームレスに統合

航空路線のデータセット（場所、空港、飛行ルートの情報含む）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3858908/497e815f-7965-48c5-bd44-94ebde0df098.png)

データの探索を手伝ってもらう例：JFK空港までのルート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3858908/07e54018-4b33-497d-91fc-0386a5dafd1f.png)



[引用](https://medium.com/@bechbd/simplifying-amazon-neptune-integration-with-mcp-servers-8693d78063ae)



## AWS Serverless と Containers 向けの MCP サーバーの発表
MCPサーバーは、Amazon ECS、Amazon EKS、およびAWS Serverlessの機能を深く理解したAIコードアシスタントをサポートし、より実用的なコードを生成し、本番環境への移行を加速します。

具体的な対象サービスは以下
・AWS Lambda
・Amazon Elastic Container Service (ECS)
・Amazon Elastic Kubernetes Service (EKS)

### ECS
・ロードバランサー
・ネットワーキング
・オートスレーション
・モニタリング
・Amazon ECSタスク定義

関連するすべてのAWSリソースを設定することで、数分以内にアプリケーションをAmazon ECSにコンテナ化できる。

自然言語による指示を使用して、デプロイ上の問題も解決できる。

### Kubernetes環境
特定のEKS環境に関する最新のコンテキスト情報をAIアシスタントに提供
・最新のEKS機能
・ナレッジベース
・クラスターの状態

上記情報を元に、初期セットアップから本番デプロイまで、アプリケーションのライフサイクル全体を通じて、より正確でカスタマイズされたガイダンスを提供。

### Serverless
AWS Serverless Application Model Command Line Interface（AWS SAM CLI）統合を使用すると、実績のあるアーキテクチャパターンを実装しながら、イベントを処理し、インフラストラクチャをデプロイできる。

・コードとしてのインフラストラクチャ
・AWS Lambda固有のベストプラクティス
・AWS Lambdaのイベントソースマッピングのすきーｍ
上記のガイダンスも提供される。
LLMのContext windowサイズと画像対応

|       |context window| 画像対応   |
|:------|:---|:-------|
|Command-a        |256k|x|
|mistral-small3.2 |128k|◯|
|mistral-large    |128k|x|
| Gemma3 27B      |128k|◯|
|Llama3.3 70B     |128k|x|
|Llam4 16x17b     | 10M|◯|
|Phi4-reasoning   |32k |x|
|Qwen2.5 VL 72B   |125k|◯|
|Qwen3 32B        |40k|x|
|Qwen3 30B        |40k|x|
pythonのユーザー定義関数「(円環スライス処理)」をAI先生ヘ。  

・(円環スライス処理)はChatGPT先生のタイトルです。
```
sympy のソースコードを教えて下さい。
入力(1,2,3,4,5)で(2,4)から 出力(2,3,4)と(4,5,1,2)を取り出したい。
入力(5,4,3,2,1)で(4,3)と(3,1)から 出力(4,3)と(3,2,1)と(1,5,4)を取り出したい。
sympy も教えて下さい。
```
# (本日の)ChatGPT先生へ
```
# 質問リスト
1. sympy のソースコードを教えて下さい。
2. 私の質問をMarkdown形式でリスト化して出力して。Markdown形式でリストからアスタリスクは削除して。1行目に、# 質問リスト の文字を出力して。最後の質問も追加して下さい。
```
#### (以下回答抜粋)
>✅ Python コード：
```python
def circular_slice(data, start_val, end_val):
    n = len(data)
    idx = lambda v: data.index(v)
    
    i = idx(start_val)
    j = idx(end_val)

    # 順方向の部分列
    forward = []
    k = i
    while True:
        forward.append(data[k])
        if data[k] == end_val:
            break
        k = (k + 1) % n

    # 逆方向の部分列
    backward = []
    k = j
    while True:
        backward.append(data[k])
        k = (k + 1) % n
        if data[k] == start_val:
            backward.append(data[k])
            break

    return forward, backward

# 使用例
data1 = [1, 2, 3, 4, 5]
print(circular_slice(data1, 2, 4))  # → ([2, 3, 4], [4, 5, 1, 2])

data2 = [5, 4, 3, 2, 1]
print(circular_slice(data2, 4, 3))  # → ([4, 3], [3, 2, 1, 5, 4])
```
>✅ SymPy を使用した実装（循環スライス機能を活用）
```python
from sympy.utilities.iterables import rotate_left

def sympy_circular_slice(data, start_val, end_val):
    n = len(data)
    # start_val が先頭に来るように左に回転
    rotated = rotate_left(data, data.index(start_val))

    # 順方向スライス
    forward = []
    for v in rotated:
        forward.append(v)
        if v == end_val:
            break

    # 逆方向スライス: end_val を先頭に持ってくる
    rotated_back = rotate_left(data, data.index(end_val))
    backward = []
    for v in rotated_back:
        backward.append(v)
        if v == start_val:
            break

    return forward, backward
data1 = [1, 2, 3, 4, 5]
print(sympy_circular_slice(data1, 2, 4))  # → ([2, 3, 4], [4, 5, 1, 2])

data2 = [5, 4, 3, 2, 1]
print(sympy_circular_slice(data2, 4, 3))  # → ([4, 3], [3, 2, 1, 5, 4])
```
>🔍 SymPy を使う意義は？
・以下省略

# Gemini先生へ

# copilot先生へ

# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)

https://qiita.com/mrrclb48z/items/b6351b48e47bcf6265c0

# いつもと違うおすすめです。
#### Qiita内
【Excel】2026年1月からLEN関数の動作が変わる話

Microsoftから公表されていますが、2026年1月からExcelの文字列関係のワークシート関数（LEN、MID、FIND、SEARCH、REPLACE関数）の動作が変更されます。

現在のExcelではサローゲトペア、絵文字が文字数「2」としてカウントされる場合がありますが、これが新しいバージョンでは正しく「1」と表示されるようです。

例えば、現在のExcelでは「𠮷野家」をLEN関数で文字数計算すると「4」になります。
![タイトルなし.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4105373/67dadcef-2c41-48cf-b177-9866cfd1bb3b.jpeg)
これが、新しいバージョンでは正しく「3」と表示されます。
ただし、現在のバージョンと同じ動作へ切り替えることもできるようです。

対象のバージョンなどはリンクを御参照ください。

https://support.microsoft.com/ja-jp/office/%E4%BA%92%E6%8F%9B%E6%80%A7%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3-49f5d3bf-d9a4-47a3-9db8-e776f664cbf9

https://techcommunity.microsoft.com/blog/microsoft365insiderblog/improving-five-excel-text-functions-len-mid-search-find-and-replace--compatibili/4339080
pythonのユーザー定義関数「(可変引数関数の改善)引数の個数をn個」をAI先生ヘ。  

・(可変引数関数の改善)はChatGPT先生のタイトルです。
```
以下のsympy のソースコードについて
・fun1の引数の個数を任意。n個にしたい。
・ユーザー定義関数の名前をステキな名前にしてほしい。

def fun2(A):
    return print(A,substr(A,1,1),substr(A,2,1)
def fun1(A,B,C):
       fun2(A)
       fun2(B)
       fun2(C)
      return
fun1("1A","2B","3C")

出力
"1A" "1" "A"
"2B" "2" "B"
"3C" "3" "C"
```


# (本日の)ChatGPT先生へ
```
# 質問リスト
1. fun1の引数の個数を任意。n個にしたい。  
2. ユーザー定義関数の名前をステキな名前にしてほしい。  
3. sympy を使ったバージョンをお願いします。  
4. FreeCAD連携 とは、何か教えて。  
5. 私の質問をMarkdown形式でリスト化して出力して。Markdown形式でリストからアスタリスクは削除して。1行目に、# 質問リスト の文字を出力して。最後の質問も追加して下さい。追番を追加して下さい。
```
#### (以下回答抜粋)
>以下に、あなたの要望を満たすように修正した sympy ではなく標準的な Python コードを示します：

```python
def print_with_split(string):
    print(string, string[0], string[1])

def majestic_processor(*args):
    for item in args:
        print_with_split(item)

majestic_processor("1A", "2B", "3C", "4D", "5E")
```
>🧠 実装例（sympy 使用）
```python
from sympy import Symbol

def divine_echo(text):
    first, second = text[0], text[1]
    sym1 = Symbol(first)
    sym2 = Symbol(second)
    print(f'"{text}"', sym1, sym2)

def celestial_parser(*args):
    for arg in args:
        divine_echo(arg)

# 実行例
celestial_parser("1A", "2B", "3C")
```
>🧪 さらにできること（発展例）
```python
from sympy import Symbol, Eq, solve

# 例：文字列リストをもとに連立方程式を自動構築（発展応用）
def algebraic_parser(*args):
    equations = []
    for arg in args:
        x = Symbol(arg[0])
        y = Symbol(arg[1])
        eq = Eq(x + y, 10)
        equations.append(eq)
    result = solve(equations)
    print("解:", result)

# algebraic_parser("xA", "yB") などで使えます
```
・以下省略

# Gemini先生へ

# copilot先生へ

# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)

https://qiita.com/mrrclb48z/items/b6351b48e47bcf6265c0

# いつもと違うおすすめです。
#### Qiita内
・いつもお世話になっております。

https://qiita.com/shiracamus/items/63f6ef513a203ee82e7c#comment-0d111ac8c8ee77de765f
チャットbotお試し用アプリ開発_4日目

# 目次
・本日の成果・考え
・最後に

### 本日の成果


前回作成したクラス図のうち以下のクラス設計書を作成。

・設定ファイルDTO
・ログDTO
・ウィンドウDTO

作成ツールはNumbersを使用。

:::note info
本当はExcelが良いのですが、インストールしてませんので代用としました。表の作成や編集がしやすいツールならなんでも良いんですが、こういう時Macなのがなぁと感じます。
:::

**想定ファイル構造**
```
src/
　├app/
　│ 　　　 
　│ 　　├logger/
　│ 　　│ 　├LoggerDto
　│ 　　│ 　└LoggerOutput
　│ 　　│ 
　│ 　　├window/
　│ 　　│ 　├WindowDto
　│ 　　│ 　├WindowView
　│ 　　│ 　└WindowLauncher
　│ 　　│ 
　│　　 ├config/
　│ 　　　　├SettingLoader
　│　　　　 └AppSettingDto
　│ 　　　 
　└Util/
　　　└.properties
```

:::note warn
各処理とそのDTOを同一パッケージに配置しています。
基本的に、DTOはパッケージプライベートにし、取出し処理を経由しないと使用できない、呼び出しができないような設計にしようと思います。
こうすることで、安易な呼び出しを制限しています。
:::

#### 設定ファイルDTO
![スクリーンショット 2025-06-05 19.46.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3338426/5c367eae-e653-44eb-8b1d-67fd6dbd0ca9.png)

#### ログDTO
![スクリーンショット 2025-06-05 19.46.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3338426/f18e6b02-067e-4856-9a31-53d5cb59ae31.png)

#### ウィンドウDTO
![スクリーンショット 2025-06-05 19.47.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3338426/a9c3df76-da0c-49d9-b14c-f15ece64bf22.png)

:::note info
DTOのインスタンス生成は基本的に引数ありのコンストラクタを使用する前提で考えています。
加えて、引数なしのコンストラクタは呼び出せないように修飾子をprivateにしています。
※引数ありを明示しているので、引数なしは自動生成されませんが、<font color=red>引数なしは使用不可ということを明示するため</font>に記載しました。
:::

### 最後に
PGの構想も頭の中にあるのにまともにコードを書かないという状況がかなり奇妙に感じます。
普段の業務では、WBS上のただの作業としか捉えていなかった設計作業も、自分で工夫しているだけに中々楽しく？感じます。
※恐ろしいところは、この設計の評価を受けることができない点です。可能な限り手戻りによる修正範囲を狭めるために、各処理の責任を小さくしていこう思います。
fish-speech のセットアップ

Ubuntu環境で fish-speech をセットアップ手順をまとめます。
実行ディレクトリ構成、仮想環境、モデル導入、WebUI・CLI両対応、動作確認まで網羅しています。

⸻

🐟 fish-speech セットアップ＆CLI音声合成 完全手順書（Ubuntu）

⸻

✅ 0. 作業ディレクトリの作成と移動

mkdir -p ~/workspace/fish-speech-project
cd ~/workspace/fish-speech-project



⸻

✅ 1. Python仮想環境の作成と有効化

python3 -m venv venv
source venv/bin/activate



⸻

✅ 2. システムパッケージのインストール（初回のみ）

sudo apt update
sudo apt install -y libsox-dev ffmpeg build-essential cmake \
  libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0



⸻

✅ 3. requirements.txt の作成と依存インストール

プロジェクト直下に requirements.txt を作成：

torch==2.4.1
torchvision==0.19.1
torchaudio==2.4.1
huggingface_hub

annotated-types==0.7.0
certifi==2025.1.31
cffi==1.17.1
comtypes==1.4.6
cryptography==44.0.1
numpy
openai
opuslib==3.0.1
paho-mqtt==2.1.0
psutil==7.0.0
PyAudio==0.2.14
pycaw==20240210
pynput
pyperclip==1.9.0
pypinyin==0.53.0
requests==2.32.3
vosk==0.3.45
webrtcvad-wheels==2.0.14
websockets==11.0.3
colorlog==6.9.0
soundfile>=0.12.1
pygame==2.6.1
scipy

インストール実行：

pip install -r requirements.txt



⸻

✅ 4. fish-speech 本体をクローン＆インストール

git clone https://github.com/fishaudio/fish-speech.git
cd fish-speech
pip install -e .
cd ..

ディレクトリ構成：
~/workspace/fish-speech-project/fish-speech

⸻

✅ 5. モデルのダウンロード（HuggingFace）

pip install huggingface_hub  # 未インストール時
huggingface-cli login        # 初回のみトークン入力
huggingface-cli download fishaudio/fish-speech-1.5 --local-dir fish-speech/checkpoints/fish-speech-1.5



⸻

✅ 6. CLIで音声合成を実行（TTS）

cd fish-speech
python -m tools.run_tts_cli \
  --text "こんにちは、これは fish-speech のテストです。" \
  --llama-checkpoint-path checkpoints/fish-speech-1.5 \
  --decoder-checkpoint-path checkpoints/fish-speech-1.5/firefly-gan-vq-fsq-8x1024-21hz-generator.pth \
  --decoder-config-name firefly_gan_vq \
  --output output.wav



⸻

✅ 7. 出力音声の再生（任意）

ffplay -autoexit output.wav  # または aplay output.wav



⸻

✅ 8. WebUI での動作確認（GUIで音声入力も可）

python -m tools.run_webui \
  --llama-checkpoint-path checkpoints/fish-speech-1.5 \
  --decoder-checkpoint-path checkpoints/fish-speech-1.5/firefly-gan-vq-fsq-8x1024-21hz-generator.pth \
  --decoder-config-name firefly_gan_vq

ブラウザでアクセス：

http://localhost:7860



⸻

✅ 補足（スクリプト化例）

run_tts.sh として保存：

#!/bin/bash
source ~/workspace/fish-speech-project/venv/bin/activate
cd ~/workspace/fish-speech-project/fish-speech

TEXT="$1"

python -m tools.run_tts_cli \
  --text "$TEXT" \
  --llama-checkpoint-path checkpoints/fish-speech-1.5 \
  --decoder-checkpoint-path checkpoints/fish-speech-1.5/firefly-gan-vq-fsq-8x1024-21hz-generator.pth \
  --decoder-config-name firefly_gan_vq \
  --output output.wav

ffplay -autoexit output.wav

実行方法：

chmod +x run_tts.sh
./run_tts.sh "おはようございます、今日は元気ですか？"



⸻

この手順に従えば、CLI/GUIどちらでも fish-speech を使って日本語音声合成が可能です。
Visual Task Board（VTB）とは？CSA対策１


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

## Visual Task Board（VTB）とは？
Visual Task Board（VTB） は、ServiceNow内のタスクやアイテムを カンバンスタイル（看板方式） で視覚的に管理できるツールです。

## 主な特徴
- ドラッグ＆ドロップ操作：カード（タスク）をステータスごとの列に移動できます。
- リアルタイム更新：他のユーザーと同時にボードを操作しても即時に反映されます。
- フィルター適用可能：条件に応じて表示されるカードを絞り込めます。

## 操作方法
1. VTBを開く
    1. Self-Service > Visual Task Boards
2.  ボードの作成・表示
    1. Create New > Freeform Board
    2. 「Visual Task Boards」ページが表示されます
![スクリーンショット 2025-06-05 194515.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624279/770391a1-6c43-4484-bae3-45dc25373845.png)

## ボードの種類
1. ガイドボード（Guided Board）
概要：最も一般的なVTBで、リストビューからワンクリックで作成できるボード。
対象：Incident, Change, Problem, Taskなどの標準テーブル。
用途：日々の業務タスクの「ステータス管理」に最適。
特徴：
- 列はステータスに基づいて自動生成（例：New → In Progress → Closed）。
- 各カードは選択したリスト内のレコード（例：特定のグループのインシデント）。
- フィルター条件をボードに反映。
- 一番使われるタイプ。
- 特定のフィールドの値に基づいてレーンを構成し、タスクがレーンを移動するたびにデータが自動的に更新される（手動でデータを変更しなくてよい）


2. カスタムボード（Custom Board）
概要：ゼロから自由に設計できるボード。
対象：任意のテーブルとフィールドを使って構成可能。
用途：「担当者別の進捗」や「独自のワークフロー管理」など、柔軟な用途。
特徴：
- 列は任意の選択肢フィールド（たとえば「優先度」や「カテゴリ」）に紐付け可能。
- 自分だけのボードを作れる。個人プロジェクトにも最適。個人が独自のタスク管理を行うための形式
- チーム運用には非推奨（パブリックで共有不可）。
- レーン変更時の自動更新機能はない


3. スクラムボード（Freeform Board / Scrum Board）
概要：アジャイルチーム向けに設計されたボード。
対象：Agile Developmentアプリケーションが必要。
用途：スプリントやバックログの視覚管理。
特徴：
- アジャイル開発手法に基づいたタスク管理を行うためのボード
- スプリント、ストーリー、タスクがカードとして表示される。
- チーム単位で管理され、ロールベースのアクセス制御。
- YokohamaではUIが刷新されてより直感的に。
- バーンダウンチャートなどのアジャイル指標にも対応。
10 進数から 2 進数に変換



去年、高校数学で勉強した２進数がでてきた！

今回はコードの解説と、２進数への変換方法を整理するよ。

<br>

## 問題概要

 整数 N（10進数）が与えられる。これを2進数に変換して出力せよ。

<br>

入力例：

    4

出力例：

    100

<br>

https://paiza.jp/works/mondai/loop_problems2/loop_problems2__conv_binary

<br><br><br>

## ✅OK例:
```js
const rl = require('readline').createInterface({input:process.stdin});

rl.once('line', (input) => {
    
    const N = Number(input);

    // 2進数を作るための配列
    let binary = [];

    // Nが0になるまでループ
    // ループ内で2で割った余りを順に配列に追加する
    for(let temp = N; temp > 0; temp = Math.floor(temp / 2)){
         binary.push(temp % 2);
    }
    
    // 配列の順番が逆なので、reverse()で逆順に
    // join('')で1つの文字列にして出力
    console.log(binary.reverse().join(''));
 
 
  rl.close();
});
```
- `binary` :  配列に余りを順に追加
- `Math.floor()` :  で小数部分を切り捨てながら2で割り続ける
- `binary.reverse()` :  で逆順に（下位ビット→上位ビット）
- `join'')` : で配列を1つの文字列に結合

<br><br>

## 📒10進数から2進数への変換の仕組み
### 【手順】

1️⃣ 2で割り続ける

- 数字を 2 で割る（商を求める）
- 余り（0 または 1）を記録する

2️⃣ 商が 0 になるまで繰り返す

- 割り算の商を次に割る数にして、再び 2 で割る
- 余りをどんどん記録する

3️⃣ 出てきた余りを逆順に並べる

- 最初に出てきた余りが 2進数の「下の桁（下位ビット）」だから
- 最後に出てきた余りが「上の桁（上位ビット）」になる

<br>

### 【例】10進数 13 の場合

1️⃣ 13 ÷ 2 = 6…余り 1

2️⃣ 6 ÷ 2 = 3…余り 0

3️⃣ 3 ÷ 2 = 1…余り 1

4️⃣ 1 ÷ 2 = 0…余り 1
<br>

✅ 商が 0 になったので終了
✅ 余りの並び：1, 0, 1, 1
✅ 逆順に並べる → 1101

つまり、13(10進数) = 1101(2進数) となる！

<br>

### なぜこの方法でうまくいくのか？

👉 10進数の数字を、2の累乗の組み合わせとして表していくから！

例えば、13 なら：

13 = 1 × 8(=2³) + 1 × 4(=2²) + 0 × 0(=2¹) + 1 × 1(=2⁰)

つまり、2進数で「1101」と表す（2³, 2², 2⁰ のところに 1 が立つ）

<br><br>


### 【まとめ】

✅ 2で割り続ける
✅ 余りを記録する（0 or 1）
✅ 逆順に並べる

これで、10進数 → 2進数変換ができる！



<br><br><br>[僕の失敗談(´;ω;｀)と解決法🐈](https://paizabeginner.wordpress.com/2025/06/05/paiza%e3%81%a7%e5%9f%ba%e6%9c%ac%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc%ef%bc%9a10-%e9%80%b2%e6%95%b0%e3%81%8b%e3%82%89-2-%e9%80%b2%e6%95%b0%e3%81%ab%e5%a4%89%e6%8f%9b/)


<br><br><br><br>

## おまけ：✅OK例２：toString()
```js
console.log(N.toString(2)); // 2進数に変換して出力
```
<br>

`toString()` は「数値を文字列に変換するメソッド」

たとえば：
```js
const num = 123;
console.log(num.toString()); // "123"（文字列になる）
```

<br><br>

### 実は、`toString(基数)` って書くと「基数（進数）」を指定できるのがポイント！


つまり：
```js
const num = 10;
console.log(num.toString(2)); // "1010"（2進数の文字列）
```
【Firebase Hosting】デプロイ後に最新の実装が反映されないエラーの原因と解決法

## はじめに

React + Firebase Hosting の環境で、「ローカルで確認済みの修正が、Firebase にデプロイしても反映されない」問題が発生しました。

## 環境

* React（Vite）
* Supabase
* Firebase Hosting
* GitHub Actions で自動デプロイ

## 起きた事象

単語を5個までしか保存できない仕様の英単語帳アプリを作っていました。

ローカルでは保存数が5個を超えるとボタンが無効化され、トーストで警告が出るなど、正しく制限がかかっていました。

しかしFirebase にデプロイして動かすと、6個目の単語まで保存されてしまいました。

Supabase 上の現在の単語数を取得しそれを元にバリデーションをかけているにもかかわらず、Firebase 上ではその処理が正しく働いていませんでした。

## エラーの原因

Firebase にデプロイされたdistが前回のビルド結果をキャッシュしたまま使われており、最新コードが配信されていませんでした。

ブラウザ側のキャッシュではなく、**Firebase Hosting 側のキャッシュが原因**でした。

## 解決策

`firebase.json` に、ヘッダで下記を追加してキャッシュを無効化しました。

```json
"headers": [
  {
    "source": "**",
    "headers": [
      {
        "key": "Cache-Control",
        "value": "no-cache"
      }
    ]
  }
]
```

この設定によって、Firebase Hosting 側が最新のビルド結果を配信するようになり、問題は解決しました。
watsonx.ai software版でのベアラートークンの取得方法

**watsonx.ai の APIを使用するには、ベアラートークンが必要**とのことです。
> A bearer token is required to use any of the watsonx.ai APIs.
> For more information, see the **Authorization** section of the [Platform API reference](https://cloud.ibm.com/apidocs/cloud-pak-data/cloud-pak-data-5.0.0#get-authorization-token).

https://cloud.ibm.com/apidocs/watsonx-ai-cp



ベアラートークンを生成するのに、API キーを使用するため、はじめにAPI キーを作成します。

## 認証用 API キーの生成
https://www.ibm.com/docs/ja/watsonx/w-and-w/2.1.x?topic=tutorials-generating-api-keys

次のいずれかを作成します。
- プラットフォーム API キー
- インスタンス API キー

今回はプラットフォームAPIキーを作成します。

### プラットフォーム API キーの作成

プラットフォーム API キーがあれば、IBM watsonxWeb クライアントにログインしたときに通常アクセスできるすべてのものにアクセスできます。

プラットフォーム API キーを生成するには、以下のようにします。

1.    Web クライアントにログインします。
2.    ツールバーから、アバターをクリックします。
3.    「プロファイルと設定」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/ea9bd172-2840-5d24-fe4c-c930dd98f52e.png)
4.    「API 鍵」 > 「新規鍵の生成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/5e64fbbc-ec10-913e-bbb2-91e26ec54e00.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/25a12e6a-b8ba-0e10-a5d0-cb6f83b4f7d1.png)
5.    「生成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/c5a4e6e3-7cf6-277a-5a8f-edcb0aa23b09.png)
6.    「コピー」 をクリックして、鍵を安全な場所に保存します。 この鍵を紛失した場合、リカバリーすることはできません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/13cbb4a0-1aff-6700-9cca-77f7c9a0c507.png)




## ベアラートークンの生成
https://www.ibm.com/docs/ja/watsonx/w-and-w/2.1.0?topic=keys-generating-bearer-token


前のステップで生成したAPI キーを使用して、 authorize エンドポイントを使用して Bearer トークンを生成します。
`<instance_route>`、`<username>`、`<api_key>` を、お使いの環境に合った正しい値に置き換えて実行してください。レスポンスにベアラートークンが返されます。
```
curl -X POST \
  'https://<instance_route>/icp4d-api/v1/authorize'\
  -H 'Content-Type: application/json' \
  -d' {
    "username":"<username>",
    "api_key":"<api_key>"
}'
```
パフォーマンスチューニング：インデックスを超簡単にまとめる

今日出てきた言葉で
「あなたはパフォーマンスチューニングの経験はありますか。」
と言われた。

なんとなく速度のことだろうなとは分かった。
そういったものは確かに経験がなかったので調べてみることにした。

メモリのチューニングやらインデックス、パーティショニングなど出てきた。

とりあえずとっつきやすそうなインデックスから調べて見直しが出来るよう超簡単にまとめてみた。

# そもそもインデックスって

本の**さくいん**と同じ。

- カラム値 → 行位置 の対応表を別ファイルに保持
- 検索・JOIN・ORDER BY が速くなる
- 追加と更新はインデックスにも追加するためやや遅くなる


### イメージ

| シーン       | さくいん無し| さくいん有り (インデックス) |
|--------------|-----------|------------|
| **本**  | 1ページ目からパラパラめくって目的の語を探す | 後ろの索引でページ番号が “P.128” と分かり、いきなりそこへジャンプ  |
| **DBテーブル** | ``SELECT * FROM users WHERE email = 'foo@example.com'``<br>→ 行を最初から最後まで順番にチェック (Seq Scan) | e-mail列にインデックスを張り、`Index Scan` で “foo@example.com は行 42” と目次から一発取得 |


インデックスを作成する時は下記
```php
// migration
$table->index('email');
```

そうするとイメージはこうなる。
users テーブル (10万行)

| id |    email    | 
|----|-------------|
| 1  | a@ex.com    |
| 2  | b@ex.com    | 
| …  | …           | 

索引ができているらしい。

インデックスが貼っていない場合は、行を全て確認をする。

速度の測定は`EXPLAIN`で出来る。
```php
EXPLAIN ANALYZE SELECT * FROM users WHERE email='x@ex.com';

```

## 書き込み頻度が高い列には逆に不向き?

### インデックスは追加・更新時にもメンテナンスコストが発生する

索引構造は「キー → 行位置」の対応を別ファイル（あるいは別領域）に保持している。


INSERT / UPDATE / DELETE のたびに、その索引構造を再配置・再計算する。

例
1.新しいレコードを追加するとき、該当カラムのインデックスにも「新しいキー」を挿入し、木構造を再調整する。

2.値を更新するときは、古いキーを索引から削除し、新しいキーを再挿入する必要がある。

これらの操作は「データ書き込み」と「索引構造のロック／再配置」が発生するため書き込み処理全体が遅くなる。

## 人間の知覚における時間感覚の目安

### 0.1秒未満（100ms）
ほとんど「瞬時」に感じる。ユーザーは遅さを意識しない。

### 0.1秒～0.3秒（100ms～300ms）
「わずかな遅れ」を感じるが、ストレスにはならない。
フロントエンドのボタン押下→画面遷移などでは、このレベルなら許容されやすい。

    
### 0.3秒～1秒（300ms～1s）
もはや「遅いな」と気づく領域。
DBクエリ単位で1秒前後かかる場合や、ページ全体のレンダリングに1秒以上かかる場合はチューニングを検討したほうがよい。
### 1秒～3秒（1s～3s）
ユーザーは「待たされている感」を明確に感じる。
ページ遷移や一覧取得などで1～3秒かかっている場合は、かなりの確率で離脱率や操作中断が増える。緊急度が高い。

### 3秒以上（>3s）
ほとんどのユーザーは「重い」「ストップしている」と感じ、途中で操作をやめることも多い。

このレベルの遅延が発生する箇所はページ全体を工夫して先読みを行っても、根本的にSQLやインフラ周りの最適化が必要。


--------

あまり意識したことがないが意外にシビヤだった。
AWS CLIは通るのにCDKはダメ？SSO認証でハマったら読む記事

## はじめに

AWS CDK を使ってインフラをコードで管理している方で、`cdk bootstrap` 時に以下のような **認証エラー** に遭遇したことはありませんか？

```

AuthenticationError: Need to perform AWS calls for account 875551125050, but no credentials have been configured

```

今回はこの問題にハマり、調査と試行錯誤を経て **最終的に環境変数の直接設定で解決した事例** を共有します。

---

## 問題の発生条件

以下のような環境下で問題が発生しました：

- **AWS SSO 認証を利用**
  - プロファイル名：`AdministratorAccess-875551125050`
  - `aws sso login` → 成功、ブラウザでの認証もOK
  - `aws sts get-caller-identity` → 問題なし
- **AWS CLIでは正常動作**
  - `aws s3 ls` などの操作はすべて成功
- **CDK のバージョン**：`2.1018.0`
- **Node.js のバージョン**：`v23.11.0`
- **config 設定に軽微なミス**
  - `ap-northeeast-1`（タイポ）があったが、本件には直接関係なし

---

## 現象

CDK で `cdk bootstrap` を実行すると、**AWS CLI では認証できているにも関わらず**、以下のようなエラーで失敗しました：

```

AuthenticationError: Need to perform AWS calls for account 875551125050, but no credentials have been configured

````

`--profile` オプションを指定しても改善されず、SSO認証が CDK にうまく伝わっていない様子でした。

---

## 試したこととその結果

### ✅ aws sso login の再実行 → 問題なし  
### ✅ aws sts get-caller-identity → 正常に認証されている  
### ✅ ~/.aws/config の確認 → タイポ修正済みでも改善せず  
### ✅ `--profile` オプション付きで `cdk bootstrap` 実行 → エラー継続  
### ✅ CDKのキャッシュ削除・再インストール → 効果なし  

---

## 最終的な解決策

以下の手順で **一時認証情報を環境変数として直接指定** することで、`cdk bootstrap` を正常に完了させることができました。

### 1. 認証情報のエクスポート

```bash
aws configure export-credentials \
  --profile AdministratorAccess-875551125050 \
  --format env > .aws-temp-env
````

### 2. 環境変数を読み込む

```bash
source .aws-temp-env
```

### 3. CDKブートストラップを再実行

```bash
cdk bootstrap aws://875551125050/ap-northeast-1
```

これで問題なくブートストラップが完了！

---

## 原因と考察

本件の主な原因は以下の通りです：

* **AWS SSO の認証情報は正しく取得されていたが、CDKがそれを認識できなかった**
* **CDKが期待する認証情報（環境変数形式）と、SSOの一時認証との間にギャップがある**
* **`--profile` 指定だけではCDK側の認証処理に十分ではなかった**

---

## 今後の対策とベストプラクティス

今後同様の問題を回避するために、以下のいずれかの方法をおすすめします：

1. **SSOログイン後、`export-credentials` で環境変数を明示的に設定**
2. **CDK側でSSOプロファイルを正しく認識できるよう、環境変数 `AWS_SDK_LOAD_CONFIG=1` を試す（未検証）**

---

## まとめ（3行で）

* AWS CLIでは正常なのにCDKだけ認証エラー → SSOとの相性が原因かも
* `aws configure export-credentials` で一時認証情報を取得 → `source` で読み込む
* `cdk bootstrap` は環境変数での明示的な認証が最も安定！

---

## 参考になれば幸いです！

もし同じような状況で困っている方がいたら、ぜひ試してみてください。
Qiitaでの「いいね」やコメントもお待ちしております！
jquery マニュアルまとめ

引用 : https://www.tutorialspoint.com/jquery/jquery-ajax.htm?utm_source=chatgpt.com

### 基本

```php:
 ① お決まり文
 $(document).ready(function() {

 ② 何したら？ → ボタン押したら
 $("#driver").click(function(event){
 //ボタンを押したら (id = "driver" )
 
 ③ どこに何を表示？
 $('#stage').load('/jquery/result.html');
 // div (div id = "stage") に、result.htmlを表示

 
 ・code全文
 <html>
   <head>
      <title>The jQuery Example</title>
      <script type = "text/javascript" 
         src = "https://www.tutorialspoint.com/jquery/jquery-3.6.0.js">
      </script>
		
      <script type = "text/javascript" language = "javascript">
         $(document).ready(function() {
            $("#driver").click(function(event){
               $('#stage').load('/jquery/result.html');
            });
         });
      </script>
   </head>
	
   <body>
      <p>Click on the button to load /jquery/result.html file −</p>
		
      <div id = "stage" style = "background-color:cc0;">
         STAGE
      </div>
		
      <input type = "button" id = "driver" value = "Load Data" />
   </body>
</html>
```

```php:
  フォルダからjsonファイルを読み込んで表示
  $.getJSON('/jquery/result.json', function(jd) {

  ファイルから読み込みたいもの
  $('#stage').html('<p> Name: ' + jd.name + '</p>');
  $('#stage').append('<p>Age : ' + jd.age+ '</p>');
  $('#stage').append('<p> Sex: ' + jd.sex+ '</p>');

  // 要素からdata取得 : .val
   $("#name").val()
   id :nameの文字取得

   // 要素に、表示する文字 指定
   $("#name").val("ザラ　アリ");
   id: nameの入力欄に ザラ　アリと表示

   ・中身を変える : replaceWith
   $("p").replaceWith("<h1>これ、新しいヘッダーよ</h1>");
   pの文字を変える

   ・クラスの書き方  ""を使う
   $(".inner")  → 最初に、必ず.がつく

   ・新しく追加
   .append("<p>Zara</p>");
    結果   before      after
         こんにちは    こんにちは
                       Zara

   ・append とappendTo 仕組みは同じ
    $("<p>Zara</p>").appendTo(".inner");
    $(".inner").append("<p>Zara</p>");

    ・要素の前に、追加 prepend (appendと逆)
    $(".inner").prepend("<p>Zara</p>");
    結果 : bofore      after  
    　　　 こんにちは    zara
                      こんにちは
　　 → こんにちは、の前に追加

   ・CSSの中身を変える :addClass /removeClass
    → 文字を太字にする
   $( ".hello" ).addClass("big" )
   <style>
   .big{ font-weight: bold; font-size:20px; }
   </style>

```

```

```
All Things Open Source at Intel_jp

https://www.intel.com/content/www/us/en/developer/topic-technology/open/overview.html

イノベーションを成功に導くのは、アイデアを自由に交換できる、協調性豊かな環境です。インテルは、透明性とセキュリティーが確保された、だれもが参加できるオープン・エコシステムの構築に尽力しています。

【オープンソースを支え、イノベーションを育むエコシステムを実現】
1989年からオープンソース・ソフトウェア・コミュニティーに貢献しているインテルは、業界のコラボレーション、共同エンジニアリング、オープンソースへの支援を通じて、複数のプラットフォームを横断した幅広いユースケースにわたって機能するコードや最適化を絶えず提供しています。
OPEA、PyTorch、TensorFlow プロジェクトへの参加も、こうした貢献の一環です。インテルはこれらの貢献による成果をアップストリームにも積極的に還元しているため、開発者は複数のプラットフォームを横断して機能する、セキュリティーが確保された最新の最適化済みソフトウェアを最大限に活用することができます。
AI が著しく進歩するなか、オープン AI エコシステムこそ、責任ある AI の利用を確保する唯一の方法であるとインテルは確信しています。

詳細を読む
https://www.intel.com/content/www/us/en/developer/topic-technology/open/team.html

＜注目のプロジェクト＞
カタログから検索する
https://www.intel.com/content/www/us/en/developer/topic-technology/open/project-catalog.html

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/85d00761-3914-4343-ba4f-b8d968b307ad.png)

エンタープライズ AI 向けオープン・プラットフォーム (OPEA) によって、複数プロバイダー協働のオープンで強力かつカスタマイズ構成が可能な生成 AI ソリューションを作成できます。これにより、エコシステム全体にわたる最高レベルのイノベーションを活用できます。
詳しくはこちら
https://github.com/opea-project

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/0b394f31-ba4f-4a64-b857-01d52979244c.png)

PyTorch は、オープンソースの Python ライブラリーをもとに作られた、コンピューター・ビジョンや自然言語処理 (NLP) などのアプリケーション開発を豊富なツールによって促進するライブラリーです。インテル® PyTorch 拡張パッケージは、インテルのハードウェア上でパフォーマンスを向上させる最適化機能により PyTorch を補完します。
詳しくはこちら
https://pytorch.org/

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/77d7270a-15a2-442d-92e5-bac49d360c13.png)

このオープン・スタンダードのアクセラレーター・ソフトウェア・エコシステムによって、開発者はマルチアーキテクチャーとマルチベンダーに対応したソフトウェア・エコシステムを構築できます。インテルは UXL Foundation と協働で oneAPI の仕様およびプロジェクトに貢献しました。
詳しくはこちら
https://uxlfoundation.org/

![6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/f0d0e86d-7a70-41ef-a078-a5da413dde48.jpeg)

【Medium に掲載されたインテル® テクノロジー関連のニュース】
インテルはオープン・エコシステム全体でどのような取り組みを行っているのか、ありのままの情報をお伝えしています。インテルの経営陣、フェロー、開発者、エバンジェリスト、エンジニア、お客様によるオープンソースのイノベーションや技術的リーダーシップに関するさまざまな記事をぜひご覧ください。
詳細を読む
https://medium.com/intel-tech

![７.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/7856565b-2fe7-4ce7-a534-d489feb93feb.png)

【Open at Intel ポッドキャスト】
Open at Intel ポッドキャストでは、ともに未来を形成していくオープンソースのイノベーションを取り上げています。セキュリティー、AI、クラウド・コンピューティング、Linux など、インテルとオープンソース・コミュニティーの最高峰の頭脳を結集した貴重な対談の数々をぜひお聴きください。司会は Katherine Druckman です。

最新エピソード
https://www.intel.com/content/www/us/en/developer/articles/community/fork-in-the-road-understanding-community-dynamics.html

＜登録＞
Apple Podcast | Spotify | Amazon Music | iHeart | RSS
https://podcasts.apple.com/us/podcast/open-at-intel/id1670972366
https://open.spotify.com/show/4RGqDRWqachrBY1eYfoXEj
https://music.amazon.com/podcasts/6334bebc-291c-40c9-b418-8330a67ecd0a/open-at-intel
https://www.iheart.com/podcast/338-open-at-intel-110724377/
https://feed.podbean.com/openatintel/feed.xml
AWS Certified SysOps Administrator - Associate 認定に合格するための施策

## 前書き
資格勉強が嫌いで、あまり時間をかけていませんでしたが、なんとか合格することができたので、めでたし、めでたし。

他の資格と比べて、SysOpsはあまり人気がないようですが（？）、誰かの参考になればいいので、この記事で行った勉強や使用した教材を紹介します。
![CB663C28-0837-48E6-9D9C-64AF6099DC07.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/4022f784-0386-4db3-8384-0322422f0357.jpeg)


## 試験問題サンプル

![F0704FD6-58CC-421B-9F1B-05B7F30A4788_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/bcbdee47-6b26-456b-9252-b5a7f287df89.jpeg)

AWS公式が公開しているサンプル問題です。
全部で10問、解答付きで、腕試しには良さそうです。
[リンク](https://d1.awsstatic.com/ja_JP/training-and-certification/docs-sysops-associate/AWS-Certified-SysOps-Administrator-Associate_Sample-Questions.pdf)

## 参考書

### AWS認定資格試験テキスト AWS認定SysOpsアドミニストレーター - アソシエイト AWS認定資格試験テキスト

![51QI39PhyRL._SY445_SX342_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/208fa02d-4806-4de5-bd96-32a08f7e112b.jpeg)

発売日、2022年6月22日
全体的に非常に読みやすくなっていますが、やや古いので、多少時代遅れ感があります。

### 徹底攻略AWS認定SysOpsアドミニストレーター - アソシエイト教科書＆問題集［SOA-C02］対応
![713OL9vHPIL._SY425_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/d4687b3c-28cf-4f65-899b-513f38fa3a0e.jpeg)

発売日、2024年3月14日

ボリュームがとにかくすごく、基本的にこの一冊あれば十分な気がします。
ただし、文字量が多くて読みにくく、私は一周することもできませんでした。

### AWS Black Belt

<iframe width="560" height="315" src="https://www.youtube.com/embed/videoseries?si=CztPKqFl_UuAWqMR&amp;list=PLzWGOASvSx6FIwIC2X1nObr1KcMCBBlqY" 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>

AWS公式が出してる学習動画です。

個人的にEC2に関する知識が弱いので、下記の動画がかなり参考になりました。

- Amazon Elastic Block Store(Amazon EBS) 基礎編

https://youtu.be/WgQ8sudpwNY?feature=shared

- AWS Systems Manager Overview

https://youtu.be/g5ndLFklyb4?feature=shared

## その他

社内にSandBox環境を導入しました。
SandBox環境はエンジニア全員に決められたコストで自由に使えるAWS環境です。

そのおかげで、AWS Organizationsでのアカウント管理とコスト管理周りを難なく覚えることができました。

## 勉強方法

「AWS認定資格試験テキスト AWS認定SysOpsアドミニストレーター - アソシエイト」を一回完走してから

「徹底攻略AWS認定SysOpsアドミニストレーター - アソシエイト教科書＆問題集［SOA-C02］対応」の過去問に取り組みました。

途中でよくわからない問題が出てきた際は、参考書に記載されている箇所をしっかりと確認しました。

それでもよくわからない問題に当たった場合は、AWS Black Beltで動画を検索して理解を深めました。
資格勉強が好きではないので、ダラダラと数ヶ月間も続いてしまいましたが、試験日までの3日間は1日1時間をしっかりと試験勉強に充てました。

## 個人的に難しかったところ

EC2に関する問題がかなりの割合で出題されます。

私の場合、LambdaやECS、EKSが主流となってからAWSを触ったので、EC2については参考書を読んで勉強するしかありませんでした。
2025 Microsoft Build: Code for Good

### はじめに
このたび、2025年5月19日〜22日の4日間、現地で「2025 Microsoft Build」に参加してきました。私はエンジニアではありませんが、一般の立場から見た最新技術（特にAI）やエネルギーに関する気づきを、みなさんとシェアできればと思います。よろしくお願いします。

# The Hub: Code for Good

2025年のMicrosoft Buildでは、ソフトウェアエンジニア向けのセッションが多く開催されましたが、その中に環境や社会貢献について紹介するスペースも設けられていました。

![IMG_1532.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4101511/b5f19043-2c08-412a-b7e6-f6726a554872.jpeg)
↑これは、「Code for Good」ブースの背面に設置されたパネルで、参加者は自由にレゴを使って作品を制作することができました。

特に印象に残ったのは、山火事の被害範囲を可視化する取り組みや、絶滅危惧種に関する研究の紹介でした。また、現地ではマイクロソフトによるSDGs（持続可能な開発目標）への取り組みをまとめた冊子を2冊いただきました。
![Image_20250603_165411_066.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4101511/6b795497-1ca1-441c-9594-39386dfe1008.jpeg)

以下に、環境やエネルギーに関連する内容を抜粋してシェアします。

### Become Carbon Negative
マイクロソフトは、カーボンネガティブの実現に向けて、主に3つの手段に取り組んでいます。
1. 炭素排出の削減（reducing carbon emissions）
2. カーボンフリー電力の利用拡大（increasing use of carbon-free eletricity）
3. 炭素除去の実施（carbon removal）

:writing_hand:コメント：2つ目は、まさにShizen Connectおよび自然電力グループ全体の事業と直接関係しています。

#### マイクロソフトの影響
- スコープ※1およびスコープ2の排出量を6%削減しましたが、2020年の基準と比べて、スコープ1、2、3を合わせた総排出量は29.1%増加しました。スコープ3の排出は依然として当社にとって最大の脱炭素化の課題であり、全社の各部門のリーダーが、スコープ3の排出を削減するために必要な追加対策を特定・策定する取り組みを進めています。
- これまでに、世界24か国のプロジェクトを含む合計34ギガワット以上の再生可能エネルギー資産と契約済み。
- 2023会計年度には5,015,019メートルトンの炭素除去を契約し、耐久性の低・中・高をバランスよく組み合わせたプロジェクトポートフォリオの構築を継続中。

※：経済産業省 資源エネルギー庁のウェブサイトより
知っておきたいサステナビリティの基礎用語～サプライチェーンの排出量のものさし「スコープ1・2・3」とは

https://www.enecho.meti.go.jp/about/special/johoteikyo/scope123.html

### Getting to Water Positive
#### マイクロソフトの影響
- 150万人以上に清潔な水と衛生ソリューションへのアクセスを提供し、水アクセスに関する目標を達成しました。
- AIワークロードをサポートし、冷却に水を一切使用しないように設計・最適化された新しいデータセンターを構築しました。

:writing_hand:コメント：2日目の基調講演（Keynote）の最後では、データセンターにおける環境への取り組みが紹介されました。ご興味のある方は、動画の1時間45分あたりをご覧ください。

https://build.microsoft.com/en-US/sessions/KEY020?source=/home

### Achieving Zero Waste
#### マイクロソフトの影響
- 所有するデータセンターおよびキャンパスにおいて、18,537トンの固形廃棄物を埋立地および焼却施設への廃棄から回避しました。これは商業用旅客機45機以上に相当する重量です。
- クラウドハードウェア全体で、サーバーおよび部品の再利用・リサイクル率が89.4%に達し、目標である90%に近づいています。
- Microsoft製品のパッケージに使用される使い捨てプラスチックの割合を、目標であるゼロに向けて、2023年度には2.7%まで削減しました。

### Protecting and Preserving Ecosystems
#### マイクロソフトの影響
- 15,849エーカーの土地を恒久的に保護区域として指定し、目標としていた11,000エーカーを40%以上上回りました。
- Microsoftのデータセンターが立地し、社員が生活・勤務する地域社会のニーズに応えるため、「Microsoft データセンター地域環境サステナビリティ プログラム」を通じて支援を行いました。2023年には、世界21か所で22件の新規プロジェクトに資金提供を行い、2万本以上の都市樹木の保全や、人間および生態系の利用に適した3万平方メートル以上の区域の改善を実現しました。

## 感想
個人的には、データセンターが今後どのようなスピードで成長していくのか、AIサービスの利用によってどれほどの電力が消費されるのか、そして他社がどのような取り組みをしているのかが気になります。
About open.intel_jp

https://www.intel.com/content/www/us/en/developer/topic-technology/open/team.html

【open.intel について】
open.intel は、オープンソース・プロジェクトの支援、活気あるコミュニティーの構築、将来を見据えたエコシステムの強化に注力する、熱心な開発者と支持者のグループです。
LinkedIn、X、GitHub からフォローしてください。
https://www.linkedin.com/showcase/openatintel/posts/?feedView=all&viewAsMember=true
https://x.com/OpenAtIntel
https://github.com/intel

【オープンソースに対するインテルの積極的な取り組み】
オープンなエコシステムはクローズドなエコシステムよりも間違いなくパワフルです。インテルは数十年にわたり、オープン・エコシステムを構築、民主化、実現する企業として、積極的に取り組んできました。PyTorch Foundation の Premier メンバー、OPEA プロジェクトの創設メンバーであり、UXL Foundation にも貢献しているインテルは、オープン・ソフトウェアによって AI イノベーションをけん引し、インテル製品搭載のハードウェアを強化しています。
オープン・エコシステムへの取り組みの一環として、インテルは次のことを約束します。

•組織の力を高めるダイバーシティー (多様性) と個々の違いを尊重するとともに、オープンな環境で開発し、インクルージョンを考慮したアプローチで、コミュニティーの取り組みを支援します。
•オープンなソフトウェア・コミュニティーに投資して、業界を方向づけるオープン・スタンダードを促進します。
•さまざまな選択肢を提供し、コラボレーションを通じて、開発者やパートナー企業を支援します。
•目標を高いコスト効果で効率的に達成できるソフトウェア・エコシステムを実現します。
•長年にわたり、積極的にオープンソースに貢献

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/60cca28a-40b5-4ab7-a969-7292cdc1041c.png)


•参加する
皆様からのフィードバックは、コミュニティーを向上し、発展させるために極めて重要です。ご意見、ご提案、経験談をぜひお寄せください。

メールで open.ecosystem.communications@intel.com に送信してください。皆様からの情報はきっと今後のオープン・エコシステムの取り組みに役立ちます。インテルのオープン・エコシステム・コミュニティーにご協力いただき、ありがとうございます。

メールを送信する
mailto: open.ecosystem.communications@intel.com
Django 　チェックボックスで空値が返ってきてしまうときの対処法

CRUDの理解を深めるためにToDoアプリを作成していたところ
壁にぶち当ったので、今後の為に記録しておきます。
![スクリーンショット 2025-06-05 182623.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4022094/29910cba-22c7-4bd5-b783-0a0879ad9036.png)
選択したものを削除しようとすると
ValueError: Field 'id' expected a number but got ''.
エラー表記が出てprintで確認したところ
['1', '2', '3', '4', '']
と空値が返ってきてしまっていたので
いろいろ調べた結果
```
 for tag_id in tag_ides:
                if tag_id.isdigit():
                    Tag.objects.filter(id__in = tag_id).delete()  
```
とisdigitメソッドで中身が整数の場合だけ処理を行うようにし解決しました。
空値が返ってくる理由はわかっていないので探っていければと思います。
プロデル、調査 その25

# 概要
プロデルが、CLRらしいので、調べて見た。
練習問題やってみた。

# 練習問題
自動車税を算出せよ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/6c3e9095-6954-4592-a04f-e7f9d006301f.png)

# サンプルコード

```

窓というウィンドウを作る
 	そのタイトルは「自動車税」
窓へ案内１というラベルを作る
	その位置は｛10,１0｝
 	その内容は「排気量」
窓へ排気量リストという選択リストを作る
	その位置は｛３0,４0｝
	その一覧は｛「1L以下」, 「1L～1.5L以下」, 「1.5L～2L以下」, 「2L～2.5L以下」, 「2.5L～3L以下」, 「3L～3.5L以下」, 「3.5L～4L以下」, 「4L～4.5L以下」, 「4.5～6L以下」, 「6L超」｝
窓へ案内２というラベルを作る
	その位置は｛10,７0｝
 	その内容は「取得年」
窓へ取得年リストという選択リストを作る
	その位置は｛３0,１０0｝
	その一覧は｛「2000」, 「2001」, 「2002」, 「2003」, 「2004」, 「2005」, 「2006」, 「2007」, 「2008」, 「2009」, 「2010」, 「2011」, 「2012」, 「2013」, 「2014」, 「2015」, 「2016」, 「2017」, 「2018」, 「2019」, 「2020」, 「2021」, 「2022」, 「2023」, 「2024」, 「2025」｝
窓へ結果というラベルを作る
	その位置は｛10,１４0｝
	その大きさは｛2４0,20｝
 	その内容は「税額は、」
窓を表示する
待機する

排気量リストが選択された時の手順
	結果の内容は、排気量リストの選択項目
終わり
取得年リストが選択された時の手順
	年は、取得年リストの選択項目　＋０
	//年を表示する
	量は、排気量リストの選択項目
	//量を表示する
	年>2012　なら
		量が「1L以下」なら
			結果の内容は、「税額は、29,500円」
		他で量が「1L～1.5L以下」なら
			結果の内容は、「税額は、34,500円」
		他で量が「1.5L～2L以下」なら
			結果の内容は、「税額は、39,500円」
		他で量が「2L～2.5L以下」なら
			結果の内容は、「税額は、45,000円」
		他で量が「2.5L～3L以下」なら
			結果の内容は、「税額は、51,000円」
		他で量が「3L～3.5L以下」なら
			結果の内容は、「税額は、58,000円」
		他で量が「3.5L～4L以下」なら
			結果の内容は、「税額は、66,500円」
		他で量が「4L～4.5L以下」なら
			結果の内容は、「税額は、76,500円」
		他で量が「4.5～6L以下」なら
			結果の内容は、「税額は、88,000円」
		他で量が「6L超」なら
			結果の内容は、「税額は、111,000円」
		でないなら
			量を表示する
		そして
	でないなら
		量が「1L以下」なら
			結果の内容は、「税額は、33,900円」
		他で量が「1L～1.5L以下」なら
			結果の内容は、「税額は、39,600円」
		他で量が「1.5L～2L以下」なら
			結果の内容は、「税額は、45,400円」
		他で量が「2L～2.5L以下」なら
			結果の内容は、「税額は、51,700円」
		他で量が「2.5L～3L以下」なら
			結果の内容は、「税額は、58,600円」
		他で量が「3L～3.5L以下」なら
			結果の内容は、「税額は、66,700円」
		他で量が「3.5L～4L以下」なら
			結果の内容は、「税額は、76,400円」
		他で量が「4L～4.5L以下」なら
			結果の内容は、「税額は、87,900円」
		他で量が「4.5～6L以下」なら
			結果の内容は、「税額は、101,200円」
		他で量が「6L超」なら
			結果の内容は、「税額は、127,600円」
		でないなら
			量を表示する
		そして
	そして
終わり




```

以上。
Discordの埋め込みで情報を伝える

# テキストメッセージとの違い
早速ですが、以下の2つのメッセージがあったとします。
分かりやすいのはどちらでしょうか？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125423/fa84e496-632a-4557-b503-665bde5d1806.png)
個人差があるかもしれませんが、僕からすると右のほうが分かりやすいです。
文字だけだと理解に時間がかかります。
埋め込みを使用することで、色を使った表現やコンパクトな表示が出来ます。

# 埋め込みで情報を伝える
「成功」や「失敗」であったり、操作の内容をタイトルに指定すると良いです。

## 色
一般的に、「成功」は緑、「失敗」は赤です。
それ以外に「情報」として青、「警告」として黄色があってもいいですね。
もちろんこれ以外の色もありだと思います。
あまり強い色、特に原色はおすすめしません。目が疲れてしまいます。

:::note warn
この時、カラーリングで個性を出そうとして「失敗」に緑を使ったりすると、ユーザーはほぼ確実に混乱します。
個性を出したい気持ちもあるかもしれませんが、抑えましょう。

**混乱する例:**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125423/075dc273-365d-40ea-aeaa-78505f80a53d.png)
:::

# それでも埋め込みは使われない
ほとんどのbotではあまり埋め込みが使われていません。
使われているとしても一部機能の処理だけだったりします。
こんなに分かりやすく出来るのに、何故なんでしょうか？
開発者や言語によってそれぞれ理由は異なる思いますが、ほとんどの開発者にとって書くのが面倒だからだと思います。
かなりのbotで使われているdiscord.pyでさっきのEmbedを作るとこんな感じに何行もある長いコードを書くことになります。
```python
embed = discord.Embed(title="成功しました", description="操作に成功しました", color=0x2ecc71)
embed.add_field(name="操作内容", value="メッセージの送信")
await ctx.send(embed=embed)
```
これはまだ短い方です。フィールドが増えるともっと厄介になります。
書くのは面倒ですし、可読性も下がりますし、容量が大きくなります。
たったの数行ではありますが、処理の数 (成功時の処理(成功パターンの数)、失敗時の処理(失敗パターンの数) × 機能の数)だけこれを書くとなると、開発者は嫌になります。

# どうすれば良いのか
Pythonには「関数」というものがあります。
流石に知ってるとは思いますが、一応解説します。
複数の処理を1つにまとめられるものです。

ここで、「Embedの作成に関数を使う必要はあるのか」と思われるかもしれません。
でもよく考えてみて下さい。
長いコードをたった1つの関数にまとめることで、複数行書く必要が無くなって格段に書きやすくなるんです。

以下は一例です。
`createEmbed` 関数を定義します。
```python
def createEmbed(title=None, description=None, color=None, fields=None):
    embed = discord.Embed(title=title, description=description, color=color)
    for field in fields:
        embed.add_field(name=field["name"], value=field["value"], inline=field["inline"] if "inline" in field else True)
    return embed
```

使用例
```python
await ctx.send(embed=createEmbed(title="成功しました", description="操作に成功しました", color=0x2ecc71, fields=[{"name":"操作内容","value":"メッセージの送信"}]))
```

# さいごに
Discordの埋め込みがもっと普及してほしいです。
なんなら全ての応答を埋め込みにしても良いと思います。
積極的に使っていきましょう。
【Salesforce】スケジュールトリガーフローでメールが止まらない問題への対策（サンドボックス環境編）

## はじめに

Salesforceの**スケジュールトリガーフロー**を使って自動化処理を実装していると、**サンドボックス環境でもメールが止まらなくなる**という事象に直面することがあります。

本記事では、実際に遭遇した事例をもとに、「なぜ止まらないのか？」「どうすればよかったのか？」について解説します。

---

## 結論

💡 **スケジュールトリガーフローが一度動き出すと、途中でメール送信を止める手段はありません。**

---

## なぜ起こるのか？

Salesforceでは、スケジュールトリガーフローを使用する際に、以下の制限があります。

```
スケジュールトリガーフローはレコードのバッチに影響します。
組織で実行できるスケジュールトリガーフローは、1 日あたり 250,000 件です。
トリガーされると、このフローは X 件のレコードに影響します。
```

たとえば、次のような表示がフローのデバッグ画面で確認できます。

> トリガーされると、このフローは **3746 件** のレコードに影響します。

**つまり、1度アクティブ化してしまうと、そのすべての対象レコードに対して処理（例：メール送信）が一気に走る**ため、「想定外の大量メール」が発生することになります。

---

## 対策（事前にやるべきこと）

### ✅ スケジュールトリガーフローを有効化する前に「デバッグ実行」しよう

* フロービルダーのデバッグを実行すると、**影響を受けるレコード件数**が最下部に表示されます。
* ここで処理件数が多いと判断した場合は、以下のような**テスト用条件**に絞って再確認しましょう。

```text
・「契約ステータス = テスト」などのフィルターを追加
・「今月作成されたレコード」のみに制限
```

---

## テストにおすすめのフィルター例

| テスト目的         | フィルター例               |
| ------------- | -------------------- |
| 特定レコードだけ対象に   | 「レコード名に 'テスト' を含む」   |
| 今月のデータだけ      | 「作成日 >= THIS\_MONTH」 |
| フラグがONのレコードのみ | 「テスト実行フラグ = true」    |

---

## おわりに

サンドボックス環境とはいえ、うっかりメールが大量送信されると、関係者への誤通知や混乱を招くこともあります。

**「公開前にデバッグ実行して、影響レコード件数を確認する」**
このワンステップを忘れずに入れるだけで、事故は未然に防げます。