CLIからユーザプロファイルを指定してChromeを実行する方法について (macOS)
CLIからユーザプロファイルを指定してChromeを実行する方法について調べたのでメモする。
うまく行かなかった方法
最初下記のやり方を参考に実施してみた。
うまく動きそうに思えるが、以下のようなコマンドを実行しても指定したユーザプロファイルではないプロファイルでブラウザが起動してしまう。
もしかしたらChromeの起動オプションが変わったのかもしれないと思いもう少し調べてみることにした。
open -a "Google Chrome" --args --profile-directory=<ユーザプロファイル内にあるDefaultディレクトリのパス>
うまくいった方法(--user-data-dirオプションを利用する)
その後いろいろ試している間に --user-data-dir
オプションを見つけ、試しにこちらで実行してみたら意図した通りに動いた。
ちゃんと最後までは調べきれていないが、もしかしたら --profile-directory
オプションはなくなったのだろうか?
というわけで以下のコマンドを実行することで指定したプロファイルを反映させた状態でChromeを起動することができる。
open -a "Google Chrome" --args --user-data-dir=<Defaultディレクトリの親ディレクトリを指定>
ちなみに <Defaultディレクトリの親ディレクトリを指定>
については、具体的にはChromeから下記のページを開き、 プロフィール パス
として表示されているディレクトリの親ディレクトリを指定すればOK。
chrome://version/
There is no [mac64_m1] chromedriver for browser 107.0.5304 in cacheというエラーの解決方法
SeleniumのWebDriver managerを用いたプログラムを動かした際に下記のようなエラーが出るようになっていた。
(Chromeのversion番号は利用しているChromeのversionによって変わると思う)
====== WebDriver manager ====== Current google-chrome version is 107.0.5304 Get LATEST chromedriver version for 107.0.5304 google-chrome There is no [mac64_m1] chromedriver for browser 107.0.5304 in cache Trying to download new driver from https://chromedriver.storage.googleapis.com/107.0.5304.62/chromedriver_mac64_m1.zip ・ ・ ・ ValueError: There is no such driver by url https://chromedriver.storage.googleapis.com/107.0.5304.62/chromedriver_mac64_m1.zip
どうやら https://chromedriver.storage.googleapis.com/107.0.5304.62/chromedriver_mac64_m1.zip
というURLに問題がありそうだ。
確かに上記URLにアクセスしてみても、 The specified key does not exist.
というメッセージが表示されていたりする。
これはWebdriver manager側の問題であるようなので、issueを探してみると下記が該当していそうだ。
既に問題は解決しているようだったので、issue内に貼ってあった下記の upgrade
コマンドを実施して webdriver-manager
を最新にする。
python3 -m pip install webdriver-manager --upgrade
これで無事に問題は解決した。
Denoを用いてCLI上でCSVデータをObjectの配列として表示する
ちょっとした息抜きに作ってみただけのもの。
CSVデータをCLI上で読み込ませてオブジェクトの配列を表示するだけのサンプルを書いてみた。
csv-parse-v
という npm パッケージは自作のもので、何となくそれをDenoと組み合わせて使ってみようと書いてみた、というだけに過ぎない。
コードは以下のとおり。
import { readLines } from "https://deno.land/std@0.159.0/io/mod.ts"; import parse from "npm:csv-parse-v"; let data = ""; for await (const line of readLines(Deno.stdin)) { data = data + line + "\n"; } if (data) { const result = parse(data); console.log(result); } else { console.log("Not found data"); }
あとは以下のようにしてCSVファイルを読み込ませれば、オブジェクトの配列と化したCSVデータがCLI上に表示される。
(まだDenoで npm:foo
的なことをやる場合は --unstable
といくつかの権限が必要となる)
deno run --unstable -A main.ts < data.csv
実際のキャプチャ
Denoでnpmを用いてReact18を動かしてみたサンプル
まだ --unstable
をつけないといけないが、 以下のようにして npm
モジュールを参照できるようになっているので、この方法を用いてDenoからReactを触ってみたメモ
import * as React from "npm:react";
Denoのバージョン
deno 1.26.1 (release, aarch64-apple-darwin) v8 10.7.193.3 typescript 4.8.3
Reactのバージョン
タイトルにも書いてあるとおり、18を利用。
DenoでReactを用いた小さなサンプル
まずはReactを動かすだけのサンプル。
ちなみにDenoや、Cloudflare Workersのようなエッジランタイム上では renderToReadableStream
を用いるようだ。
https://ja.reactjs.org/docs/react-dom-server.html#rendertoreadablestream
touch main.tsx
main.tsx
というファイルを作成し、そちらに以下を書き込む。
import * as React from "npm:react"; import { renderToReadableStream } from "npm:react-dom/server"; const App: React.FC = () => { return ( <html> <head> <title>React 18 with deno sample</title> </head> <body> <h1>hello world</h1> </body> </html> ); }; Deno.serve( { port: 3000 }, async () => { const stream = await renderToReadableStream(<App />); return new Response(stream, { headers: { "Content-Type": "text/html", "x-content-type-options": "nosniff" }, }); }, );
下記のコマンドで実行して、http://localhost:3000
にアクセスすると画面が表示される。
deno run --unstable -A main.tsx
tsxでないとエラーになる。
ちなみに最初 main.ts
でファイルを作成してしまっていて、実行時にパースエラーになってしまっていた。
.tsx
じゃないと動かない、というのをこちらにも一応書き残しておく
※こんな感じのエラーが出る
error: The module's source code could not be parsed:
ReactのSuspenseを使う
React 18で新たに入った Suspense
を使う。
https://ja.reactjs.org/docs/react-api.html#reactsuspense
import * as React from "npm:react"; import { renderToReadableStream } from "npm:react-dom/server"; const WAIT_TIME = 3000; let done = false; const App: React.FC = () => { return ( <html> <head> <title>React 18 with deno sample</title> </head> <body> <React.Suspense fallback={<p>loading...</p>}> <Content /> </React.Suspense> </body> </html> ); }; const Content: React.FC = () => { if (done) { done = false; return <h1>hello world</h1>; } // 今回の場合、3秒待機した後に"hello world"が表示されるという処理になる throw new Promise((resolve) => { return setTimeout(() => { done = true; resolve(true); }, WAIT_TIME); }); }; Deno.serve( { port: 3000 }, async () => { const stream = await renderToReadableStream(<App />); return new Response(stream, { headers: { "Content-Type": "text/html", "x-content-type-options": "nosniff", }, }); }, );
VOICEPEAKの移行方法 (mac環境)
VOCEPEAKを利用しているmacマシンを別のmacマシンに移行した際のことを備忘録として書き残しておく。
やることは、
という流れとなり非常にシンプルなのだが、今後また移行機会があったときにここを見れば良い、という形にしておきたかったので書いておく。
VOICEPEAKのアクティべーション解除をする
まずはVOICEPEAKのアクティべーション解除を実施する。
実施方法は下記にあるVOICEPEAKの機能マニュアル内に記載されている。
https://www.ah-soft.com/voice/manual/07_uninstall.html
なおAPPの削除はmacの場合、FinderからVOICEPEAKを選んでゴミ箱に入れるだけだが、一応すべての移行作業が完了して問題なく移行先のPCで使って作業ができる状態であることを確認した後で削除している。
移行先のマシンでVOICEPEAKをインストールし、アクティベーションを実施する
手順としては以下の通りとなる。
(マニュアルはwindows環境で書かれているがmacもほぼ同じ)
https://www.ah-soft.com/voice/manual/02_setup.html
この通りにやることで移行先のmacマシンで無事にVOICEPEAKが使えるようになった。
Windows環境のiPhoneバックアップを外付けHDDで行いたいとき
先日友人から依頼があり、WindowsマシンでバックアップしているiPhoneのバックアップデータを外付けHDDに移すということをしてきた。
私は普段iPhoneのバックアップはiCloud上で行っているため、ここについての知識はまったくないのだがこちらの記事を参考にさせてもらって無事に作業が完了できたので備忘録として書き残しておこうと思った。
上の手順を参考にしながら実施した手順は以下の通り
ちなみに友人はMicrosoft StoreからダウンロードしたiTunesを使っていたので、以下の通りとなる
1. C:\Users\ユーザ名\Apple\MobileSync\Backup
を外付けHDDにコピーする。このコピー先のフォルダを以降はiPhoneバックアップに用いる形となる。
(なお、ここにiPhoneバックアップに関するデータが入っているようなので、時間があれば一応作業前にバックアップも別途取っておいたほうが良い)
2.コマンドプロンプトを管理者として起動した上で、さきほど移行した外付けHDD内のBackupフォルダに対してシンボリックリンクを生成する。
実際に実行するコマンドは以下の通り。
mklink /d "C:\Users\ユーザ名\Apple\MobileSync\Backup" "外付けHDDに移した、移行先のBackupフォルダのパス"
これでシンボリックリンクが作成されるので、あとはiPhoneをWindowsマシンに繋いで正常にバックアップが取れることを確認できればOK。
ローカルサーバを簡単に立ち上げるためのツール、lser
lser
というローカルサーバを簡単に立ち上げるためだけのツールを作った。
ローカルサーバ起動が作業フローに組み込まれていない環境で、手元のマシンでローカルサーバを立ち上げて確認をしたくなるようなことが最近多く、そういうとき普段はPythonで下記のコマンドを叩いてサーバを立ち上げて確認していた。
python -m http.server 3000
まあ、このコマンドをターミナル上から history
で呼び出して叩くだけだからそこまで手間はないのだけど、ローカルネットワーク内の IPv4
を調べて別のマシンから接続して確認したいときなどもあり、そこらへんの作業もコミコミでまとめて実行できるツールが欲しくなったので作ったという形となる。
lser
と叩けばポート番号3000で起動するし、 -p
オプションを用いてポート番号を別途指定できる。
というわけで、自分のために作ったようなツールです。