White Box技術部

WEB開発のあれこれ(と何か)

prismaのschemaファイルの書き方(MySQL用)

フルNext.jsアプリケーション作成の一環で、DBマイグレーションツールにprismaを使ってみたので、書き方のメモです。 いきなりですが、prismaは細かくDDL文を制御できず、思ったテーブルを作れなかったので、細かくテーブル定義を設定したい場合はTypeORMの…

Next.jsでLayzr.jsを使って画像読み込みをする方法

既存サイトを書き直していたら、layzr.jsの扱いにハマったので。 next/imageを使えというのは無しで。 結論:useEffectを使えばOK libs/layzr.ts import Layzr from 'layzr.js'; export default function LayzrConfig() { const instance = Layzr({ threshol…

【AWS】ALBのログをAthenaで分析するときの工夫(供養)

AWS

ALBのログをAthenaで分析する方法は、公式ドキュメントに記載があるのですが、この手順でデータベースを作成すると、日付の条件を入れて検索したいとき、大量のデータをスキャンしてしまい、遅い上にお金がかかるという問題に遭遇します。 そこでおすすめし…

Puppeteerがnodeコンテナで動かなかったから動かした

Puppeteerの実行エラー puppeteerのJestサンプルをTypeScriptで書いて動かそうとしたら、コンテナ側のライブラリ不足エラーが出たので対処していました。 エラー内容 動かそうとしたサンプルは以下で、Dockerコンテナのベースはnode:14-slimです。 これを実…

久しぶりにやったらTypeScriptのWebpackビルドで詰まった

今日は雑記なのでとりとめもないです。 WebpackでTSをビルドしたらWARNINGとERRORがめっちゃ出る ちょっと話題に上がったので、なんとなく昔作ったプログラムをリファクタリングしていたのですが、 JSからTSに変えたついでにWebpackも導入したところ、ビルド…

【AWS】APN1-DataTransfer-Out-Bytesの内訳をチェックする

AWS

発端と記事内容 AWSのコストをCost Explorerでチェックしていたら「APN1-DataTransfer-Out-Bytes」が前月と比較して2倍になっていたのですが、どこが食っているのかを調べようとしたら、Cost ExplorerからはELBで食っているところまでしかわからなかったので…

ブログを書かなくなった現状を打破するために雑記カテゴリを作った

ブログの記事が下書きで止まる問題 ここ2年ほど、ブログを書いては下書き保存で終わるということが続いており、結果として全然ブログを書いてない感じになっています。 その下書きも、ちゃんと記事の体になしていれば、「忘れないようにブログに書いておく」…

CircleCIでDockerfileのあるプロダクトをテストする

既存のアプリケーションをコンテナ化したら、CircleCIで回していたテストがコケていたので、その修正の記録です。 CircleCIの設定を書く CircleCIの設定をいじるのは久しぶりだったので、以下のようなことも調べつつやっていたのですが、結局ハマってだいぶ…

TypeScriptでwindowにプロパティを追加するいくつかの方法

DjangoのテンプレートにReactを埋め込むとかいう、妙なことをしているときに、とある理由からwindowにReactやらを追加しておく必要ができたのですが、TypeScriptだとそのまま突っ込むと型の関係で怒られました。 調べてみるとほぼこのタイトルの記事があった…

【主にスクラム向け】プロダクトバックログフォーマットと運用フローについて

プロダクトバックログのテンプレートが欲しい これが「さいきょうのPBLだ!」 PBL項目 スクラムでのPBL運用フロー 1. プロダクトバックログリファインメントを実施 2. スプリントプランニングを実施 3. スプリントレビューを実施 4. 繰り返し まとめ プロダ…

【MySQL 8向け】MyBatis Migrationsのコンテナ化

JVM系のマイグレーションツールの導入 新しくSpring Bootの開発環境をコンテナ上で作る上で、DBマイグレーションツールのMyBatis Migrationsをコンテナで使えるようしたので、その手順をまとめておきます。 Docker Composeの構成 作っていた開発環境のマイグ…

PythonでのAWS Lambda開発メモ(利用開始編)

Lambdaを使うことになった経緯 Lambdaの利用経験がなかった私が、Lambda利用を決めた流れは 1日1回のS3のファイルチェック処理が必要になる ファイルがなかったらSlack通知してくれればいい(簡単なスクリプトでOK 今のところ、AWS上にサーバは立ってない 調…

ログ出力指針の書き方

アプリケーションのログ出力指針を作ったときに、どんな事を考えていたのかを思い出しながら、 ログ出力指針について書いていきたいと思います。 ログ指針作成にあたって 目的の作成 適用範囲の設定 どんなときログを埋め込むのか?または埋め込まないのか?…

【kotlin】Coroutinesを使って、Spring WebFluxでJDBC処理を行う

ちょっと記事を寝かせすぎてしまったのですが、今回は1.3でKotlin本体に入ることが決まったコルーチンのお話です。 WebFluxでJDBCを使うには Schedulers#elasticで対応 この方法の問題点 コルーチン コルーチンの導入 WebFluxのリクエストをコルーチンで処理…

【GCP】Datalabをチームで使うための導入手順

職場で 「他のアナリストと分析結果を共有しやすくして欲しい。というか共有のJupyter環境を用意して欲しい」 という話があったのですが、環境の制約で、すぐに共有のJupyterを用意することはできなそうだったので、Google Cloud Datalabを使ってもらうこと…

【TypeScript】DangerのTSLintプラグイン紹介と導入の補足

Rubyの方のDangerをTSLintに対応させたかったので、ESLintのDangerプラグインのforkをforkして、DangerのTSLintプラグインを作りました。 danger-tslintの作成経緯 最初はDanger-jsの方のTSLintプラグインを導入したのですが、Dangerでいいなぁと思っていた…

Kotlinを使ったWEBアプリケーション開発の始め方

先日、とらのあな主催のKotlin勉強会で、Kotlinを使ったWEBアプリケーション開発の始め方という題で発表してきました。 ちょっと時間が押していたので発表は巻きになってしまったのですが、Kotlinで開発を始める後押しができていたら幸いです。 といっても、…

Kotlinのリフレクション(protected/privateメソッド呼び出し)

protectedメソッドへのアクセス Kotlinにおいてprotectedのアクセス修飾子は、Javaと異なり同一パッケージからのアクセスを許容しません。 そのため、テストコードなどでprotectedのメソッドを実行したい場合は、リフレクションを使う必要があります。 継承…

【Slackアプリ】Botkitのsimple_storageを拡張する

BotkitにはSlackアプリがJSONでユーザ、チャンネル、チームの情報を保持できる簡易DBのような仕組みがあります。 今回はこれを拡張し、保持できる単位を増やしてみました。 simple_storageの拡張 Botkitで利用されている簡易DBは、simple_storage.jsとして実…

BotkitでのSlackアプリ開発方法とデプロイ方法

現在、Slackアプリを開発中なのですが、初めてのこともあり色々と学ぶことが多かったです。 Botkitでの開発 BotkitとBabelの導入 開発時の注意点 Botkitの注意点 SlackアプリとBotsの違い Slackへの設定 Basic Information Install App Interactive Componen…

2017年に読んだ本と2018年の抱負

新年、あけましておめでとうございます。 2017年に読んだ本の振り返り 本当は去年のうちにやっておきたかったのですが、 読んだ本から去年の自分の興味を振り返り、今年の抱負を考えていました。 JavaScript系 JavaScriptはjQueryで知識が止まっていたので、…

JOOQをGradleプロジェクトで使う

2017/12/15追記:gradle buildからJOOQのコード生成を除外 サーバサイドの開発をKotlinで行うために、ここのところ調査・検討を色々していました。 概ね問題なさそうという結論が出たので、それ以外の技術選定をしていたのですが、 O/R Mapperに採用すること…

【まとめ】Java SE 9/EE 8リリースイベント 兼 JavaOne 2017 報告会

Javaな仕事に戻ったのもあり、JJUGのイベントに行ってきました。 当日の発表内容や様子は、以下にまとめてくださった方がいるようです。 ちなみにこのイベントの内容は、動画で公開されています。 参加できなかった方もこちらを見ていただけると、Javaの今が…

GitHub Enterprise上のRubyコードのカバレッジをCircleCI Enterpriseで集計し、結果をSlack通知する

カバレッジのSlack通知 こちらの内容を参考に、CircleCI Enterpriseでビルド時に集計したカバレッジを、Slack通知できるようにしました。 参考元のスクリプトではcoberturaとjacocoに対応していましたが、simplecovにも対応してあります。 あと、取得元をGit…

「テストを書く文化がないからテストがないんです」

それは怠慢だろうが!いい加減にしろ!! じゃあテストコードはこのプロジェクトなくていいのか?と問えば、ある方がいいと思うと答えてくるが、 じゃあなぜ書かないのかと問えば、文化が・・・と答えてくる。 中には、画面で実際にオペレーションをしてテス…

Circle Checker作りで学んだこと(GroovyとかSpockでのモックの書き方とか)

技術的なこと 前回はCircle Checkerの紹介だったので、今回は作って学んだことを書こうと思います。 ※Circle Checkerの紹介記事はこちらです。 技術的なこと 実装の話 リモートのGitリポジトリとローカルをマージ 便利なDTOの定義方法 Twitter APIのカーソリ…

【自作ツール紹介】 Twitterのユーザ名からイベント参加情報を抽出するツール「Circle Checker」

なぜ余裕を持って行わないのか・・・ 原稿に追われていようといまいと、不精な性格が災いして、 イベント直前にならないとサークルチェックをしない私のような人に「余裕を持って行え」とか言っても無駄なので、 プログラマらしくプログラムで解決を図ってみ…

GradleプロジェクトのSpockのテストをCircleCIで実行してJaCoCoでカバレッジを取りつつCoverallsで表示する

ちょっと思い立ってJavaでコードを書いていて、 さらに思い立ってカバレッジのバッジをREADMEに付けようとしたら、 思いの外ハマったので「GradleプロジェクトのSpockのテストをCircleCIで実行してJaCoCoでカバレッジを取りつつCoverallsで表示する」ための…

新年の挨拶と、reviewetのバージョンアップ連絡

新年あけましておめでとうございます 2日に、幼少の頃以来の初詣に行ってきました。 それもずっと行きたかった神田明神へ参拝することができたので、今年は幸先がいい感じがします。 IT情報安全祈願のお守りも購入できたので、後は頑張ってシステム作りに励…

Twitter画像取得ツール「reins」の0.3版をリリースしました

seri.hatenablog.com 前回の紹介からほぼ2年ぶりですが、Twitterからいい感じに画像を取得するツールのreinsの最新版をリリースしました! reins 0.3 今回、以下の機能追加・バグ修正を行っています。 リツイートの取得に関する動作変更の選択機能の追加 rei…