『入る学科間違えた高専生』の日記

プログラミングのコードを書いたりする予定です。あとは日記等。あといつまで高専生やねん

ShodoコマンドをDockerコンテナーで使えるようにした

この記事はAI校正Shodo Advent Calendar 2024 6日目の記事です。


はじめに

弊社では、 PyPI にて shodo を提供しています。
shodo ではコマンドラインインターフェイス(以下、 CLI )とライブラリとしての shodo を提供しています。

インストール自体はとてもシンプルで pip コマンドでインストール可能です。

$ pip install shodo

また、 pip 自体は、最近の Python ではデフォルトでインストールされ実行できます。*1
しかしながら、 Python のインストールが必須となるほか、最近の macOS では Python がプリインストールされていなかったりとすぐに pip を実行できるような環境を用意できない方がいるかもしれません。*2

Docker コンテナーならすぐに実行できるような人はいると思います。*3

Docker イメージの紹介

Docker イメージは Docker Hub および GitHub Container Registry から取得可能です。
またバージョンについては、 shodoPyPI のバージョンに揃えてあるので、 PyPI のバージョンに合わせて使用したいバージョンを docker pull してください。

Docker Hub

https://hub.docker.com/r/nnsnodnb/shodo

$ docker pull nnsnodnb/shodo:latest

GitHub Container Registry

$ docker pull ghcr.io/nnsnodnb/shodo:latest

また、イメージの定義も GitHub で公開しています。 Star ください!!

何の捻りもないですが shodo + docker で「 shodocker 」です!よろしくお願いします!!!!

Docker コンテナーの使用方法

今回は、すでに docker pull 済みで Docker Hub を例に説明します。

認証

shodo CLI は Shodo API をします。

Shodo API については以下にドキュメントがあるので参照してください。

ここでは詳細な説明は省きますが、 shodo CLI は以下の2つのパターンで認証を行えるようになっています。

  • 環境変数を参照する認証
  • 認証ファイルによる認証

環境変数を参照する場合は SHODO_API_ROOTSHODO_API_TOKEN を設定する必要があります。
認証ファイルによる認証については、通常の場合は shodo login で認証ファイルを保存すると作成されます。また認証ファイルは ~/.config/shodo/credentials に保存されます。

  1. 環境変数を参照する認証
$ docker run -it \
    -e SHODO_API_ROOT=my-shodo-api-root \
    -e SHODO_API_TOKEN=my-shodo-api-token \
    nnsnodnb/shodo:latest lint
  1. 認証ファイルによる認証
$ docker run -it \
    -v ~/.config/shodo/credentials:/shodo/credentials \
    nnsnodnb/shodo:latest lint

上記のようにすることで Shodo API との認証が可能になります。

コマンドの実行

shodo CLIlogin lint download のコマンドを提供しています。
login コマンドは Docker コンテナーということもありここでの使用はあまり推奨しません。*4
lint および download コマンドについては、通常のように実行ができます。

lint の実行

インタラクティブに実行をしたい場合は、以下のように実行します。校正する文章の入力が完了したら Windows の場合は、 Ctrl + ZmacOS もしくは Linux の場合は ctrl + D で校正をリクエストできます。

$ docker run -it \
    -e SHODO_API_ROOT=my-shodo-api-root \
    -e SHODO_API_TOKEN=my-shodo-api-token \
    nnsnodnb/shodo:latest lint
飛行機の欠便があり、運行状況が変わった。 # ユーザーの入力です

テキストファイルを校正したい場合は、コンテナー内の /shodo/ にマウントします。

$ docker run -t \
    -e SHODO_API_ROOT=my-shodo-api-root \
    -e SHODO_API_TOKEN=my-shodo-api-token \
    -v $(pwd)/README.md:/shodo/README.md \
    nnsnodnb/shodo:latest lint /shodo/README.md

download の実行

投稿および画像をダウンロードする場合は、 download コマンドを使用します。
ダウンロード先を指定しない場合は、コンテナー内の /shodo/docs にダウンロードがされ、これをホストマシンにマウントすることでホストマシンにも画像やブログ記事を保存ができます。

$ docker run \
    -e SHODO_API_ROOT=my-shodo-api-root \
    -e SHODO_API_TOKEN=my-shodo-api-token \
    -v $(pwd):/shodo/docs \
    nnsnodnb/shodo:latest download

おわりに

ぜひ、 Shodo を使った AI 校正で快適な執筆ライフをノシ

執筆:@nnsnodnb
Shodoで執筆されました

*1:昔は get-pip.py でインストールしたりしてたなぁ...

*2:macOS であれば、 Homebrew を入れて brew install python@3.x を実行したら pip3 が実行可能になります。

*3:いやこれも同じだろ!いい加減にしろ!という意見は受け流します。

*4:使い捨てなので認証情報がコンテナー内依存になるため