OmniAICreator/Qiita-1.07M huggingface dataset:
フロントエンド入門：CSSのレスポンシブ対応を直していたら、margin-right が原因だったのでまとめてみた

## はじめに
Web制作において「要素同士の余白調整」は、見た目やレイアウトの完成度を大きく左右する重要なポイントです。

:::note info
**特に `margin-right` は、横並び要素のスペース管理において非常によく使われるプロパティです。**
:::

今回は、この `margin-right` だけに焦点を当てて、基本から応用までを個人の備忘録としてまとめました。

## 書こうと思ったきっかけ
レイアウトを調整しているときに、「左右の余白がうまく取れない」「ボタンとボタンの間が詰まってしまう」といった問題に度々遭遇しました。

特に `margin-right` の設定をミスすると、思ったような見た目にならないことがあり、自分なりに一度まとめておきたいと思ったのがきっかけです。

## 内容の説明（margin-right の基本と応用）

### `margin-right` とは？
`margin-right` は、CSSで要素の右側に余白を設定するためのプロパティです。数値を指定することで、隣接する要素との間隔を柔軟に調整できます。

```css
.box {
  margin-right: 20px;
}
```
この場合、`.box` 要素の右に20ピクセルの余白が追加されます。

### よくある使い方

#### ボタンやリンクの横並び時のスペース調整
```html
<a href="#" class="btn">前へ</a>
<a href="#" class="btn">次へ</a>
```
```css
.btn {
  margin-right: 10px;
}
```
→ 最後の要素には右余白が不要な場合、`.btn:last-child { margin-right: 0; }` で対応できます。

#### フレックスボックスとの併用
```css
.flex {
  display: flex;
}
.flex > div {
  margin-right: 16px;
}
.flex > div:last-child {
  margin-right: 0;
}
```
→ 横並びレイアウト時に均等な間隔を取るのに便利。

#### 表やリストの間隔を取る
ラベルと入力欄、メニューアイテムなどを横並びにしたとき、`margin-right` を調整することで視認性が向上します。

### 単位について
- `px`（ピクセル）：細かい調整に最適
- `%`（親要素に対する割合）：柔軟なレイアウトに向いている
- `em` / `rem`：フォントサイズに比例した余白指定が可能

## まとめ
`margin-right` は、左右方向のレイアウトを整えるうえで非常に重要なCSSプロパティです。

:::note warn
**特にボタンやリンク、アイコンの間隔など、ちょっとした見た目の違いがUI全体の印象を左右することもあります。**
:::

必要に応じて `:last-child` や `:not(:last-child)` と組み合わせることで、より洗練されたスタイルが実現できます。

この記事はあくまで個人の備忘録としてのまとめですが、同じような悩みを持つ方の参考になれば嬉しいです！
Terraform/CDKTF: Local state cannot be unlocked by another process

## はじめに
CDKTFでAzure バックエンドのとき，cdktfコマンドをCtrl+Cで止めるとロックのエラーが出ます（私はopentofuを使っています）。
```
                      │ Error: Error acquiring the state lock
                      │ 
                      │ Error message: state blob is already locked
                      │ Lock Info:
                      │   ID:        24873109-6cd4-7418-c0df-e8e721ba84f1
                      │   Path:      tfstate/prod.terraform.tfstate
                      │   Operation: OperationTypeApply
                      │   Who:       node@01486bec915d
                      │   Version:   1.6.0
                      │   Created:   2025-03-25 19:21:21.966895867 +0000 UTC
                      │   Info:
                      │ 
                      │ 
                      │ OpenTofu acquires a state lock to protect the state from being written
                      │ by multiple users at the same time. Please resolve the issue above and try
                      │ again. For most commands, you can disable locking with the "-lock=false"
                      │ flag, but this is not recommended
```

ロックを外そうとすると以下のエラーになることがあります
```
 $ tofu force-unlock 24873109-6cd4-7418-c0df-e8e721ba84f1
Local state cannot be unlocked by another process
```
別プロセスのterraformを殺すと良いよ，というページがいくつか見つかるのですが，そのようなプロセスは存在しません。
困った...

## 解決方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3738861/b6421ecd-03fb-4a7d-b0ee-c33998a17c92.png)
Azure Portalでストレージアカウントを開くと，Pathで指定されているオブジェクトがあります。
そのオブジェクトが「リース中」になっているはずなので，三点ダッシュから「リースの解放」を行うと，「Local state」のアンロックになります。

https://stackoverflow.com/questions/71940888/local-state-cannot-be-unlocked-by-another-process-on-terraform

このページの解説を見ると，terraform step には Phase1とPhase2があり，Phase1をLocal stateと表現しているようです。
言いたいことはわかるんですが，紛らわしいです。
ローカルファイルを探して時間をロスしてしまいました...
論理式の簡単化、Quine-McCluskey法のgithubからのインストール [python3]


Quine-McCluskey法で、論理式を簡単化する優秀なプログラムがありましたが、python2で書かれていたため、色々と不具合が生じて、python3では実行できなかったため、改造点を書いておきます。

元記事

https://at-akada.hatenablog.com/entry/20141001/1412179532

https://github.com/takada-at/makurasan

まず、logic.pyにpatchを当てます。diffをあげておきます。

```qm.patch
2a3,5
> from functools import reduce
> from functools import cmp_to_key
> import locale
232a236,241
> 
> # cmp_to_keyを使用する例（locale.strcollを使用）
> def compare_names(x, y):
>     return locale.strcoll(x.name, y.name)
> 
> 
242c251,252
<         variables.sort(lambda x,y: cmp(x.name, y.name))
---
>         variables.sort(key=cmp_to_key(compare_names))
>         #variables.sort(lambda x,y: cmp_to_key(x.name, y.name))
```

そして、

```
pip install --break-system-packages /home/user/makurasan
```
としてインストールします。

動きました。僕は未だアルゴリズムを理解していないので、機械的に動かしただけですが。すごい人がいるなあ。

```
>>> import makurasan as qm
>>> a,b,c,d=qm.Bool.create('abcd')
>>> z=~a&~b&c&d|b&c&d|a&b&~c|a&~b&c&d
>>> obj = qm.QuineMcCluskey(z)
>>> obj.compute()
c & d | (a & b) & ~c
```
HTTPステータスコード【備忘録】

# HTTPステータスコード【備忘録】

こんにちは。
子育て中の母親で、現役看護師をしています。
エンジニア転職を目指して勉強中を始めたばかりです。  
よく出てくる「HTTPステータスコード」について、自分の理解のために**備忘録としてまとめておきます**。

---

## はじめに

Webの勉強をしていると、よく目にする「HTTPステータスコード」。  
まだまだ分からないことも多いので、**忘れないように軽く整理しておきます**。

---

## HTTPステータスコードとは？

- サーバーからクライアント（ブラウザなど）に返される**3桁の数字のコード**。
- このコードを見れば、リクエストがうまくいったのか、エラーなのかがわかる。

---

## ステータスコードの分類（ざっくり）

| コード範囲 | 名前                      | 内容                         |
|------------|---------------------------|------------------------------|
| 100番台    | 情報レスポンス            | 処理中などの途中経過         |
| 200番台    | 成功レスポンス            | リクエスト成功               |
| 300番台    | リダイレクト              | 他のURLに移動したよ           |
| 400番台    | クライアントエラー        | ユーザー側のミス             |
| 500番台    | サーバーエラー            | サーバー側の問題             |

---

## よく使われるHTTPステータスコード

- **200 OK**  
　→ リクエストが正常に処理されたとき。

- **301 Moved Permanently**  
　→ ページが**別のURLに移動**したとき。  
　　サイトの引越しやリニューアル時によく使われる。

- **404 Not Found**  
　→ 指定したURLが**見つからない**とき。  
　　ページが消えた、URLを間違えたときなど。

- **500 Internal Server Error**  
　→ サーバー側で**予期せぬエラー**が起きたとき。

---

## エラーが出たときの対処法（簡単に）

### 【ユーザーとして】
- **404エラー**  
　→ URLのスペルミスやページの削除が原因。URLをよく確認する。

- **500番台のエラー**  
　→ サーバー側の問題。ユーザーができることは少ないけど、**時間をおいて再アクセス**したり、**管理者に連絡**すると良い。

- **その他の基本対処**  
　- ブラウザのキャッシュをクリア  
　- 別のブラウザや端末からアクセスしてみる

---

## まとめ

HTTPステータスコードは思ったより種類が多くてびっくりしますが、  
よく使われるものを覚えておくだけでも、トラブル時の対応がしやすくなりそうです。
初学者のため、間違えていたらコメント頂けますとありがたいです。

**これからも少しずつ理解を深めて、困ったときに冷静に対処できるようになりたいと思います。**
【ライフハック】AtCoderの本番後のできなかった問題をGPTとペアプロして解いた結果

<h2>GPTとペアプロ！</h2>　
AtCoderでC問題が本番中解けず、後日同問題をGPTとペアプロしてみたら、めちゃくちゃよかったので記録として書く(本番は使用NG)

以下を実施した
・問題文と入力例、出力例を読ませる
・回答は書かないように命じる
・つまったりよくわかんなくなったら質問する

<h2>実施中にGPTに書いたこと</h2>
<h3>1.C++の構文を聞く</h3>
C＋＋の構文の理解力不足で検索しようとしても、記事を見つけて該当の箇所を探すのがめんどくさい
GPTに聞くと一瞬でこういう構文で書くと教えてくれる
めちゃくちゃ時短になった

<h3>2.問題文の解釈違い</h3>
問題文をあんまりうまく読み解けず、全く違う回答を出そうとしていた
問題文を読み込ませたところで、要約してくれたので自分の誤りをすぐ気づくことができた

国語力で躓いていたので、そこが速攻解決したのはありがたかった
AtCoderはコードのロジックをどれだけ早く書けるかみたいなところを競うところで国語力で躓いていたら時間がかかりすぎてしまう

<h3>仮説の検証</h3>
自分が立てたロジックが合ってるかどうかを聞いたところ、正しいと回答してくれた。同時にざっくりまとめてくれた

ざっくりまとめることで自分の中でロジックがよりクリアになった

<h3>4.デバッグ</h3>
書いたコードがどうしても通らず、悩んでいた
コードを書きこんだところ、どこがどう違うか指摘してくれた

どうしてもうまく行かないときに、解答解説のコード例ではなく、自分の書いたコード上でどこが悪いのか指摘してくれるのは、かなり捗った

<h3>5.テストケース作成</h3>
とはいえ、どこがどう違うかを自力でも考えようと思い、いろいろ考えて改善しても通らない

そんなときにこのコードで通らないパターンのテストケースを教えて、とGPTに書くと実際にテストケースを書いてくれる

それと照らし合わせつつ、自分のコードを直してテストをしてを繰り返したら、C問題を通すことができた

<h3>6.フィードバック</h3>
「これは前回できなかった分の復習なんだけど、ここで質問しなければ正しい答えにたどり着けなかったと思う。どうしたら正しい回答にたどり着けるようになれる？」と質問した

そうしたら、フィードバックが返ってきた。お嬢様口調で普段しゃべらせているので恥ずかしいが貼る(画質ガビガビで申し訳ない)

自分が質問したことベースでどういうところに躓いてるかを分析して、どういうアクションを取れば伸びるかを教えてくれるのが最高だった

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/927880/6cc0a3b8-454d-4e3c-993c-21dde065ed6c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/927880/296084fe-1cd9-4a30-8739-f7e70afa061e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/927880/ee657275-a84b-45f0-bc55-aedf5ce4efc8.png)

<h2>結論</h2>
ライフハックを見つけてしまった

本番だとAIは使えないので、一人で頑張って解くことになるのだが、こういう自分で復習や勉強をする際に、自分だけじゃどうしようもない状況から脱しやすい

特に、自分のコードベースで自分の間違いを指摘してくれるのは、解答解説を解説ページや動画での解説を見ても絶対にできないことで、めちゃくちゃよかった

人とペアプロすると相手のことを気にしてしまったりするが、GPTとペアプロすると相手のことを気にしないで自分の言葉、自分のペースで質問できる環境は最高だった

あと、自分の質問したことが蓄積して最後にフィードバックしてくれるのは、今後どうやって勉強していくべきかの参考になった

加えて、質問するたびにめちゃくちゃ褒めてくれるので、コード書くモチベがめちゃくちゃ上がってよかった。気持ちよくコードを書けてよかった！
遺伝研スパコンSlurmの使用方法

2025年3月に遺伝研スパコンがアップデートされ、使い方が変わって問い合わせがちょこちょこあるのでメモ。変な部分があれば教えてください。

# ログイン
これまでの`qlogin`は使えなくなったので
```bash
ssh a001
# a002もしくはa003でもOK (a001は混雑気味な雰囲気がある)
```
ゲートウェイノードには基本的に用事がないので、そのままインタラクティブノードに入れるようにすれば良くないか？と思ったので、`~/.bashrc`に以下の文を追加するとすぐに入れて便利
```bash:~/.bashrc
if [ "$(hostname)" == "gw" ]; then
    ssh a001
fi
```

# ジョブ実行

shortノード、4コア、8GB/コア(計32GB)でジョブを行う場合

```bash:job.sh
#!/bin/bash
#SBATCH --job-name=JOBNAME
#SBATCH -N 1-1
#SBATCH -n 4
#SBATCH --mem-per-cpu=8G
#SBATCH --partition=short
#SBATCH --error=/home/USERNAME/log/%x_%j.err.log
#SBATCH --output=/home/USERNAME/log/%x_%j.out.log

#########YOUR JOB#############
```

JOBNAMEは好きなように、USERNAMEは自分のユーザー名に変える。
partitionはshort, epyc, rome, mediumを指定
エラーログと標準ログが/home/USERNAME/logに保存されるような設定なのでここも好みで書き換える。

完成したら
```
sbatch job.sh
```
でジョブを投入

# ジョブの状況確認
SGEでいう`qstat`まわり。
入力するのが少し面倒なので、`~/.bashrc`で先に定義しておくのと、`~/.node.py`というファイルを作っておくと楽。
```python:~/.node.py
import re
import sys

content = sys.stdin.read()

nodes = ["NodeName" + node.strip() for node in content.split("NodeName") if node.strip()]

print(f"{'Partition':<10}{'Node':<10}{'State':<15}{'CPUTot':<8}{'CPUAlloc':<10}{'RealMemory':<12}{'AllocMem':<12}{'AllocTRES'}")

for node_data in nodes:
    node_name = re.search(r"NodeName=(\S+)", node_data).group(1)

    partition_match = re.search(r"Partitions=(\S+)", node_data)
    partition = partition_match.group(1) if partition_match else "unknown"

    state = re.search(r"State=(\S+)", node_data).group(1)
    cpu_tot = re.search(r"CPUTot=(\d+)", node_data).group(1)
    cpu_alloc = re.search(r"CPUAlloc=(\d+)", node_data).group(1)
    real_memory = re.search(r"RealMemory=(\d+)", node_data).group(1)
    alloc_mem = re.search(r"AllocMem=(\d+)", node_data).group(1)

    alloc_tres_match = re.search(r"AllocTRES=(\S+)", node_data)
    alloc_tres = alloc_tres_match.group(1) if alloc_tres_match else "N/A"

    real_memory_tb = int(real_memory) / 1024 / 1024
    alloc_mem_tb = int(alloc_mem) / 1024 / 1024

    print(f"{partition:<10}{node_name:<10}{state:<15}{cpu_tot:<8}{cpu_alloc:<10}{real_memory_tb:.2f}TB   {alloc_mem_tb:.2f}TB   {alloc_tres}")
```

```bash:~/.bashrc
alias qstat='squeue -u ${USER} --format="%.18i %.9P %.20j %.18u %.2t %.10M %.6C %.10m %.10L %.20V %.20S %R"'
alias qall='squeue --format="%.18i %.9P %.20j %.18u %.2t %.10M %.6C %.10m %.10L %.20V %.20S %R"'
alias qnode="scontrol show node | python ~/.node.py"
```

`qstat`で自分のジョブが、`qall`で全ユーザーのジョブが、`qnode`でノードごとの混雑状況(`qstat -f`的なコマンド)が確認できる。
`qall`は`qall -p medium`のようにするとmediumノードだけが表示可能。


# ストレージ確認
こちらも`~/.bashrc`で先に定義しておくと楽。
```bash
alias quota="lfs quota -u ${USER} ${HOME}"
```

`quota`で現在使用しているストレージが表示できる。

# conda/mamba周り
`~/.bash.rc`に
```
eval "$(mamba shell hook --shell bash)"
```
があるとgwノードにずっとログインできなくなるので
```
if [ "$(hostname)" != "gw" ]; then
    eval "$(mamba shell hook --shell bash)"
fi
```
とすると良くなった。
大手町のInspired Labでのワークショップにご参加いただきありがとうございました。

![1741892346248.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4022238/de4ddc2d-e6a1-45d4-a70b-0029c0d0af47.jpeg)

大手町のInspired Labでのワークショップにご参加いただきありがとうございました。
Mat3raのプラットフォーム、ケーススタディ、フィーチャーをいろいろな側面から体験して頂いた、かなり濃い一日でした！
またご参加いただけなかった方は、オンラインでご視聴、体験していただけます。
無料のアカウントを作成し ご連絡ください。
‍ケーススタディについてのリンクはこちら： https://www.mat3ra.com/case-study
日本でのワークショップを定期的に開催する予定です、よろしくお願いします。

______________________________

Thank you for joining our workshop at Inspired Lab in Otemachi, Tokyo.
:brain: It has been a very intensive day, discovering the Mat3ra platform, some of its capabilities and our latest case studies. If you could not join, we will put it online so that you can review it.
Don't hesitate to create your free account: https://www.mat3ra.com/?utm_source=qiita&utm_medium=newsletter
You can also access the case studies we have introduced (and many others) here: https://www.mat3ra.com/case-study
Keep tuned as we will keep organizing workshops in Japan regularly.
【Azure】可用性ゾーンが西日本リージョンで利用可能に

Azure更新情報には出ていないようなのですが、ひっそりと西日本リージョンで可用性ゾーンが利用可能になったようです。Xで調べてみると、3/21頃から使えるようになっていたようです。

以下のMicrosoftドキュメントを見ると西日本リージョンが可用性ゾーン対応していることが明記されています。
[Azure regions list](https://learn.microsoft.com/en-us/azure/reliability/regions-list)

このドキュメントの更新履歴をみると3/21にコミットされているので、やはり3/21から利用可能となったようです。

# 確認してみた
いくつかのリソースで西日本リージョン＋可用性ゾーンの設定が出てくるか確認してみました。
### VM
![vm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850747/b700358f-f55d-43d1-9ab8-280d78f64c3e.png)

### パブリックIP
![pip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850747/2ee4bf4a-3874-4a25-bb4a-9da515e03107.png)

### NATゲートウェイ
![natgw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850747/8591ac6d-9af2-4026-9c3b-43baf70f2d3e.png)

### ストレージアカウント
![str.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850747/7e7fd520-c6c4-438b-a42b-662d228a373d.png)

### Application Gateway
![appgw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850747/b9079d84-0450-492a-a0fa-db06c140d896.png)

ちゃんと可用性ゾーンの設定が出てきていますね。

# デプロイしてみた
画面上は設定値が選択できるものの、実際にデプロイするとエラーになることがあるAzure。試しにストレージアカウントをデプロイしてみました。ちゃんとデプロイできました。

![str02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850747/2ab86f99-41dc-4787-a879-366ab0637889.png)

他のリソースはもしかしたらエラーになる可能性はありますが、少なくともストレージアカウントはデプロイできたので、西日本リージョンに可用性ゾーンができたことは間違いなさそうです。

西日本リージョンでもついに可用性ゾーンが使えるようになったので、設計の幅が広がります。Azure Container Appsも西日本リージョンで使えるようになったりと、西日本リージョン、充実してきています。今後は西日本リージョンも積極的に使っていきたいですね。
視覚化！　モンテカルロ木探索をできるだけわかりやすく解説

### 1.はじめに
　囲碁AIのAlphaGoやそこから派生したAlphaGo ZeroやMuZeroにも用いられているモンテカルロ木探索についてできるだけわかりやすく解説した記事となります。イメージをつかんでいただく用なので割とざっくりした記事になると思います。また、動画でモンテカルロ木探索の動きを出しているのはおそらくこの記事のみなのではないかと思っています。友人に説明するときにも、モンテカルロ木探索の動きを視覚化したかったので今回Unityを用いて視覚化してみることにしました。
 
### 2.モンテカルロ木探索とは
　まず、文章のみで概要を説明します。**視覚化された方がわかりやすいという方は3.モンテカルロ木探索のうごきの視覚化まで読み飛ばしてください。**
　モンテカルロ木探索は、囲碁や将棋などの完全ゲーム木を書くことが難しいゲームを学習可能とした木探索の一種です。完全ゲーム木とは取りうる可能性のあるすべての盤面を木で表したものです。〇×ゲームとかなら最初はどこに〇を書くかで、9通り、次に×をどこに書くかで8通り…と完全ゲーム木を書くことがで来ますが、将棋や囲碁ではすべて書くことは困難です。気になったので調べたのですが、将棋は初手30通りあるそうです。ただ、持ち駒があった場合それを空きマスどこに置くか、持ち駒が複数種類あるのなら持ち駒の種類×空きマス通りの置き方があるわけですから、木を書くことは不可能に近いです。そこでモンテカルロ木探索の出番です。モンテカルロ木探索はモンテカルロ法に基づいた木探索です。モンテカルロ法はランダムに点を打ってその点がどんな割合で円に入っているかで、円周率を求めるやり方で有名な手法です。このモンテカルロ法に基づいた木探索であるモンテカルロ木探索では、最初の一手は価値が高くて、より選ばれていない行動を選択し、その後ランダムにシミュレーションします。また、一定回数同じ行動を選んだ場合、その行動の次の行動も価値が高く、選ばれていないものを選んでランダムシミュレーションします。こうすることで、効率よく木を広げていくことができ、将棋や囲碁も学習できるようになるというわけです。さて、ここまで文章のみで説明してみましたが、やはり文字だけでは正直何を言っているかわからないと思います。次の章からはお待ちかねのモンテカルロ木探索の視覚化に入っていきたいと思います。

 ### 3.モンテカルロ木探索の動きの視覚化
 　概要を文字だけでも説明されてもわかりづらいと思うので、モンテカルロ木探索の動きを視覚化してみました。こちらはニムという石取りゲームの例です。最後の石を取った方が勝ちで、同じエリアからはいくつ石をとってもいいというルールがあります。このゲームをモンテカルロ木探索で行った動きのイメージをGIFにしてみました。左上のnが試行回数、水色の丸が石を表しています。ノードがオレンジ色になっている部分では先手の勝ち、ノードが水色になっている部分では先手の負けを表しています。
  
![ccdtG6z1SbK11ZXROfiz1742917390-1742919308.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029805/2b2442ea-c534-4454-a4c5-214402bef8ff.gif)

厳密な計算をしていないのであくまでイメージですが、勝率の良いものが優先的に選択されて木が大きくなります。また、選択されていない行動も探索するので負ける手も優先度は低いですが、展開されていきます。木が展開されている部分では価値が高くあまり選択されていない行動をとり、展開されていない部分ではランダムシミュレーションを行います。動画にしてみると、オレンジ色のノードが先に展開され、最後に水色のノードを展開していくのが見て取れます。このようにモンテカルロ木探索では勝ちにつながるノードはどんどん展開され、負けにつながるノードは後から展開して木を大きくしていくイメージになります。このようにしてモンテカルロ木探索では木を大きくして、完全ゲーム木が書けない問題でも学習を可能としています。

### 4.参考にした記事のリンク
- ニムを用いての説明はこちらのサイトから頂戴いたしました
https://www.brainpad.co.jp/doors/contents/01_tech_2018-04-05-163000/
- より詳しく解説してほしいという方はぜひこちらの記事を読んでみてください
https://qiita.com/pocokhc/items/392a7f89c79f5e1e6bca
SwiftUIXを使ってみた

SwiftUIXを使ってみたんだけど、これすごい便利だった！標準のSwiftUIでちょっと物足りないなと思ってた部分が、これ一つでかなり補えて、アプリ作りがだいぶ楽になった感じ。例えば、UIコンポーネントが豊富で、標準だとちょっと使いづらかったり、足りない機能があったところに、いい感じに拡張が加わっているから、もう一から自分で作る必要がほとんどなくなった。

それに、UIKitやAppKitの機能も取り込まれているから、もしSwiftUIだけで足りないなと思っても、柔軟に対応できる点が大きなポイント。実際、iOSだけじゃなくて、macOSやwatchOSにも対応しているので、クロスプラットフォーム開発にもかなり重宝している。

Indicator、CollectionView、PaginationView、Menuなどのコンポーネントが利用できる。

とにかく、コードがスッキリして、アプリの見た目や動きも洗練されるから、もしSwiftUIに物足りなさを感じているなら、SwiftUIXは試してみる価値ありだよ！

https://github.com/SwiftUIX/SwiftUIX
AWS EC2 の EBS を使いすぎて課金した話

## 昔 Azure でもあったよ

https://qiita.com/t13801206/items/e236375ce7bd25e9d314

## AWSに課金した

課金したというか、課金してしまった。する気はなかったのに。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/0282dc9e-189d-4e0e-973f-c26d48570864.png)

### 0.2ドルっていくら？

100円以下であることは確か

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/c6a782ca-4e75-40a9-9641-9dcb5ad81745.png)

### EBSが原因だった

何が原因だったか、わかりやすく表示されるのはイイネ！

**EC2を停止しても、EBSがアタッチされていたら課金されるぞ！！**

考えてみれば当たり前、サーバ止まっててもデータは生きているでしょう？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/9d3d18e3-5e6d-4d8b-aad7-ce75e90f2d21.png)

#### EBSは30GBまで

EC2を複数台起動するときには、トータルの容量に注意しよう
30GBを超えた分は課金対象だ！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/84f1e98a-8646-406f-821a-63ff37858f06.png)


EC2を複数台起動するときは

## おわりに

今度から気を付けよう！

https://qiita.com/Yuji-Ishibashi/items/bb1c0042fd16a9350c5a
Azure：ログアラートの設定にIdentityの欄が増えている

Azureのログアラートの設定にIdentityの設定項目がいつの間にか増えていました。

![01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850747/2a61436d-1d12-421f-952e-a95b641f49c8.png)

この設定項目に関してMicrosoftのドキュメントを確認したところ、以下の記載がありました。
> [ID] セクションで、ログ検索アラート ルールがログ クエリの送信時の認証に使う ID を選びます。
> (中略)
> マネージド ID を使わない場合、アラート ルールのアクセス許可は、ルールが最後に編集されたときに、ルールを編集した最後のユーザーのアクセス許可に基づきます。

引用元：https://learn.microsoft.com/ja-jp/azure/azure-monitor/alerts/alerts-create-log-alert-rule#managed-id

# 疑問
* マネージドIDを使わない場合（＝既定値を選んだ場合）、アラートを設定したユーザーの権限を剥奪するとアラートは正常に動作するのか
* アラートを設定したユーザー自体を削除するとアラートは正常に動作するのか

# 検証
1. 検証用ユーザーを作成
1. テスト用Log Analyticsを作成し、作成した検証用ユーザーに共同作成者ロールを割り当て
1. サブスクリプションのアクティビティログをテスト用Log Analyticsへ出力するように設定
1. 検証用ユーザーでサインインし、テスト用ログアラートを作成。アクティビティログに何か出たらアラートがあがるように指定。IDの設定は「既定」を選択する。その他は既定値とする
1. ログアラート設定後、リソースグループを作ったり消したりしてアクティビティログを発生させ、ログアラートが発報されることを確認する
1. 検証用ユーザに割り当てていた共同作成者ロールを削除
1. 再びアクティビティログを発生させ、ログアラートが発報されるか確認する
1. 検証用ユーザーを削除する
1. 再びアクティビティログを発生させ、ログアラートが発報されるか確認する

# 結果
権限を剥奪した場合も、設定したユーザー自体を削除した場合もアラートは発報されました。

どうやらログアラートを設定したタイミングでLog Analyticsに対する適切な権限があれば、そのあと権限が奪われても問題ないようです。

Azure Data Explorer または Resource Graphにクエリを送信する場合は、マネージドIDが必須のようなので、それらを使ってアラートを設定する場合に活用する設定なのではないかと推測します。
Hugging Face Spacesじゃなくて明らかに悪意ある不審なサーバーにアクセスしてしまった話

# この記事についての注意事項
:::note alert
この記事は情報共有とHugging Face Spacesを使っている方への注意のために作成したものであり、悪意あるサーバーへのアクセスを誘導・強制するものではありません。この記事自体、この記事で書かれている悪意あるURLへのアクセスすることを勧めるものではありません。なお閲覧した方が誤って悪意あるURLへ遷移しないように、そのURL自体はこの記事には直接載せていません。
:::

# タイポスクワッティング攻撃に引っかかった
タイポスクワッティング攻撃とは、正規のWebサービスのドメインと似たドメインを使用し、詐欺サイトに誘導したり、情報を搾取する行為らしいです。（調べるまで名前を知らなかった）

# 具体的な状況
https://huggingface.co/

1. Hugging Face SpacesにSpaceを作り、アプリをデプロイしようとしていた
2. Spaceを作った後、 Gitを用いて、ローカルリポジトリを操作していた
    1. git remote add origin https://~/~
    2. git fetch origin ・・・ この時点でエラーが発生
3. その際、リモートリポジトリとローカルリポジトリを連動させようとしていたが、うまくいかず、調査する過程でURLをアドレスバーに貼り付けてアクセスしてしまった
4. その結果として、おそらくHugging Face Spacesのアカウント名やSpace名がバレてしまった（最もアクセスした時点で色々と情報は取られているとは思う）（マルウェアが仕込まれていたかどうかなどは判断できないが、少なくとも普通のサイトではなかった）

# どう言うURLを入力していたのか❓
単刀直入に言うと"g"が一つ抜けていました....コピーできない開発環境だったから手打ちで行ったのが不味かったな....

# まとめ
:::note
Hugging Face Spacesを使用する際は、URL（ドメイン）の打ち間違いに注意しましょう。
:::

:::note alert
最初にも言っていますが、この記事はこのサイトへのアクセスを勧めていません。無闇にアクセスしない方が良いです。
:::

# ちなみに
そのサイトを開くとウィンドウズエラーポップアップというような画面が出ていました。電話番号みたいなのも書かれていたので、おそらく詐欺サイトです。
SecURLでアクセスしたら、何も表示されないみたいですがね。![スクリーンショット 2025-03-25 23.46.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/0f815a1c-b7ec-488d-aafe-bb457ffb8ffd.png)
0からエンジニアになるまでの記録【Day5】

:::note info
この記事は未経験からフルタイムで仕事をしながら2025年12月までにエンジニアとして転職することを目標に学習している筆者の記録です。初心者として理解しやすい言葉でまとめるように意識して書いています。同じような状況の方がもしいらっしゃれば、一緒に頑張りましょう🔥エンジニア転職まで残り283日！
:::

## 3/25に学んだこと👩‍💻
現在プログラミングブートキャンプに参加し、laravelでインスタのクローンアプリを作成中。
     
     
<dl>
  <dt>Followボタンの実装の続き</dt>
  <dd>一度クリックするとUnfollow</dd>
  <dd>もう一度クリックするとFollow</dd>
</dl>

***
### 

1\. Modelの使い分け(大事！☝️）

あるユーザーが 他のユーザーをフォローできる機能を実装するためのもの
```php:User.php
# To get all the followers of a user
    public function followers()
    {
        return $this ->hasMany(Follow::class, 'following_id');
        //このユーザーをフォローしている人（フォロワー）を取得する
    }

    #To get all the users that a user is following
    //people you follow
    public function following()
    {
        return $this->hasMany(Follow::class, 'follower_id');
        //このユーザーがフォローしている人を取得する
    }

    public function isFollowed(){
        return $this->followers()->where('follower_id', auth()->id())->exists();
        //現在ログインしているユーザーが、このユーザーをフォローしているかチェックする
    }
```
フォロー関係の詳細情報（ユーザー情報）を取得するためのメソッド
```php:Follow.php
# To get all the followers of a user
   #To get the info of a follower
    public function follower()
    {
        return $this->belongsTo(User::class, 'follower_id');
        //このフォロー関係のフォローしている側のユーザー情報を取得
    }

    public function following(){

        return $this->belongsTo(User::class, 'following_id');
        //このフォロー関係のフォローされている側のユーザー情報を取得
 }
```

## 理解が足りない部分、復習事項📖
- [ ] 本日の授業の復習動画視聴
- [ ] ブラインドタッチの練習
Homebrewを用いずにruby,rbenvの環境を構築する

## 概要
この記事ではHomebrewでrubyの環境構築を意地でも使いたくない私の備忘録です。



## 実行環境
| チップ　|Apple M1|
|---|---|
|OS　　|Sequoia
シェル　|BASH

## 初めに
whichコマンドを用いて、rbenvがインストールされているか確認。
```BASH
$which rbenv
/Users/.rbenv/bin/rbenv
```
pathが出力されればインストールされている

## gitでrbenv,ruby-buildを取得
場所は~/.rbenvとしてホームディレクトリ直下に不可視ファイルとして配置し、移動する。

```BASH
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
cd .rbenv
```
ディレクトリの中身を確認したい場合は以下のコマンドで確認
```BASH
ls 
open .
```
pluginsディレクトリに移動してruby-buildをクローンする。
ruby-buildはrbenvのプラグインで、rbenv installはこのプラグインがないと使用できません
```BASH
cd plugins
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
```
### rubyを取得する

--listオプションでダウンロード可能なバージョンを調べる

```BASH
rbenv install —list
```
```BASH
rbenv install 取得したいrubyのversion
```
これで完成です。



## ⚠️libyamlでエラーが出力される場合
rbenvは依存関係をYAMLで管理するため外部ライブラリが必要です。
先ほどと同じようにgitで取得する方法を以下に示します。
makeとcmakeを使用します。
⚠️ビルドに時間がかかります
```BASH
git clone https://github.com/yaml/libyaml.git
cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 .
make
sudo make install
```

## ⚠️cmakeがない場合
libyamlをビルドするにあたってcmakeが必要になります。
```BASH
git clone https://github.com/Kitware/CMake.git
```
whichコマンドでpathを取得し
⚠️標準出力は異なる場合があります
```Bash
$ which cmake
/usr/local/bin/cmake
```
標準入力で使えるようにシェル(Bash)に記述
```Bash
$cd
$open .bash_profile
```
```Bash:bash_profile
### Cmake ###
export PATH=/usr/local/bin/Cmake:$PATH
```
変更内容をシェルに読み込ませて、cmakeにpathが通ったか確認します。
```
$source ~/.bash_profile
$cmake --version
/usr/local/bin/cmake
```

### まとめ
Homebrewを使わない場合、依存ライブラリを自力でダウンロードして手動で設定する必要があり、非常に手間です。大人しくHomebrewを使用したほうがいいのでしょうか...
npm installしたライブラリの更新チェックとアップデートについて

## はじめに
最近、業務でNext.jsをv14からv15へアップデートする機会がありました。その際の手順や注意点を、備忘録も兼ねて記事にまとめます。
依存ライブラリの脆弱性対応などでアップデート作業が必要になった方の参考になれば幸いです。

## 更新先のバージョンの確認
まず、いきなりアップデート作業を始めるのではなく、更新可能なバージョンを確認しましょう。
`npm outdated`コマンドを実行すると、インストール済みのパッケージに新しいバージョンが存在するかどうかを確認し、一覧表示してくれます。

実行例:

```
$ npm outdated
Package      Current  Wanted  Latest  Location                  Depended by
primereact   10.9.2   10.9.3  10.9.3  node_modules/primereact   your-project
typescript    5.7.3    5.8.2   5.8.2  node_modules/typescript   your-project
```
**Current:** 現在インストールされているバージョン
**Wanted:** package.jsonのバージョン指定を満たす最新バージョン
**Latest:** パッケージの最新リリースバージョン
このコマンドで、どのパッケージにアップデートが必要か、大まかな状況を把握できます。

## パッケージの更新
それでは、パッケージの更新を行います。更新作業に便利なライブラリがあるので紹介します。
**npm-check-updates**を使うと、package.json内の依存関係の確認や更新を簡単に行えます。今回はこのツールを使って作業を進めます。

### npm-check-updates のインストール
まず、以下のコマンドでnpm-check-updatesをグローバルにインストールします。プロジェクトごとにインストールする場合は -g オプションを外してください。

```
npm install -g npm-check-updates
```
インストールが完了したら、ncuコマンドが使えるようになります。

更新可能なパッケージの確認
package.json があるディレクトリで以下のコマンドを実行します。

```
ncu
```
これにより、`npm outdated`と同様に、更新可能なパッケージとその最新バージョンが表示されます。ncuは、package.jsonを実際に書き換えることなく、どのバージョンに更新できるかを確認するのに便利です。

実行例:

```
$ ncu
Checking package.json
[====================] 20/20 100%

 next            ^14.1.0  →  ^15.0.0
 react           ^18.2.0  →  ^18.3.0
 react-dom       ^18.2.0  →  ^18.3.0
 typescript       ^5.3.3  →   ^5.8.2

Run ncu -u to upgrade package.json
```
### package.json の更新
ncuで更新内容を確認したら、実際にpackage.jsonを更新します。
特定のパッケージのみを更新したい場合は、パッケージ名を指定します。今回はNext.jsのアップデートが目的なので、まずはnextパッケージを指定して更新してみます。

```
ncu -u next
```
reactやreact-domなど、Next.js v15が要求する関連パッケージも併せて更新します。

```
ncu -u next react react-dom
```
あるいは、ncuで表示された全てのパッケージを最新バージョンに更新する場合は、-uオプションのみを指定します。

```
ncu -u
```
注意: 一度に全てのパッケージを更新すると、予期せぬ問題が発生する可能性があります。
特にメジャーバージョンのアップデートが含まれる場合は、主要なライブラリ（今回はnext）から段階的に更新し、都度動作確認を行うことをお勧めします。

### その他のパッケージのインストール
ncu -uコマンドはpackage.jsonファイルを書き換えるだけです。更新されたpackage.jsonの内容に従って、実際にパッケージをインストール（またはアップデート）するには、以下のコマンドを実行します。
```
npm i
```

これで、指定したバージョンのパッケージがnode_modulesにインストールされます。

## メジャーバージョンへのアップデートに伴う確認事項
Next.jsのようなフレームワークのメジャーアップデートでは、単にパッケージバージョンを上げるだけでなく、変更後に問題なく動作するのかの確認も必ず行ってください。

## まとめ
今回はnpm-check-updatesを利用してNext.js v14からv15へアップデートする手順を紹介しました。

- npm outdated や ncu で更新可能なバージョンを確認する
- ncu -u [package-name] で package.json を更新する（段階的な更新を行う）
- npm install で実際にパッケージをインストールする
- 開発環境での動作確認やビルド、テストを入念に行う

この記事が、皆さんのライブラリアップデート作業の一助となれば幸いです。
【OpenSSL】 SSL証明書を楕円曲線暗号(ECC)を利用して取得する

秘密鍵を RSA にした場合のSSL証明書取得方法についてはこちらで説明しましたが、 https://qiita.com/unaq/items/6011111683658c4ab7a5 楕円曲線暗号(ECC)を利用した場合は、以下のようになります。

差異のある手順だけ、こちらで説明します。

---

サーバの秘密鍵、署名リクエストを作成します。

```
openssl ecparam -genkey -name secp384r1 -out /var/lib/acme/private/SERVER0001.key.ec
openssl req -new -sha256 -key /var/lib/acme/private/SERVER0001.key.ec -subj "/CN=www.example.com" > /var/lib/acme/csr/SERVER001.csr.ec
```

---

Let's Encrypt に署名してもらいます。

```
acme_tiny --account-key /var/lib/acme/private/account.key --csr /var/lib/acme/csr/SERVER001.csr.ec --acme-dir /var/www/challenges/ > /var/lib/acme/certs/SERVER001.crt.ec
```

---

`/etc/httpd/conf.d/ssl.conf` を編集し、取得できた証明書と作成しておいた秘密鍵を指定します。先に取得したRSAのSSL証明書と並べて設定します。


```
SSLCertificateFile /var/lib/acme/certs/SERVER001.crt
SSLCertificateFile /var/lib/acme/certs/SERVER001.crt.ec
SSLCertificateKeyFile /var/lib/acme/private/SERVER0001.key
SSLCertificateKeyFile /var/lib/acme/private/SERVER0001.key.ec
```

---

`systemctl restart httpd` とし、証明書を有効にします。


以上
Power Apps With関数

With関数は、Textなどの非動作プロパティでも使用できる変数です。
With(
    {
    主語:"With関数は",
    修飾語:"Textプロパティーで動作する",
    述語:"関数です"
    },
    Concatenate(主語,修飾語,述語)
)

テキストの表示
With関数はTextプロパティーで動作する関数です
【Mac】デフォルトのシェルをBashに変更する方法

以下のコマンドを実行するとデフォルトのシェルをBashに変更できます。

```terminal
chsh -s /bin/bash
```

設定できるシェルは以下のコマンドで確認できます。

```terminal
$ cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
```
VSCode コメントアウト関連Tips 4選

ほうき星です。
普段VSCodeでコードを書いていますがコメントアウトに関して最近知った機能があり、
私自身がよく使用している機能も含め備忘録を兼ねて4つ紹介させてもらえればと思います。

# ブロックコメント
複数行選択した状態で`Shift + Alt + A`押下で選択した行をすべてブロックコメントで囲うことができます。

javascript
![javascript.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870591/4a1bef40-bed4-440e-aea7-a13789716a61.gif)

pythonにはブロックコメントがありませんが三連引用符で囲われた文字列になります
![python1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870591/892fc5cb-7cf0-4538-92a5-407139c93754.gif)

# 折り畳み
`#region` `#endregion`で囲むことで任意の場所を折りたたむことができます。
デフォルトで折りたたまれる単位であるクラスや関数等をまとめて折り畳みたい場合等に便利です。

```python:例
#region
def nanikashirano_shori1() -> None:
    pass

def nanikashirano_shori2() -> None:
    pass
#endregion
```
![python3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870591/33781997-db37-4202-b434-67d3e30a1303.gif)

# ミニマップでの強調表示
コメントアウトに`MARK:`と記述することでミニマップ上の文字列を強調することができます。
ミニマップ上で行方不明になりがちなので目印としてよく記述しています。
```python:例
# MARK: 何かしらの処理1
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870591/c240234f-4198-4e3c-bb7e-ea3f616f09f1.png)

# Todo Tree
VSCode純正の機能ではないのですが[Todo Tree](https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.todo-tree)という拡張機能を使うことで、コメントアウトに特定のキーワードを付けた際にハイライトと一覧化ができるようになります。
```python:例
# TODO: ちゃんと処理を書く
def nanikashirano_shori1() -> None:
    pass

# FIXME: 要修正
def nanikashirano_shori2() -> None:
    pass

# BUG:
# HACK:
# XXX:
# [ ]:
# [x]:
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870591/c61a07ee-7350-4fa7-b3f2-5e034758c210.png)

好みでsettings.jsonを編集することで反応するキーワードを増やすこともできます。

# さいごに
この記事が誰かの役に立てば幸いです。
VBAからDOS及びPowerShell経由で正規表現を使う際のブックマーク

# これは何？
記事を毎回編集し直すのが手間になってきたので
特化した物へのブックマークを別途記述

# 記事作成理由
・時間短縮
・簡単な正規表現(Testメソッドを使う類)を
　VBScript.RegExpからではなくPowerShell越しにする為の準備
　※VBScript廃止問題への抵抗
・元々は「こう扱っていたが…」の例を呼び覚ます為でもある

# 以下列挙
https://thom.hateblo.jp/entry/2017/01/31/012913

https://thom.hateblo.jp/entry/2016/02/14/112647

https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_regular_expressions?view=powershell-7.5

https://pmp-style.hatenablog.com/entry/VBA_call_PowerShell

https://qiita.com/u1f992/items/12b7297e9661b29d5ab9

https://zenn.dev/kumarstack55/articles/2021-01-25-powershell-hide-window

https://nkj-s.com/%E3%80%8Cwindows-script-host-object-model%E3%80%8D%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%AA%E3%81%84/
ありがとうの言い回しを紹介

日常生活でよく使われる日本語の「ありがとう」
以下は最も基本的な感謝の言葉で、ほとんどのシチュエーションで使用できます。店舗やレストラン、日常会話で、他の人に感謝を伝える際によく使われる言い回しです。

ありがとう（Arigatou）
「ありがとう（Arigatou）」は最も基本的でよく使われる「ありがとう」です。発音は「アリガトウ」、これは多くの台湾人が日本語を学ぶ際に最初に覚える言葉のひとつでもあります。
「ありがとう」は「普通の言葉」で、友達やカジュアルな場面で使うのに適しています。

発音は「アリガトウ」となりますが、「アリアトウ」とは違うので注意してください！

ありがとうございます（Arigatougozaimasu）
「ありがとうございます（Arigatougozaimasu）」は「ありがとう（Arigatou）」の敬語で、最も多用途に使える言い回しです。発音は「アリガトウ ゴザイマス」です。
正式な場面で使うことが多く、目上の人や初対面の人に対して使うのが適切です。
ビジネスシーンや敬意を表したい場面でも安心して使えます。

見知らぬ人に対しては、「ありがとうございます」と言うのが一番無難です。

どうも（Doumo）
「どうも（Doumo）」は簡潔でカジュアルな感謝の表現で、「ありがとう」に近いですが、もっと軽い感じです。
単独でも使えますし、「どうもありがとう」（本当にありがとう）といった組み合わせでも使われます。日常生活ではよく使われ、主に同僚や後輩との会話で使用されます。
あまり馴染みのない人に「どうも」を使うと、少し失礼に感じることがあるので注意しましょう。

助かります（Tasukarimasu）
「助かります（Tasukarimasu）」は直訳で「助けられます」という意味で、他の人に大きな助けをもらった時に使う感謝の表現です。
例えば、「本当に助かります」（本当に助かりました）など、困っているときにその助けに対して感謝を示す際に使います。
台湾では「できるだけ早くご返信いただければ助かります」といった意味で使う場合もありますが、これも感謝の意を込めて使われます。

感謝です（Kanshadesu）
「感謝です（Kanshadesu）」は「感謝（Kansha）」の礼儀正しい言い方で、感謝の気持ちを伝える表現です。
「ありがとう」よりも少し丁寧ですが、ビジネスで使う敬語ほど堅苦しくはない表現です。
例えば、「できました！感謝感謝です」（成功しました！大感謝）など、日常的な感謝を伝える際に使用します。

職場などのビジネスシーンではあまり使われませんが、感謝を伝えるフレーズとして便利です。

もっと見る：
https://www.j-culturearc.com/japanese-thank-you/
Auroraの自動バックアップが取れていない場合に通知する方法

# まとめ

- Auroraは単体で自動バックアップ機能がある
- ただ、その自動バックアップの取得に失敗した場合に通知する方法はない
- AWS Backupを用いることでバックアップジョブの結果をもって通知することが可能

# Auroraの自動バックアップについて

Auroraは単体で自動バックアップ機能があります。基本はこれを使うだけでOKです

https://qiita.com/docdocdoc/items/1e81501c13a90f87e99b#%E8%87%AA%E5%8B%95%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97

# バックアップの要件がある場合

商用運用となると、運用要件が存在します。今回のサービスではDR(Disaster Recovery)要件として以下が存在しています

- 毎日バックアップを取得している
- バックアップ取得が失敗した場合は、通知とチケット作成を行い、バックアップの手動取得と失敗の原因調査・再発防止を行う

この場合、Aurora自動バックアップは1日に1回取得されるため問題ありませんが、バックアップが取得した場合の検知が必要になります

# 自動バックアップの取得に失敗した場合に通知する方法はない

RDS・Auroraにはデータベースの状態に応じてイベントが発行されます。このイベントをEventBridgeに流すことで、通知ができるのではと考えていました

実際に、クラスタースナップショットに対してのイベントもあります

一方でイベントの種類は自動バックアップの作成中(RDS-EVENT-0168)と完了(RDS-EVENT-0169)だけで、失敗がありません

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/USER_Events.Messages.html#USER_Events.Messages.cluster-snapshot

なので、失敗した場合の通知を行う場合以下のような手段をとる必要があります

- RDS-EVENT-0168のイベントをもとにスクリプトを走らせて、スナップショットが作成完了するまでポーリングする
- バックアップウィンドウの時間が過ぎた後、イベント一覧を確認しRDS-EVENT-0169が発生の有無を確認する
- 自動バックアップではなく手動でスナップショットを取得する

1・2個目の方法はできなくはなさそうですが、可能ならばこちらから拾う形ではなく、サービスからトリガーされる形で検知がしたいです
3個目の方法は手動スナップショットはフルバックアップとなるため、自動バックアップと比較してコストがかかります

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-storage-backup.html#aurora-storage-backup.snapshot

>DB クラスタースナップショットは常にフルバックアップで、作成時にクラスターボリュームのサイズをキャプチャします。スナップショットを手動で取得するか、AWS バックアッププランを通じて取得するかにかかわらず、Aurora は手動スナップショットとして扱います。

# AWS BackupでAurora自動バックアップを取る場合

AWS Backupでは、Amazon Auroraの継続的なバックアップという形で自動バックアップの管理を行うことができます

https://dev.classmethod.jp/articles/update-aws-backup-aurora-point-in-time-restore/

仕組みは以下になります

- AWS Backupのバックアッププランで指定した時間帯にバックアップJOBが走る
- バックアップJOBが成功すると継続的バックアップ（=PITRに使用されるバックアップ）が作成される
- 日次の自動バックアップ自体はAWS Backupによって決定されたバックアップウィンドウの時間に取得される

より詳しい内部動作は以下の記事をご確認ください。

https://dev.classmethod.jp/articles/aws-backup-continuous-backup-rds-aurora-behavior/

AWS Backup を用いると、バックアップJOBという形でバックアップ処理が実行されるため、このJOBの結果を使用することでバックアップ失敗の検知ができます

バックアップ失敗の通知方法については以下の公式ドキュメントや記事を参考にSNSと連携して行うのがよいでしょう

https://docs.aws.amazon.com/ja_jp/aws-backup/latest/devguide/backup-notifications.html

https://dev.classmethod.jp/articles/aws-backup-enhances-sns-notifications/
何をしてもNOXが起動できない問題を解決した

# Noxが起動できない！！！
SVMやコア分離、セキュアブートやHyper-Vを見直してもNoxが起動できず、97%, 99%あたりで止まっていました。

以下私のPCの簡単な構成となります。
|パーツ名|型番|
|---|---|
|CPU|AMD Ryzen 9950X3D|
|GPU|NVIDIA RTX 5090|
|マザボ|GIGABYTE B850MAORUS ELITEWIFI6E ICE|
|OS|Windows 11 Home|

# レジストリをいじって解決
**regedit**を起動し、```コンピューター\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard```に移動します。
すると、こんな項目が出てくるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4045195/041bff88-a116-4f08-8958-5917f878ab85.png)

この中の以下の項目をそれぞれ設定します。
|項目名|設定値|
|---|---|
|EnableVirtualizationBasedSecurity|0|
|HyperVVirtualizationBasedSecurityOptout|1|

# 起動できた！！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4045195/80e977a1-14fa-46f7-a15b-4939f6295bff.png)

念のためLeoMoonでも確認してみましたが、```SLAT```も```VM Monitor Mode Extentions```もOKですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4045195/b2b66266-1d72-4e05-b04d-996206b40dd0.png)
【acme-tiny】 acme-tinyを利用して、Let's EncryptでSSL証明書を取得する

acme-tiny は httpd の再起動とか余計なことをしないので、certbot より使いやすいと思います。

詳しくはオフィシャルサイト、 https://github.com/diafygi/acme-tiny をご参照ください。

以下、Oracle Linux 9 での利用を前提に、認証したいFQDNが www.example.com で、httpサーバに apache 2.4.8 以降を用いる場合で説明します。

あくまで一例なので、実行される際はご自分の環境に合わせて読み替えてください。

---

まず、必要に応じて、httpd と mod_ssl をインストールします。既に入っていれば、不要です。

```
yum install httpd mod_ssl
```

---

epel をインストールします。これも既に入っていれば不要です。

```
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
```

---

acme-tiny をインストールします。インストールすると /etc/httpd/conf.d/acme.conf と /var/www/challenges/ ができるので、apacheをリロードするなりここから起動するなりします。

```
yum install acme-tiny
systemctl restart httpd
```

---

firewalld とかで外部からの接続を許可します。vpsなどのセキュリティ設定などでも80/443ポートを開放してください。こちらも、既に済んでいれば再設定は不要です。

```
firewall-cmd --permanent  --zone=public --add-service=https
firewall-cmd --permanent  --zone=public --add-service=http
firewall-cmd --reload
```

---

アカウントキー、サーバの秘密鍵、署名リクエストを作成します。

```
openssl genrsa 4096 > /var/lib/acme/private/account.key
openssl genrsa 4096 > /var/lib/acme/private/SERVER0001.key
openssl req -new -sha256 -key /var/lib/acme/private/SERVER0001.key -subj "/CN=www.example.com" > /var/lib/acme/csr/SERVER001.csr
```

---

Let's Encrypt に署名してもらいます。

```
acme_tiny --account-key /var/lib/acme/private/account.key --csr /var/lib/acme/csr/SERVER001.csr --acme-dir /var/www/challenges/ > /var/lib/acme/certs/SERVER001.crt
```

---

`/etc/httpd/conf.d/ssl.conf` を編集し、取得できた証明書と作成しておいた秘密鍵を指定します。


```
SSLCertificateFile /var/lib/acme/certs/SERVER001.crt
SSLCertificateKeyFile /var/lib/acme/private/SERVER0001.key
```

---

`systemctl restart httpd` とし、証明書を有効にします。


以上
2回目のサーバ構築案件をまとめてみる

# はじめに
いま参画している案件がもうすぐ終わりそうなので、まとめとして文章でアウトプットします。
「鉄は熱いうちに打て」というので今が書き時かと思って急いで書きます。

案件の内容はサーバ構築です。
詳しいことは書きませんが、私のエンジニア人生の中で２回目の構築案件です。
１回目で多くのことを学びましたが、まだまだ学ぶことがありました。

正直今回もボロボロでしたが、前回よりも環境が良くて身体・精神ともに健康です。

こういう振り返り行為はとても意義があると思うので、メモとして残します。

この文章は基本自分用のメモとして残します。
誤字ってたらすみません。
「書き言葉」の読み書きが苦手なので、軽い感じの「話し言葉」で書きます。
そもそも文章を書くのが得意ではないので、脈絡がない箇条書きチックな文章になるかもしれません。

# 結論
さっそく結論ですが、**仕事は何をするかより、誰とするか**です。
真理すぎてすみません。

今回の案件はとっても人に恵まれていました。
最高でした。

やってることは普通のサーバ構築でしたが、心が前向きだったので楽しかったです。

怒られることがなかったです。
そのため質問もしやすいし、話しかけやすいので結果として効率が良かったと思います。

でも、怒られてもいいことはあったかもしれません。
これも自分で反省しないと意味がないので、ここに書き残すことで忘れないようにしたいです。

まあ感想は楽しかったし、勉強になった。という感じです。
これからもう少し詳しく書いていきます。



# 反省点
### 人見知りすぎた
社会人にもなって人見知りというか、恥ずかしがりみたいのはよくないと感じました。
案件が進むにつれて、どんどん慣れていったので会話できるようになりましたが
最初から遠慮せずに話せばよかったです。

そもそもコミュニケーションに長けたメンバーが少ないので、自分が話をしないといけなかったです。
コミュニケーションエラーで宙に浮いたタスクがあって、進捗がギリギリになったことがありました。
序盤だったので、少し急いだら遅れは取り返せました。

なんか社会人３年目にして感じるのは、もっと適当でいいのかもしれないということ。
人によると思いますが、私は少し慎重すぎたかもしれません。
もっとガツガツ言ったほうが、案件を進める当事者になれるし
質問とかされても答えられると思います。

失敗したら次頑張ればいいし、取り返しがつかないミスだったら退職すればいい。
私は最近このスタンスです。（良い考えではないかも）
めちゃでかい失敗したら辞めます。ふつうに。
ほんとは大工さんとか農家みたいに体力仕事したいんすわ。


### 計画性がなかった
準備期間は長かったのに、計画を考えてなさ過ぎました。
構築はどのPCでするとか、エビデンスはどうやって吸い上げるとか
パスワードやら、IPアドレスやら準備してなさ過ぎました。

オンプレだったのもありますが、ここは最大の反省点化もしれません。

### システム全体像の把握ができてなさ過ぎた
サーバが構築できればよいと思っていたので、サーバのことしか考えていませんでした。
サーバの用途であるAPやDBについて知識がなさ過ぎて、設計の意図もわからないし
書かれている通りにやっているだけでした。

でも、構築が進むにつれて他のチームと会話することも増えてきて
質問されることも増えて、自分の意識の甘さに気づきました。

もっと全体を把握して、意図を理解しないとだめっすね。

- どんなシステムなのか
- 何に使われるサーバなのか
- 容量はどれくらい
- ポートはこれを使ってる
- 機器はこれとつながっている
- IPアドレスは何個持ってる
- 必要なアプリ、rpmは何か
- ユーザは何が必要か

もっとあると思いますが、まじで知らないと話にならない。
少しずつ勉強していきます。


# 良かった点
良かった点はあんまりないかもしれないけど強いていうなら、っていうのを頑張って書きます。

### 仕事を振り分けるようにした
これは途中からですけど。
最初はメンバー全員「誰かがやるだろう」というスタンスで作業してましたが、
前に書いたように、宙に浮いて消化されないタスクができ始めたので、
自分が消化するようにしたり、人に割り振る（押し付ける）ようにしました。

宙に浮くよりは押し付けるほうが100倍ましだと思いました。
ハラスメントとか言われたら普通に退職します。はい。

良かったことはこれくらいですかね。
絶対もっと早く気付くべきでした。

自分がやらないと誰もやらない。自分が主導でタスクを振り分ける。
気づくのが遅かったですが、自分が気づけて良かったと思います。



# どうすればもっと良くなるか
これが一番大事かもしれないです。
次に活かさないとただの感想になっちゃうので。

### まずはシステムの全体を把握する
さっきも色々挙げたように、全体を把握するのが大切だと思いました。
チェックシートとか作るのがいいかもしれないっすね。
ほんとに自分のことだけしかわからないのは意味がないので。
次はもっと色々な質問に答えられて、色々な人と会話できるようになりたい。

### 準備をする
反省点の対策みたいになっちゃうけど、準備をする。
構築の準備や、テストや配備の準備。
これもチェックシート作れそう。

実際に準備していく中で気づくこともあると思う。
結構この準備不足だったのは、自分の馬鹿さに悲しくなったので
次こそは頑張って準備するぞ。


### 最初から会話をする
もう遠慮はしないです。
最初からいろんな人に話しかけて、チャットもちょっとくらい余計なこと聞いても大丈夫でしょう。
あくまで仕事が円滑に進むよう、コミュニケーションをガツガツとっていくということです。


### タスクを振り分ける
自分がそういう立場かどうかはわかりませんが、今は他に振り分ける人がいないので
自分でやるしかないと思います。

誰かやってくれるんだったらいいけど、結局人に任せると後悔しそうなので
ハンドル握れるなら握っちゃったほうがいいのかなと思います。

責任は増えますが、自分主導っていうのは意外と視界が開けてくるものがあると最近感じました。
これも程度を考えて頑張ります。




# おわりに
ダラダラ長い感じになっちゃいました。
今回の案件は技術というよりも、案件の進め方だったり計画だったりマネジメントみたいな課題を強く感じました。
技術は正解があったり、対処不可能なら諦めたりできますが
正解がない問題は経験を積んで、身体で覚えるしかないと思うので今のうちから経験しに行きます。
社会のどこでも通ずる経験だと思うので、損もないと思う。

次もサーバ構築案件なので、
終わりそうなときに、また3回目を書きます。

以上。
エンジニアのためのプロジェクト管理完全ガイド：計画から実行まで

こんにちは😊
[株式会社プロドウガ](https://qiita.com/organizations/prodouga-com)の@YushiYamamotoです！
[らくらくサイト](https://rakuraku-site.prodouga.com/)の開発・運営を担当しながら、React.js・Next.js専門のフリーランスエンジニアとしても活動しています❗️

エンジニアにとってプログラミングスキルだけでなく、プロジェクト管理スキルも不可欠な時代となりました。本記事では、エンジニアが身につけるべきプロジェクト管理の基本から応用までを4つの観点から解説します。

### 1. プロジェクト計画立案のポイント

プロジェクトの成功は計画段階で半分決まると言われています。要件収集の正確さ、スコープ定義の明確さ、そして目標設定の具体性が重要です。

計画立案の際は以下の点に注意しましょう：
- ステークホルダーとの丁寧なコミュニケーション
- 曖昧な要件を明確化するための質問力
- 実現可能かつ挑戦的な目標設定

詳細は[エンジニアのためのプロジェクト計画立案ガイド](https://qiita.com/YushiYamamoto/items/81c5c5cd7a18fc31c402)をご覧ください。

https://qiita.com/YushiYamamoto/items/81c5c5cd7a18fc31c402

### 2. 効果的な進行管理の方法

計画したプロジェクトを予定通りに進めるには、多角的な進行管理が必要です。

- スケジュール管理：マイルストーンの設定とガントチャートの活用
- 品質管理：レビュープロセスとテスト計画の策定
- 課題管理：問題の早期発見と対応策の迅速な実施
- リスク管理：発生確率と影響度に基づく優先順位付け

これらのテクニックについては[進行管理完全ガイド](https://qiita.com/YushiYamamoto/items/fcbc9be95fc1c69c5668)で詳しく解説しています。

https://qiita.com/YushiYamamoto/items/fcbc9be95fc1c69c5668


### 3. チームの力を最大化するマネジメント

個々のメンバーの能力を活かし、チーム全体のパフォーマンスを高めるには：

- 各メンバーの強みと弱みを把握したタスク割り当て
- 定期的な進捗確認とフィードバック
- 問題解決のためのサポート体制の構築
- モチベーション管理とチーム文化の醸成

実践的なチームマネジメント手法は[こちらの記事](https://qiita.com/YushiYamamoto/items/a75010808f65cb7cd245)で解説しています。


https://qiita.com/YushiYamamoto/items/a75010808f65cb7cd245


### 4. 適切なプロジェクト管理手法の選択

プロジェクトの性質に合わせた管理手法の選択が成功への鍵です。

- ウォーターフォールモデル：要件が明確で変更が少ないプロジェクトに
- アジャイル開発：変化への対応力が求められるプロジェクトに
- スクラム：チームの自己組織化を重視したい場合に
- カンバン：継続的な改善とフロー管理に焦点を当てたい場合に


各手法の特徴と適用シーンについては[プロジェクト管理手法完全ガイド](https://qiita.com/YushiYamamoto/items/42a6c6f608f09a7a6d87)で比較検討しています。

https://qiita.com/YushiYamamoto/items/42a6c6f608f09a7a6d87

---

プロジェクト管理スキルは一朝一夕で身につくものではありませんが、上記の記事シリーズを参考に、日々の業務で意識的に実践することで着実に向上させることができます。ぜひ各記事の詳細も参照して、あなたのプロジェクト管理能力を高めてください。

何か質問や感想がありましたら、コメント欄でお待ちしています！


# 最後に：業務委託のご相談を承ります
私は業務委託エンジニアとしてWEB制作やシステム開発を請け負っています。最新技術を活用したレスポンシブなWebサイト制作、インタラクティブなアプリケーション開発、API連携など幅広いご要望に対応可能です。

「課題解決に向けた即戦力が欲しい」「高品質なWeb制作を依頼したい」という方は、お気軽にご相談ください。一緒にビジネスの成長を目指しましょう！

👉 [ポートフォリオ](https://yushiyamamoto.vercel.app/)

🌳 [らくらくサイト](https://rakuraku-site.prodouga.com/)
AWS SAA-C03になんとか合格した話です。

数日前になんとかSAA-C03を合格したため、振り返りをしたいと思います。

# 当時のクラウド知識について
2~3年前に取った「AWS Certified Cloud Practitioner（AWS CLF）」と趣味でマイクラをしたくて立ち上げたサーバくらいでした。

# 試験について
・試験時間：130 分
・問題数：65 個の問題 (複数選択または複数応答)

# 勉強方法について
勉強期間：6ヶ月ほど
勉強時間：1時間/日

教材は以下を使用しました。
・Udemy
・Blackbelt

# Udemy
以下を使用して、勉強しました。
１．[AWS 認定ソリューションアーキテクト アソシエイト試験対策問題集](https://www.udemy.com/course/saa-c03aws-g/?referralCode=FB7BD087EB2FE2453CC0)

２．[AWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集（6回分390問）](https://www.udemy.com/share/101rfM3@QQd8vjpVg_fZFgt9himOtXD6b78V7Rj8xGIqzPI2KNMTVHN6w8oKUQEFtE2Qb1vg/)

# Blackbelt
以下のAWS公式のYoutubeを見ました。
リンク：[Blackbelt](https://www.youtube.com/@JPAmazonWebServices)

# 試験結果
743点でギリギリセーフでした。(720/1000点が合格ライン)

# 次の目標
次は、AWS Certified Developer - Associate (DVA-C02)を狙っていきたいと思ってます。

# DVA-C02合格しました！
[DVA-C02 を合格したお話](https://qiita.com/onnobu/items/27f5857d7570eeb69095)
Dockerfileについて

Dockerfile の基本から、Fargateで動かすための実用的な例

## 🧱 Dockerfileとは？

`Dockerfile` は、Dockerイメージを作るための**設計図**。  
中に「どんな環境で」「何を実行するか」を記述します。

---

## ✅ 最小構成の例（Pythonアプリ）

例えば、Pythonアプリケーションを動かしたい場合の `Dockerfile` はこんな感じです：

```Dockerfile
# ベースイメージを指定（公式Pythonの軽量バージョン）
FROM python:3.11-slim

# 作業ディレクトリを設定
WORKDIR /app

# 依存ファイルをコピー＆インストール
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# アプリのソースコードをコピー
COPY . .

# コンテナ起動時に実行するコマンド
CMD ["python", "app.py"]
```

---

## 🧪 例: Flaskアプリ（Web API）

```Dockerfile
FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0

CMD ["flask", "run"]
```

### requirements.txt（例）
```
flask
```

---

## 🚀 ビルドとテスト

EC2 またはローカルで以下のコマンドを実行：

```bash
# Dockerイメージをビルド
docker build -t myapp .

# 動作確認（ポート指定が必要な場合）
docker run -p 5000:5000 myapp
```

---

## ☁️ Fargate用に注意する点

1. **ポート番号はタスク定義と一致させる（例: 80や5000）**
2. **環境変数などがあればCMDやENTRYPOINT、またはECS側で設定**
3. **ECRにpushしてECSで指定するだけでOK（EC2など不要）**
EC2でDocker環境を構築し、Fargateにデプロイする

やりたいこと
Fargate自体はDockerコンテナを「実行する」だけなので、ビルドや準備はEC2で行ないます。

1. EC2でDocker環境を作成（イメージ作成など）
1. それをFargateにデプロイしたい

---

## ✅ 一般的なFargateへのデプロイの流れ（EC2で準備）

### ① EC2でDocker環境構築
```bash
# Dockerfile を作成して、イメージをビルド
docker build -t myapp .

# AWS ECR にログイン
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin <アカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com

# ECRリポジトリ作成（最初だけ）
aws ecr create-repository --repository-name myapp

# イメージにタグ付け
docker tag myapp:latest <アカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/myapp:latest

# ECRにプッシュ
docker push <アカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/myapp:latest
```

### ② ECS + Fargateでタスク定義
- タスク定義に「ECRのイメージURL」を指定
- Fargateランタイムでタスク or サービス作成

### ③ 起動すれば、Fargate上でそのコンテナが動作します！

---

## 補足：EC2である必要はある？
- **EC2で環境構築** → OK（サーバー上で作業したいとき）
- **ローカルPCでも可**（同じ手順でECRへpushできます）
- **CodeBuildなどCI/CDでも可**

---

## 🎯まとめ

| 準備場所 | イメージ作成 | プッシュ先 | 実行場所 |
|----------|---------------|------------|-----------|
| EC2  | Docker Build | ECR | Fargate（ECS） |
応用情報のために整理！代表的な信頼性設計


## **はじめに：応用情報では混乱しがちな用語**  
応用情報技術者試験（AP）では、**フォールトトレランス、フェールセーフ、フールプルーフ** などの**信頼性設計**に関する用語が頻出します。  
しかし、どれも似たような概念で違いが分かりにくいですよね？  

この記事では、これらの用語を **分かりやすく整理** し、試験で迷わないように解説します！  

---

## **各用語の解説（例を交えて）**  

### **フォールトアボイダンス（Fault Avoidance）**  
✅ **障害が発生しないように、事前に対策する**  

**特徴：**  
- **「そもそも壊れないようにする」考え方**  
- **品質向上や強化設計** によって障害を防ぐ  

**例：**  
- **耐震データセンター**（地震が来ても壊れないようにする）  
- **高品質な部品を使う**（信頼性の高いサーバーやSSDを採用）  
- **ソフトウェアのバグを徹底的にテスト**（不具合の発生を防ぐ）  

---

### **フォールトトレランス（Fault Tolerance）**  
✅ **障害が発生しても、システムが動き続ける**  

**特徴：**  
- **壊れることを前提に設計**  
- **冗長化によってシステムの可用性を確保**  

**例：**  
- **RAID（ディスクの冗長化）** → HDDが1台壊れても動作継続  
- **クラスタリング** → 片方のサーバーがダウンしても、もう一方が稼働  

---

### **フェールセーフ（Fail Safe）**  
✅ **障害が発生したら、安全な状態にする**  

**特徴：**  
- **「壊れることを想定し、安全を確保する」設計**  
- **利用者や環境へのダメージを最小限に抑える**  

**例：**  
- **信号機の赤点滅**（壊れたら安全優先で赤信号に）  
- **電車の自動ブレーキ**（異常が起きたら緊急停止）  

---

### **フェールソフト（Fail Soft）**  
✅ **障害が発生しても、一部機能を制限して動作継続**  

**特徴：**  
- **完全に停止せず、縮小して動作を続ける**  
- **「使える範囲で動かす」アプローチ**  

**例：**  
- **飛行機のエンジン1基停止でも飛行可能**  
- **オンラインサービスの機能制限モード**（サーバー障害時に一部機能のみ提供）  

---

### **フォールトマスキング（Fault Masking）**  
✅ **障害が発生しても、影響を隠して正常に動作**  

**特徴：**  
- **障害が起きても、利用者には気づかせない**  
- **「異常を隠して」システムを継続させる**  

**例：**  
- **RAID1（ミラーリング）** → HDDが壊れてもユーザーは気づかない  
- **ECCメモリ** → メモリエラーを自動修正して影響を防ぐ  

---

### **フールプルーフ（Fool Proof）**  
✅ **人間がミスをしても、誤動作しないようにする**  

**特徴：**  
- **利用者のミスを防ぐ設計**  
- **誤った操作をしても問題が発生しないようにする**  

**例：**  
- **逆向きに刺せないUSB端子**  
- **電子レンジのドアを閉めないと動かない設計**  

---


## **覚え方のコツ（語呂合わせやイメージ）**  

| 用語 | 覚え方 |
|------|------|
| **フォールトアボイダンス** | **Avoid（避ける）＝そもそも障害を防ぐ** |
| **フォールトトレランス** | **Fault（故障）に耐える** |
| **フェールセーフ** | **Safe（安全）を優先** |
| **フェールソフト** | **Softwareみたいに柔軟に動く** |
| **フォールトマスキング** | **Mask（マスク）して隠す** |
| **フールプルーフ** | **Fool（バカ）でも間違えない** |

---

## **まとめ：試験対策ポイント**  
✅ 似ている用語を並べて覚えると理解しやすい！  
✅ **「安全性」か「可用性」かの視点で考えると間違えにくい！**  

応用情報でよく問われる概念なので、しっかり整理して得点につなげましょう！  

---

### **参考になったらいいね・ストックお願いします！**  
もしこの記事が役に立ったら、Qiitaの「ストック」や「いいね」で応援してもらえると嬉しいです！  

※この記事はchatGPを活用して作成しました。
【VRChat】Missing Credentialsの原因・解決法

![MissingCredentials.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936031/e99f1817-6ad1-49e5-8f9b-c5b7c6a11d85.png)

:::note info
no+eより修正・転記
https://note.com/vrc_yrd_/n/n602e963f611d
:::

# 目次
- [目次](#目次)
  - [解決法](#解決法)
    - [Logs・Libraryフォルダの削除手順](#logs--libraryフォルダの削除手順)
  - [原因](#原因)

## 解決法
VRChat Control Panel（VRChat SDK）の**Authentication**をクリック、
**Logout**をクリックしてログアウト後に再度ログインする。

:::note warn
ただし、これで直らない場合もありえます。
:::

![VRCUnity_Auth.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936031/cdd6484a-8a6a-41df-bced-29d3231b2f89.png)

:::note info
私は一応**Logs**と**Library**のフォルダをプロジェクトから削除しています。
（ついでにUser Settingsも削除してます）

その後、SceneをHierarchieに追加してシーンを復元しています。
:::

### Logs・Libraryフォルダの削除手順

各アバタープロジェクトのフォルダを開き、
その中にあるLogs ・ Libraryフォルダを削除する。

![Logs_Library_del.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936031/ad46679d-7b74-4a59-bcd7-03b68144e0b3.png)

## 原因
（２段階認証を設定している場合のみと思われるが）
１度ログインを行うと次回以降は２段階認証がスキップされるので、
画面上は２段階認証がスキップされて正常ログインしているように見えるものの、
内部では２段階認証が未実行の状態になっていると思われます。

https://twitter.com/slord399/status/1647281608100126723
GitHub + SSH で複数アカウント切替え

あれこれやっってみたけどキモはここ。

```bash
❯ vi ~/.ssh/config

Host github-main
  HostName github.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_ed25519_main
  TCPKeepAlive yes
  IdentitiesOnly yes # need for multiple accounts

Host github-sub
  HostName github.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_ed25519_sub
  TCPKeepAlive yes
  IdentitiesOnly yes # need for multiple accounts
```

Git HTTPS + Credential Manager がまあややこしくてクソ。

鍵の生成は ```ed25519``` が今どきの主流なのか。

  https://android.benigumo.com/20250323/github-ssh-multiple-accounts/
Edgeを使う最大のメリット（Microsoft 365 Copilotめちゃ良くね？って話）

# はじめに
世の中に多数あるブラウザの中からみなさんはどのブラウザを使っていますか？

- Google Chrome？
- Microsoft Edge？
- Mozilla Firefox？

この辺は自分の好みで選ぶのも良し！
周りに合わせてブラウザを選ぶのも良し！

どれを選んでも間違いはないと思います。

ただ、そうは言ってもそれぞれのブラウザ毎に個性はありますし、選ぶ判断材料は多くて困ることはないと思います。

# Microsoft 365 Copilotは自分のメインブラウザを決める理由になる
***マジのマジのマジで***便利。
Microsoft 365 CopilotはWebサイトを直接読み込ませて、チャットベースに指示を与えられます。
![{41C187C3-085F-4997-A6DF-0C126F8E6775}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1612369/219625ea-1402-40f4-8431-228b8c4c37ab.png)

これが本当に便利です。例えば以下のケースで使えます
- エラー解析のために、海外のサイトを開いて要約をしてもらう
- PDFファイルをEdgeで開いて、校閲してもらう ← 最近Acrobat Reader側でもAI機能が実装されているので微妙かも
- Web アプリのコードを解析してもらう

他にもいろいろありますが、Webサイトを直接読み込ませるのは、Microsot 365 Copilotが一番簡単でかなりの高性能だと思っています（単純な性能は他サービス（CopilotやGrok）に負けてると思っていますが、性能以外の利便性等が非常に優れています）。

# さいごに
個人的にMicrosoft製品をよく使うので、Edgeを押している部分はあります。
ただ、個人的な気持ちを差し置いても、Microsoftのサービスはユーザーさんに優しい設計となっており、とても好きです。