OmniAICreator/Qiita-1.07M huggingface dataset:
Rails 8  単一DBでherokuリリースすると出るエラーの応急処置


# Rails 8 からは…
Rails 8 からは Solid Trifecta（Cable／Cache／Queue）がデフォルトで有効化され、デフォルト設定では **4 つのデータベース接続** を要求されるそう。
そんなわけでHeroku の単一 Postgres アドオン環境でリリースを試みると、以下のようなエラーが発生する。

```

ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter

```
```
The 'cache' database is not configured for the 'production' environment

```
```
The 'cable' database is not configured for the 'production' environment

```
```
The 'queue' database is not configured for the 'production' environment

```

## 趣味で作成した小規模なアプリをとりあえずリリースしたいのに...
という人向けの記事です。
一旦解決はします。

## Solid Trifecta とは
というのは今回飛ばします。
ご自身で調べてみてください。

## というわけで取り敢えずの解決方法

 **database.ymlを単一DBに統合**  
 production内の記述を以下の通りにしてください。
 
```yaml:database.yml
production:
    primary: &primary_production
        <<: *default
        url: <%= ENV["DATABASE_URL"] %>
    cache:
        <<: *primary_production
    queue:
    <<: *primary_production
        cable:
    <<: *primary_production
```


以上で、Rails8の環境下でHerokuの単一Postgresアドオン環境でも**取り敢えずは**動きます。


# 参考
https://www.reddit.com/r/rails/comments/1ip9p8b/rails_8_heroku_pg_primary_sqlite_solid_queue/?chainedPosts=t3_1h6mzhl
【AtCoder,C#】一年半かかった入茶記事

# はじめに
今回はAtCoderで念願の入茶できたので入茶記事です。
茶色なんかまだまだですが、色がついたのが素直に嬉しいです。
というか一年くらいずっと一番下のランク（灰色）だったので、ようやくランクが上がったという安堵も大きいです。
私が要領悪いだけかもしれませんが、競技プログラミングって本当に難しいですね。

# 入茶までの期間

私が入茶するまでにかかった時間は大体一年半くらいでした。
途中明らかにサボってた時期を抜いても一年くらいでしょうか。

|<font color=""> **コンテスト受験歴** </font>|
|:-:|
|![遍歴](https://github.com/cushionA/ImageStrage/blob/main/%E5%85%A5%E8%8C%B6/%E8%8C%B6%E8%89%B2%E7%94%BB%E5%83%8F.png?raw=true)|

結構伸び悩んでいるのがありありと伝わりますね……。

# なんでこんなにかかったのか？

答えはズバリ **ちゃんと勉強していなかったから** です。

私は2025年の2月くらいまで、コンテストなどの復習をしてもどこかに記録するわけでもなく、ただ単に解説を見て感心するだけで終わらせていました。
しかしそれではいけないと心を入れ替えて、次のような管理表に「解けなかった問題 ＋ 解けたけど覚えておきたい問題」を記録するようにしました。

|<font color=""> **競プロ復習用ドキュメント** </font>|
|:-:|
|![alt](https://github.com/cushionA/ImageStrage/blob/main/%E5%85%A5%E8%8C%B6/%E5%BE%A9%E7%BF%92%E8%A1%A8.png?raw=true)|

そして問題を記録するだけではなく、アルゴリズムやライブラリ（自作含む）についてもこまめに記入しています。
するとやがてCまでは安定して解けるようになりました。
ですがそれだけでは茶色に行けそうもなかったため、スニペットを自作するなどして早く解けるように意識しました。

すると驚くべきことに**ポイントが爆上がりしたのです**。
そう、同じCまでとはいえ、早く解ければ千単位でごぼう抜きなんです。

早く解けなかった時もCまで解いて横這いか微減程度で持ちこたえ、早く解けた時にドカンと順位を伸ばしていたら茶色にたどり着けました……。

**実はD問題を解けたことないんですが。**

# 次の目標
次の目標はもちろん **<font color="LimeGreen">緑色</font>** です。
そしてⅮまで安定して解けるようになることです。
このために以下の取り組みを続けていこうと思います。

- **平日はDailyTrainingのMediumに参加し続ける。（時間的にリアルタイム参加は無理なのでバーチャル）**
- **管理表を利用した復習を続ける。**
- **Cまでをもっと早く回答できるようにして、D問題に使える時間を多くする。**
- **もっと自作ライブラリ ＆ スニペットを製造する。**

それではこれくらいで、来年には緑になっていたらいいな……と祈りながら記事を終えさせていただきます。
読んでいただきありがとうございました。
社長とのランチで気づいた「AI時代に生き残るエンジニア像」

今日は入社日。
ランチでは社長やリーダー陣とご一緒させていただき、これからのエンジニア像についての話が印象に残った。

特に心に残ったのは、「AI時代のエンジニア」についての話。

その話について、自分の考えも含めて整理する。

「クライアントのフワッとした要望を形にできる人が強い」

これからの時代、ただコードを書くだけでは価値が下がっていく。「クライアントの漠然とした要望を言語化し、設計に落とし込める人」こそが求められていく。

さらには、設計に基づいたプロンプトを生成AIに投げてコードを得るスキルや、AIが書いたコードの背景を理解し、正しいかどうかを判断できる知識が必要になる。

その判断力の軸になるのがコンピュータサイエンス

AIを使いこなすには、なぜこのコードになるのか？という背景を理解できる力が必要。

つまり、「設計思想」「データ構造」「アルゴリズム」「アーキテクチャ」といったコンピュータサイエンスの基礎知識が、これまで以上に重要になる。

この1年、自分はCSの基礎を地道に学んできた。

その学びが、これからの武器になると確信できた瞬間だった

学んだCSの基礎を実務に活かしいく。
MarkItDownで結合セルや空セルを含むExcelシートをMarkdownに変換してみた

## はじめに

さまざまな形式のファイルをmarkdownに変換するPythonライブラリ「[MarkItDown](https://github.com/microsoft/markitdown)」を使って、結合セルや空セルを含むExcelシートをMarkdownに変換した際の挙動をGoogle Colabを使って確認してみました。

確認に使用したファイルは以下のリポジトリに置いています。

リポジトリ

https://github.com/steelpipe75/markitdown-experiments

ソースコード（ノートブック）

https://github.com/steelpipe75/markitdown-experiments/blob/main/Excel/markitdown-excel.ipynb

## 実験してみたこと

### 1. 結合セルを含むExcelシートをMarkdownに変換するとどうなる

#### 1-1. 列方向に結合

`Excel/3_merge-columns-table.xlsx`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33160/60dc6650-abee-4b74-aa31-39a20e604e54.png)

| a | b | c |
| --- | --- | --- |
| 1 | 2.0 | 3 |
| 4 | NaN | 5 |
| 6 | 7.0 | 8 |

```markdown
| a | b | c |
| --- | --- | --- |
| 1 | 2.0 | 3 |
| 4 | NaN | 5 |
| 6 | 7.0 | 8 |
```

結合セルの左の位置のセルに値が入り、残りのセルは NaN になる

#### 1-2. 行方向に結合

`Excel/4_merge-rows-table.xlsx`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33160/a34b0636-00f7-4e96-945c-2955d1b00c94.png)

| a | b | c |
| --- | --- | --- |
| 1.0 | 2 | 3 |
| 4.0 | 5 | 6 |
| NaN | 7 | 8 |

```markdown
| a | b | c |
| --- | --- | --- |
| 1.0 | 2 | 3 |
| 4.0 | 5 | 6 |
| NaN | 7 | 8 |
```

結合セルの上の位置のセルに値が入り、残りのセルは NaN になる

#### 1-3. 列、行の両方向に結合

`Excel/5_merge-both-table.xlsx`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33160/f15e26b3-914d-47cd-babf-2b3723edf1b1.png)

| a | b | c |
| --- | --- | --- |
| 1.0 | 2.0 | 3 |
| 4.0 | NaN | 5 |
| NaN | NaN | 6 |

```markdown
| a | b | c |
| --- | --- | --- |
| 1.0 | 2.0 | 3 |
| 4.0 | NaN | 5 |
| NaN | NaN | 6 |
```

結合セルの左上の位置のセルに値が入り、残りのセルは NaN になる

### 2. 空セルを含むExcelシートをMarkdownに変換するとどうなる

`Excel/6_empty-cell.xlsx`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33160/fcae0a42-4b44-469b-9aad-96eb4a241b81.png)

| a | b | c |
| --- | --- | --- |
| 1 | 2.0 | 3 |
| 4 | NaN | 5 |
| 6 | 7.0 | 8 |

```markdown
| a | b | c |
| --- | --- | --- |
| 1 | 2.0 | 3 |
| 4 | NaN | 5 |
| 6 | 7.0 | 8 |
```

空のセルは NaN になる

## まとめ

MarkItDownで結合セルや空セルを含むExcelシートをMarkdownに変換した場合の挙動は以下の通りです。

- 結合セルの右下側セルは NaN になる
- 空セルは NaN になる

そのため、結合セルや空セルを含むExcelデータをMarkdownに変換して使う場合は、用途によっては変換後のテーブルを手動で修正する必要があるかもしれません。
【git-spice】プルリクエストを作成した際にブラウザで表示する方法


デフォルトでは`gs branch submit`などを実行してプルリクエストを作成した際にブラウザは起動しません。
作成したプルリクエストを自動でブラウザに表示したい場合には以下の設定をする必要があります。

## グローバル

次のコマンドを実行するとすべてのリポジトリで`gs branch submit`などを実行してプルリクエストを作成した際にブラウザで開かれるようになります。

```terminal
git config --global spice.submit.web true
```

## ローカル

以下のコマンドを実行すると現在のリポジトリでのみ`gs branch submit`などを実行してプルリクエストを作成した際にブラウザで開かれるようになります。

```terminal
git config --local spice.submit.web true
```

## 参考

https://abhinav.github.io/git-spice/cli/config/#spicesubmitweb
ポケモンの「だいもんじ」は本当に当たる？精度の高いRNGとBox-Muller法で命中率85%をシミュレート



## 📌 概要

ポケモンに登場する強力な炎技「だいもんじ（命中率85%）」の当たる・外れる挙動を、Pythonで数値シミュレーションしてみました。
本稿では2つの乱数生成法を比較します：

1. 高精度な一様乱数生成器 `default_rng()`
2. 教科書で有名な Box-Muller 法（正規乱数を変換）

どちらも\*\*「10000回だいもんじを撃ったらどうなるか？」\*\*を検証します。

---

## ⚙️ シミュレーション条件

* **命中率**：85%
* **試行回数**：10,000回
* **命中の判定**：一様乱数が0.85未満 → 命中
* **Box-Muller法**：正規乱数 $Z \sim N(0,1)$ を一様乱数にスケーリング

---

## 💻 コード全文（比較付き）

```python
# Program Name: fireblast_dual_rng_comparison.py
# Creation Date: 20250602
# Overview: Compare high-precision RNG and Box-Muller method for Fire Blast hit/miss simulation
# Usage: Run in Python environment with matplotlib and numpy installed

import numpy as np
import matplotlib.pyplot as plt

# パラメータ設定 / Define parameters
n_trials = 10000           # 試行回数 / Number of simulations
hit_rate = 0.85            # 命中率 / Hit rate

# --- 方法1: default_rng() による一様乱数 / High-precision RNG (recommended) ---
rng = np.random.default_rng()
uniform_random_1 = rng.random(n_trials)
hits_rng = uniform_random_1 < hit_rate
hit_count_rng = np.sum(hits_rng)

# --- 方法2: Box-Muller法で正規分布→スケーリング / Box-Muller method ---
U1 = np.random.rand(n_trials)
U2 = np.random.rand(n_trials)
Z1 = np.sqrt(-2 * np.log(U1)) * np.cos(2 * np.pi * U2)
uniform_random_2 = (Z1 - np.min(Z1)) / (np.max(Z1) - np.min(Z1))
hits_bm = uniform_random_2 < hit_rate
hit_count_bm = np.sum(hits_bm)

# --- 結果表示 / Print results ---
print(f"[default_rng] Hit: {hit_count_rng}  ({hit_count_rng / n_trials:.4f})")
print(f"[Box-Muller ] Hit: {hit_count_bm}  ({hit_count_bm / n_trials:.4f})")

# --- グラフ描画 / Plot results ---
labels = ['Hit', 'Miss']
values_rng = [hit_count_rng, n_trials - hit_count_rng]
values_bm = [hit_count_bm, n_trials - hit_count_bm]

fig, axs = plt.subplots(1, 2, figsize=(12, 5))

axs[0].bar(labels, values_rng, color=['orange', 'gray'])
axs[0].set_title('Fire Blast Hit (default_rng)')
axs[0].set_ylabel('Number of times')
axs[0].grid(axis='y')

axs[1].bar(labels, values_bm, color=['orange', 'gray'])
axs[1].set_title('Fire Blast Hit (Box-Muller)')
axs[1].grid(axis='y')

plt.suptitle('Comparison of RNG Methods for Fire Blast (Accuracy = 85%)')
plt.tight_layout()
plt.show()
```

---

## 📊 出力例

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/da8ef695-fdab-404f-a65d-be711ee5dea8.png)

---

## 🔍 精度の違いについて

| 比較項目    | default\_rng()             | Box-Muller法      |
| ------- | -------------------------- | ---------------- |
| 原理      | 高精度一様乱数（Mersenne Twister等） | 正規分布を一様に変換       |
| 実装の簡便さ  | ◎                          | △（変換とスケーリングが必要）  |
| 分布の理論保証 | 一様分布に対し直接評価                | 範囲の切断や正規分布外の誤差あり |
| 実用性     | 本番シミュレーションに最適              | 教育用・理論確認に最適      |

---
Gitの勉強①

## 備忘録

### 今日学んだこと
#### ３つの作業場所
１．ワーキングツリー
２．インデックスエリア
３．ローカルリポジトリ

違いや概念についてはあまり理解できていないので，うまく言語化できるようになったらもう一度記事にします．

#### コマンド
##### mkdir ディレクトリ名
ディレクトリを作成する．ディレクトリとは，データをまとめておくフォルダ．厳密には違うかもしれない．．．
##### git init
現在のディレクトリをリポジトリとして登録．リポジトリとは，ファイルやディレクトリをまとめておくもの．
##### git add　ファイル名
ファイルをワーキングツリーからステージングエリア（インデックスエリア）に登録する．ステージングエリアに登録することをステージングという．
##### touch ファイル名
現在のディレクトリ内にファイルを作成する．
##### git branch
現在のブランチを確認する．ブランチとは，リポジトリの開発経路．通常は複数のブランチを作成して，パラレルに開発を進めていく．
##### git branch ブランチ名
ブランチを作成する
##### git switch ブランチ名
ブランチを移動する．
##### git commit
インデックスエリアにあるファイルをローカルリポジトリに登録する．
【資格試験】Uipath オートメーションデベロッパー アソシエイト 不合格体験記

お疲れ様です:shamrock::sunny:
もくもく会参加により取得したバウチャーを利用させていただき、
Uipath RPA アソシエイトの資格試験を受けて参りました。
3回目の不合格でした:metal_tone1:



さすが、他のIT資格と違って一発で受かる人は稀有で、
5回受けてやっと受かった人も多い資格なだけあります。
（UiPathRPAの神:star:7の内の1人がおっしゃっていました）



まず大切なことをお伝えします。
　①試験概要はしっかり確認しましょう
　②試験範囲外の問題もなぜか出ます
　③かなり重箱の隅をつついてきます
　④実際のロボット作成で実用的ではない問題も出ます



 他のIT資格と違い、一通りしっかりやっても知らない問題や、
 実際のRPAでそれ使わないやろ、暗記する事じゃないやろっ
 みたいな問題が頻出します。



 詳細は規約上伝えられませんが、
 例えばこの機能はどの手順でどこから使えるか聞いてきます。
 例えば「データ操作」の試験範囲である
 メソッド13個以外のメソッドが普通に出てきます。



 マジで心してください。



 もちろん受け終わった後あの問題の答えはこれだというのは出来ますが
 微々たる量ですし、同じ問題が出る保証はありませんし、
 そもそも受験中に問題と答えを覚えるなどノリでやらないと無理です。



 なので、アカデミーで受講したことはすべて覚え、
 ドキュメントをすべて読み、他の体験記をすべて読んでも
 受かるのは難しいということを念頭に、


 :dizzy:強大な運（自分が完全に理解している範囲がずっと出てくる）
 を用意して、資格試験に挑んでください。


 
 さあ、これであなたも一発合格！！！
Port 3000 is in use, using available port 3001 instead

## はじめに

ある日突然、`npm run dev` でサーバ起動した場合に以下エラーがありましたのでその解消方法を載せておきます。


```
Port 3000 is in use, using available port 3001 instead
```

## 🪄  解消法
ポート3000を強制終了しましょう！

手順１：まずはPORT 3000を利用しているプロセスを確認します。
```terminal
lsof -i:3000
```

手順２：手順１で表示される `PID` の番号を指定し、`kill` することで強制終了
```terminal
kill -9 9835
```
👉 エディタを再起動してポート3000が解放されているか確認してみてください。


## 💫 参考文献
* [Port 3000 is already in use](https://ja.stackoverflow.com/questions/71367/port-3000-is-already-in-use)
【ファイル構造】バトロワ

```
qwer_back_ogata/
├── .git/
├── .gitignore
├── .dockerignore
├── .DS_Store
├── README.md
├── Dockerfile
├── docker-compose.yml
├── package.json
├── yarn.lock
├── qwer-ada3c-firebase-adminsdk-fbsvc-6852cc1b4f.json
├── node_modules/
├── config/
└── src/
    ├── app.js
    ├── serverless.yml
    ├── config/
    │   └── firebase.js
    ├── controllers/
    │   └── authController.js
    ├── middlewares/
    │   ├── authMiddleware.js
    │   └── errorHandler.js
    ├── models/
    │   └── user_models.js
    ├── public/
    │   ├── js/
    │   │   └── login.js
    │   ├── css/
    │   │   └── login.css
    │   ├── index.html
    │   ├── login.html
    │   ├── register.html
    │   ├── payment.html
    │   ├── balance.html
    │   └── payment-success.html
    ├── routes/
    │   ├── authRoutes.js
    │   ├── userRoutes.js
    │   └── paymentRoutes.js
    ├── services/
    ├── utils/
    └── lambda/
    ```
カイ二乗検定とロジスティック回帰分析の併用


## ― カイ二乗検定とロジスティック回帰分析の併用 ―

## はじめに

製造業や品質管理の現場では、**製品が故障するか否か（二値変数）**に影響を与える要因（例：使用時間、環境温度、部品の種類など）を特定し、**予測モデル**を構築することが重要である。本記事では、故障の有無を目的変数とする**統計的手法**として、「カイ二乗検定」と「ロジスティック回帰分析」によるアプローチを紹介する。

---

## 1. 故障の有無：データの形式と目的

### ● 目的変数（従属変数）

* `y = 1`：故障あり
* `y = 0`：故障なし

### ● 説明変数（独立変数）

* `x1`：使用時間（連続変数）
* `x2`：部品の種類（カテゴリ変数）
* `x3`：環境温度（連続変数）

---

## 2. カイ二乗検定：カテゴリ変数の独立性を見る

まず、「部品の種類」と「故障の有無」のように**カテゴリ変数同士の関係**は、**カイ二乗検定**によって独立性を確認できる。

### 例：クロス集計表

| 部品の種類 | 故障あり | 故障なし | 合計  |
| ----- | ---- | ---- | --- |
| A     | 12   | 88   | 100 |
| B     | 25   | 75   | 100 |

これに対して**カイ二乗統計量**を計算し、帰無仮説「部品の種類と故障の発生は独立である」を検定する。

---

## 3. ロジスティック回帰分析：故障確率を予測するモデル

連続変数や複数要因を含めた**統計的予測モデル**として有効なのが**ロジスティック回帰分析**である。

### ● モデル式

$$
\log\left( \frac{p}{1 - p} \right) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots
$$

ここで、

* $p$：故障する確率
* $\beta$：パラメータ（各要因の影響）

### ● 解釈

* $\beta_i > 0$：$x_i$ が増えると故障しやすくなる
* $\beta_i < 0$：$x_i$ が増えると故障しにくくなる

---

## 4. Pythonによる実装例（statsmodels）

```python
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf

# データ例
df = pd.DataFrame({
    'fault': [1, 0, 1, 0, 1, 0, ...],
    'usage_time': [100, 80, 120, 50, 130, 60, ...],
    'part': ['A', 'B', 'A', 'B', 'B', 'A', ...]
})

# ダミー変換
df['part_B'] = (df['part'] == 'B').astype(int)

# ロジスティック回帰
model = smf.logit('fault ~ usage_time + part_B', data=df).fit()
print(model.summary())
```

---

## 5. 実用的な活用と注意点

* **カイ二乗検定**は2変数の関係の有無を見るのに有効だが、他の要因を考慮できない。
* **ロジスティック回帰分析**は多変量モデルに拡張可能で、**交絡因子や交互作用**の影響も加味できる。

---

## おわりに

本記事では、製品の「故障の有無」という**二値の結果変数**に対して、

* 要因ごとの関係を調べる**カイ二乗検定**
* 故障確率を定量的にモデル化する**ロジスティック回帰分析**
  の2つのアプローチを紹介した。実務においては、両者を適切に使い分けることで、**品質改善や故障予測**の信頼性を高めることができる。

---
PHP：数値判定に使う is_numeric() と ctype_digit() の違いを整理してみた

## はじめに

この記事では、PHPで数値かどうかを判定する `is_numeric()` と `ctype_digit()` の違いについて、基本的な視点からまとめた備忘録です。

**内容に不備などがございましたら、お手数ですが優しくご指摘いただけますと幸いです。**

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

個人的にPHPのキャッチアップをしたくて、勉強している初学者による備忘録として記録しています。

:::note info
**条件分岐などで使う "数値かどうか？" の判定処理を正しく理解したいと思いました。**
:::

また、現時点で自分の中で使い分けがあいまいだったため、自分の言葉でしっかり説明できるようになることをゴールとしています。

## 内容

PHPには数値判定に使える関数として `is_numeric()` と `ctype_digit()` の2つがありますが、目的や動作が異なります。

### is\_numeric() の特徴

* 判定内容：変数が数字または数値形式の文字列であるかを調べる

```php
var_dump(is_numeric("123"));      // true
var_dump(is_numeric(123));        // true
var_dump(is_numeric("123.45"));   // true
var_dump(is_numeric("-123"));     // true
var_dump(is_numeric("1e10"));     // true
var_dump(is_numeric("abc"));      // false
```

**確認画面**

![Screenshot 2025-06-02 at 20.42.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/837e4f6d-0580-4b0a-8c21-305e603553d6.png)

想定通りの結果となっていることが確認できました！

**参考文献**

https://www.php.net/manual/ja/function.is-numeric.php

### ctype\_digit() の特徴

* 判定内容：数字かどうかを調べる

```php
var_dump(ctype_digit("123"));     // true
var_dump(ctype_digit("0123"));    // true
var_dump(ctype_digit("123.45"));  // false
var_dump(ctype_digit("-123"));    // false
var_dump(ctype_digit(123));        // false ← int型なので false！
```

**確認画面**

![Screenshot 2025-06-02 at 20.50.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/42edec00-22ac-418b-9eef-0ccd782b6b7a.png)

こちらも想定通りの結果となっていることが確認できました！

## 学んだこと（使い分けの判断）

- **ユーザー入力が純粋な「整数の文字列」か調べたい場合**  
  → `ctype_digit()` を使う  
  （例：会員ID、郵便番号、年齢など、**数字だけで構成されている必要がある場合**）  

- **「数値っぽいかどうか」広く判定したい場合**  
  → `is_numeric()` を使う  
  （例：フォームから受け取った価格、計算対象の値、**マイナスや小数も含む場合**）  

**例で比較**

```php
$value = "123.45";

var_dump(is_numeric($value));  // true
var_dump(ctype_digit($value)); // false
```

**確認画面**

![Screenshot 2025-06-02 at 20.56.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/ade9eb93-500f-457c-8efd-348eef339482.png)


## まとめ

ここまで読んでいただき、ありがとうございました！

| 関数名          | 判定対象            | 判定内容                | 例                                |
| ------------ | --------------- | ------------------- | -------------------------------- |
| is\_numeric  | 数値型 or 数値っぽい文字列 | 整数・小数・符号付き・指数表記などOK | "123", 123.45, "-1", "1e3"       |
| ctype\_digit | 文字列のみ           | 「0〜9」だけの文字列（整数のみ）   | "123", "00123" は OK、123（int）は NG |

この2つの違いを理解して使い分けることで、入力チェックやバリデーション処理をより正確に行えると感じました...！

## 参考にした文献

https://qiita.com/suin/items/988e29f71a74456fd42f

https://qiita.com/degunosasuke/items/afcddd164b0241b0fde0
Salesforce設定で18桁で設定すべきか？15桁で設定すべきか？

本橋孝昭です

今回はSalesforceで18桁にすべきか？15桁にすべきか？について解説します

15桁と18桁についてはこちらを確認してください
こちらには公式的に15桁から18桁の変換方法が記載されています
https://help.salesforce.com/s/articleView?id=000385066&type=1


なお、非公式ですが
こちらのサイトから15桁から18桁に変換するのが容易です

https://www.adminbooster.com/tool/15to18


15桁から18桁の変換例としてプロファイルIDについて確認します


こちらのプロファイル「システム管理者」の15桁のIDは00edM00000CBL0bであることが分かります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/22fe34f0-1e91-4bd1-af49-bf6d81f802b1.png)

この00edM00000CBL0bは18桁にすれば00edM00000CBL0bQAHです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/efc0324c-79e4-45a1-aded-d3af4bace874.png)


実際の設定で15桁にすべきか18桁にすべきかは設定場所により異なります
例として
・ワークフロー
・数式項目
・入力規則
は18桁の場合は動かない場合があるので注意が必要です

https://help.salesforce.com/s/articleView?id=000386861&type=1

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/40e7b08a-8dd7-4608-a0ec-117f2e3792ae.png)


例としてレコード更新時にプロファイル「システム管理者」の場合更新したくない　という入力規則を作成します

この場合、15桁の数式の場合
つまり数式
$Profile.Id = "00edM00000CBL0b"
の場合きちんとエラーがでます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/df237c12-554a-4196-ab9a-7aaab98c6f90.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/ace16cb3-778c-4eb9-b1c9-3ff23b4520b0.png)

しかしながら18桁の数式
つまり数式
$Profile.Id = "00edM00000CBL0bQAH"
の場合正しく動きません

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/b60f8e07-e987-4c0d-b138-8853dd700109.png)


以上のことから入力規則は15桁にしないといけないことが分かりますね


## フローは18桁で設定すべきか？15桁で設定すべきか？

では、（最近よく聞くSalesforce機能）フローの場合の設定は18桁ですべきか？15桁ですべきか？
結論から言えばフローは18桁で動く場合も15桁で動く場合があります。
バージョンによって異なります。（どういうこっちゃ）

フローをバージョンごとに見ていきましょう

まずはこのようなフローを作成します。
取引先レコード更新の際に更新ユーザーがシステム管理者の場合エラーが出るような設定をします

数式は18桁で$Profile.Id = "00edM00000CBL0bQAH"
とします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/38888504-bb96-4f4b-a733-298cd156bc56.png)



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/0153a24c-4d18-4855-bfc8-a9cc80998582.png)


無事にエラーがでました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/3c907fbe-a364-4d11-aedb-48afc2d82df6.png)


これを見ると「なるほどフローは18桁で動くのか」と思う人は少し甘いです

先ほどのバージョンを60にすると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/ba24bc45-c474-4710-877c-e6d7ed8b9e1b.png)

数式は18桁で$Profile.Id = "00edM00000CBL0b"の場合ただしく動きません


この場合数式は15桁で
$Profile.Id = "00edM00000CBL0b"
の場合正しく動きます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/34935823-a4f7-4502-9982-5f3d948aa3da.png)


フローについては
・バージョン60以下の場合は15桁でないと正しく動かない
・バージョン61以上の場合は18桁でないと正しく動かない

ということが分かりましたね
フローはバージョンにより正しく動く桁が異なるので注意です
New Relic News Vol.9が配信されました！

機能アップデート情報やおすすめコンテンツをまとめた**New Relic News Vol.9**がメールにて配信されました！
どんな内容が掲載されているか一部ご紹介します:raised_hands:

# 今月のテーマ：

今月は、**外形監視の機能であるSynthetics**をメインテーマとしています。

# 主要コンテンツ
## 1. 技術関連情報

- RSSの情報収集方法（Synthetic Monitoring活用）
    - https://qiita.com/MarthaS/items/0054dda8b93e0ec2c73a
- Syntheticモニタリングの実用的なドキュメント集
    - https://qiita.com/khara-nrkk/items/32bcd77134391db7b582

## 2. 導入事例

- 東京海上日動システムズ：クラウドシフトにおける監視の高度化
    - https://newrelic.com/jp/customers/tokio-marine-nichido
- 三菱UFJ eスマート証券：システム障害の検知・対応能力向上
    - https://newrelic.com/jp/customers/mitsubishi-ufj-esmart-securities

## 3. 新機能情報
New Relic アップデート(2025年4月)
- https://newrelic.com/jp/blog/nerdlog/new-relic-update-202504

## 4. 今後のイベント情報

- 6月4日：SLI/SLO設計の基本（15:00-17:00）
    - https://newrelic.com/jp/events/2025-06-04/nru300slx
- 6月11日：Full-Stack Observability認定試験対策講座（15:00-17:00）
    - https://newrelic.com/jp/events/2025-06-11/nrufsoexm
- 6月18日：IDE連携実践講座（15:00-17:00）
    - https://newrelic.com/jp/events/2025-06-18/nru400cds
- 6月25日：AWS Summitでのパナソニック様との共同講演（11:50-12:20）
    - https://jpsummit-smp25.awsevents.com/public/application/add/76

# その他

他にも、**注目Blog・Qiitaコンテンツ** や **オリジナルTシャツがあたる今月のクイズ** なども掲載されています！
ぜひ[こちらのフォーム](https://docs.google.com/forms/d/e/1FAIpQLSfVeizAJO2Ftqh6pef8043ibNVGGZR5737KYdRuCydtLkjx6A/viewform)からNew Relic Newsにご登録ください！

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227243/3d12c097-5b89-4ff1-bdde-344929ebc052.png)](https://docs.google.com/forms/d/e/1FAIpQLSfVeizAJO2Ftqh6pef8043ibNVGGZR5737KYdRuCydtLkjx6A/viewform)

:::note info
[New Relic株式会社のQiita Organization](https://qiita.com/organizations/newrelic)では、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
:::

:::note info

無料のアカウントで試してみよう！
[New Relic フリープランで始めるオブザーバビリティ！
](https://qiita.com/ktst79/items/5ee74b34e6adb8a7a6fa)
:::


[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535230/66d6a010-e4fe-4004-a09b-c01eaad5a614.png)](https://newrelic.com/jp/contact-sales)
「【構造力学】#15 トラスの応力 切断法」様を参考にsympyのTrussでやってみた。

・sympyのTrussで作図しました。

# オリジナル
#### Youtube
スチのり 様 (0:00〜10:01)　
**【構造力学】#15 トラスの応力 切断法**
https://youtu.be/3WcB9cHL_Sw

# sympyのweb上での実行方法
・sympｙのインストールなしで、実行できます。開発は後述テンプレートです。
・ver0.1は、Trussモジュールを使っているので、以下のエラーがでます。
　ImportError: To use this function numpy module is required
・ver0.2,ver0.3は、Trussモジュールを使っていないので、実行できます。。
https://qiita.com/mrrclb48z/items/00dd08b0317069be9342#web%E4%B8%8A%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%96%B9%E6%B3%95sympy-live-shell%E3%81%A7
　
# sympyのTrussで
#### ver0.1  
・ダブルコーテーションでなくて、シングルコーテーションでも。
```python
from sympy.physics.continuum_mechanics.truss import Truss
import math
from sympy import *
P=1  # var('P1,P2')
L=1  # var('L')
t = Truss()
t.add_node     (          ("1",L,L),("2",2*L,L)            ) 
t.add_node     (("3",0,0),("4",L,0),("5",2*L,0),("6",3*L,0)) 
#  
t.add_member   (                              ("N1","1","2")                              )   
t.add_member   (("13","1","3"),("14","1","4"),("N2","4","2"),("25","2","5"),("26","2","6"))   
t.add_member   (("34","3","4")               ,("N3","4","5")               ,("56","5","6"))   
t.apply_support(("3" ,"pinned"),("6","roller"))
t.apply_load   (("1",P,270.0))
t.apply_load   (("2",P,270.0))
p = t.draw()
p.show()
# 
t.solve()
print("#",t.reaction_loads )           
print("#",t.internal_forces["N1"],t.internal_forces["N2"],t.internal_forces["N3"])
# {'R_3_x': 0, 'R_3_y': 1, 'R_6_y': 1}
# -1 0 1
```
・縦横比は1:1では、ありません。
![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/f5e45139-905f-4fb8-aff8-a9258633b6bb.png)

# sympyで(オリジナル 様を参考にいつもの方法で)
#### ver0.2  
・＞(切断法)ここで、ブスッと
・＞トラスは軸力しかかからない。
・＞２級建築士は、接点法を使わない。
```python
# ver0.2
from sympy import *
var('P,L,R1,R2,N1,N2,N3')
sol=solve([Eq(P+P-R1-R2,0),Eq(P*L+P*2*L-R2*3*L,0)],[R1,R2]) # つり合いの式
R1=sol[R1];R2=sol[R2]  ;print("#",R1,R2)
sol=solve(Eq(P+N2*sin(rad(45))-P,0),N2)                     # ∑Y
N2=sol[0]              ;print("#",N2)
sol=solve(Eq(P*L+N1*L,0),N1)                                # ∑M
N1=sol[0]              ;print("#",N1)
sol=solve(Eq(N1+N3,0),N3)
N3=sol[0]              ;print("#",N3)                       # ∑X
# P P
# 0
# -P
# P
```

#### ver0.3
・ver0.2と同じです。ver0.2よりsympyらしく??? 5元連立方程式で。
```python
# ver0.3 
from sympy import *
var('P,L,R1,R2,N1,N2,N3')
print("#",solve([Eq(P+P-R1-R2          ,0), \
                 Eq(P*L+P*2*L-R2*3*L   ,0), \
                 Eq(P+N2*sin(rad(45))-P,0), \
                 Eq(P*L+N1*L           ,0), \
                 Eq(N1+N3              ,0)  \
                ],                          \
                [R1,R2,N1,N2,N3])           \
    )                
# {N1: -P, N2: 0, N3: P, R1: P, R2: P}
```
# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)

# いつもと違うおすすめです。
#### Qiita内

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

https://qiita.com/mrrclb48z/items/118385a1bcc196e3540d

https://qiita.com/mrrclb48z/items/53640cff620d13d4b50c
Microsoft Fabric 認定試験 DP-600 の勉強法と合格への道のり

2025年、私は「Microsoft DP-600: Microsoft Fabric Analytics Engineer Associate」の認定資格取得に挑戦しました。データ分析の経験はあったものの、「Microsoft Fabric」は初めて触れるプラットフォームであり、当初は正直言って混乱していました。

しかし、体系的な学習と適切なツール、そして継続的な実践により、自信を持って試験に合格することができました。この記事では、私がどのようにしてMicrosoft Implementing Analytics Solutions Using Microsoft Fabric Examに合格したのか、学習方法や使用したリソース、役立った模擬試験などを詳しくご紹介します。
## 🔍 DP-600 試験の概要とは？
「DP-600」試験の正式名称は、「Microsoft Implementing Analytics Solutions Using Microsoft Fabric Exam」です。これは、Microsoft Fabric を使ったエンドツーエンドの分析ソリューションを設計・構築・管理できるスキルを問う認定試験です。

主な出題分野は以下の通りです：
* データの取り込みと変換（Dataflow、Pipeline、Notebookの利用）
* Lakehouse アーキテクチャの設計と構築
* Power BI と Direct Lake を活用したセマンティックモデルの作成
* OneLake や Purview によるデータガバナンス管理
## 🚧 混乱したスタート
最初は本当に何から手を付けていいかわかりませんでした。Microsoft Fabric は、Power BI や Synapse、Azure Data Factory の要素が統合されたようなプラットフォームで、専門用語も多く、理解に時間がかかりました。

特に困った点は：
* 「OneLake」「Lakehouse」「Direct Lake」などの新しい用語
* 複数のツールの役割と使い分け
* データガバナンスの概念とその実装方法
### 📚 使用した学習リソース
**🔹1. Microsoft Learn（公式ラーニングパス）**
Microsoft Learn は無料で、DP-600 の出題範囲に対応したモジュールが揃っています。

特におすすめのモジュール：
* 「Microsoft Fabric を使い始める」
* 「KQL と Fabric を使用したリアルタイム分析の構築」
* 「Power BI のデータ モデルを設計および実装する」
* 「Dataflow や Pipeline を使用してデータを取り込む」
**🔹2. Microsoft Fabric 公式ドキュメント**
各機能の詳細や構成方法、ベストプラクティスが詳しく載っており、理解を深めるのに非常に役立ちました。
**🔹3. 模擬試験：Study4Exam**
実際の出題形式に近い問題を練習できる 無料のMicrosoft [DP-600試験問題](https://www.study4exam.com/microsoft/free-dp-600-questions) as Practice Test」を Study4Exam で利用しました。
この模擬試験のおかげで：
* 時間配分の感覚がつかめた
* 実力を確認し弱点を特定できた
* 本試験に近い問題で自信がついた
**🔹4. Microsoft公式スキル評価表（PDF）**
出題範囲が明確に記載されており、自分の学習進度を確認するのに最適でした。
**🔹5. YouTube & ブログ**
ビジュアルで学びたい方には、YouTubeの解説動画が効果的です。Fabric のデモを実際に見ることで理解が深まりました。
### 🗓️ 学習スケジュールの立て方
私が取った6週間の学習プランは以下の通りです：
**週**            **学習内容**
**1〜2週目**           [Microsoft Fabric](https://www.microsoft.com/en-us/microsoft-fabric) の基本概念とアーキテクチャ理解
**3週目**	          データ取り込み（Dataflow、Pipeline、Notebook）
**4週目**	          Power BI と Direct Lake の統合、DAX、データモデリング
**5週目**	          ガバナンス、セキュリティ、Purview の連携
**6週目**	          模擬試験を通じて復習と最終確認
### 🧠 試験の実体験
試験は40～60問で、制限時間は100～120分。ほとんどがシナリオベースの選択式問題でした。
印象的だったのは以下の点：
* Dataflow と Pipeline の使い分けを理解しておくことが重要
* Lakehouse、Power BI、ガバナンスをまたぐ複合的なシナリオが多い
* 技術知識だけでなく、業務課題への応用力が問われる
### 💡 合格のためのポイント
* 暗記ではなく、理解重視。 機能の違いと使いどころを整理すること。
* ガバナンス領域も見落とさない。 センシティブ情報の取り扱いやアクセス制御の知識は重要です。
* 模擬試験は戦略的に使う。 結果だけでなく、間違えた問題を丁寧に復習しましょう。
* 公式リソースで基礎を固め、実践問題で応用力を磨く。
### 🏁 最後に：混乱から自信へ
Microsoft Certification Examsの中でも、DP-600 は実践的かつ総合的なスキルが求められる試験です。私にとってこの試験は、ただの資格取得ではなく、データ分析とプラットフォーム理解を深める貴重な機会でした。
「Microsoft Fabric」はまだ新しいですが、その可能性は非常に大きく、これからのデータエンジニアやアナリティクスエンジニアにとって不可欠なスキルになると感じています。
迷っている方も、ぜひ一歩を踏み出してください。混乱しても大丈夫。正しいルートと継続があれば、必ず「自信」へと変わります。
VSCode シンプルブラウザ

　普段デスクトップアプリや研究用のコードなどばっかりでWeb系は縁遠いのですが日本語では全く情報が無い機能を見つけたので情報共有を主とした簡易的な記事です。
> ~~逃げ道が用意されました...~~

この**シンプルブラウザ**は拡張機能無しのデフォルトである機能です。

## 起動方法

1. `Ctrl` + `Shift` + `P` でコマンドパレットを開く
2. `Simple` と入力
![Pasted image 20250602195851.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3940444/dc66c514-7419-44e4-b7b7-2df1f0615290.png)

3. 画像の`Simple Browser: Show`をクリック
![Pasted image 20250602195929.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3940444/35fb2451-e33c-419b-9aad-0ec6c3860cb1.png)

4. URLを入力
![Pasted image 20250602200003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3940444/aebe9045-8de2-4fac-bfac-4f631a324f08.png)

5. VSCode内のタブの1つとしてブラウザが立ち上がります
![Pasted image 20250602200050.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3940444/2a1457e7-141a-45f0-939e-01649961d9c7.png)

もちろんタブの移動や半分の表示もできます。


把握している普通のブラウザとの違いは下の通りです。

:::note warn
問題点
- ローカルのリンクしか表示されない？
- ログインなどが反映されない？
:::

> そもそもコーディングしながらチラ見するような使い方だと思うので問題ないと思います。

　今一、使いやすいのか、使いにくいのかよくわかりませんが是非活用してみてください。
あと、詳しい情報をお持ちの方はコメントください。

## おまけ
　そもそも、何でこの機能を知ったのかといいますとGitHub CopilotのAgentモードで遊んでいたらいつの間にか開いていたからです...
arXiv→alphaXivをワンクリックで変換する

# はじめに
`https://arxiv.org/abs/XXX`の`arxiv`を`alphaxiv`に変換すると，議論や類似論文の検索，アシスタント機能を使ってAIチャットで質問やサーベイなどが利用出来る ([参考](https://www.itmedia.co.jp/aiplus/articles/2505/26/news031.html))
毎回手動で変換することは面倒くさいので、ブックマークバーに登録して自動で変換してくれる機能(ブックマークレット)を作成しました。

`arxiv`→`ar5iv`にするブックマークレットに関してもまとめています．

https://qiita.com/ryhara/items/7e5d1a987deae7d935ca


# ブックマークレット

Chromeでの登録方法を紹介します。動作確認はChromeのみでしか実施していません。

1. 「**ブックマークバー**」を右クリックして「**ブックマークバーを表示**」にチェックを入れる
2. ホーム画面以外でも常にブックマークバーが表示され、arxiv閲覧中にブックマークバーから機能を使うことが可能になる
3. 「**ブックマークバー**」を右クリックして、「**ブックマークマネージャ**」を選択
4. ブックマークマネージャにて、「**右上の３点リーダーアイコン**」をクリックして、「**新しいブックマークを追加**」を選択．「**名前（自由）、URL（以下のコード）**」を入力して保存

```javascript:URL
javascript:(function() {
  var oldUrl = window.location.href;
  var newUrl = oldUrl.replace(/arxiv/g, 'alphaxiv');
  window.location.href = newUrl;
})();
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3085757/04f0142c-131c-48cd-bce4-797b700b3e8a.png)

`https://arxiv.org/abs/XXX`でブックマークバーをクリックするとalpaXivが表示がされます。
ブックマークバー内のフォルダに配置した場合も正常に動作しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3085757/0b5a7378-1b85-46f6-ad78-0e8875bf0e86.png)

before
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3085757/1ffd9cc4-f5d5-4547-8c52-ed32addeb86c.png)

after
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3085757/0cd7b7ed-753c-433e-8bbe-b67b89fd25a1.png)



:::note warn
注意点
`arxiv`という単語が含まれていない限り何も起きません。
`arxiv`という単語が含まれているURLの場合、全てが置換されてしまいます。予期せぬリンクに飛んでしまう可能性があるので誤って使わないように注意してください。
:::
github→deepwikiをワンクリックで変換する

# はじめに
DeepWikiは `https://github.com/[user_name]/[repository_name]`の`github`を`deepwiki`に変換すると，Githubリポジトリのコードを解析し、自動的でリポジトリのドキュメント，Wikiを作成しチャットでの質問も可能になるサービスです． 
(https://deepwiki.com/)


# ブックマークレット

Chromeでの登録方法を紹介します。動作確認はChromeのみでしか実施していません。

1. 「**ブックマークバー**」を右クリックして「**ブックマークバーを表示**」にチェックを入れる
2. ホーム画面以外でも常にブックマークバーが表示され、github閲覧中にブックマークバーから機能を使うことが可能になる
3. 「**ブックマークバー**」を右クリックして、「**ブックマークマネージャ**」を選択
4. ブックマークマネージャにて、「**右上の３点リーダーアイコン**」をクリックして、「**新しいブックマークを追加**」を選択．「**名前（自由）、URL（以下のコード）**」を入力して保存

```javascript:URL
javascript:(function() {
  var oldUrl = window.location.href;
  var newUrl = oldUrl.replace(/github/g, 'deepwiki');
  window.location.href = newUrl;
})();

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3085757/c49b3234-f108-4961-9a85-e3f510f6749d.png)


試しにqiitaのリポジトリで試してみました

before: https://github.com/increments/qiita-cli


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3085757/b4507b53-2ba1-421f-80bb-31bf741971b0.png)

deepwikiは作成されていないものに関してはメールアドレスを入力して「Index Repository」を押すと作成されます．作成に2-10分ほどかかることがあるみたいです．
すでに作成されているものに関してはすぐに出てきます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3085757/c13952c9-7f21-4365-a124-fa4257fe12ef.png)

after: 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3085757/27acd2cd-5a07-4509-928e-01d348240277.png)

:::note warn
注意点
`github`という単語が含まれていない限り何も起きません。
`github`という単語が含まれているURLの場合、全てが置換されてしまいます。予期せぬリンクに飛んでしまう可能性があるので誤って使わないように注意してください。
:::
Three.js＋shaderで3d表現をよりリッチにしよう！（基本的な使い方を解説）

Three.jsと組み合わせて使う 「シェーダー（Shader）」 は、3D表現や特殊なアニメーションの核になる技術です。初心者にもわかるように、丁寧に分解して解説します。

🎨 そもそも「シェーダー」とは？
GPU上で実行されるプログラムで、「どう見えるか（色、形、動き）」を決めるものです。

たとえば：

種類役割主な記述言語🟢 Vertex Shader頂点（形）の位置を計算するGLSL🔵 Fragment Shaderピクセルの色を決めるGLSL

GLSL（OpenGL Shading Language）というC言語に似た専用のコードで書きます。

🧠 シェーダーの基本構成
以下は最もシンプルなシェーダーの例：

🔷 Vertex Shader（形状）
// 位置をそのまま返す void main() { gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); }

copy
🔶 Fragment Shader（色）
// 赤い色で塗る void main() { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); // RGBA 赤 }

copy
✨ Three.jsとの連携方法
Three.jsでは ShaderMaterial を使ってシェーダーを適用します。

const material = new THREE.ShaderMaterial({ vertexShader: vertexShaderCode, fragmentShader: fragmentShaderCode, uniforms: { uTime: { value: 0.0 } } });

copy
※uniforms はCPUからGPUに値を渡す手段（アニメーションや時間制御などに使う）

🔁 動きをつけたい場合（例：時間で色が変化）
// fragmentShader.glsl uniform float uTime; void main() { float r = abs(sin(uTime)); float g = abs(sin(uTime + 1.0)); float b = abs(sin(uTime + 2.0)); gl_FragColor = vec4(r, g, b, 1.0); }

copy
そしてJS側で時間を更新：

material.uniforms.uTime.value = performance.now() / 1000;

copy
💡 どんなことに使える？
表現使用例
🌊 波紋水面、布の揺れ
🔥 炎・煙炎、雲、パーティクル
🌈 グラデーションインタラクティブな背景
💥 爆発エフェクトロゴ分解、退場演出
🧠 ノイズ表現動く地形、抽象芸術

🚀 初心者が始めやすい学習ステップ
GLSLの基礎を覚える（vec2, sin, cos, timeなど）

既存のShaderToyやThree.js例を真似る

uniformを使ってJSと連携

アニメーションの追加
java開発環境構築（その１）

～JDKのインストール手順について～

## はじめに
Java開発環境を構築するための手順を描いていきます。

## 開発環境

- OS: Windows 11    
- CPU:13th Gen Intel(R) Core(TM) i5-1335U   
- RAM:32.0GB
---

## JDKのインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088188/55434c23-dec3-427a-979a-7a46ed68e7d9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088188/eefca6f6-09da-4241-b9bb-91c9cee5a7d1.png)

Temurin 17.0.15+6, Windows 64 bit (.MSI)をダウンロードし.msiファイルを起動すると、セットアップが起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088188/b383f59d-0f4a-4369-985c-751d228fadd9.png)
J念のためJavaSoft (Oracle) registry keys以外を「ローカルハードドライブにすべてインストール」を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088188/4136430f-a802-4d71-b7eb-a22b567a1447.png)
画面の指示に従いインストールします。

## インストール確認手順
1. コマンドプロンプトを開く
- Windowsキー + R を押して「ファイル名を指定して実行」を開く
- 「cmd」と入力して Enter

以下のコマンドを入力し
``` .cmd
java -version
javac -version
```
成功していれば以下のような表示が出ます。
```
openjdk version "17.0.15" 2024-04-16
OpenJDK Runtime Environment Temurin-17.0.15+6 (build 17.0.15+6)
OpenJDK 64-Bit Server VM Temurin-17.0.15+6 (build 17.0.15+6, mixed mode)

javac 17.0.15
```

## おわりに
これでJDKのインストール手順を終わります。
次は統合開発環境（IDE）のインストールになります。

https://qiita.com/Noriyuki1203/items/0863b29c8b359322a6af
defaultがNanoでVimに変えた話



## はじめに

Gitでマージコミットやリベース時にNanoエディタが起動してしまい、慣れ親しんだVimを使いたいと思ったことはありませんか？本記事では、**GitのデフォルトエディタをVimに変更する方法**を詳しく解説します。

## 問題の発生状況

多くの開発者が以下のような場面で困っています：

- `git pull origin main`実行時にマージコミットメッセージの編集でNanoが起動
- `git rebase -i`でインタラクティブリベース時にNanoが開く
- `git commit`でコミットメッセージ編集時にNanoが立ち上がる

これらの問題は、Gitのエディタ設定が適切でないことが原因です。

## Gitがエディタを選択する仕組み

Gitは以下の**優先順位**でエディタを決定します：

1. **core.editor**の設定
2. 環境変数**VISUAL**
3. 環境変数**EDITOR**
4. システムのデフォルトエディタ

## 現在の設定確認方法

### Git設定の確認

```bash
git config --list
```

### 環境変数の確認

```bash
echo $VISUAL
echo $EDITOR
```

この確認により、現在どのエディタが設定されているかが分かります。

## 【メイン解決法】GitのデフォルトエディタをVimに設定

### グローバル設定の変更

最も確実で推奨される方法は、Gitのグローバル設定を変更することです：

```bash
git config --global core.editor vim
```

### 設定確認

```bash
git config --list | grep core.editor
```

出力例：
```
core.editor=vim
```

### 設定ファイルの場所確認

```bash
git config --show-origin --get core.editor
```

## その他の設定方法

### 1. 環境変数での設定

一時的な設定：
```bash
export EDITOR=vim
export VISUAL=vim
```

永続化（Bashの場合）：
```bash
echo 'export EDITOR=vim' >> ~/.bashrc
echo 'export VISUAL=vim' >> ~/.bashrc
source ~/.bashrc
```

永続化（Zshの場合）：
```bash
echo 'export EDITOR=vim' >> ~/.zshrc
echo 'export VISUAL=vim' >> ~/.zshrc
source ~/.zshrc
```

### 2. 設定ファイル直接編集

`~/.gitconfig`を直接編集：
```ini
[core]
    editor = vim
```

## よくある問題と解決法

### 問題1：設定したのにVimが起動しない

**原因**：ローカルリポジトリの設定が優先されている

**解決法**：
```bash
# ローカル設定確認
git config --local core.editor

# ローカル設定削除（必要に応じて）
git config --local --unset core.editor
```

### 問題2：Vimが見つからないエラー

**原因**：Vimがシステムにインストールされていない

**解決法**：
```bash
# Ubuntu/Debian
sudo apt install vim

# CentOS/RHEL
sudo yum install vim

# macOS
brew install vim
```

## Git設定の優先順位

Gitの設定は以下の順序で適用されます：

1. **ローカルリポジトリ設定**（`.git/config`）
2. **グローバル設定**（`~/.gitconfig`）
3. **システム設定**（`/etc/gitconfig`）

上位の設定が下位の設定を上書きするため、意図しない動作をする場合はこの順序で確認してください。

## プロジェクト固有の設定

特定のプロジェクトでのみ別のエディタを使いたい場合：

```bash
# プロジェクトディレクトリで実行
git config --local core.editor nano
```

## 設定の削除方法

設定を削除したい場合：

```bash
# グローバル設定削除
git config --global --unset core.editor

# ローカル設定削除
git config --local --unset core.editor
```

## まとめ

GitのデフォルトエディタをVimに変更するには、以下のコマンドが最も確実です：

```bash
git config --global core.editor vim
```

この設定により、すべてのGit操作でVimが起動するようになります。設定が反映されない場合は、ローカル設定やシステム設定が優先されていないか確認してください。

開発効率を向上させるために、使い慣れたエディタでGit操作を行いましょう。

## 関連記事

- [Vimの基本操作と設定完全ガイド](https://qiita.com/tags/vim)
- [Gitコミットメッセージのベストプラクティス](https://qiita.com/tags/git)
- [Git設定ファイルの完全ガイド](https://qiita.com/tags/gitconfig)
Singularity + Whisper で文字起こし

## はじめに

汎用音声認識モデル Whisper は様々な言語で良い性能を示します．

ところで，Whisperをより高速で実行するとき，GPUを搭載した計算機サーバを使いたくなります．しかし，既存記事はローカル環境を対象としたものが多く，Singularity環境における使い方を日本語で説明する記事は見つかりませんでした．

そこで，本記事ではSingularityの上でWhisperを実行する方法をまとめます．

## 環境

| カテゴリ | 名前             | バージョン/個数    |
| ---- | -------------- | ----------- |
| OS   | Ubuntu         | 22.04.5 LTS |
| コンテナ | Singularity CE | 4.1.3       |
| GPU  | NVIDIA A100    | 4基          |

## Singularityイメージの準備

PythonやWhisperと同時に，必要なライブラリもインストールします．
ただし，Whisperのインストールにはgitが，動作にはffmpegが必要なので，こちらを先にインストールします．

```def:hoge.def
Bootstrap: docker
From: nvidia/cuda:11.8.0-devel-ubuntu22.04

%environment
    export CUDA_PATH=/usr/local/cuda
    export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

%post
    perl -p -i.bak -e 's%(deb(?:-src|)\s+)https?://(?!archive\.canonical\.com|security\.ubuntu\.com)[^\s]+%$1http://ftp.riken.jp/Linux/ubuntu/%' /etc/apt/sources.list 

    # いろいろな環境変数の設定
    export DEBIAN_FRONTEND=noninteractive
    export TZ=Asia/Tokyo
    export CUDA_PATH=/usr/local/cuda
    export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

    # アップデート
    apt-get -y update
    apt-get -y dist-upgrade
    # ffmeg・gitをインストール
    apt install -y ffmpeg git
    
    # python関連
    apt install -y python3
    apt install -y python3-pip
    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
    pip3 install git+https://github.com/openai/whisper.git@v20240930
    pip3 install more-itertools
```

以下のコマンドでイメージを準備します．`hoge.sif`，`hoge.def`はお好みで．

```bash
$ singularity build --fakeroot hoge.sif hoge.def
```

## Whisperの実行

### 音声ファイルの準備

事前に音声ファイルは準備しておきます．
場所はどこでも良いですが，Singularityのイメージファイルと同じ階層やホームディレクトリにおいておくとスムーズです．

下のコマンドはカレントディレクトリにあるwavファイルを出力するだけなので，すでに音声ファイルを準備済のときは実行する必要はありません．

```bash
$ ls | grep wav
hoge.wav
```

今回，筆者はwav形式で文字起こしをします．
もし，他の形式を使ってエラーが出た場合は，ちょうどインストールしていたffmpegを使って変換すうることもできます．変換を行うときはコンテナに入ってから行います．

### 文字起こしの実行
Singularityのコンテナに入ります．

```bash
$ singularity shell --nv hoge.sif
```

コンテナに入れたら，以下のようにしてWhisperを実行します．必要に応じて音声ファイルのパス・言語・モデルサイズ・出力ディレクトリ等を変更しましょう．言語を省略せず指定するときは1文字目が大文字でないとエラーが出るので注意（一度エラーを出した）．

モデルや言語の指定は[GitHub](https://github.com/openai/whisper)の「Available models and languages」で詳しく説明されています．

```bash
$ whisper ./hoge.wav --language English --model large --device cuda --output_dir data
```

### 結果の確認
実行が終了すると文字起こしの結果が生成されています．
```bash
$ ls data/
hoge.json  hoge.srt  hoge.tsv  hoge.txt  hoge.vtt
```
シックLUNとシンLUNの違いについて

物理ストレージディスク全体から論理的に容量の切り分けを行なってデータ保存用領域を作成する方法としてLUN(論理ユニット番号)の話を以前した。
今回はそのLUNはどのような仕組みで作成されるのか、ということについて触れたい。作成の方法は大きく2つある。

## シックLUNとシンLUN

・シックLUN：将来的な容量の需要を踏まえて大容量のスペースをあらかじめ確保した形で作成されたLUN
・シンLUN：はじめはいったん最低限の容量を確保した形で作成されたLUN

シックLUNとシンLUNの作成はエンタープライズ向けストレージ製品に搭載されているソフトウェアやWindows、LinuxのようなOSでも対応しているため、他のソフトウェアを準備・用意する必要はない。

シックLUNとシンLUNの大きな違いは、途中からの容量拡張の部分にある。
シックLUNの場合は例えばストレージディスクの追加などで容量の拡張をする際、既存データの事前バックアップがまず推奨されて、LUNを使用している仮想マシンの再起動が必要になるなど途中での容量拡張に手間が影響が大きすぎるに対して、シンLUNはストレージ領域さえ余裕があれば途中からの容量拡張に弊害は少ない。

## 容量の上限に達してしまったら

シックLUNでもシンLUNでも容量の上限に達した場合は、当たり前だがデータ書き込みの処理はできなくなる。
データ読み取りに関しては基本的に可能だが、T10 SCSI unmapコマンド(削除したブロックからスペースの再利用が実現できる)がサポートされていないホストOSでは、LUNがオフラインになった際のデータ読み取りが不可になる仕様となっており、NetAppではストレージでシンLUNを利用する際はこのリスクに注意するような案内を入れるようにしている。

管理用GUIツールで各LUNの容量利用状況が確認でき、容量が上限に達する前段階で通知を飛ばす機能もあるので気づかないうちに容量が上限に達していた、ということはないはず。それでもいかなる状況でもデータ読み取りができ、ストレージリソースを効率的に使えるシンLUNの作成の方がユーザにとってメリットは大きいだろう。

## シンLUN一択なのか

ではもうシックLUNの出番はないのか、と言うとそうとも限らない。シンLUNは基本的にRAID6によって作成されるLUNでストレージ容量効率がアップする反面、それなりの本数の物理ストレージディスクを必要とする。
効率的でないかもしれないが、あらゆるRAIDタイプからLUNの作成ができるシックLUNの方が選択肢が広がることもある。

またシックLUNはあらかじめワークロードの予測がつくようなサービスにおいては高いパフォーマンスを発揮できる。シンLUNの場合は仕様上、パフォーマンスにばらつきが出やすいデメリットがある。複数のシンLUNが共有ストレージリソースを競合するようなことがあればパフォーマンスの低下を招くことがあるからだ。

使うアプリケーションがどういった性質を持っているのか。それを踏まえてどのLUNを使うのかを考えていく必要がある。

## ひとりごと

東京優駿(日本ダービー)はクロワデュノールが優勝。出走馬の中で力が抜けた存在だったため順当な結果と言えると思う。

クラシック第1戦の皐月賞でレースそのものが破壊されてしまい、そこでクロワデュノールが敗れたため、ダービーは直前までは群雄割拠の様相を呈していたが、実際は1強の勢力図だった。

それはレース前の最終オッズにも反映されていたので、事前の見方と比べて思ったよりも配当がつかずに拍子抜けした馬券的中者もいたのでは。

東京優駿が終わった瞬間に本格的な夏の到来を感じる。今夏も暑くなるみたいです。
WSL2のUbuntu24.04をオフライン・インストール

## はじめに
Windows PCで手軽にLinux環境を導入する方法の1つにWSL(Windows Subsystem for Linux)というものがあります。使用可能なLinuxディストリビューションも様々です。通常は、Microsoft Storeからオンライン接続をしてインストールを実施しますが、環境によってはMicrosoft Storeには接続できないため、オフラインでWSL環境(Linuxディストリビューション導入含むを導入したい場合があります。
以下は、Ubuntu24.04をLinuxディストリビューションとして、WSLをオフライン・インストールする手順を纏めました。

導入するPCは、Windows11 Enterprise 24H2を使用しました。

## オフラインでの導入手順
基本的には、下記リンク先に記載の手順1から順に実施していきます。

https://learn.microsoft.com/ja-jp/windows/wsl/install-manual

なお、手順1から3にあたっては、コントロールパネル→「プログラム」→「プログラムと機能」→「Windowsの機能の有効化と無効化」から、下記項目のチェックボックスにチェックを入れてPCを再起動する方法でも対応可能です。
* Linux用Windowsサブシステム
* Virtual Machine Platform
![p1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/1775513e-21b8-4358-84ca-193f1ffdefba.jpeg)

### 導入時のトラブル

:::note alert
手順4の1に記載されているリンクから最新パッケージをダウンロードすると、「wsl_update_x64.msi」というファイルがPC上に作成されます。これを実行すると、下記のダイアログが表示され、導入作業が失敗します。
![p2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/456d0254-6080-4bc4-a1f4-dd12825448cb.jpeg)
:::

現在、下記の障害事象が報告されており、どうもWindows 24H2のPCに対応したファイルではなく、正しいファイルのリンクが記載されています。

https://github.com/MicrosoftDocs/WSL/issues/2091

x64用のファイルをダウンロードすることになりますが、それに対する正しいファイルのリンクは下記になります。ですので、こちらのリンク先のファイルをダウンロードし、PC上に作成されたmsiファイルを実行して、WSL環境を作成します。
x64:
https://github.com/microsoft/WSL/releases/download/2.3.26/wsl.2.3.26.0.x64.msi

作成が終わったら、手順5を実行して、WSLのバージョンのデフォルトを2にします。


### Linuxディストリビューションの導入作業
ここからは手順6のLinuxディストリビューションの導入作業について記載します。

Microsoft Storeから導入できない場合は、ディストリビューションの導入用ファイルを個別にダウンロードします。下記リンク先の「ディストリビューションのダウンロード」を参照し、Ubuntu24.04に該当するものをダウンロードします。

https://learn.microsoft.com/ja-jp/windows/wsl/install-manual

ダウンロードが終わると、PC上に「Ubuntu2404-240425.AppxBundle」というファイルが作成されていますので、これをダブルクリックすると、ダイアログが表示されてインストールするか否かを聞いてきますので、インストールを進めます。インストールの過程で、下記のWindowが立ち上がり、Linux環境で使用するユーザーIDとパスワードを設定するように要求されます。ここでは、testuserという名前のユーザーIDを作成しました。その後、インストールが完了し、下記のようになったら、導入作業は完了です。
![p3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/a8244b3d-b4a0-4e17-adf7-92dd0524028a.jpeg)

:::note warn
Linuxディストリビューションの導入後、WSLを起動すると下記のようなエラーが出力されたことがありました。

ディスク 'C:\Users\xxxxxxx\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu24.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx' を WSL2 にアタッチできませんでした: 指定されたファイルが見つかりません。
エラー コード: Wsl/Service/CreateInstance/MountVhd/HCS/ERROR_FILE_NOT_FOUND




これは、記載の通り、ファイルが該当のディレクトリに存在していなかったので、ディストリビューションの再インストールで対応できました。
:::

### 導入後の確認
コマンドプロンプトから「wsl -l -v」コマンドを実行し、下記のようになっていればOKです。
```
C:\Windows\System32>wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-24.04    Running         2
```

## さいごに
今回は、Microsoft StoreからWSLの環境導入(Linuxディストリビューションの導入含む)ができない場合のオフラインでのインストールに関して、Windows11 Enterprise 24H2にUbuntu24.04をディストリビューションとして導入する手順を紹介しました。
現在報告されている事象の部分にさえ気をつければ、後は比較的スムーズに実行可能です。
社会人10年目にして初めて資格取得した話


## はじめに

タイトルの通り、社会人になってろくに勉強もせずに10年目を迎えた私が、重い腰を上げてSAAを取得した話を書いています。
学生時代はそこまで苦手でなかった勉強が、社会人になってからなかなか始められず、ずるずる過ごしてしまった経験を公開することで、似たような境遇の方が自分もやってみるかと思ってもらえたら嬉しいです。

## 資格受験に至った背景

ひょんなことから、2023年のAWS re:Invent@ラスベガスに会社から連れてってもらうことになりました。
その当時の私はAWSの資格を取得したいな～と思いながらも、実務においては資格ほどの知識がなくても何とかなっており、勉強する時間を割くなら1つでも多くの不具合修正や機能強化にあてた方が良いのでは？と思って過ごしていました。
こんなステータスの私をラスベガスに連れて行ってくれた会社にはとても感謝しています:joy:

re:Inventに参加して、Amazon Qの発表を聞いたりする中で、ああなんかいよいよ世の中のトレンドに自分から飛び込んでいってみないと、乗り遅れるな、と実感しました。
もちろん、そういう気持ちがなかったわけではないのですが、日々の業務では目の前の製品の知識があれば仕事って結構できてしまうと思っていて、危機感みたいなものがとても薄かったように思います。

帰国する飛行機の中で、まずはSAAから取得してみよう、と決めました。

## 受験を決めたものの受験まで1年半かかった理由

2023年の年末にはそれはもうすごく乗り気に勉強する気満々でしたが、仕事しながらの勉強は思うように進みませんでした。
朝早く起きる習慣がなかったので、勉強するなら仕事を終えてから、でしたが、1日の仕事を終えてから何かをするのって本当に気力がないと続きませんでした。これができる人のこと、すごく尊敬しています。

そんなわけで、1日サボると次の日もサボって…と気づいたら勉強するという行動が頭から消えていました。
一応半期ごとの目標(MBO)に記載はしていたので、受けること自体は頭にありましたが、習慣がなく、なんともなりませんでした。

2024年の下期には、社内の勉強会が開催されるというのを聞き、1人じゃダメだから参加してみることにしました。
ですが、これもあまりうまく活用できず…。
強いてあげるなら、この勉強会の最初にまず資格受験登録をしたことで、最終的に受けるまで至れたので、その点にはとても感謝していますし、何か受けようと思い立ったら、まずは試験日を決めてしまうことが大事だと思います:joy:

受験日は2回まで無料で変更できるので、結局最初に登録した日からは半年後に受験することになりました(笑)

## 結局どれくらい勉強したか

思い立った最初や、勉強会を受けている間、少しずつハンズオン形式の動画を見て知識を増やしていましたが、急にボリュームのある章が出てきて、2割程度で挫折していました。
受験は2025年5月31日に変更していましたが、結局本気で勉強したのは1週間ほどでした。

動画を見終えるには時間が足りなすぎたので、Web上の問題集を活用しました。
試験前1週間は、朝6:30に起きて9時頃までの約2時間半と、仕事を終えてからの2時間ほどを勉強に充てました。
模擬試験レベルに到達したのは前日だったので、かなりギリギリでした…。

ただ、先人達が、過去問頑張れば大丈夫！と言っていたので、もうそれだけを信じて自信ゼロで受験することになったので、この勉強法は次からは改善したいです。

## 久しぶりの勉強をしてみての感想

まず、追い込まれたので(自分のせい)、朝早く起きるしかなかったのですが、これが個人的にはとても良かったです。
在宅勤務になってから、出社していた頃よりは夜早めに仕事を終えられるようになったのですが、別に朝の時間が早くなるわけでもなく、朝ゆっくりでも誰に何を言われるでもないので、とても不規則な生活をしていたことを改めて実感しました。
元々、学生の頃は朝型だったので、朝起きること自体の苦労はあまりないタイプで、すんなり移行できました。

朝半分寝ぼけながらPCに向かい、ログイン等している間にだんだん目を覚ますことができ、問題集をこなして頭が回転した状態から仕事に入れるのは、仕事をスムーズに進めるのにも役に立ったと思います。
また、朝早起きするために、夜も無駄にだらだら過ごすことがなくなったのもとても良かったです。

結局、勉強できないとか、時間がないとかは、私の場合はただの言い訳にしか過ぎなかったというのが分かりました:skull:

## これからの意気込み

まず、朝型は今のところメリットしかないので、続けることにしました。
周りの人が始業する前に仕事ができるのは、Slackメッセージなどの気が散る要素を除外できるので、とても集中した時間を過ごすことができます。
早起きした自分をシンプルに褒められるのも、精神衛生上良い気がします。

また、久しぶりに多くの単語をインプットしてみて、仕事ではあまり使ってなかった脳の働きを感じることができ、ある種メリハリがついたように思ったので、資格取得をしばらく続けてみることにしました。
またサボって反省の記事を書く可能性もありますが、一旦意気込みとしては続けるつもりです:joy:

## 最後に

受かってみて、アドバイスできることがあるとするならば、
- 日々の中に勉強する時間は作れるはず
- 資格はとにかく先に受験日を決めてしまう
- 勉強するということ自体にメリットがある
- ちょっとしたきっかけをゴールまで持っていくのが大切

といったところでしょうか。

資格取得をしたからと言って、その知識がすんなり使えるかと言われると、決してそうではないです。
ただ、何か自分の知らないことであったり、業界においてみんなが当たり前に知っていることを知ってみるというのは、何年目であっても大事なことだと思います。
まあ、こんなことは何回も言われてきたのを無視していたので、少しでも気になる・興味がわいたことがあれば、受験日を決めてしまうのがいいです:muscle_tone1:

ずーーーーっとサボっていてもなんとかなります！私はようやく重い腰を上げられたので、気づいたらのろのろ歩いていた気がしますが、また走ってみようと思います。
Certbotの裏側でやってること Let's Encrypt Webroot認証の仕組み

Let's Encryptを使ってWebサイトをHTTPS化する際、Certbotというツールを使うのが一般的です。
本記事では、特にWebroot認証において、Certbotが裏側でどのような処理を行っているのかを整理します。


## そもそもWebroot認証とは？

認証局（ここでいうLet's Encrypt）が指定したパスにサーバーが特定のファイルを置くことで、ドメインの所有者であることを証明する方式

認証局は、そのファイルにHTTP経由でアクセスして検証します。


**前提条件**
80番ポートの解放と、Let's Encryptとサーバーがやり取りするためにもDNS設定をしていることが必要です。


## 認証の全体的な流れ

```
1. Certbotが「このドメインの証明書が欲しい」とLet's Encryptに依頼
2. Let's Encryptが「このトークンをこのURLに置いて」と指示
3. Certbotがその内容のファイルをWebサーバの公開ディレクトリに作成
4. Let's EncryptがそのURLにHTTPでアクセス
5. アクセス成功 → 所有者認定 → 証明書発行
```


## 🔧 Certbotがやっていること【内部処理】

コマンド例：

```bash
sudo certbot certonly --webroot -w /var/www/html -d example.com
```

このとき Certbot は以下の処理を自動で行います。

### 1. Let's Encryptに接続しリクエスト

* Certbot は Let's Encryptに「example.com の証明書が欲しい」とHTTPS経由でリクエストを送る。
* Let's Encrypt は「所有者確認のためのチャレンジ(Webrootにファイルを置いてね）」を返してくる。

### 2. トークンファイルの作成

* 指示されたファイル名と中身を元に、以下のようなファイルを作成：

```
/var/www/html/.well-known/acme-challenge/<トークン>
```

* 中身には署名付きのトークンが含まれる

### 3. HTTPアクセスによる確認待ち



* Let's Encrypt が実際に `http://example.com/.well-known/acme-challenge/...`にアクセス

* 正しく応答すれば OK、証明書を発行できる状態になります

> 80番ポートでアクセス可能にしている必要があるのはここで使う為です。



### 4. 証明書の取得と保存



認証に成功すると、CertbotはLet's Encryptに対して証明書の発行をリクエストし、発行された証明書データを受け取ります。

受け取った証明書一式を`/etc/letsencrypt/live/example.com/` に保存：



`fullchain.pem`

`privkey.pem`

`cert.pem`


## なぜこれで所有者確認ができるのか

Webroot 認証では以下が確認できます：

* DNS設定が正しく、`example.com` が自分のサーバに向いている
* サーバの公開ディレクトリにファイルを置ける（操作権限がある）

つまり、「ファイルを置ける」という事実そのものがドメインの所有証明になります。



## 補足：認証ファイルは一時的

* トークンファイルは認証が終われば Certbot によって削除されます
* 中身も暗号的な署名済みトークンであり、漏れても問題ありません



## まとめ

Certbotは、Webroot認証において以下を**全自動**で行います：

| ステップ | 処理内容                        |
| ---- | --------------------------- |
| ①    | Let's Encryptに証明書リクエスト      |
| ②    | 指定されたトークンファイルをWebrootに作成    |
| ③    | Let's EncryptによるHTTPアクセスに応答 |
| ④    | 証明書を取得し、ローカルに保存             |

この流れによって、ドメインの所有を確認し、SSL/TLS証明書を安全に取得することができます。
初めての投稿

備忘録
　データ構造
 １．ハッシュテーブル
 ２．可変長配列（配列リスト）
 ３．連結リスト
 ４．スタック
 ５．キャッシュ
 ６．木構造
 ７．グラフ構造

卒業までの目標
基本のデータ構造とアルゴリズムを使えるようにする．
gitを使いこなす．
毎日qiitaの更新を行う．