【macOS】asdfとPoetryでPythonを実行したい

# はじめに
Python をローカルで実行したいけれど、Anaconda は全員が使えるわけではない…ということでasdf とPoetry でPython を実行する環境を構築したいです。
※ asdf とは、Poetry とは、に関しては触れていません。構築手順のみです。

備忘録として記事にアウトプットします。

# 環境
OS : macOS
パッケージマネージャー : Homebrew

# Python実行までの手順
+ [asdf のインストール](#asdfのインストール)
+ [asdf でPython をインストール](#asdfでPythonをインストール)
+ [asdfでPoetryをインストール](#asdfでPoetryをインストール)
+ [Poetryでプロジェクトを初期化](#Poetryでプロジェクトを初期化)


# asdf のインストール
## 1. 公式のasdf のダウンロード
以下を実行して、公式のasdf をダウンロードする
```:ターミナル
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0
```

## 2. 依存関係のインストール
環境によって変わりますが、`macOS` / `Homebrew` の場合は以下を実行して依存関係のインストールをする
```:ターミナル
brew install coreutils curl git
```
他の環境の場合は[こちら](https://asdf-vm.com/ja-jp/guide/getting-started.html#_1-%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)を参照

## 3. asdf のインストール
使用しているシェル、OS、インストール方法によって変わりますが、`Bash` / `macOS` / `Homebrew` の場合は以下を実行する
```:ターミナル
echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ${ZDOTDIR:-~}/.zshrc
```
他の環境の場合は[こちら](https://asdf-vm.com/ja-jp/guide/getting-started.html#_3-asdf%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)

asdf のversion を確認する
```:ターミナル
asdf version
```

参照 : [asdf のインストールガイド](https://asdf-vm.com/ja-jp/guide/getting-started.html)


# asdf でPython をインストール
1. ターミナルで1行ずつ実行
    ```:ターミナル
    % brew install openssl readline sqlite3 xz zlib tcl-tk
    % asdf plugin-add python
    % asdf list all python
    % cd XXX   #ディレクトリ `XXX` に移動
    % code .   #VSCode を立ち上げる
    ```
1. VSCode で[`XXX`] のフォルダを開く
1. 新しくファイルを作る
    ![vscode8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3851617/e22cc961-a408-3c32-f69a-65079f318973.png)
1. 作成したファイルの名前を`.tool-versions` とする
1. ファイル内に`python 3.11.3` と書いて保存する
1. ターミナルで以下を実行する
    ```:ターミナル
    asdf install
    ```
1. 以下を実行してPython のバージョンを確認、3.11.3 であればOK
    ```:ターミナル
    python --version
    ``` 

>※`code .`がcommand not foundのとき
>1. VSCodeを起動する
>1. コマンドパレットを開き（Command+Shift+P）、`shell command`をクリック
>1. `code`コマンドをPATHコマンドにインストール
>1. 再度ターミナルで`code .`を実行する

参照 : [asdf-pythonのGitHub](https://github.com/asdf-community/asdf-python)


# asdfでPoetryをインストール
1. ターミナルで1行ずつ実行
    ```:ターミナル
    asdf plugin-list-all | grep poetry
    asdf plugin-add poetry
    ```
1. 先ほど作成した`.tool-versions` ファイルに`poetry 1.8.3` と追記して保存
1. 再度ターミナルで以下を実行
    ```
    asdf install
    ```
1. 以下を実行してPoetry のバージョンを確認
    ```:ターミナル
    poetry --version
    ```


# Poetry でプロジェクトを初期化

1. ターミナルで以下を実行し、完了するまですべてEnter を押す
    ```:ターミナル
    poetry init
    ```
1. 実行していたフォルダに`pyproject.toml` というファイルが作成される
1. Python のバージョンを`python = 3.11.3`に書き換えて保存
1. ターミナルで以下を実行
    ```:ターミナル
    poetry config virtualenvs.in-project true --local
    ```
1. 実行していたフォルダに`poetry.toml` というファイルが作成される
1. ターミナルで以下を実行
    ```:ターミナル
    which python
    ```
1. 実行で出てきたlocation をコピーして、ターミナルで以下を実行
    ```:ターミナル
    poetry env use <コピーしたlocation>
    ```
1. Python のバージョンを確認
    ```:ターミナル
    poetry run python --version
    ```

# Python のHello World

1. `src` というフォルダを作成する
![vscode24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3851617/5a52de00-dd7b-42ba-bbf4-a998e720c894.png)

1. `hello.py` というPython ファイルを作成する
![vscode26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3851617/71c5a30b-4c32-4f3f-a7b3-1e88e763bd67.png)

1. 以下のコードを書き込む
    ```:Python
    print("Hello Python")
    ```

1. 以下を実行する
    ```:ターミナル
    poetry run python src/hello.py
    ```

1. 以下が出力されればOK！
    ```
    Hello Python
    ```