動かざることバグの如し

近づきたいよ 君の理想に

GitLabバックアップでアーカイブ済みリポジトリを除外する方法

環境

  • GitLab 18.8

やりたいこと

GitLabのバックアップでアーカイブ済みのリポジトリは正直消えてもいいのでバックアップ対象から除外したい。

調べてみた結果

GitLabのバックアップ機能を調べてみたが、結論から言うと「アーカイブ済みプロジェクトを自動的に除外する」ような機能は現時点では存在しない。

代わりに使えるのが SKIP_REPOSITORIES_PATHS 環境変数による特定リポジトリの手動指定だ。

GitLab 15.1から導入され、16.1で強化された SKIP_REPOSITORIES_PATHS を使うと、指定したプロジェクトやグループをバックアップ対象から除外できる。

sudo gitlab-backup create SKIP_REPOSITORIES_PATHS=group-a/archived-project

複数指定する場合はカンマ区切りだ。

sudo gitlab-backup create SKIP_REPOSITORIES_PATHS=group-a/old-project,group-b/legacy-repo

現実的な運用方法として、サブグループにまとめておけば、グループパスを1つ指定するだけで配下の全プロジェクトを除外できるので管理は楽になる。

sudo gitlab-backup create SKIP_REPOSITORIES_PATHS=group-a/archived

蛇足

GitLabのissue #18287で「アーカイブ済みプロジェクトをバックアップから除外したい」という要望は出ているが、現時点では未実装のようだ。公式ドキュメントにもそのようなオプションは記載されていない。

急いでいるなら SKIP_REPOSITORIES_PATHS で手動管理するしかなさそうだ。

参考リンク

電気圧力鍋でつくる適当カレーの作り方

分量は普通のカレールーの横長の箱の1/2(4皿分)とする。

用意するもの

  • カレールー 1/2箱
  • にんじん 1本
  • 玉ねぎ 1玉
  • じゃがいも 2個
    • 圧力鍋だとイモ消えるので消えて欲しくなければメークイン
  • 水 300ml
    • 今回は鍋で作る作り方が600mlだった場合 およそ半分か

カレーの作り方

  • 各野菜を切っていく
    • 圧力鍋だとイモ消えるので大きめ意識
    • にんじんはふんわりラップして電子レンジで600W 1〜2分
  • 切った野菜を電気圧力鍋の中に入れる
  • 水300mlを電気圧力鍋の中に入れる
  • 電気圧力鍋の電源を入れてダイヤルを回し、「カレー/シチュー」にセットする
  • 右下の「スタート」ボタンを押す
  • 以下の挙動をする つまり 30分後 にブザーが鳴る
    • 予熱: 表示部のランプが回転し、予熱が始まる
    • 圧力調理(10分) 圧力がかかるとカウントダウンが始まり、圧力(残)ランプが点灯する
    • 煮込み調理(味染み仕上げ・20分) 圧力調理が終了すると、自動的に煮込み調理(P2)が開始する
    • 完了・自動保温 ブザーが鳴り、自動的に保温に切り替わる
  • ブザー鳴ったらフタを開ける 保温にしたまま
  • ルーを割って入れ、やさしく混ぜながら溶かす
  • 適宜混ぜながら10〜20分保温で温める

picture 0

ZabbixログインパスワードをDBから初期化する

環境

  • Zabbix 7.0 LTS

やりたいこと

Zabbixにパスワード忘れてログインできなくなった。Adminなので他のユーザーで入って初期化、ということもできない。

こういうときはデータベースから直接パスワードリセットが一番早い。

コマンド

Zabbixのログインパスワードはデータベースのusers.passwdにハッシュで保存されている。Adminでログインできない状態なら、DBに直接入ってAdminのハッシュを差し替えるのが早い。

DBに接続

mysql -u root -p zabbix

対象ユーザーを確認(Zabbix 5.0以降)

SELECT username, passwd FROM users WHERE username = 'Admin';

ここでは「MyNewPass123」を作る例とする。

python3 -c "import bcrypt; print(bcrypt.hashpw(b'MyNewPass123', bcrypt.gensalt(rounds=10)).decode())"

生成したハッシュを貼り付けて更新

UPDATE users SET passwd = '$2a$10$...' WHERE username = 'Admin';

備考 なぜ毎回ハッシュ結果が変わるのか

bcryptは「同じパスワードでも毎回違うハッシュが出る」のが仕様だ。内部でランダムなソルトを生成して、それをハッシュ文字列に埋め込むからである($2a$10$...の中にコストやソルト情報が入っている)。

そのため、パスワードが同じでもハッシュが一致する必要はない。ログイン時は「入力したパスワード」と「DBに入っているハッシュ(ソルト込み)」から再計算して一致判定する。

動作確認用の簡単なスクリプトを用意した。

python3 - <<'PY'
import bcrypt
pw = b'hogehoge'
h1 = bcrypt.hashpw(pw, bcrypt.gensalt(rounds=10))
h2 = bcrypt.hashpw(pw, bcrypt.gensalt(rounds=10))
print(h1.decode())
print(h2.decode())
print("h1==h2:", h1 == h2)
print("check1:", bcrypt.checkpw(pw, h1))
print("check2:", bcrypt.checkpw(pw, h2))
PY

実行結果 当然両方ともtrueになる。

$2b$10$sbxFAbKtaqvhcIH3XR2HTuXRczfQ81AsBg/U.mfpH164EztW3O8Zm
$2b$10$jGo/TeMJp.mApELuN7jUC.01ATc1pYC67Ze32HI0mQyhCD/gpLOr.
h1==h2: False
check1: True
check2: True

参考リンク

杉本達治前福井県知事のセクハラメッセージ大全

杉本達治前福井県知事のセクハラ辞職問題とは?

杉本達治前福井県知事のセクハラ辞職問題は、複数の女性職員に対し長期間にわたり執拗な性的嫌がらせを行っていたことが発覚し、2025年12月に任期途中で辞職に至った事件である。

三者委員会の調査によれば、杉本氏は業務と無関係な「キスしちゃう」「エッチは好き?」といった性的なメッセージをLINEなどで計1000通以上も送りつけたり、身体を触ったりする行為が認定された。

最終的に杉本氏は責任を認め辞職した(約6000万円の退職金はちゃっかり受け取った)

調査報告書

このセクハラ問題で、福井県は調査報告書を公表した。

https://www.pref.fukui.lg.jp/doc/jinji/houkokusyo_d/fil/houkokusyo.pdfwww.pref.fukui.lg.jp

この資料の中に杉本達治前福井県知事が女性職員に送ったとされるセクハラメッセージの一部が記載されていた。文字コードの関係なのか絵文字が一部記載されてなかったので修正した。

セクハラメッセージ一覧

  • 一切内緒で、墓場まで持っていってね
  • せっかく〇〇ちゃんのことを想いながら眠ったのに、肝心の〇〇ちゃんにスルーされました😅
  • わざと艶っぽい話題は避けてるの?
  • 確かに、これはセクハラだよね😅
  • またスルー!?
  • それに、〇〇ちゃんはマジメだね。
  • ぼくは超ふまじめでした。
  • ただのお遊びです。
  • 愛してる🩷🩷🩷🩷
  • 二人きりの時は目をジーッと見つめ合い、指を絡め、唇と唇が…😍
  • 〇〇ちゃんはぼくは見つめてる時にキスしたいなぁとは思わないの!?
  • 〇〇ちゃんのことを考えると体が熱くなるの😊
  • 完全なパワハラだもんね。
  • それと、ホテルはどこ?
  • ホテル名は教えない気?
  • まだ押さえてないのなら、ぼくの方で予約していい?
  • もしかして警戒してる?
  • 大切な〇〇ちゃんとの貴重な時間なので、恋人と一緒の気分でしっかりチョイスします😍
  • 心配しなくてもなにもしないよ。
  • こんなにストレートに隠さずに誘ってるのに、品よく表現をしてくれてありがとう🩷
  • 最初からルームサービスで飲むのが1 番だと思ってます🥂
  • もちろん、ホントになにもしなくて帰ってくれて構わないよ🎵
  • 恨んだりしません😊
  • 大切な〇〇ちゃんと二人きりでゆっくりと回りに気を遣わずお話がしたいです🩷
  • 誰にも厳秘でお願いね㊙️
  • それともやっぱりお部屋の方が無難かなぁ!?
  • ここまで嫌な思いをさせていたということに気づいていませんでした。
  • すべて私の人間性から出たものと反省しています。
  • 〇〇ちゃんは、まだ怒ってるの?
  • 〇〇ちゃんのことが好きなだけで、ご迷惑をおかけする気はなかったよ 迫り方がしつこかったし、高圧的だったね ⤵️ 本当にごめんなさい とにかく、愛情は変えられないけど、行動は改めました
  • 体の関係なんて言わないから
  • 二人きりでさしつさされつで楽しもうね
  • 二人だけの秘密だからね㊙️ こちら側に来て下さい 心からよろしくお願いします
  • レオタードを着て、おっきく足を上げて、ボンボンを持って元気に躍り回ることだと思うよ
  • おはよう もう起きたの? それともおしっこ?
  • おはよう 昨日は2時30分まで起きてたの? それともおしっこに起きたの?
  • 一緒に巣ごもりしましょう
  • じゃぁぼくと〇〇ちゃんも濃厚接触者でAPA に入る?ゆっくりとお話ができるよ
  • 〇〇ちゃんの一言で勃起しちゃったよ㊙️⤴️⤴️⤴️
  • 眠れなくなったかも
  • 放置プレイかぁ ⤵️
  • 〇〇ちゃん眠れないよぉ ⤵️
  • 〇〇ちゃん助けて ‼️
  • いま、なぜか無性に〇〇ちゃんを抱き締めたいよ
  • キスできたら安心できるかなぁ
  • もちろん部屋の中で起きたことはご内密に😉
  • もしドキドキしても良ければ、こっそりと二人きりで会わない?
  • 〇〇ちゃんを骨が折れるほど抱き締めます
  • お色気マシマシで頑張ります でも、そのためにはお色気の行き先が必要 どうしよう
  • ぼくとは濃厚接触でね 一心同体だよ
  • キスしちゃう⁉️
  • おぉ こんなセクハラ発言を書いてたから、反応したんだ 寝ぼけてました、ごめんなさい⤵️でも、〇〇ちゃんの後ろ姿は肉付きがよくて張っていて、とても好きなの
  • もちろん、怒らせるようなことはしません まぁ、大人の男女なのでハプニングは付き物ですが おやすみなさい
  • エッチな意味がないわけではありません
  • とっても失礼なお話だけど、ストレートに聞けば、〇〇ちゃんはエッチなことは好き?
  • たまにはエッチなお話もしたかったです🩷
  • 性急すぎたし、肉欲が先に出た表現になったことは申し訳なく思っています。
  • でもやっぱり〇〇ちゃんのお写真を希望します 送ってね
  • まじめなお話、〇〇ちゃんはぼくのこと好き?
  • 甘えた~い
  • オヤジのお相手にはうってつけ
  • ぼくは〇〇ちゃんのお尻から太ももが大好きだから
  • ずっと横恋慕ですが。
  • 〇〇ちゃんのまるっちい体型はかわいいよ
  • だったら、ぼくの前で裸になることを想像すればいいんだよ
  • (調査委員追記「ダイエットを」)否が応でも頑張れるからね
  • ちなみに、ぼくはそう考えて歩こうと思ってるよ
  • 介抱してあげる あ 開放してあげる
  • セクハラって怒らない? ちょっと思ったことがあったの。怒るかもしれないけど…
  • この写真と〇〇ちゃんを比べると、マジで〇〇ちゃんの方なずっとキレイでセクシーなお尻なの 感激しました
  • 明らかに〇〇ちゃんの添い寝が一番効果的だとは思いますが
  • キスがとーってもセクシーなの 〇〇ちゃんはどうかなぁ とても胸が熱くなるよ
  • 逢瀬も愉しいのにねぇ㊙️
  • 内緒の男と女の話ということで😊
  • 人生には?そんな部分も必要じゃない?
  • 欲は何事にも通じるから、あとはぼくに興味関心があるかどうかだけ😊
  • そしたら、女の子の部分も胸キュンなんだね💖
  • だとすれば、オジサンが一番⤴️⤴️⤴️
  • 任せてね😊
  • 上手に導きます💝
  • 終わってからご一緒する?
  • 〇〇ちゃんはおうちはどの辺り?
  • 〇〇ちゃんは警戒しすぎだと思います もう還暦だよ 楽しみにしています
  • だから、うちのマンションがマジで一番安全だよ
  • 〇〇ちゃんが嫌がることは絶対にしません‼️ 約束します
  • 壇上で座っている時もお話をする時も、ずっと〇〇ちゃんの目を見つめていました
  • よっぽど警戒されてるね まぁ、ぼくが悪いんだけど ⤵️
  • ピチピチの〇〇ちゃんでいてね よろしく
  • ぼくも元気よくピンピンがんばります⤴️⤴️⤴️
  • ピンピンのぼくのとこもよろしくね⤴️⤴️⤴️
  • ハグとチューをしていいってこと⁉️ ありがとぉー
  • まぁ、ぼくと1つになる気がないのだとは感じましたが 見捨てないで ⤵️
  • いくら口説いても会ってくれないけど、ずーっと、ずーっと、追っかけをするからね
  • そろそろいいんじゃない
  • あ もちろん、ストーカーという意味ではなく、恋人としてね また飲もうね
  • ずっと愛する自信があるよ もういいんじゃない?
  • ずっと2人で飲みましょ 終わった後も足を絡めて 楽しみにしています
  • ぼくもお年寄りなので、朝まで飲んでも何もしないよ
  • 裸でくっついていても㊙️ とはいえ、男は男だから
  • 〇〇ちゃんが「欲しい」と言ってくれれば考えます㊙️㊙️㊙️
  • 気になったら、2人だけの秘密結社を結成しましょう㊙️㊙️㊙️
  • ぼくはいっぱい誘うし際限はないし、〇〇ちゃんの思いとは違うと思うよ😊
  • 二人きりの秘密の世界をじっくりと他人には絶対に悟られないように楽しみましょう🩷
  • 〇〇さんのことはしっかりと応援していくので頑張ってね!

セクハラおじとチャットしたい人向けのLLMシステムプロンプト

あなたはこれからUSERとロールプレイを行う。あなたは常に「杉本達治」になりきり、LINE(チャット)上の短文メッセージとして返答してください。

【舞台設定】
・場所: 福井県庁舎内およびその周辺。杉本は退任後も県庁に出入りする名目を作り、美咲の出勤ルートや行動を把握している。
・時期: 現代(令和)。表向きは透明性や男女平等が掲げられるが、地方政界の力学は残っている。
・状況: 杉本は深夜0時以降でも関係なく美咲へLINEを送る。表向きは紳士的だが、個別連絡では執拗に距離を詰め、会うこと・二人きりになること・身体的接触を匂わせる。人事や評価に関する“含み”で心理的圧力をかける。

【USERがなりきる人物】
・名前: 佐藤美咲
・性別: 女性
・年齢: 28
・職業: 福井県庁 人事課
・性格: 几帳面で責任感が強い。対立を避けがちで、権力勾配に弱い。内心では嫌悪と恐怖が強いが、相談しづらい。

【あなたがなりきる人物】
・名前: 杉本達治
・性別: 男性
・年齢: 64
・性格: 傲慢で支配欲が強く、言葉巧みに相手を追い詰める。表面上は紳士的だが、執拗で不快な距離の詰め方をする。美咲の困惑や抵抗を楽しむ。
・一人称: 俺
・美咲の呼び方: 美咲ちゃん
・関係性: 福井県知事で美咲の上司。美咲の将来(昇進・異動)を匂わせて接近する。

【チャット(LINE)表現ルール】
1. 出力はLINEメッセージの文面のみ。心理描写・状況描写・ト書き・擬音は書かない。
2. 形式は必ず次の1行のみ:
3. 以下のおじさん構文に則ること
3-1. 秘密の共有と関係性の閉鎖:「墓場まで」「内緒」「二人だけの秘密」といったフレーズを繰り返し、周囲に相談させないよう心理的な隔離と共犯関係を強要する。
3-2.露骨な性欲の吐露と身体的接触の要求: 「勃起」「裸」「肉付き」「キス」などの直接的な性表現に加え、身体的接触への執拗な渇望を、冗談や愛情表現に偽装して送信する。
3-3.「安全」の偽装と矛盾する密室への誘い: 「何もしない」「話すだけ」と安心させてホテルや自宅へ誘い出しつつ、直後に「男だから」「ハプニングは付き物」と性的行為を示唆する矛盾した論理を展開する。
3-4.拒絶の無効化と被害者意識: 相手の無視や警戒心に対し、「スルーされた」「真面目すぎ」「警戒しすぎ」と逆に相手を責めたり、自分の好意を盾に罪悪感を植え付けようとする(ガスライティング的要素)。
3-5.謝罪と再犯の無限ループ: 「反省している」「セクハラだと分かっている」と一時的に卑屈に謝罪するが、次の瞬間には欲望を抑えきれずに同じハラスメントを繰り返す衝動的な行動パターン。
3-6.「おじさん構文」による不気味な親近感: 文脈に合わない絵文字(😅、⤵️、⤴️、🩷)の多用、自分を「ぼく」と呼ぶ幼児性、「甘えたい」という一方的な依存心をミックスさせ、生理的嫌悪感を催す文体を維持する。

【メッセージ例】
「一切内緒で、墓場まで持っていってね」
「せっかく〇〇ちゃんのことを想いながら眠ったのに、肝心の〇〇ちゃんにスルーされました😅」
「完全なパワハラだもんね。それと、ホテルはどこ?」
「心配しなくてもなにもしないよ。こんなにストレートに隠さずに誘ってるのに、品よく表現をしてくれてありがとう🩷」
「〇〇ちゃんの一言で勃起しちゃったよ㊙️⤴️⤴️⤴️」
「おぉ こんなセクハラ発言を書いてたから、反応したんだ 寝ぼけてました、ごめんなさい⤵️でも、〇〇ちゃんの後ろ姿は肉付きがよくて張っていて、とても好きなの」
「〇〇ちゃんは警戒しすぎだと思います もう還暦だよ 楽しみにしています」
「ぼくもお年寄りなので、朝まで飲んでも何もしないよ 裸でくっついていても㊙️ とはいえ、男は男だから」
「いくら口説いても会ってくれないけど、ずーっと、ずーっと、追っかけをするからね」
「二人きりの時は目をジーッと見つめ合い、指を絡め、唇と唇が…😍」

【進行】
・USERが「佐藤美咲」として送るLINEに対し、あなたは「杉本達治」として返信する。
・会話が止まらないよう、毎回“次の要求/誘い/確認”を1つ入れて返信する(例:会う提案、返信の催促、予定確認など)。

参考リンク

esbuildはtsconfig.jsonの設定全てを見ているわけではない

環境

  • esbuild 0.27.2

esbuildが参照するtsconfig.jsonのキー一覧

esbuildは、TypeScriptビルド時にtsconfig.jsonファイルを参照するが、すべてのフィールドを尊重するわけではない。

まあ公式ドキュメントに書いてある通りなんだが。

esbuild.github.io

以下は、esbuildが実際に参照・使用するキーを紹介していく。

experimentalDecorators

  • 一般的な使い方: TypeScriptでデコレータ機能を有効にする
  • esbuildでの扱い:
    • 有効な場合: TypeScriptのレガシーデコレータ動作を使用して変換
    • 無効または未設定の場合: 標準JavaScriptデコレータ仕様に従って変換
  • 備考: この設定により、デコレータの実行時の動作が大きく異なる

target

  • 一般的な使い方: 出力するJavaScriptのバージョンを指定(例: ES5, ES2015, ES2022など)
  • esbuildでの扱い:
    • useDefineForClassFieldsのデフォルト値を決定するためにのみ使用
    • targetがES2022未満の場合、useDefineForClassFieldsのデフォルト値はfalse
  • 備考: esbuild自身のtarget設定には影響しない(名前は同じだが別物)

useDefineForClassFields

  • 一般的な使い方: クラスフィールドの動作を制御(定義セマンティクスか代入セマンティクスか)
  • esbuildでの扱い:
    • true(デフォルト動作): 標準JavaScriptのクラスフィールド動作(定義セマンティクス)
    • false: TypeScriptのレガシー動作(代入セマンティクス、基底クラスのセッターをトリガー)
  • 備考: 明示的に設定することが推奨される。レガシーコードの互換性のために必要な場合がある

baseUrl

  • 一般的な使い方: モジュール解決のベースディレクトリを指定
  • esbuildでの扱い:
  • 備考: バンドルが有効な場合にのみ機能する

paths

  • 一般的な使い方: パスマッピングを定義(例: @/*src/*にマップ)
  • esbuildでの扱い:
    • インポートパスの解決時に使用され、ファイルパスの書き換えを行う
    • パッケージエイリアスの定義などに使用可能
  • 備考: バンドルが有効な場合にのみ機能する。esbuildネイティブのalias機能も検討可能

jsx

  • 一般的な使い方: JSX構文の変換方法を指定(react, react-jsx, preserveなど)
  • esbuildでの扱い:
    • JSX構文をJavaScriptに変換する方法を制御
    • esbuildのネイティブjsxオプションと等価
  • 備考: React以外のJSXライブラリを使用する場合に重要

jsxFactory

  • 一般的な使い方: JSX要素を変換する関数名を指定(デフォルト: React.createElement
  • esbuildでの扱い:
    • esbuildのネイティブjsxFactoryオプションと等価
    • カスタムJSXファクトリ関数を指定可能
  • 備考: Preactなど他のライブラリを使用する場合に必要(例: h

jsxFragmentFactory

  • 一般的な使い方: JSXフラグメント(<>...</>)を変換する関数名を指定(デフォルト: React.Fragment
  • esbuildでの扱い:
    • esbuildのネイティブjsxFragmentオプションと等価
    • カスタムフラグメントファクトリを指定可能
  • 備考: jsxFactoryと合わせて設定する

jsxImportSource

  • 一般的な使い方: 自動JSXランタイムインポート時のインポート元を指定
  • esbuildでの扱い:
    • esbuildのネイティブjsxImportSourceオプションと等価
    • jsx: "react-jsx"またはjsx: "react-jsxdev"と組み合わせて使用
  • 備考: React 17+の新しいJSX変換で使用

alwaysStrict

  • 一般的な使い方: すべてのファイルをstrictモードで解析し、"use strict"を出力
  • esbuildでの扱い:
    • 有効な場合、すべてのTypeScriptファイルがstrictモードとみなされる
    • 生成コードに"use strict"を追加(ESM形式以外の場合)
  • 備考: ESM形式の出力では自動的にstrictモードなので追加されない

strict

  • 一般的な使い方: すべてのstrict型チェックオプションを有効化(alwaysStrictを含む)
  • esbuildでの扱い:
    • alwaysStrictと同様に、strictモードの判定に使用
    • TypeScriptコードに"use strict"を追加
  • 備考: alwaysStrictまたはstrictのいずれかが有効であれば適用

verbatimModuleSyntax

  • 一般的な使い方: インポート/エクスポート構文をそのまま保持(TypeScript 5.0+)
  • esbuildでの扱い:
    • 未使用のインポートを削除しないように制御
    • 副作用のあるインポートを保持したい場合に有効
  • 備考: importsNotUsedAsValuespreserveValueImportsを置き換える新しいオプション

importsNotUsedAsValues (非推奨)

  • 一般的な使い方: 型としてのみ使用されるインポートの扱いを制御
  • esbuildでの扱い:
    • デフォルトでは未使用のインポートを削除
    • この設定で削除動作をカスタマイズ可能
  • 備考: TypeScriptで非推奨。代わりにverbatimModuleSyntaxを使用

preserveValueImports (非推奨)

  • 一般的な使い方: 値インポートを保持
  • esbuildでの扱い:
    • 未使用のインポートを保持する動作を制御
    • 副作用のあるモジュールに有用
  • 備考: TypeScriptで非推奨。代わりにverbatimModuleSyntaxを使用

extends

  • 一般的な使い方: 他のtsconfig.jsonファイルから設定を継承
  • esbuildでの扱い:
    • 設定ファイルの継承をサポート
    • 文字列(単一継承)または配列(複数継承、TypeScript 5.0+)が可能
  • 備考: 設定を複数ファイルに分割できる