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. 日本語だと機能を探しづらいため

2026/04/09(木)宅配ボックスの誤配救助が有償化していた

投稿日:

置き配化によって発生した問題の続き。

先月、宅配ボックスに張り紙がしてあった。なんでも誤配した場合、配送業者に1.1万を請求するという内容だ。

私自身も他人の物を誤配された経験や、私の荷物が他人の家に届いた経験を持つので、誤配があるのは頷ける。

昨今EC市場は拡大の一途を辿り、通販を利用している人が圧倒的に増えていることは、路上にいる配送車両の荷台やゴミ捨て場の段ボールを見てもよくわかる。Amazon・ZOZO・楽天というのが非常に多い。

つまり需要が増えた結果、それに応じて単純に誤配が増えているというのは考えられることだ。

また他にもある。AmazonはTMG便が始まったころあたりから、配送品質が悪いことで知られているが、配送員は安い給料で休む暇もなく配達をしなければならないという話があり、これも一因だと考えている。

何故なら指定時間までに配達しないといけないという重圧がもしあるとすれば、配達さえ済ませればいいのだ。正しい配達先に届けるインセンティブがなければ、それっぽいところに届ければいい。すると誤配が増える、その結果さっきの写真のようなことが起きるのだろう。

これは別にAmazonに限ったことではなくUberEatsでも聞くし、いい方は悪いが素人による配達が増えているところにも大きいのだろう。

街中を見れば軽バンや、聞いたこともない配送業者、業者名すら書いてないトラックから佐川の制服を着た人が出てきていることがあり、一抹の不安を感じるし、UberEatsの配達員なんかまったくの素人なのは疑いの余地もない。

こういった業界では5Sと呼ばれる整理・整頓・清掃・清潔・躾が重要だと考えているが、恐らくこれらが抜けており、結果として品質が落ちているのではないかと感じる。

例えばヤマトや佐川の正規のトラックであれば荷台の中は綺麗に積まれており、車体やキャビンの中は清潔だ。恐らく所作も磨かれており一挙一動の無駄が少ないはずだろう。

一方で素人の軽バンはどうだろう?私が見ている限りキャビンの中は見るからに汚く、謎のレシートが崩れていたり、荷室の荷物も崩壊しており、どう考えても効率的に取り出せない。仮に配送物の取り出しにかかる時間に倍の差があれば、それは時間通りに配送もできないし、できなければ雑になっても仕方がないだろう。

ということを、張り紙を見てなんとなく思ったので、残しておく。

2026/04/07(火)旧記事の更新

更新日:
投稿日:

古い記事をいくつか更新したので、その記録。

  • GitHubにGPGで署名コミットする
    • Ubuntu側でGPGキーを作る場合の手順を追加
    • トラブルシューティングにInappropriate ioctl for deviceが出る場合を追記
  • MSYS2のセットアップメモ
    • msys2-x86_64-20260322ベースの内容に更新
      • 不要になったコマンドを削減し、セットアップコマンドが半減した
    • 呼び出しを簡略化する方法を追記
    • 外部連携
      • VSCodeとの連携方法を追記
    • msys2_shell.cmdのCLI Optionsの意味合い
      • 動作機序を追記し、それ以外もより詳細にした
  • Windows 11でパスフレーズ付きの公開鍵認証SFTPをマウントする
    • 設定方法について設定ウィザードを読めとしか書いておらず、具体性がなかったため具体的に書き直した
    • その他、自分でやっていて思った不安要素も具体的に書き出した
  • GitHubのリポジトリをSSH認証経由で扱えるようにする
    • 鍵束へのSSH鍵の登録セクションを追記
    • トラブルシューティングを追加
      • Permission Denied (publickey)の時のトラブル解消法を追記

あとがき

adiaryは履歴が残らないのがネックなのとブログの性質上MECEになりづらいので、この手の内容はWikiにしたほうがいい気がしているのと、Markdown版Pukiwikiが欲しいがないので、作りたいなぁとか薄っすら思っている。

但しWiki的側面については、adiaryのWiki機能でもいいかもしれないが、どのみち履歴は残らないので、自分の需要を満たすCMSの新製が頭によぎる。

2026/04/06(月)特に推しはいないけどVTuberを見てる話

更新日:
投稿日:

この記事には大量のYoutube動画が埋め込んであるので読み込みに時間がかかります。

これまで微塵にも記事にした記憶がないが、最近ちょいちょい見てるので記事にしてみる。

VTuberと私の馴れ初め

キズナアイが出たときに存在を知り、月ノ美兎が出てきたあたりからちょいちょい見るようになり、事務所所属に飽きてきたころあたりで個人勢である、おめがシスターズ(おめシス)や、もちひよこも見るようになった。そしてその後はご当地VTuberを見てみようというので津軽ねぷこや宝灯桃汁を見たりしていた。神戸が好きなので九十九みなも見たのだが、神戸成分が薄すぎてあまり見なかった。

とはいえ、動画を見るのがさほど好きでもなかったのでTwitterをしてた頃にフォローしてTLに出てきたらちょいちょい見てた程度な感じだ。

それもすぐに飽きて、VTuberとは長らく疎遠だった。恐らくここ4~5年くらいは年に片手で数えられる程度しか見ていなかったと思う。

しかしVTuberとの関わりが皆無だったわけではなく、星街すいせいやヒメヒナ、天神子兎音といったVTuberの曲はちょいちょい買っていた。VTuberだからというより、単に曲が好きなので買っていたので、VTuberかどうかは割とどうでもよかったし、実際、配信は見ていなかった。

参考までにLast.fmでの再生数88,457のうち、星街すいせいが3,341、ヒメヒナが1,313、天神子兎音が340を占めており、合計では5.65%となり、VTuberというカテゴリで見ると大きな存在感がある。

また星街すいせいはアーティスト別の累計再生数ではトップ10に食い込んでおり、私の中ではかなり大きな存在だ。それも、かつての水樹奈々やRoseliaに近い存在に近づいている。何故なら、かつての水樹奈々やRoselia同様に、デモを聴かずとも、新曲が出たらそれだけで指名買いしているからだ。これは水樹奈々やRoseliaに次ぐ三番目の存在であり、私のリスニング史では大きな出来事になっている。

ここ最近の転換期の切欠となった、まいどありーな

前述したように、ここ4~5年くらいはまともに見ていなかったのだが、今年の二月に大阪ガススピードテストまいどありーなに出会ってからは、見る頻度が劇的に増えたように思う。といっても、これまでと比較した場合の話なので、そこまでがっつり見ているわけではないが…。

まいどありーなのいいところは関西が軸にあり、結構神戸に来てくれること、配信の尺が10~15分と比較的短いこと、そして配信者が関西人なので、喋りに親しみやすさがあることだ。二人でキャラデザが違うのも面白いところだ。個人的には二人で掛け合いをしているところが一番好きだが、ピンのキャラ的には内江良いよなが好きだ。安条屋りあは京都人だけあって?お堅いというか…w

二月に一度だけメンバーシップに140円払ったものの、三月は更新せずに終えているが、ちょいちょい見てはいる。

あずきち

ホロライブ0期生のAZKiについて。

ぴょんぴょん飛び跳ねたり唸ってたりするようなキャラ感があって、ホロJPの中では今のところ一番好きなタレントだ。

あずきちの配信を見るようになったきっかけは香川県警の交通規制アンバサダーに就任し、一日署長として交通ルール変更をPRすることになったところが大きい。Mastodonのフォロワーである三宮エリー氏の影響も少なくはない(よく推しているため)

2026年9月1日から生活道路における最高速度が60km/hから30km/hに下がるというのを面白くもドキッとさせられ、記憶によく残る形で表現できていてすごくいいと思う。

あずきちはGeoGuessr配信が有名らしく、確かに見ていてもぴょんぴょん飛び跳ねたり唸ってたりするようなキャラ感があってすごくいい。

他だと最近はホロライブEN・ホロライブID、更にはホロライブの外までを見ることもしばしばあるので、以下に書き連ねていく。

クロニー

ホロライブEnglish、Councilのオーロ・クロニーについて。

ホロライブENを見る切欠になったのは、恐らくこの動画だ。この動画の尾丸ポルカとオーロ・クロニーの掛け合いが最高に良くって、興味を惹かれたところが大きい。最初はクロニーの配信を見ていたが、徐々にラオーラ・パンテーラにシフトしてきた。私の中でのVTuberブームというのは恐ろしく、合わないなと思えば三日と持たない。いやでもそんなもんか?

ラオーラ

ホロライブEnglish、Justiceのラオーラ・パンテーラについて

ラオーラとはクロニーとの合同配信の動画の切り抜きで出会い、少しの間見ていた。クロニー同様、三日くらいで見なくなってしまった。

ベーちゃん

ホロライブEnglish、Councilのハコス・ベールズについて。

そうこうしているうちにハコス・ベールズに出会い、日本語をしゃべるホロライブENに興味が出てきた。ベーちゃんは日本語の発音が流暢でなかなか面白い。

五日くらいは見たと思うが、最近はあまり興味がなくなってきている。日本語が上手いことくらいしか私の中では感じられることがなかった。キャラが立っていないというか…。

ただ、日本語を喋るVTuberという概念を教えてくれた存在であるので、印象深くはある。

カリオペ

ホロライブEnglish、Mythの森カリオペについて。

森カリオペは私が知るホロライブ勢の中でも非常にキャラが濃いと思う。Fワードの女王といっても過言でもない口の悪さがあるが、本当はちゃんと礼儀正しく、他人の配信で暴れる別のメンバーを諭すシーンもあるほどだ。

ユーザーローカルが発表しているホロライブプロダクション(全世界)のVTuber チャンネル登録者数でも上位10位に入っており、この中では唯一のENでもある。

またホロライブ公式ではENの先頭に位置していることから最古参であると思われる。日本在住らしく日本語を話すこともできるが、後述するイナやアイリス、そして前述したベーちゃんと比べると大分訛りが残り、リーディングも弱いのも面白い。

ベーちゃんの配信の流れから、Youtubeのレコメンド動画で東京を紹介する森カリオペに出会い、その飄々さを好きになった。

例えばこぼ・かなえるに間違った言葉を嘘をついて教えてしまい(ガルクラの桃香と仁菜みたいだw)頭を抱えたりだとか

暴言をさも奇麗な言葉に見せかけて教える英語の先生を演じたりだとか

カリオペに関しては、この辺りの発狂動画も結構好きだ。

かと思えば、大阪関西万博の開幕式の歌唱も務めたようで、そのギャップに驚く。

アイリス

ホロライブEnglish、Project: HOPEのIRySについて。

名前のスペルがIrisでなく、IRySで、それもyだけ小文字なのが特徴的だ。3Dモデルもお姉さんらしさがある割に可愛く、個人的にはホロライブタレントの中ではIRySがビジュアル的に一番好きだ。

「ハイRyS!私はIRyS!」という挨拶もすごくいい。カリオペ同様に日本在住らしいが、私はその配信を見ていないので、本当かどうかは知らない。カリオペが日本に住んでいることは配信で見たので知ってる。

ベーちゃん同様にアイリスも日本語が流暢で見ていて面白い。アイリスは純粋にかわいいのがいい。萌えキャラだ。

3Dモデル持ちのVTuberの中では一番見た目が好みなのと、それでいてトークが面白く、かわいいので癒される。

カタカナ英語に対して無限に「It's Japanese、絶対日本人じゃん!」とか言いながらちゃんとカタカナ英語で発音するのもいい。

更に日本とアメリカのコメの差に気づくところもいい。

ベーちゃんとアイリスの壊れた掛け合いもいい。

MVもあり、アイリスの可愛さをこれでもかというくらい眺めていられる。パラパラ踊ってたりハチロクに乗っていたり、見どころが多い。背景や表情が一々よくてたまらない。レースがやたら安っぽいのもいい。

アイリスは過去の配信で86に乗りたかったらしいので、今回夢がかなってよかったと思う。また、この配信内で言及されている楽曲の権利についてだが、邦楽は権利取得がしやすく、洋楽は難しいという話がされているのも興味深い。確かこれはカリオペやベーちゃんもどっかの配信で言っていた気がするが、恐らく邦楽の権利取得が容易なのはJASRACの功績だと思われる。

イナ

ホロライブEnglish、Mythの一伊那尓栖について。

一伊那尓栖という名前がまたよく、「にのまえいなにす」が読みなのだが、一は二の前なので「にのまえ」ということになっていると思われる。この名前のセンスがいいと思う。

実は登場した時から認知はしていたが、配信は見ていなかった。認知した切欠は黒星紅白がキャラデザをしたという発表を見たことによる。私は黒星紅白のファンなのだ。

自己紹介動画で穏やかで流暢な日本語で始まるのが驚愕なのがイナだ。

しかも、まず自分の名前を言うところで、日本語で言うところだけ「寿限無寿限無、五劫海砂利、水魚の水行末つ、雲来末風来末、食う寝るところに住むところ、やぶらこうじのぶらこうじ、パイポパイポパイポのシューリンガン、シューリンガンのグーリンダイ、グーリンダイのポンポコピーのポンポコナの長久命ちょうきゅうめいの長助」と寿限無をフルで言ってくるのがいい。

イナは私の中では間違いなくホロENの中で一番愛くるしくかわいいVTuberだ。この動画では無限の愛くるしさを見ることができる。

アイリスとの掛け合いも最高だ。めちゃくちゃ日本語が出てるのもいい。

ゼータ

ホロライブインドネシアのベスティア・ゼータについて。

ここまでホロライブENが続いたが、ここからはホロライブIDになってくる。

まずゼータのキャラデザを見たとき、これはヤバいな…となった。銀髪シャギーロング、釣り目、細い体に不釣り合いな下半身、がっちりした膝、アシンメトリーなファッションというので、全力で刺さった。

日本語については初回配信と比べると上達しており、発音が滑らかになり、可愛さが増している。

ゼータは声が可愛くて、キャラデザもクールなのがいい。何よりそれで暴言を吐いてくれるのがいい。

気持ち悪い、変態、ダメ人間などと言ってくれる素晴らしいシーン。煽らせると声の可愛さと相成って破壊力が強いのがゼータの特徴だ。

インドネシア語を喋るゼータと日本語を喋るJPの掛け合いも面白い()

アーニャ

ホロライブインドネシアのアーニャ・メルフィッサについて。

キャラデザは好みではないが、日本オタクっぽいキャラ付けがよい。ただ最近はそこまで見てないかもしれない。ベーちゃん枠の可能性がある。

開幕から日本語がうまいアーニャ。アイリスと並びJP扱いされる謎のID枠。

アイリスをJP扱いして煽るアーニャもいい。

JPなのかIDなのかもはやわからないアーニャ。

イオフィ

ホロライブインドネシアのアイラニ・イオフィフティーンについて。

実はイオフィも日本語を喋れるのとペンキまみれの姿が好きだ。日本語力についてはツッコミの切れの良さや対応力の高さもあり、ある種アーニャ並みといえるだろう。

例えばこの動画では「イオフィの指輪」というワードから「指輪」がインドネシア語でチンチンであることに即座に気づき、ちゃんと突っ込むなど、かなり強い。

箸とどんぶりの絵に「はしらない」と言書いているビラを見て爆笑するところもいい。

チンチンつながりだとこの動画もツッコミの切れがいい。

ホロライブDEV_IS、ReGLOSSの音乃瀬奏。ここまでホロライブEN、IDと来たが、次はDEV_ISという謎のやつ。

音乃瀬奏はENやID枠ではないが、実は外国人である。

キャラデザは個人的に刺さる要素が少ないのだが、クソガキっぽさがあるのが好き。

未来永劫ナメプして人を煽り散らかしてるとこや、日本のことをジャパンと敢えて言うところとかが好き。奏は何かにつけて「ジャパンは~」とか「ジャパン人は~」とか、「ジャパン」というワードを多用するのだ。

この日本の温かいトイレの便座について熱く語り、リスナーに対し「あんたたちは恵まれた環境で~」とかいう話しっぷりがたまらない。そして「ジャパン」「ジャパン人」というトークも登場する、

シークして前後を見ればわかると思うが、基本的に煽り系のクソガキキャラである。

しかし韓国のコンビニより日本のコンビニが充実していてスイーツなんて韓国のコンビニにないというのは驚いた。動画の内容は全く関係ない話になるが、韓国は日本のような過密都市なのにフードデリバリーの普及率が高いといわれるのも頷ける話だ。要するに日本は便利すぎてフードデリバリーが普及しないのだろう、とか感慨深い思いに浸っていた。動画と一切関係ない話だが…w

自己紹介動画は最初からおふざけ全開で、自己紹介のフェーズで使える言語について話すときも日本語が独学で日常会話レベル、英語は義務教育された雑魚日常会話レベル、韓国語は独学でプロに近いレベル…チンアナ語も独学でプロに近いレベルなどとあり、突っ込みどころが多い。プロとは…w

動画のタイトルが「あぁ~!奏の音ォ〜!!」であることからしても、おふざけ全開キャラということがよくわかる。

日本語はかなり流暢で、他の外国人をだませるくらいには日本語が上手い。ぶっちゃけ日本人といわれても何の違和感もない。

ただまぁこれは外国人で一括りにした場合の感想で、単に奏は韓国人なので日本語が上手いということになると、さほど違和感はない。とはいえ、韓国生まれの韓国育ちでここまで流暢なのは結構すごいと思う。

私はこれまでの人生経験で3歳から日本語を独学して今は韓国の出版社で日本のラノベの翻訳業をしてるとか、日本の大学で日本語を勉強したという韓国人と話したことがあるが、そんな人でも訛りが結構強かったので、日本生まれの韓国人でないと、これは中々難しいことだとは思う。

ホロライブ海外勢の中では常に日本語を喋っているので希少な人物ではある。

逆に日本人との差が分からない次元なのでごく短期間見るにとどまった感じはある。

リコ

ぶいすぽっ!ENのソラリ リコについて。ソラリ リコはぶいすぽっ!の所属で、ここまでホロライブできた流れとは変わってくる。

ぶいすぽといえば、ドスパラのお店に飾ってあるアレとかで見たことがあるやつだ。間違いなくゲーム配信がメインだろうと思ったら、リコの場合は日本語学習配信もかなり多く、これがいいのだ。

基本的に切り抜きだとこんな感じの日本語学習動画が多いが、どれも基本面白いし、徐々に発音や文法が上達していくのを眺めていくのは楽しい。

個人的に日本語学習系の配信だとリコの配信が一番好きだ。まず顔と声がいいし、発音もいい。

あと本家より切り抜きのほうが再生数が多い気がするが、日本語字幕がついており、本家より分かり易いことと、需要が日本人に偏っているかもしれない。

日本語学習系は、他で言うとセシリア・イマーグリーンの配信も悪くなかったのだが、そこまでシリーズ化されなかったのと、本人もそこまで学ぶ気がないと話していたのですぐ飽きてしまった。ホロIDとかでも簡単な学習系はあったと思うが、恐らく一番力が入っているのはリコの配信だろう。

あとがき

まぁなんというか以前は個人勢やにじさんじが私の中でのVTuberだったのが、最近はホロライブ、それも特に海外勢に寄ってきているのと、ぶいすぽっ!ENのリコもありだなという風に変遷が起きている感じである。

とはいえ、動画視聴は時間が溶けるコンテンツでもあるので、中々そこまでべったりともいかないのだが、切り抜きは尺も短く、翻訳も入ってたりするので、隙間時間などに見る分には丁度いいとも思う。