コードが読めなくても大丈夫。AIと作るブックマーク整理スクリプト

👋 はじめに

いつも記事を見ていただいて、ありがとうございます。

私は音声パソコンを使っている全盲のクリエイターです。キーボードだけでパソコンを操作していると、どうしても「あのサイト、どこだっけ?」と探す時間がかかってしまうんですよね。

Chromeのブックマークバーは便利なんですが、たくさん登録していると目的のサイトにたどり着くまでが一苦労。スクリーンリーダーで一つずつ読み上げていくのは、正直しんどいときもあります。

そこで今回は、ブックマークをデスクトップにまとめて書き出すスクリプトを作ってみました。これなら、エクスプローラでファイル名を読み上げながらサイトを探せます。見える方にとっても、ブックマークのバックアップや整理に役立つと思いますので、ぜひ最後まで読んでいただけるとうれしいです。


📝 この記事で得られること

  • Chromeのブックマークがどこに保存されているか分かる

  • ブックマークを.urlファイル(Internet Explorer時代の「お気に入り」と同じ形式)として一括出力できる

  • デスクトップからダブルクリックでサイトを開けるようになる

  • スクリーンリーダーでファイル名を読み上げて目的のサイトを探せる

  • PowerShellスクリプトの基本的な仕組みが理解できる

  • 自分でカスタマイズするための知識が身につく

  • AIチャットを使って同様のスクリプトを作る方法が分かる


🚀 使い方(かんたん3ステップ)

  1. 2つのファイル(Chrome_bookmarks.ps1とget.bat)を同じフォルダに保存

  2. get.batをダブルクリック

  3. デスクトップに「Chrome_Bookmarks」フォルダが作成される

これだけでブックマークが.urlファイルとして一覧化されます。


💻 スクリプトの全体像

実行用バッチファイル(get.bat)

powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%~dp0Chrome_bookmarks.ps1"

PowerShellの実行ポリシーを一時的にBypassして、同じフォルダ内のスクリプトを実行します。

メインスクリプト(Chrome_bookmarks.ps1)

$OutRoot = Join-Path ([Environment]::GetFolderPath("Desktop")) "Chrome_Bookmarks"
$BookmarkFile = Join-Path $env:LOCALAPPDATA "Google\Chrome\User Data\Default\Bookmarks"

New-Item -ItemType Directory -Force -Path $OutRoot | Out-Null

function Sanitize-FileName([string]$name) {
  $s = [string]$name
  $s = $s -replace '[\\/:*?"<>|]', ' '
  $s = $s -replace '\s+', ' '
  $s = $s.Trim()
  $s = $s.TrimEnd('.', ' ')
  if ([string]::IsNullOrWhiteSpace($s)) { $s = "NoTitle" }
  $upper = $s.ToUpperInvariant()
  $reserved = @("CON","PRN","AUX","NUL","COM1","COM2","COM3","COM4","COM5","COM6","COM7","COM8","COM9","LPT1","LPT2","LPT3","LPT4","LPT5","LPT6","LPT7","LPT8","LPT9")
  if ($reserved -contains $upper) { $s = "_" + $s }
  $maxLen = 120
  if ($s.Length -gt $maxLen) { $s = $s.Substring(0, $maxLen).TrimEnd('.', ' ') }
  $s
}

function New-UrlShortcut([string]$path, [string]$url) {
  $content = "[InternetShortcut]`r`nURL=$url`r`n"
  [System.IO.File]::WriteAllText($path, $content, [System.Text.Encoding]::ASCII)
}

function Walk($node) {
  if ($null -eq $node) { return }
  if ($node.PSObject.Properties.Name -contains "children") {
    foreach ($c in $node.children) { Walk $c }
    return
  }
  if ($node.PSObject.Properties.Name -contains "url") {
    $script:seq++
    $safe = Sanitize-FileName ([string]$node.name)
    $filename = "{0:D5}_{1}.url" -f $script:seq, $safe
    $fullpath = Join-Path $OutRoot $filename
    New-UrlShortcut -path $fullpath -url ([string]$node.url)
  }
}

if (!(Test-Path $BookmarkFile)) {
  Write-Host "Bookmarks not found: $BookmarkFile"
  exit 1
}

Get-ChildItem -Path $OutRoot -File -ErrorAction SilentlyContinue | Remove-Item -Force -ErrorAction SilentlyContinue

$script:seq = 0
$json = Get-Content -Path $BookmarkFile -Raw -Encoding UTF8 | ConvertFrom-Json
foreach ($rootName in $json.roots.PSObject.Properties.Name) {
  Walk $json.roots.$rootName
}

Write-Host "Done"

🔍 コード解説(ステップバイステップ)

ステップ1:出力先とブックマークの場所を指定

$OutRoot = Join-Path ([Environment]::GetFolderPath("Desktop")) "Chrome_Bookmarks"
$BookmarkFile = Join-Path $env:LOCALAPPDATA "Google\Chrome\User Data\Default\Bookmarks"

デスクトップに「Chrome_Bookmarks」フォルダを作成する場所と、Chromeのブックマークファイル(JSON形式)の場所を指定しています。

ステップ2:出力フォルダを作成

New-Item -ItemType Directory -Force -Path $OutRoot | Out-Null

フォルダがなければ作成、あればそのまま使用します。

ステップ3:ファイル名を安全にする関数

Windowsのファイル名に使えない文字(\ / : * ? " < > |)をスペースに置換します。また、CON、PRNなどWindowsの予約語は先頭に「_」を付けて回避し、長すぎるファイル名は120文字で切り詰めます。

ちなみに、CONやPRN、LPT1などはMS-DOS時代からの「予約デバイス名」で、プリンターやシリアルポートを指す名前です。ブックマークとは関係なさそうですが、たまたま同じ名前のサイトがあるとエラーになるため、念のための対策として入れています。

ステップ4:.urlショートカットを作成する関数

.urlファイルの中身はシンプルなテキスト形式です。[InternetShortcut]とURL=の2行だけで動作します。

ステップ5:ブックマークを再帰的に処理する関数

フォルダなら中身を再帰的に処理し、ブックマークなら.urlファイルを出力します。ファイル名は「00001_サイト名.url」の連番形式です。

ステップ6:メイン処理

ブックマークファイルが存在するか確認し、既存の出力ファイルをクリアしてから、JSONを読み込んでブックマークを順番に処理します。


🔒 安全性について

このスクリプトは以下の点で安全です。

  • 読み取り専用:Bookmarksファイルは読み取りのみで変更しません

  • 書き込み先限定:デスクトップの専用フォルダ内にのみ書き込みます

  • 外部通信なし:インターネットへの接続は行いません

  • 危険なコマンドなし:Invoke-Expressionなどの危険なコマンドは使用していません


🤖 AIチャットで自分で作りたい方へ

コードを直接コピーするのが不安な方は、以下のプロンプトをAIチャット(ChatGPT、Claude、Geminiなど)に渡してください。自分の環境に合わせたスクリプトを生成してもらえます。

以下の要件でPowerShellスクリプトを作成してください。

【目的】
Chromeのブックマークをデスクトップに.urlファイルとして一括出力する

【環境】
- Windows 11(Windows 10でも動作すること)
- Google Chrome(デフォルトプロファイル)

【入力】
- Chromeのブックマークファイル(JSON形式)
- 場所: %LOCALAPPDATA%\Google\Chrome\User Data\Default\Bookmarks

【出力】
- デスクトップに「Chrome_Bookmarks」フォルダを作成
- 各ブックマークを.urlファイル(インターネットショートカット)として出力
- ファイル名形式: 00001_サイト名.url(5桁連番)

【必須要件】
1. ファイル名のサニタイズ
   - Windowsで使えない文字(\ / : * ? " < > |)を除去または置換
   - 連続する空白を1つにまとめる
   - Windowsの予約語(CON, PRN, AUX, NUL, COM1-9, LPT1-9)を回避
   - ファイル名が長すぎる場合は120文字で切り詰め

2. フォルダ構造
   - ブックマークのフォルダ階層は無視してフラットに出力
   - 既存の出力ファイルは実行時にクリア

3. 安全性
   - 読み取り専用(Bookmarksファイルを変更しない)
   - 出力フォルダ以外には書き込まない

4. 文字コード
   - スクリプト内に日本語を使わない(文字化け防止)
   - メッセージは英語で出力

【実行方法】
- ダブルクリックで実行できるバッチファイル(.bat)も作成
- PowerShellの実行ポリシーをBypassして実行
- バッチファイルとスクリプトは同じフォルダに配置する想定

⚡ スタートアップに登録して自動更新

毎回手動で実行するのが面倒な方は、get.batをWindowsのスタートアップフォルダに登録しておくと便利です。パソコンを起動するたびに、ブックマークが自動で最新の状態に更新されます。

スタートアップフォルダの開き方:

  1. Windowsキー + R を押す

  2. 「shell:startup」と入力してEnter

  3. 開いたフォルダにget.batのショートカットを置く

これで、Windowsを立ち上げるたびにデスクトップのブックマーク一覧が自動更新されるようになります。


✨ まとめ

今回は、Chromeのブックマークをデスクトップに一括出力するスクリプトを紹介しました。

私自身、このスクリプトを使い始めてから、ブックマーク探しのストレスがかなり減りました。エクスプローラでファイル名を読み上げながら「あ、これこれ」とサイトを見つけられるのは、思った以上に快適です。

見える方にとっても、ブックマークのバックアップとして使えますし、「最近どんなサイトをブックマークしたっけ?」と振り返るのにも便利だと思います。

スクリプトをそのままコピーして使っていただいてもいいですし、記事の最後に載せた要件定義をAIチャットに渡して、自分好みにカスタマイズしていただくこともできます。

実は、AIが出てくる前は自力でコーディングしていたんですが、最近はもっぱらClaude Code頼りになっています。今回のスクリプトもClaude Codeと一緒に作りました。

一気に大きく効率化するのも大事なんですが、こうやって1つ1つ小さな効率化を積み重ねていくのも、実はとても重要なのかなと思うことがあります。今日のブックマーク整理が、明日の作業を少しだけ楽にしてくれる。そういう小さな積み重ねが、気づいたら大きな差になっているのかもしれません。

ちなみに、今回出力している.urlファイルは、昔のInternet Explorerで使われていた「お気に入り」と同じ形式です。懐かしいと感じる方もいらっしゃるかもしれませんね。Windowsの標準機能なので、特別なソフトをインストールしなくてもダブルクリックでブラウザが開きます。

最後まで読んでいただいて、ありがとうございました。この記事が役に立ったと思っていただけたら、スキやフォローをしていただけるととても励みになります。

#Windows11 #Chrome #PowerShell #AI活用 #アクセシビリティ

いいなと思ったら応援しよう!