ブラウザには大量の未整理ブックマーク、そしてAIに聞けばおおよそ意に沿ったWebを探せる時代。ブラウザのブックマークを能動的に活用しなくなって随分経つ。しかし、よく使う個別のWebページや発見した新たなWebなどは、別のレイヤーとして記録したい。PowerShellで動作する超簡易ブックマークを作れないだろうか?

Swichで枠組みを試みる

変数にURLを入れておき、 switch構文でStart-Processで変数を起動すればいいと考える。


function bm {

    $bookmark1 = "https://news.mynavi.jp"
    $bookmark2 = "https://github.com/"
    $bookmark3 = "https://google.co.jp"

    $A = Read-Host "開くブックマーク名(変数)を入力"

    switch ($A) {
        "bookmark1" { Start-Process $bookmark1 }
        "bookmark2" { Start-Process $bookmark2 }
        "bookmark3" { Start-Process $bookmark3 }
    }
}

が、ブックマーク変数とURLの対応が頭にないと当然に意味が無い。探してみると、Get-Variableがある。変数名を取得できるコマンドレットでアスタリスク(*)も機能する。


function bm {

    $bookmark1 = "https://github.com/"
    $bookmark2 = "https://github.com/trending"
    $bookmark3 = "https://learn.microsoft.com/"

    Get-Variable bookmark*

    $A = Read-Host "開くブックマーク名を入力"

    switch ($A) {
        "bookmark1" { Start-Process $bookmark1 }
        "bookmark2" { Start-Process $bookmark2 }
        "bookmark3" { Start-Process $bookmark3 }
    }

とすれば、bookmark変数を総覧できるので、表示を見ながら入力できる。

  • Get-Variable bookmark*で表示

    Get-Variable bookmark*で表示

  • "bookmark1"と入力してEnterでブラウザ起動で目的のURL

    "bookmark1"と入力してEnterでブラウザ起動で目的のURL

配列とループでカイゼンする

一応、目的は達成されるのだが、設定するときの入力が面倒だ。配列を使ってURLを設定するように変える。


 $bookmark = @(
        "https://news.mynavi.jp"
        "https://github.com/"
        "https://google.co.jp"
    )

また、以下のようにループで表示してやれば、ユーザー入力用の文字を作らなくても自動的に増やしてくれる。


for($i=0; $i -lt $bookmark.Count; $i++) {
        Write-Host "$($i+1) : $($bookmark[$i])"
    }

超簡単ブックマーク関数

完成させたブックマーク関数が以下になる。


function bm {

    $bookmark = @(
        "https://news.mynavi.jp"
        "https://github.com/"
        "https://google.co.jp"
    )

    for($i=0; $i -lt $bookmark.Count; $i++) {
        Write-Host "$($i+1) : $($bookmark[$i])"
    }

    $choice = Read-Host "番号"

    Start-Process $bookmark[$choice-1]
}

  • 実行結果。配列にURLを入れるだけで入力番号も増加するので手軽だ。

    実行結果。配列にURLを入れるだけで入力番号も増加するので手軽だ。

ループと配列の簡単な仕組みでも、基本的な機能を作ることが可能だ。シンプルなので、追加の機能を付加したカスタマイズも思いつきやすいはずだ。