Git Forkでpushダイアログが勝手に表示されてしまう問題の解決策

Git ForkというGUIクライアントをベータ版の頃から愛用しています。商用化の際にベータ時から利用していたユーザ向けに提供されたクーポンでライセンスを購入し、いまだに使い続けています。余計な機能がなく軽量かつ安定していますし、マージや対話型のリベースもやりやすいので手放せません。

takezoe.hatenablog.com

ただ、1つだけ問題があり、とある時点からMac上でCLI(Forkはコマンドラインから起動するためのコマンドをインストールする機能を提供しています)から起動するとpushダイアログが勝手に表示されてしまうという問題に悩まされていました。

ForkのIssuesにもこの現象は随分前からレポートされているのですが、長らく解決の糸口が見えない状態でした。

github.com

が、最近になって進展があり、一度プロセスを落としてしまえばCLIから起動してもpushダイアログは表示されない、open -a Fork で起動した場合はpushダイアログが表示されない、ということが判明したようです。まだ完全な解決には至っていないようですが、現状のワークアラウンドとしてはCLIをアンインストールして以下のようなエイリアスを定義しておけばよさそうです。

alias fork="open -a Fork"

ずっとなんとかならんかなーと思っていたのですが、これで長年の問題が1つ解決しました。

xsbt-web-pluginでServlet 5対応アプリを実行する

ScalatraのサンプルアプリケーションやGitBucketでは開発にxsb-web-pluginというJava Servletアプリケーション開発を支援するsbtプラグインを使っています。

github.com

ですが、標準でサポートされているのはJetty 9.4(Servlet 3.1)およびTomcat 9.0(Servlet 4.0)となっています。パッケージ名が javax.servlet から jakartaee.servlet に変更されたServlet 5.0に対応したプラグインは今のところ提供されていません。

ただし、xsb-web-pluginはカスタムコンテナもサポートしているのでbuild.sbtに以下の設定を追加することでJetty 11(Servlet 5.0)を使用することができます。

// カスタムコンテナとしてJetty 11を使用
enablePlugins(ContainerPlugin)
Container / containerLibs := Seq(("org.eclipse.jetty" %  "jetty-runner" % "11.0.11").intransitive())
Container / containerMain := "org.eclipse.jetty.runner.Runner"

以下のようにして起動します。

sbt ~container:start

ちなみにxsbt-web-pluginはTomcatのサポートに関してはHerokuのwebapp-runnerを使用しており、このwebapp-runnerのサポートが現状ではTomcat 9までとなっているようです。Tomcatでも埋め込みサーバ用のライブラリが提供されているのでランチャーを自作すればTomcat 10を使用してServlet 5の開発ができそうです。

github.com

今となってはScalaServletアプリケーションを開発するのは少数派と思いますが、GitBucketではJGitのGitServletを使っている関係で今後もServletを使わざるを得ないのでxsbt-we-pluginでもServlet 5対応コンテナを正式にサポートしてほしいところです。

ScalatraがScala3で使えるようになりました

地道にメンテナンスを継続しているScalatraですが、最近ついにScala 3で動作するマイルストーンビルド(3.0.0-M1)を公開しました。

github.com

Scala 3対応の作業はほとんどよしださんにやっていただき自分はリリースしただけですが…。

サンプルとしてScala 3で動作するScalatraプロジェクトを作ってみました。

github.com

一応コードはScala 3のシンタックスで書いてあります。これだけだとあまり嬉しい感じはしないかもしれませんが…。

package com.example.app

import org.scalatra._

class MyScalatraServlet extends ScalatraServlet:
  get("/") {
    views.html.hello()
  }

ScalatraがデフォルトでサポートしているテンプレートエンジンであるTwirl(と言っても何か特別なインテグレーションを提供しているわけではありませんが)はまだ正式なScala 3対応版がリリースされていないのですが、Scala 3に対応したマイルストーンビルド(現時点の最新版は1.6.0-M6)が提供されているのでこれを使うとScala 3でも動きます。

github.com

もちろんまだマイルストーンなのでGAまでに追加で変更が入る可能性はありますが、Scalatraではここ数年大きな変更はありませんし、あってもマイナーな変更だけかなと思います(JettyやServlet APIのバージョンは上げるかも?)。また、Scala 3対応にあたって特に何か大きく変更した部分もありませんのでマイルストーンビルドではありますが普通に使えるのではないかと思います。

DBTest '22でトレジャーデータでのTrinoのアップグレードに関する発表をさせていただきました

今週SIGMODと併催でフィラデルフィアで開催されたDBTest '22というワークショップでトレジャーデータでのTrinoのアップグレード時のテストに関する発表をさせていただきました(自分はリモートで発表させていただきました)。

内容的には以前Presto Conference 2020でお話しさせていただいたものとほぼ同様ですが、今回は新たに執筆した以下の論文を元にした発表になっています。

arxiv.org

発表に使用したスライドは以下になります。

www.slideshare.net

クエリエンジンのテスト周りは特にここ2-3年、チーム内で地道に改善を続けている部分なのですが、最近はテスト自体が改善された分、テスト後の調査にかかる時間が目立つようになってきました。false positiveを減らす工夫はしているものの、まだまだ数が多いので、さらにfalse positiveを減らすための改善を行うこと、最終的に調査が必要になった場合のサポートなどが今後の課題と考えています。

データベースのテストというのは世間一般的にはニッチな領域かと思いますが、ベンダ各社からも論文が出ていたり、DBTestのような国際的なワークショップも存在するので、他社さんの事例も参考にしつつ今後もさらなる改善を続けていきたいと思います。

Data Governance: The Definitive Guide: People, Processes, and Tools to Operationalize Data Trustworthiness

仕事の絡みもあって読んでみたのですが、割と基本的な事項が丁寧に書かれている感じでデータガバナンスの必要性や基本的な考え方、留意事項などを押さえるには良い書籍なのではないかと思いました。

一方で具体的な実現方法までにはほとんど踏み込んでいないので、じゃあどうすればいいのか?というところまではもう2ステップくらいある感じ。既存の製品やソリューションの紹介だったり、著者はGoogle Cloudの方々らしいので「GCPではこんな感じでサポートされている」みたいな感じでもう少し具体例を書いてもらえるとより参考になったのではないかなという気がしました(なくはないけどすごく控えめな感じ。ベンダーや製品依存にならないよう敢えて詳しい言及を避けているのかも知れませんが…)。

それと、基本的な内容が繰り返し丁寧に書かれている分、読んでいて情報量の割にちょっと冗長だなぁと感じる面もありましたし、トピックによってはもう少し突っ込んだ内容を読みたかったかなと感じた部分もありました。この書籍の元になったというホワイトペーパーを読むだけでもある程度ポイントは掴めるのではないかと思います。

ちなみにGoogle Clouldのブログに著者のEvrenさんのインタビュー記事が掲載されていました。こちらは日本語訳されたものもあります。

cloud.google.com

cloud.google.com

システム運用アンチパターン ―エンジニアがDevOpsで解決する組織・自動化・コミュニケーション

タイトルからしてこれは読まなくてはと発売前から思っていたのですが、色々と積読があり読み終わるまでに少し時間がかかってしまいました。オライリーから出ていますが原著はManningの「Operations Anti-Patterns, DevOps Solutions」のようです。

各章のタイトルがかなりキャッチーな感じだったのでもっと現場感のあるホラー系の内容を予想していたのですが、実際はそこまででもなく、内容はかなり真っ当なDevOps本でした。序盤はモニタリングやテスト、デプロイ、オンコールといった比較的現場レベルの課題、後半に進むにつれて情報共有、組織の文化といった話題にも及んでいきます。

個人的には「見ても状況が良いのか悪いのかわからないダッシュボード」というのがフフッとなってしまったのですが、これはDevOpsが浸透して開発メンバーが自分たちで運用していると逆に気付きにくいところかもしれないなあと思ったりしました。

書かれている内容は基本に忠実な感じなので、これからDevOpsを導入しようとしている場合にはよい参考書になるのではないかと思いますし、すでにDevOpsを実践している場合でも振り返りの意味で改めて読んでみると新たな気付きや更なる改善点が見つかるのではないかと思います。

ソフトウェアアーキテクチャの基礎 ―エンジニアリングに基づく体系的アプローチ

原著も含めオンラインのレビューなどを見ているとなかなか評判の良い本書ですが、個人的には読んでいてちょっと感想に困るなぁ…という感じの内容でした。

というのもタイトルだけ見て勝手に勘違いしていたのですが、この本は「ソフトウェアアーキテクチャ」の本というよりは「ソフトウェアアーキテクト」の本なんですね。書籍の説明文にもちゃんと以下のように書かれていました。

ソフトウェアアーキテクチャとは、ソフトウェアシステムの成功に欠かせない重要な土台です。そのためソフトウェア開発者には、効果的なアーキテクチャを実現するスキルが求められます。本書は、そうした効果的なアーキテクチャを設計、構築、維持するアーキテクトになるために必要なスキルや知識を、現代的な視点から整理して包括的に解説する書籍です。 ソフトウェアアーキテクチャの定義から、アーキテクトの役割、モジュールや結合、アーキテクチャスタイルといったアーキテクチャ設計の基礎、チームやステークホルダーと効果的にコラボレーションしていくために必要なソフトスキルまで、さまざまなトピックについて実践的な例とともに説明します。

そんなわけでちょっと思ってたのと違ったというか…。

とはいえ、第I部のソフトウェアアーキテクチャの考え方、第II部のアーキテクチャカタログは経験に頼りがちなソフトウェアアーキテクチャ選定の際に体系的な指針を与えてくれるきっかけになるのではないかと思います。アーキテクチャカタログはパターン自体というよりはそれぞれのパターンの評価軸が参考になる感じかなと。第III部のソフトスキルなどの部分も実際のところ必要だよね…という感じではあるのですが、個人的にはもう少しソフトウェアアーキテクチャ自体を突き詰めた内容が読みたかったかなと思いました。