OmniAICreator/Qiita-1.07M huggingface dataset:
🧠ChatGPT × QA業務：観点出し・テストケース作成を自動化してみた話

# 🧠ChatGPT × QA業務：観点出し・テストケース作成を自動化してみた話

## はじめに

最近、「ChatGPTで観点出しできる？」という会話がQAチーム内で出たので、実際にやってみました。  
この記事では、ChatGPT（GPT-4）を使って以下を**どこまで自動化できるか**を検証しています：

- 📌 仕様書からテスト観点の抽出  
- 📌 テスト観点からテストケースの生成  
- 📌 出力の精度と限界

### 想定読者

- QA業務の効率化に興味のある方  
- LLMをQA業務で活用したいけど、どう始めたらいいか分からない方  
- 実際に使ってみた例が知りたい方

---

## 背景：なぜChatGPTなのか？

テスト観点出しは属人化しやすく、特にプロジェクト初期は時間も取られがちです。

- 🧠 ドキュメントの理解力  
- 🧠 抽象から具体への分解  
- 🧠 柔軟な出力形式対応  

こうした点で、ChatGPTの能力がかなりハマるのでは？と考えました。

---

## 今回やったこと（ざっくり）

1. 架空の要件（ECサイトの商品購入機能）を用意  
2. ChatGPTにプロンプトで観点出しさせる  
3. さらにテストケースを作らせる  
4. QAの目線でレビューして精度を評価する

---

## 準備：仕様書（例）

以下のような仕様を想定しました：

> ECサイトにおいて、ユーザーは商品をカートに追加し、購入ボタンを押すとクレジットカードで決済できる。決済後は購入完了画面が表示され、登録メールアドレスに確認メールが送信される。商品は在庫がない場合はカートに入れることができない。

---

## Step 1：観点出しプロンプト

以下の機能仕様からテスト観点を洗い出してください。
観点はカテゴリごとに分類し、「入力値」「画面表示」「エラーハンドリング」などの切り口で整理してください。

【仕様】
ECサイトにおいて、ユーザーは商品をカートに追加し、購入ボタンを押すとクレジットカードで決済できる。決済後は購入完了画面が表示され、登録メールアドレスに確認メールが送信される。商品は在庫がない場合はカートに入れることができない。

---

## Step 2：ChatGPTの出力（観点）

### 📥 入力値
商品を選択してカートに追加できるか

クレジットカード番号が正しい形式で入力できるか

有効期限やセキュリティコードの形式チェック

### 🖥️ 画面表示
カート追加後に正しく商品が表示されるか

決済後に購入完了画面が表示されるか

在庫が0の商品は「在庫なし」と表示されているか

### ⚠️ エラーハンドリング
無効なカード番号を入力した場合にエラーメッセージが表示されるか

通信エラー時のリトライ表示

購入ボタンを連打した際の二重決済防止

### 📧 通知
購入完了時にメールが送信されるか

メール内容に購入情報が正しく記載されているか


---

## Step 3：テストケース生成プロンプト

上記の観点を元に、1観点あたり1〜2件のテストケースを日本語で書いてください。
以下のようなフォーマットでお願いします：

【観点】
...
【テストケース】

〇〇な条件で、△△を行ったとき、□□が表示されること


---

## Step 4：ChatGPTの出力（テストケース）

【観点】
商品を選択してカートに追加できるか

【テストケース】

任意の商品を選択し、「カートに追加」ボタンをクリックすると、カート内に商品が表示されること

【観点】
無効なカード番号を入力した場合にエラーメッセージが表示されるか

【テストケース】

クレジットカード番号に「1234」を入力して決済ボタンを押したとき、「カード番号が正しくありません」というエラーメッセージが表示されること

【観点】
購入完了時にメールが送信されるか

【テストケース】

正常に決済が完了した後、登録済みメールアドレス宛に購入確認メールが届くこと


---

## 評価：実際どうだった？

| 項目 | 評価 | コメント |
|------|------|----------|
| 精度 | ★★★★☆ | 想定していた観点の8割は拾えていた |
| 再現性 | ★★★★☆ | プロンプトを整えると安定して出力される |
| カスタマイズ性 | ★★★★★ | 出力形式・粒度はプロンプト次第で柔軟に調整可能 |
| 注意点 | ★★★☆☆ | ユーザー視点・ネガティブケースがやや弱い傾向あり |

---

## よかったこと／課題

### 👍 よかった点

- 観点の初期ドラフトを超高速で作成できる  
- チームで観点を共有する「たたき台」として超便利  
- 教育用としても使える（「なぜこの観点があるのか？」を考える練習に）

### 👎 課題

- QA経験が浅いと、生成内容をそのまま信じがち  
- ユーザーストーリーや業務フローを含んだ仕様になると精度が下がる  
- 非機能観点（性能・セキュリティなど）の補完が必要  

---

## まとめ

ChatGPTを活用すれば、観点出しとテストケース作成の「初動作業」を大幅に効率化できます。  
もちろん人間のレビューは必要ですが、**手戻りを減らし、より思考的なQA活動に時間を使える**ようになります。

今後は以下も試してみたいと考えています：

- NotionやExcel連携での運用自動化  
- LLMに過去のバグ分析を学習させて“抜けやすい観点”を提案させる  
- 負荷テスト観点やアクセシビリティの自動抽出  

---

## おわりに

この記事が、QA業務へのAI活用のヒントになれば嬉しいです！

- 「こういう仕様でもやってみてほしい」  
- 「社内で導入したいけど、もっと事例が知りたい」

などあれば、ぜひコメント・LGTM・フォローお願いします！

---

## 補足：使ったモデル・環境

- **モデル**：ChatGPT（GPT-4 Turbo）  
- **ツール**：ChatGPT Web（OpenAI公式）  
- **プロンプト調整回数**：約5回  
- **所要時間**：全体で約30分程度（精査含まず）
DockerでSQL*Loaderを動かしたい

DockerでSQL*Loaderを動かす方法を紹介します。

# 手順

## ① Dockerfileの作成

以下のようなDockerfileを用意します。

```Dockerfile
FROM oraclelinux:9

ARG release=19
ARG update=19

RUN dnf -y install oracle-instantclient-release-el9                 && \
    dnf -y install oracle-instantclient${release}.${update}-basic   && \
    dnf -y install oracle-instantclient${release}.${update}-sqlplus && \
    dnf -y install oracle-instantclient${release}.${update}-tools

ENV PATH=$PATH:/usr/lib/oracle/${release}.${update}/client64/bin

CMD ["sqlldr"]
```

releaseやupdateに指定する値は以下のURLから確認できます。

https://yum.oracle.com/repo/OracleLinux/OL9/oracle/instantclient/x86_64/index.html

## ② Dockerイメージの作成

Dockerイメージを作成します。タグ名などは任意です。

```
docker build . -t oracle/sqlldr:19.19
```

## ③ Dockerの利用

作成したDockerを利用して、SQL*Loaderを実行するには、以下のコマンドを実行します。

```
docker run --rm -it \
  oracle/sqlldr:19.19 \
  sqlldr userid="devuser/Passw0rd@oracle-db-host:1521/XEPDB1" control='product.ctl'
```

なお、Oracle DatabaseをDockerで起動している場合は`--net`オプションの設定が必要になる場合があります。詳細は以下の記事を参照してください。

https://qiita.com/neko_the_shadow/items/d1dc7f089e69fb941c78

# 参考

https://github.com/oracle/docker-images/blob/main/OracleInstantClient/oraclelinux9/19/Dockerfile


# 環境情報

|BANNER|BANNER_FULL|BANNER_LEGACY|CON_ID|
|:---|:---|:---|---:|
|Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production|Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production<br>Version 21.3.0.0.0|Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production|0|


```
C:\>docker version
Client:
 Cloud integration: v1.0.35+desktop.5
 Version:           24.0.7
 API version:       1.43
 Go version:        go1.20.10
 Git commit:        afdd53b
 Built:             Thu Oct 26 09:08:44 2023
 OS/Arch:           windows/amd64
 Context:           default

Server: Docker Desktop 4.26.1 (131620)
 Engine:
  Version:          24.0.7
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.10
  Git commit:       311b9ff
  Built:            Thu Oct 26 09:08:02 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.25
  GitCommit:        d8f198a4ed8892c764191ef7b3b06d8a2eeb5c7f
 runc:
  Version:          1.1.10
  GitCommit:        v1.1.10-0-g18a0cb0
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
```
【初心者向けQ＆A】ワードプレスの投稿画面で、カスタムhtmlやカスタムcss、カスタムjsを設定した場合、他の記事にも影響しますか？

<b>【初心者向けQ＆A】ワードプレスの投稿画面で、カスタムhtmlやカスタムcss、カスタムjsを設定した場合、他の記事にも影響しますか？</b>

例えば、A記事とB記事に、それぞれ同じ関数名やクラス名がある場合、記事の垣根を越えてお互いの記事に干渉しあうことはありますか？

<b>【回答】</b>
WordPressのカスタムHTML、CSS、JSの影響範囲についてのご質問ですね。この点についてお答えします。

WordPressの投稿画面で設定したカスタムコードの影響範囲については、実装方法によって異なります。基本的な原則をいくつか説明します。

## 記事ごとのカスタムコードの独立性

WordPressの標準的な投稿エディタ（Gutenbergエディタまたはクラシックエディタ）で記事ごとに追加するカスタムHTML、CSS、JSは、基本的にはその記事内でのみ有効です。ただし、いくつかの注意点があります：

1. **HTMLの影響**: 各記事のHTMLは基本的にその記事の表示範囲内に限定されます。

2. **CSSの影響**: 
   - 投稿内に`<style>`タグで追加したCSSは理論上はその記事内で閉じるべきですが、セレクタの書き方によっては他の記事にも影響する可能性があります。
   - 例えば、`.my-custom-class` のような一般的なクラス名を使用すると、他の記事で同じクラス名を使った要素にも適用される可能性があります。

3. **JavaScriptの影響**:
   - `<script>`タグで追加したJavaScriptは、ページ全体のDOM内で動作します。
   - 同じ関数名やグローバル変数を別の記事でも使用している場合、上書きや干渉が発生する可能性が高いです。

## 具体的なシナリオ

A記事とB記事に同じ関数名やクラス名を使用している場合：

1. **同時に表示される場合**（例：アーカイブページや検索結果ページ）:
   - JavaScriptの関数名が同じ場合、後から読み込まれた方が優先され、名前の衝突が発生します。
   - CSSのクラス名が同じ場合、カスケーディングの原則に従って適用されますが、予期せぬスタイルの適用が起こりえます。

2. **個別に表示される場合**（個別記事ページ）:
   - 基本的には干渉は起きませんが、キャッシュされたCSS/JSが残ることで影響が出る可能性があります。

## 干渉を防ぐベストプラクティス

1. **名前空間の使用**:
   - CSS: `.post-12345-my-class` のように記事IDを含めた固有のクラス名を使用する
   - JavaScript: 関数を即時実行関数式(IIFE)でラップする、または記事固有の名前空間を使用する

2. **スコープを限定する**:
   - CSSはできるだけ特定の親要素にスコープする
   - JavaScriptはグローバルスコープを汚染しないよう注意する

3. **プラグインの活用**:
   - 記事ごとのカスタムコードを適切に管理するプラグインを使用する

WordPressの実装や使用しているテーマ・プラグインによっても挙動が変わる可能性があるため、重要な実装の前にはテスト環境での検証をおすすめします。

---

https://shinsu-blog.com/category/it/it-knowledge/

https://shinsu-blog.com/
⭐️子供の年収UPと夢の実現を両立！年収2000万円を目指す子供を応援しつつ、事業売却という選択肢も伝えたい保護者へ


## 🎯 年収の意味を考え直す

実は、経営者の立場から言うと「年収」という考え方にはあまり意味がありません。なぜなら、事業主として大切なのは「自分が実現したいこと」と「生活の質」だからです。

あなたが本当に好きなこと・得意なことを事業にすれば、次のようなメリットがあります：

1. 🔥 自分の情熱を仕事にできる
2. 📊 やりたいことに必要なものは「経費」として購入できる
3. 🎁 結果的に物欲は自然と満たされていく

例えば、写真やゲーム、旅行が好きなら、それを仕事にすることで最新のカメラ機材やゲーム、旅費などを経費として計上できます。これは給与所得者が自分の趣味のために使うお金とは全く違う性質を持ちます。

## 💹 年収と手取りの現実

年収が上がるにつれて、手取りの割合は減っていきます。日本の累進課税制度では、年収が高くなるほど税率も上がります。以下に、異なる年収レベルでの額面と手取りの比較表を示します：

| 年収 | 額面(月額) | 手取り(月額) | 手取り率 |
|------|------------|--------------|----------|
| 500万円 | 約41.7万円 | 約33.3万円 | 約80% |
| 800万円 | 約66.7万円 | 約50万円 | 約75% |
| 1000万円 | 約83.3万円 | 約60.8万円 | 約73% |
| 1500万円 | 約125万円 | 約87.5万円 | 約70% |
| 2000万円 | 約166.7万円 | 約108.3万円 | 約65% |
| 2400万円 | 約200万円 | 約126万円 | 約63% |
| 1億円 | 約833.3万円 | 約416.7万円 | 約50% |

このように、年収が高くなればなるほど、手取り率は下がっていきます。年収1億円では手取りは約半分になってしまうのです。

## 🚀 事業成長とイグジットという選択肢

実は、成功した事業を築くもう一つの大きなメリットは「イグジット」の可能性です。約3年かけて事業を成長させ、10億円程度で売却（M&A）することができれば、手取りで約8億円を得られる可能性があります。

この方法なら、日々の経費で落とせないような大きな買い物（豪華な家や車など）も、イグジット後に十分購入できるようになります。また、M&Aによる売却益は、給与所得とは税制が異なるため、より効率的に資産を形成できる可能性があります。

## 日本国内で給与所得として年収2000万円を目指す

もちろん、国内でも年収2400万円を目指すことは可能です。

1. M&Aキャピタルパートナーズ
1. 三菱商事
1. キーエンス

これら国内企業の平均年収は２０００万円です。

また、外資系企業であれば、年収2000万円を超えることは珍しくありません。


## 🌟 使えるお金と豊かさとは

年収2400万円を目指すよりも、自分が情熱を持って取り組める事業を創り、成長させることを考えると結果的に使えるお金も増えるかもしれません。

その過程で以下のことが実現できるでしょう：

1. 😊 好きなことを仕事にできる幸福感
2. 💡 必要なものを経費として賢く活用できる合理性
3. 💼 将来的なイグジットによる大きな資産形成の可能性

ただ高い年収を目指すより、自分の価値を最大化できる道を選ぶことが、結果的に本当の意味での豊かさにつながります。

## M&A先を見つけるのが大変

1. 世のエンジニアは日々自社サービスを開発していますが売却までうまくいきません
1. これは、購入する企業側も詐欺に遭わない様にするために疑心暗鬼になっているからです
1. お互いが信頼できる相手だとわかっていればM&Aもスムーズに進むので、そういうアプリを開発されると良いかもしれませんね
1. それはそうと、若いあなたであれば、信用できる買い手と今のうちにお互いが強い信頼で結びつけられる関係を築けると期待しています
1. 結局売り手と買い手が信頼し合えていれば、成功の7割ぐらいは出来上がっていると思います

## M&Aで事業売却するメリットと

### メリット
1. 手取りが増える
1. 例えば10億円で事業売却する場合、会社の株式を売却益する事で、税金を20%程度にする事が可能
1. 1億円なら手取り8000万円、10億円なら手取り8億円


### デメリット
1. 購入してくれる相手を探すのが大変
1. 購入する側は、そのサービスが詐欺では無いか、売上を誤魔化してないか、そもそも信用できるのか？など心配事が多い
1. m&aを途中まで進めて、ビジネス上重要なノウハウだけ聞き出して、競合ビジネスを開発されるリスクがある

## 既に就職している場合

1. そこそこの大企業に就職している場合、休みの日にオリジナルサービス開発をすると良い
1. オリジナルサービス開発してリリース後、そこそこ良さそうなら、所属している会社に買取を提案すると良い
1. もし、貴方がフリーランスで、同じようにオリジナルサービスを今の会社に買取提案しても、話も聞いてもらえない
1. それは、どこの誰ともわからない人なのか、自社の社員かで信用が格段に違う為
1. 何がいいたいかと言うと、高校生の君に、大人になってからな安易な起業を勧めてはいない
1. 起業するなら、学生時代にして、サービス売却するか
1. そこそこの大企業に就職後、休日にサービス開発して、その大企業に売却提案する
1. サービスを買ってくれるのは、お金を持っている所であり、お金持ってるのは大企業である
[ネットワーク] LANケーブル1本で複数回線を配線したい [オン資]

# 今更な技術だけど
　オンライン資格確認回線を開通した後、施設内に2回線をいろいろなところに持っていく必要が出てきたので、その作業の備忘録。
 
　インターネットに接続する回線とNGN網（オンライン資格確認回線）に接続する回線の2回線をvlanを使ってケーブル1本（既存の壁裏ケーブル）で配線する。

# スマートスイッチ
　vlanに対応しているスイッチを用いる。今回は`tp-link`製の`TL-SG105E`（5ポートスイッチングハブ、安い！）を使って構築した。利益相反ありませんよ。

 # 設定画面
 　例として1階と2階にそれぞれ`TL-SG105E`を設置（計2台）。ポート5をトランクポート（2機器をつなぐポート）として`1F-2Fケーブル`の接続に用いる。

![vlanmanage001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1248818/db07d913-02ce-4ffc-8940-f62a2e99a0e5.jpeg)

　`vlan10`がオンライン資格確認回線、`vlan20`がインターネットに接続できるLAN。設定を行った後、デフォルトで存在している`vlan1`は削除できないので`Not Member`として使用できないようにした。

![vlanmanage002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1248818/6e102cef-752b-4b81-a531-2e72b794a1ff.jpeg)

　ポート5は`TL-SG105E`同士を接続しており、PVIDはどちらでも良いがよく使用する方のIDに設定した。

　ネットワークの疎通確認、機器の動作確認を行って終了。QoS設定は特になし、様子を見ながら行うこととした。
favicon.ico を設定して表示するまでの手順【Laravel + Xserver】

# ゴール
![スクリーンショット 2025-05-03 20.49.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726068/3b7db149-cec4-4342-903d-8bfdfcf4fe0c.png)


# 手順
# 1. ファビコン画像を作成する
サイズは 32×32px か 48×48px の .ico ファイルが最適。


## ✅ オススメの作成サイト
・favicon.io（テキストや画像から .ico 作成可能）
・ConvertICO
・RealFaviconGenerator


## 今回行った方法
### ① canva で png 作成
https://www.canva.com/ja_jp/create/favicon-design/

✅ 画像を透過させると　デザインとして綺麗になる。
✅ プレミア画像のみの場合、2枚を重ねるとダウンロードできる。
![スクリーンショット 2025-05-03 20.51.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726068/41a707d9-59a8-4694-9bd8-4d177d4a4382.png)


### ② favicon.io で PNG → ICO 変換
https://favicon.io/

![スクリーンショット 2025-05-03 20.53.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726068/c1f3fabd-398f-4a1d-a119-00b7541c0693.png)



# 2. Laravelプロジェクトにファビコンを追加する
作成した favicon.ico を Laravel プロジェクトの public/ ディレクトリ直下に配置します。
すでにある場合、置き換えOK。
```
your-laravel-project/
├── public/
│   └── favicon.ico ←★これを配置！
```


## Gitで管理している場合はコミットしておきます。
```bash
git add public/favicon.ico
git commit -m "Add favicon.ico"
git push origin main
```



# 3. Xserver に配置する（※Git pull だけではNG）
## ❗️重要ポイント
Xserverでは Laravel の public/ ディレクトリは自動で公開されません。

ブラウザは /favicon.ico に直接アクセスするため、public_html/ に手動コピーが必要です。


## まずは、 GitHub 上の最新変更をエックスサーバーに取り込む
```
cd プロジェクト
git pull origin main
```


## メインドメインの場合
✅ コマンド例（本番サーバーで実行）
```bash
cp /home/ユーザー名/akkun1114.com/プロジェクト名/public/favicon.ico /home/ユーザー名/akkun1114.com/public_html/favicon.ico
```


## サブドメインの場合
```bash
cp /home/ユーザー名/akkun1114.com/プロジェクト名/public/favicon.ico /home/ユーザー名/akkun1114.com/public_html/サブドメイン/favicon.ico
```



# 4. 表示確認する
```
https://自分のドメイン/favicon.ico
```

その後、アプリページでスーパーリロード：
```
Mac：Cmd + Shift + R
```
【Cursor】アップデート情報（v0.49.x）

# はじめに
プログラミング学習中の[@kat_log](https://twitter.com/kat__log "Twitter")と申します。

Cursorのアップデート情報（v0.49.x）のご紹介です！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/d17c1dad-478d-49fe-a4a0-074b1a8f08c9.png)

# Cursor Rulesがコマンドで作成できるように
`/Generate Cursor Rules`コマンドを使用して、チャットからルールを生成できるようになりました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/6ada0bfb-b1fd-4354-8e7e-5b858d9d0771.png)

# チャット履歴にコマンドパレットからアクセスできるように
コマンドパレット`Show Chat History`にてチャット履歴にアクセスできます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/1c6118e7-aa1e-4a39-839c-5619c5a6ce50.png)

# 差分ボタンで、レビューしやすく
チャットの最後に、差分を表示するボタンが追加されました

![Screenshot 2025-05-03 at 20.32.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/475277bc-6b96-41df-9444-47046dcd2288.png)

`Review changes`ボタンから、差分が見れます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/fb5dab05-7f98-449a-80bd-5249fadbf93c.png)

# MCPに画像を渡せるように
スクリーンショットなどが渡せるようになったようです！

# コマンド実行前に編集できるように
実行するコマンドを、実行前に編集できるようになりました！
（↓`-a`を手動で書き足しました）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/4b923ef9-ea91-4951-bb6a-6ee7e2ae2668.png)

# グローバル設定として無視するファイルが設定できるように
ユーザーレベルの設定で、グローバルに無視するファイルを設定できるようになりました！
例えば`**/secret.json`などを指定できます！

`⌘+,`にて設定を開き、`global cursor ignore list`にて検索すると表示できます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/14d89f75-e8fc-4b3a-a7bd-b4bd6b9911e6.png)

# 新しいAIモデルが使えるように
新しいモデルが使えるようになりました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/86520f4e-eb70-48cf-b166-65ae2d501c55.png)

- Gemini 2.5 Pro
- Grok 3
- Grok 3 mini
- GPT 4.1
- o3
- o4 mini

その他細かい修正等は[changelog](https://www.cursor.com/ja/changelog)にて確認できます！

# おまけ

この記事を2人のAIによる音声対話してもらいました😂↓（NotebookLM）

https://notebooklm.google.com/notebook/5acfda5e-c6c2-42d4-8533-6e2243aecf66/audio

# 終わりに
お読み頂きありがとうございました！
changelogからアップデート情報を見るのなかなか面白いな〜と思います！

# 参考

https://www.cursor.com/ja/changelog
KANBANメモ

# 戦略としてのカンバン活用ノート

##  カンバンとは？

| 観点                 | 内容 |
|----------------------|------|
| **ツールとしてのカンバン**  | TrelloやJiraなどのボードでのタスク可視化。列（ToDo/In Progress/Done）で視覚的に進捗管理。 |
| **メソッドとしてのカンバン** | David J. Andersonによる「カンバンメソッド」。継続的改善とフローの最適化を実現するための一連の実践手法。 |

---

## カンバンメソッドの6つのプラクティス

1. 現在のプロセスを可視化する  
2. WIP（仕掛かり中の作業）を制限する  
3. フローを管理する  
4. 明示的なポリシーを定義する  
5. フィードバックループを実装する  
6. 進化的・実験的に改善する  

---

## カンバンの3つの原則

1. 今のやり方から始める  
2. 進化的な変化を推進する  
3. 役割・責任を尊重する  

---

## スクラムとカンバンの違い・関係性

| 項目         | スクラム                       | カンバン                           |
|--------------|--------------------------------|------------------------------------|
| 単位         | スプリント（タイムボックス）     | 継続的フロー                       |
| イベント     | 定義されたイベント必須           | 任意・必要に応じて柔軟             |
| 管理指標     | ベロシティ、バーンダウン        | リードタイム、スループット         |
| 役割         | PO・SM・Devチームなど厳密        | 特に定義なし                       |
| 競合関係？   | ✕ 競合しない                   | ✕ むしろ補完関係                   |
| 併用パターン | Scrumban（スクラム＋カンバン）   | スクラムにカンバンの流れ改善を加える |

---

## カンバンを“戦略的に”活かす視点

| 戦略的視点     | 説明 | 効果 |
|----------------|------|------|
| **WIP制限**      | 抱えすぎを防ぐ | コンテキストスイッチ削減、詰まりの可視化 |
| **ボトルネック可視化** | 工程ごとの詰まりをボードで発見 | 優先的改善ポイントの特定 |
| **リードタイム測定**   | 作業開始から完了までの時間を記録 | SLA実現性の根拠、マネジメント連携 |
| **ポリシーの明示**    | カード移動や完了条件を明確化 | 認知負荷の削減、属人化の抑制 |
| **流れ単位のボード設計** | ドメインやステークホルダー別に設計 | 組織・チーム構造の最適化に寄与 |

---

## 活用シナリオ例

- 複数プロジェクト/マルチロール → WIP制限 + ポリシー明示で可視化  
- スクラムイベントはあるが改善が形骸化 → フロー観測を導入し継続的改善を補完  
- 報告の客観データが欲しい → リードタイムや完了件数を数値化

---

## カンバンとリーンの関係（例）

- **リーン**：価値の流れ（Value Stream）最適化を目指す思想
- **カンバン**：そのリーン思想を実行に移すツール・メソッド



### 参考
This is Lean
カンバン仕事術
Databricksチュートリアル(Day2): ノートブックからCSV データをインポートして視覚化するをやってみた

## 前提
・利用環境：Databricks
・カタログ、スキーマ、ボリュームを用意しておく

https://www.databricks.com/jp/try-databricks?scid=7018Y000001Fi15QAC&utm_medium=paid+search&utm_source=google&utm_campaign=17377047998&utm_adgroup=138148229998&utm_content=trial&utm_offer=try-databricks&utm_ad=732035937815&utm_term=databricks%20%E3%83%88%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%AB&gad_source=1&gclid=CjwKCAiA8Lu9BhA8EiwAag16b8b3zbkIb3V7gp-8VUwKukXnhtVZRQ-1RY8SbETmGVgNT4bQramYmRoCX5wQAvD_BwE#account

## 参考ドキュメント
https://docs.databricks.com/gcp/ja/getting-started/import-visualize-data
## 操作手順（動画）
<iframe width="100%" height="315" src="https://www.youtube.com/embed/6-h_XXqXALo?si=mBbEt8AkdNJPkmKA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
統計検定2級 一元配置分散分析

## はじめに
今回は統計検定2級で出てくる一元配置分散分析を学習します。


## ✅ 一元配置分散分析とは？

グループごとの平均に差があるかどうかを、1つの要因（分類軸）に注目して調べる統計手法です。

## 📘 例題：一元配置分散分析（one-way ANOVA）

あなたは3つのカフェ（A、B、C）でケーキを食べ比べ、  
それぞれのカフェで3人ずつの友達がケーキの満足度（10点満点）をつけました。

以下は各カフェでのスコアです：

| カフェ | 点数（満足度） |
|--------|----------------|
| A      | 7, 8, 6        |
| B      | 6, 5, 4        |
| C      | 8, 9, 10       |

---

### ❓ 問題

> カフェによってケーキの満足度の「平均」に差があるかどうか、  
> 一元配置分散分析（one-way ANOVA）を使って検定しなさい。

---

## 🧠 解き方

### ① グループごとの平均を計算

- Aの平均：$(7+8+6)/3 = 7.0$
- Bの平均：$(6+5+4)/3 = 5.0$
- Cの平均：$(8+9+10)/3 = 9.0$

---

### ② F値を求める考え方

F値の式は次のとおり：

$$
F = \frac{\text{グループ間のばらつき}}{\text{グループ内のばらつき}}
$$

- グループ間で平均が大きく違えば → 分子が大きくなる
- 各グループの中のバラつきが小さければ → 分母が小さくなる
- → よって F値は大きくなり、「差がある」と判断されやすい

---

### ③ 仮に計算結果がこうだったとする：

- F = 9.0  
- p値 = 0.02（※これは5%未満）

---

### ✅ 結論

- **p < 0.05** なので、帰無仮説は棄却
- 「カフェによって満足度の平均に有意な差がある」と言える

```python:
# 📌 Google Colab専用：日本語フォントのインストール
!apt-get -y install fonts-ipafont-gothic > /dev/null

import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import seaborn as sns
import pandas as pd
import scipy.stats as stats

# 日本語フォント設定
jp_font = FontProperties(fname="/usr/share/fonts/opentype/ipafont-gothic/ipag.ttf")
plt.rcParams['font.family'] = jp_font.get_name()

# データ
cafe_A = [7, 8, 6]
cafe_B = [6, 5, 4]
cafe_C = [8, 9, 10]

# ANOVA
f_statistic, p_value = stats.f_oneway(cafe_A, cafe_B, cafe_C)

# 結果表示
print(f"F値: {f_statistic:.3f}")
print(f"p値: {p_value:.3f}")
if p_value < 0.05:
    print("⇒ グループ間に有意な差があります。")
else:
    print("⇒ グループ間に有意な差は見られません。")

# 可視化データ
df = pd.DataFrame({
    '満足度スコア': cafe_A + cafe_B + cafe_C,
    'カフェ': ['A']*3 + ['B']*3 + ['C']*3
})

# 箱ひげ図（日本語ラベルを明示的にフォント指定）
plt.figure(figsize=(8, 5))
sns.boxplot(x='カフェ', y='満足度スコア', data=df)
plt.title('カフェごとのケーキ満足度（箱ひげ図）', fontproperties=jp_font)
plt.xlabel('カフェ', fontproperties=jp_font)
plt.ylabel('満足度スコア', fontproperties=jp_font)
plt.show()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/669dc63b-3b48-4ab7-b940-edac91707e22.png)
AndroidStudioのショートカットをVS Code配置にした

# 前置き
どうも、ikasumi1503です。
最近Jetpack Compose始めました。Android開発にあたってAndroid Studioを使うようになりました。VSCode様のショートカットキーがAndroid Studioで使えないと思っていましたが、Pluginを使うことで書けるみたいなので一応共有しておきます。

# 追加
Settings > Plugins > VSCode KeyMap

# 設定
Settings > KeyMap > 左上のドロップダウンからVSCode選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4073140/9637f8b1-4d5d-4270-b31f-d62dc61e0f92.png)

# まとめ
開発を始めて1週間近く苦しんできましたが、調べ不足でした...
簡単に設定できてよかったです:relaxed:
ABC308Dを解いた【BFS】


筆者はレート800前後の茶～緑コーダ

ABC308のD問題を解いていく
    
https://atcoder.jp/contests/abc308/tasks/abc308_d


# 実装コード

gridBFSの条件に、マスの文字が次の文字に対応したものかチェックする条件を付加すればOK

```python:main.py
from bisect import bisect_left, bisect_right, insort_left, insort_right
from collections import defaultdict, Counter, deque
from functools import reduce, lru_cache
from itertools import product, accumulate, groupby, combinations
import sys
import os
def rI(): return int(sys.stdin.readline().rstrip())
def rLI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def rI1(): return (int(sys.stdin.readline().rstrip())-1)
def rLI1(): return list(map(lambda a:int(a)-1,sys.stdin.readline().rstrip().split()))
def rS(): return sys.stdin.readline().rstrip()
def rLS(): return list(sys.stdin.readline().rstrip().split())
IS_LOCAL = int(os.getenv("ATCODER", "0"))==0
err = (lambda *args, **kwargs: print(*args, **kwargs, file=sys.stderr)) if IS_LOCAL else (lambda *args, **kwargs: None)


dy = [-1, 0, 1, 0]
dx = [0, 1, 0, -1]

def out_of_bounds(y, x, h, w):
    return y < 0 or y >= h or x < 0 or x >= w

def bfs(i, j, h, w, grid):
    q = deque([(i, j)])
    visited = [[False] * w for _ in range(h)]
    visited[i][j] = True
    
    while q:
        y, x = q.popleft()
        s = grid[y][x]
        if s not in T:
            continue
        for di in range(4):
            ny, nx = y + dy[di], x + dx[di]
            if not out_of_bounds(ny, nx, h, w) and grid[ny][nx] == T[s] and not visited[ny][nx]:
                visited[ny][nx] = True
                q.append((ny, nx))

    return visited

T = {s:t for s,t in zip("snuke","nukes")}
def main():
    H, W = rLI()
    S = [list(rS()) for _ in range(H)]
    
    visited = bfs(0,0,H,W,S)
    
    ans = visited[-1][-1]
    print('Yes' if ans else 'No')
    
if __name__ == '__main__':
    main()

```

# 感想

シンプルなBFSはスニペット化したのでとりあえずできるようになってきた

snukeを1文字ローテーションしたらnukesになったのは笑った。
【AI情報収集】おすすめYouTubeチャンネル

# はじめに
よく見ているAI情報のYouTubeチャンネル紹介です！

# おすすめチャンネル

## ✅️ にゃんたのAIチャンネル

### チャンネル✨️

https://www.youtube.com/@aivtuber2866

### 動画紹介✨️

<iframe width="560" height="315" src="https://www.youtube.com/embed/QjpXAbw2b90?si=ZCC5x4SP-0384omo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

## ✅️ まさおAIじっくり解説ch

### チャンネル✨️

https://www.youtube.com/@ai_masaou

### 動画紹介✨️

<iframe width="560" height="315" src="https://www.youtube.com/embed/G0K1ToDQ8EE?si=85WbJrr70WQFnl5i" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

## ✅️ mikimiki web スクール

### チャンネル✨️

https://www.youtube.com/@mikimikiweb

### 動画紹介✨️
<iframe width="560" height="315" src="https://www.youtube.com/embed/jhn92qYfpGc?si=BHMhPDZzMFXgITQn" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

# おわりに
以上です！
React Foundationsの「サーバーとクライアントのコンポーネント」がわからなかった

Next.js公式の「React Foundations」というチュートリアルの10章「Server and Client Components」が全く理解できなかったので、細かい用語をかみ砕きながらまとめてみる。
https://nextjs.org/learn/react-foundations/server-and-client-components


## サーバーおよびクライアント環境
![learn-client-and-server-environments.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610990/3e4c9410-dd09-4020-8c6c-6ed5ea2631e1.jpeg)

* サーバーとは、アプリケーションコードを保存し、クライアントからの要求を受信し、計算を実行し、適切な応答を返すデータ センター内のコンピューターを指します
* クライアントとは、ユーザーのデバイス上のブラウザのことです。アプリケーションコードへのリクエストをサーバーに送信し、サーバーから受信したレスポンスを、ユーザーが操作できるインターフェースに変換します

各環境には独自の機能と制約があります。例えば、レンダリングやデータ取得をサーバー側で行うことで、クライアントに送信するコード量を減らし、アプリケーションのパフォーマンスを向上させることができます。しかし、ユーザーインターフェースをインタラクティブにするには、クライアント側でDOMを更新する必要があります。

## ネットワーク境界
ネットワーク境界は、サーバーとクライアントのコードを分ける概念的なラインです。Reactでは、コンポーネントツリー内でこの境界をどこに置くかを選択できます。例えば、ユーザーの投稿をサーバーでデータ取得した後レンダリング（コンピュータがコードやデータをもとにして、ユーザーに見える画面を作ること）し、各投稿に対するインタラクティブ（ユーザーが何かをしたときに、即座に反応があるUI）な「いいね」ボタンをクライアントでレンダリングすることができます。

バックグラウンドでは、コンポーネントは2つのモジュールグラフに分割されます。サーバーモジュールグラフ（またはツリー）には、サーバー上でレンダリングされるすべてのサーバーコンポーネントが含まれ、クライアントモジュールグラフ（またはツリー）にはすべてのクライアントコンポーネントが含まれます。

サーバーコンポーネントがレンダリングされた後、 React Server Component Payload (RSC)と呼ばれる特別なデータ形式がクライアントに送信されます。RSC ペイロードには以下のものが含まれます。

* サーバー コンポーネントのレンダリング結果
* クライアント コンポーネントをレンダリングする場所のプレースホルダーと、その JavaScript ファイルへの参照

React はこの情報を使用してサーバー コンポーネントとクライアント コンポーネントを統合し、クライアント上の DOM を更新します。

## クライアントコンポーネントの使用
Next.js はデフォルトでサーバー コンポーネントを使用します。これは、アプリケーションのパフォーマンスを向上させるためであり、サーバー コンポーネントを導入するために追加の手順を実行する必要がないことを意味します。

ただし、useStateやuseEffectなどのクライアント専用のReactフックを使用する場合、これらはサーバーコンポーネント内では利用できません。そのため、インタラクティブな要素を含むコンポーネントは、クライアントコンポーネントとして定義する必要があります。
「2変数2階偏微分方程式の標準形への変形法を教えて下さい。」をAI先生に聞きました。sympyのソースコードで。 

# (本日の)ChatGPT先生へ
#### 質問リスト
```
# 質問リスト
1. 2変数2階偏微分方程式の標準形への変形法を教えて下さい。
2. 波動方程式をsympy のソースコードで教えて下さい。
3. グラフ表示を教えて下さい。
4. アニメーションを教えて下さい。
5. 私の質問をMarkdown形式でリスト化して出力して。Markdown形式でリストからアスタリスクは削除して。1行目に、# 質問リスト の文字を出力して。最後の質問も追加して下さい。追番を追加して下さい。Markdown形式で。
```
>(回答抜粋)
>1. 一般形の2変数2階線形偏微分方程式
>2. 分類（判別式）
>・楕円型（Elliptic）：  $D < 0$（例：ラプラス方程式）
>・放物型（Parabolic）： $D = 0$（例：熱方程式）
>・双曲型（Hyperbolic）： $D > 0$（例：波動方程式）
>3. 標準形への変換
>4. 例（波動方程式）
>SymPy を使って 1次元波動方程式 を表現し、変数変換して標準形に変えるソースコードは以下の通りです。
```python
from sympy import symbols, Function, diff, simplify
from sympy.abc import x, t

# 1. 未知関数 u(x, t)
u = Function('u')(x, t)

# 2. 波動方程式の定義: ∂²u/∂t² - c²∂²u/∂x² = 0
c = symbols('c', positive=True)
wave_eq = diff(u, t, 2) - c**2 * diff(u, x, 2)

print("波動方程式:")
print(wave_eq)
```
>■ 変数変換：ξ = x - ct, η = x + ct による標準形への変換
```python
# 3. 新しい変数の定義
xi, eta = symbols('xi eta')
u_new = Function('U')(xi, eta)  # U(ξ,η)

# 4. x = (η + ξ)/2, t = (η - ξ)/(2c) による逆変換
x_expr = (eta + xi)/2
t_expr = (eta - xi)/(2*c)

# 5. u(x,t) を U(ξ,η) で表現
# ∂²u/∂t² - c²∂²u/∂x² を ξ, η に変換
from sympy import diff

# U(ξ,η) を x, t に引き戻して連鎖律適用
Ux = diff(u_new.subs({xi: x - c*t, eta: x + c*t}), x, 2)
Ut = diff(u_new.subs({xi: x - c*t, eta: x + c*t}), t, 2)
wave_transformed = simplify(Ut - c**2 * Ux)

print("\n変数変換後の波動方程式（標準形）:")
print(wave_transformed)
```
出力例（簡略化）：
```
波動方程式:
Derivative(u(x, t), t, t) - c**2*Derivative(u(x, t), x, x)

変数変換後の波動方程式（標準形）:
4*c**2*Derivative(U(x - c*t, x + c*t), (x - c*t), (x + c*t))
```
...
■ 波動方程式の解のアニメーション（Pythonコード）
(省略)
```python
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

# パラメータ
c = 1.0  # 波の速さ
x = np.linspace(-10, 10, 400)  # 空間範囲
t_max = 10  # アニメーションの長さ（時間）
frames = 100  # フレーム数

# 波動方程式の具体解（例）：u(x,t) = sin(x - ct) + cos(x + ct)
def u(x, t):
    return np.sin(x - c * t) + np.cos(x + c * t)

# グラフの初期設定
fig, ax = plt.subplots()
line, = ax.plot(x, u(x, 0))
ax.set_ylim(-2, 2)
ax.set_xlim(x[0], x[-1])
ax.set_title("波動方程式のアニメーション")
ax.set_xlabel("x")
ax.set_ylabel("u(x, t)")
ax.grid(True)

# フレームごとの更新関数
def update(frame):
    t = t_max * frame / frames
    line.set_ydata(u(x, t))
    ax.set_title(f"t = {t:.2f}")
    return line,

# アニメーション作成
ani = FuncAnimation(fig, update, frames=frames, blit=True, interval=50)

plt.show()
```
# Gemini先生へ

# copilot先生へ

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

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

# いつもと違うおすすめです。
### wikipedia
Gitでブランチを作ってGitHubにプルリクエストを送るまでの流れ【初心者向け】

この記事では、develop ブランチから新しく作業用ブランチを作成し、VSCodeとUbuntuターミナルを使ってコミット・プッシュ・プルリクエスト（PR）を行う一連の流れを紹介します。

## ✅ 目次
ブランチとは？

新しいブランチの作成（git checkout -b）

VSCodeで変更・ステージング

Ubuntuでコミットとプッシュ

GitHubでプルリクエストを作成

補足：ブランチ運用のイメージ<br>

## 🧠 1. ブランチとは？
ブランチ（branch）とは、Gitでコードの変更履歴を独立して管理する仕組みです。

例えるなら、「メイン道路（masterやdevelop）から分岐した脇道」。

脇道で工事（開発）して、終わったらメイン道路に合流させる（マージする）ようなイメージです。

主なブランチの例
master: 本番に出している安定したコード

develop: 開発中の最新コード

feature/〇〇: 新機能や修正作業をするためのブランチ

## 🛠 2. 新しいブランチを作成する
```bash
git checkout -b ブランチ名（feature/○○○）
```
-b オプションで「新しいブランチを作って、そのブランチに切り替える」という意味です。

## 🖥 3. VSCodeで変更 → ステージング
ステージングとは？
編集したファイルを**「これをコミットしますよ」と一時的に登録すること**です。
VSCodeの「ソース管理」タブから、変更ファイルを「＋（ステージ）」ボタンで登録できます。

## 💾 4. Ubuntuでコミット＆プッシュ
コミットする
```bash
git commit -m "この変更の説明文。何をしたのか簡潔に書く"
```
リモートリポジトリにプッシュする
```bash
git push -u origin ブランチ名
```
origin はリモートリポジトリ、-u は今後このブランチとの追跡を自動にします。

## 🔁 5. GitHubでプルリクエストを作成
❓ プルリクエストとは？
**プルリクエスト（Pull Request）**は、GitHub上で「このブランチの変更を、元のブランチ（例：develop）に統合していいか？」をレビューしてもらうための仕組みです。
・コードレビューを依頼する
・他のメンバーと相談する場になる
・テストや動作確認を経てから本番ブランチへマージできる<br>
<br>

プルリクエスト作成手順
1\.GitHubでリポジトリを開く
2\.ブランチが push されているのを確認
3\.「Compare & pull request」をクリック
4\.PRの内容を確認し、「Create pull request」を押す


## ✅ まとめ
ブランチを使えば、安全に新機能の開発ができる

checkout -b で作成と切り替えを同時に

コミット後は push して GitHub 上で PR を出そう！


###### 🔁 GitとGitHubの一連の流れ

| ステップ             | 説明                                                                | コマンド例                                   | ローカル/リモート |
|----------------------|---------------------------------------------------------------------|--------------------------------------------|-------------------|
| **1. ブランチを作る** | 新しい作業用のブランチを作成                                         | `git checkout -b feature/新機能名`          | ローカル           |
| **2. ステージングする** | 変更ファイルをステージングエリアに登録（次にコミットするファイル）  | `git add ファイル名`                        | ローカル           |
| **3. コミットする**   | ステージングした変更をローカルで確定                                 | `git commit -m "説明文"`                    | ローカル           |
| **4. プッシュする**   | ローカルの変更をリモート（GitHub）に送信                           | `git push -u origin feature/新機能名`       | リモート           |
| **5. プルリクエストを送る** | GitHub上で、マージ依頼を送信（コードレビュー後に統合）            | GitHubで手動でプルリクエストを作成         | リモート           |
Djangoでマイグレーションファイルを作成してテーブルを作成する

# はじめに

こんにちは、エンジニアのkeitaMaxです。

Djangoでmodels.pyを書いて、マイグレーションファイルを作成し実際にDBにテーブルを作成してみようと思います。

# models.pyの作成

名前と住所があるUserテーブルを作成してみようと思います

```python:models.py
class User(models.Model):
    name = models.CharField("名前", max_length=100)
    address = models.CharField("住所", max_length=100)

    def __str__(self):
        return self.name
```

models.pyを↑のように定義しました。

# migrationファイルの作成

以下コマンドを叩くと、models.pyに沿ってmigrationファイルが出力されます。

```
python manage.py makemigrations
```
```python:0001_initial.py
# Generated by Django 4.2 on 2025-05-03 10:19

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='User',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=100, verbose_name='名前')),
                ('address', models.CharField(max_length=100, verbose_name='住所')),
            ],
        ),
    ]
```

このように`migrations`ディレクトリ配下に出力されました。

# DBにテーブルを登録する

今度は以下コマンドでmigrationファイルからデータベースにテーブルを作成します。

```
python manage.py migrate
```

成功すれば`OK`と表示されます。

# 確認

以下のようにして確認します。
私はmakeファイルを作成していて
```
db: 
	docker compose exec db mysql -u root -p
```
こんな感じで記載しているため、
`make db`でmysqlサーバの中に入れています。

```
% make db
mysql> USE database;
Database changed
mysql> SHOW TABLES;
+----------------------------+
| Tables_in_database         |
+----------------------------+
| app_user                   |
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
13 rows in set (0.01 sec)

mysql> 
```

`app_user`テーブルが作成できているのを確認できました。

# おわりに

この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。

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

# 参考

# 次の記事

|
TOPPERS JSP と SSP

TOPPERS ソースを積み上げよう
https://qiita.com/kaizen_nagoya/items/65c15aed086f2da0928d

toppers 3分岐
https://qiita.com/kaizen_nagoya/items/18e772db71a763b919a4

TOPPERS JSP と SSP
https://qiita.com/kaizen_nagoya/items/17333e8ec5d153cb6078

toppers/ssp upload
https://qiita.com/kaizen_nagoya/items/cffa0aaf2c029cef7334

TOPPERS JSP と JSP/EDU
https://qiita.com/kaizen_nagoya/items/50c834248eb3cd8f9c1a

toppers/jsp/m16c, m32c版から、
次の３つが分岐しています。

１ TOPPERS　OSEK/VDX
２ TOPPERS edu jsp
3 TOPPERS SSP

全体の方向性の違いを説明するとともに、
具体的なファイルでの違いを順次説明予定。

のうち、次の３つの違いを個別に記載し、
JSPとOSEK/VDX
JSPとJSP EDU
JJSPとSSP

その後、
SSPとOSEK/VDX
SSPとJSP EDU
の違いを詳細に記述し、相互に技術導入を計画する。

# JSPとSSP

## edu jsp

toppers edu jsp
https://qiita.com/kaizen_nagoya/items/5561df93c7e156573fd2

kernel
https://github.com/kaizen-nagoya/toppersedujsp/tree/main/kernel

## ssp

toppers/ssp upload
https://qiita.com/kaizen_nagoya/items/cffa0aaf2c029cef7334

Github
https://github.com/kaizen-nagoya/toppersssp

## 比較
実際には、JSP EDUで比較する。
JSP全体は、さまざまなCPUに移植してあることが利点である。
今回は、検討の対象外とした。
NPO TOPPERS JSP と JSP/EDU

TOPPERS ソースを積み上げよう
https://qiita.com/kaizen_nagoya/items/65c15aed086f2da0928d

toppers 3分岐
https://qiita.com/kaizen_nagoya/items/18e772db71a763b919a4

TOPPERS JSP と SSP
https://qiita.com/kaizen_nagoya/items/17333e8ec5d153cb6078

toppers/ssp upload
https://qiita.com/kaizen_nagoya/items/cffa0aaf2c029cef7334

TOPPERS JSP と JSP/EDU
https://qiita.com/kaizen_nagoya/items/50c834248eb3cd8f9c1a

toppers/jsp/m16c, m32c版から、
次の３つが分岐しています。

１ TOPPERS　OSEK/VDX
２ TOPPERS edu jsp
3 TOPPERS SSP

全体の方向性の違いを説明するとともに、
具体的なファイルでの違いを順次説明予定。

のうち、次の３つの違いを個別に記載し、
JSPとOSEK/VDX
JSPとJSP EDU
JJSPとSSP

その後、
SSPとOSEK/VDX
SSPとJSP EDU
の違いを詳細に記述し、相互に技術導入を計画する。



# JSP(EDU)

toppers edu jsp
https://qiita.com/kaizen_nagoya/items/5561df93c7e156573fd2

kernel
https://github.com/kaizen-nagoya/toppersedujsp/tree/main/kernel

実際には、JSP EDUは、一部のフォルダだけで、EDUで追加したフィルだだけ検討する。
JSP全体は、さまざまなCPUに衣九色してあることが利点である。
今回は、検討の対象外とした。
「表面力と物体力の違いを教えて下さい。」をAI先生に聞きました。


# (本日の)ChatGPT先生へ
#### 質問リスト
```
# 質問リスト
1. 表面力と物体力の違いを教えて下さい。
2. 表面力と物体力の物理的背景や応用にも興味がありますか？
3. 見たいです。
4. 私の質問をMarkdown形式でリスト化して出力して。Markdown形式でリストからアスタリスクは削除して。1行目に、# 質問リスト の文字を出力して。最後の質問も追加して下さい。追番を追加して下さい。Markdown形式で。
```

(回答抜粋)
>■ 表面力（接触力）
>■ 物体力（体積力・場の力）

画像が生成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/f0c37b17-07ef-4ed1-a516-95d83552a5fc.png)


# Gemini先生へ

# copilot先生へ

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

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

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

https://en.wikipedia.org/wiki/Surface_force

https://en.wikipedia.org/wiki/Body_force

＞分類

https://ja.wikipedia.org/wiki/力_(物理学)#分類

#### Qiita内

https://qiita.com/mrrclb48z/items/e7eab594dc3e876ed9ca
NPO TOPPERS JSP と OEK/VDX OS

toppers 3分岐
https://qiita.com/kaizen_nagoya/items/18e772db71a763b919a4

toppers/jsp/m16c, m32c版から、
次の３つが分岐しています。

１ TOPPERS　OSEK/VDX
２ TOPPERS edu jsp
3 TOPPERS SSP

全体の方向性の違いを説明するとともに、
具体的なファイルでの違いを順次説明予定。

のうち、次の３つの違いを個別に記載し、
JSPとOSEK/VDX
JSPとJSP EDU
JSPとSSP

その後、
SSPとOSEK/VDX
SSPとJSP EDU
の違いを詳細に記述し、相互に技術導入を計画する。

# JSPとOSEK/VDX

ITRON自動車用プロファイルは、ISO OSEK/VDX OS相当の機能であると言われている。
実際に、JSPのソースコードを改良して、OESK/VDX OSのコードを記載したかどうかは置いておいて、２つを比較することにより、現状の課題と、将来の改良が検討できる。

# osek/vdx

osekをuploadした。
https://qiita.com/kaizen_nagoya/items/6bc7eb2ec635e88afd5a

osek
https://github.com/kaizen-nagoya/osek

# JSP(EDU)
toppers edu jsp
https://qiita.com/kaizen_nagoya/items/5561df93c7e156573fd2

kernel
https://github.com/kaizen-nagoya/toppersedujsp/tree/main/kernel

実際には、JSP EDUで比較する。
JSP全体は、さまざまなCPUに移植してあることが利点である。
今回は、検討の対象外とした。
Notion API × Next.js × TypeScriptで業務の復習をしてみる

## なぜこのNotion APIを使おうと思ったのか？

今回、Notion APIを使ったブログを個人開発した背景には、以下のような理由があります。

- 普段社内プロジェクトで使用している **「Next.js × TypeScript」** の復習も兼ねて、実際に個人で手を動かして開発してみたかった  
- データベース構築を省略し、フロントエンドに集中した開発体験をしてみたかった

業務で扱うプロジェクトは、バックエンドがしっかりと設計・構築されており、規模も大きいことが多いです。ただ、個人開発でそれと同等の構成を用意するのは正直ハードルが高く、気軽に試すには不向きです。

その点、Notion APIをバックエンド代わりに使うことで、データベース設計やインフラ構築なしで、柔軟かつスピーディにアプリを作れる点に魅力を感じ、本ブログアプリの開発に至りました。

実際のアプリはこちらで公開しています:boy_tone1:

https://notion-blog-woad-seven.vercel.app/


## 使用技術スタック

今回のプロジェクトでは以下の技術を使用しました。

- **Next.js (App Router)**
- **React**
- **TypeScript**
- **Notion API（公式SDK）**
- **ReactMarkdown**  
  Notionから取得したテキストをMarkdown形式で表示
- **SWR**  
  社内プロジェクトでよく使っているため、復習がてら導入（必須ではない）

## 実装した主な機能一覧

- **ブログ記事一覧ページ**
  - ソート機能（新しい順・古い順・いいね順）
  - カテゴリフィルター
  - ページネーション

- **ブログ詳細ページ**
  - Notionページの内容をMarkdownでレンダリング
  - いいね機能（Notionの数値プロパティを更新）

- **API連携**
  - `/api/getAllPosts`：記事一覧取得（sort対応）
  - `/api/getPageInfo`：詳細情報の取得・いいね数更新
  - `/api/getPageContent`：Markdown変換

## 作ってみての学び・気づき

- **やはりTypeScriptの型付けに苦戦**
  特にNotion SDKから返ってくるレスポンス（プロパティのネストが深く、nullableな項目も多い）の扱いが難しく、型ガードやoptional chainingの理解が深まりました。

- **Notion APIとの連携**
  あらかじめ構築されたデータベース構造を活かすことで、コード側のデータ設計をシンプルに保てたのが非常に良かったです。
  特に良かったのは、Notion側で カテゴリや投稿日などのプロパティを自由に設定・管理でき、それをAPI経由でそのまま使えるという点です。


## まとめ

今回の個人開発では、**実務で扱う技術を実践的に復習しながら、バックエンドの構築なしで完結するアプリを作れた**ことが一番の収穫でした。

また、Notionというノーコードツールをうまく活用すれば、開発リソースを抑えつつも、意外としっかりした構成のアプリが作れることを実感しました。

プロジェクトでよく使う記述パターンをベースに作業できたこともあり、良いトレーニングになったと思います🍋


## 今後の展望

- 検索機能の追加（全文検索 or タグ検索）
- コメント機能の導入（Supabase or Firebase連携）
- カレンダー表示やアーカイブ機能などの拡張


個人開発を始めたい方にとっても、ハードルが低く取り組みやすいので、初心者の方が「何か作ってみたい」と思ったときにおすすめの構成です:rainbow:
NPO toppers 3分岐

toppers/jsp/m16c, m32c版から、
次の３つが分岐しています。

１ TOPPERS　OSEK/VDX
２ TOPPERS  edu jsp
3 TOPPERS SSP

全体の方向性の違いを説明するとともに、
具体的なファイルでの違いを順次説明予定。

# osek/vdx

osekをuploadした。
https://qiita.com/kaizen_nagoya/items/6bc7eb2ec635e88afd5a

osek
https://github.com/kaizen-nagoya/osek

# edu jsp
toppers edu jsp
https://qiita.com/kaizen_nagoya/items/5561df93c7e156573fd2

kernel
https://github.com/kaizen-nagoya/toppersedujsp/tree/main/kernel

# ssp
toppers/ssp upload
https://qiita.com/kaizen_nagoya/items/cffa0aaf2c029cef7334

Github
https://github.com/kaizen-nagoya/toppersssp
Azure Database for MySQLでレプリケーションをしたい

Azure Database for MySQLでmysql8.0をレプリケーションしたコードをTerraformで書きました。

```main.tf
provider "azurerm" {
  features {}
  subscription_id = "" # AzureサブスクリプションIDを指定
}

# リソースグループの作成
resource "azurerm_resource_group" "example" {
  name     = "mysql-replication-rg"
  location = "Japan East" # 必要に応じてリージョンを変更
}

# プライマリMySQLサーバーの作成
resource "azurerm_mysql_flexible_server" "master" {
  name                   = "mysql-master-server"
  resource_group_name    = azurerm_resource_group.example.name
  location               = azurerm_resource_group.example.location
  administrator_login    = "mysqladmin"
  administrator_password = "SecurePassword123!" # 強力なパスワードを使用
  sku_name               = "GP_Standard_D2ds_v4"    
  version                = "8.0.21"             # サポートされているバージョン
  zone                   = "2"                   # 可用性ゾーンを明示（例: "1", "2", "3"）

  # ストレージ設定
  storage {
    size_gb = 20  # 20GB（最小値）
  }

  # バックアップ設定（オプション）
  backup_retention_days = 7
}

# レプリカMySQLサーバーの作成
resource "azurerm_mysql_flexible_server" "replica" {
  name                   = "mysql-replica-server"
  resource_group_name    = azurerm_resource_group.example.name
  location               = azurerm_resource_group.example.location
  create_mode            = "Replica"              # レプリカモードを明示
  source_server_id       = azurerm_mysql_flexible_server.master.id # プライマリを参照
  sku_name               = "GP_Standard_D2ds_v4"  #B1MSではレプリケーションできない 
  version                = "8.0.21"              # プライマリと一致
  zone                   = "2"                   # 可用性ゾーンを明示（例: "1", "2", "3"）

  depends_on = [azurerm_mysql_flexible_server.master] # 依存関係を明示
}

# 出力設定（サーバーのFQDNを確認）
output "master_server_fqdn" {
  value = azurerm_mysql_flexible_server.master.fqdn
}

output "replica_server_fqdn" {
  value = azurerm_mysql_flexible_server.replica.fqdn
}

```

注意点
AzureサブスクリプションIDをいれてください。
コメントでも書いていますがB1MSではレプリケーションできないので気を付けてください。
Claudeの各種プランを比較してみた

## はじめに
Anthropic社の有料プランの種類が増えてきて各プランごとに何ができて何ができないのか？
などをClaude自身に比較表として作成させました。

2025/05/03現在の情報になります。

## Claude プラン比較表：価格と機能

| 機能 / プラン | Free | Pro | Team | Enterprise | Max (低) | Max (高) |
|---------------|------|-----|------|------------|---------|---------|
| **価格** | 無料 | $20/月 | $25/月/ユーザー（年間契約）、$30/月/ユーザー（月額契約）、最低5ユーザー必須 | カスタム価格（要問合せ） | $100/月 | $200/月 |
| **メッセージ制限** | 約20-40メッセージ/日 | 約45メッセージ/5時間（約216メッセージ/日） | Proより増量 | 大幅に増量 | Pro比5倍 | Pro比20倍 |
| **モデルアクセス** | 基本モデルのみ | 全モデル（Claude 3系列） | 全モデル（Claude 3系列） | 全モデル（Claude 3系列） | 全モデル優先アクセス | 全モデル優先アクセス |
| **コンテキストウィンドウ** | 基本 | 200Kトークン | 200Kトークン | 500Kトークン | 200Kトークン | 200Kトークン |
| **Exted Thinking** | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
| **優先アクセス** | ❌ | ✅ | ✅ | ✅ | ✅（強化） | ✅（強化） |
| **新機能への早期アクセス** | ❌ | ✅ | ✅ | ✅ | ✅（最優先） | ✅（最優先） |
| **コラボレーション機能** | ❌ | ❌ | ✅ | ✅（強化） | ❌ | ❌ |
| **プロジェクト機能** | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
| **Knowledge Base** | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
| **管理機能** | ❌ | ❌ | ✅（基本） | ✅（高度） | ❌ | ❌ |
| **セキュリティ機能** | 基本 | 基本 | 基本 | エンタープライズ級・SSO・ドメイン管理・監査ログ・SCIM対応・カスタムデータ保持 | 基本 | 基本 |
| **Claude Code** | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| **GitHub連携** | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| **音声モード** | ❌ | ❌ | ❌ | ❌ | 近日実装予定 | 近日実装予定 |
| **リセット頻度** | 毎日深夜 | 5時間ごと | 5時間ごと | カスタム | 5時間ごと | 5時間ごと |
| **対象ユーザー** | 個人、初心者、軽度利用者 | パワーユーザー、個人事業主、クリエイター | 中小企業、チーム、部門単位組織 | 大企業、セキュリティ重視組織、大規模チーム | ヘビーユーザー、開発者、締切のあるプロジェクト | 超ヘビーユーザー、開発者、高頻度利用者 |

**基本**：
標準的な機能レベルを指します。例えば「セキュリティ機能：基本」とは、一般的なユーザー認証や暗号化など、最低限必要なセキュリティ機能が含まれていることを意味します。Free、Pro、Teamプランなどでは、このレベルのセキュリティ機能が提供されています。

**強化**：
基本レベルよりも高度な機能や、より多くの機能が含まれていることを示します。例えば「優先アクセス（強化）」とは、Proプランと比較してMaxプランでは混雑時により高い優先度でサービスにアクセスできることを意味します。また「コラボレーション機能（強化）」とは、Enterpriseプランでは標準的なコラボレーション機能に加えて、より高度な共同作業機能が利用できることを示しています。

**高度**：
最も充実したレベルの機能を指します。例えば「管理機能（高度）」とは、Enterpriseプランでは詳細なユーザー権限管理、高度な使用状況分析、カスタマイズ可能な管理ダッシュボードなど、大規模組織向けの管理機能が提供されることを意味します。

これらの表現は、あくまで相対的な比較を表すために使用されており、具体的な機能の詳細は公式ドキュメントで確認するのが最適です。各プランが提供する正確な機能セットは、Anthropicの製品更新によって変更される可能性があります。

## 補足情報

1. **Free Plan**：基本的な機能は提供されますが、制限があります。メッセージ数の制限は日によって変動する場合があります。

2. **Pro Plan**：個人のパワーユーザー向けで、エクステンドシンキング（拡張思考モード）や優先アクセスなどの機能が利用可能です。

3. **Team Plan**：最低5ユーザー必要で、チーム管理機能や一元請求管理などビジネス向け機能が強化されています。

4. **Enterprise Plan**：大企業向けのカスタマイズ可能なプランで、高度なセキュリティ機能やGitHub連携などが含まれます。コンテキストウィンドウも500Kトークンに拡大されています。

5. **Max Plan**：個人向け高度利用プランで、低価格版（$100/月）と高価格版（$200/月）があります。最大の特徴はClaude Codeへのアクセスで、ターミナルでのエージェンティックコーディング支援が可能です。

注：価格と機能は2025年5月現在のものであり、Anthropicの方針変更により変更される可能性があります。また、地域によって価格や利用可能な機能が異なる場合があります。

## 関連・おすすめ書籍
- [コーディング不要で毎日の仕事が5倍速くなる！Difyで作る生成AIアプリ完全入門](https://amzn.to/42DYla2)
- [ChatGPT/LangChainによるチャットシステム構築［実践］入門](https://amzn.to/3RLKTKU)
- [ChatGPT はじめてのプロンプトエンジニアリング](https://amzn.to/42Yix5n)
PHP備忘録：localhost:8080/hello が表示されない問題 ― Laravel × Docker の詰まりポイントを整理してみた

## はじめに

Docker 上で Laravel + Apache 環境を構築して、ルーティング確認まで行った際の備忘録です。

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

初学者として PHP のキャッチアップをしている中で、詰まりやすいポイントを整理しておきます。

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

個人的に PHP のキャッチアップをしたくて Laravel を触っていたところ、`http://localhost:8080/hello` が何度やっても表示されずハマりました。そこで一つずつ検証しながら解決できたので、今後の自分や誰かの参考になればと思いまとめています。

## 内容

### 表示されなかった主な原因（※あくまで自分の環境調べ）

* Apache のドキュメントルートが Laravel の `public/` ではなかった
* Laravel アプリは `public/` をドキュメントルートにしないと、`index.php` に到達できず Apache が "Not Found" を返す
* 初期状態：`/var/www/html` がドキュメントルートのまま → `/public/index.php` にアクセスできなかった

### 解決策

Dockerfile に以下を追加して、Apache のルートを `public/` に変更しました：

```Dockerfile
RUN sed -i 's!/var/www/html!/var/www/html/public!g' /etc/apache2/sites-available/000-default.conf
WORKDIR /var/www/html/public
```

### その他重要な設定

| 設定項目                | 意味                           |
| ------------------- | ---------------------------- |
| `.htaccess` 配置      | ルーティングを Apache に正しく伝える       |
| `AllowOverride All` | `.htaccess` を Apache に有効化させる |
| `mod_rewrite`       | Laravel の内部ルーティングを機能させる      |

### 変更した主なファイル

#### Dockerfile

```Dockerfile
# PHP 8.2 + Apache の公式イメージをベースにする
FROM php:8.2-apache

# Laravelで必要なパッケージをインストール（zip, git, curl など）
RUN apt-get update && apt-get install -y \
    zip unzip git curl libzip-dev libonig-dev \
    && docker-php-ext-install pdo_mysql zip

# Composer（PHPのパッケージ管理ツール）をインストール
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

# LaravelのpublicフォルダをApacheのドキュメントルートに設定
RUN sed -i 's!/var/www/html!/var/www/html/public!g' /etc/apache2/sites-available/000-default.conf

# .htaccess を使うために mod_rewrite を有効化
RUN a2enmod rewrite

# 作業ディレクトリを Laravel の public に設定
WORKDIR /var/www/html/public

# Laravelアプリのソースコードをコピー
COPY src/ /var/www/html/
```

#### src/routes/web.php

```php
<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HelloController;

Route::get('/', function () {
    return view('welcome');
});

Route::get('/hello', [HelloController::class, 'index']);
```

#### src/app/Http/Controllers/HelloController.php

```php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HelloController extends Controller
{
    public function index()
    {
        return 'こんにちは！これは Hello ページです。';
    }
}
```

**実際の画面**

![Screenshot 2025-05-03 at 18.35.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/0a10b2f7-b379-4a7b-bc1a-8bd915ddbd77.png)

## まとめ

Laravel アプリを Docker 上の Apache で動かす際は、私の環境で修正した部分は以下になります。

* Apache のドキュメントルートを `public/` にすること
* `.htaccess` を有効にするには `AllowOverride All`
* `mod_rewrite` を有効にして Laravel にルーティングを渡す

この3つが揃って初めて、`http://localhost:8080/hello` が正しく表示されました。

***同じようにハマっている方の参考になれば幸いです...！***
Git リポジトリ関連コマンド [ 備忘録 ]

### 現在のブランチからアップストリーム（上流）ブランチの関連付けを解除する
```
git branch --unset-upstream
```
upstreamとは、あなたのローカルブランチが「どのリモートリポジトリのどのブランチ」と連携しているかを定義する関連付けです。

### upstreamの確認方法
```
git branch -vv
```
```
# 出力
  develop 4f7bdf9 [origin/develop] cicd.ymlファイルを更新する。
* main    4f7bdf9 [origin/main] cicd.ymlファイルを更新する。
  sub     4f7bdf9 cicd.ymlファイルを更新する。
```
各ローカルブランチがどのリモートブランチを追跡しているかを確認できます。

### リモートリポジトリの参照を削除する
```
git remote remove origin
```
リモートリポジトリを確認
```
git remote -v
```
originとは、単にローカルGitリポジトリが参照するリモートリポジトリの「別名」です。特別な機能があるわけではなく、単に慣習的に使われる名前です。

### Gitリポジトリ移行のプロセス
既存のローカルリポジトリに新しいリモートリポジトリを接続する
```
git remote add origin git@github.com2:oyne2561/ecs-github-actions-learning.git

git branch -M main
git push -u origin main
```

### 2個目のGitHubアカウントでSSH接続を設定する方法
1. 新しいSSHキーペアを生成
```
ssh-keygen -t ed25519 -C "your-second-email@example.com" -f ~/.ssh/github_second_account
```
2. 公開キーを2個目のGitHubアカウントに追加
```
# 公開キーをクリップボードにコピー
cat ~/.ssh/github_second_account.pub | pbcopy  # Macの場合
# Windowsの場合は: cat ~/.ssh/github_second_account.pub | clip
```
3. SSH設定ファイルの編集
```
vim ~/.ssh/config
```
設定ファイルに以下のように記述します：
```
# デフォルトのGitHubアカウント (最初のアカウント)
Host github.com
   HostName github.com
   User git
   IdentityFile ~/.ssh/id_ed25519  # または既存のキーファイル

# 2個目のGitHubアカウント
Host github.com2
   HostName github.com
   User git
   IdentityFile ~/.ssh/github_second_account
```
4. 設定のテスト
```
# SSH接続テスト（最初のアカウント）
ssh -T git@github.com

# SSH接続テスト（2個目のアカウント）
ssh -T git@github.com2
```
成功すると、以下のようなメッセージが表示されます：
```
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
```
5. リポジトリのクローンと使用方法
2個目のアカウントのリポジトリをクローンする場合：
```
# 通常のURLを変更して使用
git clone git@github.com2:username/repository.git
```
既存のリポジトリのリモートURLを変更する場合：
```
git remote set-url origin git@github.com2:username/repository.git
```
[初回の場合] リモートリポジトリを設定する
```
git remote add origin git@github.com2:oyne2561/ecs-github-actions-learning.git
```

### github コメント (レビュー)
![github_pending.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4077353/0a2945f5-15a1-4e90-9c2e-22f8d3c5aed5.png)

## 直前のコミットのコメントを修正する
```
git commit --amend -m "コメント"
```


## エラー対処法

### 1. git remote remove originが落ちる時
「error: could not delete references: cannot lock ref 'refs/remotes/origin/fix/readme'」

大文字と小文字の判別が Git とファイルシステムで差異があることが原因です。

例えば、下記2つのブランチが存在している場合：

- feature/ticket-123
- feature/TICKET-123

ファイルシステムでは、大文字小文字の違いを区別せずに同じファイルが存在しているとみなしています。

`.git/packed-refs` を編集して、重複している ref を削除することで対応できます。
```
vim .git/packed-refs   
```

## SSH鍵生成とクリップボードコピー
```
ssh-keygen -t rsa
```

```
pbcopy < ~/.ssh/id_rsa.pub
```
GitHubやサーバーに貼り付け可能
メール本文の自動変換による不具合

メールの本文を読んですごい現象にぶつかりました。

A  さんのスマホでは、次のような文章でした。

![Screenshot 2025-05-03 18.19.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/250835d2-f890-4b80-b7c3-2c20f191e053.png)

それを、私に転送してもらいました。
私の環境では、次のようになっていました。

![Screenshot 2025-05-03 18.19.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/86cc640d-fb16-41af-b071-23fbf395c5fe.png)

ここからは推測ですが、
スマホの自動翻訳で、
日本語　-> 中間言語 -> 日本語
という変換が行われているようです。

## 追加情報
同様な現象にぶつかった方は、教えて下さい。