2023年9月24日日曜日

docker-entrypoint.shからプロセスを起動する時の注意

 ウェブアプリケーションなどをコンテナ管理するためにDockeを使うとき、docker runの引数を処理できるように、Dockerfileの中で本体のプロセスを直接ENTRYPOINTCMDに指定するのではなくdocker-entrypoint.shから起動する場合も多いのではないでしょうか。

そのとき、以下のように書いたらダメです。「何がアカンの?」という方、今まで普通にこういう書き方をしていた方はご注意。ちなみに「set -euをつけろ!」とかそういう話ではないです。

#!/bin/bash

# 引数を処理したり色々
...

# 本体のプロセスを起動
/path/to/some-process

いやまあこれでも動くんですが、docker stopCtrl-Cなどでコンテナを止めようとしたときに10秒ほど待たされます。これは、コンテナに対するSIGTERMSIGINTdocker-entrypoint.shが動いているプロセスにしか届かず、本体のプロセスまで送られません。そのため、Dockerはコンテナを止めたいのに本体のプロセスが止まってくれず、10秒のタイムアウトの後に強制的にプロセスを終了するという流れです。

ではどうすればいいかというと、ハイそうです。docker-entrypoint.shのプロセス自体を本体のプロセスで置き換えれば解決。というわけでexecを使いましょう

exec /path/to/some-process

#!/bin/bash

# 引数を処理したり色々
...

# 現在のプロセスを本体のプロセスで置き換える
exec /path/to/some-process

これでDockerからは本体のプロセスになるので、コンテナを止めたときに本体のプロセスがすぐ止まるようになります。めでたしめでたし。

2023年9月17日日曜日

Bun v1.0がリリースされたよ

 このブログを書いている時点ですでにv1.0.2まで上がっていますが、先日Bunの安定版v1.0がリリースされました

というわけであらためてBunまわりの歴史についておさらい。とは言ってもあまり詳しいことまでは話しません(話せません)。

2023年9月10日日曜日

OpenAPIソースファイルの分割

 大規模なウェブサービスを作っていると、WebAPIの数も膨大になってきます。APIのドキュメントを作成するためにOpenAPIを使っている人も多いと思いますが、APIの数が増えてくるとドキュメントのソースファイル(JSON/YAML)が大きくなり、編集しづらくなります。

でかいソースファイルは分割するのが世の常で、もちろんOpenAPIにもソースファイルを分割できる仕様はあるのですが(文法はJSON Schemaなので)、問題は分割したファイル($refによる参照先のファイル)にIDEのコード補完が利かなくなることです。

そこで、ソースファイルを分割しつつ、IDEのコード補完も利かせる方法を考えてみます。IDEはウェブ開発の定番Visual Studio Codeを想定します。え?VSCodeはIDEじゃない?気にするな。

なお、この記事は「OpenAPIのドキュメントの書き方を知っていること」「ソースファイルの分割方法($ref)を知っていること」「VSCodeのOpenAPI拡張機能を使っていること」を前提としています。その上で、分割したファイルの補完を使う方法の説明です。

2023年9月3日日曜日

目標決めと人事考課

 そろそろ上半期が終わる時期なので、ぼちぼち人事考課を始めている会社もあるのではないでしょうか。

ところで、部署の目標や自分の役割をしっかりと認識できていますか?そして期中の成果をきちんと説明できますか?

というわけで、本日は目標決めと成果の説明のやり方についての授業です。といってもちゃんとやってる人にとってはあまり得るものはないと思います。なんとなくやってるマネージャーに向けたお話です。