OmniAICreator/Qiita-1.07M huggingface dataset:
LLMの蒸留についての学習メモ

## 蒸留のざっくりとしたイメージ

大規模な教師モデルが出力する確率分布を用いて、小規模な生徒モデルを効率的に学習させる。  
教師モデルの「温度」を上げることで出力分布を平滑化し、生徒の最適化を安定化する。

---

## 気になった理論的背景や論文

- **Phuong & Lampert (2019)** の一般化境界：
    - データ数 *n* が入力次元 *d* 以上であれば生徒モデルの転移リスクがゼロになる。
    - 限定的に線形分類器対象だが、サンプル効率の飛躍的向上を示す。
- **Hinton et al. (2015)**：
    - アンサンブル学習を生徒へ圧縮する蒸留を定式化。
    - 生徒がアンサンブル分布とのKL最小化を行うことで、確率分布の最適凸結合に近づく。

---

## 平滑化による疑問点

教師モデルの温度を上げると学習安定化は図れるが、分布の細部（クラス間マージンなど）が失われるのではないか？

---

## 解決法1：FitNetsによる中間層特徴の蒸留

- 教師の中間層（Hint Layer）と生徒の対応層（Guided Layer）の特徴表現をL2損失で合わせる。
- 学習は2段階：
    1. **Hintフェーズ**：Regressorを介して生徒特徴を教師次元へ射影し、Hint損失で整合。
    2. **全体微調整フェーズ**：出力のKD損失＋クロスエントロピーで生徒モデル全体を最適化。
- Regressorは1×1畳み込みなどで次元不一致を解消し、パラメータと計算コストを抑える。

---

## 解決法2：SDDによる出力ロジットの細粒度分解

- 出力ロジットマップを複数の局所領域（マルチスケール）で平均プーリングし、局所的ログットを抽出。
- 各局所ログットを「一貫項」（グローバル予測クラスと同一）と「補完項」（異なるクラス）に分離。
- 最終損失は以下の和：
    - **グローバルKD損失**
    - **各局所セルごとのKD損失**（補完項は重みを増強）
- 細粒度情報を活用することで、平滑化によるクラス間マージンの欠如を補い、微細な判別力を維持。

---

## Diffusionモデル蒸留の概要

- 多ステップ生成（数百～数千ステップ）が必要な拡散モデルを、少ステップ（例：4ステップ、1ステップ）で同等性能へ高速化。
- 代表手法：
    - **Progressive Distillation**（Salimans & Ho）
    - **Consistency Models**（Song et al.）
    - **SCott**（Liu et al.）
- 各中間ステップの生成結果を生徒へ模倣させ、サンプリングコストを大幅に削減。

---

## 自分なりの結論整理

1. **一般化境界**が示すように、蒸留は通常学習よりも高いサンプル効率を実現。
2. **温度平滑化**は学習安定化に寄与するが、細部情報損失のリスクがある。
3. **FitNets** と **SDD** のような手法により、中間層や局所出力を蒸留対象に含めることで、大まかな概念と細部構造の両立が可能。

---

### 雑感

ChatGPTとの対話を通じた学習は深掘りの助けになる。次はモデル実装を通じて理論を体感したい。

### この記事の作成過程
chatgptと話した履歴
https://chatgpt.com/share/6811684a-b79c-8009-ba67-d78bf8200d8c
composerのインストールエラー　証明書が…(；一_一)？

新しく買ったパソコンでcomposerがインストールできませんでした。
(；一_一)…は？

# エラーの内容はこちら

Composer Setup

Composer Installer Error

Unable to continue with installation

2

Please review and fix the issues listed below then try again.

The Composer installer script was not successful [exit code 1].

OpenSSL failed with a certificate verify failed' error. This indicates a problem with the Certificate Authority file(s) on your system, which may be out of date.

Certificate location [from openssl.cafile ini setting]:

○○○※伏せときます

The php.ini used by your command-line PHP is: ○○○

Script Output:

The "○○○" file could not be downloaded: SSL operation

failed with code 1. OpenSSL. Error messages:

error:0A000086:SSL routines: certificate verify failed

Failed to enable crypto

こちら調べたところ証明書がどうのこうのということでネットの情報で試してみるのですが解決せず…
僕と同じ現象の方いらっしゃるのではないでしょうか？

# 結論(自分の場合)

セキュリティソフトをアンインストールすること(*´▽｀*)

原因は買ったゲーミングパソコンにデフォルトで付属のノートンでした。

## 対処手順

セキュリティソフトを無効ではなくアンインストール
↓
一度ララベルの環境構築をやり直します(#^^#)
xampp(インストールしていれば)もアンインストールして再度インストールしてもう一度composerをインストールしなおす。

これで僕は解決しました、解決できなかった方はお力になれずすいません。
(´；ω；`)

## 一流のプログラマー様はすごい

かなり難しいエラーでネット情報のphp.iniを触っても意味がなかったです。
検索しても出てこず先生にお聴きしたところ、先生も色んな方法を試されて悩んではりました。
激ムズのエラーです。

その後、おそらくセキュリティソフトが原因ではないか？情報が少し上がってきてますと教えてくださいました。

僕はどうやってその情報を見つけはったのだろうと思い検索し続けました。

githubに外国人の方が
「同僚と悩み何時間もかかりセキュリティソフトをアンインストールしたら、インストールできた」
と投稿が１件ありました。

それを翌朝の電車の中でようやく見つけました。
先生すごすぎる( *´艸｀)

僕もいつか一流のプログラマーになるぞ！

## お菓子ブログやってます

いつか必ずお菓子の業界に関わりながら一流の上品なコードを書くプログラマーになれたらな
( *´艸｀)

まだまだ3流ですが日々精進します(*´ω｀*)

https://inkyakakusei.com/
interface2024年1月号を参考にRaspberryPi Pico W でbluetoothを使う　第2章-3,-4

今回もはまったところを書いていきます。。。
- 前回の2-2の記事
https://qiita.com/ShigeoYakuno/items/95c60a6c8fc460da3354

# 今回のポイント
- ボード設定を明示的に行うことが大切！（PICO_BOARD=pico_w）

### またもや pico/cyw43_arch.h　が見つからない！
- readme.txtを見ながら進めていき、ビルドすると見たことのあるエラー。。。
- エラーメッセージを確認すると、下記がひっかかった。
~~~
Defaulting target board (PICO_BOARD) to 'pico' since not specified.
Using board configuration from C:/pico/pico-sdk/src/boards/include/boards/pico.h
~~~

### pico w と認識されていない！
- pico w と認識されていないことで必要なヘッダがリンクされない可能性がわかりました。
- CMakeLists.txtに明示的にpico_wを設定しました。
~~~
# CMakeList.txt の先頭付近
set(PICO_BOARD pico_w CACHE STRING "Board type" FORCE)
message(STATUS "Board set to: ${PICO_BOARD}")

~~~

- build.shの中でも環境変数としてPICO_BOARDを設定しました。
~~~
#!/bin/sh

export PICO_SDK_PATH=/c/pico/pico-sdk
export PICO_BOARD=pico_w  # 環境変数として設定

echo "Configure and make" &&
cmake -G "MSYS Makefiles" -DCMAKE_BUILD_TYPE=Debug -DPICO_BOARD=pico_w -B build -S . &&
make -j4 -C build
~~~

- 変更後は、board_typeが「pico w」になりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3657924/ced22a70-8db8-4c34-b3a0-070280b50b04.png)


この変更で2-3,2-4両方ともビルドすることができました。以上です。
AzureとMicrosoft製品の連携で実際にできること


Microsoft Azureの強みは、既存のMicrosoft製品と連携した実践的なデータ活用とAI実装にあります。本記事では、抽象的な技術紹介ではなく、「何のデータから」「どんな価値を」生み出せるのかを具体的に解説していきます。

## 業務プロセスに組み込むAI活用の基本パターン

Azure+Microsoft製品の連携は、以下の基本パターンで業務価値を生み出します：

| インプット（データ源） | 処理（Azure AI/データサービス） | アウトプット（業務価値） | Microsoft連携製品 |
|-------------------|-------------------------|-------------------|-----------------|
| 既存業務データ | 分析・予測 | 意思決定支援・業務自動化 | Office/Dynamics/Power Platform |

## シナリオ別：データからビジネス価値を創出する具体例

### 営業活動の最適化

**インプット：** Dynamics 365の顧客データ、取引履歴、営業活動記録  
**処理：** Azure Machine Learningで顧客購買確率と解約リスクを予測  
**アウトプット：** 営業担当者の活動優先度と次のアクション推奨  
**業務価値：** 受注率向上と顧客離反防止

```
実装例：営業担当者がDynamics 365のダッシュボードを開くと、AIが算出した「次の7日間で対応すべき優先顧客」が表示されます。各顧客には購買確率スコアと最適な提案商品、そして解約リスクの警告が示され、「なぜその判断になったか」の理由も確認できます。これにより営業活動の的中率が32%向上しました。
```

### 会議生産性の向上

**インプット：** Microsoft Teamsの会議音声・映像、共有資料  
**処理：** Azure Cognitive Servicesによる音声認識と要約生成  
**アウトプット：** 自動議事録と次回アクションアイテム  
**業務価値：** 情報共有効率化と意思決定スピード向上

```
実装例：会議終了後、参加者は自動生成された議事録を受け取ります。要点だけを抽出した1ページのサマリーと、各自に割り当てられたアクションアイテム、関連ファイルへのリンクが含まれています。多言語チームでは、各メンバーが自分の母国語で議事録を受け取れるため、理解度が向上。会議後のフォローアップ時間が58%削減されました。
```

### 設備保守の予測最適化

**インプット：** IoTセンサーからの機器データ、過去の故障/修理履歴  
**処理：** Azure IoT HubとAzure Digital Twinsでの異常検知・故障予測  
**アウトプット：** 最適保守タイミングと必要部品の自動推奨  
**業務価値：** ダウンタイム削減とメンテナンスコスト最適化

```
実装例：工場の設備管理者がPower BIダッシュボードで機器状態を監視すると、機械学習モデルが検出した「2週間以内に故障リスクが高い」設備が警告表示されます。予測されている問題部位と必要な交換部品が示され、Dynamics 365 Field Serviceで最適な保守作業指示が自動生成。計画外停止が年間72%減少し、予防保全コストも23%削減できました。
```

### 社内知識の検索・活用

**インプット：** SharePoint内の文書、会議資料、社内マニュアル  
**処理：** Azure Cognitive SearchとLanguage Understandingでの意味理解  
**アウトプット：** 質問意図に合わせた最適回答と関連資料  
**業務価値：** 情報アクセス効率化と暗黙知活用

```
実装例：Teams内で「新製品の価格戦略について過去の資料はありますか？」と質問すると、AIアシスタントが社内文書を意味的に検索。関連度順に資料を提示するだけでなく、「先月の戦略会議では以下の3つの価格帯が検討されました」という要点まで抽出して回答。さらに関連する過去の成功事例も推奨してくれるため、新人でも過去の知見を活用しやすくなりました。
```

### 画像・映像からの情報抽出

**インプット：** OneDrive/SharePointの画像、Stream内の動画  
**処理：** Azure Computer VisionとVideo Indexerでの内容認識  
**アウトプット：** 自動タグ付け、内容のテキスト化、検索インデックス  
**業務価値：** 非構造化データの活用と検索性向上

```
実装例：製品開発チームが撮影した数千枚のテスト写真をSharePointにアップロードすると、Computer Visionが自動的に画像内容を分析。製品モデル、テスト環境、問題状況などを自動タグ付けし、「画面にエラーコード123が表示されている写真」といった複雑な検索が可能に。品質問題の分析時間が従来の1/4に短縮されました。
```

## 実装のポイント：AIを現場で使える形に

Azure AIサービスの真価は、既存のMicrosoft製品との統合によって発揮されます。成功のカギは：

1. **業務フローへの自然な組み込み**：日常使用するツール内でAI機能を提供する
2. **適切なUI設計**：複雑なAI結果を直感的に理解できる表示方法の工夫
3. **フィードバックループの構築**：ユーザーからのフィードバックでAIを継続改善

```
実装例：営業予測AIの導入では、営業担当者が「予測が外れた理由」をワンクリックで報告できる仕組みを実装。このフィードバックがモデル改善に活用され、3か月で予測精度が23%向上しました。また、予測結果は単なるスコアではなく、具体的な次のアクションとして提示することで、受け入れられやすくなりました。
```

## まとめ：AIの真の価値は業務変革にある

Microsoft AzureとMicrosoft製品の組み合わせの最大の強みは、AIやデータ分析を「特別なプロジェクト」ではなく「日常業務の一部」として定着させられる点にあります。専門知識がなくても高度な分析結果を活用できる環境を構築することで、組織全体のデータドリブンな意思決定を促進します。

成功のポイントは「何が実現できるか」より「どの業務課題を解決するか」を出発点にすること。技術ありきではなく、ビジネスニーズから逆算したAI活用がMicrosoft製品との連携でシームレスに実現できます。
Python+Streamlitを活用したX(旧Twitter)の動画をダウンロードしよう

# はじめに

X（旧Twitter）の動画付きツイートを手軽にダウンロードできるWebアプリをPythonで作成する方法を解説します。Streamlitを使えば、わずか30行程度のコードでGUI付きのダウンロードツールが作れます。**※あくまで技術学習用のサンプルであり、実際の使用時はXの利用規約や著作権に十分注意してください。**

---

# 必要な環境と準備
今回はStreamlitを利用します。以下の記事を参考にしてください。

https://qiita.com/sypn/items/80962d84126be4092d3c

## 必要なパッケージのインストール
```bash
pip install streamlit yt-dlp
```

- **streamlit**: Webアプリケーションを簡単に作成できるPythonライブラリ
- **yt-dlp**: YouTubeやXなど様々なプラットフォームから動画をダウンロードできるライブラリ

---

# アプリの作成手順

## 1. コードの作成  
以下のコードを`twitter_url.py`として保存します。

```python:twitter_url.py
import streamlit as st
import yt_dlp

st.title("Twitter(X) 動画ダウンローダー")

url = st.text_input("動画付きツイートのURLを入力してください")

if st.button("ダウンロード"):
    if "x.com" not in url:
        st.error("有効なTwitter(X)のURLを入力してください")
    else:
        ydl_opts = {
            'outtmpl': '%(title)s.%(ext)s',  # ファイル名の形式
            'format': 'best[ext=mp4]',       # 最適なmp4形式を選択
        }
        try:
            with yt_dlp.YoutubeDL(ydl_opts) as ydl:
                ydl.download([url])
            st.success("ダウンロード成功！同じディレクトリに保存されました。")
        except Exception as e:
            st.error(f"エラーが発生しました: {e}")
```

---

## 2. アプリの起動方法
```bash
streamlit run twitter_url.py
```

ブラウザが自動で開き、以下のような画面が表示されます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951071/625f3077-d1d0-4aaf-9d65-9f9b8a198882.png)


1. 表示されたテキストボックスにXの動画付きツイートURLを貼り付け
   - 例: `https://x.com/example/status/123456789`
2. 「ダウンロード」ボタンをクリック
3. 成功メッセージが表示されたら、同じディレクトリにMP4ファイルが保存されます

---

# 注意点と制限事項

## 法的な注意
- **Xの利用規約**に違反しないよう注意（商用利用や再配布の禁止など）
- **著作権保護された動画**の無断ダウンロードは法律違反の可能性
- あくまで**個人利用・技術学習**の目的で使用してください

## 技術的な制限
- 非公開アカウントの動画はダウンロード不可
- 動画が削除されている場合はエラー発生
- 動画の画質は元のツイートに依存

---

# 仕組み解説

## yt-dlpの設定オプション
```python
ydl_opts = {
    'outtmpl': '%(title)s.%(ext)s',  # 動画タイトルをファイル名に使用
    'format': 'best[ext=mp4]',       # 最高品質のmp4形式を選択
}
```
- `quiet: True`を追加するとコンソール出力を非表示に
- `proxy: "アドレス"`でプロキシ経由のダウンロードも可能

## Streamlitの特徴
- `st.text_input()`でテキスト入力ボックスを生成
- `st.button()`でクリック可能なボタンを配置
- `st.success()`/`st.error()`で結果を分かりやすく表示

---

# 応用可能な改良案

- ダウンロードフォルダの指定機能追加
- 画質選択機能の実装
- ダウンロード履歴の保存
- 複数URLの一括ダウンロード機能
- プログレスバーの表示

---

# まとめ

Streamlitとyt-dlpを組み合わせることで、最小限のコードで機能的な動画ダウンロードツールを作成できます。ただし、実際に使用する際は以下の点に注意してください：

1. 著作権法やXの利用規約を遵守すること
2. ダウンロードした動画の無断共有は行わない
3. あくまで技術デモとして活用すること

このサンプルコードをベースに、PythonのWebアプリ開発や動画処理の学習に役立ててください。
【Rails】default_scope と upsert_all で酷い目に遭った話

## 結論
```ruby
default_scope -> { where(is_deleted: false) }
```
以上のデフォルトスコープが付いた`Diary`モデルに対して以下のrakeタスクを回したら、ユーザーが削除した日記を全て復活させてしまった。


```ruby
task :migrate_diaries do
  Diary.unscoped.find_in_batches(batch_size: 1000) do |diaries|
    updates = diaries.map do |diary|
      attributes = diary.attributes.dup

      attributes[:title] = diary.raw_title
      attributes[:content] = diary.raw_content
      attributes[:updated_at] = Time.current
    end

    Diary.upsert_all(updates) if updates.present?
  end
end
```

## このスクリプトの作成意図
「**今まで暗号化してDBに保存していた日記のタイトルと内容を、平文にして保存し直すためのrakeタスクを作成**」したかった。

データ可視化ツールで今までは暗号化された状態でしか見ることができなかった日記の内容が確認できるようになる。

## 問題
削除済みも含めた全てのレコードが`is_deleted: true`で保存されてしまっていた。

「`diary.attributes.dup`の時点で`is_deleted`の内容もコピーしたはずなのに」

幸い`deleted_at`カラムも生えていたので、このカラムを参照して`is_deleted`を元に戻すスクリプトを回し直して修正した。


## 原因
同様の状況に陥った記事で以下の説明が。
> 原因としてはdefault_scopeが検索だけではなく、全てのクエリを対象としているため、レコードの作成や更新のタイミングにも影響を与えていることです。

https://note.com/cute_iris436/n/n96c2a7f6dfd3

デフォルトスコープは「全て」のクエリが対象なので、`Diary.upsert_all`の時も`unscopted`をつけなければならなかった。

これをつけ忘れたせいで、`is_deleted`を`false`にして更新をかけたとしても、デフォルトスコープが優先されて勝手に`true`に上書きされて更新される。

### （反省）
大きな実装をいきなり全体から書き始めてしまったがために、細部の挙動に関心がいかなかった。

いきなりコンソールでたくさんのレコードを作ってみて、`find_in_batches`書いて、回してみて多分全部いけてる！みたいなことをせずに、まずは一件のレコードを作って更新してみて、ちゃんと全てのカラムが正常に更新されているかを確実にしてからやるべきだった。

そうすれば各カラムの確認もちゃんとしようと思えてたかも。そこで「削除済みのレコードってどうなるんだっけ？」みたいな疑問も持ててたかもなぁ、と。

やはり「小さく実装する」を常に意識すべきだなと思った。
外付けHDDで運用していた仮想マシンをHyper-Vに登録しなおした

Homeエディションで無理やり使っていたのだが、数か月後に起動しようとしたら、いつのまにかHyper-Vマネージャが無くなってた。。。
USB外付けHDDに仮想環境はまるっと保存していたので、復元したお話。

### まずはHyper-Vインストール

以前やったように、hyperv.batを作成して管理者で実行。

### そしてインポート

ここで迷ったが、結局インプレースを選択。外付けのまま運用したいので。
※念のためフォルダ全体はバックアップしておいた。
![mmc_Sy2PRWWt2t.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3916302/13827b14-2f30-4c83-a354-322e837e060a.png)

道すがら、下記エラー。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3916302/7514cfca-2d83-4252-ae95-935f1b4af44c.png)

Default Switchにアタッチしようかと思ったけど、なんか理由があったはずなので、一旦インポートやめてマネージャーに戻り、`操作->仮想スイッチマネージャー`で`talon`を外部スイッチとして追加。
再度インポート

OKだった。
スイッチtalonはおそらく固定IPにしようとしていたはずなので、あとで実施しよう。

追記：
スイッチtalonは外部にしてなかったはず、というのが結論。
方向転換して、Default Switchにアタッチして仮想マシンへSSH接続と、仮想マシンからcurl www.google.comできることを確認して終了。
Azureサービスのアーキテクチャを考えてみた


オンプレミス環境をAzureに移行することを考えている方もいらっしゃるのではないかと思います。
そんな方のために、初心者向けにオンプレミス環境をAzureに移行するとなったらどんなAzureサービスを利用するのか考えてみました。

## 要件例１
ある会社が運営するWebサイトには静的コンテンツと動的コンテンツがある。
Webサイトには全世界からアクセスが頻繁にあり、レイテンシーは最小限に抑えたい。障害が発生した場合でも、高速なフェイルオーバーでWebサイトのダウンタイムは最小限に抑えたい。また、Webサイト用に10TBのデータを保存しているWindowsファイルサーバーもあわせて移行したい。


### 利用サービス
ある会社が運営するWebサイトには静的コンテンツと動的コンテンツがある。
⇒**Azure Blob Storage**（静的コンテンツ用）
　**Azure App Service**（動的コンテンツ用）

Webサイトには全世界からアクセスが頻繁にあり、レイテンシーは最小限に抑えたい。
⇒**Azure Front Door**

障害が発生した場合でも、高速なフェイルオーバーでWebサイトのダウンタイムは最小限に抑えたい。
⇒**Azure Traffic Manager**

また、Webサイト用に10TBのデータを保存しているWindowsファイルサーバーもあわせて移行したい。
⇒**Azure Files**

イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4074924/fa770967-e19d-4c68-bbe7-280cdacb6efa.png)


## 要件例２
オンプレミスの多層WebアプリケーションシステムをAWSへ移行する計画を立てている。
Webアプリケーションはデータ受信用のWebサーバーとデータ処理用のアプリケーションサーバーに分かれており、Apache Active MQを利用してシステム間を疎結合化している。また、データ保存用にMongoDBを利用している。また、一定の期間がすぎたデータはアーカイブとして長期に保存しておく。

### 利用サービス
データ受信用のWebサーバー
⇒**Azure App Service**

データ処理用のアプリケーションサーバー
⇒**Azure App Service**

Apache Active MQを利用してシステム間を疎結合化
⇒**Azure Service Bus**

データ保存用のMongoDB
⇒**Azure Cosmos DB for MongoDB API**

アーカイブデータの保存
⇒**Azure Blob Storage**

イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4074924/f1d8b65a-43d7-4484-b4ef-e8ec159448b1.png)
Microsoft Certified: Azure Developer Associate(AZ-204)合格備忘録

### ■受験の目的
Microsoft AzureにおけるWebApp・API開発、それに関連するユーザー利用ごとのサービス構成の考え方を理解するため。
Microsoft Certified: Azure Developer Associate(AZ-204)の認定を受けるため。

### ■出題範囲
シラバスはMicrosoft公式から参照します。
https://learn.microsoft.com/ja-jp/credentials/certifications/resources/study-guides/az-204

### ■受験の前提
中級試験の位置づけですが、特に事前に合格が必要な試験などはありません。
開発で利用する構成・サービスに関する理解が必要であるため、
本試験を受験する前提知識としては、AZ-900,104の範囲で理解していると有利です。

### ■筆者の経験と補足事項
筆者の勤め先は、アプリ開発が主業ではありません。データエンジニアリング・分析が主です。
筆者は、この試験の2年前にAZ-900,104,305を取得していて、且つ業務でAzureをデータエンジニアリングの範囲ですが動かしていた経験がありました。
上記の試験から7～8割のサービスは共通していますので、学習負荷はそれほど高くなかったですが、WebApp・API開発については知識に明るくなく、通知サービス、cosmosDBの整合性、SDK、JSONなどで理解に苦戦しました。
2年ぶりのAZシリーズの試験であったため、各サービスの仕様が更新されていたこともあり、再学習する部分がありました。

### ■受験のメリット
WebappやAPIがどのような仕組みで動作しているか、管理されているかを理解できます。
筆者としては、多様なベンダーのパッケージ製品を取り扱うことが多いのですが、
お客様に製品提供する際のハンドリングとして、Webappのブラックボックスを解消できる、
一つの知識として持っておきたかったというところになります。


### ■教材
**MicrosoftLearningのトレーニングコース**で学習します。
このあたり無料で詳しく体系的に学べるのはありがたいです。
PC端末限定ですが、ラボもあります。
https://learn.microsoft.com/ja-jp/training/courses/az-204t00
※個人のMicrosoftアカウントがあれば、PCやスマホなどで進捗を同期できるので、いつでも続きから学習できます。

学習のポイントとしては、**ブラウザの読み上げ機能**を活用すると良いです。

試験中にMicrosoftのドキュメントを検索することも可能なので、
技術ドキュメントを事前に参照しておこうと思ったのですが、
今回の出題範囲のサービスが広大であるため、こちらは時間の関係から断念しました。



### ■模擬試験
Udemyで購入しました。
https://www.udemy.com/course/azure-developer-associate-az-204-practice-tests-latest/

模擬試験をやってみると、初回5割は全く理解できませんでした。
解説と添付のLearningを読み込んで、仕組みを理解しておきましょう。

本番試験からの後日談ですが、
日本語試験でも、**英語の選択肢**で問われることもあったため、
ブラウザ翻訳機能で読解・解答しても良いのですが、
模擬試験の周回のどこかで英語で解答する練習もしておきましょう、


### ■学習期間
筆者の場合、ラーニングと模擬問題を2カ月ほど学習しております。


### ■実際の本試験
日本語に対応した試験が発行されていましたので、そちらで受験しています。
全問の制限時間は100分でした。問題数と構成は毎回変わるのでご注意ください。

以下の内容でした。
全問題：49問
　　L　スタンドアロン：37問
　　　　L　通常問題：1~31
　　　　L　共通題目A：32~34：3問（戻る・見直し不可）
　　　　L　共通題目B：35~37：3問（戻る・見直し不可）
　　L　ケーススタディ：12問
　　　　L　ケースA：38~45：8問
　　　　L　ケースB：46~49：4問

注意点として、
ケーススタディ遷移後は、スタンドアロンセクションに戻れません。
見直しが必要だったのに、間違えて押してしまうと致命的なので気を付けてください。
制限時間は全問トータルで100分です。計画的に解くようにしましょう。

模擬問題の内7割くらいは、形式を変えながら出題されていました。
ライセンス仕様改訂の影響があったサービスの問題や
7問くらい初見の問題があったため、Leaning検索で対応しました。

苦戦した箇所としては、メソッドやパラメータの穴埋め、設定順序、構成順序の問題です。
ストレージ、キー管理サービス、cosmosdbのsqlロール定義などは、一部初見の内容でした。

7割以上が合格ラインです。
8割弱のスコアでしたが、初回受験と苦手分野であったため、満足のいく結果でした。
windows11で、sketchup6 その89

# 概要
windows11に、sketchup6を入れてみた。
rubyで、3Dを書く。
練習問題やってみた。

# 練習問題
ボールの弾みをシミュレーションせよ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/92ca4132-febd-4390-b0d7-f788624e36ae.png)


# サンプルコード
起動 Ball.new

```

require 'sketchup.rb'


class Ball
	def initialize
		model = Sketchup.active_model
		entities = model.active_entities
		@tid = 0
		@v0 = 10
		@pz = 0
		@t = 0
		@view = model.active_view
		@ball = entities.add_group
		circle = @ball.entities.add_circle [0, 1, 2], Y_AXIS, 4.0, 20
		circle_face = @ball.entities.add_face circle
		circle_face.pushpull -0.1
		@tid = UI.start_timer(0.9, true) {
			tick
		}
	end
	def tick
		g = 9.8
		@t += 0.1
		z = 2 + @v0 * @t - 0.5 * g * @t * @t
		puts z
		if (z < 2)
			@v0 = @v0 * 0.8
			@t = 0
		end
		trans = Geom::Transformation.translation [0, 0, z - @pz]
		@ball.transform! trans
		@view.invalidate
		if @pz == z
			UI.stop_timer @tid
		end
		@pz = z
	end
end





```

以上。
個人的備忘録："Failed to compile." でもビルド成功？Next.jsで出たESLint警告を調べてみた

## はじめに
Next.jsでアプリケーションを本番ビルドし、S3へ静的ファイルをアップロードしようとした際、`npm run build` は成功したものの、`npm run export` が実行できないという問題に直面しました。

:::note info
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

ログには "Failed to compile." とも表示されましたが、実はビルド自体には問題がなかったことがわかりました。

## 書こうと思ったきっかけ
静的エクスポートを行う手順を試していたところ、以下のようなことが起きました。

```bash
> next-app@0.1.0 build
> next build

✓ Compiled successfully
Failed to compile.

./src/app/page.tsx
4:8  Error: 'Image' is defined but never used.  @typescript-eslint/no-unused-vars
```

この「Failed to compile.」という表記に一瞬戸惑いましたが、実際にはESLintによる警告（未使用のimport）だっただけで、アプリのビルドには支障がありませんでした。

その後、静的ファイル化しようと `npm run export` を叩いたところ、以下のエラーが発生しました。

```bash
npm error Missing script: "export"
```

これにより、静的出力を行う `export` スクリプトが `package.json` に定義されていないことに気づきました。

```package.json
{
  "name": "next-app",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "dev": "next dev --turbopack",
    "build": "next build",
    "start": "next start",
    "lint": "next lint",
    "export": "next export"
  },
  "dependencies": {
    "@headlessui/react": "^2.2.2",
    "next": "15.2.4",
    "react": "^19.0.0",
    "react-dom": "^19.0.0"
  },
  "devDependencies": {
    "@eslint/eslintrc": "^3",
    "@tailwindcss/postcss": "^4",
    "@types/node": "^20",
    "@types/react": "^19",
    "@types/react-dom": "^19",
    "eslint": "^9",
    "eslint-config-next": "15.2.4",
    "tailwindcss": "^4",
    "typescript": "^5"
  }
}
```

また、Next.jsのバージョンが15系だったため、`npx next export` は非推奨？（個人調べ）となっており、代わりに `next.config.ts` に `output: "export"` を設定して、通常の `npm run build` だけで静的ファイルを出力する流れへ移行していることもわかりました。

https://zenn.dev/tr19/articles/d171ce03569b99

## まとめ
- `npm run build` の途中で表示される "Failed to compile" はESLint警告であり、実際にはビルド成功。
- `npm run export` が使えないのは、`package.json` にスクリプトが登録されていないため。
- ESLint警告は無視して進めても問題ないが、importの整理で後から解消できる。

今後も同様の構成を使う際には、静的エクスポートモードへの切り替え設定を忘れずに入れておくことが大切だと感じました...！
図解: Hyper-V のネットワーク構成比較

# はじめに
　今さらな感じもしますが、Hyper-Vのネットワーク構成を比較して1枚の図にまとめてみました。
　ネットワーク構成図の部分は推測も入っていますので間違いがあれば指摘して頂けるとうれしいです。（特に「既定」のネットワーク構成については公式情報をほとんど見つけられませんでした。）

# Hyper-V のネットワーク構成比較図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643108/5a7ce7cd-f112-4c04-a408-b6a5550cd7e0.png)
図をクリックして拡大

# Hyper-V のネットワーク構成比較図のポイント
## ・ネットワークセグメント
　__・「既定」「内部」「プライベート」__
　　　・仮想スイッチと物理スイッチのセグメント（背景：水色、ピンク）は異なります。
　__・「外部」__
　　　・仮想スイッチと物理スイッチのセグメント（背景：ピンク）は同じになります。

## ・物理NICが紐づく先（想像が入っています。）
　__・「既定」「内部」「プライベート」__
　　　・物理NICはホスト（Host）に紐づきます。
　__・「外部」__
　　　・物理NICは仮想スイッチに紐づきます。
   

# 実際に試してみて、はまったところ
## 　仮想ネットワークのネットワーク プロファイル
　作成した仮想ネットワークのネットワーク プロファイルが「パブリック ネットワーク」になってしまい、VMからHostへの通信がブロックされました。「プライベート ネットワーク」に変更することで通信が可能になりました。
　Defenderファイアウォールで「パブリック」プロファイルの設定変更を行う方法もありますが、セキュリティリスクが高いので上記で対応しました。

## 　「既定」以外のIPアドレス設定
　Hyper-Vのネットワークは「既定」以外の場合、Hyper-VのDHCPサービスは提供されず、VM側のIPは手動で行う必要があります。
 
## 　HostとVMのIPアドレス重複
　以下の条件の時にHostとVMが同じIPとなり不具合が発生しました。
　　・Hyper-Vのネットワークで「外部」を選択し、VMにも「外部」を割り当てる。
　　・VMではIPアドレスをDHCPから取得するように設定している。
　　・外部ネットワークにはDHCPサーバーが存在している。

　VMのIPを手動で設定し対応しました。

## 　Hostから外部への通信不可
　Hyper-Vのネットワークで「外部」を選択し、かつ下図のように「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」のチェックを外した場合、Hostから外部へのアクセスが不可になりました。
　Hostのネットワーク接続が無くなってしまうことが原因と思われます。（上図参照）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643108/dcd6f5aa-4ae2-4701-8c77-c7858d35b181.png)

# 参考資料
[Hyper-V のネットワークの基本](https://learn.microsoft.com/ja-jp/windows-server/virtualization/hyper-v/plan/plan-hyper-v-networking-in-windows-server#hyper-v-networking-basics)
[Hyper-V 仮想スイッチ](https://learn.microsoft.com/ja-jp/windows-server/virtualization/hyper-v-virtual-switch/hyper-v-virtual-switch)
[スイッチとネットワーク アダプターの選択肢](https://learn.microsoft.com/ja-jp/windows-server/virtualization/hyper-v/plan/plan-hyper-v-networking-in-windows-server#switch-and-network-adapter-choices)
[What's New in Hyper-V Virtual Switch in Windows Server 2012](https://learn.microsoft.com/ja-jp/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/jj679878(v=ws.11))
[朝から昼寝 : Hyper-VのDefault Switchの正体を調べる](https://happynap.net/2022-09-28-154544/)
[The Really Simple Guide to Hyper-V Networking](https://www.altaro.com/hyper-v/simple-guide-hyper-v-networking/)
[What is the Hyper-V Virtual Switch and How Does it Work?](https://www.altaro.com/hyper-v/the-hyper-v-virtual-switch-explained-part-1/)
PostgreSQL 18がやってくる(7) COPY materialized view TO

# はじめに
にゃーん。
今回は小ネタ。
MATERIALIZED VIEWから直接COPY TOできるようになった、という改善項目について調べてみました。

# 概要
[Commitfest 2025-03](https://commitfest.postgresql.org/52/)でコミットされた項目である。

|タイトル|[COPY materialized view TO](https://commitfest.postgresql.org/patch/5533/)|
|:--|:--|
|Topic|Server Features|
|Last modified|2025-04-07 00:19:29|
|Emails|[in BeginCopyTo make materialized view using COPY TO instead of COPY (query).](https://www.postgresql.org/message-id/flat/CACJufxHVxnyRYy67hiPePNCPwVBMzhTQ6FaL9_Te5On9udG=yg@mail.gmail.com)|

# MATERIALIZED VIEWからのCOPY TO
## PostgreSQL 17まで
PostgreSQL 17まではMATERIALIZED VIEWから直接``COPY TO``コマンドでファイルへの書き出しはできなかった。

以下のようなMATERIALIZED VIEWがある。
```sql
testdb=# \d pgbench_accounts_mv
      Materialized view "public.pgbench_accounts_mv"
  Column  |     Type      | Collation | Nullable | Default
----------+---------------+-----------+----------+---------
 aid      | integer       |           |          |
 bid      | integer       |           |          |
 abalance | integer       |           |          |
 filler   | character(84) |           |          |
```
``COPY TO``（テーブルからファイルやプログラムに書き出すモード）では、通常のテーブルまたはクエリ結果しか指定できない。
上記のMATERIALIZED VIEWを指定した場合にはエラーになる。
```sql
testdb=# COPY pgbench_accounts_mv TO '/tmp/mv.txt';
ERROR:  cannot copy from materialized view "pgbench_accounts_mv"
HINT:  Try the COPY (SELECT ...) TO variant.
```
とはいえ、HINTにあるように``(SELECT ...)``（あるいは``TABLE ...``）で代替はできるので、それほど大きな問題にはならない。
```sql
testdb=# COPY (TABLE pgbench_accounts_mv) TO '/tmp/mv.txt';
COPY 10000000
testdb=#
```

## PostgreSQL 18
PostgreSQL 18では、``COPY マテリアライズドビュー名 TO ...``でもCOPYができるようになった。

```sql
testdb=# \d pgbench_accounts_mv
      Materialized view "public.pgbench_accounts_mv"
  Column  |     Type      | Collation | Nullable | Default
----------+---------------+-----------+----------+---------
 aid      | integer       |           |          |
 bid      | integer       |           |          |
 abalance | integer       |           |          |
 filler   | character(84) |           |          |

testdb=# COPY pgbench_accounts_mv TO '/tmp/mv.txt';
COPY 10000000
testdb=#
```

# マテリアライズドビュー名指定と、クエリ指定の違い
さて、PostgreSQL 18では``COPY TO``でマテリアライズドビュー名を指定可能になったが、結果としては``COPY ( TABLE マテリアライズドビュー名 ) TO ...``と同じ内容のファイルが生成される。
では、マテリアライズドビュー名指定が可能になると何が嬉しいのか。
もちろんSQLの記述がちょっとだけ楽になるというのもあるが、どうやらクエリ指定したときよりも、直接マテリアライズドビュー指定するほうが、ちょっとだけ高速らしいのだ。
（議論のMLから引用）
> generally  COPY TO``COPY table`` is faster than ``COPY (select * from table)``

## 処理時間の比較方法
ということで試してみる。
* ``pgbench -i -s 100``の指定でテーブル群を作成する。
* pgbench_accountsの内容そのままのマテリアライズドビューを作成する。
* そのマテリアライズドビューから``COPY TO``でテーブル内容をエクスポートする。
  * マテリアライズドビュー名を指定するパターン
  * (TABLE マテリアライズドビュー)を指定するパターン
  * 出力先は``/dev/null``にしておく（ファイル書き込み時間を無視するため）
* 各方式で3回ずつ実行した処理時間を集計する。

## 処理時間比較結果

マテリアライズドビュー名指定のほうが約4%程度、処理時間が短縮されている。
|方式|平均処理時間(ms)|stdev|
|:--|--:|--:|
|マテリアライズドビュー名指定|3623.172|26.520|
|クエリ指定|3500.035|17.257|

4%程度なので劇的な処理時間の短縮というわけではないけど、非常に巨大なマテリアライズドビューから結果をエクスポートする場合にはありがたい改善になりそうだ。

# おわりに
この改善によって
* MATERIALIZED VIEWから直接COPY TOできるようになった。
* 直接COPY TO指定することで少しエクスポートの処理時間が短縮可能

ということがわかりました。
地味な改善だけど、こういうことの積み重ねも大事なことですよね・・・。
TypeScriptでRxJSを体系的に学びたかったので、AIと一緒に教材を作ってみました

最近、生成AI（ChatGPTなど）を使って学習コンテンツを作る動きが増えています。  
けれど、実際に「自分で教材を作って公開する」となると、なかなかハードルが高いですよね。

この記事では、**RxJSをTypeScriptで体系的に学ぶ教材**を、
**AIと人間の協働**で作成したプロセスと、その成果を紹介します。

## 📌 なぜRxJSの教材を作ったのか？

RxJSは非常にパワフルなライブラリですが、学習コストが高く、

- 文献が断片的
- オペレーターの種類が多すぎる
- サンプルコードが実用と乖離している

など、初学者がつまづきやすい点が多くあります。

そこで今回は、

- **TypeScriptで記述された**
- **体系的に整理された**
- **実際に動かせるコード付きの**
- **人とAIの共創による教材**

という形で、実験的に教材を制作してみました。

いや、ぶっちゃけ、**自分自身の体得の為が本音** 👈 ここが一番重要な目的だったりする😽


## ⚙️ 教材の内容（さわりだけ）

本教材では、以下のような流れでRxJSを学べます。

1. RxJSの基本概念（Observable, Observer, Subscriptionなど）
2. よく使うオペレーター（map, filter, mergeMap...）
3. ストリームの作成と変換
4. マーブル図の理解とテストパターン
5. 実践問題（順次追加予定）

TypeScript + Vite環境で動作確認済みのコードも多数掲載しています。

## 🤖 人とAIの協働プロセス（ちょっと裏話）

- 章構成・設計：人間が主導
- 各ページの草案：AIが生成
- 内容のレビュー・修正：人間が行う
- 表現・用語の調整：AIと対話しながらブラッシュアップ

**AIだけでは完成しない**、
**人だけでは時間がかかりすぎる**、
ちょうどその中間を取るようなプロジェクトでした。

## ✅ 教材はこちらで公開しています

- 📘 [RxJS with TypeScript（教材サイト）](https://shuji-bonji.github.io/RxJS-with-TypeScript/)


https://shuji-bonji.github.io/RxJS-with-TypeScript/


- 💻 [GitHubリポジトリ](https://github.com/shuji-bonji/RxJS-with-TypeScript)

https://github.com/shuji-bonji/RxJS-with-TypeScript

- 🧠 [制作の詳しい背景・考察（Zenn記事）]( https://zenn.dev/shuji_bonji/articles/18bba36a4ac0de)
 
 https://zenn.dev/shuji_bonji/articles/18bba36a4ac0de

## 今後

改めて時間が取れたら、以下に取り組んでみたい。
- 今後は学習ドリルや応用演習の追加を計画
- stackblitzなど、直接ページのサンプルコードを実行できるような、ユーザの利便性を高める仕組み作り

## 🙌 さいごに

RxJSを本気で学んでみたい方、
生成AIを活用してコンテンツを作りたい方にとって、
少しでも参考になればうれしいです。

教材に関するフィードバックや、あなたの挑戦もぜひ教えてください！
RubyKaigi2025に参加

## 旅立ち

先日RubyKaigi2025に参加してきました。毎年開催地は異なるようで、今年は愛媛の松山県民文化会館で開催されました。今回は初RubyKaigi、初四国いうことで変な緊張をしました。朝早いフライトに備えて前日の22時に就寝したものの、なぜか1:30に目が覚めて寝るに寝れなかったため、そこから3時間ほどギンギンに天井を見つめ、空港へ向かいました。

![1000002700.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677442/b66c4a8b-4a4c-4144-bbcf-a9005d78a618.jpeg)



![1000002702.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677442/d791ab20-ff45-4983-9c34-c1bd2c25d745.jpeg)


## ブース

今回のRubyKaigiでは、認知向上のため primeNumber からブースの出店を行い、自分もブース対応での参加をしました。primeNumber、TROCCO、COMETAに関して知っている人は少ない印象でしたが、逆にいうと認知を広めることができよかったと感じました。
海外からの参加者も多くすごく新鮮でした。体感では1～2割ほどいた気がします。海外の方はデータ基盤周りの技術に関心があるような雰囲気を受けました。

２日目と３日目にはスタンプラリーが開催され、各ブースを回るとスタンプを集めることができます。そのため、多くの方々にブースに立ち寄っていただきました。primeNumberでは、XやCompassのフォローをしていただいた方にはノベルティとしてプリングルズを配布しましたが、ありがたいことに多くの方に登録いただきました。会場全体では甘いものが多く流通していたため、その塩味ゆえにプリングルズを渇望する人がちらほらいました。

また、primeNumberブースでは「素数スピード」というゲームを催しました。他のブースではこういったボード(カード)ゲームをほとんど行っておらず、意外と人気でした。途中から勝者はボードに名前を刻む仕様を追加し、ゲームセンターのような盛り上がりを演出できました。(たぶん)

自分自身もディーラーとして対戦相手をしたのですが、頭がうまく回転せず老いを感じました。ちなみに「素数スピード」は市販されているものなので、興味があるかたはお買い求めください。

[素数スピード](https://www.amazon.co.jp/dp/B0CQH2CW3L)

ブース運営の反省点として、使用するスタンプの準備が間に合わず、ペンでのサイン対応となったため、次回はスタンプやシールを用意しておくべきだと感じました。 色々な職種の方が参加されており、人によって関心のある話題とかが変わってくるので、データエンジニア、データアナリスト、ソフトウェアエンジニア、PdM、SRE ...など職種シール配ってネームホルダーに貼ってもらうなどして、交流のきっかけを作るのは良いなと思いました。 (たぶん RubyKaigi では多くがソフトウェアエンジニアだと思いますが)

## ブースを徘徊

ブースはRubyセッションの合間をぬって他の企業のブースを回りました。ブース回るたびにどんどんアイテムが増えてきて、ステッカーは大量に集まりました。各社ブースはそれぞれ特色があり、Rubyクイズやアンケートを実施している企業が多い印象でした。Rubyクイズは勘で乗り切りました。RubyKaigiは何回目ですかみたいなアンケートをとっているブースがあり、初参加な人がマジョリティだったので意外でした。

![1000002787.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677442/b5dc1099-7b2c-48a4-8a17-39d390e28816.jpeg)


## 締めのMatz

主にブース運営を担当し、最後のMatzさんのセッション以外は聴くことができませんでした。床下からMatzさんが登場する歌舞伎のような演出から始まり、AI時代のプログラミングについてのセッションでは、時代を超えたコラボレーションを感じることができました。

## 夜のイベント

夜は各社が多彩なDrinkUpイベントを開催しており、満員になっている会場が多くどこも賑わっていました。Official Partyは“カワ”という隠語が使われているようですが、残念ながらチケットを取れませんでした。`#rubyriver`やXで検索すると情報が多く出てきます。イベント系はとりあえず応募しておき、参加が難しそうなら後からキャンセルという姿勢が求められますね。


## その他

最後に松山を満喫して帰路につきました。

道後温泉は有名で、温泉施設やお土産が充実していました。新館のみの入浴しましたが、3日間の疲れを癒せました。
蛇口からみかんジュースが絞れるようでいろんな銘柄のみかんジュースをいただきました。はるみが好みでした。記念にお酒を購入しようとしたところ年齢確認があり、免許証を持参しておらず残念ながら買えませんでした。キャッシュと身分証は必携です。

道後温泉からの帰り道、坊っちゃん列車に乗車しました。1両だけの黒い列車で、機関車トーマスのような風情です。車掌さんが腹から声をだして歴史や地域の説明をしてくださったり、列車の振動が直に伝わってたりして趣が深かったです。
松山市駅に行こうと思ったら松山駅に流されてしまい絶望しました。松山市駅と松山駅は全く別の場所なので次行ったら気をつけます。

全体を通して、初の四国・初RubyKaigiは刺激的で楽しめてよかったです。次回いくときはセッションを見たいと思います。

![1000002734.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677442/d8e36039-c35e-4c97-a82f-abf2cd0af2d1.jpeg)
Named Credentials Superbadge Unit



https://trailhead.salesforce.com/content/learn/superbadges/superbadge_named_credentials_sbu


# 事前準備

MuleSoft Anypoint Platform アカウントにサインアップする
このスーパーバッジユニットを完了するには、MuleSoft Anypoint Platform でホストされるアプリが必要です。ハンズオンチャレンジを完了するには、このアプリを Developer Edition 組織に接続する必要があります。

Anypoint Platformに登録します。

すでにアカウントをお持ちの場合は、「ユースケース」セクションに進んでください。

フォームにご記入ください。メールアドレスには有効なメールアドレスを入力してください。

フォームに入力したら、「Sign me up」をクリックします。

送信された電子メールリンクを使用してアカウントを認証します。

これで、MuleSoft Anypoint Platform アカウントと、このスーパーバッジ ユニット用に特別に構成された Salesforce 組織が準備完了です。



これも？

Anypoint Exchange ポータルにアクセスしてください。
MuleSoft Anypoint Platform のユーザー名とパスワードでログインします。
統合セキュリティタイルをクリックします。
ホーム ページに移動します。
「アクセスをリクエスト」ボタンをクリックします。
v1:18886395 API インスタンスを選択し、新しいアプリケーションを作成することを選択します。
任意のアプリケーション名を割り当てます。
作成されたら、クライアント IDとシークレットをメモしてください。これらは RG での認証に重要です。


あああ、これにかなり時間がかかりました。エラーになるし...


# 安全な調査のために外部認証情報を設定する


外部システムの認証情報を保存・管理するための外部認証情報を設定します。ユーザーに認証パラメータと適切なアクセス権限を割り当てます。


:::note alert
We can't find the special settings preinstalled in your org. Make sure you're using the special Developer Edition org made for this superbadge and linked in the scenario above.
:::


:::note alert
We can't find the 'Secure Research' external credentials as per requirements.

要件どおりに「Secure Research」の外部資格情報が見つかりません。
:::

:::note alert
We can't find the expected authentication parameters required by Research Guardian for the 'Secure Research' external credential.


「Secure Research」外部資格情報に対して Research Guardian が要求する認証パラメータが見つかりません。
:::

このパラメータは説明もないなぁ。
何でだろう？

https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007NA0p0SAD



:::note alert
We can't find the permission set named 'ExtCred - MuleSoft'.
:::

:::note alert
We can't find the appropriate access to the External Credential Principals.


外部資格情報プリンシパルへの適切なアクセスが見つかりません。
:::

:::note alert
We can't find the appropriate access to the authentication tokens.
:::

User External Credentialsのアクセス権が漏れていた...

# Research Guardian の名前付き認証情報を設定する


名前付き資格情報 Research Guardian をコールアウト設定で構成し、機器のリストを正常に取得します。 


:::note alert
We can't find the ResearchCallout certificate to make the Apex callout.
:::

:::note alert
Headers for the callout request are incorrectly set in the ResearchServiceController Apex class.


コールアウト要求のヘッダーが ResearchServiceController Apex クラスで正しく設定されていません。
:::


:::note alert
The ResearchServiceController class doesn't make a successful callout.

:::

 System.CalloutException: Field Secure_Research.client_secret does not exist. Check spelling.


パラメータってこれのこと？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/a3e2bae1-d271-4fd3-b7ab-39315cea765e.png)

このパラメータ名をClient IDとClient Secretにしていたのが間違えでしたね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/77201d45-9018-4b99-92ef-266c2a8f128d.png)

消して書き換えたら、権限セット側の設定も消えてエラーになったよ。

FATAL_ERROR System.CalloutException: We couldn't access the credential(s). You might not have the required permissions, or the external credential "Secure_Research" might not exist.
py-wheel044 の件。　面倒。

# いきなり解決策を提示。
- portmaster をお使いの方。
- 急いでる人向け。

```bash 
$ sudo portmaster -o devel/py-wheel devel/py-wheel044

```
*　参照先:
1. https://qiita.com/soprano1125/items/f8a575e85014282c1691
2. https://forums.FreeBSD.org/threads/py311-wheel-0-45-1-conflicts-with-py311-wheel044-0-44-0-installs-files-into-the-same-place-problematic-file-usr-local-bin-wheel-3-11.97481/post-697795

3. https://x.com/yak_ex/status/1911783261464088628
「Godot3.2.2ゲームエンジンに基づくギャルゲー時代の対決」

あらすじ：​​
﻿
異世界の帝国は豊かな天然資源と繁栄した農業を誇る。この王国の支配階級は古い貴族たちによって構成され、彼らの一族は代々、ほとんどの土地と政治権力を掌握してきた。しかし、海外貿易の台頭と資本主義の出現により、新たな商人階級や地主貴族が台頭し、より大きな政治的影響力と経済的特権を求めるようになった。新興商人であるあなたは、この社会変革の時代に身を投じることになる。

プロジェクトアドレス：
https://sourceforge.net/p/the-due-of-eras/code/ci/master/tree/
https://github.com/shiyou-t1c/The_Due_of_Eras
https://gitee.com/t1c/The_Due_of_Eras

このコードの最も驚くべき点は、プログラミング知識がなくても複雑なストーリー分岐システムと多言語対応を実現できることです。さらに特筆すべきは、そのハードウェアリソース消費量が現在市場の大多数のギャルゲー製品を遥かに下回っている点です。プロジェクトを加速させるためには、少なくとも100人規模のチーム編成が必要だと私は考えています。これほどの規模を要する理由は、実質的なコンテンツ量を伴う数百のストーリー分岐を構築する計画があるためです。プログラミング能力やストーリー設計の水準において、私は画面の前のあなたとおそらく変わらないでしょう。生存圧力に追われる普通のサラリーマンとして、誰もが持つ貴重な時間を痛切に理解しています。学生の方々も、過密労働に疲弊するビジネスパーソンも、このプロジェクトを「強制労働」ではなく「創作の理想郷」や「交流の場」として捉えて頂けることを願っています。ここに誓います——いつの日かあなたがこの事業を親しい人に紹介する時、きやっと胸を張れる人生の勲章となることを。

貢献をご希望の方はコメント欄へ投稿するか、直接Pull Requestをお送りください。

開発ガイドライン：  

1. Godot 3.2.2をダウンロード  
   [公式サイト](https://godotengine.org/download/archive/3.2.2-stable/)からバージョン3.2.2を入手してください。  

2. リポジトリをフォークしてクローン  
   • 当プロジェクトをフォーク（Fork）し、フォークしたリポジトリをローカルにクローンします。  


3. 新規ブランチでの開発  
   ```bash  
   git checkout -b [新規ブランチ名]  # 開発用の新しいブランチを作成  
   ```  

4. コードのコミットとプルリクエスト  
   • 変更をコミット後、該当ブランチを対象に Pull Request を提出してください。  


---

**プロジェクト構造**  
• メインスクリプトは `b1.gd` のみです。このファイルを確認すれば、プログラム全体の動作が把握できます。  

• `b1.gd` は `b1p/b1.tres` 内のコンテンツを読み込みます。  


---

**スクリプト記法ルール**  
| 記号 | 機能説明 |  
|------|----------|  
| `#` | 音声再生（例: `#bgm1` でBGM再生） |  
| `$` | 背景画像変更（例: `$scene2` で背景切替） |  
| `?` | 選択肢ボタン表示（例: `?選択肢A,選択肢B`） |  
| `&` | 分岐ジャンプ（例: `&routeX` で別ルートへ。空欄時は現在の分岐を継続） |  

---

貢献をお待ちしています！  
質問や提案があればコメント欄へ、コード修正の場合は直接Pull Requestを送信ください。
[みかん本] hello, world が実機テストで表示されない

知識０でみかん本を始めたのですが、hello, world の出力に失敗し出鼻をくじかれました。少しでも似たような初心者の力になれればと思いメモ。
結論としては、usbのフォーマットをFAT32にするだけで私は解決しました。

（追記：同様の内容が、<a href="https://github.com/uchan-nos/os-from-zero/blob/main/faq.md">FAQ</a>に既にありました。同じような報告がすでに複数あるようです。）

# 環境
開発用PC：surface Pro 7, Intel core i5-1035G4
開発環境：WSL2, Ubuntu 20.04
テスト用PC：dynabook, intel core i5 7th Gen
USBメモリ：32GB

# 状況
手順は完全にテキストを負っており、1.3「WSLでのやり方」に従ってUSBを作成した。
ブートオーダーも変更し、意気揚々とテスト用PCに挿して起動したが、HDDの方に入っていたlinuxが起動した。
なんかミスったかと思い、今度はブートメニューからしっかりUSBメモリを選択したが、コンマ数秒 画面が暗転するだけですぐにブートメニューに戻されてしまった。
EFIファイルのチェックサムも確認しており、ファイル構造も正しかった。エミュレータの方を試してみると正しくhello, world が出力された。よって、おそらくUSBメモリの作成orテスト用PCのハードに原因があると思われる状況だった。

# 対応
・開発用につかっていたsurfaceで試した　⇒　×　失敗
（windows PC でセキュアブートを無効にすると、Bitlockerの回復キーが必要になるので試すなら注意。Microsoftアカウントに入れれば問題ないとは思うけど、よくわからないなら**下手に試さない方がいい**かも。）

・ダメもとで、macbookでフォーマットしなおし、USBを作成　⇒　× 失敗

・USBのフォーマットをexFATではなく、FAT32に変えて試した　⇒　○ 成功

# まとめ
理由は定かではないが、USBのフォーマットをFAT32にすることで上手くいく可能性があります。（そんなに古くないけどexFATを読み込めないってことはあるのか…？）32GB以下のメモリを使用しているかつ、何故か上手くいかない方は試してみてもいいかもです。
先に進めてみて、exFATがやっぱり駄目だったかどうかは追記します。また、理由が分かる方はコメントで教えてもらえるとありがたいです。
個人の課題は抽象化してみるとチームの課題になる

# 個人の課題は抽象化してみるとチームの課題になる  
— システム開発の現場で “属人トラブル” を “組織レベル改善” に昇華する方法

## はじめに
> **ビルドが通らない・レビューが詰まる・深夜対応が続く…**  
> どれも “誰か一人の問題” に見えるが、視点を引いてみれば **開発プロセスやアーキテクチャの構造的課題** であることが多い。

この記事ではシステム開発の現場でありがちな個人課題を  
**抽象化 → チーム課題 → 改善サイクル** へ変換するフレームワークと実例を解説します。

---

## 1.現場で抽象化が効く理由
| 観点 | **個人レベル** | **チームレベル（抽象化後）** |
|------|----------------|------------------------------|
| 例 | 「Xさんのプルリクが遅い」 | **レビューキューが詰まるフロー** |
| 解決策 | Xさんの教育・注意喚起 | レビュー SLA・CI 自動チェック・ペアプロ導入 |
| 効果 | 一時的・局所的 | 継続的・再現性のあるプロセス改善 |

**ポイント**  
1. **再発防止**: “人” に依存しない CI/CD・自動テストで仕組み化  
2. **心理的安全性**: 個人攻撃を避け “プロセス課題” に置き換えて議論  
3. **技術負債の顕在化**: 抽象化により見えなかった負債が数値化される  

---

## 2. 個人課題 → チーム課題 “SEあるある” 対応表
| 目に見える症状（個人） | 抽象化すると | 代表的なチーム課題 |
|------------------------|--------------|-------------------|
| **ビルド失敗が多い**<br>（新人が環境構築で詰まる） | 再現性ゼロのローカル環境 | コンテナ化・IaC不足 |
| **コードレビューが滞る** | レビュー負荷集中 & SLA不在 | RACI未定義・レビュー自動化不足 |
| **深夜障害対応が常態化** | オンコール属人化 | モニタリング不足・運用ルール未整備 |
| **テスト漏れバグ多発** | 手動テスト依存 | 自動テスト戦略欠如・テストデータ管理不備 |

---

## 3. 抽象化フレームワーク（4ステップ）

1. **Observe – 観察**  
   - Git / CI/CD / チケットの **ログを定量把握**（例：失敗ビルド数, MTTR）
2. **Pattern – パターン化**  
   - 発生日・担当・影響範囲で **グルーピング**（例：金曜夜に障害集中）
3. **Structure – 構造特定**  
   - 視点：**プロセス / 技術基盤 / 役割**  
     - 例: “デプロイ＝手動” が障害のボトルネック
4. **Hypothesis & Action – 仮説と対策**  
   - **改善 Backlog** に落とし込み、Definition of Done と KPI を設定  

---

## 4. ケーススタディ：新人エンジニアのビルド失敗

| ステップ | 内容 |
|---------|------|
| Observation | 新人 Y さん、開発初日から **ビルド失敗 7 回** |
| Pattern | 同期 3 名も初週で平均 **失敗 5 回** |
| Structure | - ローカル環境は手順 Wiki／スクショのみ<br>- **Node.js / Java / Python** 各自手インストール<br>- Docker 導入は検討止まり |
| Hypothesis & Action | **① Docker Compose でローカル環境統一**<br>**② devcontainer.json** をリポジトリ直下に配置<br>**③ Onboarding ドキュメントを README に一本化**<br>*KPI: 新人の初回ビルド成功率 90% 以上* |

**結果**  
- 次バッチの新人は **ビルド成功率 92%**  
- 既存メンバーの “Works on my machine” も激減  

---

## 5. 改善サイクルを走らせる Tips
1. **メトリクスを自動収集**  
   - GitHub Actions + Datadog → ビルド失敗・レビュー時間を可視化  
2. **ふりかえりテンプレを標準化**  
   - 5 Whys + 技術／プロセス／人 の三軸で原因特定  
3. **小さく実験 → 展開**  
   - 1 チームで Docker 導入 ⇒ 成功データを元に全プロジェクトへ横展開  

---

## まとめ
- **SE チームの属人的トラブル** は、多くの場合 **開発プロセス・技術基盤の構造課題**。  
- 4 ステップ（観察 → パターン → 構造特定 → 仮説・対策）で抽象化し  
  **CI/CD・自動化・明確な役割分担** に落とし込むと再発を防げる。  
- **今日できること**  
  1. 直近 1 週間の障害・手戻りログを洗い出す  
  2. 共通パターンを抽象化し “技術 vs プロセス” どこが原因か貼り付け  
  3. 改善 Backlog にチケット化 & スプリントに入れる  

> **失敗は人に依存させず、仕組みで潰す。**  
> その第一歩は “個人の課題” を “チームの課題” として捉え直す視点転換だ。
脱オラクルに振り回される話

# はじめに

現在日本のデータベース管理は転換期を迎えており、
日本全国市町村の標準化にともなう
「続Oracle」か「脱Oracle」か
そして「脱Oracle」に悩まされている親愛なる友人諸君が
多くいることだろう。

ここではいきなり脱Oracleに巻き込まれた悲しいPGによる
愚痴とあるあるをそれっぽい記事にしていい感じにしていこうと思う


### 脱Oracle
まず脱Oracleとは？
この流れが生まれたのは、Oracleのデータベース使用料の高騰化及び、廉価版の廃止に伴う
ハイコスト＆ベンダーの囲い込み（誘導）に対する拒否反から発生したものである。

AmazonがOracleから脱却したことを皮切りに、
現在「脱Oracle」という動きがよく見られており
数年前までであればOracleのベンダー資格を取る動きがあったが、
現在ではPostgresqlのベンダー資格を推奨する動きもチラホラ見えてくる。

X（旧：Twitter）などではこの「脱Oracle」「続Oracle」に関しては
いまだに議論（レスバ）がされており、
私はそれを「僕らに決定権なんてないんだから、企業がコストカットしたいといえば
脱Oracleの流れになるもんなのに何をそんな持論を展開してるんだ」
と思いながら酒を飲む日々です。

そんな私にもとうとう脱Oracleの流れがやってまいりまして
DB転換及び、新規アプリケーションの実装
という二つの事象が同時に発生する案件に組み込まれてしまいました
（どうして...同時に！！！！）
伴って旧アプリケーション（Oracle）の仕様も含めて
ちょうど勉強の機会になっているため、
本記事を含めてツラツラと後続を走る人愚痴と注意点なんかを
今後書いていきたいと思います。



## どこに脱Oracleするのか
では、どこに脱出していくべきなのか
オープンソースのDBという意味であれば
「Postgresql」「MySQL」があるかと思います。
簡単な処理のみであればMySQLでもいいのですが、
元々Oracleを使っていたということは並列処理等もあることでしょう
必然的に脱Oracleの先はPostgresqlということになります

そして我々が考えないといけないのはその周辺環境もあります。
物理的なDBがあるのかクラウドなのか。

一番困るのはこれを機にAWSにしてしまえ！！のパターン
色々準備するものが増える。
そして私の案件もそう。ｸﾙｼｲ。

## 環境は決まった！その次は？
環境は決まりました。
じゃあデータを移行しなきゃいけないねとなった際に
次に噴出する課題がOracleとPostgresqlの仕様の微妙な違いにある。
これらをOracleからPostgresql用に直さないといけない。
クエリの翻訳やスキーマなどの移行作業が発生するのだ。
これが面倒くさい。

個人的にはストアドパッケージとプロシージャの移行。
これが一番面倒くさい。

私が一番参考にしているのは以下の記事
（ https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/migration-plsql-stored-package/ ）
なのだが
中身を軽く目を通してもらえばわかるように
かなり細かく分割しなければいけない。
しかもそれを、Oracleのお作法からPostgresqlにしなければいけないのだ。
どうして・・・

あと私たちはOracleの暗黙的な型変換に助けられていたんだな...
と実感することになります。

AAA.aaa＝BBB.bbb

のような条件式で中身が
文字列の数値と数値型の数値の時
Oracleはそれらを数値として認識して条件を満たしてくれていましたが
Postgresqlは江戸っ子職人並みに頑固なので
場合によっては
TO_charやTo_numericのような明示的な型変換を挟む必要が出てきます。
これ、本当に注意。

### おわりに
次回以降、簡単なSQLを比較して
陥りやすい（私がハマった）ミス、注意点などを紹介したいと思っています。
またどうぞよしなにしてください
【これさえあれば大丈夫！】NetSuite英単語集 トランザクション・レコード編

こんにちは、IT働楽研究所の伊藤です。
今回初投稿ということで、手をぷるぷるさせながら必死に記事を書いております...
そんな私の初投稿記事を暖かい目と心で見ていただけますと幸いです:pray:
よろしくお願いいたします！！

## はじめに
NetSuiteについて調べたとき、"英語で書かれたサイトが出てきたけど、なんて書いてあるかよくわからない:sob:"となったことはありませんか？そんな方向けにNetSuite専用の英単語集を作成してみました！

### この記事でわかる・できること
- NetSuiteに関する英単語がわかるようになる

### この記事の対象者
- 最近NetSuiteを触り始めた方
- NetSuiteの専門用語を英語で知りたい方


## 英単語一覧
早速ではございますが、NetSuiteでよく使われる英単語をお伝えしようと思います。今回はトランザクションに絞って作成したので、ぜひご活用ください！


### 販売系

| 英語 | 日本語訳 | 説明 |
|------|----------|------|
| Opportunity | 商談 | 商談フェーズにある取引を管理 |
| Estimate | 見積書 | 見積書の作成 |
| Sales Order | 注文書 | お客様からの注文を記録・管理 |
| Item Fulfillment | 配送 | お客様への配送を管理 |
| Invoice | 請求書 | 商品またはサービスの請求 |
| Customer Payment | 顧客入金 | 受注と同時に売上処理・入金を行う |
| Return Authorization | 顧客返品 | 顧客からの返品申請を受け付ける |
| Credit Memo | クレジットメモ | 返品や割引による金額調整を行う |
| Customer Refound | 顧客払戻 | お客様への返金に対応 |



### 購買系

| 英語 | 日本語訳 | 説明 |
|------|----------|------|
| Requisition | 購入申請書 | 必要な商品やサービスを申請 |
| Purchase Order | 発注書 | お客様への発注を記録・管理 |
| Item Receipt | 受領書 | 商品の受領状況を管理 |
| Vendor Bill | 支払請求書 | お客様への請求情報 |
| Bill Payment | 出金票 | お客様への支払処理 |
| Vendor Credit | 前払金/買掛金調整 | 支払後の返品・値引き処理 |


### 在庫管理
| 英語 | 日本語訳 | 説明 |
|------|----------|------|
| Inventory Transfer | 在庫移動 | 倉庫間で在庫を移動する |
| Inventory Adjustment | 在庫調整 | 不良品等があった場合に、数量を増減する処理 |
| Inventory Adjustment Worksheet | 在庫調整ワークシート | 不良品等があった場合に、数量を上書きする処理 |
| Inventory Count | 在庫棚卸 | 実棚数と帳簿数の差異を比較・棚卸として記録 |
| Bin Transfer | 保管棚移動 | 同じ倉庫内の棚番間で在庫を移動する |
| Bin Transfer Worksheet | 保管棚棚入ワークシート | "入荷した在庫をどの棚に入れるか"を指定する |



### 製造系
| 英語 | 日本語訳 | 説明 |
|------|----------|------|
| Work Order | ワーク・オーダー | 製造する製品に対して指示を出すレコード |
| Work Order Issue | ワーク・オーダー発行 | Work Order に基づいて、在庫から材料を出庫する |
| Work Order Completion | ワーク・オーダー完了 | 製造品が完成したことを記録 
| Manufacturing Cost Templates | 製造原価テンプレート | 製造にかかったコストを集計する |
| Manufacturing Routing | 製造ルーティング | 製品の作成手順を登録 |
| Bill of Materials (BOM) | 部品表 | 製品1個を作るために必要な材料・数量リスト |
| BOM Revision | リビジョン | 部品表のバージョン管理（変更履歴付き）|


### 会計系
| 英語 | 日本語訳 | 説明 |
|------|----------|------|
| Journal Entry | 仕訳帳 | 手動で会計記録を入力 |
| Intercompany Journal Entry | アドバンスト関係会社間仕訳 | 関連会社間での仕訳 |
| Account | 勘定科目 | 勘定科目の作成 |
| Budget | 予算 | 年度の予算を設定 |
| Expense Report | 経費精算書 | 社員からの経費申請を管理 |
| Manage Accounting Periods | 会計期間を管理 | 会計期間締めを行う |


## 最後に
いかがでしたでしょうか？
この記事が少しでもお役に立てれば嬉しいです。次回の投稿をお楽しみに！！
IBM i 7.6でサポートされないSDA, RLUの代替ツール（RDi)

[こちらの記事](https://qiita.com/gomAnomalocaris/items/64159c3c80d7dff1a898#adts%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E5%A4%89%E6%9B%B4ibm-rational-development-studio-for-i-5770-wds-%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3-21)で紹介した、ADTSの代替ツールについて簡単にご紹介します。

## SDAの代替：RDi スクリーンデザイナー

### ADTS SDA
長年使われている5250ベースの対話型の画面設計（*DSPF）の作成ツールです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/6a7c9f5e-44e9-44e5-a1d5-7cca9243b498.png)

### RDi スクリーンデザイナー

その代替となるツールがこちらRDi に含まれるスクリーンデザイナーです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/6735c62a-e7ca-48b8-b8bc-318c13a62edd.png)

SDAを踏襲しつつ、開発時の操作性はGUIなので使いやすく生産性も良くなっていると思います。

## RLUの代替：RDi レポートデザイナー

### ADTS RLU

RLUは5250画面で対話型で印刷帳票（*PRTF）を設計するツールです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/74309449-04e6-4aba-bc89-32065a8b4d27.png)

### RDi レポートデザイナー

代替となるツールがRDi レポートデザイナーです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/66a3d70f-8063-42a7-86a7-8338be2eaf1e.png)

こちらも従来のRLUを踏襲しつつGUIのIDEで開発は容易になっていると思います。

私個人ではSDAについて問合せが割と多く、何社かのご担当者に説明、デモ等実施した範囲では、スクリーンデザイナーは使えそうだね（SDAの代替として実用になりそうだね）、という評価が多いように思います。
10分でできる！RunCat で好きなランナーを走らせる方法 

# 必要なもの
- [RunCat アプリ](https://kyome.io/runcat/)
- 費用150円(2025年04月30日時点)
- 走らせたいアニメーションのgif

# 手順
1. webサイトで走らせたいアニメーションのgifを探してダウンロードする
今回は以下のサイトでダウンロードしました
https://slackmojis.com/#google_vignette 
2. ダウンロードしたgifを以下のサイトで高さ`36px`にリサイズする
https://www.iloveimg.com/ja/resize-image/resize-gif#resize-options,pixels

3. リサイズしたgifを以下のサイトでPNGに変換する
https://convertio.co/ja/gif-png/

4. RunCatで自作ランナーの登録には150円の課金が必要なので、課金する
5. 3で作成したPNGファイルをRunCatアプリ内でアップロードして完成！

# おすすめのgif検索サイト
https://tenor.com/ja/search/-gifs
ChatGPTを使用したアプリ開発記【投稿時間を追加】

## 投稿に時間を追加する
不明箇所は、一行ずつ理解する。
```jsx
import React, { useState } from 'react';

function App() {
  const [text, setText] = useState('');
  const [posts, setPosts] = useState([]);

//イベントハンドラ関数といい、フォームが送信されたときに呼ばれる関数で、
//(e)は「イベントオブジェクト」といって、「ボタン押したよ！」という情報。
  const handleSubmit = (e) => {
  
//ブラウザの「フォーム送信したらページをリロードする」という標準動作を止める命令です。
//これをしないと、投稿のたびにページがリロードされる。
    e.preventDefault();
    
//入力が空っぽなら、何もしないで終わるようにしています。
//スペースだけの投稿を防ぐために、trim()で空白を除去しています。
    if (text.trim() === '') return;

    const now = new Date();
    const formattedTime = now.toLocaleString('ja-JP', {
      year: 'numeric',
      month: '2-digit',
      day: '2-digit',
      hour: '2-digit',
      minute: '2-digit'
    });
    
//新しい投稿データを作っています。
//入力テキストと投稿時間を1つのオブジェクトにまとめた形です。
    const newPost = {
      text: text,
      time: formattedTime
    };

    setPosts([newPost, ...posts])
    
//投稿したら、フォームの中身を空っぽにリセットしています。
    setText('');
  };

//ここから「画面に表示する内容」を書く。
  return (
    <div style={{ padding: '2rem', fontFamily: 'sans-serif' }}>
      <h1>SNS</h1>
      
<!//投稿用のフォーム開始。
//onSubmitで、フォームを送信したときにhandleSubmit関数を呼び出します。
      <form onSubmit={handleSubmit}>
        <textarea
          value={text}
          onChange={(e) => setText(e.target.value)}
          placeholder="今なにしてる?"
          rows="4"
          cols="50"
          style={{ display: 'block', width: '100%', marginBottom: '1rem' }}
        />
        <button type="submit">投稿する</button>
      </form>

      <div style={{ marginTop: '2rem' }}>
        <h2>投稿一覧</h2>
        {posts.map((post, index) => (
          <div key={index} style={{ padding: '1rem', borderBottom: '1px solid #ccc' }}>
            <div style={{ fontSize: '0.8rem', color: '#666' }}>{post.time}</div>
            <div>{post.text}</div>
          </div>
        ))}
      </div>
    </div >
  );
}

//このAppコンポーネントを他の場所でも使えるように「エクスポート」しています。
export default App;

```

![スクリーンショット 2025-04-29 12.30.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1058366/e8412034-0f2d-4836-972f-f4104920f4af.png)
PygameとPygame-ce何が違うのか？

## これだけ見れば十分、この記事は何が言いたいのか

* 現在Pygameコミュニティは分裂していて[Pygame](https://www.pygame.org/)と[Pygame-ce](https://pyga.me/)に別れているよ
* その顛末が[ここ](https://www.deusinmachina.net/p/what-is-happening-in-the-pygame-community)にまとまっているよ(※ほとんどPygame-ce側の主張)
* Pygame側はノーコメントを貫いていてPygame側の人がPygame-ceについて触れたのは今のところ[これ](https://github.com/pygame/pygame/issues/4146)だけだったよ

## 概要

Python界隈で有名なゲームライブラリとして[Pygame](https://www.pygame.org/)がありますが、[とあるきっかけ](https://docs.pyscript.net/2025.3.1/user-guide/pygame-ce/)で[Pygame-ce](https://pyga.me/)というライブラリの存在を最近知りまして、一体これは何なのか調べてみることにしました。

## 簡易版？無料版？

CEがつくのを見ると、自分は簡易版だったり商用版に対する無料版だったりをイメージしますが、どうやらそういうことではないようです。

そもそもPygameは無料ですし。

個人的には実感できていないのでなんともなんですが、pygame-ceのほうが機能が豊富であるとされているようです。

## コミュニティ分裂

Google検索で調べても日本語情報は全く見当たらず、英語情報でも主に掲示板サイトの質問に対して答えるような形の情報しかありませんでした。

その情報を垣間見る感じどうやらpygameの運営に疑問を感じたコア開発者達が我慢の限界に達した末フォークされたのがPygame-ceのようです。これはPygame-ce側の主張であることに留意する必要がありますが、pygame側は基本的にこの分裂に対して何の声明も出していないようでpygame側の言い分が調べても全然見たありません。

https://www.deusinmachina.net/p/what-is-happening-in-the-pygame-community

この顛末が記事としてまとまっていたのでこれを見るのが手っ取り早いと思います、英語ですので翻訳してご覧ください。繰り返しですが、記事の冒頭にもあるようにこれはPygame-ce側の主張であることに留意する必要があります。

## Pygame側の発言

せっかくなのでPygame側が何か言ってないか深堀りしようかと思いまして、Pygameのgithubのissueを検索したところ、一つだけPygameの開発メンバーがPygame-ceについて触れていましたのでリンクだけ張っておきます。

https://github.com/pygame/pygame/issues/4146

これが事実かどうかは知りませんのでこれ以上は何も言わないでおこうかと思います。

## 感想

分裂は決定的で再統合は絶望的ですねこれ…
iOSシミュレーターのスローアニメーション機能に気づいた話

## はじめに
この記事は、自分自身が遭遇したiOSシミュレーター上での謎のスロー現象について、
原因と解決までの流れを備忘録としてまとめたものです。

同じような症状で悩んでいる人の参考にもなれば嬉しいです。

## 「あれ？キーボード表示がやたら遅い…？」
iOSシミュレーターでFlutterアプリを動かしていたときのことです。
普通にTextFieldをタップしてキーボードを出そうとしただけなのに、
やたらとキーボードがスローモーションのように、のろのろと出てくるのを発見しました。

「なんだこれ？アニメーションバグった？Flutterのせい？」
最初はそう思いました。

しかし、アプリをリビルドしても、Macを再起動しても直らない…。

## 「調べてみたら、Slow Animationsという機能が？」
もしかしてシミュレーター自体の問題なのか？と思って調べてみると、
どうやらiOSシミュレーターには**Slow Animations**という機能が存在していることがわかりました。

これは、アニメーションの動きをすべて通常よりもゆっくり再生するための開発支援機能です。
## 「原因はこれだった！」
試しにシミュレーターのメニューバーから
Debug → Slow Animations を確認してみると、
Slow AnimationsがONになっていました。

これをOFFにしたところ、
キーボードの表示アニメーションが、通常スピードに戻りました。

## まとめ
シミュレーターでアニメーションが異様に遅いときは、まずSlow Animationsを疑う。

このような機能があることを知らず、今回は意図せずONになっていたようで、今後はすぐに気づくことができそうです。