OmniAICreator/Qiita-1.07M huggingface dataset:
RHEL9.5にzabbix7.2を構築(zabbix編)

## はじめに
RHEL9.5にzabbix7.2を構築(MySQL編)の続きです。

https://qiita.com/sky_road1901/items/86282503ed811c078e80

## zabbixの導入
zabbixのインストールについてはzabbixのダウンロードページに記載される手順通り実施となります。
※zabbix6.0のデータを7.2へ移行した為、一部手順が異なりますので完全新規で構築される場合は、ダウンロードページに記載されている手順通り進めて下さい。
尚、各コマンドの実行権限はすべてrootユーザで実施しています。
今回選択したzabbixサーバのプラットフォームは以下の通りです。
| 項目| 構成内容 |
|:-:  |:-:|
|zabbixバージョン | 7.2  |
|OSディストリビューション|Red Hat Enterprise Linux|
|OSバージョン   |9 (amd64, arm64)  |
|ZABBIX COMPONENT |Server, Frontend, Agent 2  |
|データベース   | MySQL  |
|Web Server   | Apache |

### STEP1
EPELからzabbixパッケージがインストールされている場合はepel.repoを編集
``` 
[epel]
...
#excludepkgs=zabbix*
```

### STEP2
リポジトリのインストール
``` 
rpm -Uvh https://repo.zabbix.com/zabbix/7.2/release/rhel/9/noarch/zabbix-release-latest-7.2.el9.noarch.rpm
dnf clean all
```
### STEP3
Zabbixサーバー、フロントエンド、エージェント2をインストールする
``` 
dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent2

```
### STEP3-1
zabbix-agent2のプラグインをインストールする場合はこのタイミングでプラグインもインストール実施すること
``` 
dnf install zabbix-agent2-plugin-mongodb zabbix-agent2-plugin-mssql zabbix-agent2-plugin-postgresql

```

### STEP4
初期データベースの作成
``` 
mysql -uroot -p
password
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;
```
### STEP5
旧サーバ(zabbix6.0)のデータからデータベースを復元
エラー無く実行できた場合、STEP7のプロセル起動と自動的にDB復元が始まります。
DBの容量によりますが、今回は15分程度で完了しました。
※DBのバックアップ方法はChatGPTなどに確認をお願いします。
``` 
mysql -u root -p zabbix < ファイル名.sql
zabbix_server -c /etc/zabbix/zabbix_server.conf --update-db
```
### STEP6
/etc/zabbix/zabbix_server.conf の編集
DBパスワードの個所を以下の通り編集
``` 
DBPassword=STEP4で登録したパスワードを記載
```
### STEP7
Zabbix サーバーおよびエージェントの起動
``` 
systemctl restart zabbix-server zabbix-agent2 httpd php-fpm
systemctl enable zabbix-server zabbix-agent2 httpd php-fpm
```

## グラフの文字化け対策
デフォルト言語を日本語にした場合グラフが文字化けするため、ipa-gothic-fontsをインストールして文字化け対策を行います。

### フォントのインストール
``` 
dnf install ipa-pgothic-fonts
``` 
### zabbixフォントの置き換え
``` 
ln -sf /usr/share/fonts/ipa-gothic/ipag.ttf /etc/alternatives/zabbix-web-ui-font
``` 

構築は以上となります。  
これで Zabbix 7.2 の環境が整いましたが、まだまだ活用の幅は広がります。  
Zabbix とローカル LLM を組み合わせることができないか試行錯誤しているので、  
その成果もいずれ共有できればと思います！  
それでは、良き Zabbix ライフを！
Svelte5の新機能$bindableルーンについて

Svelte5のルーンによる機能分析第二弾です。前回は`$host`ルーンでしたが、今回は`$bindble`ルーンです。`$host`ルーンほど機能はややこしくないのですが、後述するように公式の説明が少しややこしいことをしています。

https://svelte.jp/docs/svelte/$bindable

svelteには同期対象を取りたい場合、フォームに

```svelte:Child.svelte
<input bind:value={message}>
```

のような記述をします。Svelte5には$bindableルーンという新たな機能が搭載され、デモを確認してみると、子コンポーネントにフォームと全く同じ記述を確認できます。

```svelte:Parent.svelte
   <FancyInput bind:value={message} />
```

ですが、Svelte5になってからonディレクティブが廃止になり、ダイレクトに変数を他コンポーネントへ転送できるようになったので、正直こんな記述は不要じゃないか？　そう思っていました。

# これはどんな動きを意味しているのか？
それでも新たに登場した機能である以上、何か意味のある動きを持っているのでは？と思い、まずはデモ通り記述し、動作を確認してから、今度は自分が作成してみたプログラムに落とし込んでみました。

確かに子コンポーネントから入力した値が、親コンポーネント上に値が装飾されて表示されます。

## 実証
毎回valueを変数に使うのは面倒だし、フォームでしか使えないのならばあまり実用的じゃないなあと訝っているうちに、あることを思いつき実験してみました（変数hogeは最初からじゃありません）。

```svelte:parent.svelte
<script>
import Child from './child.svelte'
let mes = $state("")
</script>
<main>
    <Child bind:hoge={mes} />
    <p>親：{ mes }</p>
</main>
```

```svelte:child.svelte
<script>
let {hoge = $bindable("") } = $props()
</script>
<main>
<input bind:value={hoge} />
<p>子：{ hoge }</p>
</main>
```

<h3>おわかりいただけただろうか</h3>

子コンポーネントから受け渡したデータを親コンポーネントに伝播、更にそこから再度子コンポーネントへ値が伝播されています。つまり、親コンポーネントからも子コンポーネントからも、全く同じメッセージが出力されます。

# 結論
公式チュートリアルが少々紛らわしいことをしているだけで、**子コンポーネントタグに用意されているbind:valueは、inputタグのbind:valueプロパティとは厳密には別物で、フォーム以外に値を表示させる場合は、bindディレクティブで設定するキーにどんな値を指定してもいい**のです。そして、$bindableルーンを使用することで、任意の変数を自在に、逆方向へ（子から親）も、自由自在にデータバインディングできるようになります。

ただし、公式も注意を入れているようにJSフレームワークは基本的にストリーム（川の流れ）の概念があり、上流から下流へデータを伝播させていくものなので、このように**データを逆流させるような機能は、必要なとき以外使用することを推奨していない**ようです。

使用する場面としては、繰り返し作成された各種部品におけるイベント制御（電卓やカレンダーなど）などかな、と思います。
ネットワーク入門：NATとNAPTの違いとは？家庭のネットワークの仕組みを解説してみた

## はじめに
家庭のインターネット環境について考えたことはありますか？

:::note info
**日常的に使っているWi-Fiの仕組みを詳しく知ることで、ネットワークトラブルの対応やセキュリティの強化につながります。**
:::

本記事では、家庭のローカルネットワークで使われる「NAPT（Network Address and Port Translation）」について解説します。

## 書こうと思ったきっかけ
最近、家庭内のデバイスがどのようにインターネットへアクセスしているのか気になり、調べてみました。

その過程で「**家庭のネットワークはNATなのか？NAPTなのか？**」という疑問が生じたため、まとめることにしました。

## NATとNAPTの違い
家庭のルーターでは、一般的に **NAPT（Network Address and Port Translation）** が使用されています。

### NAT（Network Address Translation）とは？
- IPアドレスのみを変換する技術。
- 1対1の変換が基本。
- 例: グローバルIP 203.0.113.1 ⇄ ローカルIP 192.168.1.10。
- 1つのグローバルIPを1台のデバイスでのみ使用可能。

### NAPT（Network Address and Port Translation）とは？
- **ポート番号も変換** する技術（これが一般的に「NAT」と呼ばれることが多い）。
- 1つのグローバルIPを複数のローカルIPで共有可能。
- 例: 203.0.113.1:50001 ⇄ 192.168.1.10:80, 203.0.113.1:50002 ⇄ 192.168.1.20:80。
- 家庭のネットワークで、複数のデバイスが1つのグローバルIPを使ってインターネットに接続できる仕組み。

## 家庭のルーターとNAPT
一般的な家庭用ルーターでは、NAPT（PATとも呼ばれる）がデフォルトで有効になっています。

例えば、家の中にあるスマートフォンやPCがインターネットにアクセスすると、すべてのデバイスは**1つのグローバルIPを使用**します。

:::note info
***しかし、ルーターはそれぞれのデバイスの通信を識別するために**送信元ポート番号を変更**します。***
:::

これにより、複数のデバイスが同時にインターネットを利用できるのです。

## まとめ
 **家庭のローカルネットワークは通常「NAPT（PAT）」を使用している。**
 **単純なNAT（1対1の変換）は一般家庭ではほぼ使われない。**
 **ルーターはポート番号を利用して、複数のデバイスを同じグローバルIPで管理している。**

ルーターの設定画面を確認すると、「NAPT」または「ポートマスカレード（Port Address Translation）」という項目があるはずです。

**興味がある方は、ぜひ一度設定をチェックしてみてください！**
生成AIの活用でデモアプリ開発してビジネスコンテスト優勝した

# この記事について
今回は社内のビジネスコンテスト向けに生成AIを活用して自分で全くコーディングをせずにデモアプリを作成しました。結果ビジネスコンテストで優勝でき、デモアプリの評判も良かったのでアプリケーション作成までの生成AIとの会話内容とシステムの構成、アプリ公開に至るまでの流れを説明します。

この記事の流れを踏めば、アプリケーション作成初心者でもデモアプリレベルなら数時間でインターネット公開できるレベルまで持っていくことができると思います。

:::note info
この記事ではビジネスコンテストの中身については触れません
あくまで生成AIを活用したデモアプリ作成の流れのみ解説します
:::

# 前提
今回利用する環境イメージは以下です。
![デモアプリ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956121/00985d02-13d0-452a-9f95-2d43986e4c25.png)

それぞれのサービスの用途を簡単に以下に説明します。

#生成AI
サービス：Gemini
用途：環境構築からコード生成、デプロイまで全て相談
※ビジネスコンテスト時はClaudeを利用したが今回はGoogle統一でGeminiを利用

#ローカル環境
端末：MacBook Air M1チップ
開発環境：Visual Studio Code
用途： Geminiで出力したコードを整理して、Githubへ連携

#ソース管理
Github

#CICD
サービス：Cloud Build (GoogleCloud)
用途：Githubへの更新をトリガーにCloud Runにデプロイする

#デプロイ環境
サービス：Cloud Run (GoogleCloud)
用途：デプロイ環境。簡単のためにサーバレスサービスを採用

# 実際にやってみた
Geminiに以下のプロンプトを入力します。

```Gemini.入力
#役割 

あなたはWEBアプリ開発が得意なエンジニアです。



#概要 

デモアプリを作成したいので手伝ってください。

以下の条件のもとで作業を進めたいです。



#条件

・Reactを利用

・画面デザインはtailwindを活用

・開発に利用する端末はMacBook Air、AppleM1、Sequoia15.0

・Visual Studio Codeで開発

・ソースコードはgithubで管理

・githubへのコミットをトリガーにCloudBuildを起動

・CloudBuildでビルドしたものは自動でCloudRunへデプロイ



#作業の流れ

①ローカルにReactプロジェクト作成して、必要なライブラリをインストール

②VSCodeのワークスペースに展開

③既存のGithubアカウントとVSCodeを連携

④Cloud Buildの連携設定

⑤それぞれのソースコードをGeminiで作成し、VSCodeにコピー

⑥コミットしてCloud Runに自動デプロイ

⑦CloudRunからデプロイされたアプリの確認



#デモアプリの概要

・社内におけるGoogleCloudの各種サービス利用状況を管理できるアプリ

・それぞれの社員は当システムにログインして、使いたいGoogleCloudサービスを利用申請する。

・利用申請画面と管理者用の利用状況確認画面と利用申請状況確認画面がある

・今っぽい画面構成、画面デザイン



#出力のお願い

作業の流れの順に作業していきたいので、上記情報をもとに①から順番に進めて出力してください。

まずは①をお願いします。
```

```Gemini.出力
① ローカルにReactプロジェクトを作成して、必要なライブラリをインストール
ターミナルを開く

Macのターミナルアプリを開きます。

プロジェクトを作成するディレクトリに移動

プロジェクトを作成したいディレクトリにcdコマンドで移動します。

例：cd Documents/projects

Reactプロジェクトを作成

create-react-appコマンドを使用して、新しいReactプロジェクトを作成します。プロジェクト名はgcp-usage-managerとします。

（以下略）
```
こんな感じで手順を示してくれるので、この手順に沿って作業を進めていきます。
「②の手順をお願いします」と言えば、次の②の手順を示してくれるので、そのまま最後まで進めていきます。あとは同じ手順を進めていくだけなので詳細は割愛します。
多少はエラーが発生すると思いますが、エラー内容をそのままGeminiに入力して、解決してもらうといいと思います。（自分も手順の途中で10回ほどエラーになりました）

# 結果
こんな感じのデモアプリができました！
![スクリーンショット 2025-03-15 20.11.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956121/5b1b7a63-be78-4d41-8ea5-0c6471883dae.png)
![スクリーンショット 2025-03-15 20.12.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956121/27f9221a-001e-4d29-9290-2ba9146b86dd.png)
![スクリーンショット 2025-03-15 20.12.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956121/6b8b5fb9-ed17-49eb-b81b-642625c84095.png)

所要時間は約1時間です。（私は慣れているので初めてだともう少しかかるかも）このWEBアプリはCloudRun上にデプロイしたので、数クリックでインターネット公開することも可能です。今回は特にデモアプリの内容を深めるやり取りをしてないので出来上がりは簡素なものですが、デモアプリをリッチにしたければGeminiと対話を続けることでコードを修正していくこともできます。

# まとめ
Geminiと各種サーバレスサービスを組み合わせることで簡単に公開可能なアプリケーションを作成することができます。今回はGeminiとVisual Studio Codeの連携は特にしませんでしたが、そこを自動連携にしたり、Github Copilotを利用したりするともっと効率的に作ることができるかもしれませんので、みなさんぜひ試してみてください！
WSL2 × AWS CLI × GitHub で AWS × Python 開発環境を構築してみる

# 前置き
何物でもない人間が、AWSでMLOpsができるようになるのを目指す記録です。
初回はAWS × Python 開発環境の構築を目標にいろいろやってみました。

# 実施内容
✅ WSL2 を使って Linux 開発環境を Windows に導入
✅ AWS CLI をセットアップし、AWS をコマンドラインで操作
✅ Python (boto3) を使って AWS をプログラムで管理
✅ GitHub との SSH 接続を設定し、リポジトリ管理ができるように設定

# 詳細

### ✅ 1️⃣ WSL2 のセットアップ
「Windows 環境に Linux（Ubuntu）を導入」

📌 💡 手順

WSL2 を有効化（PowerShell で実行）
```powershell:powershell
wsl --install -d Ubuntu
```

Ubuntu の初期設定
```bash:wsl
sudo apt update && sudo apt upgrade -y
```

Windows Terminal と VS Code をセットアップ
・Windows Terminal をインストール
・VS Code + WSL 拡張を追加
```bash:wsl
code .
```

💡 「WSL2 を使えば、Windows でも Linux 環境で開発が可能」

### ✅ 2️⃣ AWS CLI のインストール
「AWS をコマンドラインから操作できるようにする」

📌 💡 AWS CLI を WSL2 にインストール

```bash:wsl
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version  # 確認
```

📌 💡 AWS CLI を設定

```bash:wsl
aws configure
```
👉 アクセスキー & シークレットキーを入力し、リージョンを設定！

#### IAM ユーザーの作成について

AWS CLI を利用するために、AWS マネジメントコンソールで IAM ユーザーを作成する必要があります。

(AWSアカウントを持ってない場合ここで作成します)
1. AWS コンソールにログインし、[IAM ユーザー管理ページ](https://console.aws.amazon.com/iam/home) にアクセス
2. 「ユーザー」→「新しいユーザーを追加」をクリック
IAM Identity Center を有効にするよう勧められますが、今回のケースだとわかりにくくなるだけのため不要だと思います。
3. ユーザー名を `my-aws-user` など適当につける
4. 「AdministratorAccess」のポリシーをアタッチ（権限の制御）
・注意点
　全権限が付与されるので、普段は必要な権限だけを付けるのが理想
 
5. 「ユーザーの作成」を完了し、サインイン URL からログイン
6. 「ユーザー」`my-aws-user`を選択しアクセスキーを作成
7.  ユースケースは コマンドラインインターフェイス (CLI) を選択してアクセスキーを作成
推奨された代替案は、無視してかまいません



📌 💡 AWS CLI の動作確認

```bash:wsl
aws s3 ls  # S3 バケットの一覧を取得
aws ec2 describe-instances  # EC2 インスタンスの情報を取得
```

✅ エラーがなければ AWS CLI のセットアップ完了！

💡 「AWS CLI を使えば、GUI なしで AWS を管理できる」

### ✅ 3️⃣ Python 環境のセットアップ
「AWS Lambda で使う Python 環境を整える」

📌 💡 Python & 仮想環境（venv）のセットアップ

```bash:wsl
sudo apt install python3 python3-venv python3-pip -y
python3 -m venv ~/projects/venv
source ~/projects/venv/bin/activate  # 仮想環境を有効化
pip install boto3 requests  # AWS SDK（boto3）をインストール
```
✅ Python 仮想環境を使って、AWS × Python の開発環境を整えた！

💡 「仮想環境を作ることで、Python の依存関係を管理しやすくする」

### ✅ 4️⃣ GitHub との SSH 接続
「GitHub に SSH で接続し、コードを管理できるようにする」

📌 💡 SSH キーの作成

```bash:wsl
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
```

👉 id_rsa.pub を GitHub に登録！ 👉 GitHub SSH Key 設定ページ で追加！

📌 💡 SSH 接続のテスト

```bash:wsl
ssh -T git@github.com
```

✅ 「Hi your-github-username!」と表示されれば成功！

📌 💡 GitHub リポジトリを作成 & git push

```bash:wsl
git init
git remote add origin git@github.com:your-username/aws-python-pipeline.git
git add .
git commit -m "Initial commit"
git push -u origin main
```

✅ GitHub に WSL からコードをプッシュできるようになった！

💡 「GitHub でコードを管理することで、開発の効率がUP」

### ✅ 5️⃣ AWS × Python の動作確認
「AWS CLI & boto3 を使って、AWS サービスを操作」

📌 💡 boto3 で S3 のバケット一覧を取得

```python:s3list.py
import boto3

s3 = boto3.client("s3")
response = s3.list_buckets()

for bucket in response['Buckets']:
    print(bucket['Name'])
```
✅ AWS CLI (aws s3 ls) と同じ結果が出れば成功！

💡 「AWS CLI だけでなく、Python から AWS を操作できるようになった」

# 終わりに

動かす環境は何とか作り終わったので、次回からは
「AWS Lambda で Python を実行し、S3 との連携を試す」
ステップに進みたいと思います。
AWS Certified SysOps Administrator - Associate 受験記録

# はじめに
AWS Certified SysOps Administrator - Associate取得のために勉強したことをまとめます。

https://aws.amazon.com/jp/certification/certified-sysops-admin-associate/

こちらのサイトに試験ガイドや模擬問題が提供されています。



# 勉強したこと

前の月にSCS-C02を取得しました。問われる知識の範囲が似通っているという情報がありましたので、覚えたことを忘れないうちにと、急いでSysOpsを申し込むことにしました。

https://qiita.com/talomina/items/fd3483c545e44ffced45

約1か月ほどかけて、いろいろ勉強しました。

### AWS Certified SysOps Administrator - Associate Official Practice Question Set (SOA-C02 - 日本語)

公式問題集だけあって本番の再現度が高くて役立ちました。

https://explore.skillbuilder.aws/learn/courses/12555/aws-certified-sysops-administrator-associate-official-practice-question-set-soa-c02-ri-ben-yu

最初にトライした際のスコアは65%でした。。。

### AWS認定SysOps Administrator Associate（SOA-C02）試験 対策トレーニング
毎回お世話になっているUdemy。日本語の講座はこれしかありませんでした。一通り解説動画をみて、演習問題をやりました。

https://www.udemy.com/course/aws-sysops-administrator-associate-c02/

### AWS認定資格試験テキスト　AWS認定SysOpsアドミニストレーター - アソシエイト
動画で見ても理解できない点を理解するために本も見ました。

https://amzn.asia/d/80KgAL5


# 試験ガイドについて
6つの分野から問題が出されるそうなので、試験ガイドの中にある出題範囲のリストをベースに何となく大事そうだと思ったポイントを記載しておきます。

* S3のデフォルト暗号化をしても、オブジェクトアップロード時に暗号化方式を変更することが可能。必須化するにはバケットポリシーで強制する必要あり。

## 第 1 分野: モニタリング、ロギング、および修復 (採点対象コンテンツの 20%)
* Configルールからの自動修復lambda

## 第 2 分野: 信頼性と事業の継続性 (採点対象コンテンツの 16%)
* Trasted Advisorはベストプラクティス評価を行うが、サポートプランがBasicか有料プランかによりチェック範囲が異なる。
* 複数EC2を配置する際のプレイスメントグループ
    * クラスタープレイスメント・・・低レイテンシー
    * スプレッドプレイスメント・・・稼働するハードを分けて可用性をアップ
    * パーティションプレイスメント・・・リージョン内の異なるパーティション
## 第 3 分野: デプロイ、プロビジョニング、およびオートメーション (採点対象コンテンツの 18%)
* CloudFormation StackSets で Organization 配下のアカウントにデプロイ。 
## 第 4 分野: セキュリティとコンプライアンス (採点対象コンテンツの 16%)
## 第 5 分野: ネットワークとコンテンツ配信 (採点対象コンテンツの 18%)
* NATゲートウェイにセキュリティグループは適用されない
* EFSは各AZにマウントターゲットを作成することで低レイテンシーアクセスを実現できる
## 第 6 分野: コストとパフォーマンスの最適化 (採点対象コンテンツの 12%)
* RDSの接続数が多すぎる場合はRDS Proxyを構成してProxy経由の接続にすることで接続の共有・再利用ができる 

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/HostingWebsiteOnS3Setup.html


# 新橋航空会館テストセンター

正直なところ、SCS-C02にパスしていたので少し余裕と思っていた今回の試験ですが、勉強し始めてみると意外と特有の個所（Service Catalogなど）があって、少し苦労しました。

今回２度目となる新橋のテストセンターを利用しました。今回はかなり混んでいて受付に時間がかかりましたが、快適に試験を受けることができました。先月は言われなかったことですが、スマホの電源オフを目の前で見せるというしきたりが追加されました。

少し早めに到着して近くのスターバックスで直前の暗記を試みましたが、スターバックスの採用カジュアル面談のようなことをやっていたので気を取られてしまいました。

https://store.starbucks.co.jp/detail-5/


# おわりに

事前にネットで収集した情報通り、SCS-C02と問われる知識が重なる部分が多かったので、すぐに受けて正解だったと思います。とはいえ、試験中に自信がない問題に後で見直すマークを付けていったところ65問中の22問が当てはまる羽目に。この試験の採点基準は公開されていませんが最終的にパスしたので良かったです。

もう一つ、思いがけず嬉しかったのは、2年前に取得していたクラウドプラクティショナーが更新て、期限が3年に戻りました！

https://qiita.com/talomina/items/25d7c1dc8aedb499eb74

### ラボについて
下記のような案内があって、実際のコンソール画面操作を問われるラボの問題は出題されませんでした(3/8現在)。
>2023 年 3 月 28 日以降、追って通知するまで AWS Certified SysOps Administrator - Associate 試験で試験ラボの出題がなくなります。

# 参考文献

https://aws.amazon.com/jp/certification/certified-sysops-admin-associate/
AWS RDS Auroraのパラメーター

 ## Amazon RDS Auroraのインスタンスタイプの違い
- Serverless v2
  - 特徴: 自動的にスケールするサーバーレスアーキテクチャ
  - 用途: 変動の大きいワークロード、予測が難しい負荷パターン
  - メリット:
    - 使用したリソースに対してのみ課金
    - 最小・最大容量を設定可能
    - 数秒で自動スケーリング
    - 適している場面: 断続的な使用、開発/テスト環境、負荷予測が難しいアプリケーション
- メモリ最適化クラス (r クラス)
  - 特徴: 高いメモリ対CPU比率
  - 用途: メモリ集約型のデータベースワークロード
  - メリット:
    - 大規模なデータセットをメモリ内に保持
    - 高いクエリパフォーマンス
  - 適している場面: 本番環境の大規模データベース、分析処理、キャッシュ要件の高いアプリケーション
- バースト可能クラス (t クラス)
  - 特徴: ベースラインのCPUパフォーマンスと、必要時にバーストできる能力
  - 用途: 低〜中程度の負荷、CPU使用率が変動するワークロード
  - メリット:
    - コスト効率が高い
    - クレジットシステムでCPUバースト可能
  - 適している場面: 開発/テスト環境、小規模アプリケーション、負荷が一定でない環境
- 最適化された読み取りクラス (新規)
  - 特徴: 読み取り操作に最適化されたインスタンス
  - 用途: 読み取りが多いワークロード、リードレプリカ
  - メリット:
    - 読み取りクエリのパフォーマンスが向上
    - 読み取り重視のアプリケーションに対してコスト効率が良い
    - 適している場面: 読み取りの多いアプリケーション、分析ワークロード、レポート生成
    -
【備忘録】立方根ωの解説メモ【高校数学】

https://x.com/vs_prof_oak/status/1900781557276926329

たまたまこの投稿が気になったので自分用の備忘録として解説メモを残す。
解答が間違っていたら申し訳ないです。

# 問題文（引用）
以下問題文引用。
> $A×A=B$
> $B×B=A$
> $A≠B$
> のとき、$A+B=?$

# 解説（本家から引用）
https://x.com/vs_prof_oak/status/1901506532619034830
![GmNpSxubUAA98-Q.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3729100/ea7cc3f9-1d7a-4076-a38f-92c1f68b5ab3.png)

# 答え
答えは「-1」

# 解説メモ
## Bを消去してAのみの式にする
$B×B=A$に$A×A=B$を代入すると、
```math
\begin{align}
A^4&=A \\
A^3&=1 \tag{1}
\end{align}
```
となる。
## 立方根ωの解説
この式を因数分解すると
```math
(A-1)(A^2+A+1)=0 \tag{2}
```
解の公式$x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}$を用いると
```math
A=1,\frac{-1+\sqrt{3}i}{2},\frac{-1-\sqrt{3}i}{2}
```
となる。
このときの$\frac{-1+\sqrt{3}i}{2}$を二乗すると
```math
(\frac{-1+\sqrt{3}i}{2})^2=\frac{(-1+\sqrt{3}i)^2}{2^2}=\frac{-2-2\sqrt{3}i}{2^2}=\frac{-1-\sqrt{3}i}{2}
```
となり、
解の公式を用いて求めた$\frac{-1+\sqrt{3}i}{2}$と一致する。
$\omega=\frac{-1+\sqrt{3}i}{2}$とおくと
```math
A=1,\omega,\omega^2
```
となる。
この$\omega$を**立方根**という。
式(1)、式(2)及びその解より、
```math
\begin{align}
\omega^3&=1 \tag{3} \\
{\omega}^2+{\omega}+1&=0 \tag{4}
\end{align}
```
の性質を満たす。
## 立方根ωを用いて答えを求める
$A×A=B$より
```math
A+B=A+A^2=X
```
※問題文の「$?$」は「$X$」に置き換えた。
式(1)、式(3)より、$A$は立方根であるため、
```math
A+B=\omega+\omega^2=X
```
式(3)と式(4)の連立方程式を解くと
```math
X=-1
```
よって答えは「$-1$」となる。

# 参考文献
[1] [X(旧Twitter)投稿2025年3月15日@vs_prof_oak](https://x.com/vs_prof_oak/status/1900781557276926329)
[2] [１の３乗根（オメガ ω）をなるべくわかりやすく解説してみる（高校数学の知識庫）](https://math-souko.jp/post-3149)
[3] [三乗根（立方根）の意味と計算をわかりやすく（数学の星）](https://manabitimes.jp/math/3930)
[4] [二次方程式の解の公式の３通りの証明（高校数学の美しい物語）](https://manabitimes.jp/math/1064)
AWS SAP受かった記録

# AWS歴
3〜4年。オンプレマイグレーションとかネットワーク周り、Organizations、IAMあたりは全然やっていない。  
ていうか、やっていないサービスのほうが圧倒的に多い。
# やったこと
* リックテレコム社の教本、一通り一周、模擬試験1回分あり
* AWS Skill Builderのサブスクリプションして、模擬試験1回分
    * このためだけに課金する価値ある
* AWSが提供している公開模擬試験20問1回
* ClaudeAIに疑問点を壁打ち
* 公式ドキュメントちょい読み

# スコア
770点台。ギリギリ。  
やはり実際の問題が模擬試験より難しい。
AWS EC2でAnsibleの実行コマンドが永遠に弾かれた時の備忘録②

:::note info
エンジニア2年目が書いた記事として読んでね
:::

## 前回の振り返り
・Ansibleのお勉強をしたいよ
・ServerからClientへAnsible-playbookコマンドが弾かれるよ
・サーバの鍵をなくしている事でSSH接続できない事が原因

■ こういう事したい！([前回記事](https://qiita.com/inugasuki44/items/2846b6e69fdda6bd0910)から引用)
![スクリーンショット (65).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4026542/a8fc1f1a-9d73-4b7c-9873-436c641f2e2e.png)

### 公開鍵・秘密鍵のおさらい
良い機会なので改めておさらい

今のところのざっくりとした認識はこれ
・秘密鍵で暗号化したデータは、公開鍵でしか複合できない。
・公開鍵で暗号化したデータは、秘密鍵でしか複合できない。
・秘密鍵は原則外部に漏らしたらダメ！

今の問題を、この状況と照らし合わせてみる。

#### 問題① teratermからEC2(server)へアクセスできないのはなぜ？
鍵を再度取得する必要があるのは分かったが、公開鍵・秘密鍵どちらをPCのローカルに保存するべきなのだろうか

**"秘密鍵は外部に漏らしたらダメ"**

この一文に倣うなら、アクセス先のEC2(server)の公開鍵をローカルにおとしてきて、これを用いてEC2(server)にアクセスしようとしている。
と、考えるのが自然だと思ったが、実際はちょっと違う。

■参考にさせていただいた記事

https://zenn.dev/goldsaya/articles/39877e2cf11d4e

なるほど。
暗号化の対象は、ローカルから送信するデータであり、これを暗号化するための秘密鍵を（OpenSSHを用いる場合は).pemファイルとしてローカルに保存するのね。
そして公開鍵はEC2(server)へ自動保存されると。

#### 問題② EC2(Server)からEC2(Client)へSSH接続するにはどうする?
問題①で学んだから簡単！
EC2(Client)の.pemファイルを、EC2(Server)へ保存すればいいのね。

...あれ？どうやって？

と、思ったのも、.pemファイルはAWSのコンソール画面からブラウザを通じてダウンロードしている。
これをEC2(Server)へ保存させるにはどうするべきなのだろうか？

#### SCPってこうやればいいのか！
答えは「scpでローカルに保存した.pemファイルをEC2(Server)へ転送する」でした。
お仕事で、ローカルで作成したコマンドファイルをSQL実行サーバに転送するときにWinSCPを使った事はあったけど、実態はこういう事だったのね。学び。

SCPコマンド
PowerShellからEC2(Server)へ鍵転送!
~~~
$ scp -i EC2(Server)の鍵のパス 転送したいEC2(Client)の鍵のパス ec2-user@接続先IP:保存先パス
~~~

![スクリーンショット (46).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4026542/79877591-e891-4b62-acab-4cd2df206ada.png)

無事転送完了!

### 次回
EC2(Server)からEC2(Client)へのSSH接続をやっとこさ試せますね。



## 余談
実は前回記事でも記載したように、今回の環境は過去に作成したものを流用している。
ちょっと不都合があった関係で作り直しを行った。
どう問題があったのかをまとめる。

■理想の環境（前回記事から引用）
![スクリーンショット (65).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4026542/a77f5d11-a73a-4422-96a2-c4cef3205732.png)

■実際の環境
※実際のアドレス帯は違うんだけど、イメージ先行で一旦↓のように記載

![スクリーンショット (66).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4026542/6e425248-1792-4aa1-8130-27ddde8ca4b3.png)

### EC2がそれぞれ違うVPCに配置されている。
これの何が問題かっていうと、
・VPCをまたぐ通信のためには新しくNAT GWを配置する必要がある。※これが課金対象
・EC2(Client)側のアクセス制御に問題がある。

NAT GWは通信料に対して課金される。その他にVPC PearLinkなどの方法があるけど、一旦今回の検証範囲ではないのでまた今度

#### アクセス制御について
AWSを実際に利用した事がある人はわかると思うが、EC2を立てるときにSecurityGroupを作成する。
簡単に言うと、EC2ごとに設定できるステートフルなFWみたいなイメージ。

アクセス元のIPを制限するときには、以下の選択肢から選べる
・任意（0.0.0.0/0のアクセス許可）
・自分のIP（今アクセスしている自分の端末のGIP）
・カスタム（アドレス指定）

今回はEC2(Client)に、EC2(Server)以外からのSSH接続を拒否させたい。
EC2のローカルIPは自動割り当てで、今後変わる事を考えるとどうしたもんか...

調べていくと"アクセス元のSecurityGroupを指定できる"との事！

■ 参照

https://ent.iij.ad.jp/articles/1486/

ただ、異なるVPCのSecurityGroupは指定できない....うーん...

**作り直そう！**

### EC2って別のVPCに移行できるの？
vMotionみたいに簡単にぽーんと移動できる方法が無いか調べてみたんだけど...

https://repost.aws/ja/knowledge-center/move-ec2-instance

変更不可とのこと
既存のEC2をAMI(簡単にいうとテンプレート）にして、それを別のVPCで立て直す方法で事なきを得たんだけど、それはまた別記事で...
Linux入門：シンボリックリンクの基本と活用術をわかりやすく解説してみた

## はじめに
シンボリックリンク（シンボリック・リンク、symbolic link、またはsymlink）は、ファイルやディレクトリへの参照を作成する特殊なファイルです。

LinuxやmacOSなどのOSで利用可能であり、ショートカットのような役割を果たします。

## シンボリックリンクの特徴
- **参照元のファイルが削除されると、リンクが無効になる（壊れるリンク）**
- **異なるファイルシステムやパーティション間でも作成可能**
- **オリジナルのファイルとほぼ同様に扱える（開く、編集するなど）**
- **ハードリンクとは異なり、元ファイルがなくなると機能しなくなる**

https://envader.plus/course/16/scenario/1025

## シンボリックリンクの作成方法
### Linux / macOSの場合
LinuxやmacOSでは、`ln -s` コマンドを使用してシンボリックリンクを作成できます。

```sh
ln -s <ターゲットファイルまたはディレクトリ> <リンク名>
```

**例:**
```sh
ln -s /home/user/original.txt /home/user/link.txt
```
この場合、`/home/user/link.txt` が `/home/user/original.txt` を指すシンボリックリンクになります。

## シンボリックリンクの削除
シンボリックリンクを削除するには、通常のファイル削除コマンドを使用します。

### Linux / macOS
```sh
rm link.txt  # ファイルのリンク削除
rm -r linkdir  # ディレクトリのリンク削除
```

## シンボリックリンクの活用例
1. **設定ファイルの共有:**
   - `~/.vimrc` をクラウドストレージやGitリポジトリに保存し、異なる環境でシンボリックリンクを張ることで統一管理が可能。
   
2. **ディレクトリの整理:**
   - 大容量データを別のディスクに保存しつつ、元のディレクトリ構造を維持。
   
3. **開発環境の切り替え:**
   - プロジェクトの異なるバージョン間で特定のファイルやライブラリの切り替えが容易。

## まとめ
シンボリックリンクは、ファイルやディレクトリを仮想的に参照する便利な機能です。

:::note warn
**適切に活用すれば、ファイル管理や環境設定が効率的になります。**
:::

特にLinuxやmacOSのユーザーは日常的に活用することが多いため、基本的な使い方を理解しておくと便利です！
【Java】final修飾子

## はじめに
プログラムを実行したときに「値が null です」といったエラーを見たことはありませんか？
これは、変数を初期化せずに使ってしまったとき に発生するものです。
Javaでは、フィールドはデフォルト値（例えば String は null）が設定されるため、コンパイルは通りますが、
実行時に NullPointerException が発生する可能性があります。
final 修飾子を使うことで、変数の 再代入を防ぐ ことができ、意図しない変更を防止できます。

## final修飾子とは
final修飾子は、一度値を代入した変数は変更や上書きができないようにする役割があります。
これにより意図しない変更を防ぐことができます。
クラスやメソッドに関しても同様です。

- 変数へのfinal
    - 一度代入すると、値を変更することができない
- メソッドへのfinal
    - finalが付いているメソッドはオーバーライドできない
- クラスへのfinal
    - finalが付いているクラスへの継承はできない

## finalを使用する際のルール


##### 1. 変数に final を適用する場合
- finalをつけた変数は一度だけ代入できる
- フィールドかコンストラクタで必ず初期化する
##### 2. メソッドに final を適用する場合
- final メソッドは サブクラスでオーバーライドできない
##### 3. クラスに final を適用する場合
- final クラスは 継承できない

## 実際の使用例
簡単なので、変数の場合の例のみ紹介します
~~~java
class Sample{

   private final String name = "hogehoge";

   name = "piyo"; //これは再代入になるのでエラー

}
~~~
~~~java
class Sample{

   private final String name;

   //コンストラクタ
   public Sample(){
       name = "fuga";
   }

}
~~~

## さいごに
final を適切に使うことで、コードの安全性が高まり、意図しない変更を防ぐことができます。
ただし、むやみに final をつけると柔軟性が失われることもあるため、
「本当に変更してほしくない変数・メソッド・クラス」に使用するのがよいかと思います。
ネットワーク入門：Windows と Mac でネットワークを確認するコマンドについてまとめてみた

## はじめに
日常的にネットワークのトラブルが発生した際に、適切なコマンドを知っているとスムーズに問題を解決できます。

:::note info
**特に、Mac と Windows ではネットワークの確認方法が異なるため、環境に応じたコマンドを把握しておくことが重要です。**
:::

本記事では、これらの違いや具体的なコマンドの使い方をまとめました。

## 1. `ifconfig` とは？
`ifconfig` コマンドは、ネットワークインターフェースの設定や IP アドレスの確認、ネットワークのトラブルシューティングに利用される Unix 系 OS のコマンドです。

## 2. Mac でのネットワーク確認コマンド
Mac（macOS）は Unix ベースの OS であり、`ifconfig` やその他のコマンドを利用してネットワーク情報を取得できます。

### `ifconfig` を使ったネットワーク情報の確認
```bash
ifconfig
```
このコマンドを実行すると、現在のネットワークインターフェースの詳細情報が表示されます。

**実際のターミナル画面**

![Screenshot 2025-03-15 at 19.21.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/e0d59080-6681-4451-bd00-33248bc2ac49.png)

特定のインターフェース情報を取得したい場合は、以下のように指定します。
```bash
ifconfig en0
```
`en0` は一般的に Wi-Fi インターフェースを指します。

IP アドレスを確認するには、以下のように grep コマンドを組み合わせると便利です。
```bash
ifconfig en0 | grep "inet "
```

**実際のターミナル画面**

![Screenshot 2025-03-15 at 19.22.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/0ea2910f-0ad7-4e2e-8181-d713bb251b41.png)

### `networksetup` コマンド
Mac では `networksetup` を利用すると、より詳細なネットワーク情報を取得できます。

- **現在のネットワークサービスを一覧表示**
```bash
networksetup -listallnetworkservices
```

**実際のターミナル画面**

![Screenshot 2025-03-15 at 19.23.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/67b8d441-d5d8-431c-98d7-b00d2d33b11d.png)

- **Wi-Fi の現在の IP アドレスを取得**
```bash
networksetup -getinfo Wi-Fi
```

**実際のターミナル画面**

![Screenshot 2025-03-15 at 19.24.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/8ed45476-0b78-4080-a7ed-ac94edfcb6ac.png)

- **現在の DNS 設定を確認**
```bash
networksetup -getdnsservers Wi-Fi
```

**実際のターミナル画面**

![Screenshot 2025-03-15 at 19.26.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/87b3bed2-cc58-4aee-8953-0491f72cc3c3.png)

## 3. Windows でのネットワーク確認コマンド
Windows では `ipconfig` や `netsh`、`PowerShell` のコマンドを利用してネットワーク情報を確認できます。

### `ipconfig` を使ったネットワーク情報の確認
```cmd
ipconfig
```
このコマンドを実行すると、ネットワークアダプターごとの IP アドレスやサブネットマスク、デフォルトゲートウェイが表示されます。

より詳細な情報を取得するには、`/all` オプションを使います。
```cmd
ipconfig /all
```

### `netsh` コマンド
Windows では `netsh` を利用すると、より詳細なネットワーク情報を取得できます。

- **ネットワークインターフェースの設定を確認**
```cmd
netsh interface ip show config
```
- **Wi-Fi の詳細情報を確認**
```cmd
netsh wlan show interfaces
```
- **利用可能な Wi-Fi ネットワークを一覧表示**
```cmd
netsh wlan show networks
```

### PowerShell の `Get-NetIPAddress`
Windows では PowerShell を使用すると、より詳細なネットワーク情報を取得できます。

- **IP アドレスを取得**
```powershell
Get-NetIPAddress
```
- **ネットワークアダプターの詳細情報を取得**
```powershell
Get-NetAdapter
```
- **Wi-Fi の詳細設定を確認**
```powershell
Get-NetIPConfiguration
```

## 4. `ifconfig` の代替コマンド（Windows と Mac）

Windows と Mac では、ネットワーク情報を取得するためのコマンドが異なります。

| OS | `ifconfig` | 代替コマンド |
|----|-----------|--------------|
| Mac | ifconfig | ipconfig (一部機能) / networksetup |
| Windows | - | ipconfig / netsh / Get-NetIPAddress (PowerShell) |

## 5. まとめ
- **Mac** では `ifconfig` や `networksetup` を使用可能。
- **Windows** では `ipconfig`、`netsh`、`PowerShell` の `Get-NetIPAddress` を利用。
- 詳細情報を取得する場合は、Windows では `ipconfig /all`、Mac では `ifconfig en0` や `networksetup` を活用。

ネットワークトラブルが発生した際は、これらのコマンドを駆使して状況を確認し、適切に対応してみてください！
好きなアニメキャラクターをWeb上で自由自在に3Dダンスさせる方法（Three.js + DeepMotion）

![Video to GIF from Rakko Tools.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980785/67b420c2-8d6f-42c8-b05b-219a930a1520.gif)


# 好きなアニメキャラクターをWeb上で自由自在に3Dダンスさせる方法（Three.js + DeepMotion）

アニメが好きで自分の好きなアニメキャラクターに最近の人気な曲に合わせて自由自在にダンスさせて動かしたいという気分になったので、今回それをtreee.jsで実現しました。
※作成期間は２日でそんなに難しい内容ではありません

完成したデモはこちら👇（「Dance Motion」を押してください！🙇）
[デモサイト](https://3d-anime-mu.vercel.app/)

Github 
https://github.com/masaaki-imai/3D-anime


気に入ったらぜひ「いいね」をお願いします！😊

---

## 📌 使用した技術・ツール

- **Three.js**（3D表示ライブラリ）
- **DeepMotion**（動画からモーションを生成するSaaS）
- **Vroid Studio**（アニメキャラクター作成）
- **Cobalt**（YouTube動画ダウンロード）
- **Veed**（動画編集）

---

## 📌 完成までの流れ

以下の手順で進めます。

1. ダンスモーションの元動画を決める
2. 動画をダウンロード・加工する
3. DeepMotionでモーションを生成する
4. Vroid Studioでキャラクターを作成・GLB形式に変換する
5. Three.jsでキャラクターを動かす

---

## ① ダンスモーションの元動画を決める

今回は以下の動画を使用しました。

- **音楽**：YOASOBI「アイドル」
  [YouTubeリンク](https://www.youtube.com/watch?v=ZRtdQ81jPUQ)

- **ダンスモーション**：三桜じゅり【じゅりんぐる】様
  [YouTubeリンク](https://www.youtube.com/shorts/gYZzVHGrRcA)

---

## ② 動画をダウンロード・加工する

YouTubeの動画をダウンロードするには、以下のようなサービスを使います。

- [Cobalt](https://cobalt.tools/)（おすすめ）
- その他のYouTubeダウンロードツールでもOKです。

### 動画加工のポイント

DeepMotionでモーションを生成するためには、以下の条件を満たす必要があります。

- 動画の長さ：**20秒以内**
- フレームレート（FPS）：**30FPS**

動画編集には以下のツールがおすすめです。

- [Veed](https://www.veed.io/)
- その他の動画編集ソフトでもOKです。

---

## ③ DeepMotionでモーションを生成する

DeepMotionは、動画から3Dモーションを自動生成してくれる便利なサービスです。

- [DeepMotion公式サイト](https://www.deepmotion.com/)で無料アカウントを作成します。
- 加工した動画をアップロードし、モーションを生成します。
- 生成されたモーションをGLB形式でダウンロードします。

※DeepMotionはAPIも公開しているため、コードベースで自動化することも可能です（長期的な運用におすすめ）。

---

## ④ Vroid Studioでキャラクターを作成・GLB形式に変換する

アニメキャラクターを作成するには、Vroid Studioが便利です。

- [Vroid Studio公式サイト](https://vroid.com/en/studio)から無料でダウンロードできます。
- 作成したキャラクターをVRM形式でエクスポートします。
- VRM形式をGLB形式に変換するには、Webでいろいろありますがオンライン変換ツールを使います。

---

## ⑤ Three.jsでキャラクターを動かす

Three.jsを使って、ブラウザ上でキャラクターを動かします。

### プロジェクト構成　サンプル

```
3d-app
├── public
│   └── 3d
│       ├── idle.mp3
│       ├── kakeruze.glb
│       ├── kawaii22.glb
│       ├── motion.glb
│       └── original_movie.mp4
├── src
│   └── app
│       ├── globals.css
│       ├── layout.tsx
│       └── page.tsx
├── package.json
└── tsconfig.json
```


---

## 🎉 終わりに

以上の手順を応用すれば、自分の好きなアニメキャラクターを自由自在に動かすことが可能です。
ぜひ自分だけのオリジナル作品を作ってみてください！
以上です！
[Unity]License revoked: Your Unity Personal license has been revoked. の解決例

## 何が起きた？

久しぶりにunityを立ち上げたらこのエラーが出てきた。
webでunityのサイトを見ると問題なくログインできるので、手元がおかしそうだった。


## 原因

unityhubのバグとのこと


## 解決した方法

最新のunityhubをダウンロードし直す


## 参考にさせていただいた記事

https://qiita.com/ToneUs/items/d586772cec811b577d7b


## 補足

license管理ファイルを削除して立ち上げるとlicenseが再生成されてうまくいくと言う記事もあって、そちらも一時的にはうまくいったが、PCを立ち上げ直したら同じエラーが出てしまったので、自分の環境には適していなかった。

その後に見つけた[公式のスレッド](https://discussions.unity.com/t/what-the-hell-i-just-got-my-license-revoked/942460/32)では「（バグだったためバージョンアップで）修正された」と書いてあったのでこの方法であっていると思われる。

※公式スレの該当箇所
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555157/7f17510f-d9a2-488a-aff3-0ae5d7fc39c2.png)
Linux入門：diffコマンドとは？基本の使い方と覚えておきたいオプションについてまとめてみた

## はじめに

プログラムや設定ファイルの変更点を素早く確認できるツールは重要です。

:::note info
**特に開発やシステム管理では、どこが変わったのかを把握することが求められます。**
:::

本記事では、そのために役立つ `diff` コマンドの使い方を紹介します。

## 書こうと思ったきっかけ

ファイルの変更点を簡単に確認したい場面は多くあります。

:::note warn
***Gitを使わない場合でも、設定ファイルの差分をチェックする機会は多いです。***
:::

そのため、初心者でも分かりやすい `diff` コマンドの解説を書こうと思いました。

## diffコマンドの使い方

diffコマンドは、LinuxやUnix系OSで使用されるテキスト比較ツールの一つで、2つのファイルの差分を表示するために使用されます。

## 基本的な使い方

diffコマンドの基本的な構文は以下の通りです。

```
diff [オプション] ファイル1 ファイル2
```

例:
```
diff file1.txt file2.txt
```
このコマンドを実行すると、file1.txtとfile2.txtの違いが表示されます。

## 出力の見方

diffの出力は、変更された行を示す記号とともに表示されます。

- `<` はファイル1のみに存在する行を示す。
- `>` はファイル2のみに存在する行を示す。
- `d` は削除された行を示す。
- `a` は追加された行を示す。
- `c` は変更された行を示す。

例:
```
1,3c1,3
< Hello
< This is a test file.
< Goodbye
---
> Hello
> This is an updated test file.
> Goodbye
```
この場合、1〜3行目が変更されていることが分かります。

## よく使われるオプション

diffコマンドには様々なオプションがあり、用途に応じて使い分けることができます。

| オプション | 説明 |
|------------|--------------------------------------------|
| `-u`       | ユニファイドフォーマットで出力する |
| `-c`       | コンテキストフォーマットで出力する |
| `-i`       | 大文字と小文字を区別しない |
| `-w`       | 空白の違いを無視する |
| `-r`       | ディレクトリを再帰的に比較する |
| `-q`       | 差分の有無のみを表示する |
| `-s`       | 差分がない場合も「ファイルが同じ」と表示する |

### ユニファイドフォーマット (`-u`)
```
diff -u file1.txt file2.txt
```
このオプションを使うと、変更点がまとまりやすく、Gitの差分表示にも利用されます。

### 空白を無視 (`-w`)
```
diff -w file1.txt file2.txt
```
空白の違いを無視して比較する場合に便利です。

### 差分がない場合も表示 (`-s`)
```
diff -s file1.txt file2.txt
```
通常diffコマンドは差分がない場合には何も表示しませんが、`-s` オプションを使用すると、「ファイルが同じ」というメッセージが表示されます。

## ディレクトリの比較

diffはファイルだけでなく、ディレクトリの比較も可能です。
```
diff -r dir1 dir2
```
このコマンドを実行すると、dir1とdir2の中のファイルの違いが表示されます。

## diffの活用例

### ファイルの変更履歴を確認
複数のバージョンのファイルを比較し、変更点を確認することができます。

### 設定ファイルの比較
システムの設定ファイルを変更した際に、元の設定とどこが変わったかを確認するのに役立ちます。

### Gitでの変更確認
Gitでは`git diff`コマンドを使用して、リポジトリ内の変更を確認できます。

## まとめ

diffコマンドは、ファイルやディレクトリの変更を簡単に確認できる便利なツールです。

:::note warn
**オプションを活用することで、見やすいフォーマットで比較したり、特定の変更のみを抽出したりできます。**
:::

日常の開発やシステム管理で役立つので、ぜひ活用してみてください。
シェルの種類

## はじめに
シェルの種類について、まとめてみました。

## sh（エスエイチ）
正式名称は「Bourne Shell（ボーンシェル）」。
1977年にスティーブン＝ボーン（Stephen R. Bourne）氏が開発。
最も基本的なコマンド処理能力を持っているシェルで、bシェルと呼ばれる。
動作は高速ですが、機能面では他のシェルに比べて貧弱なため、主にシェルスクリプトの実行環境などに使われることが多い。
※シェルスクリプトとは、シェルに対する命令（コマンド）をあらかじめテキストファイルに保存したもの。複数コマンドを組み合わせた一連の捜査を、まとめて実行できる。


## bash（バッシュ）
「Bourne Again Shell」の略。
bシェルを拡張したシェルで、現在ではこちらをbシェルと呼ぶ場合もある。
Linuxでは標準シェルとして採用されており、最も広く知られたシェルだといえる。


## ksh（ケーシェル）
「Korn Shell」の略。
bシェルを拡張したシェルで、AT&T社のベル研究所のデビッド・コーン（David Korn）氏が開発した。


## csh（シーシェル）
「C shell」の略。
主にBSD系で採用されているシェルで、cシェルと呼ばれる。
C言語風のコマンド構文を持っているのが特徴。
※BSDとは、UNIX系OSおよび関連ソフトウェア群のことを指し、カリフォルニア大学バークレー校の開発者グループによって生み出されたもの。はじめはOSの中核部分でしか扱われなかったが、改良を重ねていってテキストエディタなどのソフトウェアが追加されたことで、実用的なソフトウェアとして扱えるようになった。

## tcsh（ティーシーシェル）
「T（TENEXもしくはTOPS-20C由来）C Shell」の略。
cシェルを拡張したシェルで、現在のBSD系OSでは標準のシェルになっている。
bashと並んで有名なシェル。
※TENEXは1969年にBBNがPDP-10用に開発したオペレーティングシステム(OS)で、後にDECのTOPS-20オペレーティングシステムのベースとなった。
※TOPS-20はデジタル・イクイップメント・コーポレーション(DEC)によるDECの36ビットメインフレームコンピューター用のプロプライエタリなOSで、PDP-10向けのTOPS-10の後継OSである。

## zsh（ゼットシェル）
「Z Shell」の略。
bシェルを拡張したシェルだが、tcshの機能も備えている。bシェル系、cシェル系、どちらの機能も使えるが、その代わり動作が遅いというデメリットがある。
zshの最初のバージョンは、1990年に、当時プリンストン大学の学生であったポール・ファルスタッドによって作成された。zshの名前は、当時プリンストン大学のティーチングアシスタントであったイェール大学教授Zhong Shaoのログイン名 "zsh" に由来して名付けられた。


## おわりに
ここまで読んでいただきありがとうございます！

## 参考文献
・https://envader.plus/course/7/scenario/1041
・https://kotobank.jp/word/bourne%E3%81%97%E3%81%88%E3%82%8B-2122399#:~:text=%E3%83%9C%E3%83%BC%E3%83%B3%E2%80%90%E3%82%B7%E3%82%A7%E3%83%AB%EF%BC%88Bourne%20shell%EF%BC%89,%E3%83%90%E3%83%83%E3%82%B7%E3%83%A5%20%E3%81%8C%E9%96%8B%E7%99%BA%E3%81%95%E3%82%8C%E3%81%9F%E3%80%82
・Linuxの絵本 サーバーOSが楽しくわかる9つの扉 単行本（ソフトカバー） – 2020/1/20
株式会社アンク (著)　p.10, 80
・https://www.sejuku.net/blog/54333
・https://e-words.jp/w/ksh.html
・https://e-words.jp/w/csh.html
・https://hnavi.co.jp/knowledge/blog/bsd-os/
・https://wa3.i-3-i.info/word11790.html#:~:text=tcsh%E3%81%AE%E6%AD%A3%E5%BC%8F%E5%90%8D%E7%A7%B0%E3%81%AF,%E3%81%8Csh%E7%B3%BB%E6%B4%BE%E9%96%A5%E3%81%A7%E3%81%99%E3%80%82
・https://www.weblio.jp/content/TENEX
・https://www.weblio.jp/content/TOPS-20
・https://ja.wikipedia.org/wiki/Z_Shell
CSSのpaddingをつけても横幅が広がらないようにする方法

# CSSのpaddingをつけても横幅が広がらないようにする方法

CSSで要素に`padding`を追加すると、通常はその分だけ要素の横幅が広がってしまいます。
`box-sizing: border-box;` を指定することで、横幅を固定したまま `padding` を適用することが可能です。

# 1. デフォルトの動作

CSSのデフォルトでは、要素の `width` は `content-box` で計算されます。
これは、 `padding` や `border` の分が追加されるため、指定した `width` よりも実際の横幅が大きくなります。

```CSS
.box {
  width: 200px;
  padding: 20px;
  border: 1px solid #000;
}
```

この場合、実際の要素の横幅は 200px + 20px + 20px = 240px となり、意図しないレイアウト崩れの原因になることがあります。

# 2. box-sizing: border-box; で解決

この問題を防ぐには、 `box-sizing: border-box;` を適用します。

```CSS
.box {
  width: 200px;
  padding: 20px;
  box-sizing: border-box;
  border: 1px solid #000;
}
```

この場合、`padding` を含めても `width: 200px` が維持されるため、レイアウトが崩れません。

# 3. ページ全体に適用する場合

すべての要素に `border-box` を適用したい場合は、以下のように `*` セレクタを使用するのが便利です。

```CSS
* {
  box-sizing: border-box;
}
```

これにより、すべての要素が `border-box` で計算され、予期しない横幅の変化を防ぐことができます。

# まとめ
* デフォルト`padding` や `border` を追加すると、要素が指定した `width` よりも広がる。
* `border-box` を使うと `width` の中に `padding` や `border` が含まれるため、横幅が変わらない。
* ページ全体に適用するなら `* { box-sizing: border-box; }` を使うと便利。

これを活用することで、余計なレイアウト崩れを防ぎ、スムーズなデザイン調整が可能になります！
Cloud RunでSeleniumスクレイピングWebアプリを実装したら503エラーに遭遇した話

# Cloud RunでSeleniumによるログインサイトのスクレイピングを実装したら503エラーに遭遇した話

## はじめに
ログインが必要なWebサイトから定期的にデータを取得する必要があり、Cloud RunとSeleniumを使用してWebアプリを実装しました。開発環境では問題なく動作していたものの、本番環境でのデプロイ後に503エラーが発生。この記事では、備忘としてその原因特定から解決までの過程を共有します。

## システム構成
### 使用技術
- Python 3.9
- Flask
- Selenium
- Cloud Run
- Docker
- gunicorn

### 実装の概要
1. ログイン処理の自動化
   - Seleniumによるフォーム入力
   - ログイン後のセッション維持
2. データ取得処理
   - 複数ページの巡回
   - テーブルデータの抽出
3. CSVファイル生成
   - pandasによるデータ整形
   - 出力ファイルの生成

## 発生した問題
### 1. 503 Service Unavailable
本番環境（Cloud Run）でのみ発生する503エラー：

javascript
Uncaught (in promise) SyntaxError: Unexpected token 'S', "Service Unavailable" is not valid JSON

### 2. 問題の切り分け
#### ローカル環境 vs 本番環境
- ローカル：正常動作
- 本番（Cloud Run）：503エラー

#### データ量による違い
- 30件（1ページ）：正常動作
- 150件（6ページ）：503エラー

### 3. 原因の特定
リソース使用状況を調査したところ：

メモリ消費の内訳：
- ChromeDriver: 200-300MB
- ページデータ: 50-100MB/ページ
- 取得データ: 1-2MB

合計: 約500-600MB

Cloud Runのデフォルト設定（512MB）では不足していることが判明。

## 解決策
### 1. タイムアウト設定の調整

dockerfile
Dockerfile
CMD exec gunicorn \
--timeout 3600 \ # 60分
--workers 1 \
--threads 8 \
--bind :$PORT \
app:app

### 2. Cloud Runのメモリ増設

bash
gcloud run deploy app-name \
--source . \
--timeout=3600 \
--region=asia-northeast1 \
--memory=1Gi



## 改善結果
1. パフォーマンス
   - 150件のデータ取得に成功
   - 6ページ分の巡回処理が安定動作
   - 503エラーの解消

2. 安定性
   - メモリ使用量の適正化
   - 処理時間の確保

## 学んだこと
### 1. Cloud Runでのスクレイピング実装時の注意点
- デフォルトメモリ（512MB）では不足するケースがある
- 適切なタイムアウト設定が重要
- ヘッドレスブラウザの動作を考慮したリソース設計

### 2. パフォーマンスチューニング
- メモリ使用量の事前見積もりが重要
- 段階的なテストによる問題の早期発見
- 本番環境に近い条件でのテスト実施

### 3. 本番環境特有の考慮点
- ローカル環境との動作の違いを意識
- リソース制限への適切な対応
- エラーハンドリングの重要性

## まとめ
- Cloud RunでのSeleniumスクレイピングは要注意
- メモリとタイムアウトの適切な設定が重要
- 段階的なテストと監視が必要

スクレイピング処理をCloud Runで実装する際は、特にメモリ使用量とタイムアウト設定に注意が必要です。本記事で紹介した方法で、より安定した運用が可能になるはずです。
CODESYSとかいう有能ソフトウェアPLC

最近お仕事でCODESYSを使用する機会が増えたので
CODESYSってこんなすごいんだぜ！ってのを簡単にまとめました

### 1. マルチプラットフォーム対応

CODESYSは Raspberry Pi、Windows、Linux など、さまざまなプラットフォームで動作
PLCのような制御をソフトウェアでできる

### 2. IEC 61131-3 準拠

CODESYSは、国際標準の IEC 61131-3 に準拠（日本ではあんまり知名度ないだ）

・ST（構造化テキスト）
・LD（ラダー図）
・FBD（ファンクションブロック図）
で記述可能

### 3. 直感的なGUIと豊富な機能

シミュレーション機能 や リアルタイムデバッグ を備えた直感的な開発環境が提供されいて、特にモニタリング機能が有能

LDでかいておけばデータがどこまで、どのような流れなのかパッと可視化できるので最高です
（お仕事でも実際、複数会社での組み合わせ試験にてどの会社のプログラムが異常値を流してるのか一目瞭然でした）

### 4. 豊富なハードウェア互換性

CODESYSは、多くのメーカーのハードウェアと互換性があり、
・EtherCAT
・Modbus
・CANopen
などの通信プロトコルにも対応

### 5. 拡張性の高さ

Pythonスクリプトとの連携や、Webサーバー機能 による遠隔監視、クラウドとの接続が可能
IOTにかなり強いですね
連載 [第2回] :ベトナムとのオフショア開発のギャップを埋める：コミュニケーションの関閉

連載 [第2回] :ベトナムオフショア開発の成功術：正しく理解して成功へ！
## ベトナムとのオフショア開発のギャップを埋める：コミュニケーションの関閉

※この記事は「ベトナムオフショア開発の成功術：正しく理解して成功へ！」シリーズの第2回です。

### はじめに

ベトナムにおけるオフショア開発で、一番大きなハードルになるのは「コミュニケーション」です。日本の会社とベトナムの開発チームとの間で、想定していたように情報が伝わらないことや、意図がずれることが少なくありません。この問題を解決するためには、互いの理解を深め、ちゃんとしたコミュニケーションプロセスを確立することが必要です。

### コミュニケーションのギャップ

以下のようなギャップが発生しがちです。

1. **技術的な理解のずれ**
   - 日本側の要件が準確に伝わらず、意図していた機能がついていないことも。
- システム構成が異なるため、意思の伝達が決定の點までに重大なストレスがかかる。

### 問題を解決するための手段

#### 1. 情報共有ツールの活用
- SlackやMicrosoft Teamsを活用することで、小さな問題も通信することが可能です。
- Confluenceなどで要件や詳細を可視化することが重要です。

#### 2. 決定を記録し、共有する
- 会議ノートやプロジェクトの解説資料を満足ないるため、まず最初にお互いの認識のギャップを埋めることが重要です。
- とくに、雑誌や誠実でない情報を基に決定をすることを避け、正しいコミュニケーションチャネルを利用することが必要です。

#### 2. 想定の見え方を共有
- 情報は共有するのは正しいですが、太その伝え方法も大事です。
- 友情共感ではなく、データと証拠に基づいたコミュニケーションを相手に輸出しることを意識すべきです。

### おわりに
ベトナムでのコミュニケーションは、コラボレーションを基本として、「高い逆伝性」と「実際的な想定力」を高めることが大切です。第3回の記事では、この話の7割を済ませるためにも必要な実務テクニックを解説していきます。お楽しみに。
UnityのWebGLビルドをしようとしたらBuilding Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js でビルドできなかった話

## 経緯
友人に自作アプリのレビューを依頼したかったのだが、彼はスマホはiOSでPCは持ち合わせていないとのこと。
しゃあなしでWebGLのビルドをすることに。
ぱぱっとサーバーアップロードを終えてレビューしてもらおうと思ったらまさかのエラー

エラーの内容は以下の通り
```
Building Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js failed with output:
Assertion failed: *task.currp, file C:\build\output\Unity-Technologies\emscripten-builder\emsdk\binaryen\main\src\wasm-traversal.h, line 313
emcc: error: '*****/Editor/Data/PlaybackEngines/WebGLSupport/BuildTools/Emscripten/binaryen\bin\wasm-opt --strip-dwarf --post-emscripten -O2 --low-memory-unused --zero-filled-memory --strip-debug --strip-producers Library/Bee/artifacts/WebGL/build/debug_WebGL_wasm/build.wasm -o Library/Bee/artifacts/WebGL/build/debug_WebGL_wasm/build.wasm --mvp-features' failed (returned 3221226505)
```

## 環境
|||
|---|---|
|OS | Windows11 
|Unity | 6000.0.41f1
|CPU | i7-13700KF 

## 結論から
原因はCPUでした。
詳しいことはIntelCPU問題とかでググってください。
対応するBIOSのアップデートを行えば解決する（はず）


## 解決までの道のり

### 試してみたこと

#### 1. Libraryフォルダ等の一時ファイルの削除→リビルド
これはよくある「おまじない」みたいなものだと思うのでとりあえずやってみる。
再起動後一発目のビルドログが変わったりすることもあるが数回やっているうちにタイトルのエラーに戻るため特に効果なし

#### 2. エディターのビルドログを確認
これも定番といえば定番。かなりの量があるため読む気が失せるのだけども、なんとか目を通す。
Clang関連のエラーのようでコンソールに表示されていたWebAssemblyのエラーとは少し毛色が違いそうだったので少し違和感。もう少し掘り下げてみることに(後述)
```
emcc: error: ～*****～ Library/Bee/artifacts/WebGL/il2cpp/release_WebGL_wasm/2sb31pli15pb.o' failed (returned 1)
*** Tundra build failed (6.83 seconds), 220 items updated, 214 evaluated
ExitCode: 3 Duration: 6s842ms
Building Library\Bee\artifacts\WebGL\il2cpp\release_WebGL_wasm\2sb31pli15pb.o failed with output:
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:

 ～中略～
 
clang: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 14.0.1 (https://github-com-cache.bf.unity3d.com/Unity-Technologies/llvm-project

```

#### 3. 別PCでの動作確認
もともとビルドをしようとしていたPCとは別に出先でも作業ができるようにと保有していたノートPCを引っ張り出してビルドを試してみることに。 OSはWindows11でUnityのバージョンも合わせて実行したのでハード面以外の環境はほぼ同じ。結果としてビルドが通ったのでハード関連に問題があるだろうというところまでは推測できた。

#### 4. バージョンを変える
Unity6のバグかとも思ったのでバージョンをかなり古いものに変更(2022.3.XXとか)
これもだめ。エラーの出方もほぼ同じ。

### ハード関連の問題でClangのエラー？
試行錯誤の結果を考えるとClangまわりはかなり怪しそう。ハードとのあれこれもありそうだし調べ方を変えてみた。
これまでのググり方としてはエラーメッセージでの検索を徹底していたがClangがきな臭いとのことで、WebGL Unity Clang Error とかで検索をかけてみることに。

それっぽいのがヒットした

https://discussions.unity.com/t/solved-build-error-while-il2cpp-webgl/945835/3

要約するとセーフモードで起動するとビルドできた。CPUの電圧をBIOSで下げたらいい感じになった。
というもの。

CPUの電圧下げるのは何か嫌だなーと思いつつセーフモードでの起動は試してみようと思い、ビルドまでしてみると見事にビルドが成功。
そうなるとCPUがかなりきな臭いのだが電圧下げるのは少し抵抗があった。
そこでぼーっと物思いにふけっていたところでふと「CPU 電圧」でIntel CPU問題のことを思い出した。
そういえばそんなものもあったなと少し検索をかけてみると、自分が使用しているCPUががっつり該当していることも明らかに（忘れてた）
そうと分かれば早速BIOSのアップデートを実行→Unityで再度ビルドを試してみる。

通った。

なんてこったい。
「まぁ影響でてないしアップデートめんどいからいいかぁ」などと考えていた昔の自分を殴りたい。


## さいごに

ハードウェア系の問題は早めに解決しよう。寿命も縮みかねないので。
XAMPPでの環境構築にてやったこと

## 前提
- PHP, JavaScript, MySQLのアーキテクチャをロリポップサーバーに載せたアプリを作りたい

## 手順
1. ロリポップのサーバーと契約 [契約はこちらから](https://lolipop.jp/)
1. XAMPPをダウンロード [インストールはこちらから](https://sourceforge.net/projects/xampp/)
    1. MySQLにチェック（DB）
    1. phpMyAdminにチェック（）
    1. それ以外は外してもいったん大丈夫
1. Laravelをインストール (Windows Ver) [参考サイト](https://kinsta.com/jp/knowledgebase/install-laravel/#windows-1)
    1. Composerをインストール [インストールはこちら](https://getcomposer.org/download/)
    1. cmdにてcomposerを使ってLaravelを指定のリポジトリに作成する
        ```
        composer create-project laravel/laravel app-name
        ```

    1. サーバーを起動する
        ```
        cd app-name
        ```

        ```
        php artisan serve
        ```

1. XAMPPを起動
    1.  Apache、MySQLを起動
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3811151/67c9daff-9677-4081-b86f-e81dfa40a4ab.png)
        - この際、ローカルのMySQLが動いていたらポート番号がかぶってエラーになるので、ポート番号をずらすか、ローカルのMySQLをアンインストールして回避しましょう。
1. MySQLの設定 [参考サイト](https://qiita.com/shotatanaka/items/25b0095b71223044c0e9)
    1. Userを作る
    1. DataBaseを作る
    1. tableを作る
        ```sql
        drop table if exists receipts;
        create table receipts (
          id int unsigned primary key auto_increment,
          user_id int unsigned foreign key ,
          regi_date date,
          store_name varchar(255),
          amount int,
          payment_type varchar(255),
          douhan varchar(255),
          invoice_no varchar(255),
          created_at datetime,
          updated_at datetime,
          deleted_flg tinyint(1) default 0
        );

        ```

1. マイグレーション
    1. 作ったLaravelフォルダ内の```.env```ファイルの```DB_CONNECTION```の値をsqliteからmysqlに変更
    1. DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORDも使用しているXAMPPのMySQLの値に変更
    1. マイグレートコマンドを実行
        ``` 
        php artisan migrate --force
        ```
    1. マイグレート出来たかどうかをMySQL側で確認
        - TABLEにmigrations, jobs, cache等が追加されていればOK

## まとめ
- 自分はこの手順で環境構築を行い、次のチュートリアルに進めた。
確定申告（一般口座株式譲渡益）の流れ

確定申告の操作の流れ（所要時間：90分）

01　Google検索　確定申告

02　国税庁 確定申告書等作成コーナー

03　作成開始

04　マイナンバーカードをお持ちですか　→　はい

05　マイナンバーカード読み取りに対応したスマートフォン　→　はい

06　認証方法の選択　→　スマートフォン

07　令和６年分の申告書の作成

08　所得税

09　マイナポータルと連携する

10　次へ進む

11　利用規約に同意して次へ

12　次にマイナポータルへ移動して、マイナンバーカード又はスマホ用電子証明書による認証を行います

13　次へ進む

14　二次元コードでログイン

15　スマートフォンで二次元コードを読み取ってログイン

※★ここで数分待たないと画面が変わらない

16　認証完了　次へ

17　e-Taxの登録状況の確認　次へ進む

18　e-Taxのご利用のための事前準備が終了しました　次へ進む

19　申告する方本人の情報を取得しますか。　→　取得する

20　家族分（被代理人）の情報を取得しますか。　→　取得しない

21　下のボタンをクリックして情報を取得してください。

22　利用規約　同意　次へ

23　連携

24　上記留意事項を確認した　次へ

25　医療費控除の適用を受けない場合は、「医療費通知（お知らせ）」を削除してください。
支払った医療費の額 x,xxx円

26　削除

27　申告書等を作成する

28　xmlデータの読込
医療費通知や寄附金控除など申告に関する電子データ（xml形式）をお持ちの方は、この画面で読み込むことができます。

29　ファイルを選択
xxxxxxxxxx_xxxxxxxx_xxxxxxxx_xxxx_xxx.xml（事前にふるさと納税サイトからDL）

30　年間寄附額 xxx,xxx円

31　全ての読込が完了したら「次へ」ボタンをクリック　次へ

32　本人情報の確認

33　申告する所得の選択
☑給与

34　株式を売った方、配当等を受け取った方
☑株式等の譲渡（売却）、配当、利子

35　お持ちの「給与所得の源泉徴収票」は1枚のみですか？　→　１枚

36　勤務先で年末調整が済んでいますか？　→　済んでいる

37　次へ

38　給与収入がある方で、「給与所得の源泉徴収票」等をお持ちの方

39　入力する（年末調整済み）

40　入力終了

41　入力された内容を基に計算した所得金額等は、以下のとおりです。

42　給与所得金額
x,xxx,xxx円

43　株式を売った方、配当等を受け取った方

44　申告分離課税
株式等の譲渡所得等

45「次へ」ボタンを押して、株式等の売却等や支払いを受けた配当、利子等に係る内容を入力します。　次へ

46　申告する特定口座での取引はありますか？ 　→　いいえ

47　特定口座（源泉徴収あり・源泉徴収なし）以外での株式、配当、利子等に関する取引がありましたか？　→　はい

48　株式等の売却等がありましたか？　→　はい

49　該当する株式等の取引を選択してください。
☑　特定口座（源泉徴収あり・源泉徴収なし）以外で上場株式等の売却がある

50　入力する

51　上場株式等の譲渡所得について、取引ごとに入力を行いますか？　はい

52　取引明細を入力する

入力する項目（事前に証券会社にログインして調べておく）
・譲渡年月日
・譲渡数量
・銘柄
・業者名
・収入金額
・譲渡手数料
・取得費（証券会社の時点で100円単位で丸められている、たぶん切り上げ）
・最後の取得年月日
・複数取得か

53　譲渡による収入金額の合計額
x,xxx,xxx円

54　取得費（取得価額）の合計額
x,xxx,xxx円

55　譲渡のための委託手数料の合計額
x,xxx円

56　次へ

57　上場株式等の譲渡の合計額入力　次へ

58　訂正する方は、「訂正する」ボタンを押してください。　次へ

59　上場株式等の配当等（申告するもの）や非上場株式等の配当等がありましたか？　いいえ

60　特定公社債等の利子等（申告するもの）や、国外で支払われる預金等の利子など国内で源泉徴収されないものがありましたか？　いいえ

70　令和5年分の申告で上場株式等に係る譲渡損失の金額を繰り越しましたか？　いいえ

71　入力終了

72　入力された内容を基に計算した所得金額等は、以下のとおりです。

【申告分離課税】
株式等の譲渡所得等
・上場株式等の譲渡所得等の金額
x,xxx,xxx円

73　次へ

74　ふるさと納税などの寄附をした方
入力アリ

75　次へ

76　生計を一にする配偶者がいる方

※★☆★ここで、配偶者のマイナンバーカードの券面情報が必要

77　申告者本人以外の控除対象となっている同一生計配偶者がいますか？

78　入力終了

79　入力された内容を基に計算した控除額は、以下のとおりです。

配偶者(特別)控除額
xxx,xxx円

基礎控除
xxx,xxx円

80　次へ

81　このまま進む場合は「次へ進む」を押してください。　次へ

82　納付する金額
xxx,xxx円
住民税等については、確定申告書に基づき市区町村で別途計算されます。

83　納付方法等の入力

84　納付方法の選択
電子納税e-Tax

85　e-Taxによる電子交付か郵送等による書面交付のどちらを希望しますか？　

86　次へ

87　次へ

88　氏名・電話番号の入力

89　マイナンバーの入力

90　送信前の申告内容確認　次へ

91　e-Tax送信　送信する

92　確定申告書データを送信しますが、よろしいですか。　送信を実行する

93　正常に送信が完了しました

94　送信票等印刷へ進む

95　申告書等送信票（兼送付書）等の確認　次へ

96　これで申告書等の送信は完了しました。
最後に、送信後の作業について確認してください。

97　ダイレクト納付（e-Taxによる口座振替）　→　今すぐ納付する

98　上記登録内容で、納付を行いますか。

99　送信された納付内容に基づき、ダイレクト納付を受け付けました。
指定した期日に登録口座から引き落としを行います。

ダイレクト納付指定日	令和7年3月17日
納付金額	xxx,xxx円
（途中）「sympyのplot 関数の引数に Piecewise関数を使いたい。」をAI先生に聞きました。



# sympyのdoc
・**Plotting**
　https://docs.sympy.org/latest/modules/plotting.html
・class sympy.functions.elementary.piecewise.**Piecewise**(*_args)
　https://docs.sympy.org/latest/modules/functions/elementary.html#piecewise

# ChatGPT先生へ
・質問リストの追番は無視して下さい。１個ずつです。途中の回答表示は省略しています。
・私の質問の仕方が悪かったです。
```
# 質問リスト
1. sympyのplot 関数の引数に Piecewise関数を使いたい。  
2. 例1をユーザー定義関数にして下さい。  
3. 上記の条件で、線種を増やして下さい。  
4. 上記を実行するとエラーがでます。AttributeError: 'bool' object has no attribute 'astype'  
5. 上記の条件で色の変更のみにして下さい。  
6. 上記の条件で、次の引数不要で。num_points=400, colors=["blue", "red", "green"]  
7. 最後のソースコードを出力するために、1回の質問で回答をもらうための、質問文を教えて下さい。  
```
・(私)(再)そうかあ。以下**私が何だかバージョンした気分です。**
```
最後のソースコードを出力するために、１回の質問で回答をもらうための、質問文を教えて下さい。
```
>質問文:
SymPy の Piecewise 関数をプロットする関数を作りたいです。条件ごとに異なる色（"blue", "red", "green"）で描画し、線種は変更しません。プロット範囲はデフォルトで (-5, 5)、プロット点数は 400 に固定してください。また、関数の引数として num_points や colors は不要です。これに対応する Python のコードを教えてください。

~~・私は恐ろしくて未実行です。~~

・ちょうど時間となりました。
・GPT-4o. の Free プランの制限に達しました。
**・「もっと簡易でお願いします。」と聞けませんでした。**


>ChatGPT の回答は必ずしも正しいとは限りません。重要な情報は確認するようにしてください。(回答抜粋)

# 以下間違っていました。申し訳ありません。

#### ~~修正後のコード~~

```python
import numpy as np
import sympy as sp
import matplotlib.pyplot as plt

def plot_piecewise(expr, x_range=(-5, 5)):
    """
    sympyのPiecewise関数をプロットし、各条件ごとに異なる色で描画する。

    Parameters:
        expr (sympy.Expr): sympyのPiecewise関数
        x_range (tuple): (xmin, xmax) の範囲（デフォルト: (-5, 5)）
    """
    x = sp.Symbol('x')
    conditions = expr.args  # Piecewise の条件と関数を取得
    colors = ["blue", "red", "green"]  # 固定の色リスト

    plt.figure(figsize=(8, 5))
    x_vals_full = np.linspace(x_range[0], x_range[1], 400)  # num_points = 400 固定

    for i, (func, cond) in enumerate(conditions):
        if i >= len(colors):  # 色が足りない場合の安全対策
            break
        
        # 条件を適用する範囲を決定
        if cond is True:  # 最後の条件（デフォルト）
            x_vals = x_vals_full
        else:
            cond_func = sp.lambdify(x, cond, 'numpy')  # 条件を numpy 関数に変換
            cond_vectorized = np.vectorize(lambda val: bool(cond_func(val)))  # ベクトル化
            mask = cond_vectorized(x_vals_full)  # True/False の配列
            x_vals = x_vals_full[mask]  # 条件に合う x 値のみ取得
        
        # sympy の関数を numpy 用に変換
        f_lambdified = sp.lambdify(x, func, 'numpy')
        y_vals = f_lambdified(x_vals)

        # プロット（色を変更）
        plt.plot(x_vals, y_vals, color=colors[i], label=f"Condition {i+1}")

    # 軸とグリッドを設定
    plt.axhline(0, color='black', linewidth=0.5)
    plt.axvline(0, color='black', linewidth=0.5)
    plt.legend()
    plt.grid()
    plt.show()

# 使用例
x = sp.Symbol('x')
f = sp.Piecewise((x**2, x < -2), (x + 1, (x >= -2) & (x < 2)), (-x, x >= 2))  
plot_piecewise(f)
```

# Gemini先生へ


# copilot先生へ

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

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

# いつもと違うおすすめです。
PHPで「do while文」の動作を確認してみた。

# 概要

PHPで「do while文」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/php/for/index5.html

# 実装

以下のファイルを作成しました。

```sample.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHPテスト</title>
</head>
<body>

<p>PHPのテストです。</p>

<p>
<?php
$num = 0;

do{
  print 'num = '.$num.'<br />';
  $num += 1;
}while ($num < 3);
?>
</p>

</body>
</html>
```

以下のコマンドを実行しました。

```
$ php sample.php 
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHPテスト</title>
</head>
<body>

<p>PHPのテストです。</p>

<p>
num = 0<br />num = 1<br />num = 2<br /></p>

</body>
</html>
```

# まとめ

何かの役に立てばと。