コミュニケーションの癖

qiita.com 「箇条書きはあなたを馬鹿にする」かどうかはわからないが、長年しみついた癖というのは直していくのが難しい。 かくいう自分も、箇条書きを多用しがちな一人。 また、上記の記事とは関係はないが、文章中の括弧も多用しがちという癖がある。 将来…

意味の希薄化

t-wadaさんの「【翻訳】テスト駆動開発の定義」を読んで。 t-wada.hatenablog.jp 冒頭に書かれている「意味の希薄化」というのは、そういう概念があるということを改めて認識しておこうと思った。 引用されているマーティン・ファウラーの記事では、「アジャ…

何千回やっていても本番リリースは神経を使うという話

今日、チームでの昼会で「私はいつでも本番リリースは神経を使っているので、CIの安定性は何より重要」みたいな話をした。 私は今のチームでも古株だし、メンバーのリリース作業を代理することもあるので、測ってはないけど、多分リリースの実施回数は一番だ…

会社でテックブログをはじめてみた

気がつけば1年半ぶりの投稿になってしまいました。 2010年から毎年1つは記事を書くように意識してきたものの、2023年で途絶えてしまいましたね。 さて、少し前から会社(会社というよりは、私の所属しているプロダクト開発チーム単体かな)の方でテックブロ…

情報共有の「フロー」「ストック」に思うこと

設計書やPRD(Product Requirements Document)などのドキュメントについて、鮮度を落とさずに保守していくか、というのは、常に頭を悩ませる課題である。 「ソースコードがきれいに書かれていれば、それを読めばよいはず」という説は一理あると思うが、個人的…

AWS CDKでLambda関数から別アカウントのS3にアクセスする

本記事はAWS CDK Advent Calendar 2021の14日目の記事です。 本記事では、AWS CDKを使って、「あるAWSアカウントにあるLambda関数から、別のAWSアカウントにあるS3バケットにオブジェクトをアップロードする」というユースケースを実現します。 ざっくりいう…

Lightning Web Component開発で有用だったサイト~JavaScript(ECMAScript)編~

Lightning Web Component(LWC)を開発していく上で、ある程度JS側で混み入った実装が必要になりそうな時に、事前に目を通しておくと便利だったろうなと思うページを紹介します。 LWCでの最新のESXX機能の活用 developer.salesforce.com Developer Blogの1エン…

Springの@AsyncとLazy Fetch

Spring/Spring Bootと、JPA(Hibernate)を使っているプロジェクトにおいて、Lazy Fetchを指定しているParent → Childrenエンティティへのアクセスにおいて、以下の org.hibernate.LazyInitializationException: failed to lazily initialize a collection of …

aws-sdk-javaのリトライ間隔(エクスポネンシャルバックオフとジッター)を実際に見てみる

昨日の記事の続きです。 jappy.hatenablog.com aws-sdk-java に限らず AWS SDK 全般の話ですが、リクエスト時にエラーがあった場合、指定された回数だけ内部でリトライが行われます。 このリトライ時、次の試行までの間隔(本記事内では「遅延」と呼びます)…

aws-sdk-javaのClientConfigurationのリトライポリシーはDynamoDBだけ異なる

タイトルの通りですが、aws-sdk-javaで利用するClientConfigurationのリトライポリシーのデフォルトは、DynamoDBだけ異なるようです。 DynamoDBを利用していて、500エラーに遭遇する機会が増えてきており、その際に調べていて知りました。 はじめに AWS の利…

Fargate + Firelensでのログ出力について考える

Fargate + ECSで動かしているバッチが終了した時に、実行結果のサマリーを通知(SNSファンアウト)したいと思ったのですが、色々と方法がありそうなので、つらつらとメモ。 前提としては、こんな感じです。 バッチ本体はJavaで実装。ログはLogback + SLF4Jの…

S3 SelectのJSON行(JSON Lines)を色々試す

S3 Selectでは、CSV, JSON(行 or ドキュメント), Parquetといったファイル形式がサポートされていますが、このうち、扱いやすさと柔軟性の高そうなJSON行について、調べてみました。 サンプルファイル 今回用意したファイルはこちら。 { "id": "1", "name"…

TypeScriptで配列をn個ずつに分割する

配列をn個ずつの二次元配列にするワンライナーです(Rubyの each_slice 的なやつ) 使い古されたネタなので、いろんな書き方が可能だと思いますが…。 const arraySplit = <T = object>(array: T[], n: number): T[][] => array.reduce((acc: T[][], c, i: number) => (i </t>…

AWS CDKをプロダクションで使うための私見プラクティス

AWS CDK (Cloud Development Kit)の登場によって、ようやく理想的なInfrastructure as Codeが実現できるようになってきたなと感じています。 素で書くCloudFormationテンプレートやAnsible等と比べて、特に以下のあたりが便利ですね。 型があり、補完が効く …

GradleからbootRunを実行する時にコマンドライン引数でパラメータを渡したい

GradleからbootRun (Spring Bootアプリケーションの起動タスク)を実行する時に、コマンドライン引数でパラメータを渡す方法についてです。 注:古めのバージョン(Spring Boot 1.4.x, Gradle 3.x)で確認しているため、最新バージョンでは動作しない可能性があ…

CodeBuildの標準イメージ(マネージド)上でdocker-composeを使ってRDBやRedisを利用する

CodeBuildの標準イメージで、docker-composeが使えるようになっていました。 docs.aws.amazon.com Ubuntu : aws/codebuild/standard/2.0 Amazon Linux 2 : aws/codebuild/standard/amazonlinux2-x86_64-standard:1.0 でそれぞれ使えそうです(リンク先はGitH…

GitHubで2FAを有効にした時にgit pushでAuthentication failedや403エラーになった時の対応

GitHubで途中でアカウントの2FAを有効にした場合、今まで使っていたリポジトリで git push origin xxx を実行すると、 remote: Invalid username or password. fatal: Authentication failed for 'https://github.com/hoge/some-repo.git/' とか、 fatal: un…

Spring × SpockのテストでsetupSpecにAutowiredされたコンポーネントを使いたい

今のプロジェクトではJUnit5よりも好んでSpock (Groovy)を使ってます。 Spring Boot製アプリケーションのテストを行う際に、 setupSpec (テストクラス内で一度きりの初期化)メソッド内で、 Autowired されたコンポーネントを使いたかったのですが、使えな…

MacでGitのバージョンを上げる

brew upgrade git → これだけだと反映されず… sudo vim /etc/paths で、/usr/local/bin を先頭行に移動 ターミナル再起動 git --version で最新バージョンに上がっていることを確認

インストール済みパッケージ情報をApex or SOQLで取得したい #salesforce

[設定] - [インストール済みパッケージ] から確認できる、インストール済みのパッケージとそのバージョンを、プログラム的に取得したい、というメモです。 結論から言うと、インストール済みパッケージの取得はTooling APIで提供されているみたいなので、以…

Lightning Web Components(LWC)をVisualforceで表示してみる#salesforce

巷で話題の(?)Lightning Web Components(LWC)をVisualforceで表示できないか試してみました。 LWCをAura Componentでラップして、Lightning Outを使う 最初に思いついたのは、LWCをAura Componentでラップして、Lightning Out for Visualforceを使う方法…

pyenv利用時にパッケージコマンド実行時に出るcommand not found...command exists in these Python versionsエラーを治す

pyenvとpipを使っている環境で、下記のようなエラーが出た時の解消法についてのメモです。 $ hoge pyenv: hoge: command not found The `hoge' command exists in these Python versions: 3.5.2 解消法 まずはコマンドが存在するというPythonバージョンに切…

CodePipeline経由と直接実行の場合でCodeBuildのファイルパーミッションが異なるという話

CodeBuildでソースにGitHubを指定した場合のビルドで、 直接CodeBuildで「ビルドの開始」を押した時 CodePipelineのBuildから実行された時 のそれぞれで、ファイルパーミッションが変わってしまっている?という話です。 Java(Gradle)でビルドするジョブで、…

API Gateway WebSocketのコストメリットやLambdaの同時実行数について

Amazon API GatewayでWebSocketが利用可能になりました。 使用感などは、下記のAWSブログでのチャットアプリのサンプルを構築してみると、わかってきます。それにしても、チャットアプリはWebSocketのサンプルとして定番中の定番ですねぇ…。 [発表]Amazon AP…

gradle-jooq-pluginでカスタムジェネレータを試してみる

JOOQではコード生成に利用するジェネレータを差し替えることで、デフォルトの命名やパッケージのレイアウトをカスタマイズすることができます。 これをgradle-jooq-pluginで試してみました。 結論、プラグインページのサンプルを素直に真似すれば、できます…

JPQLで複数の項目をもつValueObjectを条件にクエリする

よく忘れるのでメモ。 ValueObject(条件クラス) public class FooCondition { private final String col1; private final String col2; public FooCondition(String col1, String col2) { this.col1 = col1; this.col2 = col2; } // getterは省略 } クエリ…

JOOQ使い始め(gradle-jooq-pluginによるコード生成)

JPAが辛くなってきたので、JOOQへの乗り換えを検討中。 Why JOOQ? MyBatisの方が手堅い気がしますが、JOOQを選んだ理由としては、以下のものです。 タイプセーフ Annotation Processingではなく、プラグインによるコード生成 今後のJavaのリリースサイクルを…

Lightning ComponentでLightning ContainerなしでD3.jsを使う #salesforce

凝ったチャートを作りたい場合、D3.jsを使いたいことがあります。 Lightning ComponentでD3.jsを使う場合、v3以下だと以下のようなエラーが起き、表示できません。 [Cannot read property 'document' of undefined] eval()@https://xxxxxx-dev-ed.lightning.…

「アセットファイル」メタデータ #salesforce

あんまり馴染みがなかったのですが、Salesforceには「アセットファイル」というメタデータがあるんですね。 Salesforce Developers 上記に書かれている通り、サフィックスは .asset で、contentassets フォルダに保存されます。 package.xml においてはワイ…

最強のLightningページレイアウト #salesforce

(タイトルはネタですが) テラスカイさんのブログ「Lightningページレイアウトについて考えてみる - TerraSkyBase」を読んで、以前から考えていたアイディアを試してみました。 それは、「組み込みで用意されているページレイアウトから選択する」ではなく…