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/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/03/09(月)Inkscapeで名刺を作ったときのログ

更新日:
投稿日:

一般的な日本の名刺(縦向き)を作った時の作業ログ。

確認環境

Windows 11 Pro環境下の、以下のバージョンで確認。

  • Inkscape 1.3.2 (091e20e, 2023-11-25, custom)
  • Inkscape 1.4.3 (0d15f75, 2025-12-25)

手順

1. Inkscapeを起動し、テンプレートから名刺を選ぶ

印刷→名刺を選択。

サイズ選択ダイアログが出るので91x55mm (日本)を選ぶ。

2. 制作画面に遷移し、基本設定を行う

制作画面に遷移したら、ファイル→ドキュメントのプロパティを開く。

枠→影を表示をOFFにし、方向を縦にする。

3. 外枠を作る

矩形ツールで用紙ぴったりの矩形を作る。

矩形を選択したままメニューからオブジェクトを開き、オブジェクトをガイドにする。

これによって外枠に背景などを吸着できる状態になる。

4. 余白を作る

一般的に紙の縁スレスレまで文字を入れないので余白を作る。

矩形ツールで矩形を書き、外周5mmを余白にするため、上部のバーから矩形のサイズを50x86mmにし、右の整列と配置からページ基準で上下左右中央寄せに配置する。

外枠を作った時と同様に、矩形を選択したままメニューからオブジェクトを開き、オブジェクトをガイドにする。

ここまですると作業ベースができる。

5. 名刺本体を作る

ここまで出来たら後は名刺本体を作るだけなのでいい感じに作っていけばよい。

6. 名刺を印刷できる状態にする

右パネルのエクスポートタブを開き、PDFに設定する。

歯車ボタンをクリックし、テキストをパスに変換にチェックを入れる。

エクスポートボタンを押すとPDFが出てくるので、これを印刷するなり、名刺屋に持っていけばよい。

7. 作業ファイルの保存

作業ファイルはInkscape SVGとして保存できるが、一般的にブラウザが扱うSVGとの互換性はないため、ブラウザで開くと崩れることがある。

またInkspace上のレイヤーデータなどが保持されていて極めて冗長であるため、Web用に使う場合、中身を適当にいじってゴミを消したほうが良い。

トラブルシュート

絵文字に色がつかない

Inkscapeでは絵文字の色はサポートされていないようなので、SVGの絵文字を入手する必要がある。

絵文字が化けてもいいならパスに変換せずにPDFとして出せば色が付くが、この場合は絵文字の図柄は環境依存になるため、例えば名刺屋がmacの場合、見た目が変わってしまう。

Windowsの絵文字を使う方法

Windows標準の絵文字を使う場合、Character Map UWPというツールを使うことで取り出すことができる。

まずはインストールし、起動したら、フォント一覧からSegoe UI Emojiを選び文字コードで検索するなどし、絵文字を見つける。

次に右下の保存ボタンから「Save as SVG Image」の「Colored Glyph」を選ぶとSVGで出力される。

Googleの絵文字を使う方法

noto-emojiから文字コードでSVGを当てて拾ってくれば取得できる。

SVGの拾い方としてはLet's EMOJI辺りで使いたい絵文字を探してきて、文字コードで引っ掛けたら簡単に見つかる。

この二つの絵文字はライセンス上、ノークレジットで印刷利用が可能

フォントなのでライセンスが心配だが、noto-emojiであれば特に何も考えなくてよい。これは、noto-emojiがSIL Open Font License, version 1.1を採用しているため、クレジットの表記が不要であるためだ。

Segoe UI Emojiの場合も印刷に使う分には問題なさそうに見えるので大丈夫だろう。Claude Opus 4.6も大丈夫だと言っていたので、きっと大丈夫なはずだ。(まさかMSのライセンス条項でハルシネーションは起こさないだろう)

Microsoft supplied font. You may use this font to create, display and print content as permitted by the license terms, or terms of use, of the Microsoft product, service or content in which this font was included. You may only (i) embed this font in content as permitted by the embedding restrictions included in this font; and (ii) temporarily download this font to a printer or other output device to help print content. Any other use is prohibited.

openmojitwemojiはCC BY-SA 4.0やMIT、LGPL v3.0なので、クレジット表記が必須であり、名刺には向かないと思う。少なくともopenmojiにはクレジットの記載が明確に求められている

macOSでPDFを開いたときに絵文字の見た目が変わる

絵文字を文字ではなく、SVGとして入れれば解決する。

文字として絵文字を入れている場合に、Windows環境ではフォント埋め込みでPDF出力すると色付きの絵文字が出るので、一見これでよさそうに見えるが、macOSで開くと絵文字の形が変わってしまうので、SVGで埋め込む必要がある。

文字としての絵文字を「テキストをパスに変換」で出力すると白黒になるため、絵文字を本来の形かつ、色付きにしたい場合はSVGファイルを埋め込むのが最も無難と思われる。

どうしてもWindowsの絵文字を使いたい場合、グリフを抜いて自分で着色するか、模写するかになると思う。手軽な手段では超拡大したスクショを撮って縮小してごまかすのが無難だとは思うが、印刷時の品質は微妙になると思う。

ラスタイメージに角丸を付けたい

Inkscapeでオブジェクトをクリッピングする(角丸を付けたり、切り抜く)を参照のこと。

あとがき

今回はこれまでHTMLで作っていた名刺を、ある程度ちゃんとした環境で作ってみようということでInkscapeを使った挑戦をしてみたが、結果としてまぁまぁよかった気はする。まだ入稿してないのでアレだが…。

内容としては、今使っている個人用の名刺にはXやGitHubのこと、自分のスキルを書いているのだが、Xを使わなくなったことや、個人事業主でもないのにスキルを書いてもなぁ…?という部分や、名前やアイコンをもう少し大きくして目立たせたいなどがあり、今回作り直すことにした。

結果として、前よりは何が言いたいのかがわかる内容になったと思うし、名前とアイコンの主張度も上げられたと思う。そして今回はQRコードの変更もしたため、こないだ作ったQRコードジェネレーターも早速活躍してくれてよかった。というか、こいつはそのために作った部分が大きい。

これまでの名刺 今回作った名刺
今までの名刺
今回作った名刺

没にした名刺

おまけで、絵文字選定で最初Windowsの絵文字を使う方法が見つけられず、noto-emojiで作った時の名刺も没案として残しておく。

2026/03/09(月)Inkscapeでオブジェクトをクリッピングする(角丸を付けたり、切り抜く)

投稿日:

この記事ではラスタ画像に角丸を付ける方法について説明するが、切り抜くということであれば、その他も多分同じ要領でできる。

確認環境

Windows 11 Pro環境下の、以下のバージョンで確認。

  • Inkscape 1.3.2 (091e20e, 2023-11-25, custom)
  • Inkscape 1.4.3 (0d15f75, 2025-12-25)

やり方

  1. 切り抜きたい画像を配置する
  2. 切り抜きたい画像と同一サイズの矩形オブジェクトを重ねて配置する
  3. 矩形ツール状態で矩形オブジェクトを選択し、垂直半径を入力して角丸を付ける
  4. メニューからオブジェクト→クリップを設定
  5. 画像がクリッピングされる

元に戻す場合は、クリップを解除すれば元に戻る。

関連記事

2026/02/27(金)Edgeのバージョンをロールバックして固定する方法

更新日:
投稿日:

Edgeのバージョンが145.0.3800.70になったらダウンロード履歴からファイルをD&Dできなくなり、とても不便だったのでEdgeのバージョンを145.0.3800.65にロールバックして固定することにした。

その時にやったことを残しておく。

やったこと

手順を間違えるとEdgeをアンインストールする羽目になるので絶対に前後させてはいけない。もしも前後させるとEdgeの設定全部やり直しになる。

事前に拡張機能も含め、Edgeの全設定のバックアップをしておくとよいだろう。具体的にはプロファイルフォルダを丸ごとどっかにバックアップしておくとよいと思われる。

具体的には%USERPROFILE%\AppData\Local\Microsoft\Edge\User DataDefaultとかProfile 1みたいなフォルダに設定が格納されているので、これをバックアップしてやればよい筈だが、検証はしていない。

1. Edgeのアップデートができないようにファイアーウォールを構成するで阻止する

次のコマンドを管理者権限のコマンドプロンプトに流す

netsh advfirewall firewall add rule name="Disable Edge Updates" dir=out action=block program="C:\Program Files (x86)\Microsoft\EdgeUpdate\MicrosoftEdgeUpdate.exe"

2. 古いバージョンのEdgeを入手してインストールする

  1. ビジネス向け Microsoft Edge のダウンロードとデプロイの画面中ほどにある「古いバージョンの Edge をお探しですか?」から、ロールバックしたいバージョンを選択し、ダウンロードする
  2. ダウンロードしたインストーラーに対し、次のコマンドを管理者権限のコマンドプロンプトに流す
    msiexec /I MicrosoftEdgeEnterpriseX64.msi ALLOWDOWNGRADE=1
    

トラブルシューティング

手順を間違えてしまいEdgeを最新化してしまった

次のコマンドを管理者権限のコマンドプロンプトに流せば再インストールできるようになるはずだが、Edgeそのものもアインインストールされてしまい設定がすべて吹き飛ぶ可能性がある。特に拡張機能の複雑な設定が吹き飛ぶと致命的なので絶対にバックアップしておこう。

msiexec /x MicrosoftEdgeEnterpriseX64.msi

あとがき

Microsoft公式のEdge の更新制御には、レジストリのHKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\EdgeUpdateにREG_DWORD値としてUpdateDefaultを追加し、値として0を設定することでアップデートされなくなるとあったが、私の場合これは機能しなかった。

恐らくEdgeのアップデートを止める唯一の方法はアップデーターを殺すことである。

Edge の更新の流れについてを読む限り、Windows UpdateでEdgeが更新されることは基本的にないらしいので、安心できる。

当たり前だがこのまま放置していると、セキュリティ面や履歴の同期の仕様変更による機能不全などで、そのうち使えなくなる日が来そうなので、その時はまた考えたい。

2026-03-01追記

Microsoft Edge の既知の問題 | Microsoft Learnによると、ダウンロード履歴からファイルをD&Dできないのはバグらしいので、そのうち治るかも?