OmniAICreator/Qiita-1.07M huggingface dataset:
🚰 機械学習におけるリーケージ（leakage）ってなに？中学生でも分かるようにわかりやすく解説！

こんにちは！  

今日は「リーケージ（leakage）」という、**AIや機械学習の世界で気をつけなきゃいけない問題**について、中学生でもわかるように説明します！

実はこれ、「AIがズルして成績がよく見えてしまう」ような現象なんです。  
くわしく見ていきましょう！

---

## 🤖 機械学習はどうやって学ぶ？

まずはおさらい。  
AIや機械学習は、たくさんのデータから「パターン」を学びます。

たとえば：

- 📸 画像から「これは猫か犬か」を学ぶ  
- 🏠 家のデータから「この家はいくらくらいかな」を予測する  

こういう「予測モデル」を作るんですね。

そして、「**学習用データ**」と「**テスト用データ**」を分けて、**本当にうまく予測できているかをチェック**します。

---

## 🚨 リーケージとは？

「リーケージ（leakage）」とは、**AIがズルして未来の情報を先に知ってしまう**こと！

たとえば：

- 本当はAIが知らないはずの「正解のヒント」がデータに入っていた  
- 学習用とテスト用のデータが混ざっていた  

こんなことが起きると、AIは「えへへ、もう答え知ってるもんね〜」という状態になります

---

## 🎮 たとえ話で考えてみよう

### 🏫 テストのズルを例に…

学校のテストで、本当は**カンニング禁止**なのに、もし**カンニングペーパー**をこっそり持っていたら？

テストの点数は**すごく良くなっちゃう**けど、それって**本当の実力じゃない**ですよね。

リーケージは、AIがカンニングしているのと似ています！  
「すごく高い精度が出た！」と思っても、実はズルしていただけだった…ということがあるのです。

---

## 🧐 どんなときに起きるの？

リーケージは思いがけないタイミングで起きやすいです。  
例をいくつか紹介します。

### 1️⃣ 時間の情報が入っていた

未来の情報（たとえば、将来の売上や入院後のデータ）を間違って学習に使ってしまった。

### 2️⃣ データが混ざっていた

学習用とテスト用で同じ人のデータが両方に入ってしまった。

### 3️⃣ 「正解に直結する特徴」を使っていた

「売上を予測する」のに、「その月の売上金額」というカラム（列）を使っていた。  
→ それはもう答えそのものですよね！

---

## 😱 なにが問題なの？

リーケージがあると、**AIのテスト結果がめちゃくちゃよく見えてしまいます**。  
でも実際に本番で使うと、**ぜんぜん正確じゃない**ということになります。

つまり、**AIが役に立たなくなる**のです。

---

## ✅ どうすれば防げる？

| 対策 | 内容 |
|------|------|
| データをよくチェックする | 「未来の情報」や「答えそのもの」が入っていないか確認 |
| 学習用とテスト用をしっかり分ける | 同じ人のデータが両方に入らないようにする |
| 変な特徴量（特徴のデータ）を使わない | 本当に必要な情報だけを使う |

とにかく「ズルをしていないか？」を**しっかり確認すること**が大切！

---

## 🎓 まとめ

| 用語         | 意味 |
|--------------|------|
| リーケージ（leakage） | AIが「未来の情報」や「答えそのもの」を学習してしまうズル |
| なにが起きる？ | テスト結果が良く見えても、本番で役に立たない |
| 防ぐには？ | データをしっかり確認して、正しく学習させる |
ネットワークを構成する装置の用途や機能

# はじめに

私たちが日常的に使うインターネット。その裏側では、さまざまなネットワーク機器が連携して情報の送受信を実現しています。今回は、**ゲートウェイ・ブリッジ・リピータ・ルータ**といった代表的なネットワーク機器について、その機能とOSI参照モデルとの関係を解説します。


## ゲートウェイ

ゲートウェイ（Gateway）は、**異なるプロトコルやアーキテクチャのネットワークを接続**するための装置です。たとえば、企業のイントラネットとインターネット間など、全く異なるネットワーク間で通信する際に必要です。

* **主な役割**：プロトコルやデータ形式の変換
* **OSI参照モデル**：**全7層**すべての変換に関与可能

ゲートウェイはネットワーク通信における「翻訳者」のような存在で、メールゲートウェイ、VoIPゲートウェイなど、特定の用途に特化したものもあります。


## ブリッジ

ブリッジ（Bridge）は、**異なるネットワークセグメント（LAN同士）を接続**する装置です。MACアドレスを基に、必要なフレームだけを中継する**フィルタリング機能**を備えています。

* **主な役割**：フレームの転送とフィルタリング
* **OSI参照モデル**：**第2層（データリンク層）**

ブリッジは、同じプロトコル内でネットワークを効率よく分割・統合するために使われ、スイッチの前身とも言える存在です。


## リピータ

リピータ（Repeater）は、**減衰した電気信号を再生・増幅**して伝送可能な状態に戻す装置です。これにより、ネットワークの物理的な距離を延長することが可能になります。

* **主な役割**：信号の再生・増幅
* **OSI参照モデル**：**第1層（物理層）**

ケーブルの長さによって劣化する信号を補うために使用され、イーサネットなどの有線ネットワークでは特に重要な存在です。


## ルータ

ルータ（Router）は、**異なるネットワーク同士を接続**し、**IPアドレス**を基に最適な経路を選んでパケットを転送します。インターネットにおける中心的存在です。

* **主な役割**：パケットの経路選択と転送
* **OSI参照モデル**：**第3層（ネットワーク層）**

また、ルータは**NAT（アドレス変換）**や**フィルタリング、フロー制御**などの高度な機能も備えています。


## まとめ：役割に応じた階層の理解がカギ

| 装置名    | 主な役割                | OSI層        |
| ------ | ------------------- | ----------- |
| ゲートウェイ | プロトコル変換・異種ネットワークの接続 | すべての層       |
| ブリッジ   | フレーム中継（MACアドレスに基づく） | 第2層（データリンク） |
| リピータ   | 信号の再生・増幅            | 第1層（物理）     |
| ルータ    | パケットの転送と経路制御（IPベース） | 第3層（ネットワーク） |
メモ書き_現場Excelが重いときに見直すべき４つのポイント

## はじめに
今回の内容は私が現場のExcelが重くて資料作成中に落ちまくるのに対しての応急処置として行った設定の備忘録である.可能ならばPCのスペックアップを上に提案するのが一番早い.

## そもそもなぜ落ちる？
なぜ落ちるのかの原因はおそらく以下2パターンに集約される.

1\. PCのメモリ不足
➡作業に対してPCの**スペックが足りていない**.

2\. Excelの作業ファイルが**馬鹿みたいにでかい**.
➡数10万件単位のデータを格納し、そのすべてに関数が入っている等々...

## 実際にやった対策①　いつ落ちてもいいように備える
・こまめに`Ctrl`+`S`で**保存をする**ように徹底.
## 実際にやった対策②　負担のかかる作業は避ける
・資料作成中で一度使った関数(COUNTIF(), VLOOKUP()等)の出力結果を**文字列で貼りなおす**.
・**シートをまたいだ関数**は極力使わない。（シートをまたぐほうが重くなる感覚）
・関数の**自動計算をOFF**に設定

## 実際にやった対策③　Excelが軽くなる設定を試す
・自動保存の間隔を変更（間隔が長いほど軽くなるらしい）

https://www.pc-koubou.jp/magazine/59285
・ハードウェア グラフィックス アクセラレータ(GPU使用設定)のチェックを無効にする

https://learn.microsoft.com/ja-jp/office/troubleshoot/performance/office-applications-not-responding#option-3-manually-disable-hardware-acceleration-in-office
SwiftUIの基本：リストの編集・追加・削除・並び替えの実装を簡単に説明してみました！🔰

SwiftUIでは、非常にシンプルなコードでリストの「追加」「削除」「並び替え」「編集モード」などを実装することができます。この記事では、以下の4つの基本機能を実装する方法を丁寧に解説します。

- アイテムの追加（Add）

- アイテムの削除（Delete）

- アイテムの並び替え（Move）

- 編集モード（Edit）


基本構造：Listとデータの準備
--

```swift
import SwiftUI

struct ContentView: View {
    @State var items = ["Apple", "Banana", "Orange"]
    @State var newItem = ""

    var body: some View {
        NavigationStack {
            VStack {
                HStack {
                    TextField("新しいアイテム", text: $newItem)
                        .textFieldStyle(RoundedBorderTextFieldStyle())
                    Button("追加") {
                        addItem()
                    }
                }
                .padding()

                List {
                    ForEach(items, id: \.self) { item in
                        Text(item)
                    }
                    .onDelete(perform: deleteItems)
                    .onMove(perform: moveItems)
                }
                .navigationTitle("フルーツ一覧")
                .toolbar {
                    EditButton() // 編集ボタンを追加
                }
            }
        }
    }

    // 追加機能
     func addItem() {
        guard !newItem.isEmpty else { return }
        items.append(newItem)
        newItem = ""
    }

    // 削除機能
     func deleteItems(at offsets: IndexSet) {
        items.remove(atOffsets: offsets)
    }

    // 並び替え機能
     func moveItems(from source: IndexSet, to destination: Int) {
        items.move(fromOffsets: source, toOffset: destination)
    }
}

```

 各機能のポイント解説
--
 
 1.追加（Add）
 --

```swift
 @State var newItem = ""

 TextField("新しいアイテム", text: $newItem)
Button("追加") {
    addItem()
}


 func addItem() {
        guard !newItem.isEmpty else { return }
        items.append(newItem)
        newItem = ""
    }
 ```
 TextFieldに入力された内容を@Stateで管理し、append()でリストに追加します。

 2.削除（Delete）
 ---

 ```swift
.onDelete(perform: deleteItems)

func deleteItems(at offsets: IndexSet) {
        items.remove(atOffsets: offsets)
    }
 ```

 ListのForEachに.onDeleteを付けることで、スワイプ削除が可能になります。

 3.並び替え（Move）
 --
```swift
.onMove(perform: moveItems)

func moveItems(from source: IndexSet, to destination: Int) {
        items.move(fromOffsets: source, toOffset: destination)
    }
```
長押しでドラッグし、アイテムを並び替えることができます。


4.編集モード（Edit）
---

```swift
.toolbar {
    EditButton()
}
```
EditButton()を配置するだけで、削除と並び替えができる編集モードが使えます。


まとめ
--
コードでリストの追加・削除・並び替え・編集は、アプリのToDoリストや買い物リスト、学習リストなど、さまざまなシーンで役立つ機能なので、ぜひ学習してみてください！✌️
カージオイドと放物線の極座標表示について

# はじめに
カージオイド曲線と放物線は極座標表示では、逆数の関係性にある。そこで、今回はカージオイド曲線と放物線の極座標表示について紹介し、Pythonを用いてそれらの曲線を図示することを試みる。

# 直交座標と極座標の関係性

直交座標と、極座標は三平方の定理と三角関数によって密接に繋がっている。
```math
\begin{equation}
\left\{ \,
    \begin{aligned}
    & x=  r\cos\theta \\
    & y= r\sin\theta \\
    \end{aligned}
\right.
\end{equation}
```

つまり、


```math
\begin{equation}
\left\{ \,
    \begin{aligned}
    & r=\sqrt{x^2+y^2} \\
    & \theta= \tan^{-1}(\frac{y}{x})\\
    \end{aligned}
\right.
\end{equation}
```

上の関係式を上手く使いこなすことで、極座標と直交座標の変換ができる。


# カージオイド
$r=a+\cos\theta$($a$は実数の定数)の極座標表示で表される曲線をカージオイドという。

ちなみに、直交座標を用いて、媒介変数表示をすると以下のようになる。

```math
\begin{equation}
\left\{ \,
    \begin{aligned}
    & x=  r\cos\theta =(a+\cos\theta)\cos\theta\\
    & y= r\sin\theta =(a+\cos\theta)\sin\theta\\
    \end{aligned}
\right.
\end{equation}
```

以下、$a=1$のときのカージオイドのグラフを示す。

![カージオイド_plot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/b6ce6f4b-55c2-4257-9c86-3295506720f2.png)

このように、ハートのような形が特徴的で、サイクロイドの仲間らしい。

# 放物線
一方で、$r=(1+\cos\theta)^{-1}$の極座標表示で表される曲線は放物線になる。これを示す。


```math
\begin{equation}
\left\{ \,
    \begin{aligned}
    & x=  r\cos\theta =\frac{\cos\theta}{1+\cos\theta}\\
    & y= r\sin\theta =\frac{\sin\theta}{1+\cos\theta}\\
    \end{aligned}
\right.
\end{equation}
```
したがって、

```math

\begin{equation}
\left\{ \,
    \begin{aligned}
    & x=  \frac{1}{\frac{1}{\cos\theta}-1}\\
    & y= \frac{\tan \theta}{\frac{1}{\cos\theta}-1}\\
    \end{aligned}
\right.
\end{equation}
```

したがって、

```math

\begin{equation}
\left\{ \,
    \begin{aligned}
    & \frac{1}{\cos\theta}=1+\frac{1}{x}\\
    & y= \frac{\tan \theta}{\frac{1}{\cos\theta}-1}\\
    \end{aligned}
\right.
\end{equation}
```

ここで、

```math
\frac{1}{\cos^2 \theta}=(1+\frac{1}{x})^2
```

より、三角関数の相互関係より、

```math
\tan^2\theta=\frac{1}{\cos^2 \theta}-1=(1+\frac{1}{x})^2-1=\frac{2x+1}{x^2}
```


ここで、

```math
y^2=(\frac{\tan\theta}{\frac{1}{\cos\theta}-1})^2=\frac{\frac{2x+1}{x^2}}{\frac{x+1}{x}-1}=2x+1
```
したがって、$x$軸対称な放物線を描く。

![放物線極座標_plot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/16261b14-d6a5-4d94-859d-22efa4b64e5e.png)

# プログラム
参考までにグラフの作成に使用したプログラムを載せておく。

```python polar_coordinates.py
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math

num=10000

theta = np.linspace(0, 2 * np.pi, num)
# カージオイドのパラメータ
r1=(1-np.cos(theta))

x1=r1 * np.cos(theta)
y1=r1 * np.sin(theta)
plt.figure(figsize=(6, 6))
plt.plot(x1, y1, label='r=1+cos(θ)', color='blue')
plt.title('カージオイドのプロット')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.savefig('カージオイド_plot.png', dpi=300)
plt.show()

r2=1/r1

x2=r2 * np.cos(theta)
y2=r2 * np.sin(theta)
plt.figure(figsize=(6, 6))
plt.plot(x2, y2, label='r=1/(1+cos(θ))', color='blue')
plt.title('放物線のプロット')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.savefig('放物線極座標_plot.png', dpi=300)
plt.show()
```

# まとめ

今回は、カージオイド曲線と放物線の極座標表示について紹介し、それぞれが逆数の対応関係にあることを確認した。また、プログラムをとおして、グラフを作成することで、2つの曲線の理解を深めた。
現場猫とIT業界の親和性

# 現場猫とIT業界の親和性
なんでだろうか？IT土方と言われるゆえんか・・・

## 現場猫
![genbaneko001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110729/66aeb16b-d8cc-4079-ad2b-8e1b75ab1925.png)

## 現場猫のオアシス
![genbaneko002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110729/d99a4f7e-b75d-4ba0-bc3a-78ea4b2251b6.jpeg)

## 現場猫のチェック
![genbaneko003.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110729/af1da8c9-630e-46d9-acab-665ed06ae535.jpeg)
カナリアリリース

「**カナリアリリース（Canary Release）**」とは、ソフトウェアやシステムの新しいバージョンを**一部のユーザーに限定して段階的に公開・展開**するリリース手法のことです。問題がないことを確認してから、すべてのユーザーへ展開します。

---

## 🐤 名前の由来

炭鉱でカナリアを使って有毒ガスの有無を確認していたことから、「先に一部のユーザーに使わせて安全性を確認する」ことを指すようになりました。

---

## 🔁 カナリアリリースの流れ（例）

1. 新しいバージョンを5%のユーザーに公開
2. 問題がなければ次に20%、50%、最終的に100%へ展開
3. 問題が発生した場合は、すぐにロールバック（元のバージョンに戻す）

---

## ✅ メリット

* バグの早期発見ができる
* 全体に悪影響を与えずにリスクを軽減できる
* 実ユーザーからのフィードバックが得られる

---

## ⚠️ 注意点

* ユーザーごとの環境差（OS、端末など）で問題が起こることがある
* モニタリングやロールバックの仕組みが必要

---

## 👀 他の類似リリース手法との違い

| 手法                 | 特徴                             |
| ------------------ | ------------------------------ |
| **カナリアリリース**       | 一部ユーザーに新バージョンを提供して様子を見る        |
| **ブルーグリーンデプロイメント** | 旧環境（Blue）と新環境（Green）を切り替えてリリース |
| **ローリングアップデート**    | 全体を少しずつ更新していく                  |

---
[git] submoduleの取得時にそれがもっているsubmoduleも取得する

# 結論
```
git submodule init
git submodule update --init --recursive
```
もしくは
```
git clone --progress --recursive "リポジトリのURL"
```

# 解説
コマンドの意味
--init
初めてクローンしてきたリポジトリに対して、.gitmodules に記載されたサブモジュールを初期化する。

--recursive
ネストされたサブモジュールも含めて再帰的に処理する。

update
サブモジュールの内容を指定されたコミットに更新（checkout）する。
GitHub Pull Request 強制承認者


## はじめに

最近は小規模の開発が多かったので、セルフマージ率が高かった。。。
正しく `Pull Request` を運用しないといつか大変な事になってしまうかも、、、
そのために、「他者の承認を強制するルール」を設定します。

## Pull Reuest レビュー

### レビューアクション

`Pull Request` から "File Changed" タブを選択
"Review changes" ボタンをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/978129b2-b9d9-4f2a-9c69-08ffaa5663e8.png)

### Comment / Approve / Request Changes

#### Comment

承認も非承認もしない場合は、 `Comment` を選んでコメントを書いて "Submit Review" ボタンをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/87afc054-ea6b-441c-bb93-bc80f37d5564.png)

#### Approve

PRを見て「この変更でOK」って思ったら、`Approve` を選んで "Submit Review" ボタンをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/fe79e91f-0a7f-47f8-b7ca-2f43be6cc606.png)

#### Request Changes

「この状態ではPRは通せない」「修正が必要だ」と思ったら `Request Chang` を選んで "Submit Review" ボタンをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/4733b271-735c-4c11-94cd-4cbd6cd51cfd.png)

### Approve がついていない状態

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/b603db6b-0bad-4e65-ae84-26573f7df7c2.png)

## GitHub の設定

GitHub プロジェクト -> Settings タブ -> Code and automation -> Rulesets -> New ruleset ボタン

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/b2a41f6f-93a8-4c7a-b62d-7261619a53fa.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/98fb6406-48d8-4e6d-b2d7-4b23c5abb1ff.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/509669bb-dd90-420a-8c89-8eed1dbcf3ab.png)


## おわりに

`Pull Reuest` は `CI/CD` を回すトリガーだけではありません。
ちゃんと運用して、レビューイ／レビュアーの安心／安全を保ちましょう。

合わせて、フォーマッターやレビュー指針を正しく運用して、レビュアーが楽になる工夫もしていきたいですね。

---

**参考（感謝）**

- [Pull Requestを確認・承認してMergeする方法](https://howpon.com/5895)
- [Github レビューでの Approve / Request Changes / Comment の使い方](https://qiita.com/YumaInaura/items/8223add6d8335a2eda7f)
Entra IDと AWS IAM Identity Center連携

Entra IDと **AWS IAM Identity Center** を連携することで、Entra IDで管理しているユーザー・グループをAWSに自動同期し、SSO（シングルサインオン）やアクセス制御が実現できます。ここでは、SCIM連携による **ユーザー/グループのプロビジョニング** と、**SAML連携によるSSO構成** の流れを紹介します。

---

## 🔄 Entra ID × AWS IAM Identity Center 連携の全体フロー

1. **AWS側：IAM Identity CenterでSCIMプロビジョニングを有効化**
2. **AWS側：SCIMエンドポイントURLとトークンを取得**
3. **Entra ID側：AWSアプリを登録（エンタープライズアプリ）**
4. **SSO設定：SAML連携を設定**
5. **SCIMプロビジョニング設定：SCIM連携を設定**
6. **ユーザー/グループ割り当てを設定**
7. **同期・ログイン確認**

---

## 🔧 ステップごとの詳細

### ① AWS IAM Identity Center 側設定

1. AWSマネジメントコンソールへログイン
2. サービス「IAM Identity Center」 > 「設定」 > 「プロビジョニング」
3. プロビジョニング方式を **SCIM** に変更
4. 表示される「**SCIMエンドポイント URL**」と「**アクセストークン**」をコピー
   　※後ほどEntra ID側で使います。

---

### ② Entra ID 側：エンタープライズアプリの作成

1. [Entra 管理センター](https://entra.microsoft.com) にアクセス
2. \[エンタープライズ アプリケーション] > \[+ 新しいアプリケーション]
3. 「**AWS IAM Identity Center**」で検索し、テンプレートを使って作成

---

### ③ SAML SSO構成（シングルサインオン）

1. Entra アプリの「シングルサインオン」メニューへ
2. SAMLを選択し、以下を設定：

| 項目                | 値（AWSで発行されたSAML設定値を使う） |
| ----------------- | ---------------------- |
| IDプロバイダーのURL      | AWSのSAMLメタデータ          |
| Entity ID、ACS URL | AWSが提示する値              |

3. ダウンロードした **SAML証明書**（Base64）をAWS側にアップロード

---

### ④ SCIM プロビジョニング設定

1. Entra アプリの「プロビジョニング」メニューへ
2. **プロビジョニング方法**を「自動」に設定
3. 以下を設定：

| 項目         | 内容                   |
| ---------- | -------------------- |
| テナントURL    | AWSから取得したSCIMエンドポイント |
| シークレットトークン | AWSから取得したSCIMトークン    |

4. 「テスト接続」で疎通確認 → 成功したら保存

---

### ⑤ ユーザー・グループの割り当て

1. Entra アプリの「ユーザーとグループ」へ移動
2. 必要なユーザーやグループを割り当て

※これにより、Entra IDに登録されているユーザー/グループが、AWS IAM Identity Centerに自動作成されるようになります。

---

### ⑥ 同期と動作確認

* 数分〜数十分後に、自動同期が行われ、AWS IAM Identity Center側にユーザー/グループが作成される
* ユーザーが [https://myapplications.microsoft.com](https://myapplications.microsoft.com) や AWS のユーザーポータルからログインできるか確認

---

## ✅ メリット

* ユーザー管理をEntra IDで一元化
* 退職・異動に応じた自動ユーザー削除・更新
* AWSのマルチアカウント環境に柔軟に対応可能

---
おすすめ本って結局どれ？を解決するランキングアプリを作った話

## おすすめ本って結局どれ？を解決するランキングアプリを作った話

### はじめに

新しい技術を学ぼうとしたとき、最初に悩むのが「どの本を選ぶべきか？」という問題です。Amazonレビューを見たり、ブログを探したりするけれど、結局どれが自分に合っているのか分からない……そんな経験はありませんか？

今回作成したアプリ「考えない本選び」は、そんな悩みを少しでも軽くするために生まれました。

### アプリの概要

このアプリでは、「誰が紹介しているか」ではなく「どれだけ多くの人が紹介しているか」に注目して、技術書をランキング化しています。

Twitterで多くの人が言及している本を抽出し、その紹介数でランキングを作成。さらに、実際の紹介ツイートも引用し、本の雰囲気や評判がわかるようにしています。

第一弾として取り上げたジャンルは「SQL」です。

#### 特徴

* Twitterの投稿から書名を自動抽出
* 紹介件数でランキング化
* 実際の紹介ツイートを引用
* Amazonリンクを付与

---

### 技術構成

#### Twitter APIでのデータ取得

* Twitter APIを使って、「SQL 本」や「SQL 参考書」などのキーワードでツイートを取得
* 日本語ツイートのみを対象にフィルタリング
* 期間は過去1ヶ月・1年間の2通りで収集

#### 書名抽出とランキング生成

* 正規表現と辞書ベースを組み合わせた書名抽出ロジック
* 表記ゆれ（例：「スッキリわかるSQL入門」と「スッキリSQL」）を統合
* 出現数でソートしてランキングを生成

#### フロントエンド

* ノーコードツール「STUDIO」でランキングサイトを構築
* スマホ対応を意識したレスポンシブデザイン
* Amazonアフィリエイトリンクの設置

---

### 使い方（画像予定）

1. トップページで技術ジャンルを選択（今回はSQL）
2. ランキング表示を確認
3. 各書籍のタイトル、紹介ツイート、リンクをチェック

---

### こんな人に使ってほしい

* SQLを学びたいけど、どの本が良いか迷っている人
* 「人気＝良書」として効率的に選びたい人
* 他人のリアルな感想を知りたい人

---

### 今後の展望

* AWS、Python、基本情報技術者試験などジャンルの拡充
* 書籍データの自動更新（バッチ処理）
* ユーザー要望をもとにカテゴリ追加

---

### サイトリンク & SNS

* 📘 [アプリはこちら](https://violet024806.studio.site)


---

### おわりに

「本を選ぶのに時間をかけすぎた…」という体験を減らしたいという思いでこのアプリを作りました。

技術学習の第一歩として、少しでもお役に立てたら嬉しいです。

ご意見・ご感想もぜひお寄せください！
【備忘録】GitHub Actionsをローカルで動かす！`act` 導入ガイド

# 概要
GitHub Actions をローカルで検証したいとき、最も有力なツールが [`act`](https://github.com/nektos/act) です。

CIへpushする前にローカルで `.github/workflows/*.yml` がちゃんと動くか確認したい人向けに、**Ubuntu / WSL2 環境での導入方法をまとめました。**

##  `act` とは？

- GitHub Actions のワークフロー（`.yml`）を **ローカルでそのまま再現実行**できるCLIツール
- Dockerコンテナ内でActionsをシミュレートする
- **CIのデバッグ高速化・効率化**にとても便利

## 前提
- Ubuntu 20.04〜 または WSL2（Windows + Ubuntu）
- [Docker Desktop for Windows](https://www.docker.com/products/docker-desktop/) がインストール・起動済み（WSL統合有効）
- WSL側で `docker info` が正常に通ること

## `act` のインストール手順
```bash
# 圧縮ファイルダウンロード
curl -LO https://github.com/nektos/act/releases/download/v0.2.78/act_Linux_x86_64.tar.gz

# 解凍して配置
tar -xzf act_Linux_x86_64.tar.gz
sudo mv act /usr/local/bin/

# 動作確認
which act
act --version
```
出力例：
```bash
/usr/local/bin/act
act version 0.2.78
```

# 実行してみる
```
act -P ubuntu-latest=ghcr.io/catthehacker/ubuntu:act-latest

## envを指定して実行
act -P ubuntu-latest=ghcr.io/catthehacker/ubuntu:act-latest --env-file .github/workflows/.env.ci
```
このコマンドは以下のように動作します：
- .github/workflows を読み込み
- ubuntu-latest イメージを使って各ジョブをシミュレーション
- CIとほぼ同じ流れでローカル実行される

# 注意点
- act は内部で Docker を使います
- WSL2 の Ubuntu から実行する場合、Windows側の Docker Desktop が起動している必要あり

# 最後に
ローカルで GitHub Actions を叩けると、CI失敗の試行錯誤が劇的に早くなります。
ぜひ導入して、CIの無駄待ちを減らしていきましょう！
MCP (Model Context Protocol) とは？



## MCPとは
データソースとAI アシスタントツールを繋げるもの。
Claude や Chat GPT にデータ（コンテクスト）を渡す共通のプロトコル。
<hr>
よく例で使われる表現<br>
AI アプリケーションのUSB-C
<hr>

[https://www.anthropic.com/news/model-context-protocol](https://www.anthropic.com/news/model-context-protocol)

<hr>

## MCPを使ってできること
<hr>

## データベース情報（サンプルデータ）
<hr>

## applicants テーブル
| id | name      | email             | phone        |
|----|-----------|-------------------|--------------|
| 1  | 山田太郎  | taro@example.com  | 090-1111-2222|
| 2  | 佐藤花子  | hanako@example.com| 080-3333-4444|
<hr>

## applications テーブル
| id | job_id | applicant_id | applied_at               |
|----|--------|--------------|--------------------------|
| 1  | 1      | 1            | 2025-06-01 11:20:33.6487 |
| 2  | 2      | 2            | 2025-06-01 11:20:33.6487 |
| 3  | 3      | 1            | 2025-06-01 11:20:33.6487 |
<hr>

## jobs テーブル
| id | shop_id | title            | description   | wage | shift        |
|----|---------|------------------|--------------|------|--------------|
| 1  | 1       | ホールスタッフ   | 接客・配膳業務| 1200 | 10:00-15:00  |
| 2  | 1       | キッチンスタッフ | 調理補助      | 1300 | 17:00-22:00  |
| 3  | 2       | ホールスタッフ   | 接客・配膳業務| 1100 | 9:00-14:00   |
<hr>

## shops テーブル
| id | name            | address           | phone       |
|----|-----------------|-------------------|-------------|
| 1  | 渋谷カフェ      | 東京都渋谷区1-1-1 | 03-1234-5678|
| 2  | 新宿レストラン  | 東京都新宿区2-2-2 | 03-2345-6789|
<hr>

![Screenshot 2025-06-01 at 18.36.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492809/7f8f86bb-a702-40b4-981f-5c841afb57b7.png)
<hr>

![Screenshot 2025-06-01 at 18.46.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492809/846c07c3-7ba1-4ad6-8c49-88c146ae4aab.png)
<hr>

![Screenshot 2025-06-01 at 18.50.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492809/cf57522d-c676-4ce0-9960-fbdd601c8d26.png)
<hr>

![Screenshot 2025-06-01 at 18.51.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492809/c54b339b-9ae8-4c74-b7e4-826b9f28998e.png)
<hr>

![applications_per_month.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492809/c6af818b-ca6b-4347-a806-665c5ade3ef5.png)  
<hr>


PostgreSQL 以外にも多くのMCPサーバーがある。
[https://github.com/modelcontextprotocol/servers](https://github.com/modelcontextprotocol/servers)
<hr>

## アーキテクチャー
![Screenshot 2025-06-01 at 14.53.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492809/89c01b69-1805-4934-b33e-97aac6203447.png)

Host with MCP Client
Claude Desktopアプリ、VSCode


MCP Server
MCPを通じて特定の機能を公開する軽量プログラム
「サーバー」と言いつつ、クライアントアプリ内で動作するケースが多い。
<hr>

[https://modelcontextprotocol.io/introduction#general-architecture](https://modelcontextprotocol.io/introduction#general-architecture)
Promiseチェーン と async/await の使い方

Promiseとasync/awaitはどちらか一方しか使わないと誤解していました。

そこで、組み合わせの方法と使い分けの基準を整理しました。

---

## 1. よくある誤解

| 誤解                               | 実際                                 |
| -------------------------------- | ---------------------------------- |
| Promiseとasync/awaitはどちらか一方を使う | `async/await`は`Promise`を読みやすくした書き方。併用できる |
| Promiseチェーンは古い                   | 今でも関数的な処理や動的な直列制御で有効               |
| async/awaitですべて対応できる             | 処理の内容によってはPromiseチェーンの方が適する場面もある   |



## 2. 単体での使い分け表

| 判断基準              | 向いている書き方    | 理由                                   |
| ----------------- | ----------- | ------------------------------------ |
| 長い手順で流れを明確にしたい    | async/await | 順次処理が上から下に読みやすい／エラーをtry-catchで一括管理可能 |
| 小さな処理を関数的につなぎたい   | Promiseチェーン | `.then()`で宣言的にパイプ構築できる               |
| forEachなどで順次処理したい | Promiseチェーン | 動的な直列処理が組みやすい                        |
| ライブラリがPromiseを返す  | どちらでも可      | `.then()`でも`await`でも受けられる            |



## 3. 組み合わせパターン

### 3-1. async関数の中にPromiseチェーンを使う

```js
async function fetchAndRender() {
  const items = await fetch(url)
    .then(r => r.json())
    .then(json => json.items);
  render(items);
}
```

**ポイント**：`await`はチェーン全体の完了を待つ。

この書き方のメリットについては、以下の記事で詳しく解説しています：
[なぜ async/await で Promise チェーン全体をまとめるのか？](https://qiita.com/mamoru2002/items/5d88dd8e7cd47698d4e0)

---

### 3-2. Promiseを返すユーティリティ関数をawaitで使う

```js
function compressFile(file) {
  return new Promise((resolve, reject) => { /* 処理 */ });
}

async function handleUpload(file) {
  const zipped = await compressFile(file);
  await upload(zipped);
}
```

**ポイント**：既存のPromise関数はそのまま`await`で待てる。

---

### 3-3. ループで順次処理（動的な直列処理）

```js
let chain = Promise.resolve();
urls.forEach(url => {
  chain = chain.then(() => fetch(url));
});
await chain;
```

**ポイント**：Promiseチェーンで構築 → 最後にawaitで待機。

---

## 4. まとめ

1. `async/await`は`Promise`を読みやすくした書き方であり、内部動作は同じ。
2. 現場では単体ではなく**併用**されることが一般的。
3. 処理の「流れの読みやすさ」「動的構築の必要性」「エラー管理の範囲」に応じて使い分けるとよい。
材料力学「示力図 とは何ですか。」をAI先生に聞きました。 ・トラス構造における示力図（軸力図）

・私が考えて質問をしなくても、ChatGPT先生が提案されますので、質問リストの意味がなくなってきました。
・**「はい。」の直前のChatGPT先生の提案のみを拾う事ができますか。** 
　ChatGPT先生へどのように聞けばいいですか?
# (本日の)ChatGPT先生へ

#### 質問リスト
・質問リストの追番は無視して下さい。１個ずつです。途中の回答表示は省略しています。
```
# 質問リスト
1. 示力図　とは何ですか。
2. 教えて下さい。
3. トラス構造で。
4. 3で
5. 3で
6. 2で
7. 1で
8. 1
9. はい
10. はい。
11. はい。
12. はい。
13. 2
14. お願いします。
15. 私の質問をMarkdown形式でリスト化して出力して。Markdown形式でリストからアスタリスクは削除して。1行目に、# 質問リスト の文字を出力して。最後の質問も追加して下さい。追番を追加して下さい。Markdown形式で。
```
(途中省略)
>🏗️ 1. 例題：5節点Warrenトラス
>🔤 2. Bow’s Notation の適用
>🧮 3. Cremona図での力の釣り合い
>🔁 4. 各節点で繰り返す
>🎨 5. FreeCADで作図する場合（概要）
>📌 6. ポイントの整理
>了解しました。では、Warrenトラス（5節点）の構造図とCremona図をFreeCADのDraftモジュールで描くスクリプトを順にご紹介します。
🖊️ スクリプト：部材の色分け（引張：青、圧縮：赤）


**・反応しません。あきらめました。**
```python
import FreeCAD as App

doc = App.ActiveDocument

# 色分けルール：オブジェクト名に対応する力の種類を指定
# オブジェクト名 : "tension"（引張） or "compression"（圧縮）
force_state = {
    "Line": "tension",       # 例）部材a
    "Line001": "compression",# 例）部材f
    "Line002": "tension",    # 例）部材b
    "Line003": "compression",
    "Line004": "tension",
    "Line005": "compression",
    # 必要に応じてここに追加（FreeCAD上の線名に合わせて）
}

# 色指定（RGB 0〜1）
color_map = {
    "tension": (0.0, 0.0, 1.0),      # 青
    "compression": (1.0, 0.0, 0.0),  # 赤
}

# 適用
for obj_name, force_type in force_state.items():
    try:
        obj = doc.getObject(obj_name)
        if obj and force_type in color_map:
            obj.ViewObject.LineColor = color_map[force_type]
    except Exception as e:
        print(f"{obj_name}: エラー - {e}")
```
・エラーがでます。あきらめました。


# Gemini先生へ

# copilot先生へ

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

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

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

https://qiita.com/mrrclb48z/items/53640cff620d13d4b50c
ショート動画を毎日投稿して見えてきたことまとめ【YouTube運用アナリティクス公開】

#こんにちは、syunppです。

普段はUnityを使って個人開発をしていますが、最近YouTubeショートの**毎日投稿**にチャレンジしています。この記事では、\*\*12日連続でショート動画を投稿した結果、どんな変化があったのか？\*\*リアルなアナリティクスと体験をまとめました。

---

## 1. 12日連続投稿のアナリティクス公開

### 直近のチャンネル視聴回数・登録者数・総再生時間

![YouTubeショート アナリティクス](http://syunpp.com/wp-content/uploads/2025/06/Short.png)

* 視聴回数：約8,400回（12日間で到達）
* 総再生時間：5.6時間
* 登録者：+3人
※5/20くらいから連続投稿を始めています
　5/15あたりに動画出しているのはリリースしたアプリの告知用動画ですが、この時はさして再生されず、こんなものなのかな？と考えていた時になります。
---

## 2. 毎日投稿してみて感じたリアル

### 伸びる動画／伸びない動画の違い

現時点では「これがバズる！」という明確な傾向は分かっていません。同じような内容・形式でも、突然伸びる動画が出たり、まったく伸びないものもあります。

特に最初の10日ほどは緩やかな伸びでしたが、10日目を境に急に再生数が増える動画が出てきました。

* ネタや編集を特に変えた覚えがなくても、なぜか突然伸びる動画が出ることがあり、自分でも理由は正直よく分かっていません
* 「このジャンルが強い！」などの確信はまだなし
* 継続していると“アルゴリズムに載る”瞬間があるかも？

このあたりは今後も投稿を続けて、もう少しデータが集まったら再度まとめてみる予定です。

ただ一つ言えるのは、少なくとも登録者が増えていればOKということ。どんなにバズらなくても、誰かが興味を持ってくれている、その積み重ねが一番うれしいです。

基本20:00頃にアップロードをしているのですが、少し遅くなって21:00頃の方が良く見られるような気もしますが、サンプルが少なすぎるため、気のせいかもしれません…

ショートは出してから3時間後くらいに一気に閲覧されるらしいという情報をもとに、20:00を基本時間としていますが、このあたりいつ出すといいのかは正直、自分が出す動画のジャンルや質にもよると思うのでトライ＆エラーで経験則を作っていくしかないのかなと感じました。

### 継続のコツ・モチベ維持

* 作業ログやストックを活用して毎日投稿をラクに
* 投稿の型・テンプレを決めると時短になる
* 「誰かの役に立つかも」「記録を残す」くらいの気軽さでOK

---

## 3. 個人開発者がショート投稿をやる価値

* 少ない労力で多くの人に見てもらえる
* ブログやアプリの認知拡大にもつながる
* コメントやリアクションがモチベになる

---

## 4. 今後の方針・改善点

* シリーズ化や再生リストを活用していく予定
* タイトルやサムネイルもいろいろ試したい
* 引き続き「毎日投稿」を継続して、また振り返り記事を出します！

---

## まとめ

YouTubeショートは、個人開発者でも「毎日コツコツ続ければ着実に露出を増やせる」と実感できました。
今後も開発や発信の過程をいろんな形でアウトプットしていきます！

---

## ブログでもUnityや個人開発ネタを発信中です！

開発ノウハウやアプリ制作過程、Unity連携系のハマりポイントなど
より深掘りした内容をブログにまとめています。
▶ [https://syunpp.com](https://syunpp.com)

## 公開中のアプリ一覧はこちら！

実際にUnityで開発してリリース済みのアプリ一覧をまとめています。
▶ [https://syunpp.com/公開中のアプリ一覧/](https://syunpp.com/公開中のアプリ一覧/)

## YouTubeショートでもゲーム開発の裏側を公開中！

Unityで制作中のゲームの進捗や演出テスト、実装の様子を
ショート動画でタイムラプス形式にまとめて発信しています。
▶[https://www.youtube.com/@syunpp\_8413/shorts](https://www.youtube.com/@syunpp_8413/shorts)
Android SystemBarの高さを取得する（最新版）

# はじめに
以前書いた、こちらの記事ではやり方が古く、非推奨だったので新しやり方を記事にしておきます。

https://qiita.com/Tsubasa12/items/9c4bd9e3ff3f5d99857e

# 実践

    ViewCompat.setOnApplyWindowInsetsListener(R.id.content) { v, windowInsets ->
      val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
      insets.top // statusBar
      insets.bottom // navigationBar
      
      WindowInsetsCompat.CONSUMED
    }

```
   windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
 ```
   の引数にはsystemBars()以外にもstatusBarBars()やnavigationBars()などを指定できるため
適宜使用用途に合わせて使っていきたい。
【React】1秒ずつ進むはずのタイマーが2秒ずつ進む？

# 発生した問題
Reactに触り始めのころ、実際にしたことです。

画面を開いたときに動く、1秒ずつ進むタイマーを作ろうとして、以下のようなコードを書いたのですが、実際にはタイマーが2秒ずつに進んでしまう、ということがありました。
```App.tsx
import { useState, useEffect } from 'react'

function App() {
  const [time, setTime] = useState(0);

  /**
   * 最初の処理
   */
  useEffect(() => {
    // 1秒ごとに1ずつ足していくインターバル
    setInterval(() => {
      setTime((prevTime) => prevTime + 1);
    }, 1000);
  }, []);

  return (
    <>
      <div>{time}</div>
    </>
  )
}

export default App

```

# 解決法1
この原因としては、React の StrictMode により、マウント時にuseEffectの処理が2回行われ、タイマーが2回起動していたからです。
StrictModeについての参考：https://qiita.com/asahina820/items/665c55594cfd55e6f14a

この問題は useEffect の return にタイマーの終了処理を書くことで解決します。（クリーンアップ関数）
```App.tsx
import { useState, useEffect } from 'react'

function App() {
  const [time, setTime] = useState(0);

  /**
   * 最初の処理
   */
  useEffect(() => {
    // 1秒ごとに1ずつ足していくインターバル
    const timerId =setInterval(() => {
      setTime((prevTime) => prevTime + 1);
    }, 1000);

    // タイマーのクリーン
    return () => {
      clearInterval(timerId);
    };
  }, []);

  return (
    <>
      <div>{time}</div>
    </>
  )
}

export default App

```
こうすることで、StrictMode による2回目のマウント時には、前のタイマーはクリーンされ停止し、1秒ずつの動作になります。

# 解決法2
またはタイマー用のstateを追加し、それを依存配列に持つuseEffect内でタイマー処理を行うことでも、正常に動作します。
```App.tsx
import { useState, useEffect } from 'react'

function App() {
  const [time, setTime] = useState(0);
  // タイマー用state
  const [isTimerStop, setIsTimerStop] = useState(true);

  /**
   * 最初の処理
   */
  useEffect(() => {
    // タイマー用stateの値を変更
    setIsTimerStop(false);
  }, []);

  /**
   * タイマー処理
   */
    useEffect(() => {
      if (isTimerStop) {
        // タイマーが止まっている場合
        return;
      }

      // 1秒ごとに1ずつ足していくインターバル
      const timerId = setInterval(() => {
        setTime((prevTime) => prevTime + 1);
      }, 1000);

      // タイマーのクリーン
      //（なくても1秒ずつの動作にはなるが、タイマーを一時停止させる必要がある場合は必須）
      return () => {
        clearInterval(timerId);
      };
    }, [isTimerStop]);// 依存配列にタイマー用stateを持たせる

  return (
    <>
      <div>{time}</div>
    </>
  )
}

export default App

```
このように書いた場合は、StrictModeにより setIsTimerStop() は2回動作しますが、useEffectでは依存配列の値が同じ場合は処理が動かないので、タイマーが2回起動することはなくなります。

以上です。
「(2022)令和4年二級建築士試験学科Ⅲ（建築構造）〔Ｎｏ．５〕」sympyのTrussでやってみた。

「(2022)令和4年二級建築士試験学科Ⅲ（建築構造）〔Ｎｏ．５〕」sympyのTrussでやってみた。
**Qiita_建築士**
https://qiita.com/mrrclb48z/items/893cb0967e4ddb2945f7

#### 公式ホームページ
(2022)令和4年二級試験問題〔Ｎｏ．５〕と正答肢
・PDFページ下
https://www.jaeic.or.jp/shiken/2k/2k-mondai.files/2k-2022-1st-gakka3_4.pdf#page=5
https://www.jaeic.or.jp/shiken/2k/2k-mondai.files/2k-2022-1st-gokakukijun-r1.pdf

# オリジナル
・Youtube 検索中

# sympyで
・勉強中

# sympyのTrussで
```python
# ver0.1 
from sympy.physics.continuum_mechanics.truss import Truss
import math
from sympy import *
P=10   # var('P')
t = Truss()
t.add_node     (( "3",0.0,4.0)) 
t.add_node     (( "C",0.0,3.0),("D",0.5,3.0)) 
t.add_node     (( "1",0.0,2.0),("2",1.0,2.0)) 
t.add_node     (( "A",0.0,0.0),("B",2.0,0.0))
#  
t.add_member   (("3C","3","C"),("3D","3","D"))   
t.add_member   (("CD","C","D"))   
t.add_member   (("C1","C","1"),("D1","D","1"),("D2","D","2"))   
t.add_member   (("12","1","2"))   
t.add_member   (("1A","1","A"),("2A","2","A"),("2B","2","B"))   
t.add_member   (("AB","A","B"))   
t.apply_support(("A" ,"roller"),("B","pinned"))
t.apply_load   (("3",P,0.0))
p = t.draw()
p.show()
# 
t.solve()
print("#",t.reaction_loads['R_B_y'] )           
print("#",t.internal_forces["AB"],t.internal_forces["CD"])
# 20.0000000000000
# 0 0
# 解 1
```

![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/c3b5c54d-ab58-46e0-9665-646837f1d2de.png)

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

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

#### sympyのdoc
JavaBeans


## JavaBeansとは
データを１つにまとめて管理する仕組みのこと。
例えばBookBeanであれば、本の値段、タイトル、著者などの情報が入っている。
```java
public class BookBean implements Serializable {
    private String title; //タイトル
    private int price; //値段
    private String author; //著者
}
```

## 作成のルール
1. クラスはpublicで指定する
2. フィールドはprivateで指定する
3. 引数なしのpublicで指定したコンストラクタを定義する
4. フィールドのgetterとsetterを定義する
5. java.io.Serializableを実装する
6. クラス名の最後はBeanにする

```java
public class BookBean implements Serializable { //ルール1,5,6
    private String title; //ルール2

    public BookBean(){}; //ルール3
    //ルール4
    public void setTitle(String title) {
        this.title = title;
    }
    //ルール4
    public String getTitle() {
        return title;
    }
}
```
#### ルール2と4
カプセル化というもの。
フィールドをprivateにすることで外部から直接アクセスできないようにする。
フィールドにアクセスしたい時はインスタンスを生成して、値を入れたい時はsetterメソッドを、フィールドを返したい時はgetterメソッドを利用する。
このように外部からデータを保護することをカプセル化という。
メソッド名は基本は「getフィールド名」「setフィールド名」(先頭大文字)だが、必ずしもフィールド名にしなくても良い。
例えば以下でも良いが、混乱するため基本的にはメソッド名はフィールド名を使った方が良い。
```java
   private String title;
   public void setName(String name) {
       this.title = name;
   }
```

#### ルール3
引数のないコンストラクタを定義することで、簡単にインスタンス化できる。
コンストラクタをオーバーライドして、新しいコンストラクを定義しても良い。

#### ルール5
ちょっと難しいので[こちら](https://www.bold.ne.jp/engineer-club/java-beans#-3javaioSerializable)を参考。

## 使い方
Beanのインスタンスを作成して、setterで値を入れてgetterで呼ぶのが基本。

```java
public class BookBean implements Serializable { //ルール1,5,6
    private String title;

    public BookBean(){};

    public void setTitle(String title) {
        this.title = title;
    }
 
    public String getTitle() {
        return title;
    }
}

public class Library {
    public static void main(String[] args) {
        BookBean book = new BookBean();
        BookBean book_2 = new BookBean();

        book.setTitle("デルトラクエスト");
        book_2.setTitle("かいけつゾロリ");

        System.out.println("タイトル" + book.getName()); //デルトラクエスト
        System.out.println("タイトル" + book.getName()); //かいけつゾロリ
    }
}
```

## 終わり
開発現場ではJavaBeansは必須ではないでしょうか:grinning:
絶対に覚えておかないといけませんね！
学習記録アプリをTypeScriptでリニューアル！2ヶ月で得た成長と学び

## はじめに
開発経験の浅いエンジニアが、2ヶ月間で TypeScript を使って新規登録・編集・削除ができる簡単な学習記録アプリをリニューアルしました。

![課題３.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675924/360d8c1f-1e96-4ed7-945a-838ae31b0437.gif)

---

## 🔧 リニューアルで実施したこと

- JavaScript から TypeScript への移行  
- デザイン部分を Chakra UI で再構築  
- フォームを React Hook Form で実装し、バリデーションを追加  
- モックを使用したテストコードの作成  

---

## 🛠 使用技術

- **フロントエンド開発**：React, TypeScript, Vite  
- **UIフレームワーク**：Chakra UI  
- **フォーム管理**：React Hook Form  
- **バックエンド・データベース**：Supabase, Firebase  
- **テスト**：Jest, React Testing Library  
- **CI/CD・デプロイ**：GitHub Actions  

---

## 💡 苦労したこと
GitHub Actions でリニューアル前とは異なる構成にしたことで、デプロイ時にエラーが発生しました。
エラーログを読み解き、設定ファイルを調整することで解決できましたが、この過程でCI/CDへの理解が深まりました。
既存のコードを単純に真似るのではなく、あえて異なるアプローチを試すことで、新たな学びが得られる貴重な経験となりました。

▶︎ [GitHub Actionsでのエラー記事はこちら](https://qiita.com/y-keiyu/items/e44f5c85d45dfee30d72)

---

## 🔍 工夫したこと

合計学習時間を表示できる機能を追加しました。  
実装時には、必要なテストケースを自分で考えてテストコードを作成しました。

Supabase からのデータ取得に関してエラーが出ましたが、試行錯誤の末に解決でき、Supabase の理解が深まりました。

---

## ✨ 作成での気づき

### 📘 公式ドキュメントのサンプルコードは強力な学習ツール

新しい技術を使う際には、公式ドキュメントのクイックスタートやサンプルコードを活用するのが非常に有効だと実感しました。

まずは動かしてみて、その後に「どこを変えるとどうなるか？」を確かめながら少しずつ編集して理解を深めていきました。

特に Chakra UI や React Hook Form は、公式が提供するサンプルが実践的で、導入もスムーズでした。

やりたいことが明確であれば、まずは公式ドキュメントを頼る。この姿勢を習慣にすることで、実装スピードも理解力も上がると感じました。

---

## 🧹 反省点

今回、すべてのコードを `App.tsx` に記述し、テストコードも1ファイルにまとめてしまったことで、コードが長くなってしまいました。

今後は以下のような点を意識したいです。

- コンポーネントごとにファイルを分割する。
- テストケースごとにファイルを分けて管理する。  
- 保守性と可読性を意識した構成にする。  

---

## 🎉 最後に

プロジェクトの作成から実装、そしてデプロイまでを一通り経験し、2ヶ月前と比べて確実にスキルが身についていると感じました。

エラーが出ても、AIや公式ドキュメントを使いながら自分で解決できるようになってきたので、今後も継続的に学習し、技術力を伸ばしていきたいと思います。

---


# JISOUのメンバー募集中！
プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか？
興味のある方は、ぜひホームページをのぞいてみてください！
▼▼▼

https://projisou.jp
「(2022)令和4年二級建築士試験学科Ⅲ（建築構造）〔Ｎｏ．５〕」sympyのTrussでやってみた。

**Qiita_建築士**
https://qiita.com/mrrclb48z/items/893cb0967e4ddb2945f7

#### 公式ホームページ
(2024)令和4年二級試験問題〔Ｎｏ．５〕と正答肢
・PDFページ下
https://www.jaeic.or.jp/shiken/2k/2k-mondai.files/2k-2024-1st-gakka3_4.pdf#page=4
https://www.jaeic.or.jp/shiken/2k/2k-mondai.files/2k-2024-1st-gokakukijun.pdf

# オリジナル
・Youtube 検索中

# sympyで
・勉強中

# sympyのTrussで
```python
# ver0.1 
from sympy.physics.continuum_mechanics.truss import Truss
import math
from sympy import *
P1,P2=3,3   # var('P1,P2')
t = Truss()
t.add_node     (("1",0.0,4*sqrt(3))) 
t.add_node     (("3",0.0,2*sqrt(3)),("2",2.0,2*sqrt(3))) 
t.add_node     (("5",0.0,0.0      ),("4",4.0,0.0      )) 
#  
t.add_member   (("B","1","3"),("A","1","2"))   
t.add_member   (("C","3","2"))   
t.add_member   (("F","3","5"),("E","2","5"),("D","2","4"))   
t.apply_support(("5" ,"pinned"),("4","pinned"))
t.apply_load   (("1",P1,180.0))
t.apply_load   (("2",P2,180.0))
p = t.draw()
p.show()
# 
t.solve()
print("#",t.internal_forces["A"],t.internal_forces["B"],t.internal_forces["C"])
# 6.00000000000000 -3.0*sqrt(3) 0
# 解3
```

![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/3efa80f6-4222-44a9-8564-5fc43f627f26.png)

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

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

#### sympyのdoc
自分用jspにチャレンジ ～MVC～

# MVCアーキテクチャ
### Model モデル
##### 役割
アプリケーションのビジネスロジックやデータ処理を担当する。
DBとのやり取りや処理ロジックを含む。
例：
・DBからユーザー情報を取得、更新する処理
・ユーザー名が正しいかを検証する処理
javaクラスの例
```java:UserModel.java
public class UserModel {

    public UserDTO getUserById(int id) {

    // DBからユーザー情報を取得
    }
}
```

### Controller コントローラー
##### 役割
ユーザーからのリクエストを受け取り、適切な処理(Modelの呼び出し)や画面遷移を制御する
例：
・login.jspから送信されたユーザー名とパスワードを受け取り、認証を行い、静甲ならmypage.jspに、失敗ならlogin.jspに戻す
javaクラスの例(Servlet)
```java:HttpServlet.java
@WebServlet("/login")
public class LoginController extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        String user = request.getParameter("username");
        String pass = request.getParameter("password");
        
        UserModel model = new UserModel();
        boolean result = model.checkLogin(user, pass);
        
        if (result) {
        
            response.sendRedirect("mypage.jsp");
        } else {
        
            response.sendRedirect("login.jsp");
        }
    }
}
```

### DTO (Data Transfer Object)
##### 役割
データを格納するためのシンプルな入れ物。ModelとControllerやViewでのデータのやり取りを簡潔に行うために使われる。
例：
・ユーザーのID, 名前, メールアドレスなどの情報を1つのオブジェクトにまとめる
javaクラスの例
```java:UserDTO.java
public class UserDTO {

    private int id;
    private String name;
    private String email;

    // getter, setter
    public int getId() {

        returnid;
    }

    public void setId(int id) {

        this.id = id;
    }

    public String getName() {

        return.name;
    }

    public void setName(String name) {

        this.name = name;
    }

    public String getEmail() {

        return email;
    }

    public void setEmail(String email) {

        this.email = email;
    }
}
```

### View ビュー
##### 役割
ユーザーに表示される画面の見た目を担当する。jspファイルで記述され、HTMLとjavaを組み合わせて動的にページを生成する
例：
・ログイン画面、ユーザー情報表示画面、エラーメッセージの表示など
jspの例
```jsp:sample.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<body>
    <h1>ようこそ、<%= request.getAttribute("username") %>さん！</h1>
</body>
</html>
```

### 全体の流れ(MVCの関係図)
1. ユーザーがホーム送信(View)
2. Controllerがリクエストを受け取る
3. Modelに処理を依頼
4. 結果をDTOに詰めてViewに渡す
5. View(jsp)が結果を画面に表示

# おわりに
railsの経験を生かしてまずはjspでかんたｎTodoアプリの作成に挑戦してみたいと思います
ポケモン種族値で学ぶニューラルネットワークAIの基礎


## ポケモン種族値で学ぶニューラルネットワークAIの基礎

「ニューラルネットワークとは何か？」
その問いに対して、本記事ではポケモンの**種族値の合計が560を超えるかどうか**を判定するシンプルな**分類問題**を題材に、ニューラルネットワークの基本を直感的に理解できる方法を紹介します。

---

### ニューラルネットワークの構造

使用するのは**1層・シグモイド活性化関数付きの非常に単純な構造**です：

* **入力層**：6つの種族値（H, A, B, C, D, S）
* **重み（Weights）**：すべて1（単純に合計を取る）
* **バイアス（Bias）**：-560（＝しきい値）
* **活性化関数**：シグモイド関数（確率に変換）

---

### 数式モデル

出力は次のように計算されます：

$$
z = \sum_{i=1}^{6} x_i - 560
\quad \Rightarrow \quad 
\text{Probability} = \sigma(z) = \frac{1}{1 + e^{-z}}
$$

* $x_i$：6つの種族値
* $\sigma(z)$：シグモイド関数

---

### 判定ルール

* **出力値 ≥ 0.5** → 種族値合計は560以上の可能性あり（分類：**1**）
* **出力値 < 0.5** → 種族値合計は560未満と予測（分類：**0**）

---

### 実例：ウインディ（種族値合計 555）

```python
# Program Name: sigmoid_species_classifier_plot.py
# Creation Date: 20250601
# Overview: Classify Pokémon base stats using sigmoid, plot activation and its derivative
# Usage: Run the script to classify input stats and visualize sigmoid + derivative

# ライブラリのインストール / Install required libraries
!pip install numpy matplotlib

# ライブラリのインポート / Import libraries
import numpy as np
import matplotlib.pyplot as plt

# ---------- シグモイド関数とその微分 / Sigmoid and its derivative ----------
def sigmoid(z):
    """シグモイド活性化関数 / Sigmoid activation function"""
    return 1 / (1 + np.exp(-z))

def sigmoid_derivative(z):
    """シグモイド関数の導関数 / Derivative of sigmoid"""
    s = sigmoid(z)
    return s * (1 - s)

# ---------- ニューラルネットワーク判定関数 / Classifier function ----------
def classify_with_sigmoid(base_stats):
    weights = np.ones(6)
    bias = -560
    z = np.dot(weights, base_stats) + bias
    return sigmoid(z), z

# ---------- ウインディの種族値 / Arcanine base stats ----------
arcanine_stats = [90, 110, 80, 100, 80, 95]  # total = 555
prob, z_val = classify_with_sigmoid(arcanine_stats)

# ---------- 結果出力 / Output result ----------
print(f"確率（Probability）: {prob:.4f}")
print("判定（Classification）:", "はい (1)" if prob >= 0.5 else "いいえ (0)")

# ---------- 活性化関数と微分のプロット / Plot sigmoid and its derivative ----------
z_range = np.linspace(-20, 20, 400)
sig_vals = sigmoid(z_range)
deriv_vals = sigmoid_derivative(z_range)

plt.figure(figsize=(10, 6))
plt.plot(z_range, sig_vals, label='Sigmoid', linewidth=2)
plt.plot(z_range, deriv_vals, label="Sigmoid Derivative", linestyle='--')
plt.axvline(z_val, color='gray', linestyle=':', label=f'z = {z_val:.2f}')
plt.axhline(0.5, color='lightgray', linestyle=':')
plt.title("Sigmoid Activation Function and Derivative")
plt.xlabel("z")
plt.ylabel("Value")
plt.legend()
plt.grid(True)
plt.show()

```

#### 出力：

```
確率（Probability）: 0.0067
判定（Classification）: いいえ (0)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/7cbd9614-3a79-409e-be6c-64c12473c2fd.png)

---

### 解釈と学び

* ウインディは**種族値555** → わずかに届かず ✗
* 確率的にも0.0067と非常に低い
* ニューラルネットワークはこのように**線形和＋バイアス＋活性化**という構成で入力を分類

---

### 応用への展開

https://qiita.com/cfiken/items/e2047d9b27e6ef2a132b


https://www.kikagaku.co.jp/kikagaku-blog/deep-learning-transformer/

---

### まとめ

本モデルはシンプルながら、ニューラルネットワークの**本質（加重和＋バイアス＋非線形変換）**をしっかり体験できる教材です。
ポケモンの種族値を活用することで、AI初学者でも**親しみやすく、かつ数学的な理解に橋をかける**ことが可能です。
PowerShell でGrapheme Clusterについて

# PowerShell でGrapheme Clusterについて
`é`の場合そのまま代入してもいいのですが
アクセントと別ける方法もあります

``` powershell
$string = 'e' + [char]0x0301
```

文字数は変わらないですが 場合によっては `Length = 2`になる場合もあるらしいです

https://mjeld.com/blog2/pwsh_grapheme_cluster.html
![grapheme_cluster.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088377/11902a64-9e17-4f58-9a71-cb37a0f8feb0.gif)

Windowsの国旗絵文字問題は解決できてないのですかね？
私の環境では IMEで日本と入力すると国旗は出てこないようで

```
🇯🇵
```
上記が表示されます

https://geyer.dev/blog/windows-flag-emojis/

Windowsでデザインなどしてる人は どないしてはるんでしょうか？
![20250601at1900.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088377/9d18a105-15c6-43ae-a073-30aba7e47c2e.gif)

https://learn.microsoft.com/en-us/typography/fonts/windows_11_font_list
Mail: 宇都宮図書館から、Gmail のアドレスへ送られたメールが届かない問題

昨年まで届いていた宇都宮図書館からの、「予約本が入った」という案内のメールが届かなくなりました。
Gmail が Dmarc のチェックを厳しくし、Dmarc の設定をしていないメールを受信拒否しているためと
思われます。

## Dmarc が設定されているかの確認

Gmail が送信元の場合

```txt
$ dig +short TXT _dmarc.gmail.com
"v=DMARC1; p=none; sp=quarantine; rua=mailto:mailauth-reports@google.com"
```

Yahoo が送信元の場合

```txt
$ dig +short TXT _dmarc.yahoo.co.jp
"v=DMARC1; p=quarantine; rua=mailto:ymail_dmarc_report@yahoo.co.jp"
```

宇都宮市のメール配信サービス

```txt
$ dig +short TXT _dmarc.utsunomiya.mwjp.jp
"v=DMARC1; P=none; rua=mailto:dmarc_report@utsunomiya.mwjp.jp; ruf=mailto:dmarc_report@utsunomiya.mwjp.jp"
```

宇都宮図書館 Dmarc が設定されていません。

```txt
$ dig +short TXT _dmarc.lib-utsunomiya.jp
```

## 参考

小山市立図書館

```txt
$ dig +short TXT _dmarc.city.oyama.tochigi.jp
"v=DMARC1; p=quarantine;"
```
AndroidStudioのEmulator削除方法

AndroidStudioのEmulator削除方法です。

検証をさまざまなバージョンで行い、そのままにしていると容量を圧迫してしまうので、Emulator削除する方法です。


![スクリーンショット 2025-06-01 18.54.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/ef63be06-e39f-45fa-9e6d-795b7a03bb9f.png)

Device Managerを開き画像のDeleteをクリックすると削除できます。
自分用java学習～継承(インヘリタンス)～

# 継承(インヘリタンス)
### 継承
あるクラスのメンバを他クラスに引き継ぐ
自動車を例に考える。
一般車だけでなく、トラックやパトカー、救急車等、自動車でありながらそれぞれに応じた独自の機能を拡張した自動車が存在する。
つまり継承とは...「基本となるクラスの性能を受け継ぎ、独自の拡張をすること」

### 親クラス(スーパークラス)
継承の元となるクラス
### 子クラス(サブクラス)
親クラスの機能を継承し、独自の機能を実装したクラス

### 親クラスを継承した子クラスの定義
```java:sample.java
class 子クラス名 extends public 親クラス名 {

}
```
子クラスは親クラスで定義されたメソッドを利用可能。
たださい、privateフィールドには直接アクセス不可能。
また、子クラス独自のメソッドを親クラスでは利用不可能。

### サブクラスのコンストラクタ
子クラスのコンストラクタが実行される前に、親クラスのコンストラクタが実行される

# Objectクラスのキャスト
### Objectクラスのキャスト
javaで作るすべてのクラスは、暗黙的にObjectクラスを継承している。
下のようなクラスも実はObjectの子クラスである。
```java:Lunch.java
public class Lunch {

    // これは Object を自動的に継承している
}
```
だから、どんな型のオブジェクトも Object型として扱うことが可能

#### Objectクラスのキャストって何のために使うの？
「いろんな型を一つにまとめ扱いたいとき」に、Object型を使用する！
そして、「後で本来の型に戻したいとき」にキャストが必要になる！

例えば...お弁当箱のようなイメージ
・Objectはなんでも入るお弁当箱
・中身が「おにぎり(String), からあげ(Integer), ハンバーグ(Lunch)」でも、とりあえず全部入る！
```java:java
Object box1 = "おにぎり";
Object box2 = 123;
Object box3 = new Lunch();
```
実際に必要となる場面 ～いろんなデータをまとめて保存したい(配列)～
```java:java
// 前提、Object型の配列は、「型がバラバラなものでも格納できる！」

Object[] items = new Object[3];
items[1] = "こんにちは"; // 文字
items[2] = 100; 数値
items[3] = new Lunch(); // クラスのインスタンス


// こんな感じで型がバラバラの配列items 後で取り出して使うときどうする？？
// その際に使用されるのがキャスト(型変換)

String str = (String) items[0];
int num = (int) items[1];
Lunch lunch = (Lunch) items[2];
lunch.メソッド名;
```

# おわりに
ちょっとずつ理解が難しくなってきました。。
めげずに頑張っていきたいと思います！
個人開発:綿1000%という名前のWebサービスを作った

初めての個人開発。私は諸々の事情により「普通の働き方」ができない。収入も不安定だ。なのに家族は多い方で、今後の未来は不安ばかりだ。

自分でもできることはないか。悶々と考えあぐね、本気で個人開発というものをやってみることにした。個人開発に行き着いた経緯は訳があるが、それは置いておく。

## 思いつきのサービスを形にする

### 何を作るか

どんなものを作るか？何パターンかプロジェクト案を出し、その中から綿100%素材を簡単に探せるサービスに決めた。
#### 選定理由

- ターゲット層が明確（敏感肌、感覚過敏、乳幼児、高齢者など）
- ニーズの解像度が高い（自分がターゲット層）
- 収益までの距離が短い（アフィリエイト）

やるからには収入にならねば意味がない。本当に作りたいものも思いつきはしたが、まずはシンプルに購買に繋がる（と思いたい）サービスを作ることにした。

自分が感覚過敏持ち、汗かき、家族がアトピーなどで綿100の服を選んで買っていることもあり、より検索体験をよくしたいという、よくなるだろうかという挑戦の気持ちもあった。

### 技術選定

どうせなら未経験の技術を使いたい。学びはいくらあってもいい。

#### やりたいこと

- 複数ショッピングサイトの商品を一度に検索
- お気に入り商品の登録ができる
- ユーザー認証でデバイス間でお気に入りを維持
- 商品属性でのフィルタリング
- 余計な装飾を省き検索機能に集中できる

商品データを外部APIから取得する、データベースに保存する、認証機能…などから以下を選定

#### 使う技術

- Next.js
- Supabase
- Tailwind CSS

UIフレームワークも試したが調整が面倒になり途中でやめた。

## AIとの共同開発

結果的に2ヶ月ほどで基本は完成した。Reactもほぼ初めてではあったが、わからないことは公式ドキュメントとAIの力で何とか乗り越えた。

AIはClaude,Geminiをアプリやvscode拡張のroo codeなどを併用。喧々諤々、喧嘩しながらもフィードバックを得られることのモチベーションは大きかった。

コード生成もかなり任せているが、コードベースの肥大化に伴って一貫性の維持が難しくなる。随時設計ドキュメントを書かせ、それを参照しながら作った。ドキュメントはAIにはもちろん、知識が浅く忘れっぽい自分には役に立った。

ちなみにドキュメント作成用のプロンプトは以下のようなもの。

```
今回の実装内容についてドキュメントを作成してください

流れの例：設計思想、メリット、仕組み、データフロー、拡張方法、今後の改善点、まとめ

注意点：
適宜mermaid図などを組み込み視認性も意識すること
文章は冗長にならず簡潔に伝わるようにすること。
具体的なコード内容はできるだけ避け、最低限に留めること（可読性を著しく下げます）
コードではなく目的や内容について説明してフォローする。
口調は桜井政博氏のように論理的かつ簡潔に要点を伝えるようお願いします。
```

AIの出力したコードをAIに批評させたり（コピペで検証させ合う）、何度も公式ドキュメントを見ろと指示するなど 、AIとの協働についても学びがあった2ヶ月だった。

## 公開しても、認知されない

![FireShot Capture 083 - 綿1000% - [www.cotton1000p.com].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399999/1a975bc3-fba8-41e8-a32e-8f69f86d5579.png)
[https://www.cotton1000p.com](https://www.cotton1000p.com)

本日2025/06/01、綿1000%を正式公開した。構造化データのマークアップもした。サーチコンソールにサイトマップも登録した。ページの表示速度も問題なさそうだ。Twitterのアカウントも開設した。

当然だがアクセスはまったく無い。これからどうやって展開していくのかが大きな課題としてのしかかっている。そういうの、苦手なんだ。
自分用java学習～セッター / ゲッター～

# セッターとゲッター 
### セッター
privateで隠されたフィールドに値をセットする
例えば「人」というクラスを作った時に、名前や年齢を後から設定する時に使用するのがセッター。
セッターはsetの後に変数名が付く。また、最初の文字が大文字になる

### ゲッター
セッターでセットした値を取り出す
ゲッターはgetの後に変数名が付く。また、最初の文字が大文字になる
```java:Person.java
public class Person {

    // 名前(name)という変数
    private String name;

    // セッター(名前をセットする)
    public void setName(String newName) {

        name = newName;
    }

    // ゲッター(後で名前を取り出す)
    public Stirng getName() {

        return name;
    }
}
```
```java:main.java
public class Main {

    public static void main(String[] args) {

        Person p = new Person();

        p.setName("たろう"); // セッターを使って名前をセット

        System.out.println(p.getName()); // 名前を表示→「たろう」
    }
}
```
# デフォルトコンストラクタ
### デフォルトコンストラクタ
クラスにコンストラクタが存在しなくとも、見えないコンストラクタとして「何も処理されないコンストラクタ」を自動で定義する


    


# おわりに
何度も見返してちょっとずつ勉強していきます！