きり丸の技術日記

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

技術

JavaScript, GAS, TypeScriptで自作例外を作成する

GASを使用していて、雑にエラーハンドリングしたい時に自作例外をthrowして、ハンドリングしたいと思いました。 今回の記事は、JavaScript・GAS・TypeScriptで自作例外を作成します。 環境 GAS 2022/01/27 TypeScript 4.4.2 CodeSandboxで検証 コード 自作例…

Rubyでモックの呼び出し回数によって返却値を変更する

同一のパラメータでメソッド呼び出しを行っている。しかし、呼び出した回数によって返却値を変更したい。 そのようなユースケースを満たすために素振りしました。 環境 Ruby 3.0.2p107 Rails 6.0.3.7 RSpec ユースケース 時刻は常に、Time.nowで取得している…

Rubyでテストの時間を固定させる(TimeHelpersとその他)

Rubyのメソッドよくわからないものが多いので、素振りします。 今回の記事では、テストの時間を固定するためのヘルパークラスであるActiveSupport::Testing::TimeHelpersを理解するために素振りしました。 ※ Rubyのバージョンによっては、時刻固定後に戻す必…

MySQLでSQLの使用時に変数を使用する(Not PL/SQL)

タイトルのとおり、MySQLのSQLで変数が使えないか検証したときのメモです。 基本的に変数を使おうとすると、PL/SQLの記事に誘導されてしまうことが多かったです。しかし、素のSQLで変数を使用した検索するための記事があるとうれしいため、この記事を残しま…

Fork元のソースコードとの差分を吸収する(画面で対応)

小ネタ。 Fork元のソースコードとの差分を吸収して、Fork元に追いつく方法を探していましたが、CLIでの方法しかヒットしませんでした。GitHubの画面上で操作するだけでFork元に追いつく方法は知っていましたが、どこを操作すればいいかわからなかったので、…

Gitでcannot lock refのreference brokenが起きた

GitHub Codespacesで使用していた環境が壊れたのか、次のエラーが発生しました。 error: cannot lock ref 'refs/remotes/origin/master': unable to resolve reference 'refs/remotes/origin/master': reference broken From https://github.com/hirotoKirim…

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であれば、S3で保存し…

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…