2023年10月15日日曜日

Install SSH Key v2.6.1を公開しました

 Install SSH Key v2.5.0でアクション終了時に .ssh ディレクトリーを削除する機能を追加したんですが、その数日後に「あらかじめ.sshがセットアップされているセルフホストランナーでも問答無用で削除するなんてひどいや!」という報告がありました。いやその通り。.ssh自体が存在していないマシン上で動かすことしか想定していませんでした。ごめんなさい。

というわけで、その報告から10ヶ月後の先日、v2.6.0でついに対応しました(おせーよ)

今回の変更で、アクション終了後にInstall SSH Keyを実行する前の状態に戻るようになりました。内部処理は以下のとおりです。

  • 最初に.sshディレクトリーが存在しなかった場合は、終了後に.sshディレクトリーを削除(これまでと同じ)
  • .sshディレクトリーが存在していた場合は、各種ファイルを作成するときに同名のファイルが存在していればバックアップを別名でコピー、終了時に戻す

.sshディレクトリーの中身自体をまるっと別名でコピーする方法も考えたのですが、ファイルの移動やコピーが最小限ですむ今回の方法を採用しました。とはいえ、まるっと待避→まるっと復元の方がリスクも少ないので、もしかしたら今後こちらの方法に変更するかもしれません。

そしてリリースの翌日にちょっとしたバグが見つかったので、急遽v2.6.1をリリースしました。このバグが発生する状況は限定的で、バグ自体も致命的ではないとはいえ、このバグはまるっとコピーしていれば発生しなかったものです。。。

2023年10月8日日曜日

ローカルやと 8080 でちゃんと動くのに Docker にのせたら8080でリッスンしてないのなんで

知り合いの子がこんなことを𝕏にポストしていました。

ローカルコンピューター内で作ってみたサーバーをDockerイメージ化すると、ちゃんとポートもマッピングしているのに外からアクセスできない。うん、Dockerのあるあるですね。

答えはコレ。

あーそうだそうだ。しょっちゅう忘れる。度々ハマるくせに、そもそもDockerイメージの設定ファイルを作る頻度自体がそこまで高くないので、次回作るときまでに諸々忘れているアレです。覚書としてここに残しておこう。

ちなみにChatGPTに聞いてみたところ

  1. ポートは正しくマッピングされているか?
  2. ファイヤーウォールなどでブロックされていないか?
  3. アプリケーション側で該当のポートを正しくListenしているか?
  4. ポートが別のアプリケーションと競合していないか?

などをチャックするように言われましたが、0.0.0.0のことは指摘してくれませんでした。。。

2023年10月1日日曜日

OpenTofu

 オープンコーラのような、レシピがOSSになっているやつではありません。

簡単にまとめると

  1. Terraformのライセンスが変更された
  2. ライセンス変更前のTerraformからOSS版のフォーク(OpenTF)が誕生
  3. OpenTFだと商標を侵害する可能性があるので新しい名前を募集
  4. OpenTofuに決定

Terraformとは何か?については、今回の主題ではないので説明は省略します。知らなくてもこの記事の理解に支障はありません。

元々このTerraformはOSS(MPL)として提供されていたのですが、v1.6からライセンスが変更されました

こちらによると、商用利用が一部制限され、Terraform作成元のHashiCorpと競合するような使い方をするとこの制限に引っかかりそうです。単にインフラ整備のために使うなら問題なさそうですね。

とはいえ、それでも今後のリスクがあるので、ライセンス変更前のバージョンからフォークしてOpenTFという新しいOSSが誕生しました。まあ最近よくある流れです。

ただ、このOpenTFという名前もHashiCorpの商標の侵害の可能性があるねということで新たな名前を募集したところ、OpenTofuが支持を集めたようです。OpenTofuのロゴ画像は一部黄色いので、どちらかというと揚げ豆腐なんでしょうか。

こちらによると、OpenTofuのいいところは

  • 元の単語と意味的に離れていて訴訟の心配が少ないこと
  • 単語・発音が短いこと
  • 「.tf」という拡張子の互換性を維持できること

だそうです。なるほど確かに。

OSS企業がプロダクトのライセンスを商用利用を制限する方向に変更するのはここ数年よく見るパターンですが、このOpenTofuは名前に恥じない健康的なプロダクトになって欲しいものです。

ところで、さくらインターネットではたこ焼きのレシピをオープンソースとして公開しています。。。と思ったらライセンスが明記されていなかった。

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日日曜日

目標決めと人事考課

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

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

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