こんにちは、高知からリモートインターンしている森田ドラゴンです。毎週水曜日にインターンをしたあと、記事を書くことが通常です。ですが、今回のインターンでは初めて学ぶことが多かったので、もう1日だけ猶予をもらい、アウトプットさせてもらうことになりました。遅くなってすいません。
現在の課題
今やっていることは「既存のAPIを利用して、お天気apiを作る!」というものです。その中で簡単な設計やテストを行い、開発手法を学んでいくことが目的です。
詰まっていること
単体テスト、統合テスト、VSCodeデバッガーの使い方で詰まっています。今までのインターンでは、AWSに関係する課題に取り組んでいました。AWSに関する基礎的な知識がある状態で課題を進めていたので、トライ&エラーでも進めていくことができていました。
ただ、設計やテストについてはほとんど知識がない状態でやっていました。そのため、どの程度テストすればいいのか、どのツールをどうやって使うのがいいのか?といった部分で迷ってしまいました。
なので今回は、色々input してから開発を始めていいよーといわれたので、テストの区分け, docker についてinputしました。
テストの区分け
テストには単体テストと統合テストがありますが、具体的にはどのツールを使ってどんなやり方でテストをすればいいのか、正解がわからなかったので自分なりに分類してみました。
単体テスト
単体とは、関数一つ一つのことです。具体的なテスト手法は pytest を用いて、入力と出力を定義しテストするという手法です。作業の途中で「変数一つ一つの値までデバッガを使って追っていったほうがいいのか?」と疑問に思いましたが、おそらくそれは案件次第なのだと思います。今回の場合は、そこまでする必要ないでしょう。
とはいえ、プログラムを修正する上でもデバッガは必要になってきます。エディタとしてなにも考えずVSCodeを使っていましたが、VSCodeのもっとも優秀な機能の一つがデバッガとのこと。
関数のテストとは話がずれてきますが、 VSCodeとAWS SAMを連携させてテストができるみたいです。ただ、configファイルの設定がおかしいのか、ローカルファイルのパスがおかしいのか、原因はわかりませんが、うまく動きません。とりあえず検索してエラー対処してみましたが、動作しませんでした。この機能は、AWS リソースをDocker上で起動しながら、ブレイクポイント等を使ってデバッグする機能なので、めちゃめちゃ便利だとは思います。ただ必須ではないので、とりあえず次に進みました。
結合テスト
単体テストでテストされた関数を組み合わせて、プログラム全体が動作するかどうかテストする工程です。今回の場合はpytestの単体テストをクリアした段階で、pythonコードに問題が起きることはないと思います。コード自体の規模が小さいので。問題はAWSリソースを絡めたテストです。
具体的にはsam local start-apiでAPIのテスト用ローカルエンドポイントを準備して、テストします。ここもリクエストとレスポンスの組み合わせが正しいかどうかで検証します。境界値で調べていったらいい感じにできそうです。
正直なところ、AWSリソースが自分の思った通りの設定になっているかテストしたほうがいい気もします。ただ、SAMのテンプレートに書き、それをテストする手法としても sam local start-api で動かすことしか思いつかないです。なので、必要がないのかもしれません。
Docker
テストとは話が飛びますが、Dockerのチュートリアルもやってました。Dockerは「開発環境を簡単に構築してくれるツール」と認識していました。ただ、チュートリアル等でしっかり勉強したことはなかったので、ついでに調べながらチュートリアルをこなしました。
使い方としては、「ローカル開発環境の構築と共有」「インフラのテスト」と2つの使い方ができるみたいです。「インフラのテスト」はLinuxの設定等の知識に乏しいので、実際にやってみるのはまだ先になりそうですが、「ローカル開発環境の構築と共有」に関しては直感的に理解できました。Gitでコードは共有できても、環境はそれぞれのpcに依存してしまうので、そのために必要なのだと思います。
他のローカル環境を構築するツールとの違いは、Docker一つで素早く簡単に構築できてしまうことにあるみたいです。昔から使われているVagant等のツールと何が違うんだろう?どう使い分けてるんだろう?とずっと疑問に思っていたので、使い分けに迷っていたんですが、とりあえずDockerと頭の中で導線を引けたのがよかったです。
Dockerを構成する、imageやDockerファイル等のDockerの仕組みは、なんとなくAWSに似ている部分が歩きがします。
感想
「どっちのやり方でやればいいのか?」「どの程度までやればいいのか?」といった疑問を感じていて、ずっともやもやしていたので、その考えが整理できたのがよかったです。今回のinputで、「pytestは関数一つ一つクリアしたら ok 」「統合テストは sam local start-apiでやる」という風に自分の中で結論づけました。これから作業していく中で、また新しい技術がでてくるかと思いますが、今回は上記のやり方から外れないように、迷わないように動いていこうとおもいます。