OmniAICreator/Qiita-1.07M huggingface dataset:
ARIA Authoring Practices Guide (APG)_ Meter Patternを読んだ



## これは何
`<meter>`、ARIA ロール meter について読んだメモ:memo:

https://www.w3.org/WAI/ARIA/apg/patterns/meter/

https://developer.mozilla.org/ja/docs/Web/HTML/Reference/Elements/meter
 

## `<meter>`
- メーターとして使用される要素を識別するために使う
    - 定義された範囲内の数値をグラフィカルに表示するもの
    - 例：バッテリー

:::note warn
意味のある上限値を持たない値には適さない（例：世界人口）
:::

:::note warn
進行状況や完了率を示すなら、`<progress>`を使う
:::

## 属性
- `value`
    - 現在の数値
    - 指定される場合、`min 属性`と`max 属性`の間でないといけない
    - 定義されていない場合：`0`
    - 範囲外の数値の場合：範囲の内のもっとも近い値
- `min`≦ `low` < `high` ≦ `max`
    - `min`
        - 範囲の下限
        - 未設定の場合：`0`
    - `low`
        - `min`属性の値より大きく、 `high`属性,`max`属性の値より小さい
        - 未定義 or `min`より小さい場合：`min`の値と同じになる
    - `high`
        - `min`属性,`low`属性の値より大きく、 `high`属性の値より小さい
        - 未定義 or `max`より大きい場合：`max`の値と同じになる
    - `max`
        - 範囲の上限
        - 未設定の場合：`1`
- `optimum`
    - 最適な数値の範囲を表す
    - `min`属性と `max`属性の範囲内の値
    -  `low`属性と`high`属性が指定されている場合、この属性の値を含む範囲が最適な数値の範囲
    - ブラウザは`optimum`の値以下かどうかでメーターのバーの色を変更することがある

## `meter` role
- `<div>`につけれる
- キーボード操作はできない（そもそも操作するものでもない）
- 属性
    - `aria-valuemin="NUMBER"`：メーターの最小値を指定
    - `aria-valuemax="NUMBER"`：メーターの最大値を指定
    - `aria-valuenow="NUMBER"`：メーターの現在の値を指定
    - `aria-labelledby`	
- 支援技術では、aria-valuenowの値を%で表示することがよくある
    - %のみで伝えることが親切でない場合、`aria-valuetext`で値を理解できる文字列を設定できる
        - `aria-valuetext`
            - `aria-valuenow`の値（現在の値）について人間が読める代替テキストを定義する
        - 例：バッテリーの値　aria-valuetext="50% (6 hours) remaining"
VGW（Virtual Private Gateway）をやさしく解説！

こんにちは！今回は、AWSネットワーク設計でよく出てくる "VGW" こと **Virtual Private Gateway** について、初学者でも理解しやすいようにまとめてみました。

---

### 🔰 VGWって何？

VGW（Virtual Private Gateway）は、AWSの仮想ネットワーク（VPC）とオンプレミスのネットワーク（自社オフィスなど）を**VPN接続**や**専用線（Direct Connect）**でつなぐための"AWS側の玄関口"です。

簡単に言えば、**クラウドと自社ネットワークを安全に接続するためのルーター**のようなもの。

---

### 🏢 シェアオフィスに例えてみよう！

- **VPC** = あなたが借りたシェアオフィス（AWS上のネットワーク空間）
- **IGW（Internet Gateway）** = 誰でも使える正面玄関（インターネットの出入口）
- **VGW** = 鍵付きの裏口（VPN接続専用のセキュアな入口）
- **Customer Gateway** = オンプレ側のVPN機器（自社オフィス側の出入口）

この裏口（VGW）を使うことで、**インターネットを経由しつつも安全にAWSへアクセスできる**ようになります！

---

### 🔐 暗号化の仕組み

VGWを使うVPN通信では、**IPsecトンネル**という技術を使って、以下のように暗号化されます。

```
[オンプレPC]
    ↓
[Customer Gateway] ←←← 暗号化開始（IPsec）
    ↓
[インターネット上のVPNトンネル（暗号化済）]
    ↓
[VGW] ←←← 暗号解除
    ↓
[VPC内のPrivate Subnet（例：DBサーバー）]
```

このように、通信内容はインターネット上でも見えないようになっており、セキュアです。

---

### 🌐 IGWとの違いまとめ

| 項目 | IGW（Internet Gateway） | VGW（Virtual Private Gateway） |
|------|--------------------------|-------------------------------|
| 接続先 | インターネット全体 | オンプレミスの社内ネットワーク |
| 安全性 | 通常はHTTPS/TLSで暗号化 | IPsecトンネルで強制的に暗号化 |
| 主な用途 | Web公開・API連携など | 社内DB接続・社内アプリ運用など |
| 必要なとき | 世界とつながりたいとき | 社内と安全につながりたいとき |

---

### 🧠 VGWが必要になるシーン

- 社内システムとAWS上のDBをセキュアに連携したい
- オンプレとクラウドを1本のVPNでつなぎたい
- インターネット経由だけど、安全性を担保したい

---

### ✏️ おわりに

今回は、AWSのネットワーク設計で必ず出てくるVGWについて、日常のシェアオフィスに例えながら解説しました。今後VPN接続やハイブリッドクラウドを設計する上で、VGWの役割と仕組みをイメージできると大きな一歩です！
テストケース作成で気をつけていること

私がテストケースを作成する際に気をつけていることを、思いつくままに書きます。
状況や考え方によってブレることもありますが、少しでも参考になれば嬉しいです。

## 手順がケースをまたがないように書く

「ケースY」の実施にあたり「ケースXのデータを使う」としているケースを見かけることがあります。しかしこのような構成だと、「ケースX」を先に実施する必要が生じ、手間が増えてしまいます。
さらに「ケースX」が別の目的で複雑な内容の場合、「ケースY」の前提がわかりづらくなることもあります。

多少手間でも、「ケースY」で必要なデータは、その手順内で準備するほうがわかりやすく、単体で実施しやすくなります。

## 手順は毎回書く

「ケースXの手順1〜3と同じ」と書かれる場合もありますが、実施時にいちいち参照し直すのは手間ですし、意図も伝わりにくくなります。

内容が複雑で毎回記載するのが現実的でない場合は、共通の手順を別シートにまとめるなどの対応が良いと思います（Excelであればシートを分けるなど）。

## ケースが切り離せる

テストでNGが出た場合、そのケースだけを再実施できる状態が理想です。他のケースと依存していると、再実施が難しくなったり、全体のやり直しが必要になったりします。

再実施がしやすいよう、ケースごとに独立している構成を心がけています。

## 前提も手順に含める

テストデータの準備や環境構築などの前提条件も、できるだけ手順に記載するようにしています。

手順として明記することで、見落としや実施ミスを減らせると思います。

## 誰でも実施できる

仕様を知らない人でも実施できるような内容にすることが理想です。

作成者や実施者が仕様に詳しい場合、どうしても内容が簡易的になることがありますが、他のチームに依頼する場面もあると思います。

その際に「つまりどうすればいいの？」となりがちなので、誰が読んでも迷わず、同じ手順を踏めるよう意識しています。

## 観点をわかりやすくする

手順が長文化していたり、似たような操作が繰り返されるケースも見かけますが、それは1つのケースに複数の確認観点を詰め込んでいる場合が多いです。

観点ごとにケースを分けることで、手順や目的が明確になりやすくなります。

## 確認事項は1行に1つ

特にExcelなどの表形式で作成されたテストケースでは、1行に複数の確認項目が書かれていることがあります。

こうなると確認漏れが発生しやすくなるため、確認事項は1つにつき1行で記載するようにしています。

1項目ごとにOK/NGを判定できる形にすることで、チェック漏れも防げます。

## 最後に

文面はChatGPTに添削してもらいました。読みやすくなってたら嬉しいです！
Fog::AWS で S3 の bucket にある全てのファイルを取得する

## やりたいこと

[Fog::AWS](https://github.com/fog/fog-aws) を使って、S3 の特定の bucket にある全てのファイルを取得したい。

しかし `Fog::AWS::Storage::Directory#files` や `Fog::AWS::Storage::Files#all` を使っても 1,000 件のファイルしか取得できない :cry:

```rb
s3 = Fog::Storage.new(provider: 'AWS', use_iam_profile: true)
directory = s3.directories.get('my-bucket-name')
files = directory.files
files.count
#=> 1000

files = directory.files.all
files.count
#=> 1000
```

ファイルが 1,000 件より多く存在する場合でも全てのファイルを取得したい。

## 方法

`Fog::AWS::Storage::Files#all` に `marker` を渡すことで続きのファイルを取得する。

```rb
def find_all_files_in(directory)
  Enumerator.new do |y|
    marker = nil
    
    loop do
      files = directory.files.all(marker: marker)
      break if files.none?
      
      files.each_with_index do |file, i|
        y << file
        # 最後の要素
        marker = file.key if i + 1 == files.size
      end
    end
  end
end

files = find_all_files_in(directory)
files = files.to_a
files.size #=> 5432
```

## バージョン情報

```rb
Fog::AWS::VERSION
#=> "3.30.0"
```

## 参考

- [max_keys param in storage.directories.get.... what am I missing? · Issue #568 · fog/fog-aws](https://github.com/fog/fog-aws/issues/568)
スケジューラー Slurmの設定備忘録

# Slurmとは
Slurm(スラム)とは、クラスターサーバーのような複数のPCで計算を行う際に、うまいことスケジューリングやプロセス分配などをしてくれるすごいやつです。

# 設定備忘録
今後追記していこうと思います。

## 参考記事
- [Slurmのインストール on CentOS7](https://qiita.com/pochman/items/1353fc0d93d0f1bd9989#fn-1)
- [UbuntuでSlurm](https://k-kuro.hatenadiary.jp/entry/20230702/1688276279)
- [MUNGE](https://dun.github.io/munge/)
- [Download Slurm Today](https://www.schedmd.com/download-slurm/)
- [slurm.confの設定用ページ](https://slurm.schedmd.com/configurator.easy.html)


## 記事との変更点
- PIDの設定に関しては、変更なしでも動いている。
- Userは`root`で共通にした。
- `slurm.conf`のノードを記載するとき、
    ```
    PartitionName=~~ Nodes=~~ OverSubscribe=YES Default=~~ MaxTime=~~ State=~~
    ```
    という、`OverSubscribe=YES`を追記することで、1ノードでいくつものタスクが割り当てられるように変更できた。
- slurmのコンパイル＆インストールは、結局それぞれのrootディレクトリで行った。
VSCodeの「同期」ボタンの裏側で何が起きているのか確認してみた

## はじめに
いつまで経っても「Git初心者」から抜け出せない…そんな焦りを抱える若手（と信じたい）エンジニアです。
プロジェクトでは主にCodeCommitでIaCコードを管理していますが、実のところGitを“Subversion的”に使っています。

そこで、脱・初心者を目指し、普段VSCodeのGUIで何気なく実行する操作が、Gitコマンドでは実際に何をしているのかを確認してみました。

## VSCodeで「同期」を実行すると何が起きているのか？
### Gitログの確認方法
VSCodeのターミナルから「出力」タブを開き、「Git」でフィルターをかけます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3191704/1b2b5aaf-7a39-4bbc-bdd1-5c61294a5bac.png)

すると、ボタンを押しただけでも大量のログが Info レベルで出力されることが分かります。
ここでは、関連する Pull / Push のログのみを抜粋します。
<details><summary>Gitログ</summary>

```
2025-04-15 18:52:47.796 [info] > git pull --tags origin master [5312ms]
2025-03-28 18:52:47.796 [info] From https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test-repo
 * branch            master     -> FETCH_HEAD
～中略～
2025-03-28 18:52:54.083 [info] > git push origin master:master [6276ms]
2025-03-28 18:52:54.084 [info] remote: Validating objects: 0%        
remote: Validating objects: 100%        
To https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test-repo
   2e8677d..8a08c6a  master -> master
```
</details>

### 実行されているGitコマンドの内容
```powershell
git pull --tags origin master
```
　⇒ リモートoriginのmasterブランチをローカルに取得し、マージ
 ```powershell
git push origin master:master
```
　⇒ ローカルのmasterブランチをリモートに反映

## まとめ
VSCode の「同期」ボタンは、内部的に git pull → git push を順に実行しています。
この挙動はリモートの変更を取り込みつつ、自分の変更も反映したい場面では便利ですが、競合があるとマージコミットが生成され、履歴が見づらくなる可能性があります。

### より良い運用をするために：
#### 履歴をきれいに保ちたい場合
「プル（リベース）」ボタンを使う（Gitコマンド：git pull --rebase）
リモートの変更を先に、自分の変更を後に。マージコミットを避けられる

#### まずは自分の変更を安全にPushしたい場合
GUIで「コミット」→「プッシュ」の順に操作
その後、リモートの変更を必要に応じてPullすることで、競合の発生タイミングを制御できる
入門者向け～TypeScript基礎＋実習講座 💻🚀

こんにちは、韓国在住のsanaです！


今日はTypeScript関連の講座を２つ紹介します:point_up:

:one:TypeScript初心者おすすめ講座

:writing_hand:TypeScriptを初めて始める方
:writing_hand:TypeScriptを学んだことはあるけれど、自信がない方
:writing_hand:TypeScriptの原理を理解して使いこなしたい方
:writing_hand:フロントエンドエンジニア
:writing_hand:Node.jsバックエンドエンジニア

このような方にもってこいの講座です！！　
TypeScript講座で圧倒的人気を集めている講師による講座でTypeScript始めてみませんか？？

https://u.inf.run/3Euof6E



:two:【無料講座】 TypeScript：LangChain入門 1 🚀🤖
LangChainは、AIモデルの管理やAPIの活用を効率よく行うための強力なツールです。AIシステムをもっと活用したい方に最適で、初心者でも安心して学べる内容になっています！

https://u.inf.run/3YxElmR


明日も頑張りましょう！　ファイティン:feet:
AIで美しいUIをデザインする方法

最近、AIを使ってプロジェクトを開発する中で、興味深い発見がありました。機能要件についてはAIに明確に伝えることができるのですが、UIデザインの説明になると毎回苦労していました。「きれいに作って」「デザイン性のある感じで」といった曖昧な表現しか使えず、結果も今ひとつ満足できないものでした。

この課題に悩んでいた時、ある大手企業のシニアUXデザイナーさんに相談する機会に恵まれました。その方から聞いた話に目から鱗が落ちる思いでした。現代のUIデザインには、それぞれ特徴的なスタイルやデザインシステムがあり、これらの専門用語をプロンプトに適切に活用することで、AIが生成するUIの品質が大幅に向上するということでした。

## 重要な発見

デザイナーさんのアドバイスに従って、具体的なデザインスタイルのキーワードを活用してみたところ、驚くほどの変化が見られました。例えば：

- **Microsoft Fluent Design**: マイクロソフトが提唱する現代的なデザイン言語で、光の効果、奥行き、モーションを重視
- **ミニマリストスタイル**: 余白とヒエラルキーを大切にしたミニマルなデザイン
- **Material Design**: Googleのデザイン言語で、マテリアルの質感と自然なアニメーションが特徴
- **ニューモーフィズム**: やわらかな影と立体感が特徴的な新しいデザイントレンド

これらの専門的なデザイン用語を活用することで、AIが生成するUIが格段に洗練され、美しくなりました。

## 実践のコツ

経験を通じて見えてきた、AIで素晴らしいUIを作るためのポイントをご紹介します：

1. **デザインスタイルを明確に**: 具体的なデザインシステムやスタイルを選択
2. **細部まで説明**: カラースキーム、余白、シャドウ効果などを具体的に指定
3. **参考事例を活用**: 有名なサービスのデザイン特徴を参考として引用

## 新しいプロジェクトのご紹介

これらの経験をもとに、[UI Prompt Explorer](https://uiprompt.art/)というツールを開発しました。AIが生成した優れたUIの作品集と、それに対応するプロンプトを一目で確認できるプラットフォームです。

- UI Prompt Galleryで様々なスタイルのAI生成インターフェースをご覧いただけます
![ui-gallery.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4059730/bfba5f6a-33c8-41be-ad5c-71b751092d16.png)


- 詳細な生成プロンプトを確認できます
![generate-same.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4059730/332fc011-74a3-439b-9ee2-cc78a8d62737.png)



- お好みのスタイルのプロンプトをすぐに利用できます
![prompt-generator.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4059730/b828a42e-d536-4374-8636-50c82bcec764.png)

- このウェブサイトで直接UIを生成したり、プロンプトを調整してClaude、Cursor、DeepSeek、Boltなどの各種AIツールで活用したりできます
![ui-generator.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4059730/a43361cd-744f-4be2-96ce-d374cfcf8131.png)


このツールが多くの開発者の皆様のお役に立てれば幸いです。優れたデザインが技術革新の妨げになってはいけませんから。AI技術は急速に進歩していますが、良い結果を得るためには、私たちがAIと「対話する方法」をしっかりと理解する必要があります。

皆様のAI開発の旅路に、この経験が少しでもお役に立てば嬉しく思います。
【個人開発】作業時間記録アプリ「MinuteMind」をUnity + Google Drive連携で作ってiOS/Android同時リリースした話


## 背景

フリーランスや個人開発者にとって、「自分の作業時間をどれだけ使っているのか」を可視化することは、効率化や価格交渉の観点でもとても重要です。

ただ、既存のアプリは高機能すぎたり、日報感があって続かなかったり…。

そこで、**「もっと軽くて、直感的に使える作業時間記録アプリを自分で作ろう」**と思い立ちました。

---

## アプリ概要：MinuteMind

![アイキャッチ画像](http://syunpp.com/wp-content/uploads/2025/04/MinuteMind-1.jpg)

- 作業カテゴリごとの記録がワンタップで可能  
- グラフで週・月の傾向を可視化  
- Google Driveへのエクスポート／インポート対応  
- Unity IAPを使って広告非表示の課金も実装  

---

## 技術スタック

- Unity 2022.3 LTS  
- Android/iOS両対応  
- Google Drive REST API v3  
- Android向け AAR（Intent経由のファイル送信）  
- iOS向け UIDocumentPicker連携  
- Unity IAP（広告非表示切り替え）  

---

## 実装で詰まったこと・工夫したこと

### ① Google Drive連携（Android）

- AndroidはAARを使い、JavaからGoogle DriveへのIntentを呼び出す方式を採用  
- Unity側からの呼び出しは以下のように `filePath` と `mimeType` を指定して送る  

```csharp
using (AndroidJavaObject activity = UnityPlayer.GetActivity())
{
    activity.Call("exportToDrive", filePath, mimeType);
}
```

- SAFを使ってユーザー選択形式にしておくと、スコープアクセスの問題を回避できる

---

### ② JSONインポート（iOS）

- `UIDocumentPickerViewController` をネイティブ側に実装し、選択後に `UnitySendMessage` でUnityへ通知  
- アプリ内の `PersistentDataPath` にコピーして処理する構成にした  

```swift
// Objective-C/Swift 側で実装し、UnitySendMessage("GameObjectName", "OnJsonImported", jsonString) で送る
```

---

### ③ Unity IAPの広告非表示処理

- 無料ユーザーにはバナー広告＋インタースティシャル広告（一定条件で）  
- 広告非表示購入時は `PlayerPrefs` にフラグを保存し、AdMob初期化前に判定  
- Google Play Console / App Store Connect両方でアイテムIDを揃えることでクロスプラットフォーム対応  

---

## 🔗 ダウンロードリンク

- [▶ Android版（Google Play）](https://play.google.com/store/apps/details?id=com.minutemind.app)  
- [▶ iOS版（App Store）](https://apps.apple.com/jp/app/minutemind/id6744454470)

---

## フィードバック歓迎！

現在、ユーザーの声を集めて改善中です。  
以下のDiscordサーバーで、不具合報告・改善希望・雑談など気軽にどうぞ！

→ [MinuteMind公式Discord](https://discord.gg/g25kNggS)

---

## 最後に

個人開発で「AndroidとiOS両方にアプリを出す」って、想像以上に大変でしたが、やってみると多くの気付きがありました。

この投稿が、同じようにアプリを作りたい人や、Unity + モバイル連携で詰まっている人の参考になれば嬉しいです！

**この記事が役に立ったら LGTMしてもらえると励みになります！**

---
Pandasを使った欠損値の処理

今回はpandasを使用した欠損値の処理について備忘録を兼ねた記事になります。

欠損値とは表データ等で値が入っていない事をいいます。
例えば表データの空欄であったり、NULLなどの具体的な数値が入っていない状態の事です。
この欠損値をそのままにしてグラフで可視化しようとすると偏りが出て正確なデータ分析が出来なくなります。
# 欠損値の確認するには？
では、欠損値をどのように確認するか。
それは、Pythonのライブラリ`pandas`を使用して欠損値の確認`isnull()`、処理`dropna()やfillna()`を行います。
pandasのインストールや基本的な使い方については前回の記事を参考にしていただければ幸いです。

https://qiita.com/kimagure_cat/items/530b54cc8688c8f827af

それでは、欠損値の確認を行っていきましょう。今回はサンプルとして、kaggleのチュートリアルで使用されているタイタニックデータ(https://www.kaggle.com/c/titanic/data)を使用してます。
データを読み込み、`isnull()`を実行しましょう。
```python
import pandas as pd
data = pd.read_csv("train.csv")
data.isnull()
```
`isnull()`はデータの欠損を検出してくれるメソッドです。値が欠損していれば`True`、欠損していなければ`False`を返します。
# isnull().ayy()
欠損値があるか知りたい場合は`any()`という関数を`isnull()`の後に付け足せば各列に欠損値があるか確認してくれます。
欠損値がある場合は`True`、無い場合は`False`を返してくれます。
# isnull().sum()
欠損値の個数を知りたい場合に使用します。`any()`と同様に`isnull()`の後ろに付け加える事で、欠損している要素数を列ごと調べてくれます。
# 欠損値を処理するには？
欠損値の処理方法には大きく分けて２つあります。
**１**．欠損値を含む列や行を削除する。
**２**．欠損している箇所を別のデータで補完する。
どちらを採用するかは、状況に応じて変わるかと思います。どう処理をするか判断するにはそのデータ分析の目的が何かを明確にする事が重要になります。
欠損値を含む行を削除する事で重要なデータをも削除してしまい、データ全体の傾向を見誤り分析精度が下がってしまう。この様な場合は別の値で補完しデータ数を維持する事が得策かもしれません。
また、説明変数の変化が目的変数の変化に影響するか等のデータを理解する目的であれば補完し過ぎるのは誤った理解に繋がってしまうかもしれません。
何が最善かは目的を明確にして、データ分析を進めていくと良いでしょう。

# 欠損値の削除
欠損値を含む行や列を削除してくれるのが`dropna()`です。
```python
data.dropana()
```
デフォルトでは欠損値の行を削除してくれます。
列を削除したい場合は、下記の様にします。
```python
data.dropna(axis = 'columns') 
```
# 欠損値の補完
欠損値を別のデータで補完してくれるのが`fillna()`です。
補完したいデータを引数に指定し、欠損を補完してくれます。
```python
data['Age'].fillna(20)
```
上記の場合、Age列の欠損値を20に補完してくれます。
他にも、平均値や中央値、最頻値で補完してくれます。
```python
data['Age'].fillna(data['Age'].mean())   # Age列の欠損値をAgeの平均値で補完
data['Age'].fillna(data['Age'].median()) # Age列の欠損値をAgeの中央値で補完
data['Age'].fillna(data['Age'].mode())   # Age列の欠損値をAgeの最頻値で補完
```
また、`fillna()`と`dropna()`を呼び出しても元のデータに反映されません。
更新する場合は下記の様になります。
```python
data.dropna(inplace=True)

data = data.dropna() #こちらでも更新できます。
```
まとめ
欠損値の処理はデータ分析を行う際に欠かせない技術の一つです。
データの特性に応じた柔軟な対応が求められます。
データ分析の目的を明確に決めるのは今の私も難しいと感じますが、様々なデータに触れ経験を積んでいきたいと思います。
IBM i ライセンスキーの有効期限を一覧できる拡張 IBM i 7.6 Navigator for i 

[こちらの記事中](https://qiita.com/gomAnomalocaris/items/f06377cdd4b415e9fa61) の 

**Navigator for i で複数IBM i のサブスクリプションライセンスの有効期限情報と警告をマルチシステム ダッシュボードと「単一システムの管理」ページに表示。**

はどのように表示されますか？とのご質問があり、ちょっとテストしてみました。（出荷前のテストバージョンでの環境ですので出荷時のバージョンとは異なる可能性があることはご了承ください‥）

## IBM i 7.6 のNavigator for i に 7.5のシステムを追加する
まず、新規ノードの追加を開いて、、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/b0a7b508-1596-4ff0-953b-c6b76f9f3fc6.png)

から対象のIBM i のIP、ホスト名、接続ユーザー等を指定して追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/cd6a138b-cbb7-4e0f-bd02-716d4848b44e.png)

追加するとこんな感じに見えます。Navigator for i のシステムジョブはIBM i 7.6で動作していますが、個々のシステムへ接続し管理ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/de86348e-7f78-464f-902f-7f61f9088500.png)

この画面ですとOSベース？のライセンス有効期限が表示されるようです。

## IBM i 7.6 Navigator for iから7.5システムのライセンス情報を参照する

それではIBM i 7.5のシステムアイコンを開いて、ライセンスキー情報を見てみます。
下記のようにきちんと見えました。一部マスクしていますが理解頂けると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/0deccc4b-7333-4727-b8a7-217ae1f215e0.png)

元々のご質問はCBUライセンスも確認できますか？というものでした、CBUライセンスはちょっと導入済みシステムが無く、、ただ、こちらの結果からライセンスの情報はすべて明細で見えそうですね。
Oracle Cloud－1メモ


VCNの階層化サブネット戦略
VCN（Virtual Cloud Network）の階層化サブネット戦略とは、クラウド環境におけるネットワーク設計において、機能ごとにネットワーク（サブネット）を階層化・分離して設計するアプローチです。特にOracle Cloud Infrastructure（OCI）などのクラウドプロバイダーで用いられる概念です。

🌐 階層化サブネット戦略の目的
セキュリティ向上：リソース間のアクセスを制御しやすくする

運用の効率化：役割ごとに管理・監視を分離できる

スケーラビリティ：必要に応じて層ごとに拡張できる

コンプライアンス対応：機密性に応じたゾーニングが可能

vNICs間
これはクラウド環境（たとえばOCIやAWS、Azureなど）で、仮想NIC（Virtual Network Interface Cards）同士の通信や関係についての話だね。

アプリケーション層の横トラフィックとは？


ChatGPT:
いい質問です！
「アプリケーション層の横トラフィック（East-Westトラフィック）」というのは、クラウドやデータセンターの同じ層・同じネットワーク内のサーバー同士で発生する通信のことを指します。

🌐 横トラフィック（East-West）とは？
同じレイヤー、たとえば**アプリケーション層のサーバー同士（APサーバー間など）**で行われる通信

反対は North-Southトラフィック（クライアント ⇄ サーバー、または外部 ⇄ 内部）

oracle Cloud Infrastructure Zero Trust Packet Routing とは？


ChatGPT:
ナイスな質問です！
「Oracle Cloud Infrastructure Zero Trust Packet Routing（OCI ZTPR）」は、ゼロトラスト・セキュリティモデルをOCIのネットワーク層に適用した新しいネットワーク制御の仕組みです。まだ比較的新しい概念で、OCI特有の高度なセキュリティ設計の一部です。

🔐 OCI Zero Trust Packet Routing（ZTPR）とは？
ZTPR = 「誰にも信用を置かず、すべてのトラフィックを明示的に許可制にする」 というゼロトラスト原則を、VCNのパケットルーティングに取り入れた機能です。

要点を簡単に言うと：

ルーティングやセキュリティの定義を、「パケットがどこから来て、どこに行こうとしていて、どんな属性を持っているか」に基づいて細かく制御できる仕組み

🎯 何が従来と違うの？
従来のVCN	ZTPR（Zero Trust Packet Routing）
サブネット、ルートテーブル、セキュリティリスト中心	ポリシーベースでパケットごとに制御
静的なルーティングルール	コンテキストベースのルール適用
やや粗い粒度（IPレンジ単位など）	より細かい属性（ID、タグ、サービス）で制御可能
トラフィック制御の主役はネットワークエンジニア	セキュリティチーム主導でポリシー定義がしやすい


テナンシ内のVCN　とは？


ChatGPT:
いい質問です！
「テナンシ内のVCN（Virtual Cloud Network）」というのは、同じOracle Cloud Infrastructure（OCI）テナンシ内に作成されたVCNのことを指します。

🔍 まず、用語の整理！
✅ テナンシ（Tenancy）とは？
OCIにおけるクラウドアカウントの最上位単位

企業や組織に1つ割り当てられる「クラウドの所有権」みたいなもの

その中に複数のVCN、コンピュート、ストレージ、DB、IAMなどのリソースを持てる

✅ VCN（Virtual Cloud Network）とは？
OCI上で構築する仮想的なネットワーク

オンプレのネットワークのように、サブネット・ルート・ファイアウォール（セキュリティリスト/NSG）などを持つ

🏗 テナンシ内のVCN = 「同一クラウドアカウント内に存在するVCN」
例えばこんな感じ👇
css
コピーする
編集する
テナンシ（例：MyCompanyTenancy）
├─ VCN-A（アプリ用）
│   ├─ サブネット-A1（Web）
│   ├─ サブネット-A2（AP）
│   └─ サブネット-A3（DB）
├─ VCN-B（バッチ用）
│   └─ サブネット-B1（非公開）
├─ VCN-C（検証環境）
│   └─ サブネット-C1
VRChatアバターの着せ替えで使用・購入したアイテム一覧メモ

VRChatのアバターを着せ替えたり改変するときに使ったツールを個人的にメモ。

# 便利ツール系
Unityを使いやすくしたり、アバターの軽量化や衣装貫通のチェックをするのに役立つツール。

### Avatars 3.0 Manager（[リンク](https://github.com/VRLabs/Avatars-3.0-Manager)）
　無料ツール。アバターにアニメーションを導入する？ときに使う。
 銃などの3Dモデルを追加したときに、**Write Defaultを揃えることもできる**。（かつてはWDオフが推奨されていたが、現在はオン／オフどちらかに揃えればOK）
 ![スクリーンショット 2025-04-15 144930.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947046/119adedb-22ed-4727-9fd0-18f18c88217a.png)

### Gesture Manager（[リンク](https://booth.pm/ja/items/3922472)）
　無料ツール。Unity上でハンドジェスチャーに応じたアバターの表情変化をチェックできる。

### Modular Avatar（[リンク](https://modular-avatar.nadena.dev/ja)）
　無料ツール。アバターに衣装を着せるのに使う。詳しくは[公式サイト](https://modular-avatar.nadena.dev/ja/docs/tutorials)を参照。

### VRCHierarchyHighlighter（[リンク](https://booth.pm/ja/items/1326573)）
　無料ツール。UnityのHierarchyにカラーの下線が追加され、各オブジェクトの階層が識別しやすくなる。下図はSTUDIO JINGOさんのセレスティアのPrefab。
  ![スクリーンショット 2025-04-15 104954.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947046/d3b17c6f-ddf9-4736-bcdd-4e0191c0b069.png)
 同じカラー=同じ階層と一目でわかり、**衣装やアクセサリーのPrefabを追加するときに追加ミスを防止**できる。
　
### Avatar Optimizer（[リンク](https://booth.pm/ja/items/4885109)）
　無料ツール。**アバターを最適化することができ、VRChat内でのパフォーマンスが向上する**。ルート階層に「AAO Trace and Optimize」コンポーネントを追加してアバターをVRChatにアップロードすると、自動的に最適化を行ってくれる。
 ![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947046/dbabe96f-341a-470c-8af0-5b610fe88fc7.png)
アバターのInspectorで「AAO Trace and Optimize」コンポーネントが追加されていることが確認できる。
![スクリーンショット 2025-04-15 120931.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947046/eb958ff2-99cc-4a50-8f07-7c4c6a793597.png)
ほかにもコンポーネントはあるが、そちらは[マニュアル](https://vpm.anatawa12.com/avatar-optimizer/ja/)を参照。

### キセテネ改良版（[リンク](https://booth.pm/ja/items/3952537)）
　無料ツール。アバターに衣装を着せることができ、ボーンの設定もしてくれる。そのアバター向けに調整済みの衣装やアクセサリー、髪型を着せるために使う。**衣装等のサイズや位置を調整してくれるわけではないことに注意**。
![スクリーンショット 2025-04-15 133749.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947046/6b6abf53-e56f-4334-8fe3-1b7f6b3d1785.png)
エラーが出た場合は「ボーン詳細設定」タブで各項目にアバターのボーンを適切に設定しなおすと改善する。
![スクリーンショット 2025-04-15 141032.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947046/81d3e6b9-3eae-4de7-8cec-5834a0c12141.png)

### 確認に最適な体操アニメーション集"Error Checker"（[リンク](https://booth.pm/ja/items/5559748)）
　無料ツール。Gesture Managerと組み合わせることでアバターに体操アニメーションを実行させ、衣装貫通チェックができる。
 ![スクリーンショット 2025-04-15 153732.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947046/d9510eb2-5857-4706-b3bd-00265f85a5e2.png)
テスト観点をもれなく洗い出すための考え方の備忘録

## はじめに

テストケースを作るときに、「これで全部チェックできてるのかな…？」「なんか見落としてる気がする…」と不安になることがよくありました。

この記事では、私がそういった**不安や悩みから解放されたきっかけ**となった、
「テスト観点の出し方」と「テストケースの作り方」についてまとめています。

備忘録的でもありますが、同じように悩んでいる方のヒントになれば嬉しいです。

<br>

## 作成しているもの

テストをする際には、以下の2つを **セットで作成** するようにしています。  
この順序を守るだけでも、自然と網羅性の高いテストができるようになります。

1. **テスト観点**
2. **テストケース**

<br>

## テスト観点（観点出し）

具体的なテストケースを作る前に、以下の点を意識しながら **観点出し** を行います。

- **方向性を間違えていないか**（目線・要件とのズレがないか）
- **抜け漏れがないか**（MECE：漏れなく、ダブりなく）
- **全体のボリューム感**（テスト工数の見積もりにもつながる）

観点出しのための一覧は以下のように作成しています：

| 画面・機能 | 大項目         | 中項目         | 小項目        | 備考       |
|------------|----------------|----------------|----------------|------------|
| 画面A      | バリデーション | 項目a          | 入力なし       |            |
| 画面A      |                | 項目b          | 英数字以外     |            |
| 画面B      | テーブル更新   | column1        | ○○に更新       |            |
| 画面B      |                | column2        | ○○に更新       |            |

💡 **ポイント**  
- ツリー構造で「広く・深く」掘り下げると、抜け漏れが起きにくいです。
- この観点一覧が **テストケースのベース** になります。

<br>

## テストケース

テスト観点から、**実際の検証ステップに落とし込む** フェーズです。

観点で出したものをもとに、1ケースずつ具体化していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3942091/de050def-c7af-4ed6-aa78-0bdd1614f755.png)

<br>

| 項目名        | 説明                                                                 |
|---------------|----------------------------------------------------------------------|
| No.           | ユニークな番号                                                       |
| 画面・機能     | テスト対象の画面・機能名                                             |
| 大項目         | 一番大きく分類可能な要素（例：バリデーション、DB更新など）          |
| 中項目         | 大項目をさらに細かくした分類                                         |
| 小項目         | 中項目をより詳細に分けたもの                                         |
| 確認手順       | どうやって確認するのか。**使用データや操作手順など**を記載         |
| 期待値         | 得られるべき結果。「○○が表示される」「DBに○○が登録される」など   |
| 結果           | 〇（成功）、×（失敗）、-（対象外）                                   |
| 試験日         | 実施日                                                               |
| 担当者         | 実施担当者                                                           |
| 備考           | その他、特記事項など                                                 |

<br>

## 補足：意識していること

以下のような視点も意識すると、**より漏れの少ない設計が可能** になります。

- **異常系（エラーパターン）も忘れずにカバーする**
- **テスト観点と要件定義の照らし合わせ**
- **影響範囲の棚卸し（他画面やバッチ処理など）**
- **他者レビューのタイミングを意識する**（早い段階でレビューをもらうことで大きな修正を防げる）

<br>

## おわりに

テストケース作成は「ただの作業」になりがちですが、  
**仕様理解やリスク管理の観点からも非常に重要なフェーズ** です。

自分なりの型を持っておくと、スピード・精度の両方が上がるので、  
ぜひ自分なりのやり方を磨いていくヒントにしていただければと思います。
【EC-CUBE4.3】product テーブルにカラムを追加する　その2

## 目的
製品（dtb_product）にもフリガナを登録できるようにしたいとのこと。

## やること
管理画面 商品登録・詳細に「商品名（カナ）」を表示する。

## 手順

### 1. 商品登録・詳細のtwigファイルを編集する。
前回、dtb_product テーブルに、kana カラムを追加した。

今回、商品名の下に、商品名（カナ）を表示したい。

1. `app/Customize/template/admin/Product/product.twig`を作成
2. `src/Eccube/Resource/template/admin/Product/product.twig`をコピーして1で作った`product.twig`にペースト
3. 以降は、`app/Customize`配下の`product.twig`を編集する
3. 商品名の記述の下に、追記
```php
<div class="row">
    <div class="col-3">
        <div class="d-inline-block">
            <span>商品名（カナ）</span>
            <span class="badge bg-primary ms-1">
                {{ 'admin.common.required'|trans }}
            </span>
        </div>
    </div>
    <div class="col mb-2">
        {{ form_widget(form.kana) }}
        {{ form_errors(form.kana) }}
    </div>
</div>
```
### 2. ProductType.php を拡張して、kana　フィールドを追加する
`app/Customize/Form/Type/Admin/Extension/ProductTypeExtension.php`を作成する。
```php
namespace Customize\Form\Type\Admin\Extension;

use Eccube\Form\Type\Admin\ProductType;
use Eccube\Common\EccubeConfig;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\BirthdayType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;


class ProductTypeExtension extends AbstractTypeExtension
{
    /**
     * @var EccubeConfig
     */
    protected $eccubeConfig;

    /**
     * ProductType constructor.
     *
     * @param EccubeConfig $eccubeConfig
     */

    public function __construct(
        EccubeConfig $eccubeConfig
    ) {
        $this->eccubeConfig = $eccubeConfig;
    }

    // どのフォームを拡張するかを宣言（EC-CUBEのバージョンによって記述方法が異なる）
    public static function getExtendedTypes(): iterable
    {
        yield ProductType::class; // ProductTypeを拡張
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        // 追加したいフィールドを記述
        // TextTypeで文字列を入力するフィールドを指定
        // 「'required' => false」で入力必須ではないことを指定
        $builder
            ->add('kana', TextType::class, [
                'required' => false,
                'constraints' => [
                    // new Assert\NotBlank(),
                    new Assert\Length(['max' => $this->eccubeConfig['eccube_stext_len']]),
                ],
            ]);
    }
}
```
### 3. 試しに商品編集から登録してみる
問題なく登録することができた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850968/ed138e77-3c72-4eb2-8692-a5c7570760da.png)

### 追記
必須なのに、
```php
`required` => false,
```
していたりするので、コピペする場合は調整して下し亜。
Claude × Notion MCP Server でAIがデータベース作成！リストアップはまだ未対応【2025年4月時点】

Notion公式からリリースされた「Notion MCP Server」。  
これにより、AIアシスタントの**Claude**から、Notionのページやデータベースを直接操作できるようになりました！

---

## ✅ この記事でわかること

- MCP Serverとは何か
- ClaudeとNotionの接続方法
- 実際にできること／できないこと
- データベース作成の実演
- リストアップが難しい理由（エラーログあり）

---

## 🔧 MCP Serverとは？

**Model Context Protocol（MCP）**は、AI（Claudeなど）が外部ツールに共通の方法で接続できるようにするプロトコル。  
USB-Cのように、**「一つの規格でいろんなツールとつながる」**ことを目指したものです。

2025年4月、Notionが公式でこのMCPに対応した**MCP Server**をオープンソースで公開しました。

---

## 📦 環境構築手順（Claude Desktop × Notion）

### 1. Notion 側でインテグレーションを作成

- [Notion Developers](https://www.notion.so/my-integrations) から新規インテグレーションを作成
    - インテグレーション名：MCPtest
    - 種類：内部
- 「読み取り」「挿入」「更新」にチェック
- シークレットトークンをコピー
- Claudeから操作したいページにこのインテグレーションを接続

### 2. Claude の config に MCP Server を追加

`claude_desktop_config.json` に以下を追加：

```json
{
  "mcpServers": {
    "notionApi": {
      "command": "npx",
      "args": ["-y", "@notionhq/notion-mcp-server"],
      "env": {
        "OPENAPI_MCP_HEADERS": "{\"Authorization\": \"Bearer あなたのシークレットトークン\", \"Notion-Version\": \"2022-06-28\"}"
      }
    }
  }
}
``````
※ `Authorization` の値は Notion のシークレットトークンです  
設定後、Claudeを**必ず再起動**してください。 チャット画面右上に🔨ハンマーアイコンが表示されていれば、MCP接続成功です。

## ✅ MCPページの「接続」を忘れずに！

インテグレーションを作っただけでは、ClaudeはNotionのページを操作できません。  
**「操作したいNotionページに、インテグレーションを接続する」**必要があります。

### 📌 やり方：

1. Notionで操作したいページ(MCP)を開く  
2. 右上の「…」メニューをクリック  
3. 「Connections（接続）」を選択  
4. 作成したインテグレーション（例：`MCPtest`）を**選択して接続**

> ✅ この作業をしないと、Claudeはそのページにアクセスできません！

## 🤖 Claudeから操作してみる
以下のようなプロンプトをClaudeに送信：

```
Notionの「MCP」というページに議事録用のデータベースを作成してください。
```

Claudeが以下の処理を実行：
* 指定されたページを検索
* データベースを作成
* プロパティ（例：開催日、参加者）を設定
* ページに保存！

ここまでを**完全に自動化**できます。

## ⚠️ できること・できないこと（2025年4月現在）

| 操作状況 | 備考 |
|---|---|
| データベース作成 | ✅ 可能 | Claudeに自然言語で指示すればOK |
| データ挿入・更新 | ✅ 可能 | 日時や参加者など |
| 条件付き取得（日時検索など） | △ 条件付き | 成功する場合もあるが確実ではない |
| データ一覧取得（リストアップ） | ❌ 不可 | MCP Serverに `resources/list` などのAPIが未実装 |

## 🧪 エラーログの一部（抜粋）

```json
"method":"resources/list" "error":{"code":-32601,"message":"Method not found"}
```

Claudeが`list`系メソッドを呼び出した際、**MCP Serverに該当メソッドが実装されていないため失敗**しています。  
そのため、**データの読み取りやリストアップは現時点では難しい状態です。**

## 🧠 補足：Notionページの選定について
Claudeはプロンプト内にある**ページ名**と、Notionで接続されたページ名を突き合わせて対象を決定します。

例： Claudeの命令が「MCPページに作成して」→ Notion上のページ名も「MCP」である必要あり。

✅ 同じインテグレーションを複数ページに接続している場合は、ページ名が曖昧だと誤認されることもあるので注意！

## 🔮 今後に期待されること
* ClaudeやMCP Serverのアップデートで、リスト取得やDBクエリの柔軟性が向上する可能性あり
* OpenAI（ChatGPT）もMCP対応を表明済み（2025年内対応予定）
* 複数のAIが共通の接続方式でNotionなどを操作できる未来が近づいている

## ✨ まとめ
* Notion MCP Serverを使えば、ClaudeからNotionを操作できる
* 現時点では「作る」「書く」はOK、「読む（リストアップ）」はNG
* 非エンジニアでも設定可能、未来性◎
PL/I 初心者②

条件分岐
## 条件分岐(IF文)
```
基本
　IF 条件 THEN 文;
```
書き方
```
age = 20;

IF age >= 18 THEN
    PUT SKIP LIST('成人です');
```
※ageが18歳以上なら、「成人です」と出力。

### ELSEを含む
```
IF 条件 THEN 文1;
ELSE 文2;
```
書き方
```
IF age >= 18 THEN
    PUT SKIP LIST('成人です');
ELSE
    PUT SKIP LIST('未成年です');
```
※ageが18歳以上なら「成人です」と出力。それ以外は「未成年です」と出力


### 複数の処理をまとめて書きたいとき（DO〜END）
```
IF 条件 THEN DO;
    文1;
    文2;
END;
```
書き方
```
IF age >= 18 THEN DO;
    PUT SKIP LIST('成人');
    PUT SKIP LIST('お酒OK');
END;
ELSE DO;
    PUT SKIP LIST('未成年');
    PUT SKIP LIST('飲酒NG');
END;
```
※ageが18以上の時「成人」「お酒OK」を出力。それ以外は「未成年」「飲酒NG」を出力。

### 組み合わせ
```
IF age >= 18 THEN
    IF age < 65 THEN
        PUT SKIP LIST('現役世代');
    ELSE
        PUT SKIP LIST('高齢者');
ELSE
    PUT SKIP LIST('未成年');
```
ageが18以上で、65より小さいとき「現役世代」と出力。それ以外は「高齢者」と出力
ageが18以上でない時は「未成年」と出力


## 繰り返し文(DO文)
### 回数指定の繰り返し文
```
DO i = 初期値 TO 終了値 BY 増分;
    繰り返したい処理;
END;
```
例文
```
DECLARE i FIXED;

DO i = 1 TO 5;
    PUT SKIP LIST('i =', i);
END;
```
iに１〜５までを順番に出力する。

### BY句　指定された数を引く処理
```
DO i = 10 TO 0 BY -2;
    PUT SKIP LIST('カウントダウン:', i);
END;
```
10から-2ずつ0になるまで繰り返して、出力する。

### 条件による繰り返し
```
DO WHILE (条件式);
    処理;
END;
```
例文
```
DECLARE x FIXED;
x = 1;

DO WHILE (x <= 3);
    PUT SKIP LIST('x =', x);
    x = x + 1;
END;
```
「x <= 3」でxが3以上になったら下の繰り返し処理が終了。
1,2,3と出力されるが、4は条件を超えてしまっているので3で終了。
認証、認可について

### ■本記事の目的
クラウドサービスやデータプラットフォーム、BI分析ツールなどを
色々取り扱ってきましたが、その中で掲題の件について
整理してまとめていきたいと思います。

### ■なぜ、この記事を書くのか
筆者の勤め先が、データ分析基盤やAIアプリを取り扱っているのですが、
この認証周りについて、
製品・プラットフォームごとで、質問を多く受けることが多かったため、
基本的なことをまとめてみようと思いました。

確かに考えてみると
製品・プラットフォームによって、認証周りのID・事柄・概念・呼び方は
異なるので、混乱するのかもしれません。

### ■認証とは
認証とは何なのかですが、**本人確認**です。
英語だと「*Authentication*」、その略語で「*AuthN*」とか言ったりします。

この**本人**とは、
一般的には自分自身のユーザーのことを示す場合が多いですが、
システムを取り扱っているとそうはいきません。

以下のように**本人**の定義や呼び方が色々あったりします。
一般的なユーザーのほかにも、システム間接続やAPIなど、本人確認の目的は様々です。
〇ユーザー：
　・エンドユーザー：単にユーザーと言っているのは概ねこれ
　・システムユーザー
　・サービスユーザー
〇プリンシパル：
　・ユーザープリンシパル
　・サービスプリンシパル
〇ID（Identity）：
　・ユーザーID
　・マネージドID
〇特殊：
　・ロール（AWSのみ）

　
本人確認のためには**照合する何か**が必要になりますが、
「パスワード」が用語として広く一般かと思います。
簡単に言うと「鍵（キー）」が分かりやすい言葉ではあります。
こちらも呼び方が色々あります。
〇鍵関連用語：
　・パスワード
　・トークン
　・シークレット
　・鍵（キー）
　・証明書
　・署名

　
システム、デバイス、アプリに詳しい方だと**認証**という言葉を、
以下のような関連で見たことはあると思います。
〇認証関連用語：
　・ユーザー/パスワード認証
　・多要素認証
　・二段階認証
　・SAML認証（Security Assertion Markup Language）
　・キーペア認証
　・フェデレーション認証
　・OAuth　※厳密には認可の仕組み
　・ワンタイムパスワード認証
　・生体認証
　・PIN（Personal Identification Number）

　
ここまで整理しましたが、**本人確認**と一つの用語を取っても、
種類と戦略が、いくつかあることが分かります。

システムごとでの認証を検討する際は、顧客要件に応じて製品仕様を調査して、
認証方式を選んで構成する必要があります。

　
システムで認証を構成する際に意識しておくことがあります。
それは「**本人情報および鍵の所在**」です。

シンプルですが、これを意識するだけで、ほとんどの認証システムを理解できます。

認証プロセス（一旦認可は除く）と言うのは、ユーザー確認、照合を行うわけですので、
「**どこのユーザーが、どこの鍵を使用して、○○に認証する**」ということを
抽象的に理解しておきます。

認証の苦手意識を持ちやすい原因になりやすい、
SAML認証におけるIdP（IDプロバイダー）、鍵管理サービスが出てきても、
上記の理解があれば簡単になると思います。
※実際のレスポンスは、もう少し複雑ですが、最初は抽象理解ができればいいです。

### ■認可（承認）とは
次に、認証をクリアした後、
ユーザーに対して**何ができるか**を決める必要があります。
それが**認可**となります。製品・サービスによって**承認**とも言います。
英語だと「*Authorization*」、その略語で「*AuthZ*」とか言ったりします。


認可を決定する定義として以下の用語があります。
※サービス・製品によって概念は異なります。
　・権限
　・パーミッション（単純に英語です）
　・ポリシー
　・ロール

このあたりは、各製品ごとに依存する部分となります。
細かいアクセス権限のグループ化や権限制御レベルを管理階層で行うなど
各仕様は異なってきます。


### ■グループ
認証、認可に関わる部分としては、**グループ**があります。
これについても認可と同様に製品依存になりますが、
**認可を効率的に付与するためのユーザー管理**と考えれば良いです。

認証、認可の管理のベストプラクティスとして、
グループがあれば使用する方が良いでしょう。


### ■その他
SAML認証で特定のIdP（IDプロバイダー）を利用すると、
条件付きアクセスなどで**本人属性**を含めて
認証を構成することができます。
※IdPがサポートしている機能によります。
　例えば、MicrosoftEntraIDであれば、
　アクセス元のデバイス、IPアドレスなどを属性として
　認証の際に照合できます。

　
最後に、
簡単な記事になりましたが、どの認証でもこの基本を押さえれば、
大きくは変わらないので使えると思います。
振り返ると、認可部分の制御が製品固有で、
一番インプットの負荷が高いのかもしれません。

参考：
https://solution.kamome-e.com/blog/archive/blog-security-20211021/
https://sciencepark.co.jp/information_security/post/approval/

　
どこかで、SAMLとIdP（IDプロバイダー）についてまとめたいと思います。
SwiftUI日本語の半角()が少し下がって見えるのを簡単に修正

## 半角()を使いたい!でも下がって見えるのが気になる！

使用前❌
![スクリーンショット 2025-04-15 14.31.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117011/0616cf22-8a51-47cb-85d4-c0cfe84210c4.png)

使用後⭕️
![スクリーンショット 2025-04-15 14.30.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117011/14798656-5b3a-4173-b16d-4c77a1057b13.png)

()の位置の違いわかりますか？

全角（）だと余白が大きいので半角()を使いたい場面が多々あります。そのままだと文字のベースラインが()だけ少し下がってしまいます。元デザイナーとしてはとても気になります。iOS15以降から使える()のベースラインを調整する拡張メソッド？を書きました。

```sample.swift
extension Text {
/// 指定した文字列中の "(" と ")" の baselineOffset を日本語環境の場合のみ調整して Text を生成する初期化子
    /// - Parameters:
    ///   - kakkoAdjust: 調整対象の文字列。
    ///   - offset: baselineOffset の調整値（デフォルトは +1上にあげる）
    init( kakkoAdjust: String, baselineOffset offset: CGFloat = 1) {
        // Markdown として変換を試みるが、失敗した場合は通常の AttributedString を生成する
        var attrStr = (try? AttributedString(markdown: kakkoAdjust)) ?? AttributedString(kakkoAdjust)
        // 現在の言語が日本語の場合のみ、括弧のbaselineOffsetを調整する
        if Locale.current.language.languageCode?.identifier == "ja" {
            // 括弧 "(" のbaselineOffsetを調整
            if let range = attrStr.range(of: "(") {
                attrStr[range].baselineOffset = offset
            }
            // 括弧 ")" のbaselineOffsetを調整
            if let range = attrStr.range(of: ")") {
                attrStr[range].baselineOffset = offset
            }
        }
        // 調整後のAttributedStringを用いてTextを生成
        self.init(attrStr)
    }
}
```
使い方
```swift
    VStack{
                Text( kakkoAdjust: "5月5日(月)(使い方)")
            }
```
HC908で上級Lチカ

HC908が販売されていた当時はCodeWarriorなどの製品のコンパイラーが使われていました。SDCCも2.0くらいで、現在のものとずいぶん仕様が違いました。

タイマー割り込みでLチカするコードを現在のSDCC 4で書いてみます。

```c:timer.c
/* HC908JB8 sample code with sdcc 4 */

#include <mc68hc908jb8.h>

void overflow_inth(void) __interrupt 6
{
        PTD ^= 0x01;
        TRST = 1;
        TOF = 0;
}

void main() {
        CONFIG = 0x01; // Disable COP
        DDRD |= 0x01;
        PTD = 1;

        TSTOP = 1;
        TRST = 1;
        TMODH = 0xff;
        TMODL = 0xff;
        PS2 = 1;        /* Internal Bus Clock devide 16 */
        TOF = 0;
        TOIE = 1;       /* Interrupt Enable */

        __asm cli __endasm;

        TSTOP = 0;      /* start timer */

        for (;;) ;
}
```

```
% sdcc -mhc08 --stack-loc 0x013F --code-loc 0xDC00 timer.c
```

焼いてみます。

```
$ ./bl08 -c /dev/cu.usbserial-DA00WSMM -b 9600 -r 10 -t jb8 -x 12 -g reset timer.s19 
bl08 - MC68HC908 Bootloader - version 1.0.0.0
Reading S-records
Line ignored: S9030000FC

S-record data address 00FFF2 size 000002
S-record data address 00FFFE size 000002
S-record data address 00DC00 size 00005E

Mass erase
Program FFF2 - FFF3 
Program FFFE - FFFF 
Program DC00 - DC3F ....
Program DC40 - DC5D .
Execute code from DC00
```

FFF2がオーバフロー割り込みアドレスになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/68331eb0-8eff-4689-9539-5f0e0483f11a.png)

__interrupt 0はリセットベクターに予約されていて__interrupt 1がFFFCで__interrupt 2がFFFAになります。

下のプロジェクトはCodeWarriorとSDCC 2で作られていたようです。無理やりSDCC 4でビルドしてみましたが、動きませんでした。SDCC 4はSDCC 2よりもCodeWarriorに近いかもです。

https://usbirboy.sourceforge.io/

SDCCでは当初レジスタの定義がなかったのか、defineで定義するのが一般的でした。ところがSDCCのヘッダーにレジスタが入り、同じ名前でビットフィールドで定義されてます。このためコンパイルは通るけど、まったく違う処理になってしまいます。
laravel FormファサードにてGETリクエストのクエリパラメーター設定するときの注意点

## 概要

古いlaravelやlaravel collectivだとBladeで使えるFormファサードにて、GETリクエストのクエリパラメーターを設定する際にめっちゃ詰まったので方法をまとめておく。

## 前提

クエリパラメーターを追加する前のbladeのコードを下記に記載する。

```hoge.blade.php
<div>
    {{ Form::open(['route' => ['hoge.index'], 'method' => 'GET']) }}
    {{ Form::input('text', 'search_word', null, []) }}
</div>
<div>
    <a>
        <button>
            検索する
        </button>
    </a>
</div>
{{ Form::close() }}
```

## 結論

FormファサードでGETリクエストのクエリパラメーターを設定したい場合は`Form::hidden('キー名', 値)`を使って指定する。
`fuga_id=1`をクエリパラメーターに設定したい場合は下記のように設定する

```hoge.blade.php
<div>
    {{ Form::open(['route' => ['hoge.index'], 'method' => 'GET']) }}
    {{ Form::input('text', 'search_word', null, []) }}
    {{ Form::hidden('fuga_id', 1 }}
</div>
<div>
    <a>
        <button>
            検索する
        </button>
    </a>
</div>
{{ Form::close() }}
```

## 詰まったこと

ルートネームを使ってリンク先を指定し、クエリパラメーターを設定する場合は下記のようにする。

```hoge.blade.php
<a href="{{ route('hoge.index', ['fuga_id' => 1]) }}">
```

上記のように記載するとルートネームでURLパスが解決され末尾に`?fuga_id=1`が設定される。
自分はFormファサードを使う場合も同様だと考え、下記の様にコードを修正していた。

```hoge.blade.php
<div>
    {{ Form::open(['route' => ['hoge.index', 'fuga_id' => 1], 'method' => 'GET']) }}
    {{ Form::input('text', 'search_word', null, []) }}
</div>
<div>
    <a>
        <button>
            検索する
        </button>
    </a>
</div>
{{ Form::close() }}
```

ただ、この方法だと`search_word`のクエリパラメーターは設定されるが`fuga_id`のクエリパラメーターは設定されない。
下記の個々の状態でクエリパラメーターを確認したが`fuga_id`のクエリパラメーターは確認できない。

- リクエストを受け取ったコントローラーでバリデーションチェックのために使っているリクエストクラス（HogeRequest）の内容を確認
- リクエストを受け取ったコントローラーでデフォルトのリクエストクラス（Request）の内容を確認
- リバプロのnginxのリクエストログの内容を確認

ただ逆に先に紹介したコードでレンダリングされた画面をchromeを使ってコードを確認すると生成されたformタグのactionのURLに`?fuga_id=1`のクエリパラメーターが付与されたURLが設定されている。
そのためどこでクエリパラメーターが消失したのかが分からず詰まった。原因はそもそものコーディングミス。
Laravelでsqlログをファイル出力する

# はじめに
laravelはデフォルトだと、sqlのログがファイル出力されません。
開発するうえでログが残らないのは致命的なのでログがファイル出力されるようにしていきます。
今回はlaravel.logとは別ファイルを作って、sql専用のlogファイルに出力します。

# 環境
Laravel 12
Mysql 8.0

# クエリログを有効にする
config/database.phpにある接続設定で、logging設定を追加し有効にします。
```php
'connections' => [
    'mysql' => [
        // SQLクエリログを有効にする
        'options'   => [
            PDO::ATTR_EMULATE_PREPARES => true,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        ],
    ],
],
```

# クエリログの保存
AppServiceProviderで全てのクエリをログに保存する設定を加えます。
```php
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

public function boot()
{
    // クエリ実行時にログを出力
    DB::listen(function ($query) {
        Log::info("SQL: {$query->sql}, Bindings: " . implode(', ', $query->bindings) . ", Time: {$query->time}");
    });
}
```

# SQLログの保存ファイルの設定
config/logging.phpを以下のように設定します。
```php
'channels' => [
    'sql' => [
        'driver' => 'single',
        'path' => storage_path('logs/sql.log'), // ログファイルを保存するパス
        'level' => 'debug',
    ],
],
```
これでsql.logファイルにログが出力されるようになります。

# おわりに
開発環境だとdebugbarの方が便利かもしれません。
（自分は開発と本番で設定を変えたくないので、ファイルに吐いてしまいますが、、）
よい開発ライフを！
Windowsのタスクスケジューラーに関するメモ

# フルスクリーンで起動する

### MS以外のソフトの場合

多くのソフトでは、`/fullscreen` オプションが使用可能です。

:::note warn
※ただし、Windowsの従来版メディアプレイヤーでは、ウィンドウがフォーカスされていないと自動的にフルスクリーンが解除される点に注意してください。
（※ nircmd を使用してフォーカスを強制する方法もあるようですが、私自身はまだ検証していません。PowershellコマンドでHotkeyによって解決する方法も考えられます）
:::

---
### MSのソフトの場合
MSの一部ソフトでは、フルスクリーン起動用に `--start-fullscreen` を使用できるケースがあります。
たとえば、Edge（Chromiumベース）の場合は、`--start-fullscreen` が有効です。

---

### 従来版ではない方のメディアプレイヤー

以下のパスにあるメディアプレイヤー（UWP版など）では、特定のファイルを直接指定して開くコマンドラインのオプションが見当たらないため、

```
# バージョン違いなどあるので参考程度にお願いします。権限などで見れない場合、タスクマネージャーの詳細タブからイメージパスを見ると書いてあります。
"C:\Program Files\WindowsApps\Microsoft.ZuneMusic_11.2405.8.0_x64__8wekyb3d8bbwe\Microsoft.Media.Player.exe"

mediaplayer  # 追記：デフォルトでパスが通っていました。以下で起動できます。
wmplayer  "/path/to/video.mp4" /fullscreen   # 念のため旧メディアプレイヤー
```

タスクスケジューラで動画を自動再生させたい場合は、代替として VLC などの別のソフトを使用する方が望ましいです。

---

※ **VLC の場合**  
VLC でフルスクリーン起動をさせたいときは、  
- フルスクリーン用スイッチは `--fullscreen` もしくは短縮形の `-f` を使用します  
※ 一方、Chromium系統の場合は、`--start-fullscreen` が有効です。


## 秒数を指定して閉じる

「秒数を指定して閉じることはできない」と記述していましたが、実は **タスクスケジューラの設定タブ側** で「停止するまでの時間」を指定すれば、プロセスを強制終了できます。

加えて、**トリガーごとにも ExecutionTimeLimit（停止までの時間）を個別に指定することができ、タスク設定が有効な場合はトリガーの値が優先される**という仕様になっています。以下に検証結果をまとめます。

❌ → チェックボックスを外す
🟨／🟦 → 停止までの時間 長い／短い
🟥 → 停止せず

| タスク設定 | トリガー設定 | 停止までの時間 | 備考 |
|------------|--------------|----------------|------|
| ❌      | 🟨        | 🟥        | タスク設定が無効なため、トリガー設定も無視される |
| ❌      | 🟦        | 🟥        | 同上 |
| 🟨   | ❌        |  🟨          | タスク設定の時間が適用される |
| 🟨   | 🟨        |  🟨          | トリガー設定が優先され、同じ時間で停止 |
| 🟨   | 🟦        |  🟦          | トリガー設定が優先され、タスク設定を上書き |
| 🟦   | 🟨        |  🟨          | トリガー設定が優先され、タスク設定を上書き |
| 🟦   | ❌        |  🟦          | トリガーが無効なため、タスク設定が適用される |

:::note tip
補足：ドロップダウンで秒単位が選べない場合でも、手入力で「10 秒間」などとすれば設定可能です。
:::

## 単純にプロセスを終了する

```
taskkill
```
```
/im (タスクキルしたいEXEの名前)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809025/7930d1b8-0c86-4ac7-019b-767eb80ad191.png)
Chromeをタスクキルして閉じたあとにexample.comをEdgeフルスクリーン状態で開くものです。
タスクの実行順序の変更は、タスクを左クリックで選択し、右側の矢印ボタンを使用してください。

:::note warn

実際にはmsedge.exeではなく、msedge.exeへのパスを入力してください。  
引数としてそのままURLやパスをダブルクォーテーションでくくることで、ブラウザやその他のプログラムにおける「ファイルをプログラムから開く」と同等の動作をすると思われます。

---

※内部の仕組みについて  
これは、多くのWin32アプリケーション（特にブラウザなど）で期待通りに動作するそうです。  
Windowsでは、`CreateProcess` というAPIでプロセスを起動する時に、実行ファイル + 引数 を1つのコマンドライン文字列として渡すそうです。

:::


## 参考文献

旧メディアプレイヤーのコマンドラインパラメーター

https://learn.microsoft.com/ja-jp/windows/win32/wmp/command-line-parameters


## 編集履歴

2025-04-16 @TeruyamaZw さんよりご指摘いただき、VLCのオプション指定、秒数による自動終了、「引数の追加」に関する記述を修正しました。ありがとうございました。

2025-04-20 タスク設定とトリガー設定の組み合わせによるExecutionTimeLimitの挙動について追記しました。こちらも @TeruyamaZw さんとのやり取り・ご検証内容をもとに構成しています。

# 間違ってたら指摘ください！
[合格体験談]ITIL4ファンデーションに合格するまで

# はじめに
先日ITIL4ファンデーションを受験し合格しましたのでその体験記を書き残すことにしました。2025年1月にまた料金が上がってしまったので、これから受験する人は絶対一発で合格しましょう！
# 目次
- ITIL4ファンデーションとは
- 試験申し込み
- 勉強方法
- 受験当日
- まとめ
# ITIL4ファンデーションとは
ITILは「Information Technology Infrastructure Library」の略称で、ITサービスマネジメント（ITSM）の成功事例と重要なポイントを集約した書籍群のことです。ITIL4は最新のバージョン。アジャイルやDevOpsなど、システム開発やIT部門のプロジェクトマネジメントに関する新たな概念に対応した体系となっています。
# 受験料
61,630円（税込:67,793円）
バウチャー:ITIL4ファンデーション(PC0-003）52,000円（税込:57,200円）
引用元 url https://udemy.benesse.co.jp/development/qualification/itil4.html
# 試験申し込み
事前にバウチャーチケットを購入することにより20％OFFで受験することができます。
必ずチケットを購入して受験しましょう。
バウチャー→プロメトリック社のサイトで20％OFFの金額で申し込みができます。
受けたい日にちに受験することができます。

https://www.prometric-jp.com/examinee/test_list/archives/9

https://itstrategy.jp/p-voucher
# 勉強方法
会社で問題集をもらうことができたのでそれを解いて臨みました。
概念的なことを学ばずにいきなり問題を解いたので理解ができず、1冊本を購入しそれを読みながら問題演習を繰り返しました。
![71QYj+QKMAL._SL1500_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716505/b5f7e29b-24ca-49a3-82a4-e2626ec53ab7.jpeg)
**こちらの参考書は赤坂見附のオフィスに寄贈しました！興味ある方ぜひ借りてみてください！！！**
受験を申し込んだときに公式の教本がデータでもらえるのですが、そのことに気が付かず本を購入しました。
![978-9925-600-11-3-ITIL-4-Cover-v2_1-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716505/249075c1-78e9-4b1d-af8b-e8b3c1d64376.png)
受験日が決まっていて概念を理解したいのであれば公式の教本を読み込むだけで大丈夫です。問題集は会社で下記のデータをもらうことができたのでこちらをひたすら解いていました。

https://www.jpntest.com/free/ITIL-4-Foundation-JPN-mondaishu-itil-4-foundation-exam-itil-4-foundation%E6%97%A5%E6%9C%AC%E8%AA%9E%E7%89%88
#
本番は40問中60％で合格ですが、最低50問80％の正答率を目指してどんなに忙しくても毎日やりました。（休日は3-4倍くらい）
参考書を読む（読みながら）→問題を解く→わからない単語・分野を本やネットで調べる→問題を解くのサイクルで勉強を進めました。公式の問題集は日本語が怪しく、自分で他の問題集を買ってみましたが、ほぼ公式の問題集から出題されました。（しかも本番は日本語訳がちゃんとしていてわかりやすい！）
自宅だと集中できないのでなるべく家で勉強せずに喫茶店や図書館、ファミレスで勉強をしました。（特に会社帰りは勉強しないで疲れて何もせずに寝るのが目に見えていましたから(笑)）
それほど難しい内容（社会経験がある方なら20-30時間集中してやれば受かるレベルではあります。）ではありませんが、やはり54,000という金額（現在自分の時より値上がりました）を容易く失うわけにはいかないので11月から勉強し1月に受験しました。

# 受験当日について
試験開始15分前集合なので、テスト会場で受ける人は時間に余裕をもっていきましょう。
本番は身分証以外の持ち込みは禁止です。部屋から出るときも試験中のメモの持ち出しや問題の口外なども禁止です。
受験後に「英語」でアンケートが出るので焦らないようにしてください。そのあとで合否の判定がその場でなされます。受験後のメールでスコアが出ます。

# まとめ
 - 受験の申込みは必ずバウチャーを使うこと
 - 参考書とテキストは公式のものでOK
 - 自宅で集中できない場合は場所を変えて勉強すると良い
 - 試験会場には時間に余裕をもって向かうこと
Next.js環境でstorybookが使えなかったので解決してみました

## つまっていたエラー&問題

- storybookのローカル画面がずっとロードになる
- インスペクタモードのネットワークに下記エラーが出力される

```
[postcss] It looks like you’re trying to use tailwindcss directly as a PostCSS plugin.
The PostCSS plugin has moved to a separate package, so to continue using Tailwind CSS with PostCSS
you’ll need to install @tailwindcss/postcss and update your PostCSS configuration.
```

### このエラーが起きた環境

- Next.js：15.3.0
- storybook：8.6.12


## 何が原因なのか

### ❶ `postcss.config.mjs` ファイルで require() や文字列指定していた点

- ESM（.mjs）形式では、require() や "plugin名" での指定はサポートされていません！

```postcss.config.mjs
// NGな例
export default {
  plugins: ["@tailwindcss/postcss"], // ← 文字列はNG（ESMでは使えない）
};
```

### ❷ Tailwind CSS v4 から PostCSS プラグインの仕様が変更された点

- Tailwind CSS v4 では、PostCSS 用プラグインが別パッケージに分離されました。

|バージョン  |使用するパッケージ  | 
|---|---|
|v3以前  |tailwindcssを直接指定 | 
|v4以降  |@tailwindcss/postcss を明示的に指定 | 


## 解決方法

### ① 必要なパッケージをインストール
```
npm install -D @tailwindcss/postcss autoprefixer
```

### ② `postcss.config.mjs` を修正

```postcss.config.mjs
import tailwindcss from '@tailwindcss/postcss';
import autoprefixer from 'autoprefixer';

export default {
  plugins: [tailwindcss, autoprefixer],
};
```

### ③ Storybook を再起動

```
npm run storybook
```

## 改めて

v4環境では`tailwindcss`を直接 PostCSS に渡すのではなく、
@tailwindcss/postcss を経由して使う必要がありますが
環境構築段階ではこれが正しく設定されていないのでご自身で再設定しないといけません。
【ChatGPT＋4o Image Generation】で、行書体・楷書体・筆記体を書かせます。


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

　今回は、4o Image Generationで、行書体・楷書体・筆記体を書かせます。

:::note info
本記事は、ChatGPT（Plus版）
で行なっております。
画像はあります。　あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)
***
　こちらも載せますね。
　　[ChatGPTが使えない？ログインできない・反応しない原因やエラー時の対処法を解説](https://aismiley.co.jp/ai_news/chatgpt-error-resolution-explanation/)
***
　著作権法については
　　こちらを参照するのが
　　　良いのではないかと。

　文化庁レポートをもとにした
　　著作権法についての動画（約20分）
　　　[かいちのAI大学　【警告】ChatGPTの画像生成は危険です...【4o Image Generation】](https://youtu.be/8VLUnG-iyo0?si=rAfjMboqmNqppDGq)
***
　まずは、【ニュース】です。

　OpenAIが、
　　昨夜、ライブを行ないました。

　三つのモデルのAPIを
　　発表したのです。

　GPT-4.1
　GPT-4.1 mini
　GPT-4.1 nano
　　です。

　これは、GPT-4oの
　　メジャーアップグレードだそうです。

　詳細はこちら。
　　[Introducing GPT-4.1 in the API](https://openai.com/index/gpt-4-1/)

　従来のモデルよりも
　　Prompt追従性があるため、
　　　ユーザー側で
　　　　明確に指定を加えると、
　　　　　期待どおりの
　　　　　　アウトプットが
　　　　　　　得やすい、とのこと。

　本日から7日間限定で
　　無料利用可能、
　　　その後、割引提供予定とのこと。

　なお、
　　この三つのモデルは、
　　　ChatGPTに組み込まれるかは
　　　　わかりません。
　　　　　可能性はあるかと思いますが｡

　それから
　　性能向上と低コスト化に伴い、
　　　gpt-4.5-previewのサポートを終え、
　　　　非推奨として、
　　　　　2025年7月14日をもって
　　　　　　APIリストから
　　　　　　　削除されます。
***
　では、【本題】です。

　今回は、
　　4o Image Generationで、
　　　行書体・楷書体・筆記体を
　　　　書かせます。

　4o Image Generationは
　　もちろん、日本語が描けます。

　しかし、
　　特定の書き方は
　　　どうでしょうか？

　そこで
　　試してみました。

```Text:文字描画Prompt
黒バックにシンプルな白い＊＊＊で“ご挨拶”。描画
```

　行書体
![file_000000007b9c6243a3f901a1eb8a09c7_conversation_id=67fdd275-ce70-8007-ad14-36503d8ca04a&message_id=eaf17fa0-c4ce-44dc-b0fa-eb57a35920c9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/3522ab15-d978-4bb5-8dfd-aa86ee57cf1f.png)


　楷書体
![file_00000000e2d462438c5028074f158e2b_conversation_id=67fdd275-ce70-8007-ad14-36503d8ca04a&message_id=a6ed1e6a-e401-410f-80e6-41b192819196.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/570671b7-8c5e-4fab-b2fe-0fe86c4b10a5.png)


　筆記体
![file_000000006ba8620aba0f9f22eda58b49_conversation_id=67fdd275-ce70-8007-ad14-36503d8ca04a&message_id=de032853-bb81-487b-8794-df1566caeffd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/26a375b2-9ffb-4fc3-a9d9-9c5919aa6281.png)


　とりあえず、
　　それぞれの特徴が
　　　出ましたね。

　しかし、
　　少し難しいのか
　　　ちょっと漢字が省略されたり
　　　　変な文字が出たりしました。

　人に見せる場合には
　　チェックが欠かせませんね。

　なお、
　　グラレコ風の場合は
　　　文字がおかしくなる可能性が
　　　　ありますので、
　　　　　その場合はCANVAのような
　　　　　　ソフトで修正するのが
　　　　　　　いいそうです。　　

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

　今回は、ここまで。
遂に出た!? Windows10サポート終了のポップアップ

![2025-04-15 13.09.53.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82956/f58e5064-417e-4c18-9828-ab67100f36d2.jpeg)


遂に表示される様になったかっ!? 
Windows10のサポート終了による警告ポップアップがっ!?
今回はすごいシンプルデザインだな。

ちなみに、Windows10のサポート終了日は**2025年10月14日**だそうです。

このポップアップが出たのは、2025年04月15日13時ごろなので、アメリカ時間だと2025年04月15日00時ごろになる。
ちょうど残り半年で勝手にでるようにしているですが全画面表示にしないでほしい、あと右上にウインドウを閉じるバツ印をつけてほしいですね。