メモ2ブログ

メモtoウェブログ。旧ブログはこちら。 http://sakebook.blogspot.jp/

HomebrewをM1Macに移行する

最近メインPCをM1 Macに移行しました。移行アシスタントで移行しました。

support.apple.com

その関係で、M1 Macで正しく動かせないものなどがあります。

Homebrewもその一つでした。

そのまま実行すると次のようなエラーになります。

Error: Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local)!
Please create a new installation in /opt/homebrew using one of the
"Alternative Installs" from:
  https://docs.brew.sh/Installation
You can migrate your previously installed formula list with:
  brew bundle dump

したがって次のコマンドを実行します。

$ brew bundle dump

このコマンドは現在Homebrewで管理してるパッケージがまとまったBrewfileが生成されます。

その後、Homebrewをインストールスクリプトで入れ直します。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

入れ直したら、pathを設定します。これはインストールスクリプトのアウトプットにあるのでそれをそのまま使ってください。次のような感じです。

- Run these two commands in your terminal to add Homebrew to your PATH:
    echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/YOUR_NAME/.zprofile
    eval "$(/opt/homebrew/bin/brew shellenv)"

その後、Brewfileを指定してbundle installしてください

$ brew bundle install --file YOUR_BREWFILE_PATH

これで現在はHomebrewが2つ入っていることになります。

古いHomebrewを削除します。

古い方は /usr/local

新しい方は /opt/homebrew

に設置されてますが、適宜自身の環境で読み替えてください。

アンインストールスクリプトがあるので、それを実行します。

注意する点は、そのまま実行すると先ほどインストールしたHomebrewがアンインストールされるので、path引数に古い方のHomebrewのpathを指定します。

また、curlで読み込みつつ引数を渡すために -- を間に引数として渡します。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)" -- --path=/usr/local

最後に

$ brew doctor

を実行して、うまく結びついていないものなどがあれば適宜出力に基づいて修正してください。

以上です。

参考

The Missing Package Manager for macOS (or Linux) — Homebrew

homebrew - Migrate home-brew back from M1 to Intel - Ask Different

curlでbashスクリプトを実行して引数も与える - ls [internet]

2021年を振り返って

目標とか

英語

Duolingoは継続しています。毎日やらなくても継続日数をキープしてくれるアイテムなどもあるのですが、今は500日を超えました。全部のスキルレベルを5にあげると息巻いていたのですが、去年も触れたように破壊的な変更があり、色々更新されているのでそんな簡単には行きませんでした。更新があること自体は生きたサービスという感じがするので良いと思ってます。

フランス語の企画を行ってたりしてちょっと話題になってたりしました。

HelloTalkは年始に少し始めてましたが、今は投稿などはしていません。悪くはないとは思ってるのですが。。

英語ができるようになったなという感じは、少しだけ出てきました。映画とかでちょっとだけリスニングができてる気がします。

作文や会話などはまだまだです。

リングフィットアドベンチャー

運動全般全然やらなかったです。コロナ禍で体重が減っていたのですが、最近環境の変化に伴い体重は増加傾向です。

キャプチャはFiitbitのダッシュボードです。

f:id:sakebook:20220118164955p:plain

数年レベルで見ると元に戻った感じではあります。

体重が底だったときは逆に心配されていて、今は戻ったねと言われるのでこれが普通なのかもしれません。

Flutter

去年以上に触れていない気がします。既存サービスのメンテや、ツールの更新、プロポーザルを出すなどしました。

やったこと

Jetpack Compose

DesktopアプリをKotlinで少し作ってみたりしました。そのためにPathwayを終わらせました。

ちょうどその後AndroidDevChallengeと言うものが始まり、参加してレゴをもらいました。

同じくUIを宣言的に実装できるFlutterと比べて、Composeはアノテーションを使いfunctionalで返り値を持たない感じで実装するところが書き味としてかなり違うなと思いました。

CLIの公開と配布

両OS触ることが多く、課題を感じていた部分があったのでそれを解決するツールを作りました。

配布はHomebrewを使うことで、利用者がシュッと試しやすいようにしました。

sakebook.hatenablog.com

公式のリポジトリには追加できていないのでtapで追加する必要があります。Star集まったら登録しようと思ってたのですが思った以上にStarがつかなかった。。

github.com

個人的にはかなり便利なので触ってみて欲しいです(Starください)。

シニアエンジニア

会社のキャリアパスとしてあったのですが、無事にシニアエンジニアとなりました。普段の業務自体は大きくは変わらないのですが、より大きなアウトプットを求められるようになりました。

関連して、普段の業務でコードを書くことがほとんどなくなりました。これはシニアエンジニアだからというわけではなく、今の自分に求められるポジションがそうだからです。

コードを書かないのにアウトプットを求められると言うところで、難しいなと日々頭を悩ませています。

趣味とかその他

配信環境

キャプチャボードといい感じのマイク、いい感じのライトなどを揃えて配信環境を整えました。テスト配信しか試してないですがよくある配信者みたいな感じにできたのでちょっとテンション上がりました。

引っ越し

大きなイベントで引っ越しがありました。以前より広くなりました。

念願のボドゲ棚ができたのは感激です。人を呼んでボドゲ会を開きたいです。

f:id:sakebook:20220118165401j:plain

伴い生活週間にも変化があり、体重の増加にもつながってます。

2022年

定量的ではないですが意識していきたいこと。

英語

継続できそうです。Duolingoの試験を受けてみるのもひとついいかもとは考えてます。

アウトプット

増やさないとなと思ってます。GitHubに限らないですが、草生えてなかったり手を動かすことが減ってるので、意識的にやっていかないとという感じです。やっていかないと、という考えじゃなくてやりたいからやるというふうにしないとなかなかできないよなとは思います。何かアイデアを思いついた時に作り切る体力が減ってきているなとは感じます。

やったことないこと

色々重複はしますが、技術にしても私生活にしても、やったことないことを試していきたいと思ってます。その際には合わせてアウトプットも添えていきたい。

セルフマネジメント

自分の時間の使い方や、体調管理などを意識していきたいです。健康診断の項目も変わる年齢になるので。

なんだかわからないけど時間だけがないとかを可視化して振り返られるようにし、加齢に伴う劣化に負けない体作りなどをシステム化したいです。

スマホのキャプチャを扱いやすくするCLI「pbssc」を作った

久しぶりの更新です。

コードレビューや動作確認などでスマホ画面のキャプチャを貼り付けたくなることがあります。

そういう時に、シュッとキャプチャをとってClipboardに貼り付けられるツールを作りました。

github.com

インストールはHomebrew経由で行えます。

$ brew tap sakebook/tap && brew install pbssc

オプションをつけてOSを指定して実行できます。

// Android
$ pbssc -a

// iOS
$ pbssc -i

READMEにdemo動画があります。

実装のコアは既存ツールに依存

実際にキャプチャを撮る部分はadblibimobiledeviceに依存しています。

adb、つまりAndroid端末だと次のようにキャプチャを取れます。

$ adb exec-out screencap -p > example.png

libimobiledevice、つまりiOS端末だと次のようになります。

$ idevicescreenshot example.png

キャプチャを撮るだけであればそれぞれのツールで既にサポートされていたので問題ないのですが、今回特に解決したかったのは Clipboardへの貼り付けでした。

Clipboardへの貼り付け

pbcopy が使えるかと思ったのですが、 画像pathからは渡すことができませんでした。

そこで今回使ったのは AppleScript です。

AppleScript

AppleScript is a scripting language created by Apple. It allows users to directly control scriptable Macintosh applications, as well as parts of macOS itself. You can create scripts—sets of written instructions—to automate repetitive tasks, combine features from multiple scriptable applications, and create complex workflows.

DeepL翻訳

AppleScriptは、アップル社が開発したスクリプト言語です。ユーザーは、スクリプト可能なMacintoshアプリケーションやmacOS自体の一部を直接制御することができます。スクリプト(一連の命令文)を作成することで、反復的なタスクを自動化したり、複数のスクリプト可能なアプリケーションの機能を組み合わせたり、複雑なワークフローを作成したりすることができます。

developer.apple.com

試しにどんなものか確認したい場合は、手元で次のコマンドを実行するとmacOSのアラートを表示することができます。

$ osascript -e 'display alert "Hello World"'

AppleScriptを使えば、macOS上の.appなども起動したりできます。cronで動かすことで日々のルーチンの自動化などもできそうですね。

今回はAppleScriptを使ってClipboardを操作しました。

既存ツールとAppleScriptを混ぜる

ShellScriptからAppleScriptを呼び出すことも、その逆も可能でしたが、今回はShellScriptからAppleScriptを呼び出すことにしました。既存ツールの存在確認などがやりやすいと思ったからです。

AppleScriptを実行するときは osascript コマンドを使います。なので、ShellScript内では次のように記述してAppleScriptを呼び出します。

copy_to_clipboard () {
   osascript -e "
   on run
     set the clipboard to POSIX file \"$filepath\"
   end
  "
  echo "Set image to clipboard from $filepath"
}

関数にすることは必須ではないです。

これらをまとめて取り扱いやすくしたのがpbsscです。

まとめ

同じような課題感を持っている人に対して便利なツールになったと思います。

直接使わなくても、今回紹介した内容が間接的にでも助けになれば良いなと思います。

参考

Android Debug Bridge (adb)  |  Android Developers

libimobiledevice · A cross-platform FOSS library written in C to communicate with iOS devices natively.

macos - Set clipboard to image - pbcopy - Stack Overflow

Commands Reference