[ruby]lnkファイル生成[chrome]

lnk

chromeはショートカットプロパティにオプションが指定できます。方法は『リンク先』に記入したパスの後にスペースを入れてオプションを記述、するとオプションの内容が反映されてchromeが起動されます。
さて、この機能をスクレイピング用の個別アカウントほか細かい設定の保持に活用しているのですが、複数のショートカットに対して一々プロパティを開いて設定を記入するのが億劫になってきました。そこで今回、rubyによるlnkファイルを設定、作成を行ってしまおうかと思います。

os

Window7

version

version
#以下ページでバージョンやファイルパスなどを確認
chrome://version/

chrome-lnk-options

以下、数多のオプションから一例。

profile-directory
#Backspace による「戻る」機能の有効化
--enable-blink-features=BackspaceDefaultHandler --test-type

ここで言うのもなんだけど、BackSpace無効化して誰が得するんでしょうか。
……まあ、きっと誰かが得をするんでしょうね。

user-data-dir=”path”

profile-directory
#ユーザーデータフォルダ
--user-data-dir="path"

profile-directory

profile-directory
#マルチアカウント別ユーザーデータフォルダ
--profile-directory="path"

disk-cache-dir

disk-cache-dir
#キャッシュファイルの場所を指定
--disk-cache-dir="path"

RAM DISK

ソフトウェア:SoftPerfect RAM Disk
参考(win7):SoftPerfect RAM DiskでChromeを高速化

allow-file-access-from-files

disk-cache-dir
#ローカルファイルからAjax動作の確認
--allow-file-access-from-files

incognito

disk-cache-dir
#シークレットモードで起動
--incognito

WIN32-SHORTCUT

ショートカットを生成するプラグインwin32-shortcutを活用します。(github)

win32/shortcut
gem install win32-shortcut

参考

Ruby Library Report 【第 4 回】 Win32Utils
Windowsのショートカットファイルの作り方メモ

code

shortcut.rb
ARGV.size.times do |i|
#name
name = ARGV[i]
#dir(chrome.exeの存在するフォルダ)
dir = File.expand_path('C:\chrome\GoogleChrome')
#lnk生成フォルダ
$folder_lnk = File.expand_path('../accounts', dir)
#説明文
$description = ''
#実行ファイル
$exe_src = File.expand_path('./GoogleChrome.exe', dir)
#作業フォルダー
$dir_working = dir
#キャッシュフォルダ(--disk-cache-dir)
$folder_temp = File.expand_path('T:\temp')
#ユーザーデータ(--user-data-dir)
$user_date = File.expand_path("../userData/#{name}/", dir)
#ユーザーデータを複製する場合の複製元データ
$user_date_src = File.expand_path('../userData/test/', dir)
#マルチアカウントフォルダ(--profile-directory)
$folder_profile = false

options = {
#backspace有効化
'--enable-blink-features=BackspaceDefaultHandler --test-type' => true,
#js無効化
'--disable-javascript' => false,
#img非表示
'--disable-images' => false,
#jumplist無効化
'--disable-custom-jumplist' => true,
#シークレットモード有効化
'--incognito' => false,
#ローカルファイルからAjax動作の確認
'--allow-file-access-from-files' => false,
}

def append_string(src, str)
src << str + "\s"
end

def chrome_arguments(name, options)
args = String.new
#user
if $user_date
opt = '--user-data-dir="' + $user_date + '"'
append_string(args, opt)
#ユーザデータ複製
FileUtils.cp_r($user_date_src, $user_date, {:remove_destination => true}) if $user_date_src
end
#profile
if $folder_profile
opt = '--profile-directory="' + $folder_profile + '"'
append_string(args, opt)
end
#temp
if $folder_temp
opt = '--disk-cache-dir="' + $folder_temp + '"'
append_string(args, opt)
end
#options
options.values.each_with_index{ |val, i|
append_string(args, options.keys[i]) if val
}
args.strip
end

#shortcut
s = Shortcut.new("#{$folder_lnk}/#{name}.lnk")
s.description = $description
s.path = $exe_src
s.show_cmd = Shortcut::SHOWNORMAL
s.arguments = chrome_arguments(name, options)
s.working_directory = $dir_working
s.save
end