OmniAICreator/Qiita-1.07M huggingface dataset:
個人的備忘録：どっちが正解？TerraformとCloudFormationの使いどころを整理してみた

## はじめに

私はTerraformが一番好きなIaC（Infrastructure as Code）ツールだと思っています。でも実は、AWSのCloudFormation（クラウドフォーメーション）も好きです。

:::note info
***両者にはそれぞれの魅力と得意分野があり、使い分けを意識することでより効果的なインフラ構築が可能になります。***
:::

本記事では、TerraformとCloudFormationの違いや、それぞれの使いどころについて整理します。

## Terraformが好きな理由

- マルチクラウド対応でAWS以外でも使える
- モジュール化しやすく、再利用性が高い
- HCL（HashiCorp Configuration Language）が読みやすい
- `terraform plan` で事前に変更内容を確認できる安心感

https://qiita.com/free-honda/items/ba1893a93d6b7bd41315

## CloudFormationが好きな理由

- AWS公式ツールであり、AWSサービスとの統合が強力
- ネイティブなサービスとの整合性が高く、安心して使える
- マネジメントコンソールから簡単にスタックを管理できる
- YAMLやJSONで書けて、変更セットで差分確認も可能

https://qiita.com/free-honda/items/fd0bc9fa7ed840ac812e

https://qiita.com/free-honda/items/4d9c66ebbc12dbfe1d4e

## どう使い分ける？

以下のような視点で使い分けると良いと感じています。

| 目的・状況 | 推奨ツール | 理由 |
|-------------|------------|------|
| 複数クラウドやSaaSも管理したい | Terraform | AWS以外もまとめて管理できるため |
| AWS公式サポートを重視したい | CloudFormation | サポート範囲が明確で安定性が高い |
| チームで再利用性高く構築したい | Terraform | モジュール管理に長けている |
| 既存のAWS環境と密接に連携したい | CloudFormation | CloudWatch・IAMなどと親和性が高い |

## 実際にはどうしてる？

私は大規模インフラ構築ではTerraformを使い、AWSの細かいセキュリティーグループなど作るときはCloudFormationを採用することが多いです。

:::note warn
***どちらかにこだわるのではなく、**使い分けが大事**だと実感しています！***
:::

## まとめ

TerraformもCloudFormationも、それぞれに強みと魅力があります。大切なのは、目的や環境に応じて柔軟に選択すること。

:::note info
***好き嫌いではなく、目的志向でIaCツールを選べるようになると、インフラ構築の幅がぐっと広がります。***
:::

最終的には、「使い分けができるエンジニア」が一番かっこいいのかもしれません...！
メールの開封



+ [キャンペーンからリードや取引先責任者にリストメールを送付して、HTMLメールから 開封結果を確認しております。 ですが、夜中に送信しても1分後にはかなりの確率で開封されていたりします。 ](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000MaOmF)

:::note
最近のメールシステムでは不審な動きをしないか、受信時に内部的にクリックするような仕組みがあると思います。このような仕組みが働いて開封された結果となっているのではないでしょうか？ 

Taking Extra Steps: Evaluating Bot Clicks in Email Opens

If you’re also triggering automations off email clicks, this is a good opportunity to check your recipient lists for email security tools. These tools will pre-click every link in an email before delivering it to the recipient, who may then also click the links that are most interesting to them. 

You may have noticed this show up in your email reports or in a prospect report, where it might look like a recipient clicked every link in your email — including your social media links and privacy policies — in under a minute. Impressive, if it were true! 

https://thespotforpardot.com/2023/08/21/why-email-open-rate-is-dead-and-how-account-engagement-can-help/
:::

# 関連資料

+ [メールがスパムとしてマークされるのを防ぎ、高いメール到達率を達成する方法を学ぶ](https://qiita.com/Keiji_otsubo/items/c09634d5e7609ca84fc5)
Geminiで銃を使う魔法少女を描いてみた。

# 概要

Geminiで銃を使う魔法少女を描いてみました。

# 実装

プロンプトと実行結果は以下の通りです。

```
炎の銃を使う魔法少女を描いてみてください。
```

![炎の銃を使う魔法少女_20250418.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/ed51dd11-f795-45b6-8ad1-37b6b93c00bb.png)


```
氷の銃を使う魔法少女を描いてみてください。
```

![氷の銃を使う魔法少女_20250418.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/cb288f36-8b89-4fde-a6ce-d2cec509c57c.png)

```
電撃の銃を使う魔法少女を描いてみてください。 
```

![電撃の銃を使う魔法少女_20250418.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/b5887789-427d-4550-a5e4-2f643d534b34.png)


# まとめ

氷の子が可愛いかも。
何かの役に立てばと。
Terraformに恋した日：なぜ僕はTerraformを語るときエモくなってしまうのか、言語化してみた

## はじめに

インフラの構成管理やプロビジョニングツールとして有名なTerraform。この記事では、Terraformの魅力と、それを使いこなすために必要な前提知識について、自身の経験を交えてお伝えします。

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

受講しているITスクールのインフラ勉強会やハッカソンでTerraformを触る機会が増え、「Terraformって、なんでこんなにかっこいいんだろう？」と心から感じたことがありました。

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

その気持ちを素直に言語化し、誰かの学習モチベーションに繋がればと思い、備忘録としてまとめました。

## 今ではこんなこともできるようになりました！

こちらは、受講しているITスクールで構築したAWSインフラの構成図です。当時は手探りだった私も、今ではここまで複雑な構成を扱えるようになりました！

**AWSインフラ構成図**

![Screenshot 2025-04-18 at 6.32.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/b67a17ad-f3b8-44cd-b4bf-67dec06e2bd3.png)

## Terraformがかっこいい理由

Terraformが個人的にめちゃくちゃかっこいいと思う理由を、率直にまとめてみました。

- **まず名前がかっこいい**：Terraformという響きだけで技術的なロマンを感じます。
- **尊敬しているエンジニアが使っている**：自分の技術の目標としている人が使っていることが、モチベーションになります。
- **マルチクラウドに対応している**：AWSだけでなく、AzureやGCPにも対応している柔軟さ。
- **コードが動いている瞬間がかっこいい**：CLI上でインフラが構築されていくのを見ると、自分が世界を構築しているような気分になります。
- **インフラ学習の総合芸術**：設計・構築・自動化の美しさが詰まっていると感じます。

## 勘違いしてはいけないこと

Terraformは確かにかっこいいですが、いきなり使いこなせるものではありません。私自身、Terraformを使うまでに、実は2年間ほど毎日AWSのマネジメントコンソールを使っていました。

:::note alert
今でこそ、自分の理解できる範囲をコード化して動かすことができていますが、**「わからないこと」はコード化できません。**
:::

つまり、Terraformを使う前提として、クラウドサービスの仕組みやネットワーク、セキュリティなど、基礎的な理解が必要です。

## 結論：まずはマネジメントコンソールを触ること

結論として言いたいのは、「まずはAWSのマネジメントコンソールの経験がすごく大事」ということです。

:::note info
***その経験を通してサービスの構造を理解し、その先にTerraformによる自動化や構築の世界が待っています...！！***
:::

最初から全部をコード化するのではなく、**手動で構築できる範囲から部分的にTerraformを使う**。そうやって、少しずつIaCの技術領域を広げていくのがおすすめです。

## まとめ

Terraformは単なるツールではなく、インフラ学習の集大成とも言える存在。まずはマネジメントコンソールでしっかりとインフラに触れる経験を積み、その後でTerraformを使って、より美しいインフラの構築を楽しんでみてください！
個人的備忘録：Terraformでよく見る「HCL」って結局なに？構文と特徴を整理してみた

## はじめに

インフラの構成管理やプロビジョニングツールとして有名なTerraform。その中心で使用されている記述言語が、HCL（HashiCorp Configuration Language）です。

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

本記事では、HCLの特徴や基本構文、なぜ使われるのかといった観点から解説します。

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

受講しているITスクールのインフラ勉強会に参加いただいた受講生の方から、「HCLとYAML、JSONの違い」についてご質問をいただきました。

Terraformを学ぶ中で戸惑うポイントのひとつでもあるため、この機会にHCLの正体や特徴を整理し、より深くIaC（Infrastructure as Code）を理解するための備忘録としてまとめることにしました。

## HCLとは？

HCL（HashiCorp Configuration Language）は、HashiCorp社が開発したドメイン固有言語（DSL）で、主にTerraformなど同社製品で使用されています。

https://qiita.com/free-honda/items/19b4e7db8b8f24d41277

https://qiita.com/free-honda/items/682e29d92e60e2d17681

- **人間にとって読みやすい**
- **JSONと互換性がある**
- **宣言的（Declarative）な構成**

という特徴を持ちます。

## HCLの特徴

### 1. 宣言的構文
HCLは処理手順ではなく、"どういう状態にしたいか" を記述します。これはTerraformのようなIaCツールとの相性が良く、状態管理に適しています。

```hcl
resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}
```

### 2. ブロック構造
HCLでは、ブロック（block）でリソースやプロバイダーを記述します。

```hcl
provider "aws" {
  region = "us-west-2"
}
```

### 3. 変数の定義と参照
変数を定義して再利用性を高めることができます。

```hcl
variable "region" {
  default = "us-east-1"
}
```

参照：`var.region`

### 4. 条件式やループも可能
```hcl
count = var.enable_instance ? 1 : 0
```

```hcl
tags = {
  Name = "example-instance"
  Env  = "${var.environment}"
}
```

## JSONとの違い
HCLはJSONよりも柔軟で人間に優しい構文を提供します。実際、HCLは内部的にJSONに変換されて処理されることが多いため、JSONとの互換性も保たれています。

| 比較項目 | HCL | JSON |
|----------|-----|------|
| 可読性   | 高い | 低い（カンマや構文ミスに注意） |
| 柔軟性   | 高い | 低い |
| コメント | 可能（#または//） | 不可 |

## HCLが使われる主なツール
- Terraform（インフラの構成管理）
- Vault（秘密情報の管理）

## まとめ

HCLはTerraformなどのインフラ管理ツールを支える記述言語として非常に重要です。

:::note warn
***その可読性の高さと柔軟性、宣言的な構文は、IaCを実現する上での大きな武器となります。***
:::

今後、Terraformなどを本格的に運用していくにあたって、HCLをしっかり理解することは欠かせないと思います...！
ソフトウェアの知識を物の整理に活用できるか（１）

ＡＩ執筆が常習化して、自分のライティングスキルが低下しないように、たまに自分で考え自分で書くことにする。
これからは、こういうスキルが人類として稀有なものになることが、目に見えているので・・・

今週は東京でNexTechJAPANに出張してきた。中でもこれからはロボット開発がＡＩ業界の主戦場になることが目に見えてきている。
しかしながら、ソフト開発とは違って、物つくりは極めて課題が大きく、これを実現するためのハードルは極めて高いと言える。
そんなことを考えると、ＡＩエージェントと人間が共存するにあたり、やはり一番の最適解は人間の世界にＡＩロボットが入るのではなく、ＡＩエージェントの世界に人間が入ることが手っ取り早い

人類の進化の延長上に、人間の脳がＡＩエージェントで拡張されたものだと仮定すると、人間の様式自体も現実の世界から離脱して、デジタルの仮想空間に置き換えるほうが進化としては手っ取り早い・・・
ＡＩエージェントの進化は、人類が何万年をかけて進化してきたプロセスに対して、指数的に増大することが予想されている。
一方、ロボットはどうだろうか・・・
ちょっとした思考をしたのであるが、実にたやすいタスクではあるものの、やはりロボットにははるかに難しいタスクであることが分かる。

－－－－－－－－－－－－－－－－－－－－－－－－－－－－
以下、上記の結論に至った試行錯誤


https://manus.im/share/OA2cTgLXI1Rz8aoyaZYl6a?replay=1
コード作成エージェントの最大の課題はゴミファイル整理

ここんとこ、登山動画の自動編集タスクに取り組んできたが、最大の課題は大量のぶっ壊れたファイルが生成して、何の進展もできなくなったという結果である。
現時点でも全く成果物にたどり着けず、その間に自分の登山動画の素材だけはたまっていく・・・

そんな中で唯一の頼みの綱であるＡＩエージェントが見つかった・・・

それはＺＩＰファイルを扱えるＭＡＮＵＳ（マナスちゃん）である（あまりにも愛らしいので愛称をつけちゃいました）

ここんとこで、最大にお世話になりそうなのがファイルの整理です。
以下のようにZIPファイルを受け付けてくれるので、これは丸ごとプロジェクトごと渡せるので、ゴミファイル整理には最高である。

とりあえず、試した検討は以下にあるので見てください。

https://manus.im/share/ETFOnpiMSHX0QI0m0znzj1?replay=1
Rocky Linux 9でSlurmのセットアップ


# Rocky Linux 9.4にSlurmをセットアップする際のメモ

## サーバ環境

計算サーバは１台でヘッドノード兼用とする。
ホスト名はHostA。
4コア使用。
ジョブ記録用DBのMariaDBは使用しない。
作業はrootで行う。

## ホスト名の設定

ホスト名が設定されているか

```
# hostname
```

で確認する。設定されていない場合は下記の用に設定する。

```
# hostnamectl set-hostname HostA
# systemctl restart systemd-hostnamed
```

ループバックアドレスにホスト名を設定しておく。(ネットワークのアドレスでもOK)
/etc/hostsに

```
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 HostA
```

とHostAを追加する。

## パッケージのインストール

```
# dnf groupinstall "Development Tools" -y
# dnf install -y epel-release
# dnf install -y munge munge-devel \
    slurm slurm-slurmctld slurm-slurmd \
    slurm-perlapi slurm-devel
```

## MUNGE認証の設定

```
# /usr/sbin/create-munge-key
# systemctl enable --now munge
```

## Slurmの設定

/etc/slurm/slurm.conf を編集してホスト名とCPU数等を変更する。

```
SelectType=select/cons_tres
SelectTypeParameters=CR_CPU

SlurmctldHost=HostA
NodeName=HostA CPUs=4 State=UNKNOWN
```

## Slurmのユーザーとディレクトリを作成
```
# useradd -m slurm
# mkdir -p /var/spool/slurm/state /var/spool/slurmd /var/log/slurm
# chown -R slurm: /var/spool/slurm /var/spool/slurmd /var/log/slurm
```

## サービスの起動
```
# systemctl enable --now slurmctld
# systemctl enable --now slurmd
```

## 動作確認(一般ユーザで実行)
```
$ sinfo           # ノード状態の確認
$ squeue          # ジョブの確認
$ srun hostname   # 簡単なジョブの実行

$ vi test.sh
#!/bin/bash
pwd

$ sbatch test.sh       # 簡単なジョブの投入
$ sbatch -c 4 test.sh  # 複数CPU使用のジョブの投入
$ ls slurm-*.out       # 出力ファイル確認
$ sbatch -c 5 test.sh  # 複数CPU使用のジョブの投入
$ squeue               # ジョブが実行されないことを確認
$ scancel [ジョブ番号]  # ジョブの削除
$ squeue               # ジョブの削除を確認
```
応用情報技術者試験対策：アジャイル開発の重要用語まとめ

# 初めに
応用情報技術者試験に向けてアジャイル開発に関する用語をごく簡単にまとめたものです。
ぱっとみて概要を思い出す用にまとめました。

## アジャイル開発とは
アジャイル開発とは、変化の激しい要求や環境に柔軟に対応しながら、価値のあるソフトウェアを短いサイクルで継続的に届けていく開発手法です。

このアプローチでは、たとえば **スクラム** や **エクストリームプログラミング（XP）** のようなフレームワークや実践手法がよく使われます。これらはいずれも「計画通りに進める」よりも、「チームで対話しながら、動くソフトウェアをこまめに作って確認する」ことを大事にしています。

開発チームはまず、必要な機能やタスクを **バックログ** という形で整理・可視化します。そして、その中から優先度の高い項目を選び、短期間（通常1〜4週間）の **スプリント** に分けて開発を進めていきます。
さらに、XPではペアプログラミングやテスト駆動開発といった技術的プラクティスを通して、品質を保ちながら素早く改善・リリースする姿勢を強調します。

このように、アジャイル開発は スクラムのような管理手法 と XPのような技術的手法 を組み合わせ、バックログやスプリントによって継続的な価値提供を実現する開発スタイルです。

## 目次
- [アジャイル開発とは](#アジャイル開発とは)
  - [目次](#目次)
    - [スクラム（Scrum）](#スクラムscrum)
    - [スプリント（Sprint）](#スプリントsprint)
    - [スプリントプランニング](#スプリントプランニング)
    - [デイリースクラム（デイリースタンドアップ）](#デイリースクラムデイリースタンドアップ)
    - [スプリントレビュー](#スプリントレビュー)
    - [スプリントレトロスペクティブ](#スプリントレトロスペクティブ)
    - [プロダクトバックログ](#プロダクトバックログ)
    - [スプリントバックログ](#スプリントバックログ)
    - [バーンダウンチャート](#バーンダウンチャート)
    - [プロダクトオーナー](#プロダクトオーナー)
    - [スクラムマスター](#スクラムマスター)
    - [開発チーム](#開発チーム)
    - [ベロシティ](#ベロシティ)
    - [ユーザーストーリー](#ユーザーストーリー)
    - [ストーリーポイント](#ストーリーポイント)
    - [継続的インテグレーション（CI）](#継続的インテグレーションci)
    - [継続的デリバリー（CD）](#継続的デリバリーcd)
    - [テスト駆動開発（TDD）](#テスト駆動開発tdd)
    - [ペアプログラミング](#ペアプログラミング)
    - [リファクタリング](#リファクタリング)
    - [カンバン（Kanban）](#カンバンkanban)
    - [リーンソフトウェア開発](#リーンソフトウェア開発)
    - [DevOps](#devops)
    - [プロジェクトファシリテーション](#プロジェクトファシリテーション)

### スクラム（Scrum）
* アジャイル開発のフレームワークの一つ。プロジェクト管理に使用。

### スプリント（Sprint）
* スクラムで使用される短い開発サイクル。通常2-4週間程度。

### スプリントプランニング
* スプリントの開始前に行われる計画会議。タスクの割り当てを行う。

### デイリースクラム（デイリースタンドアップ）
* スプリント中の日常会議。進捗状況を共有し、問題を解決する。

### スプリントレビュー
* スプリント終了後のレビュー会議。成果物を共有し、フィードバックを得る。

### スプリントレトロスペクティブ
* スプリント終了後の反省会議。プロセスの改善に役立つ。

### プロダクトバックログ
* プロジェクトの全体的なタスクリスト。優先順位がつけられている。

### スプリントバックログ
* スプリント中に完了するタスクリスト。プロダクトバックログから選択される。

### バーンダウンチャート
* スプリント中の残作業量をグラフで表示するツール。進捗状況を可視化する。

### プロダクトオーナー
* プロダクトバックログの所有者。プロジェクトのビジョンと目標を決定する。

### スクラムマスター
* スクラムチームのコーチ。プロセスをスムーズに進めるためのサポートを行う。

### 開発チーム
* プロジェクトを実行するチーム。スクラムチームの一部。

### ベロシティ
* チームがスプリントで完了できる作業量を示す指標。

### ユーザーストーリー
* ユーザーの視点から記述された機能要件。プロダクトバックログに含まれる。
* 「機能やサービス」など開発すべきアイテムについて書き、「なぜそれが必要なのか」をまとめたもの

### ストーリーポイント
* ユーザーストーリーの相対的な規模や複雑さを示す単位。

### 継続的インテグレーション（CI）
* コードの変更を自動的にビルド、テストするプロセス。
* 変更が加えられるたびに自動で品質チェックを行うことで、バグの早期発見が可能になり、品質の高いソフトウェアを迅速に開発できる。

### 継続的デリバリー（CD）
* コードの変更を自動的にリリースするプロセス。
* 本番環境へのデプロイを自動化・高速化することで、リリースの手間やリスクを減らし、ビジネス要求に素早く応えることができる。

### テスト駆動開発（TDD）
* テストを先に書いてからコードを書く開発手法。

### ペアプログラミング
* 二人の開発者が一つのコンピュータで協力してコードを書く手法。

### リファクタリング
* コードの品質を向上させるために行う改善作業。

### カンバン（Kanban）
* 作業の流れを可視化し、ボトルネックを特定するための手法。
* 課題や開発タスクの状態（例：バックログ、進行中、レビュー中、完了など）を管理する
* 作業状況の見える化

### リーンソフトウェア開発
* 無駄を排除し、効率的な開発を目指す手法。
  * 不要な機能を作らない
  * 作業の見える化
  * 早期フィードバック
  * 意思決定の遅延の許容
  * 品質の組み込み
  * 知識の共有
  * 小さなバッチサイズ

### DevOps
* 開発と運用の境界をなくすための文化、実践、ツールの集合。

### プロジェクトファシリテーション
* プロジェクトの進行を支援するための活動。スクラムマスターが行う。
ワールド紹介2025年４月分（記録ログ用

https://x.com/vrc_machida0312/status/1912920052850102639
だらだら系
V睡系

https://x.com/vrc_machida0312/status/1912918408108322873
だらだら系
V睡系

https://x.com/vrc_machida0312/status/1912916546558869949
写真系
皆で探索

https://x.com/vrc_machida0312/status/1912565561596526969
AKYO
オモシロ
AKYOがしゃべる

https://x.com/vrc_machida0312/status/1912556371003973872
少人数でまったり
ベッドルームあり
色のセンスよい

https://x.com/vrc_machida0312/status/1912567924554096814
ガチのUFOキャッチャーができる
ちょうせまい
ペン有

https://x.com/vrc_machida0312/status/1912566458338652526
面白系
大人数おすすめ
おもしろラーメンをつくれる

https://x.com/vrc_machida0312/status/1912563467258851441
ガチ都会温泉のワールド
バスタオルの衣装テスターの写真によさそう
仮想環境外で pip install してしまった事故を防ぐ：PowerShell ラッパーで二重確認を導入する

## はじめに

Python で機械学習ライブラリなどを扱っていると、**仮想環境（venv）に入っているつもりが入っていなかった**という事故は一度は経験するのではないだろうか。  
特に `pip install torch` を仮想環境外に打ってしまったときの絶望感といったらない。

本稿では、**「うっかり非venv環境にライブラリをインストールしてしまう事故」** を防ぐために作成した PowerShell 関数を紹介する。  
これは「正気か？」と二度聞いてくることで、実行者の正気を確認するラッパー関数である。

## 免責
記事含めAIに概ね作成させた。  
動確はしたが予想外の被害が発生してもこれを保証しない



## 背景：事故の経緯

仮想環境（venv）に入って作業していたつもりが、別プロジェクト用のターミナルを開いてしまっていた。

その状態で、特に何の疑問も持たずに以下を実行してしまった。

```bash
pip install torch torchvision torchaudio
```

結果、グローバルなPython環境にPyTorchが入った。基本すべてをvenvで隔離しているので私は問題ないのだが、
この事件をきっかけに、**仮想環境に入っていないときは本当にインストールしていいのかを二度確認する仕組み**を導入したいと考えた。
インストールさせる時間ももったいないからね。

## 作ったもの

以下に示すのは、`pip` や `python -m pip` に対する **PowerShell のラッパー関数**である。  
特徴は以下のとおり。

- venv環境下でないときにのみ作動する
- `pip install` または `python -m pip install` を検出する
- 二段階の確認を求める（Y/N → 「正気です」）

```powershell
# --- 確認用関数 ---
function Invoke-PipInstallConfirm {
    [CmdletBinding()]
    param(
        [string]$CommandName,
        [string[]]$Args
    )

    $inVenv = -not [string]::IsNullOrEmpty($Env:VIRTUAL_ENV)

    if (-not $inVenv -and (
         ($CommandName -eq 'pip' -and $Args[0] -eq 'install') -or
         ($CommandName -eq 'python' -and $Args.Count -ge 3 -and $Args[0] -eq '-m' -and $Args[1] -eq 'pip' -and $Args[2] -eq 'install')
       )) {

        Write-Host '正気か？いいのか？ (Y/N)' -ForegroundColor Yellow
        if ((Read-Host) -notmatch '^[Yy]$') {
            Write-Host '中止します。'
            return $false
        }

        Write-Host '二度目の確認: 「正気です」とタイプしてください' -ForegroundColor Yellow
        if ((Read-Host) -ne '正気です') {
            Write-Host '中止します。'
            return $false
        }
    }

    return $true
}
```

この関数を使い、`pip` および `python` コマンド自体をラップする。

```powershell
# --- pip ラッパー ---
function pip {
    [CmdletBinding(DefaultParameterSetName = 'Default')]
    param(
        [Parameter(ValueFromRemainingArguments = $true)]
        [string[]]$Args
    )

    if (-not (Invoke-PipInstallConfirm -CommandName 'pip' -Args $Args)) {
        return
    }
    & pip.exe @Args
}

# --- python ラッパー ---
function python {
    [CmdletBinding(DefaultParameterSetName = 'Default')]
    param(
        [Parameter(ValueFromRemainingArguments = $true)]
        [string[]]$Args
    )

    if (-not (Invoke-PipInstallConfirm -CommandName 'python' -Args $Args)) {
        return
    }
    & python.exe @Args
}
```



## 使い方

PowerShell の `Microsoft.PowerShell_profile.ps1` に貼り付ければよい。

```powershell
notepad $PROFILE
```

そしてターミナルを開き直せば有効になる。


## 使用例

venvに入っていないときに実行すると、以下のように2段階で確認が入る：

```text
正気か？いいのか？ (Y/N)
> N
中止します。
```

または

```text
正気か？いいのか？ (Y/N)
> Y
二度目の確認: 「正気です」とタイプしてください
> いいえ
中止します。
```


## 注意点

- `pip show`, `pip list` などの操作には干渉しない
- あくまで「venv未使用のとき」にだけ警告するので、仮想環境を正しく使っている限り邪魔にならない
- WSL環境などで仮想環境の判定が機能しないケースは手動確認が必要


## おわりに

venvを前提としたPython開発において、**「グローバル環境にインストールしてしまった事故」** は大きな混乱を招くことが多い。  
このような事故を未然に防ぐため、**機械的な安全装置を導入すること** は非常に有効である。

「正気か？」と問いかけられることで、一度落ち着いて手元の環境を見直すことができる。  
この記事が、同じような事故に悩む誰かの助けになれば幸いである。


## おまけ：なぜ「正気です」なのか？

「Y」や「N」は勢いで押してしまうことがあるが、「正気です」とはっきり書かせることで、**意思と注意を再確認**させる。  
これは悪意ある実行防止というより、**本人が後で後悔しないようにするための自己防衛策**である。
ARP:)

# ARPを使う：）

## ARPとは：０

- ネットワーク通信においてIPアドレスを物理アドレス（MACアドレス）に変換するためのプロトコル  

## ARP実用：）

- MACアドレスはわかるけどipアドレスがわからないとき
- ipアドレスはわかるけどMACアドレスがわからないとき
- IPアドレスとMACアドレスの関係一覧を見たいとき

### シチュエーション

#### MACアドレスはわかるけどipアドレスがわからないとき

ネットワークをいじるとIPアドレスを割り当てる機器をまとめたスプレッドシートを作りたくなる  
こんなの  
![IPアドレスをまとめたスプレッドシートの画像(IPアドレスが一部欠けている)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/795607/4342838f-684c-4c83-988e-108c8622e892.png)
  
ここに新たに機器を追加する時にIPアドレス事前に設定し忘れたり控え忘れるとめんどくさくなる:(  
ディスプレイがある機器は実機に確認する機能があったりするがない奴がいる(主にスイッチ系)こういう子はラベルにMACアドレスが乗ってたりする:)  
ここでRARP(Reverse Address Resolution Protocol)が活躍する(俺の中で)  
ただwinだとデフォルトでは乗ってない:( 理由はDHCPがないころに使っていたから？サーバが使うものだからかも(要.裏どり)  

#### ipアドレスはわかるけどMACアドレスがわからないとき  

前項のスプレッドシートがIPアドレスじゃなくてMACアドレスがわからないとき  
この時はARPテーブルを見てIPアドレスが存在しなかったらARPリクエストを送るなり、pingを送るなりすればキャッシュされここに乗るので、わざわざコンソールに入ったりラベルを見なくて済む:)

### 注意点

ARPはL2レイヤーで動くから使っているPCが同じブロードキャストドメインに存在する必要がある  
こんな感じで二つのブロードキャストドメインをルータでぶった切るとARPテーブルには乗らなくなる  
![二つのブロードキャストドメインをルータでつないでいる画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/795607/50ee1214-df02-470b-bbe2-5f6dd3aed225.png)  

スプレッドシートにするとこんな感じ  
![1Fと2Fでネットワークを分けたIPアドレス一覧スプレッドシート画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/795607/d9c05f45-6957-45b5-b169-6411bd17affa.png)

実際にfatherpcからprinterにpingを飛ばして疎通テストをしてからARPテーブルを見てみる  
![pingを飛ばして疎通テスト後ARPテーブルを確認している画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/795607/188ad5e2-aebc-40dd-8e3a-e474fc2e9efb.png)
 
となりのネットワーク(192.168.70.0)にも疎通は取れているがARPテーブルで持っているのは自身が所属するネットワーク(192.168.40.0)にある2つだけ。  
となりのネットワーク(192.168.70.0)のARPテーブルはルータ(main)が持つことになる:)  

## まとめ

- ARPは覚えていると便利な時もある  
- 普段はレイヤー構造によって意識しなくても大丈夫
- 活用する際はブロードキャストドメインに気を付ける
競プロ日記#25/04/17

# AtCoder
## ABC160_[A-Coffee](https://atcoder.jp/contests/abc160/tasks/abc160_a)
- 特になし
```
int main() {
    string S;
    cin >> S;

    if (S[2] == S[3] && S[4] == S[5]) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }
    return 0;
}
```

## ABC160_[B-Golden Coins](https://atcoder.jp/contests/abc160/tasks/abc160_b)
- 特になし
```
int main() {
    long long X;
    cin >> X;

    long long ans = 0;
    int thousand = 0;
    int five = 0;
    thousand = X / 500;
    five = (X % 500) / 5;
    
    cout << thousand * 1000 + five * 5 << endl;
}
```

## ABC160_[C-Traveling Salesman around Lake](https://atcoder.jp/contests/abc160/tasks/abc160_c)
- 結局最短ということはどこかからスタートした上でその隣まで一周する。（逆走するパターンなどはあり得ない）
- そう考えると全部の家を通らなきゃいけない以上は通らない家と家の間は一つしかない→その間が最大となるような経路を探せばいい
```
int main() {
    int K,N;
    cin >> K >> N;

    vector<int> A(N);
    for (int i = 0; i < N; i++) {
        cin >> A[i];
    }
    vector<int> B(N);
    for (int i = 1; i <= N; i++) {
        
        B[i] = A[i] - A[i-1];
        if (i == N){
            B[0] = K - A[i-1] + A[0];
        }
    
    }

    cout << K - *max_element(B.begin(), B.end()) << endl;

}
```
- A1から隣の家との距離を配列B1,B2,...Bn-1というように入れていく。最後にA1とAn-1との間をB0に入れる。
後はK - *max_element(B.begin(), B.end())で答えを求めるだけ

# accの自動提出ができなくなった...。
[公式のポスト](https://atcoder.jp/posts/1456)
せっかく環境構築したぜ！っていう矢先だったのでとても悲しです。自動テストまではできるみたい...。
提出までやれる方法知ってるよって方は是非教えてくださいませ
【PHP】学習記録 XAMPPでHello World！初めてのPHP実行

# はじめに
PHPの学習を始めたので、学習記録としてQiitaに残していきます。
まずはPHPとはというところをざっくりと
# そもそもPHPとは、
PHPとは主に Web開発（サーバーサイド） に使われるプログラム言語です。
スクリプト言語つまり“すぐに実行できる”手軽なプログラミング言語"
rubyやJavaScript、pythonなんかもスクリプト言語ですね。

#### スクリプト言語

```
<?php
  echo "こんにちは、スクリプト言語！";
?>
```
.php ファイルを保存して、ブラウザで実行するだけで動きます。
【書いたらすぐ試せる】のがスクリプト言語の大きな特徴です。

ではスクリプト言語ではないもの、、というとコンパイル言語（C,Java等）があります。

#### コンパイル言語
ソースコードを実行する前に、「コンパイル（翻訳）」して機械語に変換する必要がある言語のこと。


# PHPの特徴
#### メリット
- Webに特化⇒HTMLと組み合わせて動的Webページを作れる
- 簡単に始められる⇒XAMPPなどで環境を整えれば、すぐに実行できる
- HTMLに埋め込める⇒HTMLとPHPを混ぜて書けるので理解しやすい
- サーバーサイド実行⇒データベース操作やログイン処理などに強い
- WordPressの言語 ⇒世界中のブログや企業サイトがPHPベース
- 動作が軽い⇒中小規模のWebサービスには十分なパフォーマンス
#### デメリット
- 言語仕様が複雑で、コードの可読性が低下する場合がある
- 大規模なアプリケーション開発には向いていない
- セキュリティ面での配慮が必要

PHPについてザックリと調べたところで早速、PHPを動かすための環境構築（XAMPP）と実行に移ります。

---
##### 環境情報
- OS：Windows 11
- 使用ツール：
  - XAMPP（PHP・Apache）
  - VS Code（コード編集）
---

# 1. XAMPPとは？
アプリケーション開発のための環境を容易に構築できると同時に、必要なツールやソフトウェアを一括インストールできる、無料のパッケージです。

#### XAMPPでできること

| 機能 |説明 |
|:-:|:-:|
|Apache   |  自分のPCを仮想的な「Webサーバー」にする  |
|  MySQL  |  データベースでデータを保存・管理できる  |
|PHP   | サーバー側の動的なWebページが作れる  |
|phpMyAdmin | MySQLをWeb画面で操作できる便利ツール付き|



# 2. XAMPPのインストールと初期設定
以下よりインストール
https://www.apachefriends.org/jp/index.html



# 3. PHPファイルの作成と配置
- `C:\xampp\htdocs\myphp\index.php` を作成
- VS Codeで開いて、以下のコードを記述

```php
<?php
  echo "Hello, PHP!";
?>
```
# 4.ブラウザで動作確認
localhost/myphp/index.php にアクセス(この時Apacheの起動を忘れずに）
「Hello, PHP!」と表示された！

# 5.終わりに
PHPの第一歩として、XAMPPの設定とHello Worldまでを終えました。
次回からは基本構文～Webサイト作成まで記録していきたいと思います。
暮らしを理解する家電たち：自律型AIが描くスマートホームの新常識

## 🧠 自律型AI（エージェンティックAI）シリーズ 第1回：家庭でのエージェンティックAI活用 〜スマート家電の未来〜

### 1. はじめに：スマートホームの限界と可能性

スマートホームの普及により、私たちは照明、エアコン、ロボット掃除機など、さまざまな家電をスマートフォンや音声アシスタントで操作できるようになりました。しかし、現状のスマート家電の多くはあくまで「命令待ち」の存在であり、ユーザーの意図や状況を深く理解した上で自律的に行動するレベルには達していません。

そこで注目されているのが「自律型AI（エージェンティックAI）」の導入です。これは、ユーザーの行動や環境を学習し、状況に応じて最適な判断・行動を自ら実行する次世代のAIです。

本記事では、家庭内での自律型AIの活用方法、技術背景、実装例、そして実務上の課題やヒントについて詳しく解説します。

---

### 2. エージェンティックAIとは？

エージェンティックAIとは、単に情報を処理するだけでなく、「目標に向けて能動的に行動を選択し、実行する能力」を持つAIです。以下の特徴が挙げられます：

- ユーザーの習慣や好みを学習
- 状況に応じてタスクを自動化
- 複数のタスクを並列的・連携的に処理
- 実世界のフィードバックに基づいて行動を調整

スマート家電にこのようなAIが搭載されることで、例えば以下のようなシナリオが可能になります：

> 毎朝7時に起きるユーザーに合わせて、カーテンが自動で開き、コーヒーメーカーが作動、気温に応じてエアコンの設定が変わる。

---

### 3. 実装例：LangChain + Home Assistant + GPT-4

#### 🔧 使用技術
- **LangChain**：タスク管理・エージェント構成フレームワーク
- **GPT-4**：自然言語理解と推論
- **Home Assistant**：スマート家電との接続基盤
- **Python + FastAPI**：バックエンドAPI構築

#### 🧪 サンプルコード
```python
from langchain.agents import initialize_agent, Tool
from langchain.llms import OpenAI

# 家電制御用ツール定義
class AirConditioner:
    def set_temperature(self, degree):
        print(f"エアコンを{degree}度に設定しました。")

tools = [
    Tool(name="Set AC", func=AirConditioner().set_temperature, description="エアコンの温度を設定する")
]

agent = initialize_agent(tools, OpenAI(temperature=0), agent="zero-shot-react-description")

agent.run("今日は暑いから、エアコンを25度にして")
```

このように、自然言語での指示から即座に家電操作を行うエージェントを構築できます。

---

### 4. 実務上のヒント・注意点

- **プライバシー保護**：家庭内カメラやマイクを使う際は明示的な許可とローカル処理の検討を
- **学習データの質**：行動パターンを誤って学習すると逆効果になるため、初期データと改善ループが重要
- **フォールバック処理**：意図しない動作に備えて、ユーザー手動で操作できるUI/UX設計も必要

---

### 5. 応用展開の可能性

- **高齢者見守り**：体調の異変を行動パターンから検知し、家族や介護者に通知
- **エネルギー最適化**：電力使用状況と電力価格に基づき、自動で家電の稼働時間を調整
- **家庭内ロボット連携**：掃除、配膳、見守りなど複数ロボットの協調制御

---

### 6. まとめ：家電は“使う”ものから“共に暮らす”ものへ

エージェンティックAIの導入により、スマート家電は受動的なデバイスから能動的な生活パートナーへと進化します。まだ課題は多いものの、「人間の意図を理解し、行動する」AIが家庭に溶け込む未来はすぐそこです。

---
初めての Terraform  〜 4コマンドで爆速体験 〜

## はじめに
Terraformを手軽に試す方法を教えていただいたので残しますね。
面倒な環境構築なしにAWSアカウントさえあればすぐにハンズオンできます。

具体的には、
AWS CloudShellにTerraformをインストールしたのち、
Terraformを使ってS3バケットを作成します。ぜひ試してみてね。

## CloudShellとは？
コンソール上で使えるコマンドラインツールです。
AWS CLIがインストール済みなので、即座にawsコマンドが使える優れものです。
コンソール左下にある「CloudShell」をクリックすると開きます。

今回はCloudShellでコマンド実行していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3999989/f6d8806c-4535-47af-927b-8d16d6505f9e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3999989/06b46af6-ec60-4b9d-9031-5015cab5698c.png)


## まずTerraformをインストール

Terraformをダウンロードします
```ruby
wget https://releases.hashicorp.com/terraform/0.14.2/terraform_0.14.2_linux_amd64.zip
```

ディレクトリを指定して、zipを解凍します
```ruby
sudo unzip terraform_0.14.2_linux_amd64.zip -d /usr/local/bin/
```

バージョンを確認
```ruby
terraform --version
```
これでTerraformをインストールできました

## TerraformでS3バケットを作ってみる

main.tfを作成
```ruby
vi main.tf
```

```ruby:main.tf
provider "aws" {
  region = "ap-northeast-1"
}

resource "aws_s3_bucket" "example" {
  bucket = "cloudshell-terraform-demo2025"
  acl    = "private"

  tags = {
    Name        = "ExampleBucket"
    Environment = "Demo"
  }
}
```
:::note info
**ざっくり解説**
- provider:プロバイダ設定
- region = "ap-northeast-1" は 東京リージョンのことです

- bucket = "cloudshell-terraform-demo2025" 
S3バケット名です。「S3を使うための箱の名前」と思ってください。
バケット名はグローバルユニーク、つまり世界中のどのS3バケットにも被らない名前である必要があります。
:::

main.tfで設定を書いたら以下のコマンドで初期化します
```ruby
terraform init
```
「Terraform has been successfully initialized!」と表示されたら成功です。

</br>
main.tfの内容を適用し、S3バケットを作成します.

```
terraform apply
```

「Enter a value:」が表示されたら「yes」と入力します。

S3バケットが作成できたか確認します。
```ruby
aws s3 ls
```
バケット名が表示されたら成功です🎉

## 後片付け：Terraformで作成したリソースを一括削除
下記のコマンドでリソースの削除ができます。
applyコマンドと同様に「Enter a value:」が表示されたら「yes」と入力してください。
```
terraform destroy
```


## まとめ
最後までお付き合いくださり、ありがとうございます。
「４コマンドじゃなくね？」と思われた方、さすがです。
”ほぼ”「４コマンド」です。
とはいえ手軽なのはありがたいですよね。教えてくれた方に感謝です。

自分含めコンソールの操作にまだ慣れていない方は、まずコンソールたくさん触りましょうね〜

## 参考にさせていただきました

https://qiita.com/free-honda/items/19b4e7db8b8f24d41277
MSDOS(実機)　MASM環境導入

pocket8086という、8086互換CPU(NEC製V30　1984年製造)が搭載された復刻版MSDOSのパソコンを購入しました。
画面や外側は新しいですがチップは全て当時のものです。

アセンブリ言語の開発環境を整えましたのでその手順を残します。

以下のサイトよりMASM5.1を取得する。
https://archive.org/details/microsoft-macro-assembler-5.1-5.25.-7z

以下のサイトよりwinimageを取得する。
https://winimage.com/download.htm

MASM5.1の中に以下のファイルが入っているためwinimageにて開く。
```
disk1.img
disk2.img
disk3.img
disk4.img
disk5.img
```

以下2つのファイルを探し出し、FAT16のUSBメモリのmasmフォルダの中に入れる
```
masm\
LINK.EXE
MASM.EXE
```

USBをMSDOS側に差す。
usbはＤとして認識された。
Cドライブを汚したくないのでMASMはUSBの中から使用する。
※MSDOSはコンパクトフラッシュのCドライブに入っている。(Aドライブを生で見て見たかったので残念)
```
d:
SET PATH=D:\MASM;%PATH%
c:
```
Cドライブに移動しないと環境変数へ登録したものが使えない模様。

後はプログラムを作成し、以下のようにコンパイルして実行
```
MASM HELLO2.ASM
LINK HELLO2.OBJ
HELLO2.EXE
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054974/0c3590a6-f8ba-448d-8cce-a132e471dcef.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054974/b7918711-d1d9-4079-a161-a1d22ceb44ef.png)

余りにも古すぎて参考にできるサイトが無く、4時間ほどドはまりしました。
もしかして動かないのではと思いかなり不安でしたが何とか動作環境は整いました。
大人しくdosbox、freedosもしくは仮想環境のmsdosを使っておけばよいのですがどうしても実機で動かしたかったのです。
Laravel × AdminLTE × Viteで必須項目に赤い「*」を表示する方法

LaravelでAdminLTEを使ったフォーム画面で「必須項目に赤い＊を付けたい」との要望が。

簡単だろと思っていたがCSSは苦手、、、
案の定、全然反映されない。。。

明日しっかりとスタートダッシュを切るために調べた。
これで反映されなかったら、、、すみません。
---

## 前提

- Laravel
- `laravel-adminlte` パッケージ導入済  
- Bladeで `@extends('adminlte::page')` を使用  

---

## 1. カスタムCSSを追加

プロジェクト直下の `resources/css/custom.css` を作成し、以下を記述。

```css
form label.required::after {
  content: "*";
  color: red;
  margin-left: 4px;
  font-weight: bold;
}
```

---

## 2. Bladeで読み込む

Bladeテンプレート内で、AdminLTEのCSS読み込み後にカスタムCSSを呼び出す。

```blade
@section('css')
  @vite(['resources/css/custom.css'])
@endsection
```

> ※ AdminLTEの `page.blade.php` は、この `@section('css')` を `<head>` 内に自動挿入してくれるらしい。

---

## 3. HTMLにクラスを付与

必須項目のラベルに `required` クラスを付けるだけでOK。

```blade
<div class="form-group">
  <label for="email" class="required">メールアドレス</label>
  <input type="email" id="email" name="email" required>
</div>
```

---

## 反映されないときの対処

1. **読み込み順**  
   AdminLTE本体の後に読み込まれているか確認する。  
2. **セレクタ強化**  
   詳細度を上げて上書きしやすくする。

   ```css
   .form-group label.required::after {
     /* より強いセレクタ指定 */
   }
   ```

3. **最終手段：`!important`**

   ```css
   form label.required::after {
     color: red !important;
   }
   ```

4. **デベロッパーツール**  
   Chromeなどで「検証ツール」→「Styles」を確認し、どのルールが適用・競合しているか調べる。

---

## 全ページ共通で読み込む方法

毎回書くのが面倒なら、独自レイアウトを作成する。

```blade
{{-- resources/views/layouts/adminlte-vite.blade.php --}}
@extends('adminlte::page')

@push('css')
  @vite(['resources/css/custom.css'])
@endpush
```

各画面では次のように継承させる。

```blade
@extends('layouts.adminlte-vite')
```

---

## まとめ

| 手順               | 内容                                                       |
|--------------------|------------------------------------------------------------|
| CSS追加            | `resources/css/custom.css` に必須マーク用のスタイルを書く |
| 読み込み           | Bladeで `@vite(['resources/css/custom.css'])` を設定     |
| クラス付与         | `<label class="required">…</label>` を追加               |
| 効かないとき       | セレクタ詳細度 or `!important` を調整                     |


Bladeで読み込んでなかったな。。。。
多分bladeの知識も浅いからなのかも。
bladeについても今度調べてみよう。
明日は金曜！バシッと終わらせてこよう！
Metatraderを用いた自動売買Bot制作

## Metatraderを用いた自動売買Bot制作

### 概要
Metatrader5とPSAR、EMAを用いた為替などの自動売買プログラムの記事です。
全部で3回の構成で解説を行います。

第1回(今回)
環境構築とMetaTrader5ライブラリの基礎構文一覧
第2回（制作中）
PASRなどのインジケーターの関数化
第3回（制作中）
インジケーターを用いてフラグを立ててエントリー管理

### 環境構築
※前提：Python3.9が利用可能になっていることを前提とします。

##### MetaTrader5のインストール
以下URLからMetaTrader5をインストールしてください。
これがないとMetaTrader5ライブラリが利用できません。
※Linux環境だとwineが必須になり、環境構築の難易度が跳ね上がるのでMacかWindowsを用いましょう
筆者はWindowsです。

https://www.metatrader5.com/ja

インストール後はご自身が利用している証券会社のIDとパスでログインを行ってください。
最初はデモ口座で試すことを推奨します

##### ライブラリのインストール
以下が利用しているライブラリ一覧です。
pipコマンドで実行できます。

```requirements.txt
MetaTrader5
pandas
datetime
ta
```

### MetaTrader5の基礎構文について

基本的には以下ブログにまとまっています。
その中でもよく使うものを切り取って説明します。

https://brian0111.com/python-mt5-algorithmic-trading-guide/

##### MetaTrader5へのアクセス

以下コードはMetaTrader5へのアクセス時に初期化を行っているかを判断してくれるものです。
エラーハンドリングのために初めに記載してください

```main.py
import MetaTrader5 as mt5

if not mt5.initialize():
    print("MT5に接続できません")
    mt5.shutdown()
else:
    print("MT5に接続しました")
```

##### MetaTrader5上の登録情報確認
ログイン情報を取得します
今回はログインID、残高、証拠金を取得します

```main.py
import MetaTrader5 as mt5

# MT5の起動と接続
if not mt5.initialize():
    print("MT5に接続できません")
    mt5.shutdown()
else:
    print("MT5に接続しました")

# 口座情報の取得
account_info = mt5.account_info()
if account_info:
    print(f"ログインID: {account_info.login}")
    print(f"残高: {account_info.balance}")
    print(f"証拠金: {account_info.equity}")
else:
    print("口座情報を取得できません")
```

##### ヒストリカルデータの取得

```main.py
import MetaTrader5 as mt5
import pandas as pd

# MT5の初期化
mt5.initialize()

# 取得する通貨ペアと時間足の設定
symbol = "EURUSD"
timeframe = mt5.TIMEFRAME_M1  # 1分足

# 過去100本のローソク足データを取得
rates = mt5.copy_rates_from_pos(symbol, timeframe, 0, 100)

# データをpandasのデータフレームに変換
df = pd.DataFrame(rates)
df['time'] = pd.to_datetime(df['time'], unit='s')  # 時間を変換

# 表示
print(df.head())

# MT5の終了
mt5.shutdown()
```
Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined.

# はじめに
Reactでルーティングを作成しようとしていた時に、タイトルのエラーに遭遇したので解決策をまとめました。


# 問題
```jsx
import { BrowserRouter, Link, Switch, Route } from "react-router-dom";
```
import文の中の ```Switch```が問題だった。


# 解決方法
react Route**バージョン5**以前では、**Reactアプリのルートをラップ**するのに ```Switch``` コンポーネントが使用されていました。
問題が起きたのは**バージョン6**なので、React Routerバージョン6では ```Switch``` の代わりに ```Routes``` コンポーネントに置き換えられています。
```jsx
imprt { Routes } from 'react-router-dom';
```


# おわりに
焦らずエラー文を解釈し、バージョン差分には気を付けましょう。

# 参考
https://kinsta.com/jp/knowledgebase/attempted-import-error-switch-is-not-exported-from-react-router-dom/
is laravel is best for framework

is laravel is best for framework. <a href="https://www.superbudgetmovers.ae/">laravel</a>  .Laravel is a free, open-source PHP framework designed to make web development easier by handling common tasks such as:

Routing

Authentication

Sessions

Caching

Queues

File storage

Database migrations

It follows the MVC (Model-View-Controller) architectural pattern and encourages clean, reusable code.
【CLI】ファイルを拡張子で整理する方法

tidyupを使用することでコマンドを使用してディレクトリ内のファイルを整理できます。

https://github.com/code-env/tidyup

## インストール

以下のコマンドを使用してインストールします。

```terminal
npm install -g tidyup
```

## 拡張子ごとに整理する

拡張子ごとに整理する場合には以下のコマンドを実行します。

```terminal
tidyup /path/to/directory --ext
```
【競技プログラミング】AtCoder Beginner Contest 370_E問題

# 問題
https://atcoder.jp/contests/abc370/tasks/abc370_e

# 既存投稿一覧ページへのリンク
[一覧ページ](https://qiita.com/o_chan_t/items/fc759695acfaef8df2cc)

# 解法手順イメージ

## サンプル
![base_image.create_20250414092339 copy 2-ページ3.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530912/962736c7-74e8-4e7a-bf5d-8791eb41e29a.png)

## ざっくりとした解き方1
![base_image.create_20250414092339 copy 2-ページ1.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530912/7993a585-f9e0-4833-ae28-565a21990596.png)

## ざっくりとした解き方2
![base_image.create_20250414092339 copy 2-ページ2.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530912/3ceb535b-eed0-4b55-bc12-38bb06077c6e.png)


解き方が分かったので、後は実装に落とせばよいのだけど、ぱっとコーディング出来ない・・・

単にDPのインデックスを無視した解き方なんだけれどさ。
ChatGPT への口頭試問（"tl;dr"について）

こんにちは。
ChatGPT へ、今回は "tl;dr" に関する口頭試問を行いました。

その今回の私の質問文だけを順に並べますと：

1. "tl;dr" の出現は、“too long; don't read" と解釈し、即座に読むことを止めて良いですか？
2. 要約を示すには、より他に良い表現がありますね。

・ご参考：

https://qiita.com/kkdd/items/d19a2366981e5e2eeeca
#0108（2025/04/17）0/1配列 vs インデックス配列

## 0/1配列 vs インデックス配列の容量比較

### 概要

0と1で構成されるデータを格納する際、大きく分けて2つの方法があります。

1. **0と1を直接並べた配列（ビット配列）**
   ```
   例：[0,1,0,0,...,1,0]
   ```

2. **1が存在する位置のインデックスのみを格納する配列（インデックス配列）**
   ```
   例：[1, 1000, 2500, ...]
   ```

どちらが容量的に効率的かは、配列の長さと1が出現する割合（スパース度）によって変わります。

### 容量比較のグラフによる検証

次のグラフは配列の長さ（横軸）に対して、それぞれの方式で必要な容量（縦軸・ビット単位）を示しています。

- 配列の長さ：100～10,000
- スパース度（1の割合）：1%、5%、10%、20%、50%

![Comparison of Bit Array vs Index Array Storage Sizes.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3975520/fb76b33a-a86d-4126-9be3-eaff8b942aa2.png)


### 結果と考察

- **1の割合が少ない（1%～5%）場合**
  - インデックス配列の容量がはるかに小さく、効率的です。

- **1の割合が増える（10%以上）と**
  - 配列の長さが増えるにつれて、インデックス配列の容量が急速に増え、一定の閾値を超えると0/1配列より非効率になります。

### 結論

- 配列がスパース（1の割合が低い）場合は、インデックス配列を使う方が容量的に効率的です。
- 一方、データが密になる（1の割合が高い）場合、単純な0/1配列を利用する方が効率的となります。
#0107（2025/04/17）Pythonの`__init__.py`

# Pythonにおける`__init__.py`ファイルの役割と使い方

Pythonのパッケージ管理において重要な役割を果たすのが`__init__.py`ファイルです。このファイルは、ディレクトリをPythonのパッケージとして認識させるために使用され、Pythonのモジュールおよびパッケージ構造を明示的に管理するための仕組みです。

## 1. パッケージとしての認識

`__init__.py`をディレクトリ内に配置することで、そのディレクトリはPythonからパッケージとして扱われるようになります。Python 3.3以降は暗黙的な名前空間パッケージ（Implicit Namespace Packages）が導入され、必ずしも`__init__.py`が必要ではありませんが、明示的に定義することが推奨されています。

## 2. パッケージの初期化処理

パッケージがインポートされる際に、`__init__.py`内のコードは最初に実行されます。これを利用して、パッケージの初期化処理（環境設定、変数初期化、共通関数やクラスのインポートなど）を行うことができます。

例:
```python
# __init__.py
from .moduleA import ClassA
from .moduleB import functionB

__version__ = "1.0.0"
```

これにより、ユーザーはパッケージ内のモジュールを簡単に利用可能となります。

## 3. 名前空間の管理と制御

`__init__.py`において`__all__`変数を定義することで、パッケージの外部からインポート可能な要素を明示的に制御することができます。

例:
```python
# __init__.py
__all__ = ['ClassA', 'functionB']
```

これにより、意図しないモジュールや内部処理が外部に公開されることを防ぐことが可能です。

## 4. 相対インポート

`__init__.py`内で相対インポートを行うことで、パッケージ内のモジュール間の参照を簡略化することができます。

例:
```python
# __init__.py
from .submodule import utility
```

## 5. パッケージのメタデータ管理

バージョン情報や作者情報、ライセンス情報などを`__init__.py`にまとめて記述することも一般的です。

例:
```python
# __init__.py
__version__ = '2.1.3'
__author__ = 'Yamada'
__license__ = 'MIT'
```

## まとめ

`__init__.py`はPythonのパッケージシステムにおいて、パッケージの明確化、初期化処理、名前空間管理、相対インポートの簡略化、メタデータ管理など、非常に重要な役割を果たしています。適切に活用することで、可読性とメンテナンス性の高いPythonコードを実現できます。
【Node.js × Cron】TypeScriptで複数タスクを管理する方法

# はじめに
定期的に処理を実行したい場合、Node.jsでは`node-cron`を使うことで簡単に実現できます。本記事では、TypeScriptでタスクスケジューラを実装し、複数の処理を定期実行する方法を紹介します。

https://www.npmjs.com/package/node-cron

## node-cronとは？
`node-cron`は、UNIX系OSで使われる「cron」の書式に従って、Node.jsでスケジュールタスクを登録・実行するライブラリです。たとえば `"0 * * * *"` は「毎時0分」にタスクを実行することを意味します。

## Cron式の構成

```plaintext
* * * * * *
│ │ │ │ │ │
│ │ │ │ │ └── 曜日 (0 - 7) (0または7は日曜日)
│ │ │ │ └──── 月 (1 - 12)
│ │ │ └────── 日 (1 - 31)
│ │ └──────── 時 (0 - 23)
│ └────────── 分 (0 - 59)
└──────────── 秒 (省略可)
```

例：`0 * * * *` → 毎時0分に実行される

# クラスの実装
`TaskScheduler`クラスを使って、複数のCronタスクを登録・停止・一括停止できるようにしています。

#### 1. 型定義
```typescript:TaskScheduler.ts
interface TaskConfig {
  name: string;
  cronExpression: string;
  command: () => Promise<void>;
}

interface ScheduledTasks {
  [taskName: string]: cron.ScheduledTask;
}
```

- `TaskConfig`: 各タスクの構成情報（名前、cron式、実行関数）を定義
- `ScheduledTasks`: タスク名と`node-cron`の`ScheduledTask`オブジェクトの対応表

#### 2. TaskSchedulerクラスの概要
```typescript:TaskScheduler.ts
class TaskScheduler {
  private scheduledTasks: ScheduledTasks = {};
  private taskConfig: TaskConfig[] = [
    {
      name: "task1",
      cronExpression: "0 * * * *",
      command: async () => {
        await Task1.main();
      }
    },
    ...
  ];
```

- `scheduledTasks`: 実行中のスケジュールタスクを管理
- `taskConfig`: 登録したいタスクのリスト。必要に応じて外部ファイルやDBにしてもOK

#### 3. タスクの登録処理（`scheduleTask`）

```typescript:TaskScheduler.ts
private scheduleTask(taskConfig: TaskConfig): void {
  const { name, cronExpression, command } = taskConfig;

  if (this.scheduledTasks[name]) {
    Logger.warning(`Task "${name}" already scheduled. Stopping existing task.`);
    this.scheduledTasks[name]!.stop();
  }

  const job = cron.schedule(cronExpression, async () => {
    try {
      await command();
    } catch (error) {
      Logger.error(`Error running ${name}: ${error}`);
    }
  });

  this.scheduledTasks[name] = job;
  Logger.info(`Task "${name}" scheduled with cron "${cronExpression}"`);
}
```

- 既に同名タスクが存在すれば、先に止める（上書き防止）
- `cron.schedule`で新しいジョブを作成
- 非同期関数にも対応（`async/await`）

#### 4. タスクの停止処理

```typescript:TaskScheduler.ts
public stopTask(taskName: string): void {
  if (this.scheduledTasks[taskName]) {
    this.scheduledTasks[taskName]!.stop();
    delete this.scheduledTasks[taskName];
    Logger.info(`Task "${taskName}" stopped.`);
  } else {
    Logger.warning(`Task "${taskName}" not found.`);
  }
}
```

指定されたタスクを停止し、一覧からも削除します。

#### 5. 全タスクの停止

```typescript:TaskScheduler.ts
public stopAllTasks(): void {
  Logger.task("Stopping all scheduled tasks...");
  for (const taskName in this.scheduledTasks) {
    this.scheduledTasks[taskName]!.stop();
    Logger.info(`Task "${taskName}" not stopped.`);
  }

  this.scheduledTasks = {};
  Logger.success("All scheduled tasks stopped.");
}
```

- 全タスクをループで止める
- `scheduledTasks`を初期化して完全リセット

## クラスの使い方（例）
```typescript:TaskScheduler.ts
import TaskScheduler from './TaskScheduler';

TaskScheduler.start(); // 必要に応じて startAllTasks を作成してもOK
```

## おわりに

この記事では、TypeScriptで`node-cron`を使って複数のタスクを効率よく管理するスケジューラの実装方法を紹介しました。

- タスクの再スケジュール
- エラー処理の取り扱い
- 管理用のインターフェース設計

など、実務でも活かせる構成になっていると思います。参考になれば幸いです！
MED

MED（Multi-Exit Discriminator）は、BGP（Border Gateway Protocol）で使われる**ルート選定のためのパラメータの一つ**です。

---

### 🔍 MEDってなに？

**「自分のASに入ってくるとき、こっちの入り口（ルーター）を選んでほしい！」というヒント**を相手に伝えるための値です。

---

### 🛣 わかりやすく例えると…

あなたの会社（AS）に道路（BGP経路）が2本通じていて、どちらからもお客さん（トラフィック）が来られるとします。

でも「できればこっちから入ってきてほしいな～」という時に、**MED値を使って“こっちの方が近道だよ”と相手に教える**イメージです。

---

### ⚙ 動きの概要

- 値が**小さいほど優先される**（=近い）
- **他ASから自分ASへの複数経路があるとき**に使う
- 相手ASがMEDを**見てくれなければ無視される**（あくまでヒント）

---

### 🧠 具体例

AS200はAS100に2つのルーター（R1とR2）でつながってる。

| 経路 | MED |
|------|-----|
| AS200-R1 → AS100 | 50 |
| AS200-R2 → AS100 | 100 |

→ この場合、AS100は「R1の経路の方が近い（優先）」と判断する

---

### ✅ MEDを使う場面

| シチュエーション | 理由 |
|------------------|------|
| 複数の回線で接続しているとき | どの回線から入ってきてほしいかを制御したい |
| インバウンドトラフィックの最適化 | 地理的に近い経路に誘導したい |
| ピアとのトラフィック調整 | 片方の経路をあまり使わせたくない時など |

---

### 🚫 注意点

- **他のASがMEDを使うかどうかは任意**
- **ASが違う場合はMEDは比較されないことが多い**
- **BGPポリシーの一部であって、万能ではない**

---

要は、**MEDは“入り口の優先順位を伝えるためのサジェスト”**ってことです！
AS Path Prepend

「**AS Path Prepend（エーエス・パス・プリペンド）」**とは、BGP（Border Gateway Protocol）で使われる**ルーティング制御のテクニック**です。

簡単に言うと…

---

### 🧠 一言でいうと？

**「遠回りに見せかけて、その経路を優先されにくくする」ための設定**

---

### 🛰 どういうこと？

BGPでは、どの経路を使うかを決めるときに「ASパスの長さ（通ったネットワーク数）」が短いものを**より好む**というルールがあります。

---

### 📦 例：通常のASパス

あるルートが通ってきた経路：
```
AS100 → AS200 → AS300
```
ASパスの長さは「3」

---

### 🧩 AS Path Prependを使うと

同じルートに対して、意図的にAS番号を**複数回つけ足す**（prepend）ことで…

```
AS100 → AS200 → AS300 → AS300 → AS300
```

→ AS300が3回も出てくるので、「この経路は遠い・よくない」と判断されやすくなる  
→ **他の経路が選ばれるようになる**

---

### 🛠 よくある用途

| 用途 | 説明 |
|------|------|
| 🔀 **冗長経路の優先制御** | メイン回線を優先させ、バックアップ経路はAS Pathを長くして「遠回り」に見せておく |
| ☁️ **マルチホームでの経路制御** | 複数ISPを使っていて、どちらを使わせるか調整したいとき |

---

### 🚫 注意点

- Prependはあくまで「**相手に対しての見せ方**」です
- 自分のネットワーク内では何も変わりません
- 効きすぎると、トラフィックがまったく流れてこなくなることもあるので要注意！

---
AWSバックボーン

「AWSバックボーン」とは、**Amazon Web Services（AWS）が自社で保有・運用しているグローバルなネットワークインフラ**のことです。簡単に言うと、AWSが世界中に張り巡らせている超高速・高信頼な「専用のインターネット回線」のようなものです。

---

## 🧠 簡単に言うと？

> AWSのデータセンター同士をつなぐ、**AWS専用の高速・高品質なネットワーク網**

---

## 📡 特徴

| 特徴 | 説明 |
|------|------|
| 🌍 **グローバル接続** | 世界中のAWSリージョン・AZを専用回線で接続 |
| 🚀 **高スループット** | 通常のインターネットよりも高速 |
| 🔐 **高セキュリティ** | 公衆インターネットを経由しないため安全性が高い |
| 🎯 **低レイテンシ** | 地理的に離れていても遅延が少ない通信が可能 |

---

## 🔧 どこで使われている？

- **S3クロスリージョンレプリケーション**
- **VPCピアリング**や**Transit Gateway**でのリージョン間通信
- **CloudFrontのオリジンフェッチ**
- **AWS Direct Connect**（お客様オンプレとの専用線接続）

---

## 🏗️ 例：東京〜バージニア間の通信

通常のインターネット経由だと遅延や経路の不安定さがありますが、  
AWSバックボーン経由だと、東京→ロサンゼルス→バージニアといった  
**AWS独自の高速経路**で安全かつ安定した通信が行えます。

---

## 📝 補足

- AWSの公式資料などでは「**global backbone network**」と呼ばれることもあります。
- Microsoft AzureやGoogle Cloudにも同様の「専用バックボーンネットワーク」が存在します。

---
chatGPTに遊ばれていた話

こんにちは、しがないプログラマーやってます。ダチョウ民です。
元々文系で、数学とかアルゴリズムから逃げに逃げてきましたが、パソコンカタカタが好きなのでこの道にきました。もっと語ると長くなりそうなので、簡単に自己紹介しました。ちなみにプログラマー２年目です。

みなさんはchatGPTを使っていますか？僕はそれはもうお世話になりっぱなしです。だって新人エンジニアで、右も左もわからないので、藁にも縋る思いで使っていました。
便利ですよね、一瞬にして解決策出してくれるあの優しき友達...
でも、あいつら平気で嘘をつきます。

なんなら、できないコードがどんどんるつぼにハマってもいきます。
いったいなぜ僕たちのコードはそんな転がっていってしまうのかを考えてみました。

１．なんか知らん変数名が急に入ってくる
    （だめだ...全然できない...chatGPTに聞いてもだめ、これ以上時間かけても仕方ない）僕「先輩、これがあーでこーで...」　先輩「ん？これ変数名違うじゃん、で、後はこーして...」
    はい、このように、あいつらなんか急に自分ルールで変数名作ってきます、そして、僕はできないことへの焦りばかり募ってそれに気づかないんです、もうこの時点でひどいもんです。（まぁこれっきりだったので許してください。）

２．解決策が初歩の初歩
    結局ここが問題で、コードなんて長くなってなんぼのもの。（chatGPTに丸写しはしません）
    「今のコードはあーでこーで、このエラー読み解いて」って書いても「まぁconsole打って確認してよ」って返ってきます。
    これも至極当然ですね。だって、結局コード全文を彼らが見れてるわけではないですし、この変数名が何のdataを返してるかなんて、僕たちにしかわからないんですから。

3.　チームでやるプロジェクト（長文コード）に不向きすぎる
    単ファイルを丸写しできるならまだしも、何千、万も行のあるコードを全部把握させるのは無理な話ですね。
    なので、解読やリファクタリングしたいなら、一部にしましょう、長いとあいつら平気で嘘つきます。


でも彼らは嘘をついてるわけじゃないんですよ、彼らに情報を与えてない中で答えを出せってのが不可能なわけであって...じゃあどうしろって、結局「ゴールシークプロンプト」です。
ゴールシークプロンプトとは、すごく簡単に言うと、AIにちゃんと説明する、ってことです。例えば、コード丸投げして、「これ直して」だとあいつらはへそを曲げます。
そうではなく、「今こうで、このコードはこういうエラーで、目標はこれで、こうなってほしい」と道筋を立てる。じゃないと沼です、そこからは僕のように変数名の違いにも気づかないほどの沼が待っています。

結論：　友の言葉ですが、「chatGPTはヒントはくれる、答えはくれない」と思って扱った方がいいです。
それでは
ASN自律システム番号

ASNとは、**Autonomous System Number（自律システム番号）**の略で、インターネット上で**ネットワークを一意に識別するための番号**です。

---

## 🌐 ASNとは？

### ✅ 簡単に言うと：
> 「インターネット上の**1つの大きなネットワーク（自律システム：AS）を識別するためのID番号**」

たとえば、GoogleやAmazon、NTT、KDDIのような大規模ネットワークは、それぞれ独自のASNを持っています。

---

## 🧭 どこで使われる？

ASNは主に**BGP（Border Gateway Protocol）**という、インターネットのルーティングに使われるプロトコルで使われます。

BGPは「どのAS（ネットワーク）を経由して通信するか」を判断する仕組みなので、各ネットワークに付けられたASNが必要です。

---

## 🧩 例：

| 組織名        | ASN  |
|---------------|------|
| Google        | AS15169 |
| Cloudflare    | AS13335 |
| Amazon AWS    | AS16509 |
| NTT Communications | AS2914 |

---

## ✍️ ポイントまとめ

| 項目         | 内容 |
|--------------|------|
| 名称         | Autonomous System Number（自律システム番号） |
| 用途         | BGPルーティングに使うネットワークID |
| 割り当て機関 | APNIC（アジア）、ARIN（北米）などの地域インターネットレジストリ（RIR） |
| 種類         | 16bit（1～65535）、32bit（65536～4294967295） |

---
Mac(M4)でVSCode＋PostgreSQL＋SpringBootの環境構築

## はじめに
SpringBootでAPIを作成するための環境構築です

## 環境
* MacOS
* Visual Studio Code
* Spring Boot
* PostgreSQL
* pgAdmin4

## VSCode
1\. VSCodeのダウンロード

https://code.visualstudio.com/

2\. 拡張機能をインストール
赤枠の拡張機能から、「Extension Pack for Java Auto Config」を検索しインストール
![Java Extension Pack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4036929/e468a215-1ad3-46b9-bf96-d291a51db34a.png)
Javaで開発するための基本的な機能が詰まっている

3\. プロジェクトの作成
赤枠内の「検索」をクリック
![検索.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4036929/49115964-faf5-4a92-badf-1fb23611d815.png)

「> spring」と入力し「Spring Initializr:Create a Maven Project」をクリック
![検索_spring.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4036929/ead88f8f-2797-4c44-b921-dcdbe9206730.png)

バージョンを選択
![バージョン選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4036929/f7c8d3c7-4d38-4194-88a3-628313e169d9.png)

使用する言語を選択
![使用言語.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4036929/ac9ea0b1-e8b1-4a8f-b56f-8cc8bf6ed166.png)

プロジェクトのGoup Idを入力する
![グループID.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4036929/643023cd-c96d-4f78-b8a2-8e300de6fdc0.png)

Artifact Idを入力する
![Artifact Id.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4036929/525d215b-64b2-431b-8098-6447094f4f6e.png)

パッケージタイプを選択する（今回はjarを選択）
![パッケージタイプ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4036929/99c1b9b3-0e4e-4331-afe3-29b821d377fa.png)

Javaのバージョンを選択する
![バージョン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4036929/92538bfb-e2c0-416e-bd05-4feebed40aaf.png)

フレームワークの設定を行う
![フレームワーク選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4036929/793e817c-9c36-4a04-a3ee-ac8e57915780.png)

## PostgreSQL
Homebrewまたは、DMGファイルからインストールします。
以下記事が分かりやすかったので参考にしながらインストールします。

https://zenn.dev/eguchi244_dev/articles/sql-postresql-install-20230620

:::note warn
もしも、=> zsh: command not found: psql が出力されたら
以下のコマンドを使用してパスを通す。
```
'export PATH="/opt/homebrew/opt/postgresql@17/bin:$PATH"' >> ~/.zshrc
```
:::

## pgAdmin4
以下の記事を参考にインストールする

https://qiita.com/Tiger-Kid/items/2fbe971f15d441dc3bf6
C_TS422_2023 SAP Certified Application Associate SAP S/4HANA Production Planning and Manufacturing対策（9/100）

【9日目】
トピック 2：SAPS/4HANA生産計画の概要（3/5）

≪問題9≫
SAPのデジタルバリューネットワークのポートフォリオにおけるサプライヤエリアは、どのSAPソリューションによってサポートされますか。
（３つ選択）
□SAPConcur
□SAPHybris
□SAPAriba
□SAPFieldglass
□SAPSuccessFactors

≪解答≫
■SAPConcur
□SAPHybris
■SAPAriba
■SAPFieldglass
□SAPSuccessFactors

≪解説≫
SAPのデジタルバリューネットワークでは、サプライヤエリアを効率的に管理するために複数のソリューションが利用されます。

SAPConcur：SAPConcurは、経費管理を含むさまざまなビジネスプロセスをサポートします。特に出張や経費に関連するサプライヤ管理に役立ちます。

SAPAriba：SAPAribaは、調達や購買のプロセスを効率化し、サプライヤとの取引をサポートするプラットフォームです。サプライヤの選定、契約、取引を包括的に管理します。

SAPFieldglass：SAPFieldglassは、外部労働者とサービスの管理に特化したソリューションで、サプライヤからのリソースを適切に管理するために利用されます。
IPsec

IPsec（アイピーセック）は、**インターネットプロトコルセキュリティ（Internet Protocol Security）**の略で、ネットワーク上の通信を**安全に保つためのプロトコル群**です。

---

### 🔐 IPsecとは？
IPsecは、**IPレベル（レイヤー3）で通信データを暗号化・認証**することで、通信の安全性を高める技術です。VPN（仮想プライベートネットワーク）でもよく使われています。

---

### 📦 主な特徴：
| 特徴         | 説明 |
|--------------|------|
| 🔒 暗号化     | 通信内容を第三者に見られないように保護します。 |
| 🛂 認証       | 通信相手が本物かどうかを確認します。 |
| 🧾 改ざん防止 | データが途中で変更されていないかを検出します。 |

---

### 🛠 IPsecの構成要素：
| 構成要素       | 説明 |
|----------------|------|
| **AH**（認証ヘッダー）        | データの改ざんや送信者のなりすましを防止（ただし暗号化なし） |
| **ESP**（Encapsulating Security Payload） | データの暗号化と認証の両方を提供 |
| **IKE**（Internet Key Exchange） | 鍵交換やセッションの確立を行う |

---

### 🧳 よく使われる場面：
- Site-to-Site VPN（拠点間VPN）
- リモートアクセスVPN
- AWSやAzureなどのクラウドVPN接続

---
#0106（2025/04/16）キャッシュ戦略

# キャッシュ戦略

キャッシュ戦略とは、Webアプリケーションにおいて頻繁にアクセスされるデータやレスポンスを一時的に保存して再利用することで、パフォーマンスを改善し、ユーザー体験を向上させるための手法や仕組みです。適切なキャッシュ戦略は、アプリケーションの応答速度を高め、サーバーの負荷を軽減し、全体的なシステム効率を改善します。

## キャッシュ戦略で考えるべきポイント

キャッシュ戦略を設計する際には、以下のようなポイントを考える必要があります。

- **データの特性:** 頻繁に更新されるデータなのか、ほぼ静的なデータなのか。
- **アクセス頻度:** どのデータが頻繁にアクセスされるのか。
- **整合性要件:** データが常に最新である必要があるのか、ある程度の遅延を許容できるのか。
- **インフラ環境:** 使用しているシステム環境やインフラによって、最適なキャッシュの仕組みが異なります。

## キャッシュを活用する目的

キャッシュ戦略を導入する主な目的は以下の通りです。

1. **レスポンス速度の向上:** 事前に取得・保存したデータを利用することで、ユーザーへの応答時間を短縮。
2. **サーバー負荷の軽減:** 同一のリクエストをサーバーで繰り返し処理することを避け、リソース消費を抑える。
3. **スケーラビリティの向上:** キャッシュがサーバーの負荷を分散させ、システムの拡張性を向上させる。

## キャッシュ戦略の分類

### 1. 保存場所による分類
- **ローカルキャッシュ:** ブラウザなどクライアント側にデータを保存し、ネットワーク通信を削減。
- **リモートキャッシュ:** RedisやMemcachedなどの共有キャッシュサーバを使用し、複数のクライアント間でデータを共有。

### 2. キャッシュタイミングによる分類
- **リードキャッシュ:** 読み取り頻度が高いデータの取得を高速化する。
- **ライトキャッシュ:** 書き込み処理を一旦キャッシュに保存し、非同期で永続化。

### 3. キャッシュ更新方法による分類
- **インラインキャッシュ:** キャッシュシステムが自動的にデータソースからデータを取得・更新。
- **アサイドキャッシュ:** アプリケーション側で明示的にキャッシュの更新を制御する。

## キャッシュ無効化戦略

キャッシュは必ずしも最新データを持つとは限らないため、キャッシュを更新する戦略が必要です。

- **タイムベース:** 時間経過に応じてキャッシュを無効化。
- **バージョンベース:** データが変更された際にバージョンを更新し、古いキャッシュを無効化。
- **イベントベース:** データ変更イベントが発生したタイミングで即座にキャッシュを更新。

## キャッシュ戦略を導入する際の注意点

- キャッシュが古いデータを提供するリスク（データ整合性）を考慮する。
- キャッシュヒット率を常にモニタリングし、戦略の最適化を継続的に行う。
- キャッシュ失効時のアクセス集中（キャッシュスタンピード）を避けるための仕組みを準備する。

## 結論

キャッシュ戦略の本質は、ユーザー体験の向上やサーバー負荷の軽減を目指し、システム特性に最も適した仕組みを選定し、効率的に運用することにあります。キャッシュを上手に活用することで、アプリケーションの品質とスケーラビリティを飛躍的に向上させることが可能となります。