昔作ったダジャレ判定AIをpip installできるようにしたい

# ダジャレAIをpip install したい！！！
このBPアドベントカレンダーでダジャレAI（というか布団ふっとばし装置）を作成して早３年立ちました。
https://qiita.com/fujit33/items/dbfbd7a2aa3858067b6c

あれから業務でPythonを書き続けていますが、あのとき作成したダジャレ判定AI（Shareka）とダジャレ評価AI（Ukeruka）を使ったことはありません。

**なぜなら、pipでinstallできないからです**

今回はダジャレかどうかを判定するSharekaをPyPIに登録し、だれでも気軽にダジャレ判定できるようにしたいと思います。

※今年は時間がなくて謎AIプロダクトは作れませんでした、、、期待していた方は[クソアプリアドベントカレンダー](https://qiita.com/advent-calendar/2021/kuso-app)で投稿したこちらで我慢してください。

https://qiita.com/fujit33/items/fa40a79b905d31e8449c


# 手順

## 準備
### Poetryインストール
今回はPyPIに登録するためのツールは色々ありますが、色々調べた結果（参考にいっぱい記載）poetryを使うのが最も手軽にできそうなので、こちらを選びました。
Poetryはパッケージの依存関係管理だけでなく、パッケージのビルドや公開までやってくれる優れものです。
poetryを使ったPyPIへの登録記事はこちらが一番参考になりました。
https://kk6.hateblo.jp/entry/2018/12/20/124151#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B

```
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
```
### 雛形の作成
下記コマンドで作成するパッケージ名を指定することで、最小構成のファイルを構成してくれます。
パッケージ名は **dajapy** （読み：だじゃぱい）です！

```
poetry new dajapy
```

作成される雛形

```
.
├── README.rst
├── dajapy
│   └── __init__.py
├── pyproject.toml
└── tests
    ├── __init__.py
    └── test_dajapy.py
```

### 必要なパッケージをインストール
poetry環境でパッケージをインストールする際はpoetry addを使います。依存関係の解決や、管理ファイルの更新まで自動で行ってくれます。

```
poetry add sudachipy
poetry add sudachidict_core
```

## パッケージの実装
今回は最小構成のパッケージとして、ダジャレを入力するとダジャレかどうかを判定してくれる関数を持つパッケージを作成します。
詳しい実装は下記を参照ください。弊社エンジニアの[@woody-kawagoe](https://qiita.com/woody-kawagoe)がリファクタしてくれたコードです。
https://github.com/fujitako03/dajapy

### 構成だけ説明
dajapy配下のshareka.pyでダジャレかどうかを判定するSharekaクラスを実装し、\_\_init__.pyでダジャレかどうかを判定するis_dajare関数をimportしています。

```
├── README.rst
├── dajapy
│   └── __init__.py
│   └── shareka.py
├── pyproject.toml
└── tests
```

### テスト
雛形で作られたtests/test_dajapy.pyに、テストコードを記載していきます。

```python
from dajapy import __version__, is_dajare


def test_version():
    assert __version__ == '0.1.1'

def test_is_dajare_true():
    """
    正常テスト（ダジャレ判定）
    """
    sentence = "アルミ缶の上にあるみかん"
    kaburi_count=5

    dajare_flg = is_dajare(
        sentence=sentence,
        kaburi_count=kaburi_count)

    assert dajare_flg == True
```

テストは以下のコマンドで実行可能です

```
poetry run pytest test
```

## パッケージ説明の追記
pyproject.tomlにパッケージに関する情報を追記していきます。
https://python-poetry.org/docs/pyproject/

```toml:
[tool.poetry]
name = "dajapy"
version = "0.1.1"
license = "MIT"
description = "日本語のダジャレを判定するPythonパッケージ"
authors = ["fujitako03 <okome.osakana.oniku@gmail.com>"]
homepage = "https://github.com/fujitako03"
repository = "https://github.com/fujitako03/dajapy"
documentation = "https://github.com/fujitako03/dajapy"
readme = "README.md"

```

## PyPIに公開
いよいよPyPIに登録していきます。

### PyPIアカウントの作成
下記登録フォームからアカウントを作ります。メールアドレス認証を済ませればOKです。PyPIには本番用とテスト用があります。試して見るだけならテスト用を使うようにしましょう。

- 本番用：https://pypi.python.org/pypi?%3Aaction=register_form
- テスト用：https://testpypi.python.org/pypi?%3Aaction=register_form

### リポジトリの設定
連携するリポジトリを設定します

```
# 本番用
poetry config repositories.pypi https://pypi.org/legacy/

# テスト用
poetry config repositories.testpypi https://test.pypi.org/legacy
```

### ユーザ名とパスワードを登録
PyPIに登録したユーザ名とパスワードを入力します

```
# 本番用
poetry config http-basic.pypi [username] [password]

# テスト用
poetry config http-basic.testpypi [username] [password]
```

### API TOKENを登録
PyPIのサイト内でAPI TOKENを作成できますので、こちらも登録します

```
# 本番用
poetry config pypi-token.pypi [api token]

# テスト用
poetry config pypi-token.testpypi [api token]
```

### パッケージをビルドする
下記コマンドでビルドし、自動で必要なファイルを作成してくれます。とても便利。

```
$ poetry build
Building dajapy (0.1.0)
  - Building sdist
  - Built dajapy-0.1.0.tar.gz
  - Building wheel
  - Built dajapy-0.1.0-py3-none-any.whl
```

### パッケージを公開
下記コマンドで公開します。とてもかんたん。

```
# 本番
poetry publish

# テスト
poetry publish -r testpypi
```
pypiのサイトを開いてみると、ちゃんと登録されている！
https://pypi.org/project/dajapy/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135663/beb0d451-9e1f-32f4-a887-86f9e98d7a94.png)


### 公開したパッケージをインストールしてみる
さあ、念願のpip installです。。。。

```
$ pip install dajapy
ERROR: Could not find a version that satisfies the requirement dajapy (from versions: none)
ERROR: No matching distribution found for dajapy
```
あれ、できない。

こちらの記事によると時間がかかることがあるというのですが、今のところできていません。どなたか解決策をご存知でしたら教えて下さい。
https://pypi.org/project/dajapy/

# まとめと今後
ということで、成功する前に時間切れが来てしまいました。
解決できたら記事を更新したいと思います。
下記の参考リンクにもありますが、本当はGithub Actionsを使った自動テスト、自動デプロイ/リリースもやりたかったのですが、こちらも時間がありませんでした。というか本当は時間があればいつもどおり変なやつを作ろうと思っていましたが、今回は時間がなく諦めました。

みなさん、良いお年を！


# 参考
https://zenn.dev/yag_ays/articles/1743f4bad38e82?utm_source=pocket_mylist

https://zenn.dev/karaage0703/articles/db8c663640c68b

https://tech-blog.s-yoshiki.com/entry/236

https://yamayou-1.hatenablog.com/entry/2021/03/02/003923

https://qiita.com/shinichi-takii/items/e90dcf7550ef13b047b5