Portfolio移行録（Laravel 9 ⇒Django＆Poetry移行録）①～プロジェクトの準備～

最近、転職活動終了からずっと放置していたLaravel（PHPフレームワーク）で作ったポートフォリオをDjango（Pythonフレームワーク）に移行・機能追加等する過程でPython等の学習を進めています。ある程度進んだらさすがにReactも始めます。たぶん

**なお、Python等の学習はWindowsの私用ノートPC、VScodeで基本的にしています。**

## ①開発環境を整える

とりあえず、以下の方法で私用PCのLinuxにPoetryやPythonのインタープリターをインストールしました。

https://qiita.com/thinking-weed/private/dda47b01dff1c294686b

また、その後以下のコマンドで、Linux（厳密には筆者はUbuntu）上にDjangoをインストールしました。

```powershell
wsl
$ sudo apt install python3-django
```

## ②雛形を作る

VScodeでDjango版ポートフォリオを作成するフォルダ（今回はDjangoes）を開き、以下のコマンドを入力
```powershell
wsl
django-admin startproject django_portfolio
```
入力した時点で以下のフォルダ構成で雛形ができました。
```
Djangoes(フォルダ)
   |
   |__django_portfolio（フォルダ）
　　　　　　　|
　　　　　　　|--django_portfolio（フォルダ）
　　　　　　　|　　　　|--__init__.py（初期化処理を行うスクリプトファイル）
　　　　　　　|　　　　|--asgi.py（ASGIという非同期Webアプリケーションのためのプログラム）
　　　　　　　|　　　　|--settings.py（プロジェクトの設定情報を記述するファイル）
　　　　　　　|　　　　|--urls.py（プロジェクトで使うURLを管理するファイル）
　　　　　　　|　　　　|--wsgi.py（WSGIというWebアプリケーションのプログラム）
　　　　　　　|
　　　　　　　|--manage.py（このプロジェクトで実行する機能に関するコマンドなどが記述されている）               
```

## ③上記の雛形にPoetryを導入する、pyproject.tomlの作成

```powershell
#wsl起動したまま
cd ～\Djangoes\django_portfolio
```
かVScodeでDjangoes直下のdjango_portfolioフォルダに作業フォルダを移動後、以下のコマンドを使いました。
```powershell
#wsl起動したまま
$ poetry init  
```
このコマンドを使うと、Pythonプロジェクトの設定や依存関係を管理するためのpyprojec.tomlというファイル（**requirements.txtとvenvを合体させたようなもの**）の設定に関するメッセージが以下のように出たので、以下のように設定しました。（※入力してEnterすると随時メッセージが出てきます。）

※どのように設定するのが最適解かは理解が進み次第追記します。

```powershell
This command will guide you through creating your pyproject.toml config.
#このコマンドは、pyproject.toml 構成の作成をガイドします。

Package name [～]：👈Poetryを導入するプロジェクト名を記述（※「～」と同じにしました）

Version [～]：👈プロジェクトに適用するPoetryのバージョン（※「～」と同じにしました）

Description []：Poetryを適用するプロジェクトがどのようなプロジェクトか記述？？（※省略可能）

Author [None, n to skip]：👈プロジェクト作成者名？？（※ n で省略しました）

License []:？？（※省略可能）

Compatible Python versions [^3.～]：インタープリターとして用いるPythonのバージョンを指定（※3.x.yのyは省略可能）
#互換性のあるPythonのバージョン

Would you like to define your main dependencies interactively? (yes/no) [yes]　👈yesでEnterすると追加したい物の名前を聞かれます
#主な依存関係を対話的に（インタラクティブシェルで）定義しますか?
Search for package to add (or leave blank to continue):👈追加する外部ライブラリー・パッケージ名（※省略可能）
#追加するパッケージを検索します（または空白のままにして続行します）

Would you like to define your development dependencies interactively? (yes/no) [yes]👈yesでEnterすると追加したい物の名前を聞かれます
#開発依存関係を対話的に（インタラクティブシェルで）定義しますか?
Search for package to add (or leave blank to continue): 👈追加する外部ライブラリー・パッケージ名（※省略可能）

Generated file
#以下、こういう感じのpyprojec.tomlを作りますというメッセージが出ます。

Do you confirm generation? (yes/no) [yes]　#おそらく「これで大丈夫ですか」的な意味
👆yesとするとGenerated file以下に提示されたpyprojec.tomlが以下の場所にできます。
```
```
Djangoes(フォルダ)
   |
   |__django_portfolio（フォルダ）
　　　　　　　|
　　　　　　　|--django_portfolio（フォルダ）
　　　　　　　|--manage.py（このプロジェクトで実行する機能に関するコマンドなどが記述されている）
　　　　　　　|--pyprojec.toml👈開けるとGenerated file以下に提示された内容が載っています
```
なお、上記のQiitaにも書いたようにLinuxにPythonの各インタープリターをあらかじめ入れておくと、pyenvで切り替えなくとも（ある程度）使用するPythonのインタープリターが切り替えられます。なお、各プロジェクトで使用しているインタープリターは次のコマンドでも確認できます
```powershell
wsl
poetry env info
```

## ④Poetryを導入した上記の雛形に外部ライブラリー・パッケージを入れ直す・追加する
<h3>なぜかはまだ全然分かっていないですが上記の順番を辿った段階では、pyprojec.tomlにdjangoに関する情報は載っていません。</h3>
<h3>そのため、再度djangoパッケージをPoetryで入れ直します。</h3>

```powershell
wsl
$ poetry add django
#poetry add 外部ライブラリー名・外部パッケージ名
```
※入力すると、pyprojec.toml の以下の部分が追記されるとともに、poetry.lockというファイルが以下の場所にできます。
```pyprojec.toml
[tool.poetry.dependencies]
python = "^3.〇"  👈③のpyproject.tomlの作成時に指定したバージョンが書かれています。
Django = "^〇.△.▢"　👈〇.△.▢はバージョンの数字
```
```
Djangoes(フォルダ)
   |
   |__django_portfolio（フォルダ）
　　　　　　　|
　　　　　　　|--django_portfolio（フォルダ）
　　　　　　　|--manage.py（このプロジェクトで実行する機能に関するコマンドなどが記述されている）
　　　　　　　|--pyprojec.toml
　　　　　　　|--poetry.lock       
```
なお、
```powershell
wsl
$ poetry new 新規プロジェクト名
```
で作り始めると、pyproject.toml、poetry.lock、testフォルダ・pytestも一緒に生成されますが、上記のこれまでの方法だとpytest及びtestフォルダは生成されないので、
```powershell
$ poetry add pytest
```
で同様にインストールして、testフォルダをpyprojec.tomlやpoetry.lock等と同じ階層に作りました。

## ⑤開発用サーバーを動かしてみる

今回あくまで使用しているインタープリターは個人Linux上にあるので、相変わらずwslを入力した状態でさらに以下のコマンドを入力します（※作業フォルダは動かすプロジェクトにしておく。今回で言うとDjnagoesフォルダ直下のdjango_portfolioフォルダ）
```powershell
wsl
$ python3 manage.py runserver
```
入力して出てくるメッセージ内の中に
```
Starting development server at http://127.0.0.1:8000/
```
とあれば、とりあえず開発用サーバーは動いていて「http://127.0.0.1:8000/」
にアクセスすると以下のデフォルト画面が出てきました。また開発用サーバーを起動した段階でdb.sqlite3ファイルがpyproject.toml、poetry.lockと同じ階層に自動的にできました。

<h4>そのときのターミナルの様子</h4>

![runserver.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/fe2fe7a9-326a-2594-593a-ec7b4d4931dd.png)

<h4>プロジェクトのデフォルトの初期画面</h4>

![default.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/00978bd0-0918-0570-af7b-fb0250c7a240.png)


## 主な参考資料

①Python Django 4 超入門　掌田津耶乃（著）　秀和システム
<details><summary>Amazonリンク</summary>

https://www.amazon.co.jp/Python-Django-4-%E8%B6%85%E5%85%A5%E9%96%80-%E6%8E%8C%E7%94%B0%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798062413/ref=sr_1_1_sspa?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=R0XCD758BHNL&dib=eyJ2IjoiMSJ9.ebU1BVoISj7I46DdCZpOHw8C8FdxzZmO4AT8rnK7_slFBWQUxdp455QPlyoMl3BJnhZht5EUt8SYY3sk5HPCME-dCo3mJnk9zoMEPgtaTAAOeHOkxSrWfh6uysqURRHXWTBHdyAflRGNwCF7jucTCtcTb20mxHerWqIpUemEFzq5McQok74xClIP8VVHsoPFeBffYf9JB_H9ZhKXfz5ayadldLCSkWH9zdYHJit9yMc.AityoC-b4JhsJYR0-AJl5NfJmrbFwMFxuaor1cZrb0s&dib_tag=se&keywords=Django+%E5%85%A5%E9%96%80&qid=1731134712&s=books&sprefix=django+%E5%85%A5%E9%96%80%2Cstripbooks%2C195&sr=1-1-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&psc=1
</details>

②[初心者向け] Poetry入門!インストール方法から使い方、コマンド、パッケージの管理方法まで徹底解説　@shun198 さん Qiita
https://qiita.com/shun198/items/97483a227f288ad58112#pyprojecttoml%E3%81%A8poetrylock

③Poetry公式ドキュメント
https://python-poetry.org/docs/basic-usage/