OmniAICreator/Qiita-1.07M huggingface dataset:
【イラレ】クリッピングマスクで複数の島を残すようにマスクする方法

イラレでクリッピングマスク機能を使って、いくつかの分かれた領域を残すような形状にマスクする方法と、その考え方のメモです。

# 完成像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029866/25079427-0645-45ac-93ec-a2d1afb1592a.png)
左を右にするようなイメージです。

# 手順
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029866/303361f0-3462-431f-b1a0-315fd4e471cb.png)

1. 前面に配置した「くりぬき用」の図形たちを選び、右クリック→`複合パスを作成`を実行
2. 背面の図形と、さきほど作成した複合パスを選び、右クリック→`クリッピングマスクを作成`を実行

結果：完成イメージのように背面の図形が、前面の複数の図形に沿ってくり抜かれます。

# 考え方のメモ
### 1️⃣くり抜き枠に使える図形は常に「ひとつ」だけ
クリッピングマスク機能は、常に最前面の**ひとつ**の図形を「くり抜き枠」として用い、その背後にある図形の外部を隠す機能のようです。
たとえ前面にある複数の図形をグループ化していても、そのグループ自体をくり抜き枠として使うことはできません。
なお、クリッピングマスクを実行した図形たちは、内部的には`クリップグループ` と呼ばれるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029866/f34b4a21-ca19-46b0-a40c-6393e66a1455.png)

### 2️⃣複合パスを使えばふたつ以上の図形を束ねられる

では、くりぬき枠として複数の図形をつかいたいときどうするか。
くりぬき枠とする複数の図形を、 `複合パス` とすると、内部的には一つの図形としてみなされるようになります。
なお、複数のくりぬき枠の図形たちは内部的には `複合クリッピングパス` と呼ばれています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029866/fcac5cb3-b502-444a-9b39-d3e3a6e69e37.png)


# 注意
クリッピングマスクを適用した図形でダブルクリックを繰り返すと。クリッピングをしている図形のパスや、複合クリッピングパスを編集できるようになりますが、ここでパスファインダーの合体をしたり下手にいじると、クリッピングマスクが解除されてしまうようです。
(このあたりの細かい挙動は未確認)。


以上。
「MCP」をざっくりと言うと？（IT本職じゃない人向け）

# ざっくり言うと「MCP」とは？
1. 複数のLLMモデルの中から目的に応じた最適なモデルを選べる、AIエージェントというサービスがあります。
2. MCPはこのサービスから目的を判断し、自動で

    - モデルの選択
	- ローカルやクラウドデータの選択
	- MCPに対応されているサーバがある、外部サービスの利用
	
を判断し、目的にそった回答をしてくれるためのプロトコルです。

# 執筆のきっかけ
1. 最近、生成AI界隈で「MCP」や「A2A」という単語をよく目にするなぁ…
2. そうだ、令和7年4月30日に次のオンライン講演があるから、勉強しよう。
3. （視聴終わって）すごいなぁ。ところで、ざっくりと言うとこういうことだってばよ？
4. ChatGPTさんに合っているか確認する。
    →　概ね合っているそうです（上記の用途としては十分）

### **からあげさん**の講演（再放送）

https://findy.connpass.com/event/352659/

### 資料やQ&Aを公開してくださっている、**まさぴょん**さんの記事

https://zenn.dev/manase/scraps/eebe4785217624

# ChatGPTさんの説明（DeepResearch）
## MCP（Model Context Protocol）とは

Model Context Protocol（MCP）とは、AIモデル（特にLLM）と外部のデータソースやツールを安全かつ統一的に接続するためのオープンなプロトコル規格です。Anthropic社によって2024年末に提唱されましたが、特定企業に依存しない汎用的な標準インタフェースとして、AIアシスタントやAIエージェントを中心に急速に普及しつつあります。

## MCPの概要と設計思想
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108762/a60f7f89-defb-4f0b-b63c-a549d92ac94e.png)

MCPの目的は、AIモデルが必要とする文脈（Context）情報や外部操作を、個別APIや専用設計に頼らず、標準化された手段で取得・活用できるようにすることです。

MCPは、IDEと言語解析をつなぐLSP（Language Server Protocol）にヒントを得た構造で、LLM版のLSPとも言われます。
• 従来：N個のツール × M個のモデル → M×N の実装が必要
• MCP導入後：MCPクライアント × MCPサーバー → M+N の汎用インタフェースで済む

## MCPが使われる文脈
• AIアシスタント／AIエージェントが、外部システム（Slack, GitHub, Drive, DBなど）とやり取り
• 複数のLLM（Claude, GPT, Gemini など）を目的に応じて選択・使い分け
• 様々な外部サービスやローカルデータとの統合的な連携

## MCPの構成と基本機能

MCPは **クライアント（ホスト）とサーバー（ツールやデータ**による疎結合構成を持ち、クライアント側はAIアプリケーション（例：Claude、IDEプラグイン）であり、サーバー側は外部ツールやサービス（例：GitHub、Postgres、FreeCAD）です。

MCPが提供する3つのプリミティブ
	•	Tools：APIや関数呼び出し（例：データベース検索、ファイル保存）
	•	Resources：読み取り専用の構造化情報（例：CSVファイル、コード）
	•	Prompts：AIへのガイドや命令テンプレート

## MCPの主な利点

✅ モデルの選択が柔軟にできる

MCPサーバーは「精度重視」や「応答速度重視」といったヒントをクライアント側に渡し、それに基づいて利用するLLMを選べる構造になっています。

✅ 多種多様なデータソースに接続

ローカルファイル・Google Drive・Postgres・社内DBなど、複数ソースに並列に接続可能。ユーザーの要求に応じて、どのツールを使うかAIが判断します。

✅ サンドボックス設計による安全性

MCPサーバーは原則ローカル動作。ユーザーが明示的に許可しない限り、外部サービスや他のサーバーへデータは流れません。


## （例）MCPとFreeCADの連携事例

FreeCADでは、オープンソース拡張「FreeCAD-MCP」が開発され、MCPサーバーとして機能します。
これにより、ClaudeなどのAIアシスタントからFreeCADを以下のように操作できます：
	•	モデルの構成を自然言語で取得
	•	Pythonスクリプトを送信・実行してCADを編集
	•	3DモデルをAIから制御可能に

## まとめ

MCPは、AIモデルを「学習済み知識の箱」から「現実世界とつながる実用エージェント」へと進化させるための鍵となるプロトコルです。
今後はFreeCADやBlenderといったエンジニアリングツールだけでなく、業務系SaaSやRPAとの連携も加速すると予想されます。

## 関連リンク（出典）
• [Anthropic公式：Introducing MCP](https://www.anthropic.com/news/model-context-protocol)
• [GitHub – anthropics/mcp（仕様書）](https://github.com/anthropics/mcp)
• [Humanloop Blog – MCPはLLMのLSP](https://blog.humanloop.com/why-mcp-is-the-lsp-for-llms/)
• [FreeCAD-MCP（GitHub）](https://github.com/FreeCAD/FreeCAD-MCP)
• [Claude + GitHub MCPサーバー（OSS）](https://github.com/anthropics/mcp-server-github)
• [Claude + Postgres MCPサーバー](https://github.com/anthropics/mcp-server-postgres)
TensorFlow Hub入門：事前学習済みモデルを活用した効率的な機械学習


## TensorFlow Hubとは

事前学習済みモデルを簡単に再利用できるライブラリです。
画像分類(ResNet, MobileNet)、テキスト埋め込み(BERT, Universal Sentence Encoder)、
音声・動画処理などのモデルをゼロから学習することなく、
すぐに自分のタスクに適用できます。

## 主なメリット

- **転移学習の簡易化**: 
モジュールを固定して特徴抽出器として使い、上位層だけ再学習することで、
少ないデータでも高精度を実現

## 基本的な使い方

```python
import tensorflow as tf
import tensorflow_hub as hub

# モジュールのロード
hub_url = "https://tfhub.dev/google/imagenet/mobilenet_v2_100_224/feature_vector/5"
feature_extractor = hub.KerasLayer(hub_url, input_shape=(224, 224, 3), trainable=False)

# Kerasモデルへの組み込み
model = tf.keras.Sequential([
    feature_extractor,                        # 事前学習済みの特徴抽出層
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(num_classes, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
```

## 重要パラメータの解説

`hub.KerasLayer()` の主要パラメータ:

- **hub_url**: TensorFlow Hub上のモデルを指すURL
- **input_shape**: 入力テンソルの形状(高さ, 幅, チャンネル数)
- **trainable**: 
  - `False`: モジュール内の重みを凍結(更新なし)、少量データに有効
  - `True`: ファインチューニング時に使用、全体を再学習
Tensorflowで学ぶDNN回帰と線形回帰

# この記事は

TensorFlow（tf.keras）を使って、
- 線形回帰モデル
- DNN 回帰モデル
    
の２つの手法を比較し、実装例を通して違いを解説します。
    

# 概要

### 2つの手法の違い

- **線形回帰**
    - モデル構造：入力→出力の１層のみ
    - 表現力：関数形は常に $y = w x + b $の直線
    - 長所：計算コストが低く、結果の解釈が容易
    - 短所：非線形データに適用すると誤差が大きくなる
- **DNN 回帰**
    - モデル構造：隠れ層＋活性化関数を複数重ねたネットワーク
    - 表現力：非線形関数を近似できる（多項式項や複雑曲線を学習）
    - 長所：非線形性の強いデータに対して高精度
    - 短所：パラメータ数が増え、過学習リスクやチューニングが必要

### サンプルデータの作成

```python
import numpy as np

# 再現性のためのシード固定
np.random.seed(0)

# データ数と入力値
N = 1000
x = np.random.rand(N, 1).astype(np.float32)

# 真の関数：y = 5x + 3x^2 + ノイズ
y = 5 * x + 3 * x**2 + np.random.randn(N, 1).astype(np.float32) * 0.05

# 訓練／テスト分割（80%/20%）
indices = np.arange(N)
np.random.shuffle(indices)
split = int(N * 0.8)
train_idx, test_idx = indices[:split], indices[split:]
X_train, X_test = x[train_idx], x[test_idx]
y_train, y_test = y[train_idx], y[test_idx]

```

---

### 線形回帰の場合

```python
import tensorflow as tf
from tensorflow.keras import layers

# モデル定義：Dense(1) のみ
linear_model = tf.keras.Sequential([
    layers.Dense(1, input_shape=(1,))
])

# コンパイル：最適化は SGD、損失は MSE
linear_model.compile(
    optimizer='sgd',
    loss='mse',
    metrics=['mse']
)

# 学習
history_lin = linear_model.fit(
    X_train, y_train,
    epochs=100,
    batch_size=32,
    validation_split=0.2,
    verbose=0
)

# テスト評価
mse_lin = linear_model.evaluate(X_test, y_test, verbose=0)[0]
print(f"Linear Regression Test MSE: {mse_lin:.4f}")

```

- **ポイント**：隠れ層を持たないので、出力は必ず直線。
- **結果**：非線形項を捉えられず、MSE は高め。

---

### DNN回帰の場合

```python
# モデル定義：隠れ層2層＋ReLU活性化
dnn_model = tf.keras.Sequential([
    layers.Dense(64, activation='relu', input_shape=(1,)),
    layers.Dense(64, activation='relu'),
    layers.Dense(1)  # 出力は線形
])

# コンパイル：最適化は Adam、損失は MSE
dnn_model.compile(
    optimizer='adam',
    loss='mse',
    metrics=['mse']
)

# 学習
history_dnn = dnn_model.fit(
    X_train, y_train,
    epochs=100,
    batch_size=32,
    validation_split=0.2,
    verbose=0
)

# テスト評価
mse_dnn = dnn_model.evaluate(X_test, y_test, verbose=0)[0]
print(f"DNN Regression Test MSE: {mse_dnn:.4f}")

```

- **ポイント**：隠れ層＋ReLU によって非線形変換を学習。
- **結果**：複雑な関数形を近似でき、MSE は線形回帰より小さくなる。

# まとめ

- **線形回帰**
    - シンプルで解釈性が高い
    - 非線形関係を表現できず、複雑データでは性能が限られる
- **DNN 回帰**
    - 高い表現力で非線形データに強い
    - パラメータ数が多く、過学習対策やハイパーパラメータ調整が必要

用途やデータの性質に合わせて、適切な手法を選択してください。
Windows11でAutoHotKey V2を使いMacみたいにCtrl-kで行末までカットする

意外と調べても出てこないので備忘録として記事に残す

## はじめに
MacからWindowsへの移行で一番困ったのがEmacsキーバインドが使えないことだったのでPowerToysを使ってある程度再現はできたけどCTRL-KだけがどうしてもできなかったのでAutoHotKeyを使い再現した(PowerToysの使い方は割愛)

### AutoHotKeyのインストール
まだAutoHotKeyをインストールしていない場合は以下からインストールする。
特別理由がない限りはv2を使うことを推奨してるのでそちらを使う

https://www.autohotkey.com/

### 以下を設定
インストールが完了したら適当なエディタでファイル（ファイル名はなんでもよい）を.ahk拡張子で作成し、以下の内容を書いて保存する。
筆者はctrl-k.ahkにした。
```
LCtrl & k::
{
    Send "+{End}{Delete}"
}
```
これは左CTRL-Kのみを割り当てたかったのでこうしている。右CTRLはPowerToysで別の役割を振っている。
もし変更したい場合は公式ドキュメントを参考にするとよい。

https://www.autohotkey.com/docs/v2/

### 作成したファイルをダブルクリック
あとはファイルをダブルクリックすると動くようになるので、確認する。
### 自動起動するように変更
Win + R を押してファイル名を指定して実行を起動し、以下を検索してスタートアップフォルダを開いて、今作成したファイルをコピーなり移動する。
```
shell:startup
```

### 完了！
🌿 ラズパイを活用した『社内環境（温湿度）見える化システム』をつくる⑥【HPへの表示デザイン決定編】

## はじめに

こんにちは、piyovateです🐣✨

前回の記事では、ラズパイPico WHで取得した温湿度データをブラウザから確認できるようになりました。

今回は、この取得したデータを実際に会社のホームページに表示するための『表示方法やデザイン、表示場所』などを検討・決定しましたので、その内容をご紹介します！

---

## 📌 今回の目標

- ホームページに表示する温度・湿度データのデザインを決定
- 具体的な表示場所を決定
- 温度・湿度それぞれを分かりやすい絵文字で状態表示するように決定

---

## 🎨 Step1：デザイン検討のポイント

ホームページへの表示にあたり、以下のポイントを重視しました。

- 視認性が高く直感的であること
- 既存のサイトデザインと調和すること
- スマホ画面（ハンバーガーメニュー表示）にも対応できること
- 情報がシンプルかつわかりやすいこと

検討した結果、『温度・湿度それぞれを個別に評価し、それぞれの状態を絵文字で表現』することにしました。

---

## 🌡️ Step2：温度・湿度の状態と絵文字（最終決定）

決定した温度・湿度の状態は、以下の5段階表示です。

### 温度の状態（絵文字5段階）

| 状態 | 温度範囲 | 絵文字 |
|------|----------|--------|
| 非常に暑い | 28℃以上 | 🥵 |
| 少し暑い | 25〜27℃ | 😅 |
| 快適（ちょうどよい） | 20〜24℃ | 😌 |
| 少し涼しい | 17〜19℃ | 🙂 |
| 非常に寒い | 17℃未満 | 🥶 |

### 湿度の状態（絵文字5段階）

| 状態 | 湿度範囲 | 絵文字 |
|------|----------|--------|
| 非常にじめじめ | 80%以上 | 💦 |
| ややじめじめ | 65〜79% | 💧 |
| 快適（ちょうどよい） | 40〜64% | 😊 |
| やや乾燥 | 30〜39% | 🍂 |
| 非常に乾燥 | 30%未満 | 🌵 |

---

## 🖥️ Step3：決定した表示デザインと表示場所

今回、以下の表示方法と場所に決定しました。

- **広い画面（PCなど）** → フッター部分に表示
- **狭い画面（スマホなど）** → フッター部分とハンバーガーメニューに追加で表示

### フッター表示例（PC・スマホ共通）

```
現在のオフィス環境：温度😌 / 湿度😊
```

### ハンバーガーメニュー表示例（スマホ画面）

```
現在のオフィス環境：
温度😌 / 湿度😊
```

---

### 📸 フッター表示（実際の表示写真）

![スクリーンショット 2025-04-30 132718.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4068097/aa326652-3a83-479c-9f0e-2470c2eaed56.png)


### 📱 ハンバーガーメニュー表示例（スマホ画面）

![スクリーンショット 2025-04-30 135507.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4068097/d5ac4037-dd21-4104-b119-39901a229774.png)


オフィス環境の状態が絵文字でシンプルに表示されています✨

---

## 🚩 Step4：工夫したポイント・気づいたこと

- 最初は温湿度をまとめて「快適度」として評価していましたが、それぞれの状態を明確に区別して表示することで、環境の状態が一目でわかりやすくなりました。
- 詳細な絵文字表示により、実際の体感に近い状態が直感的に伝わるようになりました。
- スマホ表示でもフッターに常時表示し、さらにハンバーガーメニューにも追加することで、どの画面を閲覧している時でもオフィス環境の確認が簡単になりました。

---

## 🔜 次回の予定

次回は、今回決定したデザインを実際のホームページに組み込むため、フロントエンド（HTML・CSS・JavaScript・PHP）のコード修正と実装を行います。

具体的には以下の内容を予定しています。

- 温湿度データをリアルタイムで取得し、決定したデザインで表示できるようコード修正
- 営業時間中はリアルタイム表示を行い、それ以外の時間帯は「営業時間外」と表示する仕組みを検討・実装
- 平均気温や湿度などを表示する方法の検討・実装（必要に応じて実施）

実際にホームページに実装した結果や工夫した点もあわせてご紹介しますので、次回もぜひお楽しみに🐣✨

## 🔗 シリーズリンク

* 次回：[🌿 ラズパイを活用した『社内環境（温湿度）見える化システム』をつくる⑦【HP側コード修正（フロントエンド編）】](https://qiita.com/Piyovate/items/29003a76d1f8474fa270)
* 前回：[🌿 ラズパイを活用した『社内環境（温湿度）見える化システム』をつくる⑤【Pico WHでWebサーバーを立ち上げ＆ローカルで取得テスト編】](https://qiita.com/Piyovate/items/44dc907d20254653da4c)
* 第１回：[🌿 ラズパイを活用した『社内環境（温湿度）見える化システム』をつくる①【アイデア決定編】](https://qiita.com/Piyovate/items/b0e5a4b2c4c1ed7a3bf8)

📚 シリーズ全記事はこちら：[Qiitaストックページ](https://qiita.com/Piyovate/stocks/657201b660bed4ebf50c)
グループ発表で学ぶDeep Learningのドロップアウト

# この記事は

Deep Learningのドロップアウトを解説する。
ドロップアウトが必要な原因である共適応からなぜ有効なのか。
そして「グループ発表と一緒やん」という着地を著者はしたので、
その説明をさせてもらいます。


# 共適応とドロップアウトの必要性

### 共適応（Co-adaptation）とは

ニューラルネットワークでは、複数のユニット（ニューロン）が互いに依存し合うことで、特定の組み合わせだけでうまく機能するパターンを覚えてしまうことがあります。これが「共適応」です。

- **問題点**：あるユニットが壊れたり外れたりすると、依存先のユニットも役立たなくなり、ネットワーク全体の性能が大きく低下します。
- **直感的イメージ**：いつもセットで働くペアがいて、片方がいないともう片方も機能しない…という脆い状態です。

### なぜドロップアウトが有効化か？

ドロップアウトは「訓練時にランダムでニューロンをオフにする」ことで、以下の効果を発揮します。

1. **共適応の抑制**
    - 各ユニットはしばしば仲間を失うので、「自分一人でも何とかしないといけない」状況に追い込まれます。
    - その結果、互いに依存しない独立した特徴検出能力が強化されます。
2. **モデル平均（アンサンブル）との関係**
    - ドロップアウト付きモデルは、訓練時に多数の“サブネットワーク”（各ユニットのオンオフ組み合わせ）を学習しているとみなせます。
    - テスト時には全ユニットを使いつつ、訓練時と同じ期待値を保つように出力をスケーリングする（いわゆる「逆ドロップアウト」）ことで、膨大なモデルの平均的判断を安価に近似できます。
3. **正則化効果**
    - 重みパラメータが大きくなりすぎたり、特定データに過度にフィットしたりするのを防ぎます。
    - 余計なノイズや不要な依存関係を落とすことで、未知データへの汎化性能が向上します。

---

### グループ発表の例え

1. **共適応なし（通常の練習）**
    - 5人が毎回フルメンバーで練習。Aさんは「難しい部分はBさんがやってくれる」と依存。
2. **ドロップアウトあり**
    - 練習ごとにランダムで1～2人が欠席。
    - 欠席のたびに「自分がいなくても発表が回るよう、しっかり準備しよう！」と全員が意識を高める。
    - その結果、誰が欠けても全体の質が保たれる、どのメンバーも自立したスキルを身につけるようになります。

---

### 実際のPythonでの実装例（TensorFlow/Keras）

以下は、TensorFlow 2.x＋Kerasでの簡単なコード例です。

```python
import tensorflow as tf

# 1) モデル定義
model = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),         # 28×28画像を1次元ベクトルに
    tf.keras.layers.Dense(256, activation='relu'),        # 中間層256ユニット
    tf.keras.layers.Dropout(0.5),                         # ドロップアウト率 50%
    tf.keras.layers.Dense(10, activation='softmax')       # 出力層 10クラス分類
])


```

- `Dropout(0.5)` は訓練時に50%のユニットを無効化。
- 推論（`model.evaluate` や `model.predict`）時には自動で学習時の期待値になるようにスケーリングされます（Kerasの「逆ドロップアウト」実装）。

---

# まとめ

- **共適応の抑制** によって各ユニットが独立して役立つ特徴を学ぶようになる。
- **モデル平均（アンサンブル）** を安価に近似し、出力の安定性と汎化性能を高める。
- TensorFlow/Kerasでは数行のコードで簡単に適用でき、設定したドロップアウト率以上の過学習対策が可能。

ドロップアウトは「仲間が抜けても動ける強い個」を育て、最終的に「全員そろったチームワーク」の恩恵を享受する、非常にシンプルかつ強力なテクニックです。
Windows11 24H2 + vagrant upでエラーのその後

# はじめに

## 環境

* Windows11 Home 24H2 (OSビルド：26100.3915）
* VirtualBox 7.1.8r168469(Qt6.5.3)
* Vagrant 2.4.5
* Almalinux8.9（ゲストOS）

## この記事の目的

前回記事のその後です。
[Windows11 24H2 ＋ vagrant upでエラー時の対応メモ](https://qiita.com/edward999th/items/22fcd6b0d75110dce310)

前回はWindowsのHyper-VとVirtualBoxがConflict（衝突）してVirtualBox上のVMが動作しない、という考察のもと、Hyper-Vを無効化することで回避することができましたが、WSL2との共存ができない（WSL2はHyper-Vを基盤とする）、Hypver-Vを有効化・無効化したあとWindows再起動が必要というちょっと残念な結果でした。

その後、進展があったので記録として残します。

# その後の状況

## 結局

Windows updatesが何回かありましたが、最近まで「瞑想中(gurumeditation)」エラーだったのが数日前試したところ別のboxでしたが別のエラーになり、その内容が「瞑想中」エラーではなくbox作り直しで対応できる内容だったので、Almalinux8.9で```vagrant up```してみたところ **問題なく起動** しました。

VirtualBoxとVagrantもアップデートしましたが、おそらくWindowsの方のupdateでなんらかのバグが直ったと推測します。
VirtualBoxのサイトでデフォルトインストールされるバージョンは以前と同じ7.1.6ですし、VagrantのChangeLogをみても今回の現象に関連する情報は載っていませんでした。

## 他の対応方法

VirtulBoxのVMがダメな場合、Hyper-Vに対応したVMを指定してVagrantで起動する方法があります。
詳細は省きますが、以下の様にproviderを指定して起動できます。
管理者モードのコマンドプロンプトもしくはPowerShellから実行する必要があります。

```
> vagrant up --provider=hyperv
```

Windows11 HomeエディションではHyper-V仮想環境は正式に対応していないようなのですが、以下のページを参考にHyper-Vをインストールしました。
CPU、マザーボードによってはBIOS(UEFI)で「CPU仮想化機能」の有効化が必要です。

[Windows11 HomeでHyper-Vを使う](https://zenn.dev/arbr/articles/d9072558cb488e)

:::note warn
警告
Hyper-VはWindows11 Homeエディションには正式に対応していません。
インストールはご自身の責任において実施お願いします。
:::

Hyper-Vに対応したBoxはHashi-CorpのDiscover Vagrant Boxesページからprovidersがhypervのものを選り取り見取りで選ぶことができます。

[Discover Vagrant Boxes](https://portal.cloud.hashicorp.com/vagrant/discover)

# 終わりに

Windows11 24H2にバージョンアップしたらVirtualBoxのVMが使えなくなった件は、Windows11のupdatesで自然に解消しましたが、視点を変えてHyper-VのVMを使うことも可能ということを覚えたのは一つの収穫でした。

Happy Vagrant Life!
デスゲームのような現場で見つけた、自分らしい成長のかたち

## はじめに：緊張感に満ちたプロジェクト
今回関わったのは、**某企業の採用サイト開発案件**でした。
率直な感想を言うと、まるで「デスゲーム」に参加しているかのような、**緊張感のあるプロジェクト**だったと感じています。

この現場はとにかく入れ替わりが激しく、月単位で新しい人が入ってきては、同じ月のうちに多くの人が離れていく――そんな環境でした。

というのも、**このプロジェクトでは試用期間中にその人が現場にマッチするかを見極め、継続して参画してもらうかどうかを判断する運用**がされていたためです。

実力主義の会社であると事前に聞いてはいたものの、実際に体感すると予想以上のインパクトがありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4074844/82cdd8ad-5cc5-4cc9-99e5-d50c6aaf5fbd.png)

## アサイン当初の不安と期待
アサインされた当初は、不安でいっぱいでした。
「自分の実力でやっていけるのか？」「試用期間後に残れるのか？」と、**プレッシャーや緊張感が常に付きまとっていた**のを覚えています。

特に序盤は、**周囲のスキルの高さに圧倒され、自分を見失ってしまった**時期もありました。
今振り返ると、必要以上に焦り、空回りしていた部分もあったなと感じています。

## Goとの出会い：新鮮さと苦労の連続
今回の案件では、**Go言語を使うことになった**のも大きな変化でした。
基本的な文法は他の言語と大きく違わない印象でしたが、**レシーバーの概念やポインタの使い方**には最初戸惑いました。

また、**VSCodeでのデバッグ環境構築**に苦戦し、うまく動作しない状況が続いたため、最終的には **GoLandへ切り替え**ることで開発効率を安定させました。

## テストコードへの挑戦と設計の壁
今回は、**Goのテストコードの作成**にも初めて本格的に取り組みました。
Goにもモックライブラリはあるものの、**Jestのよう柔軟にモックできるわけではなく**、単体テストを書くには設計段階から工夫が必要だと痛感しました。

特にインターフェースを意識した設計が求められたため、**テスト容易性を考慮したコード構造**について深く学ぶ良い機会となりました。
TDDのようなスタイルには少し相性が悪い印象も受けましたが、そのぶん設計スキルは確実に鍛えられたと思います。

## 現場の文化に助けられたこと
この案件の中で、最もポジティブだったことの一つがチームの文化です。
質問チャンネルに投げると**誰かしらがすぐに反応してくれる**という風土があり、周囲に支えられている安心感がありました。

また、自分なりの工夫として、**Slack上に「作業ログ用スレッド」** を作ってみました。
タスクの進行や調査内容をリアルタイムで書き残すことで、後から振り返ったり、周囲と情報共有しやすくなったりと、良い効果が得られました。
これは自社の社長のアドバイスを参考にした取り組みでしたが、大正解だったと思います。

## 自分を見失いかけた反省と、大きな気づき
試用期間の序盤は、正直**自分を見失っていた**と感じます。
周囲と比較して焦り、「自分ももっとやらなければ」と空回りすることが多かったです。

ただ、その経験を通じて、**「人は急にはスーパーマンになれない」** という当たり前のことに気づけました。
周囲にすごい人がいても、自分は自分。**今の自分ができるベストを尽くすことが大切**だと、ようやく腹落ちしました。

## 今後に活かしたいこと
精神的な面での成長が最も大きかったと感じています。
周囲に流されず、**自分のペースでベストを出し続ける強さ**を、今後も養っていきたいです。

また、今回環境構築などで苦戦したことをきっかけに、**インフラや開発環境に関する知識も強化していきたい**と考えています。

## おわりに
このプロジェクトは、技術的・精神的にも、間違いなく自分にとっての**大きなターニングポイント**となりました。
不安や苦労もありましたが、それ以上に得たものが多く、「今後につながる良い経験だった」と自信を持って言えます。

これからも、どんな環境でも自分らしく、少しずつ成長していけるように挑戦を続けていきます。

## 採用案内
株式会社TechReisでは、一緒に成長できるエンジニアを募集しています！

- エンジニアが案件を選択できる制度
- 契約時の単価を完全公開
- 単価に連動した給与設定

などの仕組みがあり、自身のキャリアプランやライフスタイルに合わせた案件選びが可能です。

興味のある方は、[Green](https://www.green-japan.com/company/9886)または[HP](https://techreis.co.jp/ja)をチェックしてみてください！お問い合わせお待ちしています。
5分でできる SlackでBedrock連携 with Terraform

# はじめに
GW でもカレンダー通りに仕事中の [@\_\_\_nix___](https://twitter.com/___nix___) です。
いつも地味が記事を公開していますが、たまには AI系 の記事をということでご紹介致します。

記事執筆の理由は以下の記事で、毎度のこと、Terraform で簡単に使いたいというのが理由でした。

https://qiita.com/moritalous/items/b63d976c2c40af1c39e5



# 背景

AWS BedrockとSlackの連携は、AWS Chatbotの機能拡張により実現可能になりました。しかし、この設定には以下の課題がありました。

1. 手動での設定作業が多く、時間がかかる
2. 設定の再現性が低い
3. 環境ごとの設定管理が煩雑
4. セキュリティ設定の一貫性が保ちにくい

これらの課題を解決するため、Terraformモジュールとして実装することで、インフラストラクチャのコード化（Infrastructure as Code）を実現しました。

https://github.com/nix-tkobayashi/terraform-aws-bedrock-slack-agent

# 概要

[terraform-aws-bedrock-slack-agent](https://github.com/nix-tkobayashi/terraform-aws-bedrock-slack-agent) は、AWS BedrockエージェントとSlackの連携を自動化するTerraformモジュールです。主な特徴は以下の通りです。

1. **シンプルな設定**
   - 必要なのはSlackチャンネルIDとチームIDのみ
   - その他の設定はデフォルト値で最適化済み

2. **セキュリティの考慮**
   - IAMロールとポリシーの適切な設定
   - 最小権限の原則に基づく設計

3. **柔軟なカスタマイズ**
   - エージェントの指示や説明のカスタマイズ
   - モデルの選択やパラメータの調整が可能

4. **運用のしやすさ**
   - 環境ごとの設定管理が容易
   - 変更履歴の追跡が可能

# 使い方

## 前提条件

- AWSアカウント（Bedrockの利用権限が必要）
- Slackワークスペース（管理者権限が必要）
- Terraform v1.11.4以上

## セットアップ手順

1. **モジュールのせｔ**
   ```hcl
   module "aws_bedrock_slack_agent" {
     source = "./modules/aws-bedrock-slack-agent"
     
     chatbot_slack_channel_id = "C0123456789"
     chatbot_slack_team_id    = "T0123456789"
   }
   ```

2. **Terraformの実行**
   ```bash
   terraform init
   terraform apply
   ```

3. **Slackでの設定**
   - AWS Chatbotアプリの追加
   - エージェントの接続
   - 質問の開始

## カスタマイズ例

```hcl
module "aws_bedrock_slack_agent" {
  source = "./modules/aws-bedrock-slack-agent"

  bedrock_agent_name        = "custom-agent"
  bedrock_agent_instruction = "カスタム指示..."
  bedrock_agent_description = "カスタムAIアシスタント"
  
  chatbot_slack_channel_id = "C0123456789"
  chatbot_slack_team_id    = "T0123456789"
  chatbot_logging_level    = "DEBUG"
}
```

# 終わりに

このモジュールにより、AWS BedrockとSlackの連携がより簡単に、より安全に実現できるようになりました。今後も以下のような機能追加を予定しています。

1. 複数のSlackチャンネルへの対応
2. より細かい権限設定のオプション
3. モニタリングとアラートの設定
4. バックアップとリストアの機能

また、コミュニティからのフィードバックを積極的に取り入れ、より使いやすいモジュールにしていきたいと考えています。

# 一言

この記事良かったと少しでも思って頂けたら是非 [@\_\_\_nix___](https://twitter.com/___nix___) をフォローしてあげてください。或いは記事に対してリアクションをお願い致します。

# 謝辞

このモジュールの作成にあたり、以下の記事を参考にさせて頂きました。

[ついにBedrockとSlackがノーコードで連携できるようになったよ！](https://qiita.com/moritalous/items/b63d976c2c40af1c39e5) by @moritalous
この記事で紹介されている手順を基に、Terraformモジュールとして実装することで、より再現性の高い設定が可能になりました。

この場を借りて感謝申し上げます。
LazyColumnとColumn、LazyRowとRowの違いとは？

## はじめに

Jetpack Composeでは、縦方向に子要素を並べるための**Column**と**LazyColumn**、横方向に子要素を並べるための**Row**と**LazyRow**が提供されています。これらのコンポーネントは似ているようで異なる特徴を持っています。

## ColumnとLazyColumnの違い

### Columnとは？
Columnは、縦方向に子要素を並べるためのコンポーネントです。すべての子要素を一度に描画するため、少数の要素を並べる場合に適しています。

**特徴**
- 子要素を一度にすべて描画する。
- スクロール機能はデフォルトでは提供されない。
- 少数の要素を並べる場合に適している。

**使用例**
```kotlin
@Composable
fun ColumnExample() {
    Column(
        modifier = Modifier.fillMaxSize(),
        verticalArrangement = Arrangement.spacedBy(8.dp),
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        repeat(10) { index ->
            Text(text = "Item $index", modifier = Modifier.padding(16.dp))
        }
    }
}
```

### LazyColumnとは？
LazyColumnは、縦方向に子要素を並べるスクロール可能なコンポーネントです。必要な部分だけを描画する「遅延描画」を行うため、大量のデータを効率的に表示できます。

**特徴**
- スクロール可能。
- 必要な部分だけを描画するため、パフォーマンスに優れる。
- 大量のデータを表示する場合に適している。

**使用例**
```kotlin
@Composable
fun LazyColumnExample() {
    LazyColumn(
        modifier = Modifier.fillMaxSize(),
        verticalArrangement = Arrangement.spacedBy(8.dp)
    ) {
        items(100) { index ->
            Text(text = "Item $index", modifier = Modifier.padding(16.dp))
        }
    }
}
```

### ColumnとLazyColumnの違い
| 特徴 | Column | LazyColumn |
| --- | --- | --- |
| 描画方法 | 子要素をすべて描画 | 必要な部分だけ遅延描画 |
| スクロール機能 | デフォルトではなし | デフォルトでスクロール可能 |
| 適した用途 | 少数の要素を並べる場合 | 大量のデータを表示する場合 |

## RowとLazyRowの違い

### Rowとは？
Rowは、横方向に子要素を並べるためのコンポーネントです。すべての子要素を一度に描画するため、少数の要素を並べる場合に適しています。

**特徴**
- 子要素を一度にすべて描画する。
- スクロール機能はデフォルトでは提供されない。
- 少数の要素を並べる場合に適している。

**使用例**
```kotlin
@Composable
fun RowExample() {
    Row(
        modifier = Modifier.fillMaxWidth(),
        horizontalArrangement = Arrangement.spacedBy(8.dp),
        verticalAlignment = Alignment.CenterVertically
    ) {
        repeat(10) { index ->
            Text(text = "Item $index", modifier = Modifier.padding(16.dp))
        }
    }
}
```

### LazyRowとは？
LazyRowは、横方向に子要素を並べるスクロール可能なコンポーネントです。必要な部分だけを描画する「遅延描画」を行うため、大量のデータを効率的に表示できます。

**特徴**
- スクロール可能。
- 必要な部分だけを描画するため、パフォーマンスに優れる。
- 大量のデータを表示する場合に適している。

**使用例**
```kotlin
@Composable
fun LazyRowExample() {
    LazyRow(
        modifier = Modifier.fillMaxWidth(),
        horizontalArrangement = Arrangement.spacedBy(8.dp)
    ) {
        items(100) { index ->
            Text(text = "Item $index", modifier = Modifier.padding(16.dp))
        }
    }
}
```

### RowとLazyRowの違い
| 特徴 | Row | LazyRow |
| --- | --- | --- |
| 描画方法 | 子要素をすべて描画 | 必要な部分だけ遅延描画 |
| スクロール機能 | デフォルトではなし | デフォルトでスクロール可能 |
| 適した用途 | 少数の要素を並べる場合 | 大量のデータを表示する場合 |

## まとめ
Jetpack ComposeのColumn/LazyColumnとRow/LazyRowは、それぞれ縦方向・横方向のレイアウトを構築するためのコンポーネントですが、描画方法やスクロール機能に違いがあります。用途に応じてこれらのコンポーネントを使い分けることで、効率的なUIを構築することができます。
個人的備忘録：error: pathspec 'develop' did not match が出たときの対応メモを整理してみた

## はじめに

Git を使ってチーム開発をしていると、「***リモートにはたくさんブランチがあるのに、ローカルで develop ブランチが見つからない・作業できない***」といった状況に出くわすことがあります。

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

この記事では、その理由と解決方法について解説します。

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

実際に開発現場で Git を使っていて、`main` 以外のブランチがローカルに表示されず戸惑うケースがありました。特に `develop` ブランチが見えないときの対処方法を整理するためにこの記事をまとめました。

## なぜローカルで develop ブランチが見えないのか？

Git は、クローンした時点では `main` ブランチしかローカルブランチとして作成されません。他のブランチ（たとえば `develop`）は、"リモート追跡ブランチ" として存在するだけで、ローカルにはまだ作成されていないのです。

つまり、**ローカルで develop ブランチを作業対象にするには、明示的に取得（fetch）し、チェックアウト（checkout）する必要があります。**

## 解決方法

### 1. リモートの情報を取得
```bash
git fetch origin
```

### 2. develop ブランチに切り替える（ローカルにない場合は作成）
```bash
git checkout develop
```
もし以下のようなエラーが出た場合：
```
error: pathspec 'develop' did not match any file(s) known to git
```
この場合はリモートの `origin/develop` を元にローカルに作成します：
```bash
git checkout -b develop origin/develop
```

## ブランチ一覧の確認コマンド
```bash
git branch        # ローカルブランチ一覧
git branch -r     # リモート追跡ブランチ一覧
git branch -a     # ローカル + リモートすべてのブランチ一覧
```

## まとめ

- Git は自動で全てのリモートブランチをローカルに作成するわけではない。
- `git fetch` + `git checkout -b develop origin/develop` の手順でローカルに develop ブランチを作成可能。
- `git branch -r` や `git branch -a` を使ってリモートブランチの存在を確認。
【学内向け？】skrsqlの環境構築 〜VirtualBoxアレルギーのあなたへ〜

list以外のコマンドが正常に作動しない問題を修正しました
以下の内容も追って修正しますが早く使いたい人は`bin/skrsql`のコメントを確認してください

# 概要
『スッキリわかるSQL入門』の演習用データベースをローカル環境で動作させることができる`skrsql`の環境構築について備忘録としてここに残します
なお、元のリポジトリは「第3版」用と記載されていますが、Makefileの中では「第4版」の演習SQLを参照するようになっております
参考：[miyabilink/sukkiri-sql4-codes](https://github.com/miyabilink/sukkiri-sql4-codes)

学校が用意した環境ではなく、自分で構築しようと考える時点である程度の技術的素養がある方が対象だと思うので、説明は簡潔に進めます
**本記事では Docker を使った構築方法には触れません**ので、その点はあしからず

追記：GitHub Insightsを見たら学内チャットにリンクを貼った日に、クローン数が20を超えていて、とても嬉しかった
この事実だけで、私は救われた気がします
「もしかしたら、ほんの少しでも誰かの役に立てたのかも」と勘違いできるだけで、幸福です
ありがとう、そしてなんかごめん
優しく殺して


# 使用リポジトリ
元リポジトリ（オリジナル）

https://github.com/densuke/skrsql

改良版（推奨）

https://github.com/yuu61/skrsql

※一部の不具合修正・Makefileの改善などを行ったフォークです。

# 必要なパッケージのインストール
ここでは`apt`を使いますが、他のディストリビューションでも基本的には対応可能です（たぶん）。

PostgreSQL,curl,make,git,unzipをインストール
```shell
sudo apt update
sudo apt install postgresql curl make git unzip -y
```
# リポジトリのクローン
以下のいずれかをクローンしてください。
```shell
# オリジナル
git clone https://github.com/densuke/skrsql.git

# 改良版（推奨）
git clone https://github.com/yuu61/skrsql.git
```
```shell
cd skrsql
```
# ディレクトリの作成とビルド
オリジナル版では`/usr/local/share/ssql`ディレクトリが存在しないため、エラーが出ることがあります。あらかじめ作成
自分はこれでうまくいった

```shell
sudo mkdir -p /usr/local/share/ssql
```
次に、自分のユーザーでPostgreSQLを操作できるよう、ユーザーを作成します（まだ作っていない場合）
```shell
sudo -u postgres createuser -s "$(whoami)"
```

その後、ビルドとインストールを行います。
```shell
~/skrsql$ make
~/skrsql$ sudo make install
```
# 動作確認
適当にDBを起動してみます。以下のように`list 1 1`コマンドを実行してみてください。
```shell
$ list 1 1
問題ファイル: pre_list0101.sql
NOTICE:  database "Can" does not exist, skipping
--- psqlを起動しています: \q と入力すれば終了です ---
カーソルキーは使用できません。テキストエディタ等でコマンドを貼り付けて実行してください。
psql (16.8 (Ubuntu 16.8-0ubuntu0.24.04.1))
Type "help" for help.

Can=>
```
無事に psql が立ち上がれば成功です。お疲れ様でした。

## 余談
**VirtualBOXよりHyper-VとかWSLの方がよくね？**
VirtualBoxよりも軽いし起動も速くて個人的にはおすすめです
参考：起動ボタン押下からコマンド実行可能になるまでの時間
|環境|起動時間|
|-|-|
|VirtualBox|65秒|
|Hyper-V|12秒|
|WSL|2秒|


Hyper-Vは機能の有効化が必要だったり若干ハードルが高いけど既存の仮想マシンを配布できたりするならそっちの方が有用かも...？
開発時には2つのリスクがあるらしい🫠

## はじめに

現在、アプリ開発者としてプロダクトの持続的な成長や

ユーザーへのコミットに寄与するためにも、

SDLC全体を見渡して開発をすること、

および、それにはテストに関する体系的な知識が必要だと考え、

それを効率良く学べるJSTQB Foundation Levelの資格試験の勉強をしており、

そこでのインプットを記事にしたいと思います。

今回はその中でも特に開発における2つのリスク、
<br>

* プロダクトリスク

* プロジェクトリスク
<br>

こちらに関する内容を記事にしたいと思います。

:::note info
プロダクトリスクの解説後にプロジェクトリスクを解説した方が分かりやすく、
また記憶にも残りやすくなると思い、この順番にいたしました。
:::

## プロダクトリスクとは？

プロダクトリスクとはソフトウェアなどの作業成果物が

クライアントやユーザー、ステークホルダーなどのニーズを満たさないように

実装されてしまうこと、およびそれに伴う開発上のリスクのことです。
<br>

「こんなものを頼んだ覚えはない💢」

<br>
こんな感じに怒られてしまうリスクもその一つです。

なお、これにはパフォーマンスなどの非機能要件に関するものも含まれ、
<br>

* 機能性

* 信頼性

* 使用性

* 性能効率性

* 保守性

* 移植性
<br>

上記のような**品質特性**によるものもプロダクトリスクに含まれます。

品質特性については以下の記事がわかりやすいのでご参考にしてください。

https://www.qbook.jp/column/1790.html


加えて、このようなリスクが顕在化した際に発生する以下のようなものも含まれます。
<br>

* ユーザーに募る不満感

* ヘルプデスクの負担増

* 収益、信頼、評判の損失

* メンテナンスコストの増加

* 死亡事例などの人身、人命を伴う事故の発生

* 第三者への損害賠償

* 刑事罰

<br>
セーフティークリティカルなものも含め、開発がうまくいかなかったことによる

ユーザー離れ、企業利益の減損やブランドの損失、企業の存亡にも関わりえるものが

プロダクトリスクに該当します。


## プロジェクトリスクとは？

一方、プロジェクトリスクとは先述のプロダクトリスクを生み出してしまうような

プロジェクトの発足時、および運営時のリスクになります。
<br>

先述のプロダクトリスクがプロダクトそのものに由来するリスクと捉えると、

こちらのプロジェクトリスクは

そんなプロダクトを作ってしまうようなチーム、組織、企業、慣習、風土などといった

よりハイレベルコンテキストなものに由来する開発上のリスクとも捉えられます。
<br>

このプロジェクトリスクを大別すると以下のようなものが含まれます。
<br>

* 組織的な問題

* 人の問題

* 技術的な問題

* サプライヤーの問題
<br>

開発費用の不足、人員不足、教育・技術不足などといった問題に加え、

SDLC後期での大幅な仕様変更やその繰り返し、要件定義の不徹底や甘い工数見積もり、

開発環境の未整備、レガシー化などによる開発の大幅な遅れ、

これに伴うメンバー間の不和などのコミュニケーション上の問題、

およびその負のスパイラル。。。

加えて、第三者に開発を依頼していたりSaaS製品などを使って開発をしている際は

それらによるプロダクトリスク、およびその被害といったことが含まれます。

## まとめ

今回はプロダクトそのものに由来するプロダクトリスク、

それを生み出すプロジェクトリスクについて記事にしてみました。

次回はこの中でもプロダクトリスクに関するリスクマネジメント活動である

* プロダクトリスク分析

* プロダクトリスクコントロール

こちらについて記事にしてみようと思います。

## 参照

https://jstqb.jp/syllabus.html

https://book.impress.co.jp/books/1124101026

https://sqripts.com/2023/09/19/69043/
【Reactアプリ100本ノック】05 Calc

## はじめに
ゆかっしゅです。
2021年に事務職からデザイナー/コーダーにジョブチェンジをし、現在はフロントエンドエンジニアにスキルアップするべく、モダンフロントエンドを学習しています。

ReactやTypeScriptの基礎学習は終了したのに、なかなか0から自分だけでアプリを作れないので手を動かすべく「Reactアプリ100本ノック」 に挑戦してみようと思います。

https://qiita.com/Sicut_study/items/c38b51907d18131b31f6

## Reactアプリ100本ノックルール
- 主要なライブラリやフレームワークはReactである必要がありますが、その他のツールやライブラリ（例: Redux, Next.js, Styled Componentsなど）を組み合わせて使用することは自由
- TypeScriptを利用する
- 要件をみたせばデザインなどは自由
- なるべくChatGPTなどのAIツールに頼らない（自分独自ルール）


## 05. Calc
![スクリーンショット 2025-04-30 133227.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4068307/2df8941e-f3dc-455c-b62b-d6cef842c7f3.png)


## 問題
簡易的な電卓を作成します

## 目的
計算機の機能を実装する過程で、条件付きレンダリングや複雑なビジネスロジックの処理に対する理解を深めることができます。
また、 様々な機能を持つ小さなコンポーントを作成し、それらを組み合わせて大きなアプリケーションを構築することで、効果的なコンポーネント設計とコードの再利用性について学習することができます

## 達成条件
- 四則演算（加算、減算、乗算、除算）が正確に行えること
- 数字と演算子の入力が可能で、計算結果が表示されること
- クリアボタンで入力と結果をリセットできること
- 連続した数字入力など計算ができないときはエラーを表示する

## 実際に解いてみた

### 利用技術
React(19.0.0)
TypeScript(5.0)
Next.js(15.3.1)
Tailwindcss(4.0)
jotai(2.12.3)
Vercel
mathjs(14.4.0)

解答時間:2.5時間

文字列とか数字とかの型指定に混乱しましたが、なんとか完成しました。
今回は文字列を計算してくれる`mathjs`という`JavaScript`のライブラリを使用しました。
これが今回とても便利だったため、`mathjs`を使用せずに作成していたらもっと時間かかってたと思います。

### リンク
https://react-app-100.vercel.app/

## おわりに
気が付けば三日坊主にはならなかったようでよかったです！
引き続き頑張ります。
一分でわかるウェブアプリケーションのユーザー管理のこれから

# 🧭 ユーザー管理の変遷
なんでもそうですが、これからを知るためにはまずは歴史を知る必要があります。

---

### 🕰️ 2000〜2010年代初め
ユーザー認証や権限管理のロジックをアプリケーションコード内に直接組み込む

![y2000-user-management.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2310/69ad8abd-a2ec-4a75-bc0a-82df60ce65ec.png)

---

### 🔐 2010年代〜2020年代初め
認証周りを外部サービス（IDaaS）に委ねる

![y2010-user-management.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2310/bac201d0-4728-4182-b608-2349eb2a0355.png)

---

### 🌐 現在
テナント管理やユーザーアカウント管理を外部サービスに委ねる

![y2020-user-management.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2310/d7d2dfdd-11fe-4a63-8f23-ebfa852f15a1.png)

---

## 🧩 これからのモジュール構成
こんな感じに収束していき、それぞれの箱の中で進化する流れを感じています

![saas-account-management-modules.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2310/7b5b8836-db8f-4eb2-852f-794dc143b94e.png)

🔴 赤のブロック: エンドユーザー寄りの機能群
🔵 青のブロック: ビジネス・開発寄りの機能群

---

📚 詳しくは元の記事をご参照ください！

👉 [ユーザー管理の変遷から読み解く、SaaSアカウント管理サービスの重要性](https://www.tc3.co.jp/what-is-saas-account-management)
Flutterのfor文が分かりにくすぎる話

# for文、読みにくすぎ問題

実務で苦しめられたので自分ではやらないように書いてみた
UIにfor文を使っていて酷いと感じたが、今回はロジック部分のサンプルで説明

### 読みにくいfor文のサンプル
```dart
List<String> visibleLabels = [];
for (var i = 0; i < items.length; i++) {
  if (items[i].isVisible) {
    visibleLabels.add(items[i].label);
  }
}
```
- サンプルコードなのでなんとなくわかるが、さらに長くなると理解できなくなる
- 条件分岐も実務だと増える可能性あり
- リストへの追加が追いにくい

処理が混ざり合っていてノイズが多く感じる

### 🤖 AIに聞いてみた
```dart
final visibleLabels = items
    .where((item) => item.isVisible)
    .map((item) => item.label)
    .toList();
```
変数減ったりメリットはあるが、実務だと処理が複雑になりがちなので無理に1行にしない方がよさそう


### ✅ 改善案
where + mapを段階的に使う
同じ処理を、意図がわかりやすくなるように役割ごとに分割

```dart
final visibleItems = items.where((item) => item.isVisible).toList();
final visibleLabels = visibleItems.map((item) => item.label).toList();
```

- whereで「表示対象だけ抽出」
- mapで「labelを取り出す」
- 変数名で処理の意味が明確に


### ありがちな“地獄for文”の例
```dart
List<String> results = [];
for (int i = 0; i < items.length; i++) {
  if (items[i].flag1) {
    if (!items[i].flag2) {
      results.add(items[i].label.toUpperCase());
    }
  }
}
```
- 条件がネストして、読んだ瞬間にため息が出るコード

### ✨ 改善案
```dart
final filteredItems = items
    .where((item) => item.flag1 && !item.flag2)
    .toList();

final upperCaseLabels = filteredItems
    .map((item) => item.label.toUpperCase())
    .toList();
```
処理の意図が一目でわかるように変更
※条件：flag1かつ!flag2(実務ではちゃんと書かないといけないがサンプルなので)
→必要に応じて変数に入れてあげるとさらにわかりやすく



## まとめ

条件で絞るときは `where()`、加工では`map()`を使うと◎

`forEach`や最悪`for(final item in items)`を使いたい

初心者やチーム開発では、処理を分けて書く方が圧倒的にわかりやすい

「コードを短く書く」<「意図がすぐに伝わるコードを書く」ことを心がけたい


## おまけと感想
filterはDartにはなく、whereがその代わり(慣れるまで時間かかりそう)

サンプルコードも実務のコードでも見かけたが、List.addって途中で処理追いにくいので使いたくない
DVA-C02 を合格したお話

4月の中頃にDVA-C02を合格しました！！っていうお話です。

# 当時のクラウド知識について
3月の中頃にSAAを取得しました。

# 勉強方法について
勉強期間：2習慣ほど
勉強時間：1時間/日

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

# Udemy
以下を使用して、勉強しました。
1.[【DVA-C02版】AWS 認定ディベロッパーアソシエイト アソシエイト試験対策問題集](https://www.udemy.com/course/dva-c02aws/?couponCode=2B772C03EBAA2856F8D3)

2.[【公式ドキュメント連携・全範囲カバー】AWS DVA-C02日本語問題集 260問（詳細解説付き）](https://www.udemy.com/share/10cqtl3@QrN_FxqMK_48qbXVzPlf4NgqgGYRO-BplmafgMIcg0spb08_GQN4k26e6X0tDIc9/)

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

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

# 試験結果
853点で合格しました！(720/1000点が合格ライン)

# 次の目標
次は、AWS Certified SysOps Administrator - Associate (SOA-C02)を狙っていきたいと思ってます。
JMXメトリクスをCloudWatch Observabilityアドオンで収集する

## はじめに

AWSのElastic Kubernetes Service (EKS)を使用している場合、アプリケーションのパフォーマンスを監視することも重要です。特にJavaアプリケーションの場合、JMX（Java Management Extensions）メトリクスは貴重な情報源となります。この記事では、Amazon CloudWatch Observabilityアドオンを使用したJMXメトリクスの収集方法について説明します。

## 前提条件

- AWSアカウントとEKSクラスターがセットアップされていること
- 基本的なKubernetesの知識
- CloudWatchの基本的な理解

## 設定手順

### 1. Amazon CloudWatch Observabilityアドオンのインストール

まず、EKSクラスターにAmazon CloudWatch Observabilityアドオンをインストールする必要があります。このアドオンは、CloudWatchエージェントを利用してCloudWatch Application Signalsで使用するアプリケーションのメトリクスとトレースをデフォルトで収集します。アドオンのインストール方法はAWS公式ドキュメントの[Amazon CloudWatch Observability EKS アドオンのクイックスタート](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-EKS-addon.html)を参照してください。

ただし、注意点としてこのアドオンをインストールしただけではJMXメトリクスの収集は行われません。

### 2. JMXメトリクス収集の有効化

AWS公式ドキュメントの[独自のサービスを使用して Amazon EKS クラスターで Application Signals を有効にする](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Signals-Enable-EKS-Console.html)にある通り、JMXメトリクスを収集するには、ワークロード（Pod）またはNamespaceのannotationsに特定の設定を追加する必要があります。

具体的には以下のannotationを追加します。

```yaml
instrumentation.opentelemetry.io/inject-java: "true"
```

ワークロード単位で設定する場合、DeploymentではなくPodのannotationsに追加する必要があります。以下は、Deploymentの設定例です。

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: java-app
  name: java-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: java-app
  template:
    metadata:
      labels:
        app: java-app
      annotations:
        instrumentation.opentelemetry.io/inject-java: "true"
    spec:
      containers:
      - image: ryotamori/jmx-agent-example:v2
        name: jmx-agent-example
```

## ワークロード側のJMXメトリクス公開方法

JMXメトリクスの公開方法には主に2つあります。

1. JMXエクスポーター
2. RMI（Remote Method Invocation）

どちらの方法でメトリクスを公開しても、Container Insightsによって収集されることを確認しています。

## メトリクスの確認方法

設定が完了すると、CloudWatchメトリクスのカスタム名前空間に`ApplicationSignals`が追加されます。ここで収集されたJMXメトリクスを確認することができます。

## Application Signalsで収集されるメトリクス

AWS公式ドキュメントの[Application Signals によって収集されるメトリクス](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/AppSignals-MetricsCollected.html#AppSignals-RuntimeMetrics)に、詳細な情報が記載されています。

また、メトリクスのカスタマイズ方法については、[CloudWatch Application Signals を有効にする](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Application_Signals.html)のドキュメントを参照してください。

## 不要なメトリクスの抑止

デフォルトでは、neuronやdcgm-exporterなどのメトリクスも収集されますが、これらを使用していない場合、CloudWatch Agentのログに継続的に警告が出力されます。

これらの不要なメトリクスを抑止するには、アドオンの高度な設定でCloudWatch Agentの設定を変更します。以下は、Application Signalsを有効にしつつ、高速コンピューティングメトリクスを抑止する設定例です：

```json
{
  "agent": {
    "config": {
      "logs": {
        "metrics_collected": {
          "application_signals": {},
          "kubernetes": {
            "enhanced_container_insights": true,
            "accelerated_compute_metrics": false
          }
        }
      }
    }
  }
}
```

この設定方法の詳細は、[高速コンピューティングメトリクスの収集をオプトアウトする](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Observability-EKS-addon.html#CloudWatch-Observability-EKS-addon-OptOutAccelerated)のドキュメントを参照してください。
[🔰][備忘録]FastAPIは.envをモジュール使わないと読み込んでくれないらしい

## 状況
APIキーとかを.envに入れて環境変数として取り出そうとしてました。FastAPIを挟まずにテストでプログラムを実行した時はちゃんとやりたいことができていたのに、FastAPI使ってAPI化すると
`Internal Server Error.`
*は？*
`Internal Server Error.`
*ha?*

## 解決方法
`from dotenv import load_dotenv`
で
`load_dotenv()`
これでいつも通り`os.getenv("hogehoge")`で呼び出せるようになるそうです。
よかったね😊

## 結論
ちゃんとドキュメント読んで検索しまくってAIに聞いていこう！
個人的備忘録：Next.jsの静的出力ができるまでに行ったコマンド一覧まとめ

## はじめに

Next.js を使った開発の中で、ESLintエラーによるビルド失敗や、静的ファイル出力までの一連の作業を行いました。

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

ここでは、忘れがちなコマンド履歴を備忘録としてまとめておきます。

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

Next.js 15系のビルドにおいて、環境変数 `NEXTJS_IGNORE_ESLINT=true` が効かず、ESLintのエラーでビルドが止まるという現象に直面。

その後、コードを修正してビルドを成功させたため、今後のためにも一連の作業履歴をまとめておこうと思いました。

## 実行したコマンド一覧

```bash
# 1. 必要なパッケージをインストール
npm install

# 2. Next.js アプリのビルドを試みる（最初は ESLint エラーで失敗）
npm run build

# 3. 該当のコードファイルを編集（不要な import を削除など）
vi src/app/page.tsx

# 4. 再度ビルドを実行（成功）
npm run build

# 5. カレントディレクトリのファイルを確認
ll
```

生成された `out/` ディレクトリに静的ファイルが格納され、静的エクスポートが完了しました。

（今後必要に応じて）
```bash
# 静的ファイルをS3へアップロードする例
aws s3 sync ./out s3://your-bucket-name
```

**参考記事**

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

## まとめ

- `NEXTJS_IGNORE_ESLINT=true` は Next.js 15系では効かない可能性があるため、ESLintエラーは素直にコード修正で対応するのが最速。
- `vi` などで対象ファイルの不要な import を削除するだけでもビルド成功するケースがある。
- 今後は `out/` ディレクトリを S3 などにアップロードしてホスティングする流れへ進む。

本記録は、自分自身の備忘録としての意味合いも兼ねていますので、ご了承ください...！
React + Rails初心者の歩み 〜はじめに〜

# はじめに
新たな言語学習のためprogateを使ってReactとRailsを勉強し始めました。
基本的なことはなんとなーく理解できましたが、
そこ止まりで行き詰まっていたので、
ChatGPTに「GPTえもーん、初級者、中級者、上級者用の問題集を作ってぇー」とお願いして作ってもらいましたので、内容に沿って勉強する様を「赤裸々」に「酸いも甘いも」書き記していきたいと思います。
（あと自分の忘備録用に）

## GPTへの指示内容
まずGPTえもんには以下のようにお願いしました。
>私はReact、Rails（API）初級者です。 開発可能なレベルの初級者、中級者、上級者用の問題集を作成してください。
>
よくわかんないけどいい感じの問題集を作ってもらいました！
長いので記事分ました。

### 問題集

https://qiita.com/tukaji/items/649d7dc3e0d43d597250

https://qiita.com/tukaji/items/a0c239409eebbd27f41d

https://qiita.com/tukaji/items/e925c5b958c6b55b22e0

さらに「一緒に進めるロードマップ」作っちゃうー？とか、
「超具体版タスク表」作っちゃうー？とか、
具体的な内容の提案をしてくれて、
最終的には「30日間のタスク表」を作ってくれました。
なのでこれに沿って問題集を進めていきます。

## GPTからのポイントアドバイス
・1日30分〜1時間程度でOK
・途中で「理解が浅い」と感じたら1日伸ばしてOK
・毎日動かす「手を動かす学習」が重要！

## まとめ
いろいろ提案してくれてほんとに助かるなぁ。
さらに具体的に進められるような提案をしてくれていましたが、
一旦はここまでにしてあとは自力で進めていこうかと。
「とにかく毎日手を動かせ」という言葉を胸に励んでいきたいと思います。

::: note info
記事は忘備録用が主な目的なので、
時間がある時にまとめてアップしていこうかと思います。
毎日アップしていないからといって、
「こいつサボってんな。」とは思わないでね。
:::

参考記事

https://qiita.com/tak001/items/7605f0be7b424118e5a5
React + Rails初心者の歩み 〜問題集：上級編〜

# 【上級編（開発可能な上級者向け）】
目標：トラブル対応、パフォーマンス、UI/UX改善まで意識する。

## React（Viteベース）

<dl>
<dt>1. 最適化対応（useMemo、useCallback）を使って不要な再レンダリングを防いでください。</dt>
</dl>
<dl>
<dt>2. リアルタイムバリデーション付きフォームを作成してください。</dt>
<dd>例：パスワードが8文字未満ならリアルタイムでエラーを表示。</dd>
</dl>
<dl>
<dt>3. 無限スクロール（スクロールすると自動で次のデータをロード）を実装してください。</dt>
</dl>
<dl>
<dt>4. エラーハンドリングをコンポーネント化して、どのAPIエラーも共通表示できる仕組みを作ってください。</dt>
</dl>
<dl>

## Rails（APIモード）
<dl>
<dt>1. N+1問題を防ぐため、includesで関連データをまとめて取得してください。</dt>
</dl>
<dl>
<dt>2. APIレスポンスをキャッシュ（例：Rails.cache）して高速化してください。</dt>
</dl>
<dl>
<dt>3. RSpecでAPIテストを書く。</dt>
<dd>正常系・異常系・認証エラー系までカバーする。</dd>
</dl>
<dl>
<dt>4. 管理者ユーザーだけが使えるAPIエンドポイント（例えば、投稿削除機能）を作ってください。</dt>
</dl>
【無料で使える】公共API活用のすすめ - データ分析！

最近「何かプログラミングで作りたいけど、面白いデータがない...」と思ったことはありませんか？

実は、**無料で使える公共API**がたくさんあるんです！
今回はそんな公共APIの魅力と、次回詳しく解説する「ミラサポplus API」について簡単に紹介します。

## 公共APIって何がいいの？

プログラミング学習で「ToDoアプリ」や「メモアプリ」は作ったけど、もっと実践的なものに挑戦したい...そんな方におすすめなのが**公共API**です。

公共APIの魅力はこんなところ：

- **無料**で使えるものが多い
- **実際のデータ**が扱える
- **社会的意義**のあるプロジェクトに挑戦できる
- **ポートフォリオ**に役立つ

## 日本の公共API、実はけっこうある！

日本でも、国や自治体、公的機関が提供するAPIは増えています。代表的なものをいくつか紹介します：

### 1. e-Stat API
総務省統計局が提供する日本の統計データ。人口統計から経済指標まで様々なデータが取得できます。
```python
# e-Stat APIの呼び出し例
import requests

url = "https://api.e-stat.go.jp/rest/3.0/app/json/getStatsData"
params = {
    "appId": "あなたのアプリケーションID",
    "statsDataId": "0003348423",  # 住民基本台帳人口移動報告
    "cdCat01": "000",
    "cdArea": "00000"
}

response = requests.get(url, params=params)
data = response.json()
print(data)
```

### 2. 気象庁API
気象庁が提供する天気予報や警報のデータが取得できます。
### 3. 国立国会図書館サーチAPI
書籍情報や所蔵情報を検索できるAPIです。

その他のAPIは以下をご覧ください。
[行政API情報一覧](https://api-catalog.e-gov.go.jp/info/ja/apicatalog/list)

### 次回紹介！中小企業庁「ミラサポplus API」が熱い！
そして、次回の記事で詳しく解説するのが中小企業庁の「**ミラサポplus API**」です。

ミラサポplusとは、中小企業・小規模事業者向けの支援サイトで、そのAPIを使うと中小企業の成功事例に関するデータが取得できます。

どんなことができるか、ちょっとだけお見せしましょう

```bash
curl -X GET "https://mirasapo-plus.go.jp/jirei-api/case_studies?keywords=デジタル化&limit=3" \
  -H "Accept: application/json"
```
この呼び出しで、「デジタル化」に関する中小企業の事例データが取得できます。

5月に公開予定の次回記事では、このミラサポplus APIを使って
- 全ての事例データを取得する方法
- PostgreSQLデータベースに保存する仕組み
- Docker環境の構築方法
- データ分析の基礎

など、実践的な内容を解説します！

「APIからデータを取得して分析する」という**実務でもよく使うスキル**が身につく内容になっていますので、ぜひお楽しみに！

# まとめ

- 公共APIは無料で実践的なプログラミング経験が積める宝庫
- 日本にも様々な公共APIがある
- 次回5月には「ミラサポplus API」を使った実践的な記事を公開予定

初心者からステップアップしたい方、ポートフォリオ作りに悩んでいる方、実データを使った分析に興味がある方...次回の記事をお見逃しなく！
「で、何がしたいんだっけ？」と言われない相談フォーマット

相談や依頼をしようとして、「で、何がしたいんだっけ？」と言われること、ありませんか。
以下のフォーマットにしてから、そう言われる機会が減った気がします。

# 1.（場合によっては省く）自己紹介
他部署の方に頼む時にあった方がいいかもしれない項目。
とはいえ、社内チャットならそう長々と書く必要もない（読む気が失せるので省略できるならした方がいい）というのが個人の意見です。

```
お疲れ様です。XX部門のパン派です。
```


# 2.相談の超ざっくりとした概要
**「超ざっくり」** であることが大事です。
ここで言う「超ざっくり」は、行動ベースで何をするのか程度の粗さです。
```
〇：Hoge機能について質問させてください。
〇：Fugaクラスについてわからない点がありペア作業お願いしたいです。

×：Hoge機能のhogehogeが呼び出しているメソッドについて、今回の修正箇所が該当していないか質問したいです。
×：Fugaクラスのfugafugaメソッドについて、piyoという仮説が合っているかわからず、ペア作業で確かめて頂きたいです。
```
相談相手が一番気にしているのは、**「で、これは何をしたらいいの？」** ということです。
ざっくり、「相談」「ペア作業」「レビュー」など、名詞1語で表せる程度に「相手が何をしたらいいのか」が伝わる概要を先に伝えます。
そこまでかしこまる必要が無い相手なら体言止めにしてしまうのもアリだと思います。

```
〇：Hoge機能の質問
〇：Fugaクラスペア作業依頼
```


# 3.期限
次に相談相手が気にしているのは「で、いつまでにやればいいの？」です。
内容がどうであれ手を付けられないタイミングもありますから、最初に表明してしまいます。

```
■期限
今週の金曜をめどにご回答ください。難しいようであればご連絡ください。
```

# 4.相談内容
2よりは詳細に相談内容を書きます。
とはいえここもまだ概要です。あくまで「相談したい内容」だけを書くにとどめ、相談の背景、既に調査したこと、疑問点などはここには書きません。

```
■質問
Hoge機能のhogehogeが呼び出しているメソッドについて、今回の修正箇所が該当していないか質問したいです。

■ペア作業依頼
Fugaクラスのfugafugaメソッドについて、piyoという仮説が合っているかわからず、
ペア作業で確かめて頂きたいです。
```

# 5.背景
なぜこの依頼をするに至ったかです。
重要なのは、**ここに書く内容は「もし相談相手が読み飛ばしていたとしても問題ない内容」** にすることです。
**もし背景まで読んでもらわないと不安と思うのであれば、それは（自覚がないだけで）単なる背景情報ではなく相談内容の一つということになります。**

## 例：料理上手の友人に本格カレーの作り方を相談する
```
A「本格カレーを今度作ろうと思うんだけど、材料何買ったらいい？」
B「まずはスパイスからかなあ」
A「あでも今回姉夫婦を招くんだけど。姉夫婦は両方ともカレーが好きでさ。
　でも子どもがまだ小さいからあんまり辛いのは避けたくて」
B「あ、そういうこと？それならそもそも本格カレーとかじゃなくて普通のカレーにしたらいいんじゃない？」
A「やっぱそうかな？とはいえグルメな人たちだから、市販のカレーそのままは避けたいんだよね」
```

本来「本格カレーの作り方」を相談するうえで、「なぜ本格カレーを作りたいのか（背景）」は重要ではないはずです。
ところが、「そもそも本格カレーを作ることが適切なのかどうかも知りたい」という無意識の相談事項があるので、さも背景情報のように相談し、結果話もそちらに流れています。

---
背景を読み飛ばされたら困ると思う時、それは背景ではありません。
そう思った時点で、相談内容に付け加えるか、そもそもの相談内容が正しいのかを見直しましょう。

```
■背景
Hoge機能のhogeクラスに修正をするにあたり、hogehogeに影響がないか確かめたい
```

:::note
例外的に、相談内容が超複雑で背景情報を全て説明しないとそもそも相談自体が伝わらない場合があります。
そういう場合は潔く2の段階で「背景が複雑なのでこちらの説明一読頂けますでしょうか」などと前置きした上で長く説明を書く他ないでしょう。
とはいえ文面は長くなればなるだけ相手の読む気概を削ぐので、本当に全て説明しなければ伝わらない場合の最後の手段にするに越したことはありません。
:::
# 6.既にやったこと
全て丸投げの相談というのはそうないでしょう（というかやらない方がいい）。
関係ありそうで既にやったことを箇条書きで並べます。
ここで見当違いな調査・作業をしていたとしても特に問題ありません。「既にやったこと」という事実を並べているだけで、関係あるかないかはどうでもいい話です。
**相談相手が「その内容なら観点はこれとこれだと思うけど、これってもう調べたのかな」と思って文面を辿ったときに見つけられることが重要です。**

```
■既に調査したこと
・hogehogeは今回の修正箇所のメソッドを呼び出していない
```

# 7.（あれば）疑問点・不安な点
「直接関係あるかは不明だが変な挙動をしている」とか、「調べたは調べたがそもそも調べ方が合っているか不安」といった場合があります。
そういった補足をしておきます。

```
■疑問点
・エディタの機能上の確認では今回の修正箇所は呼び出してはいないのですが、
　コメントアウトに「hogehogeへの影響確認」とあり、本当に呼びだしていないのか？と思っています
 ```

# まとめてみる

```
お疲れ様です。XX部門のパン派です。
Hoge機能について質問させてください。
■期限
今週の金曜をめどにご回答ください。難しいようであればご連絡ください。
■質問
Hoge機能のhogehogeが呼び出しているメソッドについて、今回の修正箇所が該当していないか質問したいです。
■背景
Hoge機能のhogeクラスに修正をするにあたり、hogehogeに影響がないか確かめたい
■既に調査したこと
・hogehogeは今回の修正箇所のメソッドを呼び出していない
■疑問点
・エディタの機能上の確認では今回の修正箇所は呼び出してはいないのですが、
　コメントアウトに「hogehogeへの影響確認」とあり、本当に呼びだしていないのか？と思っています
 ```
find, find_by, find_by!, whereメソッド　の違い

| メソッド  | 検索キー	 | 検索結果 | エラー時の戻り値 | その他                             | 
| --------- | --------- | -------- | ---------------- | ---------------------------------- | 
| find	     | ID        | 単数のみ     | 例外クラスのインスタンス	      |                                    | 
| find_by	  | 属性      | 単数のみ     | nil	             | データがない場合も考えられる時使う | 
| find_by!	 | 属性      | 単数のみ     | 例外クラスのインスタンス	      |                                    | 
| where     | 属性      | 単数複数     | 例外クラスのインスタンス	      |                                    |
GitDiagram：リポジトリのコードやファイルを図解化し、全体を把握しやすくする

こんにちは、ぱきらと申します。
プログラミングスクール『RUNTEQ』を卒業したばかりの初学者です。
　
今回は [**GitDiagram**](https://gitdiagram.com/) というサービスで
**Github上のリポジトリのコードやファイルを図解化し、全体を把握しやすくする**お話を記載します。

https://gitdiagram.com/


# 使い方
上記の公式リンクからアクセスし、入力フォームにリポジトリのURLを入力しても使えますが
もっと簡単な機能があるので、そちらを紹介します！
　
<font color="purple">
**ブラウザ上で`全体を把握したいリポジトリのURL`を以下のように書き換え、アクセスするだけ**
</font>
- `github`の部分を、`gitdiagram`に書き換えるだけ！
    ```diff
    - https://github.com/アカウント名/リポジトリ名
    + https://gitdiagram.com/アカウント名/リポジトリ名
    ```
  ![Image from Gyazo](https://i.gyazo.com/d0a7e46258de49b5954e96721dd5b2de.gif)
____
# 機能

### 1. 図解を拡大・カスタマイズ・ダウンロードができる！
![Image from Gyazo](https://i.gyazo.com/00628cefd5028a26be275fc06c074eb8.gif)
入力フォームの下にある機能も便利！！

<font color="purple">

- `Enable Zoom`(右端)をONにすると、マウスホイールで**図解を拡大・縮小**が可能に
- `Customize Diagram`(左端)で、**図解をカスタマイズ**
- `Export Diagram`(中央)で、**図解をPNGデータでダウンロード**・**Mermaid.jsコードでコピー**ができる
</font>

　
### 2. 図解化したファイルのコードにアクセスできる！
<font color="purple">

図解化されたファイル構成を、**クリックするとそのファイルのコードにアクセスしてくれる**
</font>

- 例えば、`Social Sharig(X /Twitter)`をクリックすると  
  リポジトリの X シェアボタンのビューファイル(`app/views/shared/_xshare_button.html.erb`)にアクセスできた！
  ![Image from Gyazo](https://i.gyazo.com/551e07b934113d7c748f8d700fd10459.gif)
　

# 終わりに
今回は [**GitDiagram**](https://gitdiagram.com/) というサービスで
**Github上のリポジトリのコードやファイルを図解化し、全体を把握しやすくする**お話を、**簡単に**記載しました！

https://gitdiagram.com/

<font color="purple">

自分や誰かの**リポジトリの全体像が把握しやすい**ですし
**図解化したPNGデータを、READMEに貼り付ける**のもアリな気がしました！
</font>
　 
他にもまだまだ使い方や機能があるとは思いますが！
今回はこの辺で！
オススメの使い方や機能があれば、ぜひコメント欄で教えてください☺️
最後まで読んでいただき、ありがとうございました。
shadcn/ui エンジニア向けUI開発効率化ガイド

# shadcn/uiを理解しよう
https://ui.shadcn.com/

## 1. 技術的基盤

shadcn/uiコンポーネントは、以下の2つを組み合わせて実現されています。

- **Radix UIプリミティブ**: アクセシビリティとコア機能を担うヘッドレスUIプロバイダー。機能的な骨組みを提供します。
- **Tailwind CSS**: ユーティリティファーストのアプローチで、柔軟かつ効率的なスタイリングを実現します。

## 2. インストールとプロジェクト設定

shadcn/uiの導入は専用CLIで行います。以下ではNext.jsとViteの両方での手順を解説します。

### 2.1 CLIコマンドの活用

- **init**
  - 目的: 新規または既存プロジェクトでshadcn/uiを初期化
  - 実行例:
    ```bash
    pnpm dlx shadcn@latest init
    # npm, yarn, bunなどでも同様
    ```
  - 主なオプション:
    - `-y`: 確認スキップ
    - `-d`: デフォルト設定使用
    - `-c <path>`: 作業ディレクトリ指定
    - `--css-variables`: CSS変数の使用有無

- **add**
  - 目的: 特定コンポーネントのソースコードと依存関係をプロジェクトにコピー
  - 実行例:
    ```bash
    pnpm dlx shadcn@latest add button card
    ```
  - 主なオプション:
    - `-y`: 確認スキップ
    - `-o`: 既存ファイル上書き
    - `-a`: 全コンポーネント追加
    - `-p <path>`: 追加先パス指定

- **components.json**
  - 中心設定ファイル。コンポーネントスタイル、Tailwind設定、RSCの有無、TSX/JS選択、エイリアスを管理。

- **build**
  - レジストリJSON生成用。日常的な使用頻度は低い。

### 2.2 Next.jsでの統合

1. `create-next-app`でプロジェクト作成または既存プロジェクトを準備。
2. `pnpm dlx shadcn@latest init` を実行し、プロンプトに従う。
3. 必要なコンポーネントを追加:
   ```bash
   pnpm dlx shadcn@latest add button
   ```
4. コンポーネントをインポートして使用:
   ```tsx
   import { Button } from "@/components/ui/button"
   ```

### 2.3 Viteでの統合

1. `pnpm create vite@latest` でReact+TypeScriptテンプレートを選択。
2. Tailwind CSSとViteプラグインをインストールし、`src/index.css`を設定。
3. `tsconfig.json`と`tsconfig.app.json`で`baseUrl`と`paths`を設定。
4. 必要な型定義を追加し、`vite.config.ts`でパスエイリアスを設定。
5. `pnpm dlx shadcn@latest init` を実行。
6. コンポーネントを追加し、インポートして使用。

## 3. カスタマイズとテーマ設定

コンポーネントの外観はTailwindユーティリティまたはCSS変数で調整できます。

### 3.1 CSS変数アプローチ（推奨）

1. `components.json`で`
   ```json
   {
     "tailwind": {
       "cssVariables": true
     }
   }
   ```
2. `app/globals.css`にて:
   ```css
   :root {
     --background: 255 255 255;
     --foreground: 0 0 0;
   }
   .dark {
     --background: 0 0 0;
     --foreground: 255 255 255;
   }
   ```
3. コンポーネント内部で変数を使用:
   ```tsx
   <div className="bg-[rgb:var(--background)] text-[rgb:var(--foreground)]">...
   ```

### 3.2 ユーティリティクラスアプローチ

`components.json`で`cssVariables: false`に設定し、直接Tailwindクラスを適用:
```tsx
<div className="bg-zinc-950 dark:bg-white text-white dark:text-black">...
```

## 4. 機能拡張：エコシステム

### 4.1 公式拡張

- **Blocks**: ログインフォームやダッシュボードなどのプリセットレイアウト
- **Charts**: Rechartsを基盤に、shadcn/uiテーマで統一されたチャートコンポーネント

### 4.2 コミュニティコンポーネント

- **Awesome Shadcn UI**: プラグインやボイラープレートのリスト
- **拡張例**:
  - 日付ピッカー／日付範囲ピッカー
  - OTP入力、タグ入力、WYSIWYGエディタなど
- **ライブラリ例**: `shadcn-extension`, `aceternity-ui`

## 5. デザインとコードの橋渡し：Figma連携

- **Figmaキット**: Default/New Yorkテーマを反映した公式・サードパーティ製キット
- デザインと実装の一貫性を高め、開発とデザインチームのコラボレーションを促進

## 6. 結論：戦略的な選択

### 選択すべき理由

- 深いカスタマイズが最優先のプロジェクト
- コンポーネントの実装を直接理解・変更したい
- ブラックボックス化を避け、コード所有権を重視

### 代替案検討の理由

- 最小限のスタイリングで迅速に開発したい → **MUI** など事前スタイル付きライブラリ
- 確立されたデザインシステムへの準拠が必要
- パッケージマネージャー更新による自動メンテナンスを好む
個人的備忘録：NEXTJS_IGNORE_ESLINTが効かずビルドに失敗したので調べてみた

## はじめに
Next.jsでビルド時にESLintの警告を無視するために `NEXTJS_IGNORE_ESLINT=true` を使ったが、Next.js 15ではこの方法がうまく効かず、結果としてビルドが止まってしまうという事象に遭遇しました。

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

最終的にはコード修正で対応し、無事に静的ファイル（out/）の生成に成功しました。

## 書こうと思ったきっかけ
以下のように、環境変数を使ってESLintを無視してビルドしようとしました：

```bash
NEXTJS_IGNORE_ESLINT=true npm run build
```

しかし実行結果は次の通り：

```bash
✓ Compiled successfully
Failed to compile.

./src/app/page.tsx
4:8  Error: 'Image' is defined but never used.  @typescript-eslint/no-unused-vars
```

エラーの内容は `Image` を import しているものの、実際には使用していないことに起因する `@typescript-eslint/no-unused-vars` みたいでした。

## 解決手順
以下の1行を削除することで対応しました：

```tsx
import Image from "next/image";
```

### 修正手順まとめ
1. エディターで `src/app/page.tsx` を開く
2. 未使用の `import Image from "next/image";` を削除
3. 保存して再ビルド：

```bash
npm run build
```

その結果、今度は `out/` フォルダが正常に生成されました：

```bash
ls out/
_next          404.html       favicon.ico    globe.svg      index.txt      next.svg       poem-auth      vercel.svg
404            admin-register file.svg       index.html     login          poem-admin     register       window.svg
```

## まとめ
- Next.js 15では `NEXTJS_IGNORE_ESLINT=true` が効かないケースがある
- ESLint警告でビルドが止まる場合は、未使用のimportを削除するのが最も確実
- 最終的に `out/` フォルダが生成されれば、S3などへの静的デプロイが可能になる

コード修正という小さな対応で、最終的なデプロイまで一気に進めることができたので、今後もESLint警告には早めに対処していきたいと感じたケースでした...！