きり丸の技術日記

技術・エンジニアのイベント・資格等はこちらにまとめる予定です

技術

E2EツールのPlayWrightでセレクタに一致したものを全部操作する

セレクタで検索してヒットしたDOMすべてに対して操作をするという方法はわかりませんでした。 今回の記事では、複数件のDOMにヒットするセレクタを使用したうえで、ヒットしたDOMに対してイベントを操作できるようにします。 環境 PlayWright 1.17 ゴール 複…

Dockerで簡単に暗号化したUNIXパスワードのハッシュを生成する(DockerでPythonスクリプトを実行)

Dockerを使用するとローカルに暗号化したUNIXパスワードのハッシュで必要なPython等を導入する必要がありません。 今回の記事では、Pythonのスクリプトで暗号化したUNIXパスワードのハッシュを簡単に作る方法を記します。 なお、このハッシュを作る方法は正…

Rubyで法律に従った暦による期間計算(日割りにならない1ヵ月を求める)

以前、法律に従った暦上の計算方法を記事にし、Javaでも同様の記事を作成しました。 当記事ではRubyで法律に従った暦による期間の計算を求める方法を記します。 環境 Ruby 3.0.2p107 Rails 6.0.3.7 RSpec 対応 テストデータとロジックに関してはJavaと同じで…

ゾンビプロセスを探して殺す

小ネタ。プロセスを殺し切れずに残ってしまうことがよくあるので、コマンドを残します。 このコマンドは、ゾンビ化した開発サーバのプロセスがポートを握ったままになり、新しく開発サーバを起動できないときに使用します。 今回の記事では、ゾンビ化した開…

Springで同一クラス別コンポーネントをDIしたい(nameGeneratorとFullyQualifiedAnnotationBeanNameGenerator)

Springで開発していると、別のコンポーネントだが、同一のクラス名を作りたくなることがあります。この同名クラスをDIしない場合は、特に問題は発生しません。しかし、同一クラス名をDIしてしまうと、BeanDifinitionStoreExceptionが発生してしまいます。 こ…

Rubyのtapとthenメソッドを理解するために素振りした

Rubyのメソッドよくわからないものが多いので、素振りします。 今回の記事では、tapメソッドとthenメソッドを理解するために素振りしました。なお、私はJavaをメインとしたエンジニアのため、Javaに置き換えた記載もあります。ご了承ください。 環境 Ruby 3.…

JavaをSonarCloudでカバレッジ取りながら静的分析する(Gradle, 2021年)

2021年になってGitHub Actions等のCIを使ったSonarCloud連携がしやすくなったので、手順を纏めます。 今回の記事では、JaCoCoでカバレッジを取得して、コードをSonarCloudへ連携できることをゴールとします。 環境 Java 11 JaCoCo SonarQube 3.3 Gradle 7.0.…

Google スプレッドシートでフィルタした結果を元に操作する(SUBTOTALとFILTER)

Google スプレッドシートで管理していた障害管理表を元に、フィルタ機能で自分が担当した障害をフィルタしていました。そのまま原因分析をしようとしたところ、自分の担当した件数以上にデータを取得してしまいました。 画面のフィルタを活かす、またはフィ…

PythonでEnumをfor文で回したら値をすべて出力しなかった

パラメータの値を元に、PythonのEnumで定義した値を取得するメソッドを作ろうとしました。しかし、PythonのEnumの知識が弱かったため、事前に定義していたEnumをすべて取得できない事象が発生しました。 この記事では、PythonのEnumの仕様を確認して、Enumで…

Javaで配列の特定の条件を満たすデータのみを操作したかった

※ 泥臭いやり方でしか実践できていません。 JavaのLINEオープンチャットにて、「配列内部の特定条件のみ変換したい」という質問がありました。 今後、同様の質問が来たときにスマートな回答ができるようにいくつか検証したメモを残します。なお冒頭にも書い…

SpringBootで実際のDBにつなげてユニットテストする

SpringBootで実際に起動してあるDBを使ったユニットテストをしようとすると、デフォルトだと動かないようです。 正確にはEmbeddedDataSourceBeanFactoryPostProcessor(ログだと長すぎるのでbeddedDataSourceBeanFactoryPostProcessorとして表示される)やEm…

Pytestでコマンドオプションからパラメータを渡す

Pytestでコマンドのオプションからパラメータを渡すことができないか調べたときのメモ。似た記事はたくさんありますので、詳しいことは参考情報を見てください。 環境 Python 3.8.10 pytest 6.2.4 ゴール Pytestのコマンドオプションからパラメータを渡し、…

Rubyでリフレクションしてメソッドを呼び出す(public_send)

Javaだと面倒だったリフレクションがRubyだと簡単にできてしまったので、メモします。 もっと詳しく書いている記事はありますので、私の記事はメモレベルです。 環境 GitHub Codespaces Ruby 3.0 RSpec 対応 準備 適当なクラスを用意します。今回の記事では…

WindowsでGitからチェックアウトするとCRLFになって不具合発生した

副業先でdocker-compose up -dをすると、なぜか次のエラーが発生しました。 standard_init_linux.go:228: exec user process caused: no such file or directory ERROR: 1 原因としては、DockerfileのENTRYPOINTであったシェルの改行コードがCRLFになってい…

SpringのTestExecutionListenerのTestContextから設定ファイルの値を読み込む

小ネタ。 環境 Java 16 SpringBoot 2.4.5 概要 設定ファイルの値を取得したい場合は、TestContextからApplicationContext、Environmentを経由してgetProperty(String key)で取得できます。 testContext .getApplicationContext() .getEnvironment() .getProp…

SpringでAPIからファイルをダウンロードする(Java)

この記事では、JavaのSpringBootを使って、APIからファイルをダウンロードする機能の実装メモを残します。なお、ResponseBodyがないため、@Controllerでも、@RestControllerのどちらで定義しても構いません。 なお、クラウドを使用している場合はAWSであれば…

PlayWrightで動かしているシナリオを動画で記録する

公式ヘルプに設定方法は載っているので、この記事で知れることは「PlayWrightで動画を撮影できる」というのがこの記事の最大の目玉です。 環境 PlayWright 1.12.1 対応 new_contextのパラメータにビデオ用のディレクトリを設定するだけです。new_contextして…

SpringのAssertクラスで簡単にValidationする【Java】

この記事はAssertクラスを紹介するだけの小ネタです。 Springには、Assertクラスという簡単にValidationしてくれるようなクラスがあります。複雑なことはできませんが、サクっとメソッドのパラメータを検証したい時は便利です。なお、複雑なことをしたければ…

GCPのACE(Associate Cloud Engineer)の合格記

掲題のとおり、Google Cloud PlatformのAssociate Cloud Engineerを受験し、合格したので合格記を記します。 前提 GCPの業務経験なし App EngineとCloud Firestoreを使用したSlackAppは作成経験あり AZ-900は所持 AWS CLFは所持 合格日 2021年10月01日(土)…

Wiremockをモックサーバとして使用してJavaの単体テストをする

弊社ではモックサーバにWiremockを使用しています。 この記事ではWiremockを知ってもらうきっかけを提供することを目的としています。詳しいことは他の方の記事を参考にした方が良いでしょう。 ゴール WiremockのモックサーバでJUnitでテストする Wiremockの…

【Pytest】不安定なテストに失敗したら自動リトライさせる(flaky)

以前、Javaで不安定なテスト(flakyなテスト)をリトライさせるライブラリを素振りしました。今回の記事はPython版です。 Pytestの公式ページにてFlakyなテストに対する解決策となるライブラリを複数提示されており、その中でもGitHubのStar数が一番多かった…

Ansibleで失敗時のエラーメッセージをカスタマイズしたい

※ もっといいやり方があれば教えてください。 この記事では、Ansibleでエラーメッセージをカスタマイズするやり方を記します。 正確な表現としては異なるので、あくまで「したい」です。 環境 Ansible 2.11.5 ゴール 処理失敗時に、目的のエラーメッセージを…

Pythonで設定ファイルを読み込む処理をラップしてクラスとして扱うと便利

普段Javaで使っている感覚と同じように、Pythonでもプロパティファイルを扱いたかったため、調べた記事です。 環境 Python 3.8.10 ゴール 設定ファイル(.ini)をコード内で読み込めるようにする 読み込んだ設定ファイルを他クラスからも簡単に扱えるように…

JestでParameterizedTestを行う(異なるテストデータで同じ内容のテストを行う)

小ネタ。 Jestを使って、異なるテストデータで同じ内容のテストを行うParameterizedTestをやろうとしたときのメモ。なお、JestではParameterizedTestという名称では表現されていません。 なお、使い方自体は参考情報に乗せている公式を見てください。 環境 J…

TypeScriptでPythonのキーワード引数みたいな挙動をさせる(ROROパターン)

TypeScriptを書いていて、Pythonでいうキーワード引数(名前付き引数)のような挙動をしたいとTwitterに呟いたところ、【公式】皮しばきさん、suinさんに反応していただけました。 その中でsuinさんに教えていただいたデザインパターンのROROパターン(Recei…

JSで文字列から数値に変換する(カンマで3桁ごとに区切られた文字列を数値に変換する)

小ネタ。 JavaScript(ECMAScript)、TypeScriptで文字列型(String型)から数値型(number型)に変換しようとしましたが、小数点セパレータが国によって違うため、微妙にハマったのでメモします。 なお、きれいな処理だとは思っていないので、もしよりよい…

GitのURLをHTTPSからSSHに変更する

小ネタ。公式ヘルプ読めば一発。 ゴール GitをCloneした後に、接続方法をHTTPSからSSHに変更する。 対応 変更したいリポジトリのURLを変更するだけ。コマンドはgit remote set-url。 次のコマンドはリモートリポジトリ名がデフォルト名のoriginである前提で…

XPathで親要素にさかのぼって検索する

Seleniumを含めたE2Eツールでは、XPathで指定できると動作が安定します。 今回の記事では、XPathで親要素を検索する方法を記載します。 概要 ../と記載すると、指定したDOMより親の要素を検索できます。 この記事では、次のXPathを導きます。 //td[contains(…

PythonのConfigParserで読んだ設定ファイルの値を出力する(Python ConfigParser print all values)

Pythonの標準ライブラリのConfigParserで設定ファイル(Config.ini)を読み込めます。しかし、読み込んだ設定ファイルをprintにて出力しようとすると、読み込みに使用したSectionしか返却されません。Keyを指定することで値を出力できますが、読み込んだファ…

CSSで文字の上に強調のドットを付与したい

CSSで文字の上に強調のドットを付与したかったので、それを設定した時のメモ。 ゴール 特定の文字の上にのみドットを付与して強調する 文言はiZooのテーマソングから。 環境 Windows Chrome iPhone Chrome 対応 次のCSSを設定すると、文字の上にドットを付与…