at backyard

Color my life with the chaos of trouble.

CLIからユーザプロファイルを指定してChromeを実行する方法について (macOS)

CLIからユーザプロファイルを指定してChromeを実行する方法について調べたのでメモする。

うまく行かなかった方法

最初下記のやり方を参考に実施してみた。

superuser.com

うまく動きそうに思えるが、以下のようなコマンドを実行しても指定したユーザプロファイルではないプロファイルでブラウザが起動してしまう。
もしかしたら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を探してみると下記が該当していそうだ。

github.com

既に問題は解決しているようだったので、issue内に貼ってあった下記の upgrade コマンドを実施して webdriver-manager を最新にする。

python3 -m pip install webdriver-manager --upgrade

これで無事に問題は解決した。

Denoを用いてCLI上でCSVデータをObjectの配列として表示する

ちょっとした息抜きに作ってみただけのもの。

CSVデータをCLI上で読み込ませてオブジェクトの配列を表示するだけのサンプルを書いてみた。

csv-parse-v という npm パッケージは自作のもので、何となくそれをDenoと組み合わせて使ってみようと書いてみた、というだけに過ぎない。

github.com

コードは以下のとおり。

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上で行っているため、ここについての知識はまったくないのだがこちらの記事を参考にさせてもらって無事に作業が完了できたので備忘録として書き残しておこうと思った。

sp7pc.com

上の手順を参考にしながら実施した手順は以下の通り

ちなみに友人はMicrosoft StoreからダウンロードしたiTunesを使っていたので、以下の通りとなる

1. C:\Users\ユーザ名\Apple\MobileSync\Backup を外付けHDDにコピーする。このコピー先のフォルダを以降はiPhoneバックアップに用いる形となる。
(なお、ここにiPhoneバックアップに関するデータが入っているようなので、時間があれば一応作業前にバックアップも別途取っておいたほうが良い)

2.コマンドプロンプトを管理者として起動した上で、さきほど移行した外付けHDD内のBackupフォルダに対してシンボリックリンクを生成する。

実際に実行するコマンドは以下の通り。

mklink /d "C:\Users\ユーザ名\Apple\MobileSync\Backup" "外付けHDDに移した、移行先のBackupフォルダのパス"

これでシンボリックリンクが作成されるので、あとはiPhoneWindowsマシンに繋いで正常にバックアップが取れることを確認できればOK。

ローカルサーバを簡単に立ち上げるためのツール、lser

lser というローカルサーバを簡単に立ち上げるためだけのツールを作った。

github.com

ローカルサーバ起動が作業フローに組み込まれていない環境で、手元のマシンでローカルサーバを立ち上げて確認をしたくなるようなことが最近多く、そういうとき普段はPythonで下記のコマンドを叩いてサーバを立ち上げて確認していた。

python -m http.server 3000

まあ、このコマンドをターミナル上から history で呼び出して叩くだけだからそこまで手間はないのだけど、ローカルネットワーク内の IPv4 を調べて別のマシンから接続して確認したいときなどもあり、そこらへんの作業もコミコミでまとめて実行できるツールが欲しくなったので作ったという形となる。

lser

と叩けばポート番号3000で起動するし、 -p オプションを用いてポート番号を別途指定できる。

というわけで、自分のために作ったようなツールです。