LLMを使ってpython環境構築してみた【GPT-4.1/WSL/Docker】

# こんな人におすすめ
- docker を使って環境構築したい人
- LLMを使ってどれくらいのものができるのか見てみたい人
# やったことまとめ
作成したレポジトリは[こちら](https://github.com/oct0pus8winner/DockerEnvironmentForPythonSandbox/tree/main)

用意したDocker fileはこちら
```Docker
FROM python:3.11-slim

# 作業ディレクトリ
WORKDIR /workspace

# 必要に応じてgitをインストール
RUN apt-get update && \
    apt-get install -y --no-install-recommends git && \
    rm -rf /var/lib/apt/lists/*

# Pythonライブラリ
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
```
用意したdocker-compose.ymlはこちら
(`src`ディレクトリをプログラムを保存するように作成します)
```yaml
services:
  dev:
    build: .
    container_name: utokyo-ipp-dev
    tty: true
    volumes:
      - ./src:/workspace/src
    environment:
      - TZ=Asia/Tokyo
```
用意したパッケージ一覧(requirement.txt)はこちら
```txt
# 必要最低限
numpy
pandas
matplotlib
```

上記の３ファイルを用意，またはgithubのレポジトリをcloneした後に
次のコマンドを実行すればコンテナができます
```shell
$docker compose build
$docker compose up -d
```
作った環境に入りたいときは次のようなコマンドを打ちます．
```shell
$docker compose exec dev bash
```
コンテナに入った後，サンプルプログラムを動かしたいときは，  
次のようにコマンドを実行すれば動作を確認できると思います．
```shell
$python3 example.py
```
## 経緯
最近話題になっているVibe Coding に興味を持ち，やろうと思い立ったのが最初のきっかけです．
ただ，生成AIを活用するにしても，自分が知ってること以上のものは作れない/使いこなせないんじゃないか，という思考にいたり，まずはツールとしてpythonをある程度補助なしで作成できるレベルになりたいな，と思いました．
そこでまずは[こちら](https://utokyo-ipp.github.io/)の東京大学さんの教材で学ぶことにしました．ついでに自分でコード書きながら回すプロセスもやっときたいな，ということで環境構築に手を付け，どうせなら生成AI使ってみようということでGPT使って作成しました．
加えて言語化も自分に足りないスキルと考えているので，こういった記事の執筆も経験したいなと思いやってみました．
拙い日本語ですがご容赦頂ければ幸いです．

# 手順
やりたいことは決まっていたので，次のようなプロンプトを作成し，投げてみました．
```chatml


ここで書かれているテキストをnotebook上ではなく自分のローカルの環境でコーディングして動かしてみたいです
https://utokyo-ipp.github.io/
そのためのDokerfile, docker-compose.yml, requirement,txt, および起動方法のreademeを生成して



もちろんです！  
東京大学の「入門Pythonプログラミング演習（IPython Notebook）」の教材（https://utokyo-ipp.github.io/）をローカル環境で動かすための、以下のファイル群を用意します。  
- Dockerfile  
- docker-compose.yml  
- requirements.txt  
- README（起動方法説明）

（以下、Dockerfile, docker-compose.yml, requirements.txt, README.md の内容省略）
```
ここで生成されたものは，jupyternotebookを活用するためのコンテナ環境の手順でした．
notebook形式はお恥ずかしい話あまり経験がなかったので，いつも通りプログラム書いて回してって手順でやりたく，次のように修正してもらうように指示を与えてみました．（稚拙な日本語で申し訳ないです．．．）

```chatml


jupyter はべつに使えなくてよくて、vscodeでpythonスクリプトを描きたいです
またマシンはwindowsでwsl2をターミナルとして使いdockerを呼びたいです



承知しました！  
以下の要件に合わせてファイルを再提案します。

- Jupyterは不要、**VSCodeでPythonスクリプト(.py)を直接編集・実行したい**
- 教材（https://utokyo-ipp.github.io/）のノートブック（`.ipynb`）を `.py` に変換して使う or サンプルコード部分を `.py` ファイルとして保存して使う
- WindowsでWSL2（Linux環境）を利用し、DockerもWSL2経由で利用
- VSCodeからコンテナ内のPython環境を使う（VSCodeのDev Containers機能推奨）
- 必要なパッケージはrequirements.txtで管理

（以下、Dockerfile, docker-compose.yml, requirements.txt, .devcontainer/devcontainer.json, README.md の内容省略）
```
ここで生成されたものは上記サイトで公開されているファイルをもってきて使う形式だったので，一から書くのとは違うなと思い，再度支持を与えてみました．
(今思えば全然これを画面の右にだしてコード書いていけば何も問題なかったななんて思ったりしました．)
```chatML


サンプルコードの準備とありますが、このテキストのページを片方で開きながら手打ちでコードを書いて、写経して学んでいきたいです



素晴らしい学習方法です！  
「utokyo-ipp.github.io」のページを見ながら、VSCode上で自分でPythonファイル（例：`src/sample1.py` など）を作成し、手でコードを書いて実行していくのは、理解を深めるのにとても有効です。

あなたの学習スタイルに合わせて、Docker・WSL2・VSCodeでの運用方法を具体的にまとめます。

（以下、ディレクトリ構成や運用フロー、VSCode設定、README追加例など省略）
```
ここで，今まで生成されていた`docker-compose.yml` にdockerのバージョンについての情報が記載されており，自分の記憶ではこれは廃棄された仕様だったような気がしたので，修正してもらいました．
```chatml


docker のアップデートにより、docker-compose.ymlにはversion情報を記載しなくてもよくなったと思うのですが、どうでしょうか。
最新の情報を参照し、アップデートしてください
またdockerを起動した状態でソースを書いていきたいのでコピーという方法ではなくてディレクトリをマウントして書いていく方針で作業したいです



最新のDocker Compose（v2以降）では、docker-compose.ymlファイルのversionフィールドは**公式に「廃止（obsolete）」**となっています。  
versionを記載しても無視され、Composeは常に最新のスキーマで解釈します。そのため、**versionフィールドは省略して問題ありません**。

また、ご要望通り「コピー」ではなく、**ホスト側のディレクトリをコンテナにマウントしてリアルタイムでソースを書いていく**方法が推奨されます。  
これにより、VSCodeなどで直接編集ができ、変更は即座にコンテナ側にも反映されます。

（アップデート版 docker-compose.yml の内容省略）
```
以上でこの環境ができました．

# 動作確認
実際にこれ動くの？ということで動かしてみました．
実行コマンドは次の通りです
```shell
$docker compose build
$docker compose up -d
$docker compose exec dev bash
```

関数を作ってみようのステップをやってみました．
![スクリーンショット 2025-05-25 213628.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578004/579a4a4d-7f78-4063-ac42-6bd34d0106d8.png)

BMIを図るプログラムですね（間違えてます

動かしてみたところ何も出ませんでした．．．
エラーの原因調べたいけどエラーコードなくてわかんない．．
えーっとAI使っちゃおう（本末転倒）
![スクリーンショット 2025-05-25 213656.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578004/3d18bf9a-e2e3-4ec5-8266-792748e2b8c2.png)
候補も出してくれて便利ですね！

修正し実行してみるとちゃんと結果がでました．
![スクリーンショット 2025-05-25 213729.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578004/13abfb9b-5634-48b4-8121-bdab507f1d17.png)

pythonの環境ちゃんとできててよかった～

今後はちゃんとこういったツールを使いこなしていくためにも自分である程度は書けるようになりたいです．
## まとめ
昔はもっと動かしてみてエラーが帰ってきて修正，というステップを踏んでいたので，ものの数分でやりたい環境を作れてすごいなーという感想です．

よくある話として，魑魅魍魎なんて手で書けないけど補完機能を使いこなしてうまくいってるみたいに，なんとなくAIに任せてコード生成していけばいいんじゃない，という考えも聞きます．
ただ，補完機能を使って文字書くためには，魑魅魍魎をちみもうりょうと読めないと使えないし，誤字ってても気づけないんじゃあないかと思います．
出てきたコードを読めて，修正/ 運用していけるようになりたいなと思います．
# 参考資料
[Pythonプログラミング入門 — Pythonプログラミング入門 documentation](https://utokyo-ipp.github.io/)!