9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-12-19

ダジャレAIをpip install したい!!!

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

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

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

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

※今年は時間がなくて謎AIプロダクトは作れませんでした、、、期待していた方はクソアプリアドベントカレンダーで投稿したこちらで我慢してください。

手順

準備

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://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に、テストコードを記載していきます。

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/

[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には本番用とテスト用があります。試して見るだけならテスト用を使うようにしましょう。

リポジトリの設定

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

# 本番用
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

公開したパッケージをインストールしてみる

さあ、念願の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を使った自動テスト、自動デプロイ/リリースもやりたかったのですが、こちらも時間がありませんでした。というか本当は時間があればいつもどおり変なやつを作ろうと思っていましたが、今回は時間がなく諦めました。

みなさん、良いお年を!

参考

9
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?