Kengo's blog

Technical articles about original projects, JVM, Static Analysis and JavaScript.

JavaのRecordでは配列を使わないほうが良いという話

配列使うとmutableになるから使うべきではない、というのに加えて。生成される hashCode() と equals(Object), toString() が配列を考慮しない実装になっているため、JavaのRecordでは配列を使わないほうが良いようです。 検証コード 生成される hashCode() …

オンラインコミュニティに参加してるまとめ

自分のキャリアを考えたときに、FOSSエンジニアであることの比重が高いわりにプレゼンスないんだよね……ということに課題を感じたので改善策を考えてみた。LTやセッションを増やしたりcontributeするプロジェクトを増やしたりするのも必要だけど、他にも継続…

静的解析ツールまとめ2021年春

静的解析ツールで飯を食えないか定期的に気になるタチなので有償サービスなど調べている。のをまとめる。主にJava/JavaScript周り。 Name Download Star 開発企業など SpotBugs 482k/mo 2.2k なし PMD - 3.3k なし Stylelint 10m/mo 8.5k なし、Open Collect…

外国人永久居留証を取得しました

外国人永久居留証の申請条件を満たしたので、2020年9月25日付で外国人永久居留証を申請し、半年後の2021年2月25日に受け取りました。 どういうカードなのか 俗に言う中国版グリーンカードですが、だいたい以下の恩恵があるようです。 就労許可・居留許可を継…

Gradle Plugin実装の基本

Gradleは動きが早いのでTIPSを文書化する意味があまりないのですが、全体像をざっくりつかめるだけでも変化を追うには有用のはず。 そのうち体裁まとめてZennに置いたほうがいい気がしてますが、一旦走り書きということで。 Gradleの考え方 設定と実行の分離…

「ドメイン駆動設計入門」付録のGradle向け解釈

ITエンジニア本大賞2021で紹介されていた「ドメイン駆動設計入門」(以下、本書と呼ぶ)が、DDDを学ぶ上でわかりやすかったです。一応他のDDD本も数冊読んではいたのですが、どうしてもユビキタス言語や境界づけられたコンテキストなど”場合による”ものが頻…

最近見かける新しいライセンスについて

Elastic社のブログをきっかけに、最近見かける新しいライセンスについて個人的に調べてみた。私は専門家ではないので要注意。公開情報も隅々まで追えているわけではないし。 なお一部ライセンスはOpen Source Initiative (OSI)による承認を受けていないので…

2020年のFOSS活動状況まとめ

昨年のに引き続きFOSS活動状況をまとめます。2020年12月21日時点の情報です。 概要:昨年比23%増 GitHubのプロファイルページによると今年のpublic contributionsは1,440で、昨年が1,166だったので約23%増です。commit 69%のpull requests 16%なので、引き続…

TypeScriptでGitHub Actionを書くときのTips

actions-setup-docker-compose, sonar-update-center-actionやsauce-connect-actionなど5つくらいActionを実装したので、Tipsをここにまとめます。 公式テンプレートを使う TypeScriptでGitHub Actionを書くためのテンプレートが公開されています。とりあえ…

技術書「JavaのビルドとCIのキホン」を公開しました

zenn.dev がホットなのでフォロワーの皆様にアンケートを取った結果、「JavaのビルドとCIのキホン」が5票を獲得したので書きました。 私が書くなら何を読んでみたいですか— 達者でな (@Kengo_TODA) September 20, 2020 書籍はこちらです。 zenn.dev zenn.dev…

マイクロサービス時代のアプリケーションサーバ実装について

4年前の下書きが出てきたので、供養のために置いておきます。 SpringOne Platform 2016のKeynoteとSessionを、特にProject Reactor周りについて確認した。 https://www.youtube.com/watch?v=Xm-KjMY_Z_w http://www.slideshare.net/SpringCentral/going-reac…

CompletableFutureの何が嬉しいか、そしてReactorへ……

そうですね。例えば2つのクエリをDBに投げて結果を合成する、みたいなことを書いてみると実感しやすいです。Statementをcloseする処理ももちろん書くのです。— 達者でな (@Kengo_TODA) March 14, 2020 DBにクエリを2つ投げて合成する処理 例えばユーザーIDか…

Project Reactorでページング処理を書くにはFlux#expand()を使う

Bing検索で見つけるのが難しかったのでメモ。Project Reactorでページング処理を書く方法について。 例えばこういうAPIがあったときに、どう実装するか? class Foo { ... } class FooPage { @NonNull Foo[] getEntities(); Optional<Integer> getNextPageNumber(); }</integer>…

SLF4Jの1.8は安定版が出ないので2.0を使おうという話

前回の投稿で、SLF4Jには現在1.7、1.8、2.0の3バージョンがあるという話をしました。 これについてSLF4Jのuser向けメーリングリストで質問をしたところ、1.8の開発中にFluent Logging APIを追加するために2.0へとメジャーバージョンを上げたという旨の回答を…

Javaライブラリを配布する際のログ周りにおける配慮と実践 2020

この記事は、2013年に書いた記事を現状に合わせてアップデートするものです。結論から言うと、当時から id:miyakawa_taku さんがおっしゃっていた「APIは依存に含めて良い」を支持するものです。あるいは無難にバージョン 1.7.30 を使っておきましょう。 blo…

研究などの学術的目的で問い合わせや協力依頼をいただく際の私の対応方針

たまに研究への協力依頼などをいただくのですが、それに対するポリシーをこちらにまとめます。説明用です。 連絡先 Twitterかメールを推奨しています。メールアドレスは私のウェブサイトで紹介しています。 サーベイに対する協力 常識的なボリュームのサーベ…

GitHub Actions 最近のやらかし一覧

FOSS開発で細かいやらかしを積み上げてきたのでまとめる。 テストの失敗原因レポートをartifactとしてアップロードしそこねる actions/upload-artifactを使ってテストレポートをartifactとしてアップロードする際、以下の書き方だと失敗する。 # bad - run: …

最近キャッチアップしているもの 2020-05

いろいろ手を出しすぎてごちゃごちゃしてきているので、頭の中を整理する目的でここに書き出す。 reproducible build Mavenのメーリスで話題に出ることがあり知った。特別新しい概念ではないけどある種のunlearningであり、ビルド職人は見といて損ないやつ。…

考察:Reactive Workflowが生まれた背景とその狙い

人に説明するのがスムーズにできなさそうなので、理論武装というか順序立てて話すためにこの記事をまとめる。 対象 ブラウザから利用するマルチプラットフォーム向けウェブアプリケーションの開発 モバイルのネイティブアプリ開発は含まない(知らないので)…

SpotBugs 4.0.0がリリース&貢献者募集のお知らせ

.classファイル向け静的解析ツールであるSpotBugsのバージョン4.0.0がリリースされました。 FindBugsとの互換性を極力保っていた3.1系と異なり、いくつかのAPIが変わったり機能が削られていたりします。 特にプラグイン開発者は、SpotBugs 3.1 から 4.0 への…

WIP: 2020年やりたいこと50

2020年やりたいこと100 - ややめもを見て良い取り組みだと思ったので書いてみたのですが、100も出てこないのでとりあえず半分でお茶を濁す作戦。 健康(1~10) 週2回の筋トレを継続 平日は10,000歩以上歩く 体重を72kg±2程度に抑える 24時までに寝る 平日の…

2019年のFOSS活動状況まとめ

昨年のに引き続きFOSS活動状況をまとめます。2019年12月30日時点の情報です。 概要:昨年比22%増 GitHubのプロファイルページによると今年のpublic contributionsは1,166で、昨年が950だったので約22%増です。commit 61%のpull requests 21%なので、けっこう…

JavaウェブアプリプロジェクトにJavaScript/TypeScriptなどの静的アセットをどう配置するか

以前のJavaウェブアプリ開発では、JavaScriptをはじめとした静的アセットはsrc/main/webappディレクトリに配置するのが普通だった。そこに置くことでmaven-war-pluginのようなビルドシステムが.warファイルの中に突っ込んでくれる。この挙動は今でも変わらな…

Javaプロジェクトにおけるリリース周りの手法あれこれ

考慮する点 成果物のデプロイ ビルドの成果物(artifct)をアップロードすること。アップロードと公開は分けて考えることに注意。デプロイ先にはいくつか候補がある: GitHub Packages (旧GitHub Package Registry) Maven Central Repository Docker Hubなど…

draft: より良いチームを作る2019

なるほど、最近感じるフラストレーションは、新しい仕事の考え方のフレームワークを欲している線から来てるのはあるかもしれないな。前回まとめた↓のが4.5年前で、当時と変わった視点もあるので考えてみよう。https://t.co/RPkqTwQtic— Father as a Software…

Gradle用のGitHub Actions勘どころ

GitHub Actions のベータ版が個人リポジトリの方に来ているので、色々と試しています。使っているテンプレートプロジェクトと実アプリケーションプロジェクトから、いくつか事例を紹介します。 なお各種単語の定義が公式サイトにあるので、いちど目を通すこ…

selenium-jupiterを試した

JUnit 5にTemporalyFolderに相当する機能がなかったため、自分のプロジェクトでは長らくJUnit4を使っていました。しかし5.4でTempDirが来たため、徐々にJUnit5に置き換えています。 その過程でSelenideを使った統合テストをJUnit5に置き換えたのですが、sele…

Gradleプロジェクト用semantic-releaseプラグインを書いた

Gradle用のsemantic-releaseプラグインはJavaでsemantic-releaseを再実装したものしか無かったので、TypeScriptで書いたものを作りました。 github.com ./gradlew publish を叩くだけのシンプルなものですが、CI周りの設定はGradle側に寄せてあるはずなので…

Java屋がsemantic-releaseに思うこと

最近Java周りでもsemantic-releaseの利用機会が増えています。Gradle pluginとMaven pluginが生まれ、特に後者はyarn*1で実行されるため既存のプラグインとも組み合わせやすく、JavaScriptと比較しても遜色ない状態と言えそうです。 2019年3月時点で、Java特…

2019年初頭でのMaven Site作成における注意点

最近新しいMaven Plugin用サイトを作ったので、mvn siteで作成できるサイトについて現時点での注意点をまとめる。 skinについて maven-fluido-skinが最も使われていてかつ実用的と思われる。以下の記述はこのskinのv1.7を利用することを前提とする。 maven-s…