0
0

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.

boto3-stubsでBoto3の利用を楽にしたい

Last updated at Posted at 2023-05-09

はじめに

AWSを利用した開発をするにあたり、Boto3を使い始めました。
基本的には便利なのですが、type hintを使えず、IDEのコード補完も効かないので、
開発中は公式ドキュメントとIDEを何往復もし、何渡すんだっけ、何返ってくるんだっけしながらコピペするみたいなことをしていてとてもめんどくさいです。
そんなめんどくささから解放され、開発のスピードも上げていきたいということで見つけたのがboto3-stubsです。
今回はそれを試してみようというのが本記事の目的です。

やっていく

基本的にはPyCharm Community Editionでやっていきますが、
最後にVSCodeでもやります。

1. Project作成

pipenvを利用するところ以外は適当に入力して作成。
スクリーンショット 2023-05-08 13.58.57.png

2. パッケージのインストール

以下のコマンドを利用してboto3とboto3-stubsをインストールします。

pipenv install boto3
pipenv install 'boto3-stubs[sqs]'

今回はさっくりと試したいのでSQSのみをインストールしていますが、
複数のサービスを利用したい場合にはboto3-stubs[sqs, dynamodb]のようにカンマ区切りでインストールすることができます。(大文字でもいけました)

試す

stubsを使わないパターン
import boto3

def test() -> str:
    sqs = boto3.client("sqs")

よくあるクライアントを作成する時のコードです。
このままこのクライアントを使ってメッセージを受信する処理を作ろうと思ってもコード補完は効きません。
boto3.client("service_name")はメソッドの定義上Anyを返すので、返ってきたインスタンスで何ができるのかIDEでは予測しようがないためです。

stubsを利用してみる

クライアントを作るところはstubsを使わないパターンと一緒ですが、type hintの指定が異なります。

import boto3
from mypy_boto3_sqs.client import SQSClient

def test() -> str:
    sqs_stubs: SQSClient = boto3.client("sqs")

SQSClientをtype hintに指定することでコード補完が可能になります。
image.png
これなら、ある程度用語などわかっていれば公式ドキュメントを見なくてもSQSの操作ができそうです。
さらに以下のようにレスポンスにもtype hintを適用することができます。

def test() -> str:
    sqs_stubs: SQSClient = boto3.client("sqs")
    result: ReceiveMessageResultTypeDef = sqs_stubs.receive_message(QueueUrl="url")
    messages: List[MessageTypeDef] = result.get(key="Messages")
    message: MessageTypeDef = messages[0]
    body: str = message.get(key="Body")

    return body

定義されているkeyについては定義を見に行くことになりますが、
IDE内で完結しているため手間はかなり減りました。

おまけ: VSCodeでもやってみる

VSCodeには便利な拡張機能があり、PyCharmよりもより便利にboto3-stubsを利用することができます。

利用するのはAWS boto3です。
拡張機能のインストール後、Command PaletteからAWS boto3: Auto-discover boto3 services in current projectを実行します。
すでにコードがある場合にはよしなにコード内を探して利用されているサービスにチェックを入れてくれます。
image.png
調整してOKをすると、インストールが走ります。

そうするとこんな感じでtype hintなしでもコード補完が効くようになります。
image.png

type hintは書きたくないけどコード補完は欲しい場合にはこちらが有効そうです。
スクショ等は載せませんが、クライアント作成時点時に、SQSClientが返却されるようマウスオーバー表示があるのでその辺りも便利な拡張機能です。

まとめ

使ってみた感じですが、type hint + コード補完によってかなり開発の速度が上がりそうな気がしています。
PyCharmとVSCodeで試し、拡張機能がある分VSCodeのほうが少し便利に使えますが、
PyCharmの方がレスポンスのキー確認などがしやすかったりします。
完全にお好みで問題ない範囲だと思います。

お疲れ様でした :coffee:

参考

Boto3の補完を可能にするboto3-stubsを使ってみる
boto3-stubs を使って、boto3 でコード補完を有効にしよう

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?