OmniAICreator/Qiita-1.07M huggingface dataset:
ローカルExcel 取得→Excelリンク json書込 → jsonで複数リンク open 


<br>
<h4>いるもん</h4>

```ruby:qiita.rb
pip install pandas

なかったら、
pip install openpyxl
```

<br>
<h4>code</h4>

```ruby:qiita.rb
import pandas as pd
import json
import webbrowser

# Excelファイルを読み込む
file_path = '求人.xlsx'  # Excelファイルは、プロジェクト直下におく


excel_data = pd.read_excel(file_path, sheet_name=None)  # シート名を指定するか、全てのシートを読み込む

# Excelの全シートを検索して、リンクを抽出
links = []
for sheet_name, sheet_data in excel_data.items():
    # データの各セルを調べ、リンクを探す
    for row in sheet_data.itertuples(index=False):
        for cell in row:
            if isinstance(cell, str) and cell.startswith("http"):  # リンクを検出
                links.append(cell)

# リンクをJSON形式で保存
json_file_path = 'url.json'
with open(json_file_path, 'w', encoding='utf-8') as json_file:
    json.dump(links, json_file, ensure_ascii=False, indent=4)

# JSONからリンクを読み込んで自動で開く
with open(json_file_path, 'r', encoding='utf-8') as json_file:
    saved_links = json.load(json_file)

# リンクを開く
for link in saved_links:
    webbrowser.open(link)
```

<br>
<h4>プロジェクト直下に置かないと出るエラー</h4>

![スクリーンショット 2025-03-04 18.45.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628823/1ad7a9c4-98fa-4ec9-a6e9-9e04c02211d0.png)


<br>

```ruby:hoge
プロジェクト直下に置かないやり方
file_path = '/Users/chomechomesuke/DeskTop/求人.xlsx'
```
GEN3C: 3D-Informed World-Consistent Video Generation with Precise Camera Control を要約

以下のNVIDIAの新しい論文は動画生成において重要な進歩となる可能性ががあるので要約しました。

https://research.nvidia.com/labs/toronto-ai/GEN3C/

---
章ごとの要約: GEN3C: 3D-Informed World-Consistent Video Generation with Precise Camera Control


---

1. Introduction（序論）

従来の動画生成技術では、カメラの制御や3Dの一貫性を確保することが難しかった。これに対し、GEN3C は 3Dキャッシュ を活用することで、正確なカメラ制御と時間的一貫性のある動画生成を実現する。3Dキャッシュは、シード画像や過去のフレームの深度情報から得られたポイントクラウドを使用し、次のフレームを生成する際に2Dレンダリングとして活用される。このアプローチにより、カメラの視点変更に強い一貫性を持つ映像生成が可能となる。


---

2. Related Work（関連研究）

本研究は、以下の分野に関連している：

新規視点合成（Novel View Synthesis, NVS）: 既存の手法では、密な画像セットが必要で、視点を極端に変えるとアーティファクトが発生しやすい。

カメラ制御可能な動画生成: 既存の手法では、カメラパラメータをニューラルネットワークに入力するだけであり、正確な制御が困難だった。

一貫した動画生成: 一部の研究では3Dポイントクラウドを用いたが、これらは構造が限定的で、全体の一貫性を維持するのが難しかった。



---

3. Background: Video Diffusion Models（背景：動画拡散モデル）

本研究で利用する拡散モデル（Diffusion Model）の基本原理を説明。

動画拡散モデルは、ノイズのあるデータから本来のデータを復元することで学習される。

低次元の潜在空間に圧縮し、そこで推論を行うことで、計算コストを削減しながら高精度の動画生成を実現する。

本研究では Stable Video Diffusion をベースとして利用。



---

4. Method: 3D-Informed Video Generation（手法：3D情報を活用した動画生成）

GEN3C の仕組みを解説。

4.1. Building a Spatiotemporal 3D Cache（空間時間3Dキャッシュの構築）

画像または動画の深度を推定し、3Dポイントクラウドとしてキャッシュを構築。

これにより、カメラの視点が変わっても整合性を維持できる。


4.2. Rendering the 3D Cache（3Dキャッシュのレンダリング）

3Dポイントクラウドを、ユーザーが指定した新しいカメラ軌道に従って2Dレンダリング。

欠損領域はマスク情報として保持し、後の処理で補完。


4.3. Fusing and Injecting the 3D Cache（3Dキャッシュの統合と適用）

レンダリングされた画像を拡散モデルに統合する方法を設計。

各視点の情報を最大プーリング（Max-Pooling）で統合し、一貫性を確保。


4.4. Model Training（モデル学習）

3Dキャッシュを使ったレンダリング結果と実際の動画データをペアとして学習。

生成モデルを微調整し、3D一貫性を維持した動画を生成できるようにする。


4.5. Model Inference（推論手法）

生成時はランダムなノイズから拡散モデルを適用し、最終的な動画を生成。

オートレグレッシブ生成 を採用し、長時間の動画も一貫性を持たせられる。



---

5. Experiments and Applications（実験と応用）

5.1. Training Details（学習の詳細）

現実世界と合成データセットを活用し、異なるシーンや動的な環境への適応力を向上。


5.2. Single View to Video Generation（単一画像から動画生成）

1枚の画像から3Dキャッシュを構築し、動画を生成するタスク。

GEN3Cは、従来の手法よりも視点移動に対して一貫性のある動画を生成可能。


5.3. Two-Views Novel View Synthesis（2視点の新規視点合成）

2つの視点間で自然なカメラ移動を実現。

他の手法よりもスムーズな映像を生成。


5.4. Novel View Synthesis for Driving Simulation（運転シミュレーション向け視点変換）

ドライブシーンの映像から、異なる視点での映像を再構成。

従来の復元ベースの手法よりも、高品質な視点変換を実現。


5.5. Monocular Dynamic Novel View Synthesis（単眼動的映像の視点変換）

単眼動画から、新しい視点での動画を生成。

3Dキャッシュを活用し、カメラの移動とともに一貫性を保つ。


5.6. Ablation Study（アブレーション研究）

さまざまな設計選択を比較し、GEN3Cの最適なアーキテクチャを検証。


5.7. Extending to Advanced Video Diffusion Model（拡張：高度な拡散モデルへの適用）

Cosmos などの最新の動画生成モデルにも適用可能であり、より高品質な映像を生成可能。



---

6. Conclusion（結論）

GEN3C は、3Dキャッシュを活用することで、従来の手法よりも正確なカメラ制御と一貫性のある動画生成を実現した。
また、運転シミュレーションや映画制作など、様々な応用が可能である。

Limitations（制限）

動的なオブジェクトの生成には、事前に生成された動画が必要。

将来的には、テキストプロンプトによるモーション指定を組み込むことで、より柔軟な動画生成を目指す。



---

7. Appendices（補足情報）

7.1. Auto-regressive generation（オートレグレッシブ生成）

長時間動画の一貫性を保つため、生成されたフレームを逐次3Dキャッシュに追加。


7.2. Experimental Details（実験の詳細）

最適化手法やハイパーパラメータの設定、データセットの選定基準などを説明。


7.3. Additional Results（追加結果）

マスク情報の活用方法 など、詳細な比較実験を実施。



---

まとめ

GEN3C は、3D情報を活用した動画生成モデルであり、従来の手法に比べて正確なカメラ制御と高い一貫性を実現する。
特に、運転シミュレーションや単眼映像の視点変換 など、応用範囲が広く、高度な映像制作にも活用できる可能性がある。
Proxmoxのメモリバルーニングが適用されない理由の覚え書き

# TL;DR
**PCIeパススルー/VFIOを使用中のVMはメモリバルーニングが行われない**

https://pve.proxmox.com/wiki/Dynamic_Memory_Management#Ballooning

:::note warn
公式doc
https://pve.proxmox.com/wiki/Dynamic_Memory_Management#Ballooning

## 原文
```
Note that if you are passing through a physical PCI(e) device or a Virtual Function I/O (VFIO) Mediated device (MDEV) such as a vGPU, then ballooning will not work since these devices are mapped to fixed memory addresses in the host and in the guest. If you do enable ballooning, the KVM process will not release the memory back to the host but the guest may report a reduced memory availability which can be manually recovered using the KVM monitor using the balloon command.
```
## 意訳
```
PCIeとかvGPUみたいなVFIOデバイスをパススルー中は、ホストとゲストの固定メモリに対してマッピングされるからバルーニングは機能しないよ。
バルーニングを有効にしても問題ないけど、ゲストで可用性の低下レポートが出るかもね。
```
:::

## メモ
Nextcloud用のVMに対して、48GBくらいメモリを割り当てていた。
今まではバルーニングのおかげで、ゲストで使用しているメモリの分だけホスト側のメモリが消費されるような挙動だった。

ところが、JellyfinでHWAを使うためにGPUをVMに渡したところ、ゲストに設定したメモリ分をホスト側も固定で消費しているような挙動になったので調査した。
IAM Identity Center許可セットのカスタマー管理ポリシーを利用してみる

# はじめに
本記事は[こちら](https://qiita.com/Gravitas/items/9858863738333d4760a9)の関連ブログです。
IAM Identity Centerや許可セットについて、ご存じでない方は以下の記事を参考にしてください。

https://qiita.com/Gravitas/items/9858863738333d4760a9

# 許可セットに含まれるカスタマー管理ポリシーとは

IAM Identity Center（以下、IIC）の許可セットに適用できるIAMポリシーには、AWSマネージドポリシー、インラインポリシーに加えて、**カスタマー管理ポリシー**が存在します。

カスタマー管理ポリシーを利用すると、複数の許可セットを管理する際にIAMポリシーの組み合わせで権限管理が可能になります。
そのため、**複雑な権限管理を行いたい場合**には、インラインポリシーと比較して優れた選択肢となります。

ただし、カスタマー管理ポリシーはAWSマネージドポリシーのように事前定義されていないため、あらかじめ許可セットの割り当て先アカウントでIAMポリシーを作成しておく必要があります。

IAMポリシーを作成する方法としては各アカウントで作成する方法もありますが、CloudFormation StackSetsを活用して一括デプロイする方が運用上の利便性が高いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3123043/c4060735-8128-4aff-94c1-f18607641d2b.png)


## 実際に試してみる

IAMポリシーをCloudFormation StackSetsを使用して事前に作成する方法で、カスタマー管理ポリシーを作成していきます。

こちらのCloudFormation StackSetsテンプレートを利用して、割り当て先アカウントへIAMポリシーの作成します。
```yml
AWSTemplateFormatVersion: "2010-09-09"
Resources:
  S3BucketCreationManagedPolicy:
    Type: "AWS::IAM::ManagedPolicy"
    Properties:
      ManagedPolicyName: "S3BucketCreationPolicy"
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: "Allow"
            Action:
              - "s3:CreateBucket"
            Resource: "*"
```
許可セット割り当て前に、上記テンプレートを使用してCloudFormation StackSetsを実行し、割り当て先アカウントへIAMポリシーを作成します。

次に、管理アカウントのIIC許可セット画面で、許可セットにアタッチするIAMポリシーを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3123043/3d67cb51-4cdd-40f6-95f5-e445afca32f2.png)

今回はこちらを選択します
- AWSマネージドポリシー：ReadOnlyAccess
- カスタマー管理ポリシー：S3BucketCreationPolicy

**注意点**
- カスタマー管理ポリシーは選択式ではなく、ポリシー名を手入力する必要があります。
- ポリシー名を誤ると、許可セット割り当て時に以下のようなエラーが発生します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3123043/2576cbf3-de23-4123-a398-786253896492.png)

許可セット名を「PermissionSetTest」として、許可セットを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3123043/6e97ec6b-97a6-4661-8395-947c7ca12c53.png)


許可セットの作成後、IICのAWSアカウント画面から
対象のユーザ/グループと作成した許可セットを選択して、割り当てを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3123043/500475b2-fc50-4721-94a8-6b5f692e0d07.png)

割り当てが完了後、割り当て先アカウントへ移動し、IAMロールを確認します。
想定通り許可セットの割り当てによってIAMロールが作成されていることが確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3123043/6b1e6f99-3a62-4f64-b8ef-f9c70c53080b.png)

# まとめ
- 許可セットにはAWSマネージドポリシー、インラインポリシー、カスタマー管理ポリシーを適用できる
- カスタマー管理ポリシーを活用することで、複数の許可セットに対する権限管理を効率化できる場合がある
- カスタマー管理ポリシーは事前に許可セット割り当て先アカウントへデプロイしておく必要がある
Google ColabでJuliaが使えるようになった

2025年3月5日、ついにGoogle ColaboratoryでJuliaが正式にサポートされました。
https://x.com/MilesCranmer/status/1897413433542500486

ランタイムでJuliaを選ぶことで簡単にJuliaを試すことができます。
GPUも使うことができました。

ということで、私が作った[QuadraticHamiltonians.jl](https://github.com/cometscome/QuadraticHamiltonians.jl)でs波超伝導体の局所電子状態密度を計算してみました。128x128の二次元s波超伝導体の局所状態密度がほぼ一瞬で計算できます。
24x24の場合の自己無撞着計算もやってみています。

こちらがGoogle ColabでJuliaを使った例です。
[QuadraticHamiltonian.jlの例](https://colab.research.google.com/drive/1Mh2YhkhrT9dSSrWWRlS4vDMmDuxDjRrM?usp=sharing)
Mosquitto: 設定のサンプル

ブローカーの設定サンプルです。
Let'sEncrypt の証明書を使います。

ポート　1883 mqtt
ポート　8883 mqtts
ポート　8884 mqtts over WebSocket

## 設定ファイル

```text:/etc/mosquitto/conf.d/robot.conf
allow_anonymous true

listener 1883
protocol mqtt
listener 9001
protocol websockets

# SSL 設定
listener 8883
tls_version tlsv1.2
cafile /etc/ssl/certs/ISRG_Root_X1.pem
certfile /etc/letsencrypt/live/example.org/fullchain.pem
keyfile /etc/letsencrypt/live/example.org/privkey.pem
#
# SSL 設定 (wss 対応のため)
listener 8884
protocol websockets
tls_version tlsv1.2
cafile /etc/ssl/certs/ISRG_Root_X1.pem
certfile /etc/letsencrypt/live/example.org/fullchain.pem
keyfile /etc/letsencrypt/live/example.org/privkey.pem
#
# websockets_path /mqtt
#
```

## mosquitto のバージョン

```text
$ mosquitto -h
mosquitto version 2.0.18

mosquitto is an MQTT v5.0/v3.1.1/v3.1 broker.
```

## 証明書の確認

```bash
openssl s_client -connect example.com:8883 -showcerts
```

## mqtts の確認

サブスクライブ

```bash
BROKER="example.com"
mosquitto_sub -d -h $BROKER \
     -p 8883 --capath /etc/ssl/certs/ \
    --topic example/testTopic
```

パブリッシュ

```bash
BROKER="example.com"
message="Hello Mqtt "`date`
mosquitto_pub -d -m "${message}" \
        -h $BROKER -p 8883 \
        --cafile /etc/ssl/certs/ISRG_Root_X1.pem \
        --topic example/testTopic
```
勉強会の考察：「仕事で学んだこと」のアウトプット構成やTAVについて

<!-- 
# 勉強会テーマの考察：「仕事で学んだこと」のアウトプット構成やTAVについて
title: 勉強会テーマの考察：「仕事で学んだこと」のアウトプット構成やTAVについて
tags: ソフトスキル TAV 学びのフレームワーク LT会 チーム開発
author: shu_tana
-->

## 📌 テーマの意味や背景を自分なりに考えた動機：
- **モチベーションが湧かない**
- **資料作成のイメージが湧かない**

### 📌 結論1. 他メンバの経験を吸収できてお得だから：
```mermaid
flowchart LR
    classDef trouble fill:#FFE4C4,stroke:#E68A00,color:#333,stroke-width:2px
    classDef learn fill:#C4F2FF,stroke:#00A1B3,color:#333,stroke-width:2px
    classDef share fill:#F5DFFF,stroke:#AA63C5,color:#333,stroke-width:2px
    classDef apply fill:#C3FFCA,stroke:#3AA758,color:#333,stroke-width:2px

    A((苦労する<br>また苦労する<br>Trouble)):::trouble
    B((各メンバが学んだこと<br>Learn)):::learn
    C((勉強会で吸収<br>Share)):::share
    D((全メンバが活用する<br>Apply)):::apply

    A --> B
    B --> C
    C --> D
    D --> A
```

### 📌 結論2.社内に共有知(共有経験)が蓄積していくから：
```mermaid
flowchart TB
    classDef base fill:#FFF2DB,stroke:#DD8844,color:#333,stroke-width:2px
    classDef sub fill:#C4F2FF,stroke:#00A1B3,color:#333,stroke-width:2px
    classDef user fill:#DFFCD2,stroke:#69C77B,color:#333,stroke-width:2px

    A{{勉強会やLT会： <br> 各メンバの発表}}:::base
    B(メンバー1の<br>苦労・学び):::sub
    C(メンバー2の<br>苦労・学び):::sub
    D(メンバー3の<br>苦労・学び):::sub
    E((共有知/ナレッジ <br> 参加メンバが活用)):::user

    A --> B
    A --> C
    A --> D
    B --> E
    C --> E
    D --> E
```

## 📌 アウトプットにはどんな方法やパターンがある？

### **(A)：5つのW/Hパターン(10min)**

1. **What?（1min）**  
   - 何が起きたのか？（苦労の概要）

2. **Why?（2min）**  
   - なぜ問題が起きたか？ 原因や背景  

3. **How?（3min）**  
   - どうやって解決したか？  

4. **What did I learn?（2min）**  
   - 学び、得た知見  

5. **Next?（2min）**  
   - 次に同じことが起こったらどうする？ 今後どう活かす？  



### **(B)：起承転結のストーリーパターン(10min)**

1. **起（1min）**  
   - プロジェクトや業務の背景、状況説明  
   - 例: 「オンプレ環境からAzureへの移行案件に参画したんですが…」

2. **承（3min）**  
   - 苦労の具体例、どんな問題・ハプニングがあったか  
   - 例: 「ファイアウォール設定の移行で通信が遮断されるトラブルが…」

3. **転（3min）**  
   - 解決方法、どうリカバリしたか、意外な気づき  
   - 例: 「段階的に通信テストを実施して原因を特定。原因切り分け手法の...を学んだ」

4. **結（3min）**  
   - 学んだこと、今後の展望・活かし方  
   - 例: 「移行計画の段取りづくりを...のようにしたい」


### **(C)：4ステップでの振り返りパターン(10min)**

1. **Fact（事実確認：1min）**  
   - どんな業務状況だったか？（プロジェクト概要、担当範囲）

2. **Feeling（感情・状態：1min）**  
   - 苦労した時どう感じたか？（焦り、不安、相談したいができない等）

3. **Finding（発見：2min）**  
   - どんな行動をとり、何に気づいたか？（コミュニケーション不足だった、ログを取るべきだった等）

4. **Future（今後：6min）**  
   - 学びをどう活かす？ 具体的なアクションは？  
   - 例: 「同じ失敗を繰り返さないために...を...」/「...手順をチェックリスト化して見える化」


## 📌 **TAV（Take Away Value）とは？**

### **「TAV」= 学びを持ち帰るためのフレームワーク(型とか作法)のこと** 
- 「感想」ではなく、**「じゃあ、自分はどうする？」を考えること**  
- LT会や勉強会の振り返りで**学びを深めるための作法**  

### **📌 TAVの定義**
- **「この場から持ち帰る価値」**
- **「話を聞いて終わり」ではなく、「自分にとっての学びは何か？」を言語化する**
- **印象や気持ちではなく、次の行動につなげるヒント**
- **他人の経験から、自分に活かせる要素を見つける**

### TAVするための聞き方の図
```mermaid
graph TD;
    A[話を聞く前に意識すること] -->|「目的を持つ」| B(何かの学びがあるはず！<br> の前提をもつ);
    A -->|「質問の視点を持つ」| C(深掘りしてみたい部分はあるかな？);
    A -->|「他の視点を考える」| D(自分と違う考え方はあるかな？);
    A -->|「次の行動を意識する」| E(この話をどう活かせるかな？);
```

#### **📌 感想とTAVの違いは？**
|  | **感想** | **TAV** |
|----|----|----|
| **目的** | その場の印象や感情を伝える | 自分の成長や行動につなげる |
| **内容** | 「〇〇さんの話が良かった」 | 「〇〇さんの考え方を△△の場面で試してみたい」 |
| **活用** | 聞いた内容を振り返る | 自分にとっての価値を見出し、行動に結びつける |
| **例** | 「自己開示って勇気がいるんだなと感じた」 | 「次のLT会では、少し自分の経験を開示してみようと思った」 |

---
今回の考察はここまでにしたいと思います。
DAGにおけるドアの例えの注意点

# DAGにおけるドアの例えが連鎖経路、分岐経路、合流経路（合流点）で混乱したので、Deepseek先生に教えてもらった。

はい、その通りです！**ドアのアナロジー**は、**合流点（Collider）**に特有の現象を説明するためのものであり、**連鎖経路（Chain）**や**分岐経路（Fork）**では逆の現象が起こります。以下で、それぞれの経路における条件付けの影響を詳しく説明します。

---

### 1. **合流点（Collider）**
- **構造**: \(X \rightarrow C \leftarrow Y\)
- **ドアのアナロジー**:
  - 合流点\(C\)は「ドア」のようなもので、通常は閉じています（情報が流れない）。
  - \(C\)を条件付けると、ドアが開き、\(X\)と\(Y\)の間に情報が流れます（依存関係が生じる）。
- **例**:
  - \(X\): 勉強時間
  - \(Y\): 授業の出席率
  - \(C\): 試験の点数
  - \(C\)を条件付けると、\(X\)と\(Y\)の間に依存関係が生じます。

---

### 2. **連鎖経路（Chain）**
- **構造**: \(X \rightarrow C \rightarrow Y\)
- **ドアのアナロジー**:
  - 連鎖経路では、\(C\)は「ドア」ではなく「通路」のようなものです。
  - 通常、\(X\)と\(Y\)の間には情報が流れます（依存関係がある）。
  - \(C\)を条件付けると、通路がブロックされ、\(X\)と\(Y\)の間の情報が流れなくなります（独立になる）。
- **例**:
  - \(X\): 勉強時間
  - \(C\): 試験の点数
  - \(Y\): 就職の成功率
  - \(C\)を条件付けると、\(X\)と\(Y\)の間の依存関係がなくなります。

---

### 3. **分岐経路（Fork）**
- **構造**: \(X \leftarrow C \rightarrow Y\)
- **ドアのアナロジー**:
  - 分岐経路では、\(C\)は「ドア」ではなく「分岐点」のようなものです。
  - 通常、\(X\)と\(Y\)の間には情報が流れます（依存関係がある）。
  - \(C\)を条件付けると、分岐点がブロックされ、\(X\)と\(Y\)の間の情報が流れなくなります（独立になる）。
- **例**:
  - \(C\): 天候
  - \(X\): アイスクリームの売上
  - \(Y\): 日焼けの人数
  - \(C\)を条件付けると、\(X\)と\(Y\)の間の依存関係がなくなります。

---

### まとめ
| 経路タイプ   | 構造               | 条件付けの影響                     | ドアのアナロジー           |
|--------------|--------------------|------------------------------------|---------------------------|
| **合流点**   | \(X \rightarrow C \leftarrow Y\) | \(C\)を条件付けると依存関係が生じる | ドアが開く（情報が流れる） |
| **連鎖経路** | \(X \rightarrow C \rightarrow Y\) | \(C\)を条件付けると独立になる       | 通路がブロックされる       |
| **分岐経路** | \(X \leftarrow C \rightarrow Y\) | \(C\)を条件付けると独立になる       | 分岐点がブロックされる     |

---

### なぜ逆になるのか？
- **合流点**:
  - 合流点は、2つの変数からの影響を受ける「終点」です。条件付けによって、これらの変数間の情報が「開かれ」ます。
- **連鎖経路と分岐経路**:
  - これらの経路では、中間変数\(C\)が「媒介」または「共通原因」として機能します。条件付けによって、情報の流れが「ブロック」されます。

---

### 具体例で比較
#### 合流点
- \(X\): 勉強時間
- \(Y\): 授業の出席率
- \(C\): 試験の点数
- \(C\)を条件付けると、\(X\)と\(Y\)の間に依存関係が生じます。

#### 連鎖経路
- \(X\): 勉強時間
- \(C\): 試験の点数
- \(Y\): 就職の成功率
- \(C\)を条件付けると、\(X\)と\(Y\)の間の依存関係がなくなります。

#### 分岐経路
- \(C\): 天候
- \(X\): アイスクリームの売上
- \(Y\): 日焼けの人数
- \(C\)を条件付けると、\(X\)と\(Y\)の間の依存関係がなくなります。

---

このように、**ドアのアナロジー**は合流点に特有の現象を説明するためのものであり、連鎖経路や分岐経路では逆の現象が起こります。因果推論において、これらの違いを正しく理解することが重要です。
【悲報】他社サイトのお問い合わせフォームの送信先が私が所有するドメインに

**ウェブフォーム設置においては必ず送信テストを行い、送信と受信を正常に動作することを確認してから公開する**。

これが当たり前だと思っていましたが、とんでも事例が発生したので注意喚起も兼ねて記事にします。

## 全く関係ないメールを受信（2025/03/04）
実在するNTTドコモ社員（以後、Aさん）から「〇〇イベントについて取材をしたい。」という内容のメールが突然、所有しているドメイン名に対し届きました。この某イベント、**メールが届いて初めて存在を知ったイベント**です。

ドコモだけにドコに送っているんだ！？というネタツイートには座布団1枚くらい期待していましたが、どうやら逆に座布団全部持ってかれそうな反応で寂しかったです・・・

https://x.com/skillsharejp/status/1897109041765343392

さて余談はほどほどにして・・・

## ドコモ社員にメール（2025/03/05）
届いたメールに記載されていたAさんの名前を念の為検索し、ドコモ公式サイトやLinkedInといった関連サイトを参考にメールアドレスがNTTドコモ社員が使用するものであり、いたずらではないメールであると確認。

その後Aさんに誤って届いている旨。そしてお問い合わせ時に利用したサイトURLの情報提供をお願いしました。

流石NTTドコだけあって、Aさんからすぐに疑いのURLについて情報提供を受けました。この反応速度はありがたい。

ここからがお楽しみ？のお時間。テストメールの送信です。

## 問題のフォームからテストメールを送信・・・まさかの！！

えーと・・届いちゃいました。

まさかね～と思いましたが、しっかり受信しちゃいました・・・

**ウェブフォーム実装するのに、フォームの宛先が第三者なんてありえるの！？**

https://x.com/skillsharejp/status/1897132003268681765

こりゃイカンと思いサイト記載の運営会社に連絡を試みるも、公式サイト記載の電話番号が既に使われていませんでした。PR Timesのプレスリリースから電話番号を探りましたが、こんな時に限ってリリースに電話番号を載せていない！

一応同じロゴを使用する一般社団法人を見つけたので、そちらに個人情報漏洩という形で調査協力の依頼メールを送りましたがまだお返事はいただいていません。

解決まで何日かかるか分かりませんが、それまでは運営元に送ったつもりのメールが私に届き続けるでしょう・・・問い合わせの中身はじっくり拝見いたします。

## なぜ情報漏洩が発生してしまったのか？

今回の問題は下記のヒューマンエラーによるものと判断しています。

1. ウェブフォーム実装担当者が自社のメールアドレスを入力ミスした。
1. ウェブフォームの送受信テストを実施しなかった。

どちらか一つを確認できていれば、こうはなりませんでした。

**貴方が送信しようとしているそのフォーム、ちゃんと目的の窓口に届きますか？**
Oracle Autonomous Databaseを作ってみた

# はじめに
Oracle Autonomous Database (ADB) は、機械学習 (ML) と自動化技術を活用し、運用管理の負担を大幅に軽減したクラウドデータベースです。OCI (Oracle Cloud Infrastructure) 上で提供され、データ管理・分析に最適な環境を提供します。

## Oracle Autonomous Database (ADB) の特徴

### 1. 完全自動化
- **プロビジョニング、チューニング、スケーリング、セキュリティ、パッチ適用、バックアップ**がすべて自動化。
- 運用負担を大幅に削減。

### 2. 高いパフォーマンスとスケーラビリティ
- **Exadataインフラ**を活用した高速処理。
- **自動スケーリング** により、負荷に応じてリソースを増減し、コストを最適化。

### 3. 高いセキュリティ
- **デフォルトでデータ暗号化** され、セキュリティリスクを最小化。
- **脅威検知や自動パッチ適用** でサイバー攻撃にも対応。

### 4. ワークロードに応じた2つのタイプ
- **Autonomous Transaction Processing (ATP)**  
  - OLTP（オンライン・トランザクション処理）向け  
  - 例: Webアプリ、Eコマース、金融取引など
- **Autonomous Data Warehouse (ADW)**  
  - データ分析・BI向け  
  - 例: データウェアハウス、レポート作成、機械学習のデータ基盤など

### 5. マルチモデル対応
- **JSON, Spatial, Graph, IoT, Blockchain** など、多様なデータモデルを統合管理。

### 6. コスト最適化
- **従量課金モデル** により、使用した分だけコストが発生。
- **リソースの自動スケール** で無駄なコストを削減。

---
**Oracle ADB は、管理コストを削減しながら高性能なデータ管理を実現できるクラウドデータベースです。**

# ADBの作成
OCIコンソールにログインし、左上のハンバーガーメニュー→Oracle Database→Autonomous Databaseを選択
![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766517/bcd0947b-88b0-4e1d-8cd1-ce330b367fe6.png)

Autonomous Databaseの作成をクリック
![画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766517/39f7c256-b7c7-4455-9ab4-2a8f02f38a21.png)

表示名：ここではADB1と入力
データベース名：ここではADB1と入力
コンパートメント：任意のコンパートメントを選択
ワークロード名：ここではトランザクション処理を選択
![画像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766517/ef56d02a-f39d-45fc-8e96-844479a2a75b.png)

データベースのバージョン選択：ここでは最新の23aiを選択
ECPU数：ここでは2ECPU
自動スケーリングの計算：ON
ストレージ：ここでは20GB
ストレージの自動スケーリング：ON
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766517/009c4a0d-97a9-48a0-b984-3ac4a3320867.png)

自動バックアップの保持期間：ここでは7日間
不変バックアップ保持：OFF
パスワード：任意
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766517/3da615c8-a944-42da-9ece-873a4db1f664.png)

アクセスタイプ：すべての場所からのセキュア・アクセス
連絡先の電子メール：任意
![画像4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766517/39a09b15-6eb4-4448-a728-15835fe5dbe0.png)

必要項目の選択、入力が終わったので作成をクリック
![画像5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766517/7cc4aca7-13cc-43e7-93f4-c896a1558a41.png)

プロビジョニング中と表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766517/9400daf1-cc76-468b-bbac-78ac5bd5edc9.png)

1分ほど経過すると使用可能になる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766517/581a3155-6807-4cc6-a3f2-839c319b27f6.png)

これでADBの作成は完了です。完了すると登録したメールアドレス宛に以下のメールが届きます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766517/287b2c15-b47e-43c8-911e-9c3cf4299aa5.png)


# まとめ
たった数分で運用を自動化できるOracle Databaseを作成することが出来ました。
ADBにはSQLを実行できる画面や手元のデータをドラッグアンドドロップでロードする機能があらかじめ用意されているので、Databaseの作成だけでなく利用も簡単です。
OCIの無料環境でも作成することができるのでぜひお試しください。


# 参考
https://oracle-japan.github.io/ocitutorials/adb
AI音楽生成の未来がここに

# DiffRhythm: AI音楽生成の未来がここに

音楽の才能がなくても自分の曲を作りたいと思ったことはありませんか？あるいは、新しいインスピレーションを求めているミュージシャンですか？DiffRhythmという素晴らしい新しいAI技術が、音楽制作の常識を変えています！

## DiffRhythmの何がすごいの？

DiffRhythmは、わずか10秒で歌声と伴奏の両方を含む完全な曲を作れる初のAIシステムです！他のAI音楽ツールは短いクリップしか作れなかったり、複雑な設定が必要だったりしますが、DiffRhythmは最大5分近くの完全な曲を作ることができます。

一番すごいのは、曲が本当に良い音に聞こえることです！歌詞が聞き取れるほど歌声はクリアで、音楽はあなたが望むスタイルにマッチします。まるで、リクエストに応じて音楽を作ってくれるバーチャルバンドのようです！

## どうやって動くの？

あまり専門的にならないように説明すると、DiffRhythmは主に2つの部分で構成されています：

1. 音楽をコンパクトな形に変換する特別な圧縮機（VAEと呼ばれます）
2. このコンパクトな形から新しい音楽を作るスマートな生成器（DiTと呼ばれます）

あなたがするべきことは、歌詞を提供して、どんな音楽スタイルが欲しいかを伝えるだけ。あとはDiffRhythmがすべての難しい作業をやってくれます！

## 他のAI音楽ツールより優れている理由

DiffRhythmには他のAI音楽システムと比べて大きな利点があります：

- **超高速**：数分や数時間ではなく、数秒で曲を作成
- **とてもシンプル**：複雑な設定や音楽の知識は不要
- **完全な曲**：歌声と伴奏を一緒に作成
- **フルレングス**：最大4分45秒の曲を作成可能

## 自分で試してみよう！

DiffRhythmの魔法を体験してみたいですか？[https://diffrhythm.pro/](https://diffrhythm.pro/)で今すぐ試すことができます！このすごいプラットフォームでは、数回クリックするだけで自分だけのAI生成曲を作ることができます！

歌詞を書いて、スタイルを選んで、数秒で完成した曲を手に入れる...想像してみてください。学校のプロジェクトでも、SNSのコンテンツ作りでも、単に楽しむためでも、DiffRhythmは音楽的創造性の新しい世界を開きます。

## AI音楽の未来は？

DiffRhythmは既にすごいですが、開発者たちはさらに良くするために取り組んでいます。将来的には、次のような機能を追加したいと考えています：

- 曲の特定の部分を編集する機能
- 自然言語を使ったより詳細なスタイル制御
- さらに良い音質

## まとめ

DiffRhythmはAI音楽生成における大きな飛躍です。誰でも使えるほどシンプルでありながら、印象的な結果を生み出すほど強力です。音楽愛好家でも、コンテンツクリエイターでも、AIに興味があるだけでも、ぜひチェックする価値があります！

[https://diffrhythm.pro/](https://diffrhythm.pro/)にアクセスして、今日から自分だけのAI曲作りを始めましょう。次のバイラルヒットは、あなたの数回のクリックから生まれるかもしれませんよ！
CをN-Prologに埋め込む

# 異なるアプローチ
私は、N-PrologのパフォーマンスをSWI-Prologに近づける方法を考えてきました。考えられるアイデアとしては、型特化型の統一、決定的述語の識別、尾再帰の最適化などがあります。しかし、N-PrologとSWI-Prologの間には大きなパフォーマンスギャップがあり、それを埋めるのは簡単ではありません。

これを野球に例えるなら、SWI-Prologは速球を投げるピッチャーで、N-Prologはそのスピードに対抗できません。そこで、速球に頼るのではなく、カーブボールを投げることにしました。そのアイデアは、Cの埋め込み機能を導入し、決定的な計算をCを使用して高速に実行できるようにすることです。

# アッカーマン関数
以下のコードは、アッカーマン関数の計算例です：

アッカーマン関数は本質的に計算負荷が高く、大量の再帰呼び出しを必要とします。明らかに、Prologはこのような計算には向いていません—バックトラッキング情報を保存する必要があるため、すぐにスタックオーバーフローが発生します。

しかし、アッカーマン関数は決定的な計算であり、バックトラッキングを必要としません。Prologでは、決定性を強制して効率を改善するためにカットを戦略的に配置することができます。しかし、カットの過剰な使用はPrologコードを乱雑にし、命題論理のエレガンスを損ないます。

では、Cで単純な再帰関数として書いてみてはどうでしょうか？このアプローチでは、ack(4,1)のような計算でも瞬時に実行できます。
![bandicam 2025-03-06 11-56-06-940.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33927/f9c8a59d-db31-4339-b56d-0fcbef64a0b0.jpeg)


# コンパイルメカニズム
N-PrologはすでにPrologコードをCに変換し、それを動的にコンパイルしてリンクします。これにより、Prologコード内にCを埋め込むのが非常に簡単になります。コンパイラのAPIはCOMPILER.mdに記載されており、このAPIを活用することで、Cでリスト処理を自由に実行できます。
![bandicam 2025-03-06 11-56-19-289.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33927/b25b6f3a-50cb-436a-ad04-7c2886977ba5.jpeg)


Prologで表現するのが難しい操作や、高いパフォーマンスを要求する操作は、Cで実装することができます。

# 速球ではなくカーブボール
このC埋め込み機能により、N-Prologは新しいアプローチを導入しましたが、これは単なるカーブボールです。バッターを混乱させるかもしれませんが、SWI-Prologのような速球ピッチャーのスピードには到底及びません。

では、SWI-Prologはどのようにしてその驚異的なスピードを実現しているのでしょうか？どうやら、Just-In-Time（JIT）コンパイルを適用しているようです。今後はさらに最適化のアイデアを探り、N-Prologのパフォーマンスをさらに向上させていきたいと思います。

https://github.com/sasagawa888/nprolog

# 追記
現在、この仕組みを使ってTensorflowとの接続、tcltk　openglとの接続を検討中です。
【Linux】ゼロからはじめるLinuxでVirtualBoxを使用しているとAppacheのテストページが開けない

# はじめに

こんにちは。アメリカで独学でエンジニアを目指している者です。現在、Linuxの勉強を進めており、「ゼロからはじめるLinux」という教材を利用して、Linuxを用いたサーバ構築に取り組んでいます。教材では、Apacheをインストールし各種設定を行った後、`/var/www/html/htmltest.html`を作成し、`http://VPSのIPアドレス/htmltest.html`にアクセスすることで作成したHTMLが表示されるはずでしたが、実際には表示されませんでした。この問題を解決するために、VirtualBoxのポートフォワーディング設定が必要でした。

## なぜ表示されなかったのか

Linux上でIPアドレスを確認するために`ip addr show`を実行すると、表示されたIPアドレスは以下の2種類に分かれていました。

- **ループバックアドレス (例: 127.0.0.5)**
  ループバックアドレスは、アクセスしているマシン自身を指します。つまり、VM内でこのアドレスにアクセスすればApacheにリクエストが届きますが、ホストPCのブラウザで `http://127.0.0.5` にアクセスすると、ホストPC自身の127.0.0.5にアクセスすることになり、VM上のApacheには接続できません。

- **VM内部で割り当てられたIPアドレス (例: 10.0.1.5)**
  こちらはVM（Rocky Linux 9）に内部で割り当てられたIPアドレスですが、一般的にNATモードの場合、ゲストOSのこのIPアドレスにはホストPCから直接アクセスすることはできません。NAT環境では、ゲストOSのIPアドレスが外部に公開されず、直接の通信がブロックされる仕組みになっているためです。

このため、`http://VPSのIPアドレス/htmltest.html`ではアクセスできなかったのです。

## 解決策

以下の手順で、VirtualBox上でポートフォワーディングの設定を行ってください。

1. VirtualBoxの設定を開く
2. 「ネットワーク」設定の詳細タブに進み、「ポートフォワーディング」を選択する
3. 以下のように設定する

| 名前   | プロトコル | ホストIP | ホストポート | ゲストIP | ゲストポート |
| ---- | ----- | ----- | ------ | ----- | ------ |
| HTTP | TCP   |       | 8080   |       | 80     |

設定後、ブラウザで `http://localhost:8080/htmltest.html` にアクセスすれば、作成したHTMLが表示されるはずです。

# まとめ

今回は、「ゼロからはじめるLinux」でVirtualBoxを使用している際に、Apacheのテストページが表示されない原因とその対処法について説明しました。独学で学習を進めていると、このような問題で行き詰まることもありますが、少しでもお役に立てれば幸いです。これからも一緒に頑張って勉強を続けましょう！
【Chakra UI】ChakraProviderのエラー

## 事象
Chakra UIを使う際に最初でいきなりつまづいた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4024281/33fdc2be-799d-48d8-8180-a5add398b979.png)

## 解決策①
以下記事を参考にChakraProviderコンポーネントにvalue属性を指定
https://qiita.com/nekihcom/items/de24d25482918129be97


### 修正前
```typescript:App.tsx
import React from "react";
import { ChakraProvider, Box, Heading } from "@chakra-ui/react";

function App() {
  return (
    <ChakraProvider>
      <Box p={5}>
        <Heading>トカゲ餌やり管理アプリ</Heading>
      </Box>
    </ChakraProvider>
  );
}

export default App;
```

### 修正後
```typescript:App.tsx
import React from "react";
import { ChakraProvider, Box, Heading, defaultSystem } from "@chakra-ui/react";

function App() {
  return (
    <ChakraProvider value={defaultSystem}>
      <Box p={5}>
        <Heading>トカゲ餌やり管理アプリ</Heading>
      </Box>
    </ChakraProvider>
  );
}

export default App;
```

## 疑問
記事のバージョンはChakra UI v2.10.4となっているが、
私が使用しているバージョンは「@chakra-ui/react@3.9.0」

v3ではそもそもChakraProviderは使われなくなっている？
https://qiita.com/masa_code/items/2fb0c4a63f42f0916e61

公式ドキュメント
https://www.chakra-ui.com/docs/get-started/migration

## 参考
【Chakra UI】ChakraProviderを使用したときにvalueやchildrenに関するエラーが出るとき
https://qiita.com/nekihcom/items/de24d25482918129be97

ChakraUIのv3による変更点
https://qiita.com/masa_code/items/2fb0c4a63f42f0916e61

公式ドキュメント
https://www.chakra-ui.com/docs/get-started/migration
PDF の Word コピーを別途保存する必要はありません！

[PDF を Word](https://www.pdfreaderpro.com/online-tools/pdf-to-word?utm_source=qiita_pdfconversion_20250306&utm_medium=referral) に変換すると、レイアウトが崩れてしまうことはありませんか？テキストのずれ、表の破損、フォントの欠落——これらの問題により、変換後のファイルを編集するのが面倒で時間がかかることがあります。

これは、PDF は固定レイアウト、Word は流動レイアウト という違いがあるため、変換時にレイアウトのズレが発生するのです。
## なぜ PDF から Word への変換でレイアウトが崩れるのか？
**PDF の固定フォーマット vs. Word の流動レイアウト**
- PDF は 固定レイアウト 形式で、テキスト・画像・表の位置が厳密に決められています。
- Word は 流動レイアウト 形式で、テキストやオブジェクトがページサイズや編集操作によって自動調整されます。

**フォントの置換問題**
- PDF 内で使用されているフォントが Word に存在しない場合、システムが別のフォントに置き換えてしまい、文字間隔や配置が乱れることがあります。

**複雑な表の構造**
- PDF 内の表は画像として埋め込まれている場合があり、または手動でスペースを調整していることが多く、正しく再構築するのが難しい場合があります。

**複数列レイアウトの変換の難しさ**
- 複数の列がある PDF は、変換ツールによって 行単位 で読み取られ、テキストが混ざったり順番が入れ替わったりすることがあります。

**埋め込み要素（画像・注釈・透かし）**
- PDF の注釈や透かしなどの要素が、Word へ適切に変換されず、位置がずれたり消失したりすることがあります。

## ComPDFKit Conversion SDK はこれらの問題をどのように解決するのか？

新しい ComPDFKit [PDF Conversion SDK](https://www.compdf.com/conversion/office-files?utm_source=qiita_pdfconversion_20250306&utm_medium=referral) は、大幅なアップグレードを遂げ、高度な解析アルゴリズムと AI 駆動のドキュメント分析技術 を組み合わせることで、PDF から Word への変換問題を解決します。

✅ 高精度の変換 – AI 技術を活用し、モデル学習によって変換時の課題を克服し、文書のフォーマットを正確に復元。
✅ インテリジェントなフォント認識 – 変換時に元のフォント情報を保持し、変換後も元のフォントでテキストを表示。デバイスのフォントに依存せず、類似フォントによる表示崩れを防止。
✅ 正確な表・レイアウト認識 – AI モデルを用いた学習により、非標準の表を正しく識別・復元し、PDF 内の表を高精度に再現。

✅ AI レイアウト分析 – 正確なレイアウト分析により、ドキュメントの構造を理解し、PDF 文書のレイアウトを維持したまま変換。
✅ 最適化されたコンテンツフロー調整 – 一般的な PDF 変換技術では、テキストが行ごとに分割されてしまうことが多いですが、当社のモデルでは段落分割のロジックを最適化。複数列のレイアウトも正しく識別・再現し、テキストのずれを防止。
✅ 埋め込み要素のシームレス処理 – 注釈、画像、透かしを正確に変換し、ドキュメントの完全性を維持。

ComPDFKit Conversion SDK を使えば、PDF から Word への変換がより高速・高精度・ストレスフリーに！
Pythonのプロパティについて

## 1. そもそもプロパティとは？
**プロパティ**とは、「**関数を、変数のように読み書きできる仕組み**」です。

| 通常の関数呼び出し | プロパティを使うと |
|---|---|
| `john.get_age()` | `john.age` |
| `john.set_age(30)` | `john.age = 30` |

「関数を呼んでいる」ことを隠して、**変数のように見せる**のがプロパティの役割です。

---

## 2. property()を使う古い書き方
### 例）ageプロパティを作る
```python
class MyClass:
    def __init__(self, name, age):
        self.name = name
        self._age = age  # 実データ

    def get_age(self):
        return self._age

    def set_age(self, value):
        self._age = value

    age = property(get_age, set_age)  # ここでまとめる
```

- `age = property(get_age, set_age)`がポイント
- `john.age`で`get_age()`が呼ばれる
- `john.age = 30`で`set_age()`が呼ばれる

---

## 3. @propertyを使う今風の書き方
### 例）ageプロパティを作る
```python
class MyClass:
    def __init__(self, name, age):
        self.name = name
        self._age = age

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        self._age = value
```
- getterには`@property`をつける
- setterには`@age.setter`をつける
- `property()`でまとめる必要がなく、**すっきりシンプル**

---

## 4. 関数名がプロパティ名になる理由
### 重要ポイント
`@property`では、**関数名＝プロパティ名**になります。

| 関数名 | プロパティ名 | アクセス方法 |
|---|---|---|
| age | age | `john.age` |
| height | height | `john.height` |

- 関数名が`age`だから`john.age`になる
- 関数名が`height`なら`john.height`になる

### つまり
**「プロパティ名＝関数名」になるのが@propertyのルール**です。

---

## 5. 無限ループが起きる原因
### NG例）無限ループパターン
```python
class MyClass:
    def __init__(self, name, age):
        self.name = name
        self._age = age

    @property
    def age(self):
        return self.age  # ここが間違い！

    @age.setter
    def age(self, value):
        self.age = value  # ここも間違い！
```

| 処理 | 説明 |
|---|---|
| `john.age` | getterが呼ばれる |
| getterの中で`self.age`を見る | またgetterが呼ばれる |
| また`self.age`を見る | 無限ループ！ |

### setterでも同じことが起きる
```python
@age.setter
def age(self, value):
    self.age = value  # setterを再帰的に呼んでしまう
```

---

## 6. 無限ループを防ぐ方法
**プロパティではなく、直接本体（_age）を操作する**のが正解です。

```python
class MyClass:
    def __init__(self, name, age):
        self.name = name
        self._age = age  # 実データ

    @property
    def age(self):
        return self._age  # ←ここ重要！

    @age.setter
    def age(self, value):
        self._age = value  # ←ここも重要！
```

| アクセス対象 | 説明 |
|---|---|
| `self.age` | getter/setterが呼ばれる |
| `self._age` | ただのデータ（安全） |

### イメージまとめ
```
john.age = 30  # setterが呼ばれる
↓
self._age = 30  # 本体に直接アクセス
↓
john.age  # getterが呼ばれる
↓
return self._age  # 本体を返す
```
**プロパティを自分で呼ばないから無限ループを回避！**

---

## 7. まとめ
| やりたいこと | 正しい書き方 | NGパターン |
|---|---|---|
| getter | `return self._age` | `return self.age` |
| setter | `self._age = value` | `self.age = value` |

| 書き方 | 説明 |
|---|---|
| `property()` | getter・setterをまとめる古い方法 |
| `@property` | 今風のスマートな書き方 |

### まとめの一言
> **getter・setterの中では、プロパティではなく直接データ（self._age）を触る**  
> これが無限ループを防ぐ鉄則です！
レスポンシブ対応 GSAP パララックス

CSSに記述を加えるだけで簡単にレスポンシブ対応できるパララックスのメモ

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="LEYygmo" data-pen-title="パララックス" data-user="yumyum-02" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/yumyum-02/pen/LEYygmo">
  パララックス</a> by yumyum-02 (<a href="https://codepen.io/yumyum-02">@yumyum-02</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://public.codepenassets.com/embed/index.js"></script>

```css
@media (max-width: 767px) {
  .js-parallax {
    --parallax-y: -50;
  }
}
```
これにより767px以下でパララックスで動く程度を指定しています。

参考
https://hakoirioyaji.com/blog/gsap-scrolltrigger-parallax/
Pythonのスコープについて


# Pythonのスコープについてメモ

Pythonを学んでいると必ず出てくる「**スコープ**」という言葉。  
これは「**変数がどこから見えて、どこで使えるか**」を示すルールのことです。

特に**関数内と関数外で同じ変数を使うとき**や、**関数の中に関数があるとき**にはスコープを理解していないと混乱しやすいです。

今回は、Pythonのスコープを**基本から応用まで**まとめて解説します。

---

## Pythonのスコープ「LEGBルール」とは？
Pythonには、次の4つのスコープがあります。

| スコープ名 | 説明 | 具体例 |
|---|---|---|
| **L**ocal | 関数内で作られた変数 | 関数の中のx |
| **E**nclosing | 外側の関数（ネスト時） | 関数の中に関数がある場合の外側のx |
| **G**lobal | 関数の外（モジュール全体） | ファイルの最初に作ったx |
| **B**uiltin | Pythonが元から持っているもの | print(), len()など |

---

## 具体例で理解するスコープ

### Localスコープ
関数の中で作った変数は、その関数の外からは見えません。

```python
def my_func():
    x = 100

my_func()
print(x)  # NameError: name 'x' is not defined
```

---

### Enclosingスコープ（関数をネストした場合）
関数の中に関数を作ると、**外側関数の変数**を内側関数から使うことができます。

```python
def outer():
    x = "外側"

    def inner():
        print(x)  # 外側のxが見える
    inner()

outer()
```

---

### Globalスコープ
関数の外で作った変数は、**関数内でも読み取ることはできます**。

```python
x = 10

def my_func():
    print(x)  # グローバルのxが見える

my_func()
```

---

### Builtinスコープ
Pythonが最初から持っている`print()`や`len()`などの関数は、どこからでも使えます。

```python
print(len("hello"))  # 5
```

---

## globalとnonlocalの使い方
### 関数内からグローバル変数を書き換えるには？
`global`を使います。

```python
x = 10

def update_global():
    global x
    x = 100

update_global()
print(x)  # 100
```

---

### ネスト関数で外側関数の変数を書き換えるには？
`nonlocal`を使います。

```python
def outer():
    x = 10

    def inner():
        nonlocal x
        x = 100

    inner()
    print(x)  # 100

outer()
```

---

## スコープまとめ表
| やりたいこと | 必要な宣言 | スコープ |
|---|---|---|
| 関数内でローカル変数を使う | なし | Local |
| 内側関数から外側関数の変数を更新 | `nonlocal` | Enclosing |
| 関数内からグローバル変数を更新 | `global` | Global |
| 関数内でグローバル変数を読むだけ | なし | Builtin |

---

## まとめ
- **関数の中で作った変数は「Localスコープ」** で、外から見えない
- **関数の外で作った変数は「Globalスコープ」** で、関数の中からも読める
- **ネスト関数なら「Enclosingスコープ」が使える**
- **globalでグローバルを書き換え**
- **nonlocalで外側のローカルを書き換え**

---
ALB for VPCでbackup poolを設定する

# はじめに
ALB for VPCでbackup poolの機能を使えるようになりました。

通常使用するpool内のサーバーが全て使えなくなった時にbackup poolに転送します。

下記の手順15に記載された内容となります。
https://cloud.ibm.com/docs/vpc?topic=vpc-load-balancers&interface=ui
> Optionally, you can create a backup for any of your existing pools. This allows the backup pool to manage traffic in the case of a member failure. To do so, you will need to create a failsafe policy:

sorryサーバーへの振り分けに使えそうな機能なので、下記の構成で試しました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/e03d95af-50cc-4587-8868-20dd4dcab7f0.png)


設定方法は下記の通りです。

# ALBにBack-end poolを2つ作成

通常利用するpoolと、sorryを配置するpoolを作成します。通常利用するpoolにはいつも通りfront-end listenerを作成します。
これもいつもと同様に、それぞれのpoolのメンバーとしてVSIを登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/86cb1f58-a52f-41ea-9b67-3cd91cc5ee3e.png)

pool1に登録したサーバー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/718283c3-9232-4564-9dee-8b73475e4208.png)

pool-sorryに登録したサーバー
front-end listenerを設定していないので、ヘルスチェックも動いていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/0f32924a-999d-4bcd-bb2a-212c65e1e0f2.png)

# pool1のFailsafe policyを設定

ここからが、今回可能になった新しい設定箇所です。
通常利用するpoolに対し設定を行います。Pool detailsタブの一番下に、Failsafe policyがあります。右上のEditボタンを押して変更を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/3035e79e-d58a-46a9-a523-1684b25da2ae.png)

デフォルトではAction=Failが選択されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/a2ce6ba8-f085-462c-b72b-9d4c17db59e3.png)

Action=Forwardに変更し、Targetに、Sorry用に作成したpoolを選択し、Saveします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/459f81c4-4911-4277-a174-4ea008be25df.png)


sorry用に作ったpoolにBackup poolという属性が付与されます。また、このpoolについてもヘルスチェックが開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/b87a6dcd-d786-4970-a18e-3509990f0332.png)

設定は以上です。

# 動作確認

サーバーを全て起動した状態でALBにアクセスすると、pool1に登録したサーバー1, 2にround robinで割り振られます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/bb1ad870-8a03-4720-a081-516669418e27.png)

pool1のサーバーを1台止めると、pool1内の残ったサーバーに割り振られます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/db7d606c-2f3c-47a3-af1b-0a829863c1ee.png)

pool1のサーバーを2台とも停止すると、pool-sorryのサーバーに割り振られます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/ec4e2403-0376-451d-9040-05c806a05a73.png)

:::note
Failsafe policyを設定する前は、pool1のサーバーが全部止まると、503エラーになっていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/3e050e75-ab57-44f5-aac1-4ccd1f7670aa.png)
:::

pool1のサーバーを1台でも復旧させると、再びpool1のサーバーに割り振られます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59627/db7d606c-2f3c-47a3-af1b-0a829863c1ee.png)

通常利用するpool内のサーバーが全て使えなくなった時だけ別poolに振り分け可能ということで、sorryページを設定したい時に使える機能と思いました。

以上
ディスク丸ごとバックアップする方法

備忘録。システムディスクを丸ごとバックアップしようとすると、最近のバックアップ系のソフトでは課金を求められる事が多い。そこで、LinuxをUSBから動かして次のコマンドを実行する。

# バックアップ
`lsblk` コマンドでコピー元を確認する。
```
$ lsblk 
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0     4K  1 loop /snap/bare/5
loop1    7:1    0  73.9M  1 loop /snap/core22/1748
loop2    7:2    0   258M  1 loop /snap/firefox/5751
loop3    7:3    0  11.1M  1 loop /snap/firmware-updater/167
loop4    7:4    0   516M  1 loop /snap/gnome-42-2204/202
loop5    7:5    0  91.7M  1 loop /snap/gtk-common-themes/1535
loop6    7:6    0  10.8M  1 loop /snap/snap-store/1248
loop7    7:7    0  44.4M  1 loop /snap/snapd/23545
loop8    7:8    0   568K  1 loop /snap/snapd-desktop-integration/253
loop9    7:9    0 210.4M  1 loop /snap/thunderbird/644
loop10   7:10   0 210.4M  1 loop /snap/thunderbird/663
sda      8:0    0 447.1G  0 disk
├─sda1   8:1    0     1M  0 part
└─sda2   8:2    0 447.1G  0 part /
sdb      8:16   0   1.8T  0 disk
├─sdb1   8:17   0    16M  0 part
└─sdb2   8:18   0   1.8T  0 part
```

バックアップ対象は`/dev/sda`であることを確認。

次に、`dd`コマンドで読み出したのを`pigz`に渡して圧縮しながら保存する。`status=progress`とすると進捗が出てくるので便利。`gzip`とは違い`pigz`はマルチコアで処理してくれるので速い。（Ubuntu 24.04だとデフォルトでは入ってなかったので入れる必要がある）

```
$ sudo dd if=/dev/sda bs=16M status=progress | pigz > image.gz
```

# リストア

image.gzを`/dev/sda`にリストアする場合

```
$ sudo sh -c "unpigz -c image.gz | dd of=/dev/sda status=progress"
```

# 最後に
ミスったら悲惨なことになると思うので自己責任で。。。

# 参考
https://www.upken.jp/kb/dd-backup-restore.html

https://qiita.com/taiyodayo/items/7c60c9b3bc00b13baf43
PythonでJSONデータをCSVファイルに変換する方法

Pythonを使ってJSON形式のデータをCSV形式に変換することを仕事で最近行ったので、忘備録用に方法をまとめようと思います。

## 目次

1. [必要なライブラリ](#必要なライブラリ)
2. [JSONデータを用意する](#JSONデータを用意する)
3. [JSONデータをCSVに変換する](#JSONデータをCSVに変換する)
4. [完成したCSVファイル](#完成したCSVファイル)
5. [エラーハンドリング](#エラーハンドリング)
6. [結論](#結論)

## 必要なライブラリについて

まず、JSONデータをCSVに変換するために必要なライブラリを最初にインポートします。

```python
import json
import csv
```
- `json`: JSONデータを処理するための標準ライブラリ
- `csv`: CSVファイルを操作するための標準ライブラリ
## JSONデータを用意する

次に、変換対象のJSONデータを用意します。
以下の例では、簡単なJSONデータを使用します。

```json
[
    {"id": 1, "name": "Taro", "age": 25},
    {"id": 2, "name": "Kyoko", "age": 30},
    {"id": 3, "name": "Hanako", "age": 35}
]
```

このデータは、3つのオブジェクトを含むリストです。それぞれのオブジェクトには、`id`、`name`、`age`というフィールドがあります。

## JSONデータをCSVに変換する

次に、Pythonコードを使ってJSONデータをCSVに変換します。
以下にコーディング例を記載します。

```python
# JSONデータの読み込み（ファイルから読み込む場合）
with open('data.json', 'r') as json_file:
    data = json.load(json_file)

# CSVファイルに書き込む
with open('data.csv', 'w', newline='') as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=["id", "name", "age"])
    writer.writeheader()  # ヘッダーを書き込む
    writer.writerows(data)  # データを書き込む
```

### 説明

1. **JSONの読み込み**  
   `json.load()`を使用して、JSONファイルを読み込みます。ここでは`data.json`というファイル名のJSONデータを読み込んでいます。

2. **CSVファイルの作成**  
   `csv.DictWriter`を使ってCSVファイルにデータを書き込みます。`fieldnames`で列名（フィールド名）を指定します。

3. **ヘッダーの書き込み**  
   `writeheader()`メソッドを使って、CSVファイルの最初に列名を追加します。

4. **データの書き込み**  
   `writerows()`を使って、JSONデータをCSVファイルに書き込みます。

## 完成したCSVファイル

上記のコードを実行した後、`data.csv`というファイルが作成され、内容は次のようになります。

```csv
id,name,age
1,Taro,25
2,Kyoko,30
3,Hanako,35
```

## エラーハンドリング

JSONファイルの読み込みや書き込み処理でエラーが発生する可能性があります。簡単なエラーハンドリングを追加して、処理を安全に行うことができます。

```python
try:
    with open('data.json', 'r') as json_file:
        data = json.load(json_file)

    with open('data.csv', 'w', newline='') as csv_file:
        writer = csv.DictWriter(csv_file, fieldnames=["id", "name", "age"])
        writer.writeheader()
        writer.writerows(data)
    print("変換が成功しました！")
except FileNotFoundError:
    print("JSONファイルが見つかりません。")
except json.JSONDecodeError:
    print("JSONのデコードに失敗しました。")
except Exception as e:
    print(f"エラーが発生しました: {e}")
```

このようにすることで、ファイルが見つからない場合やJSONの構文エラーが発生した場合でも、エラーメッセージを表示できます。

## 結論

Pythonを使ってJSONデータをCSVファイルに変換する方法は非常に簡単です。標準ライブラリ`json`と`csv`を使用することで、数行のコードで変換処理を行うことができます。データ分析や可視化ツールで使用する際に、JSONからCSVに変換して活用することができます。

---
Qiita アップデートサマリー - 2025年 2月

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88/ccd0ebaf-8c03-429c-a235-84b6d192e047.png)

## はじめに
Qiitaでは、エンジニアのみなさんからの声をもとに、日々開発を続けています。
この記事では、2025年 2月にリリースした内容を紹介します。

Qiitaでアップデートやバグ修正をリリースしたら、[リリースノート](https://qiita.com/release-notes)、[Qiita 公式 Twitter](https://twitter.com/Qiita)、[Qiita Blog](https://blog.qiita.com/)でお知らせしています。

また、Qiitaへの質問や機能の要望などがありましたら、[Qiita Discussions](https://github.com/increments/qiita-discussions) へご投稿ください。

## CodePenの仕様変更に対応し、新URLでの埋め込みも可能になりました
*2025年2月3日リリース*

CodePenの埋め込みに使用されているURLが変更されたことに伴い、新しいURL（`https://public.codepenassets.com/embed/index.js`）での埋め込みも可能になりました。

CodePenの埋め込みについては[こちら](https://qiita.com/Qiita/items/edae7417214c8e957f54)をご覧ください。

## 「マイルストーン・人気の投稿」が再開しました！

配信ツールの仕様変更により配信が停止しておりましたが、2月より再開いたしました✨

- [Qiitaマイルストーン](https://x.com/qiita_milestone)
    - いいね 達成やContributions達成をご紹介するアカウント
- [Qiita 人気の投稿](https://x.com/qiitapoi)
    - 直近数時間で人気の投稿をご紹介するアカウント


## Qiita公式Youtubeチャンネルでイベントのアーカイブ動画が投稿されています
Qiita公式Youtubeチャンネルでは、Qiitaで主催しているイベントのアーカイブ動画を投稿しています。

イベントに参加できなかった方、もう一度、イベントを見返したい方、ぜひご覧ください！

直近開催したイベントのアーカイブはこちら
**Qiita Bash 「推しフロントエンド技術について語ろう！」**
<iframe width="560" height="315" src="https://www.youtube.com/embed/videoseries?si=ceW_MVcpeLiH1yZJ&amp;list=PLF7OAPlTLfTDxk8tZ9oHP23ACKMIwohug" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

**Qiita Bash 「アドベントカレンダーお疲れ様会」**
<iframe width="560" height="315" src="https://www.youtube.com/embed/videoseries?si=aLTXekl8YIedaJUt&amp;list=PLF7OAPlTLfTBAhE_p4ZSQnrjYTAsRqlYM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

**Qiita Woman Summit supported by パナソニック コネクト**

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

**NECソリューションイノベータ先端研究フォーラム〜専門技術で描く持続可能な未来〜**

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

## 日本で活躍するエンジニアのキャリアやモチベーションに関する話が聞けるPodcast番組「Qiita FM」をやっています。

こちらのURLよりお聞きいただけます。

https://open.spotify.com/show/4E7yCLeCLeQUsNqM4HXFXA
Amazon Linux 2023 + ShellSpecでシェルスクリプトのテスト環境を構築する方法

# 1.はじめに
あるシェルスクリプトの単体テストを実施することになりました。
参画しているプロジェクトでは、
シェルスクリプトの単体テストを行ったことがなかったため
そこで初めて「ShellSpec」というテストフレームワークを知りました。

この記事では、シェルスクリプトの単体テストを初めて行う方向けに
ShellSpecの導入方法を分かりやすく解説します。

# 2.ShellSpecって何？
シェルスクリプトをテストするためのツールで、
簡単にシェルスクリプトの単体テストを実行することができます。
テスト結果は簡潔なレポートとして出力されます。
**さらに、カバレッジも取得できます。**

公式リファレンスはこちらです。
[README](https://github.com/shellspec/shellspec/blob/master/README.md)
[公式サイト](https://shellspec.info/)

# 3.実際にShellSpecを導入してみよう！
### 前提条件
こちらの記事では、Amazon Linux 2023をプラットフォームに持つ、
AWS Cloud9環境上でテストを行います。
プラットフォームは、AWS Cloud9のコンソール画面から
使用する環境を押下すると確認できます。
なお、**既にCloud9のインスタンスがあるAWSアカウント**では新規作成が可能ですが、
**まだCloud9のインスタンスが存在しないAWSアカウント**では新規作成ができませんので
ご注意ください。
[Cloud9の新規受付終了について](https://repost.aws/ja/questions/QU0Y4weDCNQrObtlqybyYM8Q/cloud-9-%E3%81%AE%E6%96%B0%E8%A6%8F%E5%8F%97%E4%BB%98%E7%B5%82%E4%BA%86%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)

## ShellSpecのインストール
以下のコマンドをターミナルで実行してください。
```
wget -O- https://git.io/shellspec | sh
cd /YOUR/PROJECT
shellspec --init
```
下記2ファイルが作成されていることを確認してください。
.shellspec
spec/spec_helper.sh

# 4.ShellSpecの基本的な使い方
以下のようなシェルスクリプトをテストする場合を例に説明します。
```hello.sh
#!/bin/bash

echo 'Hello ShellSpec!'
```
echoで出力された内容を検証するテストは以下のように書きます。
```hello_spec.sh
Describe 'hello.sh'
  It 'hello.sh'
    # hello.shを実行して、その出力内容を検証するテスト
    When run shell/hello.sh # hello.shを実行
    The output should equal 'Hello ShellSpec!' # 実行結果が期待通りか確認
  End  
End
```
フォルダ構成は以下の通りです。
テスト対象のシェルスクリプトはshell配下に作成し、
テスト仕様のシェルスクリプトはspec配下に、
_spec.shで終わるファイル名で作成しました。
```
/projectX
├── spec/
│   ├── hello_spec.sh
│   └── spec_helper.sh
├── shell/
│   └── hello.sh
└── .shellspec
```
#### 実行結果
.shellspecのある階層で`$ shellspec`を実行します。
実行結果が以下のように表示され、テストが成功していることが分かります。
```
{自分の環境名}:~/environment/projectX $ shellspec
Running: /bin/sh [bash 5.2.15(1)-release]
.

Finished in 0.23 seconds (user 0.19 seconds, sys 0.00 seconds)
1 example, 0 failures # 成功した場合は"0 failures"となります。
```
失敗した場合は、以下のように表示されます。
```
{自分の環境名}:~/environment/projectX $ shellspec
Running: /bin/sh [bash 5.2.15(1)-release]
F

Examples:
  a) ERROR: An error occurred in hogehogehoge (exit status: huga)

       hoge.sh: line 44: huga: hogehogehoge

     # spec/hello_spec.sh:3

  1) hello.sh
     1.1) hogehogehoge

          # spec/hello.sh:1

Finished in 0.23 seconds (user 0.15 seconds, sys 0.04 seconds)
1 example, 1 failure, 1 error
```
### ポイント
* **シェバンはbashを推奨します**

シェバンとは、スクリプトを実行する際に使われるシェルを指定する記述のことで、
スクリプトファイルの先頭に書かれている`#!/bin/bash`を指します。

推奨する理由は以下の2点です。
1. Amazon Linux 2023のデフォルトシェルがbashであること
※<code>$ echo $SHELL</code>で確認できます
2. 次の記事で投稿予定のカバレッジを取得するためにはbashである必要があること

* **spec/hoge_spec.shというファイルがテスト仕様と認識されます**

デフォルトでは、 **specフォルダ配下の_spec.shで終わるファイル**が
テストとして認識されます。

# 5.まとめ
シェルスクリプトのテストフレームワーク「ShellSpec」を
Amazon Linux 2023で導入し、簡単なテストの実行方法をご紹介しました。
Ubuntuで解説されている記事が多かったため、
RedHat系のAmazon Linux 2023での試行結果として、ご参考になれば幸いです。

次の記事では、カバレッジの取得方法をご紹介いたします。
GPT-4.5を使いこなす！API利用方法と開発での活用法

## はじめに
GPT-4.5は、OpenAIが提供する最新のAIモデルであり、GPTシリーズの進化形です。前バージョンのGPT-4からさらに改良され、自然言語処理やタスク解決能力が向上しました。本記事では、GPT-4.5の特徴、新機能、活用事例を紹介し、開発者がどのようにこの技術を活用できるかを探ります。

## GPT-4.5の新機能
GPT-4.5は、前バージョンと比べていくつかの重要な改善点が施されています。以下は主な新機能です。

性能の向上
GPT-4.5では、前バージョンに比べて処理速度と精度が向上しました。これにより、特に複雑なタスクを迅速に処理できるようになり、実務での使用がさらに現実的になっています。

多言語対応の強化
GPT-4.5は、以前よりも多くの言語に対応し、その精度も向上しました。これにより、国際的なプロジェクトやグローバルなアプリケーションでの使用が増えています。

タスクに特化した最適化
特定の業務やタスクにおいて、より高度な最適化が施されており、開発者が必要とする特定の機能を効率よく提供できるようになっています。たとえば、コーディング補助やデバッグ、データ解析など、専門的な要求にも対応します。

## GPT-4.5の活用事例
実際にGPT-4.5はさまざまな分野で活用されています。以下にいくつかの具体的な活用事例を紹介します。

ソフトウェア開発の支援 GPT-4.5は、コードの補完、エラーメッセージの解析、コードの最適化提案などを行うことができます。例えば、プログラム中にエラーが発生した場合、その原因を特定して修正案を提示することができます。

データ解析 複雑なデータセットを解析し、必要な情報を抽出する作業も得意です。自然言語でクエリを入力することで、分析結果をわかりやすく出力することができます。

コンテンツ生成 GPT-4.5を使って、ブログ記事、ニュース、マーケティングコンテンツなど、さまざまなタイプのテキストコンテンツを生成することができます。これにより、コンテンツ制作の効率が大幅に向上します。

## GPT-4.5 APIの利用方法
GPT-4.5はAPIを通じて利用することができます。以下は、基本的な利用方法です。

1. APIキーの取得
OpenAIの公式サイトからアカウントを作成し、APIキーを取得します。このキーを使用してAPIを呼び出します。

2. APIリクエスト
Pythonを使ったサンプルコードで、GPT-4.5にリクエストを送信してみましょう。

```python
コピーする
import openai

openai.api_key = 'your-api-key'

response = openai.Completion.create(
  model="gpt-4.5-turbo",
  prompt="Pythonの簡単なコードを教えてください。",
  max_tokens=50
)

print(response.choices[0].text.strip())
```

このコードを実行すると、GPT-4.5が「Pythonの簡単なコード」を生成してくれます。

## 開発での活用方法
GPT-4.5は、ソフトウェア開発において非常に強力なツールです。以下は、その活用方法です。

コード補完と最適化 GPT-4.5を利用して、コードの自動補完を行うことができます。特に複雑なロジックを組む際に、その助けとなります。

ドキュメント生成 プログラムの仕様書やAPIドキュメントの自動生成にも利用できます。コードに対する解説を自然言語で提供することができ、ドキュメント作成の手間を大幅に減らします。

デバッグのサポート エラーメッセージを入力すると、その原因を解説し、修正方法を提案してくれるため、開発者の負担を軽減します。

## GPT-4.5とセキュリティ
AIを利用する際には、データプライバシーとセキュリティが重要な課題です。GPT-4.5も例外ではなく、使用する際にはいくつかのポイントに注意する必要があります。

機密情報の取扱い GPT-4.5に入力するデータには機密情報が含まれないようにしましょう。APIを利用する際には、通信が暗号化されていることを確認してください。

適切なアクセス制限 APIキーの管理には十分に注意し、不正アクセスを防ぐためのセキュリティ措置を講じることが重要です。

## まとめ
GPT-4.5は、その高い性能と多機能性により、さまざまな分野での活用が期待されています。開発支援からコンテンツ生成、データ解析に至るまで、非常に多用途であるため、今後のAI技術の進展に大きな影響を与えることでしょう。APIの簡単な利用方法や実践的な活用法を学び、日々の開発に役立てていきましょう。

## 参考資料
[OpenAI公式サイト](https://openai.com/ja-JP/chatgpt/overview/)
[GPT-4.5 APIドキュメント](https://openai.com/ja-JP/chatgpt/overview/)


## おすすめなAIツール
https://ai.tencho-ex.com/