はじめに
こんにちは、鈴木商店のDidyです。
2021年5月より鈴木商店に入社し、チーム石崎にジョインしました。
今回は某ブログのジョインネタを真似した自己紹介と、6月の社内報告会で発表できなかった「入社1か月でやった事」を記事にしました。
これまで
社会人になってからエンジニアとして8年間ほど働いています。
新卒入社した会社(前々職)ではWindows系アプリ開発、前職ではバックエンドを担当してました。
ずっと受託開発のチーム配属です。主にアプリの開発、保守とサポート等を行ってました。
好きなもの・こと
・ よくアニメを観ます。
|—- Dアニメストア、Amazon Prime VideoとNetflixに加入してます。
・ 愛用エディタはVim
|—- と社内で言い回ってますが嘘です。本当はNeovimです。
・ 好きな言語はPerlとRustです。
|—- Perlは前職のメイン言語でした。最初は好きになれませんでしたが、今では簡単なプログラムや試しに何かを作る時は、まずはPerlで組むほど重宝してます。
|—- 尊敬する人に「メモリを意識してプログラムを書くのは為になる。だからC言語の勉強は良いよ」と助言を頂きました。当時Haskellに夢中だった私はRustに手を出しました。
現在(入社1か月でやった事)
1. Pythonの勉強
配属先のプロジェクトのメイン言語がPythonだから猛勉強しました。
と言っても前職で少し触った経験があるため、主に使用ライブラリとかを見てました。
折角なのでプロジェクトのテストに使用するライブラリを紹介します。
1-1. pytest
Pythonのテストフレームワークです。標準のunittestより簡潔でPythonらしいコードを記述できます。
1-1-1. テスト本体と前後の処理を分ける
@pytest.fixture
デコレータ付きの関数を用意すればテスト本体から前後の処理を切り分けられます。
以下のテストスクリプトはtest_count_users()/test_update_user()
の順番で実行されます。
現在の@pytest.fixtureのscope
がfunction
のため各テストの前後でsetup_and_teardown()
が2回呼ばれる事になります。
このscopeをfunctionからmoduleに変更したら、モジュール単位となるため実行は一度だけになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# テストフレームワーク import pytest # dbのセッションを取得 from db import session # モデルを取得 from user import User @pytest.fixture(scope='function', autose=True) def setup_and_teardown(): """ 前処理と後処理 """ # ユーザーを100件登録する for u in range(100): db.session.add(User(f'test{u}')) db.session.commit() # テスト実行 yield # 登録したユーザーを削除する db.user.delete() db.commit() def test_count_users(): """ 期待通りのユーザー数が登録されてる事を確認する。 """ assert 100 == User.query.count() def test_update_user(): """ 期待通りのユーザー名に変更されてる事を確認する。 """ assert 0 == User.query.filter_by(name='グレンラガン').count() # ユーザー名の変更 user = User.query.first() old_user_name = user.name user.name = 'グレンラガン' db.session.commit() # 変更後の名前で取得できる事を確認する assert 1 == User.query.filter_by(name='グレンラガン').count() # 変更前の名前で取得できない事を確認する assert 0 == User.query.filter_by(name=old_user_name).count() |
1-1-2. 複数パターンのテストケースを用意する
@pytest.mark.parametrize
デコレータをテスト関数につけるだけで複数パターンのテストケースを作成できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@pytest.mark.parametrize( 'user_id, expected_user_name', [ (1, 'グレンラガン') (5, 'test5'), (25, 'test25'), (99, 'test99') ] ) def test_get_user(user_id, expected_user_name): """ 期待通りのユーザー名を取得できる事を確認する。 """ assert 0 == User.query.filter_by(name='グレンラガン').count() user = User.query.filter_by(user_id=user_id).one() assert user.name == expected_user_name |
2-1. httpretty
PythonのHTTPクライアントのモックツールです。
モック先のURLとレスポンスを記述するだけで使用できます。
リクエストの内容を確認できるため、正しいパラメータ等が渡されてるかどうかのチェックに使えます。
3. 開発環境の構築
入社してから暫くはLanguageClient-neovimとpython-language-serverを利用していました。
でも最近はcoc.nvimとpyrightに移行しました。
4. コンテナ開発
プライベートでDockerを軽く触った程度の経験です。
現プロジェクトはDocker上で動くものが多いので勉強中です。
Kubernetsは難しい。良い資料または本があれば欲しい。
最後に
何も分からない未熟者です。
少しでも早く業務に慣れて、お役に立てるよう努めて参ります。
これからよろしくお願いします。