きり丸の技術日記

技術検証したり、資格等をここに残していきます。

技術

【Git】マージ済みのリモートブランチをローカルブランチから削除する

Gitでブランチを切って開発しているとローカルブランチはすぐに複数増えてしまいます。今回の記事では、リモートリポジトリが存在しない場合にローカルブランチもワンライナーで削除するためのメモ。 環境 Git 2.34.1 WSL Ubuntu 22.04.4 LTS ゴール マージ…

FastAPIのHTTPExcrptionはログに出しても空文字列の可能性がある

FastAPIでHTTPExceptionをログに出力しようとした時のメモ。 環境 Python 3.12.3 FastAPI 0.103.1 0.110.0 対応 少し古いFastAPIのライブラリなら、reprを使用してシリアライズしてください。もし、strで検証しても空文字列でなければ、そのままでも問題あり…

Pythonのjinja2でマルチパートメールのテンプレートを取得する

Pythonでマルチパートメールを送る方法をブログにしました。しかし、前回の記事はファイルからテンプレートを取得していないので、マルチパートメールを実質運用できません。今回はjinja2を使用してファイルからテンプレートを取得することで実運用できるよ…

Pythonでマルチパートメールを送る(smtplib)

Pythonでメールを送る方法を素振りしたかったのでメモします。SMTPを使用し、マルチパートメールを送るところまでを目標とします。 なお、実務ではSESを使用したり、SendGridを使用することが多いと思うので、あくまでローカルでメールの動作確認をする程度…

GitHubでDraftのPRを除外してOpenだけにしたい

GitHubでレビューを依頼されたときに、レビュー依頼が多すぎてOpen状態のPullRequestだけを確認したい時のメモ。 環境 GitHub 2024/04/20 対応 次のどちらかをフィルタに設定してください。 draft:false -is:draft ちなみに、JetBrainsのPull Requestsでも有…

DockerのMinioをアップデートしたら起動しなくなった

DockerのMinioを使用していますが、イメージが古すぎてディレクトリごとアップロードができませんでした。そのため、最新イメージにアップデートしようとしたところ、エラーメッセージが出て起動しなかったその対応を記載します。 ※ プロダクション環境でMin…

WSLで起動したサーバにiPhone等のモバイル端末からアクセスする

※ 家で検証したときはできなかったのですが、会社で検証したときはできましたので、残しておきます。 WSLで起動したサーバに対してiPhoneやAndroidからアクセスすることでモバイル端末の実機確認をしたかったのですが、単純にWSLのIPにアクセスするだけでは…

Gmailでテキストメールを受信して確認する(クライアント問わない方法)

Gmailでテキストメールを送信する方法はたくさん見つかったのですが、受信してテキストメールを確認する方法は見つからなかったのでブログにします。 なお、GmailではHTMLメールとテキストメールを選んで受信はできません。そのため、受信するではなく、受信…

testcontainers-pythonでMinioを扱う

testcontainers-pythonでminioを使う際に少々手間どったのでメモに残します。 なお、この記事ではtestcontainers自体のメリット等については記載いたしません。 環境 Python 3.12 boto3 1.34.69 minio 7.2.5 testcontainers 4.1.1 ゴール boto3でminioに対し…

【Scrap】pytestについて

ZennのScrapsと同じような感覚の記事。間違っている可能性は十分にあります。 今回の記事ではpytestについて自分が調べたことをまとめます。 環境 Python 3.7.9 pytest 7.4.3 pytest-check 2.2.2 Pytestについて 処理順番 pytestではヒットした順番で順次テ…

Pythonのclassは暗黙的にobjectを継承している(reportMissingSuperCallの対応)

pyrightを使用している際に、reportMissingSuperCallが発生したので対応していました。 error: Method "__init__" does not call the method of the same name in parent class (reportMissingSuperCall) ただし、コード上は特に何も継承していません。 clas…

同じJSONやDictでも生成されるJWTは変わることがある(Pythonで例示)

同一のJSONやDictを与えているはずなのに、生成されたJWTが変わってしまったというメモ。 なお、ライブラリの特性である可能性はあるので、すべてのJWTライブラリで発生するわけではありません。 環境 Python 3.11 python-jose 3.3.0 原因 JSONやDictとして…

テストのメールドメインはexamle.comのほかにもある(RFC 2606)

テスト時に使用するメールドメインについてexample.comを使用していますが、メールドメインで制御しているコードを検証したい時にほかにも安全に使えるドメインがないかを調べたときのメモ。 すでに飽和している情報ですが自分のメモのために残します。 テス…

Pythonのエラーチェイン(例外を元に例外を投げる)には3種類あるがあまり気にしなくていい

Pythonでフレームワークから発生した例外を元に、適切に自作した例外に変換する方法に複数あることを知ったので、それを素振りしました。 なお、結果だけ先にお伝えするとraiseするだけでも9割問題ありません。 環境 Python 3.11.6 確認方法 Pythonでは単純…

Gitにchmodした結果を含めない、そして復帰させた時の手順(core.fileMode)

WSLで開発中にroot権限で作成されたファイルがあり、IntelliJ IDEAで更新できなかったファイルがありました。そのためディレクトリごとchownとchmodを行ったのですが、Gitに変更箇所があると検知されてしまい、気づかずにコミットしてしまいました。 今回の…

RailsのRSpecテストを並列化して30分から12分に短縮した(parallel_testsと性能アップ)

CI上のRailsのRSpecテストが30分もかかっていてストレスフルだったので、テストを並列化する等で30分かかっていた時間を12分まで削減しました。 そのときのメモ。 環境 AWS CodeBuild Ruby 2.7.2 Rails 6.0.3.6 Parallel_tests 4.4.0 MySQL 8 前提 docker co…

WSLのIPを調べる

同一ネットワークに所属していればローカルで起動したサーバをiPhone等の他端末からアクセスできるのは知っています。Windowsの場合ipconfigで表示されたIPを指定すればアクセスできることも知っています。WSLの場合、別のIPを保持していることが原因だと分…

WSLの時刻がズレたのでWindowsの時刻に修正する(sudo hwclock -s)

WSLの時刻がズレたことによるエラーが発生したので、時刻修正をした時のメモ。 環境 Ubuntu 22.04.2 LTS GNU/Linux 5.15.133.1-microsoft-standard-WSL2 x86_64 前提条件 なし コマンド 次のコマンドをWSL上で実行することで、Windowsの時刻と一致できます。…

WSLの一般ユーザのパスワードをリセットしたい

sudoコマンドを実行したいが、パスワードを忘れたのでWSLのパスワードをリセットするときのメモ。 環境 Ubuntu 22.04.2 LTS GNU/Linux 5.15.133.1-microsoft-standard-WSL2 x86_64 前提条件 変更対象の一般ユーザー名が分かっていること コマンド # root ユ…

WindowsのGit操作で発生したFilename too longを解決する(git config --global core.longpaths true)

Macを使用している他人がコミットしたファイルをpullしようとしたらFilename too longが出力されてpullできませんでした。その解決方法を残します。 環境 Windows 11 GitBash 4.4.23(1)-release ゴール 次の操作時にエラーが発生しない。 $ git reset --hard…

SQLで同姓同名が何人・何種類あるかを知りたい(重複レコードの存在とどのレコードかを知りたい)

SQLの小ネタ。 レコードが1:Nの関係のときに、Nが一定数以上のレコードが存在しうるか、存在する場合はどのようなレコードかを知りたいことがありました。 今回の記事ではユースケースとして分かりやすいように、usersテーブルからnameのうち同姓同名が何人…

FastAPIのpydanticの422UnprocessableEntityはExceptionのExceptionHandlerではキャッチできない

FastAPIで意図しないエラーが発生したときにExceptionでハンドリングしていましたが、それだけではpydanticで発生するエラーがキャッチできなかったのでメモします。 なお、pydanticはAPIのRequestとResponseのモデルで使用していますので、フロントのバリデ…

AnyIOのテストをasyncioだけで動かす(asyncioとtrioの2倍動かないようにする)

AnyIOを使用しているテストで、意図せずにasyncioとtrioの2つで動いてしまったテストがあったので、asyncioだけにした時のメモ。 環境 Python 3.11 AnyIO 3.7.1 Pytest 7.4.3 実装 conftest.pyに次の処理を入れると、asyncioだけが動きます。 @pytest.fixtur…

SQLで条件が一致しないレコードを特定する(NOT EXISTS)

小ネタ。 特定の条件に一致するレコードを取得するのはINNER JOIN等を使う方法は知ってましたが、一致しないレコードを取得する方法を知らなかったのでメモします。 環境 MySQL 8 実装 NOT EXISTSを使えば条件一致しないレコードを特定できます。逆に条件一…

Pythonのenumはint等のプリミティブ型を継承すると便利

基本的には推奨されない書き方のようですが、使ってみて便利だったのでメモします。 環境 Python 3.12 実装 int等のプリミティブな型の継承は次のとおりです。 from enum import Enum class IntInheritEnum(int, Enum): ID = 1 # 列挙型ではなく、intとして…

Pythonの__iter__を素振りする(First Class Collection[FCC]で使えるかも)

Pythonではイテレータを簡単に作れます。もしかしたら何かに使えるかもしれないので、素振りします。 環境 Python 3.12 ゴール PythonのFCC(First Class Collection)にて、For文を使用する際にFCCのインスタンスのまま使用できること。 from typing import…

Gmailで1度検索したメールをURLで開きたい(メールのID知りたい)

Gmailで1度開いたメールを後でURLで開けるようにする方法を自分用にメモします。特に件名を検索した後に、該当のメールをURLを開く方法を知りたかった記事です。 環境 Gmail 2023/11/18時点 IDの取得方法 URLのサブディレクトリの最後がメールのIDを示してい…

Pythonのデフォルト引数では配列ではなくNoneを使わないとダメ(ミュータブルはNG)

有名な話ですがハマったのでブログにします。 環境 Python 3.9 事象 Pythonでデフォルト引数に配列を定義すると、意図せずに同じインスタンスを使用してしまう。 def target_1(value, list=[]): list.append(value) return list def test_01(): a = target_1…

JSONPathから対象のJSONの行にフォーカスをあてる(IntelliJ IDEAのプラグインのJSON Key Finderを使用)

JSONからJSONPathを取得する方法を記事にしたことで、開発中のファイルに作成したJSONPathを定義できるようになりました。 今回の記事では、逆にJSONPathは分かっていI18nの定義ファイルのどこで定義してあるかを知れます。 環境 IntelliJ IDEA 2023.2 JSON …

OldstarのHDMI 変換アダプタで表示できない場合の対応(Win11の場合)

この記事ではOldstarのHDMI変換アダプタをWin11でも表示させる方法をブログにします。同梱されているドライバはWin10までしか対応していません。 なおWin11で表示はできるものの、10月23日時点ではドライバの品質が悪く、使用に耐えられない描画遅延が発生し…