2026/04/20(月)郵便の取り戻し請求をやってみた

投稿日:

手違いで機微のある情報を含んだものを郵便に出してしまったので郵便の取り戻し請求をやってみて、実際に戻ってきた記録。

東京宛てに定型封筒を出し、13時前にポストに入れて問題に気づいたのが18時ごろ、調べたところ出した郵便物は取り戻せるとあった。

神戸から東京は三日かかるらしいので請求を出せば取り戻せるはずだと思った私は仕事が終わったら取り戻り請求をしようと決意し、仕事を終え中央郵便局にダッシュして到着したのが19:45。

ゆうゆう窓口で郵便物を取り戻したいといったところ、すごく高いですよ〜?辞めたほうがいいですよ〜?戻ってくる保証もないですからねぇ〜?ってめっちゃ言われたが、それでもいいなら750円払えば出来ると言われ支払うことにした。言うほど高くなかった。

取り戻し申請には専用の用紙があり、これに記入することで手続きできた。

あれだけある郵便物の山から果たして探し出せるのか?仕分け作業で毎回チェックが入れば行けるのか…?配達時にチェックしているのか…?などと考え、少なくとも往復で六日は掛かるだろうというので待つことにした。

その最中長期出張が入り、家に戻ってきたら無事に届いていたので、いつ戻ってきたかは不明だが、消印的に六日だろう。これは神戸→豊島が三日だからだ。

そんなこんな無事に戻ってきてよかった。

しかも取り戻し申請の用紙と、実際の郵便物で記載事項が異なっていたのに戻ってきたのでより驚いた。

申請用紙には送り先住所を「東京都豊島区ほげほげ~」宛名を「ふがふが」、送り元住所を「兵庫県神戸市中央区~1-2-3 ぴよハイツ123」のように書いたが、実際の郵便物には「豊島区ほげほげ~」宛名を「ふがふが ふにふに御中」、送り元住所を「神戸市中央区~1-2-3 ぴよハイツ」のように書いていた。申請用紙を出した後に実際と同じほうがよかったかだろうかと少し悩んだ。今思えば聞けばよかったなとも思った。ちなみに郵便物側に部屋番号が欠落していることにはこの時気づいてなかった。

結果として申請用紙より少ない情報しか書いてなかったのに、ちゃんと戻ってきた。これは見方によってはセキュリティホールにもなりえるものの驚きである。その証拠に戻ってきた郵便物の裏側には鉛筆で部屋番号が足されていた(丸で囲われている部分)

郵便の仕分けは昔(30年以上前)見たことがあり、基本はOCRで処理していたはずだが、ここまで欠陥まみれの情報を救い上げられるということは取り戻し申請DBに問い合わせて、複数パターンでのパターンマッチをしていたりするのだろうか?と少し思った。

郵便配達員を観察したが、配達のタイミングでは特に何も見てなさそうだったので、恐らく配達員の手に渡るともう戻ってこないのだとは思うが、これだけ申込内容と実物の郵便物に相違のある情報で郵便物が戻ってくるのであれば、局に到着する前ならば戻ってくる可能性は高いと感じた。

まとめ

  • 750円払うと郵便物の取り戻し請求ができる
  • ゆうゆう窓口で申請できる
  • 恐らく相手局の仕分けに入る前に請求すれば戻ってくる
  • 郵便物に書いてある情報と、請求申請書の内容に多少相違があっても戻ってくる
  • 送り主の部屋番号が記載されてない場合、書いてくれることがある

2026/04/16(木)WindowsでSSH接続に使う秘密鍵を任意の場所に置く方法

投稿日:

C:\Users\hoge\.ssh以外の場所に秘密鍵を配置し、その秘密鍵を使ってWindows組み込みのSSHを利用して、SSH接続を行うと以下のようなエラーが出るので、それを回避する方法。

[00:11:24.734] Opening exec server for ssh-remote+hoge.example.com
[00:11:24.934] Initizing new exec server for ssh-remote+hoge.example.com
[00:11:24.934] Using commit id "xxxxx" and quality "stable" for server
[00:11:24.934] Extensions to install:
[00:11:24.939] Install and start server if needed
[00:11:24.963] Opening exec server for ssh-remote+hoge.example.com
[00:11:24.967] Running script with connection command: "C:\WINDOWS\System32\OpenSSH\ssh.exe" -T -D 65374 "hoge.example.com" sh
[00:11:24.968] Generated SSH command: 'type "C:\Users\hoge\AppData\Local\Temp\vscode-linux-multi-line-command-hoge.example.com-281649447.sh" | "C:\WINDOWS\System32\OpenSSH\ssh.exe" -T -D 65374 "hoge.example.com" sh'
[00:11:24.968] Using connect timeout of 17 seconds
[00:11:24.968] Terminal shell path: C:\WINDOWS\System32\cmd.exe
[00:11:25.179] >
[00:11:25.179] Got some output, clearing connection timeout
[00:11:25.199] >
[00:11:26.323] >
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> @         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> Permissions for 'C:\\path\\to\\hoge.sec' are too open.
> It is required that your private key files are NOT accessible by others.
> This private key will be ignored.
> Load key "C:\\path\\to\\hoge.sec": bad permissions
> miyashiro@hoge.example.com: Permission denied (publickey).
> プロセスが、存在しないパイプに書き込もうとしました。
[00:11:26.632] "install" terminal command done
[00:11:26.632] Install terminal quit with output: プロセスが、存在しないパイプに書き込もうとしました。
[00:11:26.632] Received install output: プロセスが、存在しないパイプに書き込もうとしました。
[00:11:26.633] WARN: $PLATFORM is undefined in installation script output.  Errors may be dropped.
[00:11:26.633] Failed to parse remote port from server output
[00:11:26.633] Exec server for ssh-remote+hoge.example.com failed: Error
[00:11:26.633] Existing exec server for ssh-remote+hoge.example.com errored (Error)
[00:11:26.633] Initizing new exec server for ssh-remote+hoge.example.com
[00:11:26.634] Error opening exec server for ssh-remote+hoge.example.com: Error
[00:11:26.634] No hints found in the recent session.

やり方

以下のコマンドで秘密鍵の所有権を自分だけに変更するといけるようになる。

icacls "C:\path\to\hoge.sec" /inheritance:r /grant:r "%USERNAME%:F"

icaclsはファイルの所有権を変更するコマンドで、/inheritance:rで親フォルダからの継承を無効にし、指定したファイルに対する親フォルダから継承した権限を削除し、/grant:r "%USERNAME%:F"でファイルに対する権限を削除し、現ユーザーのフルアクセス権で上書きしている(要するに既存のアクセス権を、現ユーザーのフルアクセス権で置換しているのだと思う)

恐らくLinuxのOpenSSH同様に、WindowsのOpenSSHも鍵をユーザー以外が見れるとだめなのだろう。

2026/04/14(火)今回の転職でやったこと

更新日:
投稿日:

転職時に複数内定を得た場合の考え方についてで104社受けた末に転職できたということを書いたが、今回はそこに至るまでに何をしたかについて書いていく。

かなり純度の高い本音が含まれる赤裸々日記なので、かなり不遜なことも書いている。

大まかな転職活動期間は書類作成から起算すると、二年半程度である。

参考までに今回の転職は四回目の転職となる。

書類作成編

私は職務経歴書の作成をサボっていたし、職務経歴書の内容もかなり稚拙で、読みづらく、意味不明であると考えていた。

当時の職務経歴書はWordで制作していたもののMarkdownの影響を強く受けており、文章じみており、一目でわかりづらい欠点があった。そこでまず職務経歴書のリライトを行うことにした。

まずやったこととしてはWordで表組を作り、そこに書くことにした。これはちょうど上図のような感じだ。これによって視認性は上がったと考えている。

本文についても乱雑な感じになっていたので、ChatGPTとGemini、Claude Opusをフル動員していい感じの文章を作ってもらい、セルフコンペしながら、自分の言葉になるように清書した。その中で抜け漏れがあれば追記修正するなども行い、内容の品質を上げていった。

私はSESが長く、何十ものプロジェクトに参画していることもあり、とにかく職務経歴書が長いのだが、そこは採用担当者や転職媒体のLLMが読めるように職務経歴書を組むことで何とかしている。実際私の職務経歴書はCtrl+A→Ctrl+Cで全文コピーしてLLMに貼り付ければ、Wordを解さないLLMでも意味が通るように作ってある。

しかし工数は膨大で、職務経歴書のリライトだけで半年かかっている。これはやる気が起きなかったことが多分にある。何せ膨大な文章の誤字脱字チェック、文章として意味を成しているかどうかの確認などの退屈な作業で大分苦労した。いわゆる不毛な作業みたいなやつである。叶うことならもう一生書き直したくない量の文章である。

相談編

そして書類を作りりきったところで、私の課題を見つける必要があるかもしれないとキャリアコーチを頼ってみることにした。特に何の資格も持たないネットでバズってるキャリアコーチに五万も払ったが、驚くほど得られることがなかった。

なんというか、雑談して終わりみたいな…。私の話し方も悪かったのかもしれないが、LLMに話したほうがマシなレベルだった。

余談だが、このキャリアコーチは「特定商取引法に基づく表記」を掲示しておらず、最後までどこの誰か明かしてくれなかったので、違法事業者であった。いやまぁ、わかってて払ったのだが…。

応募編

ここまで足かけ一年かかっている。とにかく前準備が長すぎた。

昨夏、惨敗し、学びを得た82社

まず昨夏、つまり2025年の夏に私は三社の転職エージェントと自己応募を合わせて転職活動していたが、全く上手く行かなかった。

この時は82社受けていたのだが、82社中46社が書類落ち、29社が一次選考落ち、1社が二次選考落ち、2社が最終選考(二次)落ち、4社は辞退だった。

落ちている理由は明白だった。転職エージェントが「うちを使うならこれは全部受けてくれ」というのを受けていたからだ。会社に対して興味もなければ、ポジションにマッチしているとも思えない、そんな会社が大半だった。もちろん下手な鉄砲も数撃てば当たりはするもので、一次選考に進む企業もあったが、面接官がこちらが答えようのない質問をしてくるので答えようがなく、かなりの数落ちた。

逆に二次選考まで来た企業についてはお互いに興味を持ち合えたので最終選考まで進むことができたが、転職エージェントが返事をしなくなりオファー面談が行えな得ず、音信不通になり恐らく終了した。転職エージェントの担当をつついても返事がなかったので諦めた。

辞退した四社については全て兵庫県沿岸部~大阪近郊に所在する会社で、自己応募した企業だったが、WordPressの構築レベルの会社しかなかったため、カジュアル面談で辞退した企業になる。

そんなこんなで昨夏は転職エージェントに振り回され、自分で応募した企業は芳しくないという暗澹たる結果に終わった。

ここで学んだことは、転職エージェントを使うのは私には向いていないということと、面接で上手く受け答えができないシーンが多く、言語化が不十分だったということだ。この失敗から得た学びは、冬の転職活動に生きることになる。

参考までに7月と8月で行った転職活動を記録したカレンダーも貼っておく。黄色い部分が転職活動をしていた箇所だ。ほとんど毎日のように面接やエージェント面談が入っており、酷いときは一日に三度もあり、有給が一瞬で燃え尽きた。

冬、内定を得て転職したが後味は微妙だった

そして時は4ヶ月ほど経ち、2025年の冬から転職活動を再開することにした。

ここで私は夏の転職活動の反省を生かし、転職エージェントは使わないことにした。そこでスカウト・自己応募型を中心にWantedly・OpenWork・Green・Findyの媒体を使うことにした。

結果として22社受けて書類落ち3社、一次選考落ち2社、二次選考落ち1社、三次選考落ち3社、内定4社と、昨夏とは比較にならない好成績を残すことができた。辞退はカジュアル面談7社、一次面接2社だった

まず最も効果があったのは自分で企業を選んだことだ。エージェントが投げてくる企業を言われるがままに受けていると一日に3~4社受ける必要があり、一体何の企業を受けているのかがわからないうえ、募集ポジションを無視して受けていることもざらなので意思疎通ができない。しかし自分で選んで受ける分には共有言語があるであろう企業を受けることができるため、比較的そこへの問題はなくなる。

また、次に生きたのが言語化だ。これはFindyのキャリアカウンセラーと一ヶ月かけてみっちりと対策した。これによってカジュアル面談で聞きたいことを聞き出し、選考でもマインドが合う企業相手であれば違和感のないやり取りができたと強く感じている。勿論、詰まった時や困ったときは事後に再対策を行い、内容を強化していった。これによって深掘りされた時の回答がスムーズにできるようになった。

これによって昨夏は書類・一次の不通過の累計が91.46%だったのが、22.73%と、1/4以下に抑えることができた。最終面接の不通過もポジション不一致と、Windows利用を交渉したものの顧客都合で不可というもので、ネガティブな内容ではなかったのが何よりだ。もう一つは「すさまじい激務で現場が疲弊しているが君は耐えられるか?」的な話を聞いた時に私が露骨に嫌な顔をしたからで、事実上の辞退である。

要するに今回の転職活動では、そもそも入りたくない企業には落ち、入りたい企業からは内定が得られたという意味で、そこまでの話でいうと、かなりの成功だった。

得た内定のうち一件は、そもそも相手先企業が内定承諾書を約束通り出してくれなかったのでたぶん自然消滅した。もう一つは企業としてはよかったのだが、何とも言いづらい懸念があったので、申し訳ないのだが他の企業を見て、その結果次第で入ることにした。身も蓋もない話をすれば滑り止めである。

そしてその最中、一社からいい条件で内定が出た。この会社を以降A社という。しかし私はこのA社の最終面接前にGreenに登録し、万一落ちたときにリカバリーできる企業を探し、とにかくエントリーしまくった。といってもほぼほぼスカウトに返事をしただけではあるが…。

そして結果として、このA社から内定が出たときに、Green経由でかなりい条件の企業からオファーが来て、現在の選考状況を伝えたところ、既にオファー面談前ということで凄い速度で選考を進めてもらえることになった。この会社をB社とする。結果として、A社のオファー面談後、すぐにB社からも内定が出て、すぐさまオファー面談となった。

しかしA社の内定承諾期限はわずか四日しか設定されておらず、B社のオファー面談が終わった時には残り二日しか残っていなかった。私はB社に心が傾いていたのだが、媒体の担当者からA社を強く推される発言をされ、日和ってしまい、十分に検討することもせず、A社に返事をしてしまった。

昨夏と比較して転職活動はおとなしいものとなり、面接は一日一回に抑え、一日に二つ黄色いのがあるのはFindyの面談で、大まかには面接対策や振り返りをしていた。

企業との面接は週2回を心掛けるようにし、同時に並行して進める会社も三社に収まるように調整したため、活動期間も長くなっている。

一日に二回とか、週に三回以上入っているところもあるが、これは基本的にFindy担当との面談か、話を聞いてみるレベルのカジュアル面談で、重いものにならないようにしていた。

ただこのペースでも個社のことをちゃんと覚えきるのは難しく、一社落ちれば次の会社とやっていたり、返事が遅い企業を放置していたら頭の中で混ざったりして、まぁまぁ大変だった。その結果、余裕がなくなり今回のような結果になったところもあると思う。

あとがき

そして、この時の後悔の念と反省として、転職時に複数内定を得た場合の考え方についての記事を書いたのである。

私はもうエージェントと、担当の付く媒体は使わないようにしたいと思ったのであった。もう自分の人生は自分で動かしたいのである。

そして、この記事は私が転職活動をしている中で、ググって引っ掛かる記事が媒体や転職エージェント絡みのアフィリエイト記事かポジショントークばかりで、総じて役に立たなかったので、経験談として誰の役に立てばという思いで書いている。

なお本記事と、転職時に複数内定を得た場合の考え方についての記事の内容には一切LLMを使用せず、完全に自分の文章で記述している。

2026/04/14(火)転職時に複数内定を得た場合の考え方について

更新日:
投稿日:

以前、昨今のプログラマー・システムエンジニアの年収感についてを書いたが、結果として104社受けた末に納得のいく内定を得ることができたが、内定を上手く制御できなかったので、反省の念として残す。

転職記録はまた別記事に書く。

まずは結論

IT職が転職しやすいといっても限度というものがあるので内定承諾の返事は慎重にしよう!

内定承諾期限は延ばせる!!

複数内定が出たが内定承諾期限ギリギリに内定が出たら伸ばそう!伸ばせられなかったらその時に考えろ!!!

複数内定が出たときのための比較表を作れ!

雰囲気で判断するな!職歴を詰める数は無限ではない!

まず転職にあたり転職軸をいくつか考えているはずだ。仮に二社内定が出たとして、完全にイコールではないはずだ。冷静に比較表を作り、比較せよ!

例えば以下のような表を作ると、企業Aと企業Bを数値的にパッと比較できる。これは仮に企業Aの内定承諾期限ギリギリに企業Bのオファー面談が終わったとしても一目で判断することが出来るため極めて有用だろう。特に媒体の担当者や転職エージェントなどから企業Aがオススメですよなどと助言を受けても、企業Bへの固い意志を貫ける可能性がある。

またこの表は元々あった転職軸を書くのも勿論いいのだが、新たに浮かんだ比較軸を書けると、尚の事比較項目が増えて有用になるだろう。例えば出張や休日シフトの有無だったりは普段する機会がないとなかなか出てきづらい。

企業A 企業B 備考
通勤できるか フルリモ:0.5 ◎:1.0 通勤できるほうが身体と精神の健康に良い
Windows利用可 〇:0.5 ◎:1.0 企業AはMac文化、企業BはWindows。企業AでWindowsが利用できなかった時のリスクはどうか?
技術文化 〇:0.5 ?:0.0 企業Bに技術文化はないかもしれない
品質意識 〇:0.5 ◎:1.0 企業Bは受託なので品質意識は高いはず
労働時間 残業18h:1.0 残業19h:0.9 残業は誤差
会社の安定性 〇:0.5 ◎:1.0 企業Bは歴史がある
今後のキャリア ?:0.0 ◎:1.0 リードなので企業Bのほうが活躍の余地がある
外部モニタ二枚 出社なしのため考慮せず:1.0 ◎:1.0 企業Bは出社時にモニタくれると聞いた
給与 xxx万円:1.0 xx2万円(残業賞与込み):0.8 残業時間次第で企業Bが勝る可能性
職務 バックエンドエンジニア:0.5 リードエンジニア:1.0 リードエンジニアなので将来性はある
地元貢献 ×:0.0 ◎:1.0 企業Bは地元企業である
出張 あり:0.0 なし:1.0 出張はないほうがよい
休日シフト あり:0.0 なし:1.0 休日シフトもないほうがいい
合計 6.0 11.7

抱いた違和感は大切に

コーディングテストを手抜きで出したのに過大評価されたり、何かしら変な兆候を察知した場合、その違和感は大切にしたほうが良いと思う。恐らくそれは本物だ。

その仕事は自分のためにやりたいか、やりたい仕事か?

内定が出た会社を比較して今後のためになるか、自分がやっていて楽しく思えるかとかも考えるべきだと思った。

いてもつまらん会社にいても仕方がないと思う。

関連記事

あとがき

もしその時の選択に後悔の念を持ったとしても、それはそれでまた人生である。なんだかんだ人生に正解というものはなく、なるようにしかならないのだ。

人生は一期一会であり、そこで何かを得たらそれもまた縁だ。結局のところ、未練や禍根はどちらを選んでも生まれ得るものだろう。

なので内定を承諾したからには、その企業でできることを最大限にやり、実績を残し、次へ繋げるのが良い。結果論としては意外とハマるかもしれないし、人生の醍醐味はそういった予測不可能性にあるとも言えるだろう。

勿論、内定を承諾した後に撤回するという荒業も使えなくはないが、人間としていかがなものかと思うので、その切り札は使わないに越しておくことはないだろう。日本がいくら法治国家とはいえ、法律に杓子定規になりすぎるのも考え物だ。

2026/04/11(土)ComfyUIを使ってみる2

更新日:
投稿日:

去年の六月にComfyUIを使ってみるという記事を書いたが、当時はAUTOMATIC1111との差を覆せず、イマイチという結論に終わった。その後AUTOMATIC1111からreForgeに乗り換えたものの、ComfyUIへの未練は残っていた。そこで今回あらためて挑戦してみたところ上手くいったので、その記録を残しておく。

確認環境

ソフトウェア

ComfyUI v0.18.5

ハードウェア

前回とマザボが変わっているが、これによる差はないだろう。

デバイス 製品
CPU Intel Core Ultra 7 265F
GPU GeForce RTX 5070 Ti
MEM Crucial CT2K16G56C46U5 * 4
M/B ASRock Z890 Pro RS

導入方法

インストール

公式サイトからインストーラーをダウンロードして実行するだけ。
インストール先は変えてはならない。もし変えると起動してもフリーズするようになったりする。

各種設定

ComfyUI-Managerはデフォルトで入ってるので入れなくてよい。

  1. 設定>Comfyから言語を英語にする[1]
  2. Settings>Server-Configを開き、一番下までスクロールし、DirectoriesにあるOutput directoryを適当に変える
    • ここが生成した画像の出力先になる
  3. Settings>Graph>Link Render ModeでStraight
    • ノードを繋ぐ線が直線になり、見やすくなる
  4. Settings>Graph>Always snap to gridをON
    • ノードがグリッドにスナップするようになる
  5. Extentionsを開きComfyUI-Custom-Scriptsを入れておくと幸せになるらしいので入れる

資材パスの変更方法

モデルなどは容量を食って重いので別のドライブに移動させる方法。

  1. 別ドライブのどこか適当な場所に%HOMEPATH%\Documents\ComfyUI配下のフォルダを丸ごと移動する
  2. %HOMEPATH%\AppData\Roaming\ComfyUI\extra_models_config.yamlを開く
  3. 取り敢えずこんくらいの設定にしておけばよいと思う。パスの尻に``が入ってると起動しなくなるので注意
    comfyui_desktop:
       is_default: "true"
       custom_nodes: custom_nodes
       download_model_base: models
       base_path: E:\path\to\ComfyUI
       # models\Stable-diffusion
       checkpoints: models\checkpoints
       # models\ControlNet
       controlnet: models\controlnet
       # embeddings\
       embeddings: models\embeddings
       # models\Lora
       loras: models\loras
       # models\VAE
       vae: models\vae
    desktop_extensions:
       # 元から記述がある部分、変える必要はない
       custom_nodes: C:\Users\hoge\AppData\Local\Programs\ComfyUI\resources\ComfyUI\custom_nodes
    

AUTOMATIC1111やreForgeの設定をワークロードに反映させる方法

一例として、りこベンチの設定の再現方法。ComfyUIはアップスケーラー周りの設定が分かってないとゴミ画像が出てくるので、アップスケーラーの設定が重要になる。

全体像としてはこんな感じで、以前書いたComfyUIを使ってみると構成するノードには大きな変わりはない。

ポイントは一段目のKSamplerでdenoiseを1.00にし、二段目で0.70にする部分だ。両方を0.70にすると画質が大幅に劣化する。

ベンチスコア

りこベンチ設定では64.76秒を記録し、AUTOMATIC1111からreForgeに乗り換えた時のスコアである81秒と比べると16.24秒も早くなっている。

使用したワークフロー

{
  "id": "6de0fdb5-59c2-4625-b494-4097461da37e",
  "revision": 0,
  "last_node_id": 17,
  "last_link_id": 25,
  "nodes": [
    {
      "id": 4,
      "type": "CheckpointLoaderSimple",
      "pos": [-290, 240],
      "size": [320, 100],
      "flags": {},
      "order": 0,
      "mode": 0,
      "inputs": [
        {
          "localized_name": "ckpt_name",
          "name": "ckpt_name",
          "type": "COMBO",
          "widget": { "name": "ckpt_name" },
          "link": null
        }
      ],
      "outputs": [
        {
          "localized_name": "MODEL",
          "name": "MODEL",
          "type": "MODEL",
          "slot_index": 0,
          "links": [1, 18]
        },
        {
          "localized_name": "CLIP",
          "name": "CLIP",
          "type": "CLIP",
          "slot_index": 1,
          "links": [11]
        },
        {
          "localized_name": "VAE",
          "name": "VAE",
          "type": "VAE",
          "slot_index": 2,
          "links": [8]
        }
      ],
      "properties": { "Node name for S&R": "CheckpointLoaderSimple" },
      "widgets_values": ["waiNSFWIllustrious_v150.safetensors"]
    },
    {
      "id": 11,
      "type": "CLIPSetLastLayer",
      "pos": [-260, 380],
      "size": [270, 60],
      "flags": {},
      "order": 2,
      "mode": 0,
      "inputs": [
        {
          "localized_name": "clip",
          "name": "clip",
          "type": "CLIP",
          "link": 11
        },
        {
          "localized_name": "stop_at_clip_layer",
          "name": "stop_at_clip_layer",
          "type": "INT",
          "widget": { "name": "stop_at_clip_layer" },
          "link": null
        }
      ],
      "outputs": [
        {
          "localized_name": "CLIP",
          "name": "CLIP",
          "type": "CLIP",
          "links": [12, 13]
        }
      ],
      "properties": { "Node name for S&R": "CLIPSetLastLayer" },
      "widgets_values": [-2]
    },
    {
      "id": 3,
      "type": "KSampler",
      "pos": [490, 240],
      "size": [320, 270],
      "flags": {},
      "order": 5,
      "mode": 0,
      "inputs": [
        {
          "localized_name": "model",
          "name": "model",
          "type": "MODEL",
          "link": 1
        },
        {
          "localized_name": "positive",
          "name": "positive",
          "type": "CONDITIONING",
          "link": 15
        },
        {
          "localized_name": "negative",
          "name": "negative",
          "type": "CONDITIONING",
          "link": 14
        },
        {
          "localized_name": "latent_image",
          "name": "latent_image",
          "type": "LATENT",
          "link": 22
        },
        {
          "localized_name": "seed",
          "name": "seed",
          "type": "INT",
          "widget": { "name": "seed" },
          "link": null
        },
        {
          "localized_name": "steps",
          "name": "steps",
          "type": "INT",
          "widget": { "name": "steps" },
          "link": null
        },
        {
          "localized_name": "cfg",
          "name": "cfg",
          "type": "FLOAT",
          "widget": { "name": "cfg" },
          "link": null
        },
        {
          "localized_name": "sampler_name",
          "name": "sampler_name",
          "type": "COMBO",
          "widget": { "name": "sampler_name" },
          "link": null
        },
        {
          "localized_name": "scheduler",
          "name": "scheduler",
          "type": "COMBO",
          "widget": { "name": "scheduler" },
          "link": null
        },
        {
          "localized_name": "denoise",
          "name": "denoise",
          "type": "FLOAT",
          "widget": { "name": "denoise" },
          "link": null
        }
      ],
      "outputs": [
        {
          "localized_name": "LATENT",
          "name": "LATENT",
          "type": "LATENT",
          "slot_index": 0,
          "links": [24]
        }
      ],
      "properties": { "Node name for S&R": "KSampler" },
      "widgets_values": [
        735067360423163,
        "randomize",
        20,
        7,
        "dpmpp_2m",
        "karras",
        1
      ]
    },
    {
      "id": 17,
      "type": "LatentUpscaleBy",
      "pos": [60, 100],
      "size": [270, 90],
      "flags": {},
      "order": 6,
      "mode": 0,
      "inputs": [
        {
          "localized_name": "samples",
          "name": "samples",
          "type": "LATENT",
          "link": 24
        },
        {
          "localized_name": "upscale_method",
          "name": "upscale_method",
          "type": "COMBO",
          "widget": { "name": "upscale_method" },
          "link": null
        },
        {
          "localized_name": "scale_by",
          "name": "scale_by",
          "type": "FLOAT",
          "widget": { "name": "scale_by" },
          "link": null
        }
      ],
      "outputs": [
        {
          "localized_name": "LATENT",
          "name": "LATENT",
          "type": "LATENT",
          "links": [25]
        }
      ],
      "properties": { "Node name for S&R": "LatentUpscaleBy" },
      "widgets_values": ["nearest-exact", 2]
    },
    {
      "id": 15,
      "type": "KSampler",
      "pos": [490, 550],
      "size": [320, 270],
      "flags": {},
      "order": 7,
      "mode": 0,
      "inputs": [
        {
          "localized_name": "model",
          "name": "model",
          "type": "MODEL",
          "link": 18
        },
        {
          "localized_name": "positive",
          "name": "positive",
          "type": "CONDITIONING",
          "link": 20
        },
        {
          "localized_name": "negative",
          "name": "negative",
          "type": "CONDITIONING",
          "link": 21
        },
        {
          "localized_name": "latent_image",
          "name": "latent_image",
          "type": "LATENT",
          "link": 25
        },
        {
          "localized_name": "seed",
          "name": "seed",
          "type": "INT",
          "widget": { "name": "seed" },
          "link": null
        },
        {
          "localized_name": "steps",
          "name": "steps",
          "type": "INT",
          "widget": { "name": "steps" },
          "link": null
        },
        {
          "localized_name": "cfg",
          "name": "cfg",
          "type": "FLOAT",
          "widget": { "name": "cfg" },
          "link": null
        },
        {
          "localized_name": "sampler_name",
          "name": "sampler_name",
          "type": "COMBO",
          "widget": { "name": "sampler_name" },
          "link": null
        },
        {
          "localized_name": "scheduler",
          "name": "scheduler",
          "type": "COMBO",
          "widget": { "name": "scheduler" },
          "link": null
        },
        {
          "localized_name": "denoise",
          "name": "denoise",
          "type": "FLOAT",
          "widget": { "name": "denoise" },
          "link": null
        }
      ],
      "outputs": [
        {
          "localized_name": "LATENT",
          "name": "LATENT",
          "type": "LATENT",
          "slot_index": 0,
          "links": [19]
        }
      ],
      "properties": { "Node name for S&R": "KSampler" },
      "widgets_values": [
        968711531111656,
        "randomize",
        20,
        7,
        "dpmpp_2m",
        "karras",
        0.7
      ]
    },
    {
      "id": 8,
      "type": "VAEDecode",
      "pos": [490, 140],
      "size": [210, 50],
      "flags": {},
      "order": 8,
      "mode": 0,
      "inputs": [
        {
          "localized_name": "samples",
          "name": "samples",
          "type": "LATENT",
          "link": 19
        },
        { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 8 }
      ],
      "outputs": [
        {
          "localized_name": "IMAGE",
          "name": "IMAGE",
          "type": "IMAGE",
          "slot_index": 0,
          "links": [9]
        }
      ],
      "properties": { "Node name for S&R": "VAEDecode" },
      "widgets_values": []
    },
    {
      "id": 9,
      "type": "SaveImage",
      "pos": [830, 140],
      "size": [260, 270],
      "flags": {},
      "order": 9,
      "mode": 0,
      "inputs": [
        {
          "localized_name": "images",
          "name": "images",
          "type": "IMAGE",
          "link": 9
        },
        {
          "localized_name": "filename_prefix",
          "name": "filename_prefix",
          "type": "STRING",
          "widget": { "name": "filename_prefix" },
          "link": null
        }
      ],
      "outputs": [],
      "properties": {},
      "widgets_values": ["ComfyUI"]
    },
    {
      "id": 14,
      "type": "CLIPTextEncode",
      "pos": [50, 460],
      "size": [430, 190],
      "flags": {},
      "order": 4,
      "mode": 0,
      "inputs": [
        {
          "localized_name": "clip",
          "name": "clip",
          "type": "CLIP",
          "link": 13
        },
        {
          "localized_name": "text",
          "name": "text",
          "type": "STRING",
          "widget": { "name": "text" },
          "link": null
        }
      ],
      "outputs": [
        {
          "localized_name": "CONDITIONING",
          "name": "CONDITIONING",
          "type": "CONDITIONING",
          "slot_index": 0,
          "links": [14, 21]
        }
      ],
      "properties": { "Node name for S&R": "CLIPTextEncode" },
      "widgets_values": [
        "nsfw, (worst quality, low quality:1.4), (depth of field, blurry, bokeh:1.5), (greyscale, monochrome:1.0), multiple views, text, title, logo, signature, (tooth, lip, nose, 3d, realistic:1.0), dutch angle,(cropped:1.4), text, title, signature, logo, (loli:1.2), school satchel, pink, school bag, school uniform, from behind"
      ]
    },
    {
      "id": 7,
      "type": "CLIPTextEncode",
      "pos": [50, 240],
      "size": [430, 190],
      "flags": {},
      "order": 3,
      "mode": 0,
      "inputs": [
        {
          "localized_name": "clip",
          "name": "clip",
          "type": "CLIP",
          "link": 12
        },
        {
          "localized_name": "text",
          "name": "text",
          "type": "STRING",
          "widget": { "name": "text" },
          "link": null
        }
      ],
      "outputs": [
        {
          "localized_name": "CONDITIONING",
          "name": "CONDITIONING",
          "type": "CONDITIONING",
          "slot_index": 0,
          "links": [15, 20]
        }
      ],
      "properties": { "Node name for S&R": "CLIPTextEncode" },
      "widgets_values": [
        "(illustration:1.0), masterpiece, best quality, 1girl, solo, happy, smile, theater, (perspective:1.3), from below, (looking away:1.2), (from side:1.0), (shot_hair:1.1), smile, bangs, shaggy, (brown hair:1.1), swept_bangs, thick_eyebrows, skin_fang, closed mouth, (purple eyes:1.1), gray (jacket:1.1), white shirt, glasses, (small breasts:1.1),\n"
      ]
    },
    {
      "id": 16,
      "type": "EmptyLatentImage",
      "pos": [-250, 90],
      "size": [270, 110],
      "flags": {},
      "order": 1,
      "mode": 0,
      "inputs": [
        {
          "localized_name": "width",
          "name": "width",
          "type": "INT",
          "widget": { "name": "width" },
          "link": null
        },
        {
          "localized_name": "height",
          "name": "height",
          "type": "INT",
          "widget": { "name": "height" },
          "link": null
        },
        {
          "localized_name": "batch_size",
          "name": "batch_size",
          "type": "INT",
          "widget": { "name": "batch_size" },
          "link": null
        }
      ],
      "outputs": [
        {
          "localized_name": "LATENT",
          "name": "LATENT",
          "type": "LATENT",
          "links": [22]
        }
      ],
      "properties": { "Node name for S&R": "EmptyLatentImage" },
      "widgets_values": [768, 768, 1]
    }
  ],
  "links": [
    [1, 4, 0, 3, 0, "MODEL"],
    [8, 4, 2, 8, 1, "VAE"],
    [9, 8, 0, 9, 0, "IMAGE"],
    [11, 4, 1, 11, 0, "CLIP"],
    [12, 11, 0, 7, 0, "CLIP"],
    [13, 11, 0, 14, 0, "CLIP"],
    [14, 14, 0, 3, 2, "CONDITIONING"],
    [15, 7, 0, 3, 1, "CONDITIONING"],
    [18, 4, 0, 15, 0, "MODEL"],
    [19, 15, 0, 8, 0, "LATENT"],
    [20, 7, 0, 15, 1, "CONDITIONING"],
    [21, 14, 0, 15, 2, "CONDITIONING"],
    [22, 16, 0, 3, 3, "LATENT"],
    [24, 3, 0, 17, 0, "LATENT"],
    [25, 17, 0, 15, 3, "LATENT"]
  ],
  "groups": [],
  "config": {},
  "extra": {
    "ds": {
      "scale": 1.1284491351375,
      "offset": [757.6336710071444, 145.5718113186996]
    }
  },
  "version": 0.4
}

生成された画像

reForgeと変わらない、ちゃんとした品質のものを出すことができた。

あとがき

reForgeと同じ品質で、更に早く出せることが分かったので、これは乗り換えができそうだ。

Civitaiで配布されているワークフローを見る感じ、同じ絵柄で別の構図を出すワークフローなどもあるようなので、非常に期待できる。

他にもForge Coupleのような機能もあり、全体的にreForgeより高機能で、使い方次第では何でもできそうな気配を感じるので、今回、無事ComfyUIに乗り換えられたのはとてもよかった。

今回行った調査にはClaude Opus 4.6を使い、前回の問題点の調査と、その対策方法を調べたが、非常に有益な情報が得られたので、こういったことをするにもLLMも必須の存在といえることがよく分かった。


  1. 日本語だと機能を探しづらいため