Launch-Software "プレーンテキストリンクを用いた汎用ランチャーの実装"

テキストファイルに書かれたリンクからアプリケーションを起動する。

目次

はじめに

Summary: テキストに書かれたリンクからアプリを起動するCLI用PowerShellスクリプト「Invoke-Link (Alias:i)」を作った話。

Windowsのショートカットファイルは便利だ。よく使うアプリケーションやWebリンク、ファイルパスを登録しておけば素早くアクセスできる。ショートカットファイルはデスクトップや任意のフォルダにどこでも気軽に配置できる。

このショートカットファイルの使い勝手に関して、いくつかの不満がある。たとえばショートカットファイルを作成するのは少し面倒だ。一度に複数のリンクを登録できない。ショートカットファイル(.lnk)はバイナリファイルなので、Gitなどのバージョン管理システムで差分を管理しづらい。

できれば、テキストファイルにリンクを書いて、そのままそれを実行できるようにしたい。そんな考えからPowerShellスクリプト「Invoke-Link  (Alias:i)」を書いてみた。小さな工夫だが、「どこにファイルを置いたっけ?」と一瞬迷うことによる作業や思考の流れの中断を低減するちょっとした助けになるかもしれない。

前提条件

問題をとく

1. 問題を理解する

問題を整理する。 Windowsのショートカットファイル(.lnk)について:

利点・便利な点

分類 利点 対応方針
起動と配置 ・素早くアプリやファイルを起動できる
・好きな場所に配置可能
・カレントディレクトリから移動せずに起動可能
現行の利点を活かしつつ、テキストファイル管理との連携で即時実行を維持する

不満・問題点

分類 不満・問題点 対応方針
作成の手間 .lnkファイルの作成が手間 テキストファイル形式に移行し、リンク作成の簡素化を図る
複数リンクの管理 1つのショートカットファイルに複数リンクを登録できず、一度に複数リンクを起動できない テキストファイルに複数リンクを記述し、一括起動が可能な仕組みを導入する
バージョン管理 バイナリ形式のため、Gitでの差分管理が困難 テキストベースの管理に切り替え、Gitなどのバージョン管理システムでの差分把握や共有を容易にする
環境依存性 .lnkファイルはWindows OSに依存する テキストファイル形式に移行し、OSに依存しないリンク管理を実現する

2. 計画をたてる

以下に、テキストファイルでリンクを管理・実行するためのスクリプトの実装方針を示す:

課題  対策計画 
起動の迅速さと利便性の維持 ショートカットファイルの利点を保持し、カレントディレクトリから移動せずにアプリやファイルを起動可能な仕組みを構築する
テキストファイル形式の採用 バイナリ形式ではなくテキストファイルでリンク情報を管理し、Gitでの差分管理やバージョン管理を容易にする
複数リンクの一括管理 1つのテキストファイルに複数のリンクを記載し、必要に応じてまとめて起動できる仕組みを提供する
環境依存性の排除と移植性の向上 OS依存のショートカットから脱却し、クロスプラットフォームで運用できるテキストベースのリンク管理を実現する

3. 計画を実行する

インストール

PowerShellスクリプト:「Invoke-Link (Alias:i)」をインストールする。

  1. pwsh-sketchesのインストール
  2. ドットソースで関数を読み込み
    • . path/to/the/pwsh-sketches/src/Invoke-Link_function.ps1
  3. テスト
    • man i or
    • man Invoke-Link

実行

それでは、「Invoke-Link 」を実際に使ってみよう。 まず最初にWebリンクを既定のブラウザで起動してみる。

テキストファイルbtklab.txtを作成し、以下の2行を記述する。

https://btklab.com
https://github.com/btklab

以下のコマンドで、テキストファイルに記載されたリンクを実行する。 この場合はテキストの一番最初に書かれたリンク(https://btklab.com )のみ「既定のブラウザ」で開く。

i btklab.txt

-Docオプションで、2番目以降のリンク(https://github.com/btklab )を開く。

i btklab.txt -Doc

-All(-a)オプションを指定した場合、「既定のブラウザ」でテキストファイルに書かれたすべてのリンクを開く。

i btklab.txt -All

Webリンクのほか、ファイルやディレクトリのフルパスも指定できる。ダブルクオートはあってもなくてもよい。 テキストファイルpub-documents.txtを作成し、以下のように記述する。

"C:/Users/Public/Documents"

以下のコマンドで、パスに指定したディレクトリがエクスプローラーで開く。

i pub-documents.txt

起動するアプリは、Webリンクの場合は「既定のブラウザ」、ディレクトリの場合は「エクスプローラ」、ファイルの場合は拡張子に応じた「既定のアプリ」である。他、引数にWindowsショートカットファイル(.lnkファイル)を指定した場合は、ショートカットファイルを起動する。これにより、リンク集フォルダにテキストファイルリンクとWindowsのショートカットファイルを混在させても、統一的にInvoke-Link コマンドで起動できる。

4. ふりかえる

計画したニーズはおおよそ満たされた。 このInvoke-Link コマンドはぼくの日常的な作業には使い勝手がよく、使用頻度の高いコマンドの一つだ。

課題  結果  評価
起動の迅速さと利便性の維持 カレントディレクトリから移動せずにアプリやファイルを起動可能
テキストファイル形式の採用 テキストファイルでリンク情報を管理し、Gitでのバージョン管理が可能
複数リンクの一括管理 1つのテキストファイルに複数のリンクを記載し、必要に応じて一括で起動可能
環境依存性の排除と移植性の向上 テキストファイルとPowerShellの組み合わせでクロスプラットフォーム化

用語

読者の理解と学習をより深めるための、リンクやショートカットを活用した効率化の観点でのいくつかの技術用語:

CLI(コマンドラインインターフェース)

文字でコンピューターに指示を出す方法。マウスでアイコンをクリックするGUI(グラフィカルユーザーインターフェース)とは異なり、キーボードで命令(コマンド)を入力して、ファイルを開いたり、プログラムを実行したりする。このブログで紹介するのは主にCLIを用いた方法。

別名(エイリアス:Aliases)

PowerShellやその他のシェルで、頻繁に使うコマンドやスクリプトに短縮名(エイリアス)を設定する仕組み。今回の「Invoke-Link 」で「i」というエイリアスを設定した理由は、当スクリプトが日常的にたくさん手入力されることが予想されたため。

シンボリックリンク:Symbolic Link

Windowsのショートカットファイル)(.lnk)はシンボリックリンクの一種。オペレーティングシステムのファイルシステム内で、あるファイルやディレクトリへの参照(ポインタ)を作成する機能。

Workflow Automation

当記事で扱った内容の分類は、日常の手動作業をスクリプトや自動化ツールで効率化する考え方。リンクやショートカット、別名を駆使して、アプリ起動やファイルアクセスの操作を自動化・迅速化する手法。

pwsh-sketches – 実験的なCLI用PowerShellスクリプト集(GitHubリポジトリ)

Invoke-Link : テキストファイルに書かれたリンクを既定のアプリケーションで起動するCLI用PowerShellスクリプト。ぼくがpwsh-sketches の中でもっともよく使うコマンドの一つ。