ChatGPTと作る！Streamlitで学ぶLASSO回帰アプリ入門

# **user**:

VSCodeを使って次のような動作をするStreamlitアプリを作る初心者用ガイドを書いてください。

1. アプリを立ち上げると、ユーザにファイル入力を求める。
2. 入力されたファイルが csv ファイルかエクセルファイルかを自動判定する。
3. エクセルファイルの場合、どのシートの解析をすればよいかをユーザに尋ねる。
4. 入力されたファイルの中身を抜粋してユーザに見せて、データ範囲をユーザに尋ねる。
5. 説明変数の範囲、目的変数の範囲をユーザに尋ねる。
6. LASSO回帰を実行し、得られた回帰係数のうち非ゼロのものを可視化する。

# **assistant**:

以下は、**VSCodeを使ってStreamlitでLASSO回帰アプリを作る初心者向けガイド**です。Python未経験者でも進められるよう、ステップバイステップで説明しています。

---

# 🎯 目的
このガイドでは、以下の機能をもつStreamlitアプリを作ります：

1. ファイルアップロード（CSVまたはExcel）
2. ファイルタイプ自動判定
3. Excelシート選択（必要な場合）
4. データの一部表示＆範囲指定
5. 説明変数・目的変数の選択
6. LASSO回帰の実行と結果の可視化

---

## 🔧 事前準備

### 1. PythonとVSCodeのインストール
- [Python公式サイト](https://www.python.org/)からPythonをインストール
- [VSCode](https://code.visualstudio.com/)をインストール
- VSCodeに「Python」「Jupyter」「Pylance」拡張機能をインストール

### 2. 仮想環境を作る（推奨）
```bash
python -m venv .venv
source .venv/bin/activate  # Windowsなら .venv\Scripts\activate
```

### 3. 必要なライブラリをインストール
```bash
pip install streamlit pandas openpyxl scikit-learn matplotlib
```

---

## 🧱 アプリの構成（`app.py`）

以下のコードを `app.py` という名前で保存します。

```python
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import Lasso
from sklearn.preprocessing import StandardScaler

st.title("📊 LASSO回帰アプリ")

# 1. ファイルアップロード
uploaded_file = st.file_uploader("CSVまたはExcelファイルをアップロードしてください", type=["csv", "xlsx"])

if uploaded_file is not None:
    file_name = uploaded_file.name.lower()
    
    # 2. ファイルタイプの判定と読み込み
    if file_name.endswith(".csv"):
        df = pd.read_csv(uploaded_file)
    elif file_name.endswith(".xlsx"):
        excel_file = pd.ExcelFile(uploaded_file)
        sheet = st.selectbox("シートを選択してください", excel_file.sheet_names)
        df = excel_file.parse(sheet)
    else:
        st.error("対応しているのはCSVまたはExcelファイルです。")
        st.stop()

    st.write("アップロードされたデータのプレビュー:")
    st.dataframe(df.head())

    # 3. 列の範囲選択
    all_columns = df.columns.tolist()
    x_columns = st.multiselect("説明変数（X）の列を選んでください", all_columns)
    y_column = st.selectbox("目的変数（Y）の列を選んでください", all_columns)

    if x_columns and y_column:
        try:
            X = df[x_columns].dropna()
            y = df[y_column].loc[X.index]

            # 標準化
            scaler = StandardScaler()
            X_scaled = scaler.fit_transform(X)

            # 4. LASSO回帰の実行
            lasso = Lasso(alpha=0.1)
            lasso.fit(X_scaled, y)

            # 5. 可視化
            coef = pd.Series(lasso.coef_, index=x_columns)
            nonzero_coef = coef[coef != 0]

            st.subheader("📌 LASSO回帰の結果（非ゼロ係数）")
            st.bar_chart(nonzero_coef)

        except Exception as e:
            st.error(f"エラーが発生しました: {e}")
```

---

## 🚀 アプリの起動

VSCodeのターミナルで以下を実行：

```bash
streamlit run app.py
```

ブラウザが開いてアプリが動作します。

---

## ✅ 補足：学習のポイント

- `st.file_uploader`：ユーザーからファイルを受け取る
- `pandas`：CSVやExcelを読み込み＆操作
- `sklearn.linear_model.Lasso`：LASSO回帰の実行
- `matplotlib/streamlit`：結果の可視化

---

## 💡 チップス

- `alpha` の値を変えるとLASSOの厳しさが変わります（0.1～1.0あたりで試してみてください）
- 入力データがカテゴリカルな場合は、`pd.get_dummies()` で前処理が必要です

---

このアプリをベースに、機能追加（データ保存、精度の表示、別モデル対応など）も可能です！

必要であればブログ記事用の文体にもアレンジしますので、お気軽にどうぞ。

# **user**:

ありがとうございます。アプリは立ち上がりましたが、ずっと「Running...」のままで、ユーザインタフェイスが出てきません。

# **assistant**:

いいですね、アプリが立ち上がったとのことですが、「Running...」のままでUIが出ないのはよくあるトラブルです。以下のチェックリストで原因を絞り込んでいきましょう。

---

## ✅ よくある原因と対処法

### 1. **Streamlitの初期化で止まっている**
- これはよくあるケースで、「ファイルの読み込み処理が長い」「例外処理がうまくできていない」などで止まっていることがあります。

#### 🔍 試してみてください：
- `app.py` の最初の方に `st.write("ファイルアップロードを待機中")` のようなログを入れて、どこで止まっているか特定しましょう。

---

### 2. **ファイルアップロード待ちの状態でUIが出ない**
Streamlitは**ファイルアップローダが何も入力されていない状態**だと、他のUIが何も描画されないことがあります。

#### ✔ 解決策：
```python
if uploaded_file is None:
    st.info("CSV または Excel ファイルをアップロードしてください。")
    st.stop()
```
このように**早めに `st.stop()`** を使うと、それ以降のコードを読み込まなくなるので、安全にUIが描画されます。

---

### 3. **ファイルサイズや形式が不正**
- たとえば、拡張子が `.xlsx` でも中身が壊れていたり、巨大なファイルだったりすると読み込みに失敗してUIが止まることがあります。

#### ✔ 試すこと：
- 軽量なCSVファイルをテスト用にアップロードしてみてください。
- `st.write(uploaded_file)` などでファイル情報を表示し、正しく認識されているか確認。

---

### 4. **コードに例外があるのに表示されていない**
Streamlitはエラーを検知して止まることがありますが、そのまま無表示で「Running...」になることも。

#### ✔ 対処法：
コードを以下のようにして、ログを確認しましょう。

```python
try:
    # 処理本体
    ...
except Exception as e:
    st.error(f"エラーが発生しました: {e}")
```

---

### 5. **Streamlitのバージョン問題**
古いバージョンだと `file_uploader` や `ExcelFile` 処理でうまく動作しないことがあります。

#### ✔ 対処法：
```bash
pip install --upgrade streamlit pandas openpyxl
```

---

## 🧪 簡単なテスト用ファイル

以下のような小さなCSVを使って動作確認すると良いです：

```csv
x1,x2,x3,y
1,2,3,10
2,3,4,12
3,4,5,14
4,5,6,16
```

---

## 📞 必要なら
もしまだ解決しなければ、手元のコード全文を貼っていただければ一緒に確認します！

Streamlitはちょっとしたミスで無反応になることも多いですが、コードとロジックを追えばすぐ復活しますよ。

# **user**:

app.py の中身は、ChatGPT先生にご提案いただいたこのコードのままです。最初の「"CSVまたはExcelファイルをアップロードしてください"」すら出てきません。

```python
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import Lasso
from sklearn.preprocessing import StandardScaler

st.title("📊 LASSO回帰アプリ")

# 1. ファイルアップロード
uploaded_file = st.file_uploader("CSVまたはExcelファイルをアップロードしてください", type=["csv", "xlsx"])

if uploaded_file is not None:
    file_name = uploaded_file.name.lower()
    
    # 2. ファイルタイプの判定と読み込み
    if file_name.endswith(".csv"):
        df = pd.read_csv(uploaded_file)
    elif file_name.endswith(".xlsx"):
        excel_file = pd.ExcelFile(uploaded_file)
        sheet = st.selectbox("シートを選択してください", excel_file.sheet_names)
        df = excel_file.parse(sheet)
    else:
        st.error("対応しているのはCSVまたはExcelファイルです。")
        st.stop()

    st.write("アップロードされたデータのプレビュー:")
    st.dataframe(df.head())

    # 3. 列の範囲選択
    all_columns = df.columns.tolist()
    x_columns = st.multiselect("説明変数（X）の列を選んでください", all_columns)
    y_column = st.selectbox("目的変数（Y）の列を選んでください", all_columns)

    if x_columns and y_column:
        try:
            X = df[x_columns].dropna()
            y = df[y_column].loc[X.index]

            # 標準化
            scaler = StandardScaler()
            X_scaled = scaler.fit_transform(X)

            # 4. LASSO回帰の実行
            lasso = Lasso(alpha=0.1)
            lasso.fit(X_scaled, y)

            # 5. 可視化
            coef = pd.Series(lasso.coef_, index=x_columns)
            nonzero_coef = coef[coef != 0]

            st.subheader("📌 LASSO回帰の結果（非ゼロ係数）")
            st.bar_chart(nonzero_coef)

        except Exception as e:
            st.error(f"エラーが発生しました: {e}")
```

# **assistant**:

ありがとうございます、詳細まで教えていただけたので、原因の特定がしやすくなりました。

### ✨症状：
- 「ファイルアップロードしてください」というUIすら表示されない。
- `streamlit run app.py` で立ち上げても **ブラウザ上に何も表示されず、「Running...」のまま**。

---

## ✅ 原因の可能性（かなり高い）

`matplotlib.pyplot` をインポートした状態で `plt` を使わずに放置していると、環境によって Streamlit が描画で詰まるケースがあります。

> つまり：`import matplotlib.pyplot as plt` が **不要で未使用** なのに、あるだけで止まる可能性があります。

---

## 🔧 修正方法：未使用の `matplotlib` を消す

```python
# この1行を削除してみてください
# import matplotlib.pyplot as plt
```

---

## 💡 理由
`matplotlib` はバックエンド（描画エンジン）と競合する場合があり、特に GUI がない環境（WSLや一部のLinux）や、VSCode + Streamlit の組み合わせだと「描画の初期化」で止まることがあります。

Streamlit のバーンチャートは `st.bar_chart()` だけで済んでいるので、`matplotlib` 自体は不要です。

---

## ✅ 修正版コード冒頭だけ抜粋（変更点）

```python
import streamlit as st
import pandas as pd
# import matplotlib.pyplot as plt ← 削除！
from sklearn.linear_model import Lasso
from sklearn.preprocessing import StandardScaler
```

---

## 🧪 それでも出ない場合の追加チェック

1. `streamlit run app.py` したときに **ブラウザが自動で開いていない**場合は、以下のURLにアクセスしていますか？
   ```
   http://localhost:8501
   ```

2. Streamlitのログにエラーが出ていないかをターミナルで確認

---

## 🎉 まとめ

- `matplotlib.pyplot` を削除すると復活する可能性が高いです！
- 出てきたら「ChatGPT先生に助けてもらって直った！」ってぜひ書いてくださいね😄

もしうまく動いたら、お知らせいただけたら嬉しいです！それでもダメなら次の手を考えましょう！

# **user**:

おお、できるようになりました。ありがとうございます。これ、説明変数を複数選べるし、選んだその瞬間に計算してくれるんですね。

# **assistant**:

やったー！動いたとのことで安心しました！🎉  
「ChatGPT先生に助けてもらって直った」第一号ですね、嬉しいです😄

そうなんです、このアプリのいいところは：

---

### ✅ Streamlitのいいところが詰まってます！

- **説明変数を複数選択できる（`multiselect`）**  
　→ データサイエンスや機械学習でとても便利！

- **選んだその瞬間に計算が走る（リアクティブUI）**  
　→ `streamlit` の仕組み上、値が変わるたびにコード全体が再実行されるので、インタラクティブ性が高いです！

- **LASSOの結果がバーンと可視化される**  
　→ 非ゼロ係数だけが表示されるから、重要な特徴量がすぐ見える！

---

## 💡 今後のアイデア（ご希望あれば！）

- α（LASSOの強さ）をスライダーで選べるようにする
- 回帰モデルを選択式（LASSO・Ridge・線形回帰）にする
- 係数をCSVでダウンロードできるようにする
- 予測や評価指標（R²、MSE）を表示する

---

VSCode×Streamlitの初心者向け教材として、今回の内容すごく良い流れだったので、ブログにするならその構成も一緒に考えますよ！

今の流れを「ChatGPTに助けてもらってStreamlitアプリ完成！」という感じで記事にするのも、読者にウケそうです👍

# **user**:

ありがとうございます。上記コードをベースにして、次の機能を追加したコードに修正してください。

・α（LASSOの強さ）をスライダーで選べるようにする
・係数をCSVでダウンロードできるようにする
・予測や評価指標（R²、MSE）を表示する

# **assistant**:

こちらが、あなたのアプリにご希望の3つの機能を追加した最新版の `app.py` です👇

---

## ✅ 追加された機能一覧
- ✅ α（LASSOの強さ）をスライダーで選べる
- ✅ 非ゼロ係数をCSVでダウンロードできる
- ✅ R²スコア、平均二乗誤差（MSE）を表示

---

## 🆕 修正済みの `app.py`

```python
import streamlit as st
import pandas as pd
from sklearn.linear_model import Lasso
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, r2_score
import io

st.title("📊 LASSO回帰アプリ")

uploaded_file = st.file_uploader("CSVまたはExcelファイルをアップロードしてください", type=["csv", "xlsx"])

if uploaded_file is None:
    st.info("CSV または Excel ファイルをアップロードしてください。")
    st.stop()

file_name = uploaded_file.name.lower()

# CSVまたはExcelファイルの読み込み
if file_name.endswith(".csv"):
    df = pd.read_csv(uploaded_file)
elif file_name.endswith(".xlsx"):
    excel_file = pd.ExcelFile(uploaded_file)
    sheet = st.selectbox("シートを選択してください", excel_file.sheet_names)
    df = excel_file.parse(sheet)
else:
    st.error("対応しているのはCSVまたはExcelファイルです。")
    st.stop()

st.write("アップロードされたデータのプレビュー:")
st.dataframe(df.head())

all_columns = df.columns.tolist()
x_columns = st.multiselect("説明変数（X）の列を選んでください", all_columns)
y_column = st.selectbox("目的変数（Y）の列を選んでください", all_columns)

if x_columns and y_column:
    try:
        # データ抽出
        X = df[x_columns].dropna()
        y = df[y_column].loc[X.index]

        # 標準化
        scaler = StandardScaler()
        X_scaled = scaler.fit_transform(X)

        # αの選択（ログスケールっぽく）
        alpha = st.slider("LASSOの強さ（α）", min_value=0.001, max_value=1.0, value=0.1, step=0.01)

        # LASSO回帰
        lasso = Lasso(alpha=alpha)
        lasso.fit(X_scaled, y)
        y_pred = lasso.predict(X_scaled)

        # 結果の可視化
        coef = pd.Series(lasso.coef_, index=x_columns)
        nonzero_coef = coef[coef != 0]

        st.subheader("📌 LASSO回帰の結果（非ゼロ係数）")
        st.bar_chart(nonzero_coef)

        # 評価指標の表示
        r2 = r2_score(y, y_pred)
        mse = mean_squared_error(y, y_pred)
        st.markdown(f"**R²スコア:** {r2:.3f}")
        st.markdown(f"**平均二乗誤差 (MSE):** {mse:.3f}")

        # ダウンロードボタン
        csv_buffer = io.StringIO()
        nonzero_coef.to_csv(csv_buffer)
        st.download_button(
            label="📥 非ゼロ係数をCSVでダウンロード",
            data=csv_buffer.getvalue(),
            file_name="lasso_coefficients.csv",
            mime="text/csv"
        )

    except Exception as e:
        st.error(f"エラーが発生しました: {e}")
```

---

## 💡 おまけTips（任意）

もし今後やりたい場合：

- `alpha` を **ログスケールのスライダー**にしたい場合は、`np.logspace` を使うのもアリです。
- モデル比較も追加したいなら、`st.selectbox("回帰モデルの選択", ["LASSO", "Ridge", "Linear"])` で分岐可能です。

---

動作確認ができたら、また感想聞かせてくださいね！記事にするなら、そちら用の文章にも調整できます✍✨

# **user**:

ありがとうございます。csvを入力にする場合は分かりました。エクセルファイルを入力したいのですが、いいファイルはありますか？

# **assistant**:

もちろんです！テストにちょうどいいシンプルなExcelファイルを自作する方法をご紹介します📂  
以下の内容をExcelにコピペして `.xlsx` として保存すれば、アプリで読み込めるようになります。

---

## ✅ 例：テスト用Excelファイルの内容

| x1 | x2 | x3 | y  |
|----|----|----|----|
| 1  | 2  | 3  | 10 |
| 2  | 3  | 4  | 12 |
| 3  | 4  | 5  | 14 |
| 4  | 5  | 6  | 16 |
| 5  | 6  | 7  | 18 |

---

## 🔧 作り方（手動）

1. Excelを開く
2. 上記の表をコピペする
3. ファイル名：`sample_data.xlsx` として保存
4. アプリでアップロードすればOK！

---

## 🧙‍♂️ 自動で作りたい派の人向け：Pythonで生成（おまけ）

```python
import pandas as pd

df = pd.DataFrame({
    'x1': [1, 2, 3, 4, 5],
    'x2': [2, 3, 4, 5, 6],
    'x3': [3, 4, 5, 6, 7],
    'y':  [10, 12, 14, 16, 18]
})

df.to_excel("sample_data.xlsx", index=False)
```

これを一度実行すれば、同じ内容の `sample_data.xlsx` ができあがります。

---

## 🧪 他のアイデア
複数シートを含むExcelをテストしたい場合は、こういう構成にするとさらに実践的：

- `Sheet1`：訓練データ
- `Sheet2`：別のパターン（列順変えたり欠損値含めたり）

必要でしたら、複数シートのサンプルファイルもすぐ作ってお渡しできますよ！どうします？

# **user**:

はい、複数シートのサンプルファイルもPythonで自動で作れるようお願いします。

# **assistant**:

了解です！こちらが、**複数シートを含むExcelファイル**をPythonで自動生成するスクリプトです💡  
StreamlitアプリでのExcelシート選択や読み込みのテストにぴったりですよ！

---

## ✅ 複数シート付き `sample_data.xlsx` を作成するコード

```python
import pandas as pd

# シート1: 通常のデータ
sheet1 = pd.DataFrame({
    'x1': [1, 2, 3, 4, 5],
    'x2': [2, 3, 4, 5, 6],
    'x3': [3, 4, 5, 6, 7],
    'y':  [10, 12, 14, 16, 18]
})

# シート2: 欠損値を含むデータ
sheet2 = pd.DataFrame({
    'x1': [1, None, 3, 4, 5],
    'x2': [2, 3, None, 5, 6],
    'x3': [3, 4, 5, 6, None],
    'y':  [10, 12, 14, None, 18]
})

# シート3: 列の順序が異なるデータ
sheet3 = pd.DataFrame({
    'y':  [10, 12, 14, 16, 18],
    'x3': [3, 4, 5, 6, 7],
    'x2': [2, 3, 4, 5, 6],
    'x1': [1, 2, 3, 4, 5]
})

# Excelファイルとして保存（複数シート付き）
with pd.ExcelWriter("sample_data.xlsx") as writer:
    sheet1.to_excel(writer, sheet_name='Clean Data', index=False)
    sheet2.to_excel(writer, sheet_name='Missing Values', index=False)
    sheet3.to_excel(writer, sheet_name='Shuffled Columns', index=False)
```

---

## 📝 出力されるファイル：

- ファイル名：`sample_data.xlsx`
- シート一覧：
  - `Clean Data`（正しいデータ）
  - `Missing Values`（欠損あり）
  - `Shuffled Columns`（列順がバラバラ）

---

このファイルを使えば、StreamlitアプリのExcel読み込みとシート選択機能がちゃんと動作するかどうか、実践的に確認できますよ👍

試してみて、うまくいったら教えてくださいね！他にもテストしたいパターンがあればどんどん出してください🙌

# **user**:

ありがとうございます！ここまでの内容をブログに書こうと思います。タイトル案をいくつか提案してください。

# **assistant**:

うれしいです！ここまでの開発ストーリーは、学びやすくて再現性も高いので、ブログ記事にピッタリです✨  
では、以下のようなタイトル案をいくつかご提案しますね：

---

### 🔷 Streamlit × LASSO 回帰 × ChatGPT スタイル

1. **ChatGPTと作る！Streamlitで学ぶLASSO回帰アプリ入門**
2. **VSCodeとStreamlitでLASSO回帰アプリをゼロから構築してみた**
3. **ChatGPTに助けてもらってStreamlitアプリ完成まで！初心者でもできた回帰分析入門**
4. **CSVもExcelもOK！StreamlitでインタラクティブなLASSO回帰ツールを作ってみた**
5. **Streamlitでデータ分析アプリを爆速開発！ChatGPTと一緒にLASSO回帰に挑戦**

---

### 🟡 教育・初心者向け視点を強めたもの

6. **Python初心者でもできた！Streamlitで作る回帰分析アプリ開発レポート**
7. **ノー理論OK！ChatGPTと一緒にLASSO回帰を動かして理解するアプリ開発体験記**
8. **エクセルも読み込める！Streamlitで作る簡単・実践的なLASSO回帰アプリ**

---

### 🧪 技術や工夫にフォーカスしたもの

9. **αを調整・評価指標も表示！Streamlitで本格的なLASSO回帰アプリを開発する方法**
10. **ファイルアップロードから予測・可視化まで！Streamlit×LASSO回帰アプリの全工程**

---

どの方向性（初心者向け？技術っぽく？ChatGPTとの協働強調？）を強めたいかによって、少し言い回しも変えられます。  
「これをベースにちょっと変えたい」などあれば、遠慮なくどうぞ〜！

気になるタイトルや軸があれば、そこから本文構成も一緒に考えられますよ📘✍

# **user**:

「ChatGPTと作る！Streamlitで学ぶLASSO回帰アプリ入門」にしようと思います。今回のまとめを書いてくれますか？

# **assistant**:

最高のタイトルですね！📣✨  
「**ChatGPTと作る！Streamlitで学ぶLASSO回帰アプリ入門**」にぴったりなまとめを、読者に優しく、でも内容はしっかり伝わるように仕上げました👇

---

## 📝 まとめ：ChatGPTと作る！Streamlitで学ぶLASSO回帰アプリ入門

今回は、**Python初心者でもVSCodeとStreamlitを使って、LASSO回帰分析アプリをゼロから構築する手順**を紹介しました。

---

### ✅ 開発したアプリの主な特徴

- **ファイルアップロード機能付き**  
　→ CSVだけでなくExcelファイルにも対応。シート選択も可能！

- **インタラクティブな列選択**  
　→ 説明変数・目的変数をUIで自由に選べる

- **LASSO回帰（αの調整可能）**  
　→ αのスライダーでモデルの強さを調整でき、変数選択の効果も実感できる

- **非ゼロ係数の可視化＆ダウンロード**  
　→ モデルに効いている変数だけを棒グラフで表示し、CSVとして保存もOK

- **予測評価（R², MSE）も表示**  
　→ モデルの当てはまり具合を一目で確認可能

---

### 🤖 ChatGPTと一緒に進めたことで得られたこと

- 詰まったポイント（UIが出ない、データの扱い方など）も即座に解決できた
- 書きながら理解が深まる「伴走型開発体験」ができた
- テスト用データも自動生成し、再現性のある環境で学べた

---

### 🎯 こんな人におすすめの内容でした

- **Streamlitでアプリを作ってみたい人**
- **LASSOなど機械学習の基本をアプリとして体験したい人**
- **Excel派だけどPythonに挑戦したい人**
- **ChatGPTを相棒に開発してみたい人**

---

「Streamlitっておもしろい！」「LASSOってこういうふうに使えるんだ！」と思ってもらえたら嬉しいです。  
次は、他のモデルへの応用や、もっとリッチなデータ可視化にも挑戦していきたいですね。

> 💡 本記事で紹介したコードは、そのまま教材としても活用できます！

---

このまとめ、もし文体や雰囲気を変えたい場合もすぐ調整できますよ✍  
「導入や本文にもまとめとリンクさせたい」なんて相談も大歓迎です！

# **user**:

ありがとうございます。今日はこのくらいで満足です。また今度よろしくお願いします！

# **assistant**:

こちらこそ、素敵な開発とブログ企画にご一緒できて楽しかったです！😊✨  
「また作りたくなった」「ブログの続きを書きたい」「エラーが出ちゃった」など、どんなことでも気軽に声かけてくださいね。

お疲れさまでした！またお会いできるのを楽しみにしてます🙌🍵