OmniAICreator/Qiita-1.07M huggingface dataset:
【Django】一般的なウェブサーバーとDjangoを使用した際のウェブサーバーの比較

## 一般的なウェブサーバーの図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/e30f6723-aad0-47d8-8b15-34ed4edb3459.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/cf0521ae-811c-4598-8502-01f0e19216d4.png)

## Djangoにおけるrequestとresponseのイメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/53e33267-aca4-4eed-9fed-df1c56ca5851.png)

## 参考文献
Djangoのツボとコツがゼッタイにわかる本 単行本 – 2020/7/30
大橋 亮太 (著)
p.21-22
【Power Automate】Teams上で、自分が自分にメンションして通知を出したい

備忘ログ。

　Teamsで自分にメンションを送ってリマインドしたい（アイコンにカウント表示されたい）、という至ってシンプルな要望でひっかかった、自メンションキャンセル仕様についてまとめます。
 
# 自分宛にきたメールをTeamsでメンションしてアラーム的に使いたい

　自分あてのメールを自分にメンションしよ、そんな要望はありませんか。私はあります。

　自分あてにメール来た時だけアラーム表示したいな。せや、Teamsでメンション飛ばして通知表示すれば楽勝やん！

  自メンションキャンセル仕様は、こういう大したことない要件を阻む仕様です。

# 投稿者が自分である場合、名前mentionもタグmentionも無効

　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36476/88d2d9ff-a749-4cbc-8411-4638465e1847.png)

　投稿者がユーザで自分となる場合、メンションに自分が含まれていると、何のメンションもされません。メンションの意味とは…とも感じなくもないのですが、メンションされません。

 自分が送ってるんだから、気づいてて当然だろう！という感じです。
 

 # 投稿者が自分でない場合、名前mentionは無効
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36476/25be9369-5644-40c0-bbaf-b3ed371bab25.png)

　じゃあ、投稿者がフローボットだった場合でも、名前メンションに自分を指定すると、何のメンションもされません。これは、フローボットでも、誰が実行操作したかは判明しているので、自分が自分にメンションしたとみなされるようです。メンションの意味とは（以下略）。
 　一応確認したのはフローボットだけで、他のVirtual Agentの挙動は不明です。

 # 【解決策】投稿者フローボットが、タグmentionでメッセージを送ることで、実現可能

　ただ、ギリ解決策がありました！
　唯一、自分宛に送ってないようにカモフラージュできる方法・・・それは、タグmentionで送ることです！

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36476/3e424f6d-f9f8-4e11-a963-28a38ef8578f.png)

　フローボットがタグmentionを送る場合、タグmentionには誰が含まれているかは判別されないため、自メンションキャンセルが効かない模様です。

# 自分宛mentionの通知まとめ

上記の内容をまとめると以下の通り。あくまで通知の話で、もちろんメッセージは届いている。

 | 投稿者 | 名前mention（自分） | タグmention（自分含む） |コメント|
|:---------------|:-:|:-:|:-|
| ユーザ（自分）  |×   | ×  |投稿者が自分ということでどっちもアウト  |
| フローボット（自分経由）  |×   |〇   |フローボットが自分経由のため、名前mentionは自分宛とみなされ無効の模様。|
【vscode】vscodeが起動しない＆修復過程あり

# あらすじ
環境：win11 + wsl2
突然、vscodeが起動しなくなった。
どうやらショートカットがお亡くなりになった模様...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3805709/7f37a2e4-aaa5-40f0-a000-d7bd1d7e23fe.png)


# 原因
エクスプローラーの機能で"Code.exe"を調べるとヒット。
どうやら、
`C:\Users\****\AppData\Local\Programs\Microsoft VS Code\_\Code.exe`
にあるようだ。

`Code.exe`自体は生きているようだ。
では、なんでショートカットが死んでいるのだ？

元のショートカットに記載されていたパスがこれ
`C:\Users\****\AppData\Local\Programs\Microsoft VS Code\Code.exe`
なんか、`_`謎のディレクトリが生えてる（驚）

実際、`_`ディレクトリ内に`Code.exe`があって、クリックすると起動もできた。
![スクリーンショット ディレクトリ Microsoft VS Code > _ ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3805709/24a5c84c-a319-4ab8-b1bf-e7aa2341ba99.png "ディレクトリ Microsoft VS Code > _ ")


あれ？
じゃあ、親ディレクトリの`Microsoft VS Code`には何が入ってるんだ？
![スクリーンショット ディレクトリ Microsoft VS Code](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3805709/bea127ed-34c5-47dd-9056-0f98db73baed.png "ディレクトリ Microsoft VS Code")


ディレクトリ構成はほぼ同じ。しかも、ほとんどのフォルダが `16:12` や `20:00` に作成されている。  
これはアップデートか何かによって自動生成されたと考えられそう。（実際、`snapshot_blob.bin`というファイルも存在している）

さらに、元の `Microsoft VS Code` と  `_` ディレクトリの同じ別のディレクトリを比較してみると、`Microsoft VS Code`の方は何もないが、`_`には何個かのファイルが含まれていた。

:::note 
vscodeの起動しない系エラーは、アップデート中に電源を落とすことで発生する場合もあるらしい...[^1]
:::

次に原因を調べるために、参考のブログ[^1]と同じようにログを見てみた。
```
Jun 16 11:00:01.730 INFO Collected all directories and file handles
Jun 16 11:00:01.783 INFO All file handles marked for deletion
```
がしかし、11:00時点でのものが最後のログだった...

結局、**根本原因はわからなかった**

<details><summary>余談</summary>
16:12分はパソコンを開いて充電中だったので、シャットダウン中ではなかったし、少なくとも16:20までは開いていた。加えて、特に重い作業などもしていなかった気がする。
ちなみに20:00ｄはカバンの中でPCをシャットダウンしていたと思う。
では、なぜエラーが発生したのだろうか？？？
</details>




# エラー解決
アップデートで移動されるはずだったファイル類が移動され無かったと感じたので、`_`ディレクトリを全て親フォルダに移しました。
すると、無事`Code.exe`が起動！！
ただ、アイコン画像が表示されていなかったので、PCを再起動。すると画像も復活しました！

(`_`ディレクトリを消しても起動はできましたが、今後の影響はわからないので自己責任でお願いします！)


# 最後に
無事、エラーを解決できてよかったです。
良きプログラミングライフを！


https://uniforce.co.jp/media/blog/s8hf__361l/
似た？エラー吐いた人もいました。（しかも僕より丁寧に書かれている！？）
[^1]:https://qiita.com/ryt-t5/items/9acfee61b9ac683d3bc1
AXISカメラ用アプリをビルドするチュートリアル

## 導入
AXIS Communicationsのネットワークカメラ群は、業務用監視カメラとして十分な耐久性・可用性を持ちつつ、高性能なチップを搭載し、さらにカメラ上で動作させるアプリケーションのビルドが可能な用に各種リソースを公開しています。よって、実践的なカメラソリューション用のデバイスの選択肢としては、かなり上位に来ると思います。
一方、自作のアプリケーションのビルドが可能なために、c++でコードを書いたり、クロスコンパイルしたりといったハマるポイントの多い開発が含まれてくるので、ノウハウの蓄積がしたいところです。公式でソースコードやドキュメントを公開してくれており、それらを参考にして、自作プログラムをデプロイする流れを説明します。

## 準備

### 本体の用意
AXISのカメラはプラットフォームとしてかなりチップなどが共通化されているので、機種が違ってもおおよそ同じ手順でアプリが作成可能です。
ここでは、半天球カメラ

https://www.axis.com/ja-jp/products/axis-m4317-plve

を使うことにします。このM4317にはARTPEC-8 SoCが乗っているので、結構処理能力があると思います。

買ってきたSDカードを挿入します。パスワードの設定や、SSHの有効化はCLI経由でも、コンソールからでも実行可能で、そこまでは済んでいるものとします。

### 開発マシンと接続
開発機にdockerをインストールしておいてビルドに使います。ビルド後にローカルでAXIS本体と接続、デプロイする流れです。

https://developer.axis.com/acap/get-started/set-up-developer-environment/pre-requisites/

公式では、Docker,Gitが必須、VSCoodeが推奨となっています。

### 公式examplesを元にする
https://github.com/AxisCommunications/acap-native-sdk-examples

公式のGithubに、様々なサンプルアプリケーションが揃っています。Dockerfileもそれぞれのサンプル用に用意されているので、そのままREADMEを読んで、ビルドはできていくはずです。

## ビルド用イメージの用意
各サンプルアプリケーションのDockerfileを参考に、Dockerfileを編集、これから作るアプリケーションのビルド環境を構成します。
（https://github.com/AxisCommunications/acap-native-sdk-examples/blob/main/hello-world/Dockerfile）

```Dockerfile
ARG ARCH=armv7hf
ARG VERSION=12.4.0
ARG UBUNTU_VERSION=24.04
ARG REPO=axisecp
ARG SDK=acap-native-sdk

FROM ${REPO}/${SDK}:${VERSION}-${ARCH}-ubuntu${UBUNTU_VERSION}

# Building the ACAP application
COPY ./app /opt/app/
WORKDIR /opt/app
RUN . /opt/axis/acapsdk/environment-setup* && acap-build ./
```
上記はhello-worldのDockerfileです。ほぼ、公式提供のイメージそのままですね。自分のアプリケーションで、その他ライブラリを利用するときに、ここに追加されていくイメージです。
注意点としては、AXIS本体のパッケージの更新などは現実的ではないので、扱う機種の最も古い中身に合わせる必要があります。例えば、
////
OpenCVを追加するとき、opencvのlibopencv_core.so, libopencv_imgproc.soなどはlibc.soを参照＞AXISのGLIBCのバージョンが2.36までなら、ビルド時のlibcも2.36までのバージョンにすべき、つまりUBUNTUは22.04（GLIBC=2.35）以下が良い。
////
のようなところです。さて、Dockerfileが用意できたところで、これをビルドします。
```docker build -t <APP_IMAGE> .```

## コンテナ内でビルド
公式のexamplesの各アプリケーションにはLICENSE,Makefile,<本体のコード>.c /<本体のコード>.cpp, manifest.jsonなどが格納されています。ビルド用のコンテナを
```docker run --rm -it -v $PWD:/temp  <APP_IMAGE> /bin/bash```
などで立ち上げ、ソースコードやmakefileのあるディレクトリでmakeすると手動でビルドできます。
AXISの提供環境は、手動のビルドよりも手厚くなっていて、Dockerfile内で最後に呼び出している、
``` RUN . /opt/axis/acapsdk/environment-setup* && acap-build ./　```
の部分で、環境変数などが自動で設定されたうえで、acap-buildがビルド済みのファイルを生成します。hello-worldのREADMEにあるように、
```docker cp $(docker create <APP_IMAGE>):/opt/app ./build```
でコピーしてくれば、（バイナリ、.eap、...)などの一連のファイルが得られます。

## デプロイ

.eapは全部入りしたパッケージなので、これをAPI経由かコンソールでアップロードすれば、自前アプリケーションのデプロイが完了します。


## 実行
カメラのWEBコンソール画面から、Apps > インストールしたアプリ > トグル　で実行され、hello-worldなら（点が上下に3つ並んだアイコンから）App Logsに結果が出力されるはずです。

## まとめ
ソースコードやmakefile、manifest.jsonなどを用意したうえで、それらを読みだしてビルドするところまで、Dockerfile内に書き込んでおくことで、環境構築からビルドまでの一連の処理を一息に進められます。
公式のexamplesがある程度充実していますが、必ずしもバージョンなどは最適になっていないので、注意しつつ進めましょう。

今回は以上です。ありがとうございました。
EC2上でOffice利用するときは注意！AMIバックアップからの復旧ができない

# はじめに
AWS EC2上でMicrosoft Officeを利用する場合、今までならばSPLAライセンスによる利用ができましたが、2025年9月30日以降AWSなどの主要クラウドサービス (Listed Provider) では、MicrosoftのSPLAライセンスの持ち込みが原則禁止されます。対応のためAWSから提供されるライセンスに切り替える必要があり、AWS License Managerのユーザーベースのサブスクリプション機能に変更する必要があります。

切り替え以外にバックアップとリストアについて注意することがあり、問題と対処方法について記述します。

# 問題の概要
AWS License ManagerのユーザーベースのサブスクリプションでOfficeを利用する場合、指定されたAMIから起動する必要があります。起動するとRun Commandが実行されライセンス関連の初期設定が実行されます。その後License Managerでユーザーとインスタンスの関連付けを実施していきます。

バックアップのAMIから復旧するとインスタンスIDなどが異なる別EC2として作成されます。そのためライセンス認証が正しく復旧できない状態となります。

# なぜこの問題が起きるのか？
AMIから新規インスタンスを作成すると以下の状態になります。

- 新しいインスタンスIDが割り当てられる
- Officeのライセンス認証はハードウェア情報と紐付いているため、新しいインスタンスでは「別のサーバ」として認識されてしまう

# どう対処すべきか？
AWSのドキュメントを確認しましたがAMIからの復旧方法は見つからないため、何らかの要因でリストアを実施するときには、**新規サーバの作成**が必要となります。

## 運用上考慮すべきこと
復旧方法が新規作成となるため、復旧計画についても見直しが必要になる場合があります。

- AMIからのインスタンス復旧ができないことを復旧計画で考慮する
  - 新規作成となるためRTO（目標復旧時間）への影響
- 異なるリージョンへのAMIコピー
  - DRなどで別リージョン復旧が必要な場合
- 別アカウントでのAMI共有
- License Managerの仕様でライセンス認証が正常にできないときには、インスタンスが終了されることがある

## 構成上考慮すべきこと
- データはCドライブ以外に保管し、EBSのDeleteOnTerminationは無効にする（意図しない削除に対する備え）
- Officeの利用については、Amazon WorkSpacesの活用も検討する

# まとめ
EC2上でOfficeを利用する場合、AMIによるバックアップ・復旧は推奨されません。代替となるバックアップ方法を検討し、適切な運用設計を行うことが必要になります。
Djangoの設計思想

## Djangoの設計思想
　Djangoは、Pythonの設計思想であるBattery includedという考え方を受け継いでいると言われています。
　Battery includedは、直訳すると「バッテリーが含まれている」という意味になりますが、これを意訳すると、「必要なものが全て含まれており、電源につなぐだけでそれをすぐに使えるようになる。」と言うことが出来ます。
　つまり、Djangoは実装において必要なモジュール・パッケージが数多く含まれているフレームワークということが出来る。

## 参考文献
Djangoのツボとコツがゼッタイにわかる本 単行本 – 2020/7/30
大橋 亮太 (著)
p.19
CursorとClaudeCodeを連携させるためのExtentionの入れ方

## ClaudeCodeのIDE統合機能について

ClaudeCodeとCursorを連携させると、コンパイルエラーの検知などの便利機能が使えるようになります。インストールにつまづきやすいので、手順をメモしておきます。
https://docs.anthropic.com/ja/docs/claude-code/ide-integrations


## 手順

### 1. 「cursor」をターミナルで使えるようにする

Cursorから「Ctrl+Shift+P」でコマンドパレット開き、「cursor」コマンドをイストールします 
```
> ShellCommand:install 'cursor' command
```


### 2. CursorのターミナルでClaudeを開く
Cursorから「Ctrl+J」で下部のメニューを開き、「Terminal」のタブで「claude」コマンドを実行してClaudeを立ち上げます
```
claude
```


### 3. 完成！
Cursorの右上を確認すると、Claudeのアイコンが出ています
![スクリーンショット 2025-06-17 15.32.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126388/1216cf38-c17d-4dc1-9308-d012d047a128.png)
フレームワークとは

## フレームワークとは

フレームワークとは、日本語に訳すと枠組み。

フレームワークはあっても無くても良い。

フレームワークが無くても目的とするアプリやウェブサイトを作成することが出来る。

例
料理とウェブアプリケーションの対比
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/afbbedc3-d1a8-4a2b-b35b-cf0b72a679ef.png)

フレームワークはあっても無くても良いが、フレームワークを使うことで効率的にアプリケーションを作ることが出来るようになる。

## 参考文献
Djangoのツボとコツがゼッタイにわかる本 単行本 – 2020/7/30
大橋 亮太 (著)
p.16-17
PostgreSQLで爆速化したSQLテクニック集【Before/After付き】

## はじめに

PostgreSQLを使っていると、 **「動くけど遅いSQL」や「なぜか重くなる処理」** に遭遇することがあります。

この記事では、実務で遭遇した“重いSQL”を具体的にどう書き直せば高速化できるかを、Before/After形式で紹介します。

* クエリ最適化の基本
* 実務で見逃しがちなNGパターン
* インデックスや集約関数の使い方

など、読んだその日から役立つ知見を詰め込みました。

---

## 1. WHERE句で関数を使うとインデックスが効きません

### ❌ Before：

```sql
SELECT * FROM users WHERE to_char(created_at, 'YYYY-MM-DD') = '2024-06-01';
```

**問題点**：関数を使用するとインデックスが無効化されます

### ✅ After：

```sql
SELECT * FROM users WHERE created_at >= '2024-06-01' AND created_at < '2024-06-02';
```

**改善点**：インデックスが効くよう、日付の範囲指定で記述を変更します

---

## 2. OFFSETは重いため、カーソルベースに切り替えましょう

### ❌ Before：

```sql
SELECT * FROM orders ORDER BY created_at DESC OFFSET 10000 LIMIT 20;
```

**問題点**：OFFSETが大きいと実質全件スキャンに近くなります

### ✅ After：

```sql
SELECT * FROM orders 
WHERE created_at < '2024-06-01 12:00:00' 
ORDER BY created_at DESC 
LIMIT 20;
```

**改善点**：カーソル（ページングの基準値）を使って高速化しています

---

## 3. COUNT(\*)を速くしたいときは対象を絞りましょう

### ❌ Before：

```sql
SELECT COUNT(*) FROM access_logs;
```

**問題点**：巨大テーブルの全件カウントは非常に遅くなります

### ✅ After：

```sql
SELECT reltuples::bigint FROM pg_class WHERE relname = 'access_logs';
```

**改善点**：精度よりも速度を優先し、推定件数を取得します

---

## 4. EXISTSの代わりにJOIN＋LIMIT 1を使うこともできます

### ❌ Before：

```sql
SELECT * FROM users WHERE EXISTS (
  SELECT 1 FROM orders WHERE orders.user_id = users.id
);
```

**問題点**：EXISTSは条件によっては非効率です

### ✅ After：

```sql
SELECT DISTINCT users.* FROM users
JOIN orders ON orders.user_id = users.id
LIMIT 1;
```

**改善点**：LIMITを使うことで、存在チェックを最小処理で実現します

---

## 5. GROUP BYとJOINの順番に注意しましょう

### ❌ Before：

```sql
SELECT u.name, COUNT(o.id)
FROM users u
JOIN orders o ON o.user_id = u.id
GROUP BY u.name;
```

**問題点**：JOIN対象のテーブルが巨大だとGROUP BYが重くなります

### ✅ After：

```sql
SELECT name, order_count FROM (
  SELECT user_id, COUNT(*) AS order_count
  FROM orders
  GROUP BY user_id
) o
JOIN users u ON u.id = o.user_id;
```

**改善点**：先に集約してからJOINすることで処理量を削減しています

---

## まとめ：遅いSQLには必ず“理由”があります

| 課題           | 解決の観点           |
| ------------ | --------------- |
| 関数でWHERE句    | 範囲条件で書き直す       |
| OFFSET地獄     | カーソルベースに変える     |
| COUNT全件      | 推定件数で代替する       |
| EXISTS過多     | JOIN＋LIMITで代替可能 |
| JOIN＋GROUP重複 | 集約を先に行う         |

速くなるSQLは、読みやすくなるSQLでもあります。
パフォーマンスは設計の問題であり、構文の問題ではありません。

爆速化のポイントは「当たり前だと思っている構文」を、“実行計画の目線”で見直すことです。

---

## おわりに

PostgreSQLはチューニング性が高い一方で、“気づかなければ損をするポイント”も多くあります。

実務で悩んだとき、この記事が一つの気づきになることを願っています。
自動化の原則

ドキュメントを整理していたら我ながら良いこと書いてるなと思ったので、供養がてらシェアします。
主にiPaaSツールを使用した自動化を想定して原則を記載しています。

## 要件定義

### 原則1：依頼者の言うことをそのまま実現しない

- **理由**  
  - 依頼者を喜ばせることが目的ではなく、全体の業務効率を上げることが目的。  
  - 依頼者は現行プロセスには詳しいが、効率的な業務設計には詳しいわけではない。

---

### 原則2：手動で運用を固めてから自動化する

- **理由**  
  - 運用が固まらない状態での自動化は、仕様変更が頻発し、コスト増に繋がる。  
  - 運用設計から対応する必要があり、スキルも工数も高くつく。

---

### 原則3：「手動工数 × 反復回数 ≫ 自動化工数」を守る

- **理由**  
  - 自動化の判断基準は、「継続的に発生する作業が自動化コストを上回るか」。  
  - 自動化には構築だけでなく、メンテナンスコストもある。

---

### 原則4：自動化前に業務プロセスを改善する

- **理由**  
  - 自動化しても、元の業務プロセス自体が非効率だと、効果が出ない。  
  - プロセス改善により、そもそも自動化が不要になることもある。

---

### 原則5：長期的に使われない自動化はしない

- **理由**  
  - 数回しか使わないものは、手動の方が安いことが多い。  
  - 後にプロセス変更が起きたとき、暗黙知化した障害になることもある。

---

### 原則6：自動化されたプロセスは暗黙知化しやすいと理解する

- **理由**  
  - 時間の経過とともに処理内容を理解している人が減る。  
  - 条件分岐をシンプルに保ち、陳腐化しないドキュメントが必要。

---

### 原則7：工数は要件ごとに吟味する

- **理由**  
  - 一つの要件を外すだけで工数が半分になることもある。  
  - 本当に必要な要件か、依頼者と確認を行う。

---

### 原則8：「便利だろう」で自動化しない、「どうしても」で自動化する

- **理由**  
  - 「便利そう」で作ると使われないリスクが高い。  
  - 本当に困っている人と一緒に作ることで、無駄な開発を避けられる。  
  - 依頼者の要求が「便利」止まりではないか注意する。

---

## 運用

### 原則1：不要になったプロセスはすぐに停止・削除する

- **理由**  
  - 暗黙知化すると削除判断が困難になる。  
  - 削除せず保管する場合は、`【サンプル】`等の名前に変更し、意図を明示する。

---

### 原則2：未来の自分のために丁寧な仕事をする

- **理由**  
  - 小さなコメントや簡易ドキュメントが、後の自分やチームを助ける。  
  - メンテナンスや引継ぎがしやすくなる。

---

### 原則3：依頼者にテストしてもらう

- **理由**  
  - 実装者の意図と依頼者の目的が一致していないことがある。  
  - 要件に含まれていない仕様バグは、依頼者にしか気づけないことが多い。  
  - 修正は後になればなるほどコストが高くなるため、完成直後に確認を依頼する。

---
【大嶋淑之・新潟県】AIと「良い距離感」で付き合う動画制作術

こんにちは！新潟で動画クリエイターをしている大嶋淑之です。

動画制作の現場も、近年AI技術の進化によって大きく変わってきています。AIによる自動編集、文字起こし、画像生成など、様々なツールが登場し、私たちクリエイターの業務効率化に貢献してくれています。

私も積極的にAIツールを取り入れていますが、その中で「これは意外だった！」と感じる、AIとの付き合い方について、今回はお話したいと思います。それは、AIを「完璧なアシスタント」として使うのではなく、**「自分を客観視させてくれる存在」**として活用することです。

AIは“ダメ出し”の達人！？
動画編集において、私は常に「クライアント様の意図を正確に汲み取り、それを映像で表現すること」を大切にしています。そのために、編集の際には何度も見返し、細部にわたるまでこだわります。

しかし、人間が作るものには、どうしても**「主観」**が入ってしまいます。

例えば、「このカットは絶対必要だ！」と思っていても、客観的に見ると流れを阻害していたり、メッセージが不明瞭になっていたりすることもあります。そんな時に、AIが意外な形で役立ってくれるんです。

具体的には、生成AIに、作成中の動画のコンセプトやターゲット層、伝えたいメッセージをインプットし、生成された文章を元に動画の構成を再検討したり、動画の一部を静止画として切り出し、その画像に対してAIに「この画像からどのような感情が読み取れますか？」「このシーンの意図は何だと思いますか？」といった問いかけをしてみるのです。

すると、AIは感情を持たない分、非常にロジカルかつ率直なフィードバックを返してきます。

「このシーンは、ターゲット層の関心を引く要素が不足している可能性があります。」
「このBGMは、伝えたいメッセージと感情的に乖離しているかもしれません。」

といった、時には耳の痛い意見が返ってくることもあります。最初は「え、そんなことないはずだけど…」と思うこともありますが、改めて冷静に自分の作品を見つめ直すと、「確かに、そうかもな」と納得させられることが多いのです。

AIが教えてくれる「視聴者の視点」
特にAIが優れていると感じるのは、**「平均的な視聴者の視点」**を提供してくれる点です。クリエイターは、どうしても専門知識や制作意図が先行しがちですが、AIは膨大なデータを元に、一般的な視聴者がどのように映像を認識し、どんな情報を求めているかを分析してくれます。

これにより、自分では気づかなかった「伝わりにくさ」や「誤解を生む可能性」を発見し、より伝わりやすい映像へと改善するヒっかけを得られるのです。まるで、もう一人の客観的な編集者が隣にいるような感覚です。

また、例えばYouTube向けの動画であれば、視聴者の離脱ポイントになりそうな部分をAIに分析させ、改善策を検討することもできます。

AIは「引き算」のパートナー
動画制作では、つい「足し算」で考えてしまいがちです。もっと情報を足そう、もっと派手な演出を加えよう、と。しかし、本当に心に響く映像は、時に「引き算」によって生まれることもあります。

AIは、その「引き算」のヒントを与えてくれるパートナーです。無駄な要素を削ぎ落とし、本当に伝えたいメッセージだけを際立たせる。AIの客観的な視点があるからこそ、その判断を大胆に行うことができるようになりました。

これからのAIとの共創
もちろん、AIが完璧な答えをくれるわけではありません。最終的な判断やクリエイティブな決定は、常に人間である私の役割です。しかし、AIを「作業を効率化するツール」としてだけでなく、「自分の視野を広げ、作品を客観視させてくれる存在」として活用することで、動画制作の質は格段に向上すると感じています。

これからも、AIを上手に活用しながら、より心に響く映像を追求していきたいと思います。皆さんも、ぜひAIとの「意外な付き合い方」を模索してみてはいかがでしょうか？
[Teleport] UnrealのPIE等でプレイヤーをテレポート [BugItGo]

# 概要

プレイヤーを任意の位置に瞬間移動させるコンソールコマンドを紹介します。

Teleportは照準を合わせた場所に瞬間移動します。
BugItGoは、任意の座標に瞬間移動します。
ButItGoを使うと空中に浮いたままになりますが、Walkコマンドで着地できます。

ShowDebug CAMERAコマンドで現在位置を座標値で表示できるので、合わせて使うと便利です。

https://qiita.com/yorung/items/1db3bb681b1f7bfc12d7

# Teleport

引数をとらないコマンドです。
カメラが向く方向に対しLineTraceSingleByChannelしてヒットした場所にテレポートします。

![Untitled video - Made with Clipchamp.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66160/f66f499a-1dd5-4d7a-8745-59e12cbabdc9.gif)

Third Personサンプルでは、仕組み上カメラは常にプレイヤーキャラの腰骨を見ているので、腰骨で照準をあわせると考えると狙った場所に行きやすいです。


# BugItGo

引数として座標値と回転値を取るため、自由な位置にテレポートできます。

![Untitled video - Made with Clipchamp (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66160/b223cc71-b833-4374-b1de-24679018239a.gif)

X Y Z Pitch Yaw Rollの順に６つの引数をとります。

```
> BugItGo 100 200 500 0 90 0
```

もしくは、回転値を省略して、以下のように入力してもOKです。

```
> BugItGo 0 0 1000
```

瞬間移動後は宙に浮いたままになるので、Walkコマンドで着地します。
【MySQL】which is not functionally dependent on columns in GROUP BY clause;  this is incompatible with sql_mode=only_full_group_by エラーの対応について

春からWHIにてITエンジニアをしているhinoです
今回はMySQL触っている際に遭遇した以下のエラーについて解決に至るまでをまとめてみました。
```bash
which is not functionally dependent on columns in GROUP BY clause; 
this is incompatible with sql_mode=only_full_group_by
```


## どういう状況で起きたのか
SQLでGROUP BY句を使って集計をして、SELECTでカラムを表示する際にこのエラーが出ました。


例として商品の販売金額や販売個数を記録するテーブル（items）があると仮定します。
- **item_code**: 商品コード
- **item_amount**: 販売個数
- **sale_amount**: 販売金額
- **sale_date**: 販売日

このテーブルに対して販売金額を集計したいとして以下のクエリを実行すると最初に記載されたエラーが出ます。
```sql
SELECT item_code, SUM(sale_amount), sale_date 
FROM items
GROUP BY item_code;
```

### エラー
```bash
Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 
'hoge.items.sale_date' which is not functionally dependent on columns in GROUP BY clause; 
this is incompatible with sql_mode=only_full_group_by
```
このエラーの意味は以下の通りです。
「SELECTの3番目の式（**items.sale_date**）がGROUP BYされていない（=集約されていない）ので、不正なクエリとなっている」

## 解決策
[MySQLのリファレンス](https://dev.mysql.com/doc/refman/9.3/en/group-by-handling.html) を見てみると、`only_full_group_by` モードである場合は GROUP BYで指定していなく、関数従属をしていないカラムを参照するクエリはエラーを出力するようにしているようです。

以上のことから、集計されていないカラムについては出力をしないという方法が有効になります。
つまりは集計関数やGROUP BYを使っていないカラムは集計をした際にはSELECTしないようにすることで解決できます。

先ほどのクエリだと **sale_date** が集計されていないカラムになりますので、**sale_date** を除外することでクエリが正常に処理されます。
```sql
SELECT item_code, SUM(sale_amount)
FROM items
GROUP BY item_code;
```
:::note info
他にも`only_full_group_by` モードを無効にする、`ANY_VALUE()` を使うといった方法がありますが割愛します...。詳細は[MySQLのリファレンス](https://dev.mysql.com/doc/refman/9.3/en/group-by-handling.html) をご確認ください。
:::

## まとめ
- タイトルのエラーは集計時に関数従属をしておらず、集計されていないカラムをSELECTすることで発生
- 修正策の一つに非集計カラムをSELECTしないようにする方法がある
IPアドレス：２つの形式 

はじめに
だれかの書いた説明をまとめると自分の口で説明するとなったときにわからなくなってしまうので、自分に説明するかのようにまとめています。

## IPアドレスとは
ネットワーク上で通信を行うために、各機器に割り当てられる**一意の識別番号**。
一般的に「住所」のような役割を果たし、データが正しく届けられるために使われる。

**理解のポイント**
- 一意というのは「唯一の、ただひとつ」という意味
- ネットワーク上で「どの機器か」を識別するため、同じIPは存在しないようにする
- 一意の数字だから、間違いなくそのアドレスに届けられる

## IPv4（Internet Protocol version 4）
IPv4は、0~255の値をとる4つの10進数（オクテット）を「.（ドット）」で区切った形式で構成。全体の長さは32bitで、最も広く使われている形式。

表示例：**192.168.0.1**

**理解のポイント**
- 4つのオクテット = それぞれ8bitの２進数（192 = 11000000）
- 32bit = 8bit × ４つのオクテット
- 0~255なのは、2進数8bitの範囲（00000000〜11111111）

:::note info
世界中で使われてきたが、アドレスの数が枯渇してきた
　　→　その解決として、IPv6アドレスが生まれた
:::

### 4つのオクテットじゃなくてもIPv4として使えることもある
表示例：
**0xC0A80001** = 192.168.0.1<br>**0xC0.0250.1** = 192.168.0.1(C0→192、250→168)

コンピュータの多くの基本的な仕組みや言語はC言語をルーツにしていることが多く、その書き方ルールが広く採用された背景がある。

|書き方|解釈|例|意味|
|---|---|---|---|
|0x~|16進数|0xFF|255|
|0~|8進数|070|63|
|数値のみ|10進数|100|100|

**理解のポイント**
- C言語では、先頭に何かをつけることで、「進数を明示にする」ルールがある。
- 最近のブラウザではセキュリティの観点からやめているケースが多い。
- フィッシング詐欺の偽装に用いることもあるので、注意が必要。

## IPv6（Internet Protocol version6)
IPv6は128bitで構成され、16進数4桁のブロックが８個、「:（コロン）」で区切られた形式。IPv4の後継として設計され、膨大な数のアドレスを提供する。

表示例：**2001:0db8:0000:0000:0000:ff00:0042:8329**

**理解のポイント**
- 合計128bit = 16進数4桁 × 8ブロック
- サブネット表記はCIDRのみ

:::note info 
IPv6は少しずつ普及しているが、完全移行には時間がかかっているため、IPv4とIPv6が混在しているのが現状
:::

### 省略表記
IPv6は16進数で表記しても長いことから、以下の３つのルールがある。
- フィールドごとに先頭の0の並びは省略可能
   ```01DA → 1DA、0012 → 12```
- フィールドのbitがすべて0の場合は１つの0に省略可能
   ```0000 → 0```
- bitがすべて０のフィールドが連続していたら、::に省略可能
   ```2001:0000:0000:0000:aaaa:bbbb:cccc:1111```
   ```→ 2001::aaaa:bbbb:cccc:1111```

:::note info
::は１つのアドレス内で一度しか使用できないが、1つの0に省略方法と併用可能
```2001：：1111：aaaa：0:0：1111```
:::


## NAT（Network Address Translation）
ルーターにある機能で、IPアドレスを他のIPアドレスに変換する技術。
自宅のプライベートIPアドレス → 外部とやり取りするためにルーターがパブリックIPに変換。

```
[PC：192.168.0.5] → [ルーター：NATで変換] → [インターネット側：203.0.113.1]
```
このおかげで、家庭内の複数端末が１つパブリックIPで同時に通信できる。

:::note info
NATがあるから、ローカル → 外部通信が可能になる
:::
Amazon Q Developer CLI で本格?バブル削除ゲームを作る

## はじめに
本記事は Amazon Q CLI でゲームを作ろう Tシャツキャンペーンの参加記事です。

https://community.aws/content/2xIoduO0xhkhUApQpVUIqBFGmAc/build-games-with-amazon-q-cli-and-score-a-t-shirt

https://aws.amazon.com/jp/blogs/news/build-games-with-amazon-q-cli-and-score-a-t-shirt/

## できたもの
以下から遊べます。

https://hayao-k.github.io/vibe-coding-100/bubble/


遊びかた
1. 「新しいゲーム」ボタンをクリック
2. バブルをクリックして同じ色を1個ずつ選択し、3個以上で消去
3. 高スコアを目指してプレイ！


スクリーンショット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/230b61cc-0dde-4ceb-833c-accc88792d27.png)

ソースコードはこちら

https://github.com/hayao-k/vibe-coding-100/tree/main/docs/bubble

### 指示内容
ベースのプロンプトも Q CLI と一緒に考えてつくりました。冒頭のキャンペーンブログでは PyGame によるゲーム作成方法が案内されていましたが、さくっとブラウザで遊べるように HTML + JavaScript のみで作るように指示しています。

```
次の要件をもとに HTML + JapaScript のみで動作するバブルゲームをレスポンシブ対応で作成してください。

ゲームルール

基本操作

1. 縦横斜めで隣接する同じ色のバブルを1ずつクリックし、3個以上選択すると削除
2. ゲームは9×10のグリッドで、バブルが上部の赤いライン(9行目)に到達するとゲームオーバー

バブル生成システム

- 初期配置: 底部から4×10列のバブルでゲーム開始、
- 新規生成: 底部から一列ずつバブルが湧き出る
- 生成間隔: 初期10秒、レベルアップで0.5秒ずつ短縮（最短3秒）
- 重力システム: 支えを失ったバブルは自動的に落下

スコアシステム

- 基本点数: 10点 × 消去個数
- ボーナス点数: (消去個数 - 3) × 5点 × 消去個数
- 例: 5個消去の場合 → (10 + 2×5) × 5 = 100点

レベルシステム

- レベルアップ条件: 300点ごと
- 速度変化: レベルアップでバブル生成間隔が0.5秒短縮
- 最高速度: 3秒間隔（レベル15以降）

特殊アイテム

- 爆弾💣: 選択したバブルを中心に半径100px内のバブルを一括消去
- 初期個数: 3個
- 獲得点数: 消去1個につき15点
- 使用条件: バブルを1個選択してから使用
```

一発でほぼ動作するものができあがったのですが、バブルの落下システムの不具合や、3 個以上のバブルを選択するときの操作の改善、アニメーションの追加、CSS の調整などを追加で指示しました。

## Tips
### モデル選択
Amazon Q Developer CLI の v1.11.0 以降で 最新の Claude Sonnet 4 モデルが利用可能になっています。どうせなら最新のモデルを利用したいですよね。

インストール直後のデフォルトは Claude 3.7 Sonnet なので必要に応じて変更しましょう。チャット中に `/model` コマンドで変更できます。

```
> /model

? Select a model for this chat session ›
❯ claude-4-sonnet (active)
  claude-3.7-sonnet
  claude-3.5-sonnet

✔ Select a model for this chat session · claude-4-sonnet (active)

 Using claude-4-sonnet
```

ただし既に開始しているセッション内でのみ有効であるため、デフォルトを変更したい場合は、`q settings` コマンドを使用しましょう。

```
q settings chat.defaultModel claude-4-sonnet
```

https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-chat-models.html

### チャット履歴の保存とロード
チャット内で `/save` で会話履歴のエクスポート、`load` で会話履歴のインポートができます。例えば不具合修正が長引いて途中でセッションが切れてしまった場合でも、会話履歴を保存しておけばこれまでの修正内容を踏まえて指示が出せるといったメリットがあります。あとはこういったブログを書く時も、後から会話履歴を見直すことができるので便利ですね。

```
> /save chat_history.json

✔ Exported conversation state to chat_history.json

> /load chat_history.json

✔ Imported conversation state from chat_history.json
```

### 画像入力による修正指示
Amazon Q Developer CLI の v1.10.0 以降で画像入力がサポートされています。UI 関連の不具合などでテキストでは意図を伝えきれなかったときに、スクリーンショットをインプットとして渡すことで修正が上手くケースもありました。

```
> ./screen-shot.png 現在のゲーム画面のスクリーンショットです。余白が右側だけ大きくなっているので修正したいです。"
```


https://aws.amazon.com/jp/blogs/news/amazon-q-developer-cli-supports-image-inputs-in-your-terminal/

以上です。
参考になれば幸いです。
GitHub Copilot Coding Agent に issue 対応丸投げできるようにする初期設定

GitHub Copilot Coding Agent に issue 対応をぶん投げられるの素晴らしいですよね！
それを有効化するための初期設定を行います

# GitHub Copilot Coding Agent とは

Microsoft MVP の松村さんの記事がよくまとまっているのでぜひこちらをどうぞ！

https://aadojo.alterbooth.com/entry/2025/05/20/082725

# Copilot Coding Agent にアサインできない？！

そして意気揚々と issue にアサインしようと思ったら

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/af9094c6-db72-4ec1-b9ba-0ceae5eb2444.png)

アイエエエエ Copilot イナイ　イナイ ナンデ

## 設定を変更する

GitHub の設定から行きます。

`Settings` > `Copilot` > `Coding Agent`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/097ae096-a0de-4a18-9cd8-3a5677fdefa4.png)

`Repository access` （GitHub Coding Agent がアクセスできるリポジトリ）が、
最初は「`No repositories`」（どのリポジトリも不可）になっているので、
これを `All repositories` （全て）もしくは `Only selected repositories` （選択したものだけ）にします。

![スクリーンショット 2025-06-17 14.29.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/80493ed2-452b-481a-ac9d-7a103a48387c.png)


## できた！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/0a15b367-5a22-4b72-bacf-e32f87d6e536.png)

これで丸投げできるぞ〜〜〜！！

## ちなみに: 料金プランについて

この GitHub Copilot Coding Agent 機能は
2025/6/17 現在、無料プランでは使えません。

https://github.com/features/copilot/plans

個人プランの場合： 

![スクリーンショット 2025-06-17 14.58.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/1424f2e6-09fc-4a50-94c0-d4153975d987.png)

企業プランの場合： 

![スクリーンショット 2025-06-17 15.00.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/b5e76e19-329e-4bcd-9b37-138193f04fc5.png)

# 参考


https://aadojo.alterbooth.com/entry/2025/06/02/134818

https://qiita.com/ootakazuhiko/items/f640249ff3bdf3716a33
深層学習でも低コストで逆解析できる時代になってきた

最近のHPCクラウドの低価格化、optunaの高速化に伴い、深層学習の逆解析が現実的になってきました。
例えば、colab Pro+なら、月約１万で、４０個の並列計算が可能です。

主な実績：
１．実験データから、TABNETでモデルを作り、optunaで机上実験（逆解析）します。
　このTABNETのハイパラは、推奨範囲を遙かに超え、チューニングしています。
２．TABNETのチューニングは、epochで1000まで実施。
３．開発目標が実験データ外のときは、机上実験は、数百万回で、やっと届いた。
４．GPUだと高くなるので、マルチコアをフル活用。
５．実験データでは相関が見えても、机上実験でデータが増えると、高次の交互作用で消えてしまうのは圧巻。
　　（原因は、一つではない。ことが実感できる。）
６．『データ数』＞『変数の数』より、『データ数』＜＜『変数の数』の方が、宝がある。
　　変数の未知の組合せが、一杯あり、多くを探索していないので、見たこともない変数の組合せに宝がある。
　　データ数を多くするより、１事例を多面的に計測した方が宝が発見できる。
  　テーブルデータの場合、深層学習より機械学習の方が予測性能は良いが、
    『データ数』＜＜『変数の数』が得意な深層学習の方が、新発見があり、
    逆解析で、説明可能性も解決する。
７．多目的最適化は、１３個もあると、パレート最適化では意味不明になる。
　　１個づつ開発目標を達成する解集合を求め、その解集合で他の目的を計算（逆解析）した方が判り易い。
  　特に、解が異端な開発目標があるときは、optunaの多目的最適化では、異端の解に探索の手は伸びない

新発見したいなら、『データ数』＜＜『変数の数』のデータセットで、深層学習＋逆解析してみてください。
ノーコードツールで、教科書どうりのモデルを作っているライバルに、楽々勝てます
How I Used React + Firebase to Build a Theme Park Finder App for Idaho Families

# How I Used React + Firebase to Build a Theme Park Finder App for Idaho Families

> Building joyful experiences doesn’t stop at the rides — it can start with the code behind the scenes.

## 🎢 The Idea Behind the App

My inspiration came from a family trip to a theme park in Idaho. The joy, the chaos, the bonding — it all felt magical. But planning the trip? Not so much.

That’s when I thought: why not build a tool that helps families discover the best amusement parks with minimal friction?

## 🔧 Tech Stack

I decided to go with:

- **Frontend**: React + TailwindCSS
- **Backend/Database**: Firebase Firestore
- **Auth**: Firebase Authentication (Google Sign-In)
- **API Integration**: Google Places API for park data
- **Deployment**: Vercel

## 📱 Features

Here are the core features I implemented:

- 🔍 **Park search** by location, mood (relaxing vs thrilling), and kid-friendliness
- 🧾 **User reviews & ratings** (stored in Firestore)
- 🌐 **Google Maps integration** to view park routes
- 📅 **Plan your day** tool that lets users create ride/snack schedules
- 🖼️ **Photo gallery** with image uploads via Firebase Storage

## 🧠 Lessons Learned

1. **Handling real-time updates** in Firestore was easier than expected — perfect for live wait times or ride closures.
2. **Geoqueries** were tricky. I used `geofirestore` to simplify location-based searches.
3. **Caching with SWR** helped optimize the map and listing load times.

## 🧩 Challenges

- Getting clean data from Google Places API (some entries were incomplete).
- Managing image size and upload limits in Firebase.
- Balancing fun UI with accessibility best practices.

## 🎉 Why This Project Matters

Theme parks aren't just about rides. They're about moments: laughter in line for churros, unexpected joy on a kiddie coaster, or grandma trying the log flume.

Building a digital gateway to those moments felt like the right way to combine joy and code.

---

## 🛠️ Code Snippet: Firebase Query Example

```js
import { getDocs, query, where } from "firebase/firestore";

const parksRef = collection(db, "parks");
const q = query(parksRef, where("state", "==", "Idaho"));

const querySnapshot = await getDocs(q);
querySnapshot.forEach((doc) => {
  console.log(doc.id, " => ", doc.data());
});
Nuxt DevToolsでなぜかnanoエディタを開いてしまうのを解決する

Nuxt3を開発モードで立ち上げるとNuxt DevToolsが一緒に起動するよね。DevToolsからVSCodeと連携すると、ブラウザ上で選択したUIをエディタで開くことができる。元々はVSCode上で選択したコードを見ることができていたのだけど、いつの間にかnanoエディタで開くようになって大変辛かったので、その原因調査と対策についてここに書き留めることにした。

## 開くエディタを決めてるのはどこの誰？

環境変数で指定されている。

```sh
echo $EDITOR
# /usr/bin/nano
```

## じゃあどうすればいいの

環境変数を目的のエディタに書き換えればOK。

```sh
export EDITOR=code
```
SSDを交換したら、WSLが正常に動作しなくなった件

# はじめに
どうも、水無月せきなです。
PCのSSD（Cドライブ）を交換したところ、Dockerがエラーを吐いて起動せず、そもそもWSL自体も正常に起動しなくなりました。
解決までに少し手間取ったので、誰かの参考になればという意味も込めてここに記します。

# 環境
Windows 10　22H2
WSL2
Docker Desktop 4.41.2

# 発生した事象
Docker Desktop を起動したところ、下記のメッセージを吐いてDocker Engineが起動しない。
（改行位置は表示時と異なります）

```text
running services: 
running services: 
running com.docker.build: com.docker.build: 
running com.docker.build: 
exit status 1
```

# 解決までの流れ
## とりあえずChatGPTに聞いてみた
ChatGPT曰く、

> Windows 上で Docker Desktop の起動に失敗して「com.docker.build: exit status 1」というエラーが出る主な原因は、内部で動いている WSL2 の仮想ディストリビューション（docker-desktop／docker-desktop-data）と Docker の間で通信やファイルシステムが壊れてしまっていることです。起動時に Docker は以下のようなチェックを行いますが、ここで失敗するとエンジンが立ち上がらず同じエラーを繰り返します。
> * WSL2 のファイルシステムが破損していないか
> * WSL2 の仮想マシンが正常に起動できるか
> * LinuxKit（Docker の軽量 VM）が起動できるか
> * Docker エンジン（dockerd）が起動できるか

対応としては、下記の内容を示されました。

1. WSL2 を完全停止・再起動
1. docker-desktop ディストリビューションの再作成
1. Windows の仮想化機能を確認・有効化
1. Docker Desktop を管理者権限で起動

## WSLの稼働状況を確認する
1.に関して、動いているディストリビューションがあるか確認すると、すべて`Stopped`でした。なので、実際には何もしませんでした。

```bash
wsl --list --verbose
```

# Docker関連のディストリビューションを削除する
2.に関して、Docker関連のディストリビューションの登録を削除しました。
示されたコマンドは下記の二つですが、`docker-desktop-data`は見当たらなかったので、ひょっとしたら二つ目のコマンドは要らないかもしれません。

```bash
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
```

ここでDocker Desktopを再起動してみますが、変わらずエラーが発生してしまいました。

## Windowsの仮想化機能の有効/無効を確認する
3.に関して、「コントロールパネル」 → 「プログラムと機能」→「Windows の機能の有効化または無効化」で、下記がONになっているかを確認しました。

* 仮想マシンプラットフォーム
* Linux 用 Windows サブシステム 

結果は、どちらも有効化（チェックが入っている）状態でした。

## そもそもWSLのディストリビューションにログインできるの？
ChatGPTに提示された方法では改善しそうにない雰囲気が出てきたところで、ふとWSLで稼働するLinuxにログインできるのだろうかと思い、試してみました。

```bash
wsl
```

すると、WSLからエラーが返ってきました。

## WSLへのログインで発生した事象
実際に表示された文言は英語なのですが、下記のようなメッセージが表示されました。
（実際の文言を残していなかったため、[参考サイト](https://loumo.jp/archives/29725)から引用しています）

> WSL2 は、現在のマシン構成ではサポートされていません。
"仮想マシンプラットフォーム" オプション コンポーネントを有効にし、さらに、BIOS で仮想化を有効にしてください。
"仮想マシンプラットフォーム" を有効にするには、次のコマンドを実行します: wsl.exe --install --no-distribution
詳細については、https://aka.ms/enablevirtualization をご欄ください
Error code: Wsl/Service/CreateInstance/CreateVm/HCS/HCS_E_HYPERV_NOT_INSTALLED

## WSLで発生した事象を解決する
「仮想マシンプラットフォーム」が有効なのは確認済みです。
そして、BIOS上でもCPUの仮想化機能が有効なのは確認しました。

ここで、リンク先のMicrosoftのページと[参考サイト](https://loumo.jp/archives/29725)の内容を見ると、どうやら`hypervisor launch`がOffになっている可能性がある様子。

まず確認のコマンドまず確認のコマンドを実行します。

```bash
bcdedit /enum | findstr -i hypervisorlaunchtype
```

すると、`hypervisorlaunchtype Off`が返ってきました。
有効にするコマンドを実行します。

```bash
bcdedit /set hypervisorlaunchtype Auto
```

※[Microsoftのサイト](https://learn.microsoft.com/en-us/windows/wsl/troubleshooting#error-0x80370102-the-virtual-machine-could-not-be-started-because-a-required-feature-is-not-installed)では他にも手順が書いてありますが、Windowsを別の仮想化技術で動かしている場合の内容や、Windowsの仮想化機能を有効にする内容なので、今回は上記のコマンドの実施だけです。

PCを再起動してWSLへのログインを試みると、正常にログインできました。
また、Docker Desktopも問題なく起動するようになりました。

# 終わりに

Docker DesktopおよびWSLが使えないと開発に支障をきたすので内心焦ったのですが、意外とシンプルに解決できてほっとしました。
この記事がどなたかのお役に立てば幸いです。

# 参考サイト
https://learn.microsoft.com/en-us/windows/wsl/troubleshooting#error-0x80370102-the-virtual-machine-could-not-be-started-because-a-required-feature-is-not-installed

https://loumo.jp/archives/29725
AWS マルチAZの作り方③AMIでEC2を複製

## はじめに
今回はマルチAZを全部手動で作りたいので、下記のAWS構成図のように作っていきます
※全て東京リージョンで行っております

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4021963/a958ffca-9f3c-4ae3-bcdc-45dd69e28e58.png)

こちらのページは下記のサイトの続きとなっております。

https://qiita.com/myaX/items/0994b3f419426892d761

https://qiita.com/myaX/items/c09f2e56e8ef6540dfc3

## 環境
- EC2インスタンスが停止済み

## 手順1：AMIの作成
EC2管理画面 → インスタンス選択 → 「アクション」→「イメージとテンプレート」→「イメージを作成」
| 設定項目 | 入力内容 |
|:-----------|:------------|
| イメージ名 | `sample-ec2-ami` |
| インスタンスを再起動 | OFF |

入力が完了しましたら、`イメージを作成`をクリックします

## 手順2：AMIから新しいEC2インスタンスを起動
`AMIからインスタンスを起動`をクリック
| 設定項目 | 入力内容 |
|:-----------|:------------|
| 名前 | `sample-ec2-1c` |
| インスタンスタイプ | t2.micro |
| キーペア | `sample-ec2` |
| VPC | `sample-vpc` |
| サブネット | `sample-vpc-private-1c-ec2` |
| パブリック IP の自動割り当て | 無効化 |
| ファイアウォール (セキュリティグループ) | 既存のセキュリティグループを選択する |
| 共通のセキュリティグループ | `sample-ec2-security-group` |
| ストレージを設定 | 8GiB, gp2 |

入力が完了しましたら、`インスタンスを起動`をクリックします
作成したインスタンスが「実行中」と表示されていれば、起動は成功です

## 手順3：ターゲットグループにEC2をアタッチ
EC2管理画面 → ターゲットグループを選択 → 「アクション」→「ターゲットを登録」 → 「`sample-ec2-1c`を選択し、`保留中として以下を含める`、`保留中のターゲットの登録`をクリック」

## 手順4：RDSにEC2をセットアップ
### EC2接続のセットアップ
1. `sample-db`をクリック
2. 「アクション」をクリックし、EC2接続のセットアップをクリック
3. EC2インスタンスの選択で作成したEC2(`sample-ec2-1c`)を選択し、`続行`をクリック
4. 「見直しと確認」ページで、特に問題がなければ、`セットアップ`をクリック

## おまけ：SSM接続のためにIAMロールをEC2にアタッチ
もし、SSM接続を行っていた場合、下記のサイトの手順4,5を行う必要があります

https://qiita.com/myaX/items/07ffb71ad76afd200e30

## まとめ
AMIから新しいEC2を起動し、SSMやターゲットグループ、RDSとの連携を行う一連の設定手順を解説しました
Swiftのdo-catch文とは？エラーハンドリングをわかりやすく解説！

Swiftでは、安全にコードを実行し、エラーに対応するための仕組みとしてdo-catch文が用意されています。今回は簡単にdo catach分のエラーハンドリングについて解説してみました！

そもそも「エラーハンドリング」とは？
---
エラーハンドリングとは、予期しない問題が発生したときに、アプリがクラッシュしないように対応する処理のことです。

Swiftでは、エラーをスロー（投げる）して、do-catchでキャッチ（受け取る）するという流れで処理を行います。

```swift
do {
    try 関数や処理
} catch {
    エラー発生時の処理
}
```

try? と try! の使い分け
---
try?：エラーが出たらnilを返す
```swift
let result = try? fetchData()
```
→ fetchData() が失敗すると nil になります。

```swift
try! //絶対に成功すると信じるときに使う（失敗するとクラッシュ）

let result = try! fetchData()
```
→ エラーが出るとアプリがクラッシュします。基本的には使わないのが安全です。

まとめ
---
| 方法         | 特徴                     |
| ---------- | ---------------------- |
| `do-catch` | エラーの詳細をハンドリングしたいときに使う  |
| `try?`     | エラー時にnilで処理を分岐したいときに使う |
| `try!`     | 失敗しない前提のときだけ使う（非推奨）    |


ぜひこの記事を参考にぜひdo catch文を学習してみてください🙌
【元島純貴】開発現場でのAI活用、やってみたらこうなった！

こんにちは！フリーランスのシステムエンジニア、元島純貴です。

近年、システム開発の現場でもAI、特に生成AIの活用が急速に進んでいますよね。「〇〇を自動生成してみた」「コードレビューをAIに任せてみた」といった記事を目にする機会も増えました。私自身も、普段の開発業務にAIを積極的に取り入れることで、どのような変化が起きるのか、実際にいくつか試してみました。

今回は、私が特に効果を感じたAI活用術と、その結果見えてきた「AIとエンジニアの新しい関係」についてお話ししたいと思います。

1. ドキュメント作成・要約を爆速化してみた
まず試したのは、大量の仕様書や議事録、設計書などのドキュメント作成・要約へのAI活用です。
正直なところ、ドキュメント作成はエンジニアにとって時間を取られる作業の一つ。特に、過去の膨大な資料から必要な情報を探し出し、要約する作業は骨が折れます。

ここで生成AI（具体的にはChatGPTなどを利用）に登場してもらいました。

議事録の要約： 会議の文字起こしデータをAIに投入し、「決定事項とToDo、担当者をまとめる」と指示。驚くほど短時間で、要点がまとまった議事録のドラフトが完成しました。
技術資料の理解促進： 新しいライブラリやフレームワークを導入する際、公式ドキュメントをAIに読み込ませ、「主要な機能と使い方のポイントを初心者向けに解説して」と依頼。これにより、キャッチアップの時間を大幅に短縮できました。
結果として、ドキュメント作成にかかる時間が約30%削減できた実感があります。情報のインプット・アウトプットがスムーズになり、本来集中すべき「考える」時間にリソースを割けるようになりました。

2. テストコードの自動生成を試してみた
次に挑戦したのは、テストコードの自動生成です。単体テストや結合テストのコードを手書きするのは、品質担保には不可欠ですが、工数がかさむ作業でもあります。

これも生成AIの出番です。

既存コードからのテストケース生成： 開発中の特定の機能のコードスニペットをAIに渡し、「この機能に対する単体テストケースを網羅的に生成して」と依頼。基本的な正常系・異常系パターンを考慮したテストコードの雛形が瞬時に出来上がりました。
エッジケースの発見支援： 「考えられるエッジケースをリストアップし、それに対応するテストコードのアイデアを提案して」と指示することで、人間だけでは見落としがちなパターンを発見する手助けにもなりました。
もちろん、AIが生成したテストコードをそのまま使うわけではありません。必ずエンジニア自身がレビューし、手直しを加える必要があります。しかし、ゼロから書く手間が省けるため、テストコード作成の初期段階における生産性が向上したと感じています。約20%の工数削減には繋がったのではないでしょうか。

3. アイデア出し・設計レビューの壁打ちをしてみた
これは直接的な工数削減ではないのですが、個人的に最も「使える」と感じた活用法です。新しい機能のアイデア出しや、設計方針に悩んだ際に、AIを壁打ち相手にしてみたのです。

アーキテクチャの比較検討： 「大規模ユーザー向けのWebアプリケーションを構築する上で、マイクロサービスとモノリシック、それぞれのメリット・デメリットと、最適なケースを比較して」といった問いかけ。一般的な情報だけでなく、具体的なシナリオを仮定して深掘りすることで、思考を整理するのに役立ちました。
詰まった時のヒント： 特定のバグで原因が掴めない時や、実装方法で選択肢が複数ある時に、AIに状況を説明し「他に考えられる原因は？」「この選択肢それぞれのトレードオフは？」と尋ねることで、新たな視点や解決策のヒントを得られました。
AIは万能な「答え」をくれるわけではありませんが、自分の思考を整理し、多角的な視点を得るための強力なツールとして機能すると実感しました。孤独になりがちなフリーランスエンジニアにとって、この壁打ち相手の存在は精神的な支えにもなります。

AIは「最高の相棒」になり得る
今回の取り組みを通して、AIはエンジニアの仕事を奪うものではなく、むしろ**「最高の相棒」**になり得ると強く感じました。ルーティンワークや初期フェーズのタスクをAIに任せることで、エンジニアはより創造的で、本質的な「考える」仕事に集中できるようになります。

もちろん、AIの出力はあくまで参考であり、最終的な判断と責任はエンジニアが持つべきです。しかし、AIの力を借りることで、私たちの生産性や品質は飛躍的に向上する可能性を秘めています。

これからもAIの進化にアンテナを張り、積極的に現場に取り入れながら、より価値の高いシステム開発を目指していきたいと考えています。
wsltty (mintty) で一部の日本語文字の次の文字が重なる

WSL で，ターミナルエミュレータに wsltty を使っています．バージョンは 3.7.8 です．おおむね問題無く使えていると思っていますが，次の問題がありました: 

> 一部の日本語文字 (「→」や「∧」など) が正しく表示されない，正確には，それらの文字自体は正しく表示されているのだけれど，その次の文字が正しい位置よりも半角1文字分左にの表示されてしまい，結果として文字が重なって見える，

解決方法が分かりました．wsltty の現象というよりは，mintty の現象で，設定ファイルに次の行を追加すると，この問題はなくなりました．(他の副作用等については良く分かりません)

```text
Charwidth=ambig-wide
```

設定ファイルがどこにあるかは，起動方法に依存します．`--configdir=`_dir_ としている場合には，ファイル _dir_`/config` に記述することになります．一般の場合 (wsl) は，[wsl の README の該当箇所](https://github.com/mintty/wsltty#mintty-settings) を参照してください．
【ChatGPT】DALL-E3のPromptをBingのImageCreator用に変換するPromptです。


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

　今回は、DALL-E3のPromptをBingのImageCreator用に変換するPromptです

:::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公式ポスト](https://x.com/OpenAI/status/1934718214300369351?t=AGRFdcG6FZ3-3bLF-rbS6Q&s=19)

***（GPT-4.1翻訳）***
ChatGPT の画像生成が、WhatsApp の 1-800-ChatGPT で利用可能になりました。

すべてのユーザーに提供中です。

より多くの画像生成を利用するには、ChatGPT アカウントを WhatsApp の 1-800-ChatGPT にリンクするのをお忘れなく。
***

　それよりも
　　DALL-E3をなんとか
　　　使えるようにして欲しい😭
***
　次に

　今、Genspark で
　　OpenAI o3-pro が
　　　誰でも無料で利用可能に。
　　　　おそらく回数制限あり。

　Genspark Plus では
　　無制限に利用可能に。

　[Genspark公式ポスト](https://x.com/genspark_ai/status/1934633273940115571?t=IDjd6UpjnGRe2JB5kpitcA&s=19)
***
　では、【本題】です。

　今回は、
　　DALL-E3のPromptを
　　　BingのImageCreator用に
　　　　変換するPromptです。

　ChatGPTのGPTs DALL-Eが
　　DALL-E3での画像生成を
　　　しなくなりました。

　ええ、
　　いまだに治っていません。

　かといって、
　　4o Image Generationだと
　　　生成に時間が掛かりますし、
　　　　なによりこれまでのキャラが
　　　　　出てこなくなります。

　ではどうするのか？

　私はその答えを
　　Bingに求めました。

　Bingとは
　　MicrosoftのAI技術を活用した
　　　検索・チャットアプリです。

　その中の一機能に
　　ImageCreatorがあります。
　　　これには、
　　　　DALL-E3が組み込まれています。

　だから
　　これまでのキャラを
　　　継続して生成できます。

　ただし、
　　ImageCreatorは
　　　Promptに文字数制限があり、
　　　　しかも480文字という少さです。

　これまでのPromptは
　　800や900がザラにあります。

　そのまま入力しても
　　480文字のみが入力されて
　　　残りはカットされてしまいます。

　そこで480文字に収まるように
　　Promptを調整するのです。

　そのためのPromptがこちら。
```Text:DALL-E3→ImageCreatorへのPrompt
これから与えるPromptをBing ImageCreatorのPromptとして480文字で収まるように修正してください。
また、CodeInterpreterでの文字数チェックを行ない、必ず480文字で収まるようにしてください。
与えたPromptが日本語ならば日本語で、英語ならば英語で対処してください。
出力はコードブロックにしてください。
```

　使い方は
　　このPromptを入力・送信して、
　　　DALL-E3用のPromptを
　　　　入力・送信するだけです。

　あとは
　　コピーして
　　　BingのImageCreatorに
　　　　ペーストして生成するだけです。

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

　今回は、ここまで。
Windows Insider  からリテール版の Windows へ

## 確認環境
HP OmniBook Ultra Laptop 14-fd0xxx
AMD CPU の Copilot + PC です。 Windows 11 Insider Dev から Windows 11 24H2 へ変更しました。 

## 背景
Copilot + PC の機能は当初 Windows Insider Dev チャネルのみで、Recall を含めリテール版では使えませんでした。そこで Windows Insider プログラムに参加したものの、更新プログラムでリテール版に含まれたので、Windows Insider をやめたい。
しかし、USB メモリや ISO を焼いた DVD からの新規インストールでは PC メーカーが用意したドライバーなどが失われてしまい、使える状態にするためには時間がかかるので、OS だけリテール版に戻したい

## 手順
※ まだ一度も USB メモリからなどでクリーンインストールはしておらず、PC の C ドライブ直下に次のフォルダとその中身が存在する事が条件です(隠し属性フォルダです)。
C:\Recovery
C:\Recovery\Customizations
C:\Recovery\OEM

1. [設定] - [システム] - [回復] にアクセスし、[PC をリセットする]を押します。
1. [すべて削除する]を押します。
1. [クラウドからダウンロード]を押します。
1. その後は画面の指示に従って進めます。

これにより、インターネットからリテール版の OS がダウンロードされ、ダウンロード後にセットアップが始まり、再起動後にしばらくして初期画面が表示されるので、アカウントを入力して先に進めると、ドライバーなどが全てセットアップされた状態でリテール版の Windows に戻す事ができます。
ネットワーク上の共有フォルダを取得する

以下のサイトを参考にさせていただきました。
>https://qiita.com/zani-cho/items/f156765f0d33fd9763fc

キッティングを行う際に、先ごろもあったのですが、
キッティングの際にファイルが古く、ふとした瞬間に気づいたのが、
プロキシ設定のファイルの設定がひと少し前の設定情報だったので、
確認のために以下の作業を行いました。



## コマンドプロンプトでファイル一覧取得 ##


これで共有フォルダ内でコマンドを実行する準備をします。

あとは実行するコマンドですが、dirを使います。

dir:カレントディレクトリにあるファイルとサブディレクトリの一覧を表示.
| オプション | 内容 |
|:-:|:-:|
|/a*|	-部分に指定された属性のファイルを表示|
|/adまたは/a:d|ディレクトリ|
|/arまたは/a:r|読み取り専用|
|/ahまたは/a:h|隠しファイル|
|/aaまたは/a:a|アーカイブ|
|/asまたは/a:s|システムフィル|
|/ai|非インデックス対象ファイル|
|/al|再解析ポイント|
|/b|	ファイル名のみを表示|
|/C|	桁区切り（桁区切りが既定設定）でファイルサイズを表示。/-C：桁区切り表示なし|
|/d|	列で並べ替えたファイル一覧を表示（左上から下に順に表示）|
|/l|	小文字で表示|
|/n|	右端にファイル名を表示する一覧形式に|
|/on|	ファイルを並べ替えて表示(-をつけると並び方が逆)|[ファイル名アルファベット順]
|/oe|	ファイルを並べ替えて表示(-をつけると並び方が逆)|[拡張子アルファベット順]
|/og|ファイルを並べ替えて表示(-をつけると並び方が逆)|[グループをディレクトリ順]|
|/os|ファイルを並べ替えて表示(-をつけると並び方が逆)|[サイズの小さい順]|
|/od|ファイルを並べ替えて表示(-をつけると並び方が逆)|[日時の古い順]|
|/p|	画面におさまらない場合、１画面ごとに停止して表示（停止時にキーを押下で次画面表示）|
|/q|	表示されるファイルの所有者を表示|
|/r|	ファイルの代替データストリーム（メインのファイルに対する非表示のファイルのこと）を表示|
|/s|	指定されたディレクトリとその直下のサブディレクトリのファイルをすべて表示|
|/tw|	タイムフィールド（デフォルトは最終更新日時です。）の表示・並び替えに関して指定|
|/tc|	タイムフィールド（作成した日時。）の表示・並び替えに関して指定|
|/ta|	タイムフィールド（最終アクセス日時。）の表示・並び替えに関して指定|
|/w|	表示をワイド一覧形式に（左上から右に順に表示）|
|/x|	MS-DOS形式(Windowsで扱えるファイル)以外のファイル名に対する短い名前（8.3形式）を表示。ちなみにファイル名検索で長い名前も短い名前も持っているファイルは、どちらかの条件にヒットした場合、検索結果に表示されてしまう。短い名前が表示される以外は/Nオプションと同様。短い名前を保持していないファイルの場合はブランクとなる。|
|/4|	4つの数字で年を表示|

```batch
Microsoft Windows [Version 10.0.26100.2605]
(c) Microsoft Corporation. All rights reserved.

C:\Users\maeda>pushd \\..a-fi..11...a.jp\....Apps$
Z:\>dir /s /b >v xxxx.txt
```


うまくテキストに吐き出すことができました。
【城間勝行】SIer大規模開発 vs. スタートアップ爆速開発：僕が見た真実

皆さん、こんにちは！フリーランスエンジニアの城間です。

僕は新卒で大手SIerに入社し、約8年間、数千人規模の基幹システム開発に携わってきました。その後、独立してからはスタートアップ企業を中心に、少人数のチームでプロダクト開発を進めています。

この異なる二つの世界を経験してきて、それぞれの開発現場の文化、スピード感、そしてエンジニアに求められるスキルに大きな違いがあることを痛感しています。今日は、僕が実際に見てきた大規模開発と爆速開発の「真実」を、皆さんにお伝えしたいと思います。

第1ラウンド：要件定義の泥沼 vs. 仮説検証の荒野
SIerの大規模開発では、プロジェクトの初期フェーズに完璧な要件定義を目指します。数百ページにわたる要件定義書を作り込み、あらゆるパターンを想定し、関係者全員の合意を得るまで、幾度となくレビューと修正を繰り返します。
まるで、地図と羅針盤を完璧に揃えてから、巨大な船で大海原に出るような感覚です。綿密な計画がある安心感はありますが、その一方で、実際に開発が始まる頃には市場のニーズが変化している、なんてことも珍しくありません。

一方、スタートアップの爆速開発では、要件は**「仮説」として捉えられます。「まずは動くものを作ってユーザーの反応を見よう！」というスタンスが基本。要件が固まりきっていない状況でも、柔軟に仕様変更に対応し、「作って、測って、学ぶ」**を高速で繰り返します。
まるで、ジャングルを切り開きながら、最適な道を探す探検隊のよう。不確実性は高いですが、ユーザーの声をダイレクトに反映できるため、市場にフィットしたプロダクトを素早く生み出すことができます。

第2ラウンド：超分業制のスペシャリスト vs. フルスタックのジェネラリスト
SIerの現場では、役割が細かく分業されています。要件定義担当、設計担当、開発担当（さらにバックエンド、フロントエンド、DBなど）、テスト担当、インフラ担当…と、それぞれの領域のスペシャリストが連携してプロジェクトを進めます。
自分の専門領域に深く集中できる一方で、隣の工程の進捗が見えにくかったり、部門間の調整に時間がかかったりする側面もあります。

対照的に、スタートアップでは、少人数のチームで開発を進めるため、一人のエンジニアがフルスタックに近いスキルを求められることが多いです。バックエンドもフロントエンドも、インフラもデータベースも、時には要件定義やテストも。僕自身も、AWSのインフラ構築からPythonでのAPI開発、Vue.jsでのフロントエンドまで、幅広く担当することがほとんどです。
大変ですが、プロダクト全体を見通せるため、開発のスピード感が格段に上がりますし、自身のスキルセットも飛躍的に広がる面白さがあります。

第3ラウンド：石橋を叩いて渡る安定性 vs. 荒波を乗りこなすスピード
大規模開発では、システムの安定性や堅牢性が最優先されます。何千人、何万人ものユーザーが利用する基幹システムでは、小さなバグ一つが甚大な影響を及ぼす可能性があります。そのため、入念なテストと品質管理、厳格なリリースプロセスが必須です。
「石橋を叩いて渡る」という言葉がぴったりな、安定志向の開発です。

これに対し、スタートアップでは、何よりもスピードが重視されます。市場の機会を逃さないため、アジャイルな手法で素早くプロトタイプをリリースし、改善を重ねていきます。時には、多少の技術的負債を抱えながらも、まずは「動くもの」を世に出すことを優先します。
荒波を乗りこなし、いち早く目的地にたどり着くために、多少の揺れは覚悟の上、といったスピード重視の開発スタイルです。

最後に：どちらの経験も、僕の血肉
全く異なる開発スタイルですが、どちらの経験も今の僕にとってかけがえのない財産です。
SIerでの大規模開発で培った**「計画性」「品質意識」「多様なステークホルダーとの調整力」は、スタートアップでの開発においても、プロダクトの持続的な成長を考える上で非常に重要です。
そして、スタートアップでの「仮説検証」「高速なPDCA」「変化への柔軟な対応力」**は、SIer時代には得られなかった、ビジネスを加速させるための開発視点を僕にもたらしてくれました。

もし、この記事を読んで、ご自身の開発スタイルを見つめ直すきっかけになったり、「こんな開発の話をもう少し聞いてみたい」と思っていただけたら嬉しいです。
「新しい値」用の値を入力する必要があります(SPSS Modeler データ加工逆引き12-14)

# 「新しい値」用の値を入力する必要があります（データ分類）

![スクリーンショット 2025-06-12 18.23.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/803f8ef9-d71d-4e86-a28c-c255bcaa8fb7.png)

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

・[データ分類]ノードで値をカテゴリに分類した際、エラーが発生する

*誤って空白のグループを作成した場合に生じるエラーのハンドリング

## 2.サンプルストリームのダウンロード

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

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

![スクリーンショット 2025-06-12 18.26.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/1a24bfaa-a1ef-44b0-bb18-26486e627109.png)

a.入力するデータは以下のとおりです。商品を野菜か果物にグループ化します。

![スクリーンショット 2025-06-12 18.28.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c8d1616a-53ab-46f1-84f2-bd6ffd05c65d.png)

#### エラーの現象を確認する

b.[データ分類]ノードを編集します。[レタス]の下に２行の空白行が存在しています。

![スクリーンショット 2025-06-12 18.28.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/70045b4f-dbef-4fc1-b776-7c72513c81f5.png)

[テーブル]を実行します。エラーが以下のように表示されます。

![スクリーンショット 2025-06-12 18.29.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/9b8aa97e-7fa3-4deb-8cce-391a6521d88c.png)

![スクリーンショット 2025-06-12 18.29.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/867d70b0-e377-460c-9bdb-b63f237f7ae3.png)

#### 空白の行を削除してエラーを回避する

c.[データ分類]ノードを編集します。[レタス]の下にあった行を❌ボタンで消去しています。

![スクリーンショット 2025-06-12 18.30.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f37f7b52-9134-4756-9a5e-d81b28847a1a.png)

[テーブル]を実行します。

![スクリーンショット 2025-06-12 18.30.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/e507f7ae-d193-4b15-8a29-29622c29e618.png)

#### 注意点

[データ分類]ノードの設定をしていく際に、誤ってエンターキーを押すことで空白が発生し当該エラーにつながります。

## 4.参考情報

#### カテゴリの値を別の値に割り当てる

https://qiita.com/416nishimaki/items/8d02e9b18bb5e6c909b2

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

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

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

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008
【アクセシビリティ】WCAGって何？Webアクセシビリティの国際基準をやさしく解説

## はじめに
この記事を開いていただきありがとうございます。
最近「アクセシビリティ対応って大事だよね」と耳にすること、増えていませんか？
でも、「WCAGってよく聞くけど、何のこと？」とか、「どうやって対応すればいいの？」と感じる方も多いはず。この記事では、アクセシビリティの国際基準「WCAG」について紹介します。
デザイナーやディレクター、エンジニア、アクセシビリティに関心がある方に読んでほしい内容です！

## 🗂 目次

* [WCAGって何？](#wcagって何)
* [WCAGの4つの原則（POUR）](#wcagの4つの原則pour)
    * [1.知覚できる（Perceivable）](#1-知覚できるperceivable)
    * [2.操作できる（Operable）](#2-操作できるoperable)
    * [3.理解できる（Understandable）](#3-理解できるunderstandable)
    * [4.信頼できる（Robust）](#4-信頼できるrobust)
* [WCAGの3つの達成レベル](#wcagの3つの達成レベル)
* [💡 ちょっとした例で考えてみよう](#-ちょっとした例で考えてみよう)
    * [例1：画像だけの「送信」ボタン](#例1画像だけの送信ボタン)
    * [例2：「エラーです」とだけ表示されるフォーム](#例2エラーですとだけ表示されるフォーム)
    * [例3：色だけで判断させるグラフ](#例3色だけで判断させるグラフ)
* [WCAGに取り組むには？](#wcagに取り組むには)
    * [できることから始めよう！](#できることから始めよう)
* [最後に](#最後に)
* [🔗 参考リンク](#-参考リンク)

## WCAGって何？
WCAGとは、「Web Content Accessibility Guidelines」の略で、**すべての人がWebを使えるようにするための国際的なルール**です。
視覚・聴覚・身体に障害のある人、認知の特性がある人、高齢者など――  
いろんな人がインターネットを使う時代だからこそ、**誰にとっても使いやすいWebサイトを作ること**が大切になっています。
このWCAGは、そんなアクセシブルなWebを実現するための“道しるべ”のような存在です。

## WCAGの4つの原則（POUR）
WCAGには「こういうふうに考えてWebをつくろうね！」という4つの原則があります。

### 1. **知覚できる（Perceivable）**
→ 情報がちゃんと目や耳などを通してユーザーに伝わること。

例：  
- 画像に「この画像は〇〇の写真です」といった説明（代替テキスト）をつける  
- 音声だけではなく字幕を用意する

### 2. **操作できる（Operable）**
→ マウスでなくても、キーボードや支援機器で操作できること。

例：  
- タブキーで移動できるようにする  
- 動きのあるコンテンツに「一時停止」や「スキップ」のボタンをつける

### 3. **理解できる（Understandable）**
→ 表示される内容や動きがわかりやすいこと。

例：  
- フォームのエラーが「ここが間違ってますよ」と丁寧に教えてくれる  
- ボタンに「送信」と書かれていて、何に続く操作のボタンかがわかる

### 4. **信頼できる（Robust）**
→ どんな端末や支援技術でもちゃんと情報が読み取れること。

例：  
- HTMLのタグを正しく使うことで、スクリーンリーダーユーザーでも理解できる  
- 新しいブラウザやアプリでも動作する設計にしておく

## WCAGの3つの達成レベル
WCAGには、「どこまで対応できてるか？」という達成レベルが3段階に分かれています。

| レベル | 内容 | よくある目標 |
|--------|------|----------------|
| A      | 最低限のレベル | まずここをクリアしよう |
| AA     | 実用的なレベル | 多くの企業がここを目指す |
| AAA    | 完璧なレベル    | できたらすごい！でも難しい… |

## 💡 ちょっとした例で考えてみよう

### 例1：画像だけの「送信」ボタン

- ✖︎ 問題：視覚に障害のある方は、何のボタンかわからない
- 〇 解決：画像に「送信ボタン」と説明をつけておく

### 例2：「エラーです」とだけ表示されるフォーム

- ✖︎ 問題：どこがダメなのかわからない
- 〇 解決：「メールアドレスの形式が正しくありません」と具体的に伝える

### 例3：色だけで判断させるグラフ

- ✖︎ 問題：「赤はNG、緑はOK」だけだと色の違いがわからない人には伝わらない
- 〇 解決：テキストやアイコンも一緒に表示する

## WCAGに取り組むには？

「難しそう…」と思うかもしれませんが、**ちょっとした気配り**の積み重ねでぐっとアクセシビリティは良くなります。

### できることから始めよう！

- デザインの段階で「これは誰にとってわかりやすいかな？」と考える  
- 専門ツール（WAVE、Lighthouseなど）で自動チェックしてみる  
- 実際にスクリーンリーダーで自分のサイトを聞いてみるのもおすすめです

## 最後に
ここまで読んでいただきありがとうございました！
WCAGは「すべての人がWebを使えるようにする」ための道しるべ。
難しいコードを書かなくても、**ちょっとした気づきや工夫**でアクセシビリティはぐっと良くなります。
「誰かのための対応」ではなく、**みんなのためのWebづくり**を、一緒に目指してみませんか？✨

## 🔗 参考リンク

- WCAG公式サイト（英語）

https://www.w3.org/WAI/standards-guidelines/wcag/


- みんなの公共サイト運用ガイドライン（総務省

https://www.soumu.go.jp/main_sosiki/joho_tsusin/b_free/guideline/index.html
Macのシステムデータが大きすぎる

# はじめに

こんにちは、ユーゴです。今回は、短めの記事となります。

ぜひ、**コメントで皆さんの原因も教えてください**！

# 問題

Macのシステムデータのサイズが、気づいたらとても大きくなっている

![mac-syssize-large-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/cf866c19-9ddc-4885-880a-811a1d2dc256.png)


# 原因

もちろん、人によって異なります。以下に原因を例示します。

## Unityバージョン

**効果：10GB × n**

不要なバージョンは消しましょう。可能なら、`2023.3.1f1`と`2023.3.2f1`のように互換性があるものは、どちらかに統一しましょう。

君アプリケーションじゃないのか...

![mac-syssize-large-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/c1524ddf-b8ee-4386-b8e7-c61a22cd7a16.png)


## Docker

**効果：20〜40GB**

不要なイメージとコンテナは消しましょう。

また、Virtual disk limitがデフォルトで64GBくらい取られているので、必要な分量まで減らしましょう。

(以下はDocker DesktopのSettings)

![mac-syssize-large-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/b9c5de4a-ce2a-4342-b8a2-82421d34e28e.png)

## ブラウザのキャッシュ

**効果：1〜5GB**

アカウントがたくさんあると、その分増えます...

Chrome, Safari, Firefoxなど、たくさんブラウザを使い回している人も注意です。

![mac-syssize-large-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/24b1277b-a317-45a6-9c16-18b3e146d6c4.png)

# 補足

原因特定のカギは、やはり「よく使うアプリ周辺」にありそうです。

おそらくAdobeを使っている方は、Adobe周りのキャッシュに問題があるかもしれません。動画編集ソフト、CAD・3Dモデリングソフト、ペイントツール、音声編集ソフトあたりも、怪しいかもしれませんね...？

# まとめ

いかがだったでしょうか。今回は、Macのシステムデータが大きすぎる原因を、私が見つけた範囲で紹介しました。

ぜひ、**皆さんが見つけた原因もコメントで教えてください**！「自分も記事のが原因だった」も大歓迎です！このページを見た困っている方が、原因を見つけるきっかけを増やしたいと考えています！

ちなみに私の場合、上記の作業で**40GBくらい減らせた**気がします (それぞれ対応の期間が空いてしまい、正確には忘れてしまいました)。

このように当垢では、Mac自体の扱いに関する記事から、Unity, AWS, GAS, 量子コンピューティングなど、縦横幅広い技術について紹介しております。お役に立てましたら、いいね, フォローなどよろしくお願いします！