| @技術/プログラミング

Homebrew で入れた SQLite で load_extension() が動かなくなっていた。

どうも以前は --enable-loadable-extensions でビルドできていたらしいが、 Homebrew 全体でオプション指定をできなくする変更が 4 年前にあったみたいだ。

オプション指定できるのは UX として良くない(ビルド済みのバイナリをダウンロードできない)し、オプション指定を Homebrew のチームでテストしていないからだそう。

TF-IDF で関連記事を表示する機能は SQLite の拡張に依存していたので、最近 Homebrew で入れた SQLite だと機能が動かなくなってしまった(エラーが発生する)。

対策としては自分で SQLite をビルドするしかない。 Mac でそれやるのは面倒なのでこういうのは全部 Docker でやることにした。

Homebrew のウリはビルド済みのバイナリをサクッとダウンロードできてローカルでビルド不要なところではあると思うが、ちょっと凝ったことをしようとするとソースコードをダウンロードしてきて手元でビルドしないといけなくなってしまった。依存パッケージをまとめてインストールできてたことも便利だったんだけど、カスタムインストールをしたいときは昔みたいに依存関係を自分で調べて都度都度インストールしていかないといけなくなった。開発チームの考えもわからなくはないがちょっと残念だ。

ちなみに Homebrew のリポジトリ( homebrew-core )の過去のコミットログを調べるのがめっちゃ大変だった。 tig Formula/sqlite.rb しても 3 分くらい反応がなかった。 git log -Sextension Formula/sqlite.rb してそれっぽいコミットのハッシュ値を見つけて GitHub で検索して何とか上記の Pull Request と Issue に辿り着いた。超巨大なプロジェクトのソースコード管理は Git でやると大変そうだ。

| @Mac/iPhone

仕事用の MacBook Pro が新しいやつになったので備忘のために設定方法をメモしておきます。

以前書いた通り、自分は Google Chrome の Profile を二つ作ってノーマルの Chrome と Canary チャンネルの Chrome (ベータよりももっと攻めてるやつ)の二つを使い分けている。仕事用が Canary Chrome でノーマルが私生活用。 Slack からのリンクや Google Drive の URL は仕事用の Canary Chrome で開くように Choosy を使って設定している。 Cloud で Profile が同期される都合上、こうするしかない。

その Canary Chrome への 1Password のインストール方法がちょと特殊で、公式サポートフォーラムの以下の記事の通りにやる必要がある。

  1. rm ~/Library/Application Support/Google/Chrome Canary/NativeMessagingHosts/2bua8c4s2c.com.agilebits.1password.json
    Canary Chrome の 1Password 用設定ファイルを削除(存在しない場合もあり)
  2. ln -s ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/2bua8c4s2c.com.agilebits.1password.json ~/Library/Application\ Support/Google/Chrome\ Canary/NativeMessagingHosts/
    ノーマル Chrome の 1Password 用設定ファイルのシンボリックを Canary Chrome の設定ディレクトリに張る
  3. Canary Chrome 再起動

1Password が Chrome とのやりとりに使う JSON ファイルをノーマル Chrome と Canary Chrome で共通化してしまうようだ。これで Canary Chrome でも 1Password が使えるようになる。

| @Mac/iPhone

Touch Bar

リモートワーク中心の世の中なので Slack の Status で離席していることやミーティング中であることが分かると便利なはず。というわけで自分はなるべく Slack の Status を更新するようにしているが、 Slack アプリ内での Status の更新は面倒くさい。メニューを押して絵文字選んでひと言アップデートを入力とか毎度やってられない。ボタン一発で Status を更新したい。

MacBook Pro の Touch Bar は評判が悪い。自分もあまり便利だと思わないのだけど、一つだけ便利な使い方があって、それがこの Slack の Status アップデートボタンを配置するというもの。 Touch Bar に配置されたボタンを押すだけで食事中であることや退勤済であることを Slack の Status として表示できるようになる。めっちゃ便利。

なお、オリジナルのアイディアとソースコードは 9m さんのものです。

必要なもの

準備

1. Slack の API Token を発行する

2. 9m さんの gist を clone し、手元で動かせるようにする

$ ghq clone https://gist.github.com/af5894ced5cc1ac38bfd2687cad7c780.git slack_status
$ cd clack_status
$ bundle install
$ echo "SLACK_TOKEN=XXXX" > .env
$ bundle exec app.rb "🍺" "退勤しました"

ちゃんと設定できてれば以下のようになる。

コマンドラインから Slack Status をアップデートしている様子

3. Automator を開き、クイックアクションを設定

新規作成で「クイックアクション」を選ぶ。

Automator を開き「クイックアクション」を新規作成

アクションの中からシェルスクリプトを選ぶ。

シェルスクリプトを選ぶ

実行したい処理をシェルスクリプトで書く。

実行したい処理をシェルスクリプトとして記載

自分は以下のようにしている。

export PATH="~/.rbenv/shims:$PATH"
export LC_ALL=ja_JP.UTF-8
export LANG=ja_JP.UTF-8
cd /Users/morygonzalez/src/gist.github.com/slack_status
bundle exec ruby app.rb "🚽" "放尿 or 脱糞中です"

なお、赤枠で囲った「ワークフローが受け取る項目」は「入力なし」にしておかないとちゃんと動かないので注意。

入力なしを選択

設定完了したら名前を付けて保存する。自分の場合は Slack トイレ などのような名前にしている。この作業を追加したいコマンドの数だけ繰り返す。

4. キーボードショートカットの割り当て

システム環境設定 -> キーボード -> ショートカット -> サービス の順に進む。正しく Automator でアクションを設定できていれば「サービス」の一覧に表示されるので、割り当てたいショートカットキーを割り当てる。

ショートカットの設定

5. BetterTouchTool で Touch Bar をカスタマイズする

タッチバーに表示されるボタンのアイコンとラベル文字を選び、タップしたときにショートカットキーが実行されるようにする。

BetterTouchTool で Touch Bar をカスタマイズ

こうすることで Touch Bar から Automator のクイックアクションが実行され、めでたく Slack の Status がアップデートされるようになる。

ちなみに自分の Touch Bar はこんな感じ。

Touch Bar の様子

ほこりをかぶってる Touch Bar を是非有効活用してあげてください。

Touch Bar がないパソコンを使っている人向けの情報

Touch Bar のない Mac を使っている人はこのやり方を使えないので Slack の Google Calendar 連携機能を使うと良いと思う。設定に Status Sync という項目があるのでこいつを On にすると、 Google Calendar で予定が入っている時間になると Slack の Status を自動で更新してくれる。

Google Calender の Status Sync

会議中であることくらいしか共有できないので Touch Bar にいろんなボタンを配置するのに比べたら不便だけど、カレンダーに予定を入れておくだけで Slack の Status を更新できるようになるのは便利。

今後の課題

良くありがちなのが「仕事中」の Status のまま退勤してしまうというやつ。夜中や週末も仕事している異常な人になってしまう。スマートフォンからも同様にめっちゃ手軽に Slack の Status をアップデートしたいけどまだソリューションを見つけられていない。情報お持ちの方いたら教えてください。

| @Mac/iPhone

Numbers.app

公共交通機関を使って登山に行くときは結構綿密に登山計画を立てる。登山口まで行けるバスはコミュニティバスのようなものが多く本数が少ないため、乗り継ぎや行程の時間管理に失敗すると登山できなくなったり帰れなくなったりする。特に長い距離の縦走を日帰りでやろうとすると時間の管理がシビアになる。コミュニティバスの最終時刻は精々 18 時くらいなので、その時間までに確実に下山しないといけない。もし下山できなかった場合はタクシーを呼んで大金を払って帰るか山で野垂れ死ぬしかない。なので準備が大事だ。

YAMAP やヤマレコに登山計画を立てる機能はあるが、あくまでそれは登山中の行程管理であって、行き帰りの公共交通機関の情報を含めた行程ではない。何時に家を出ると乗換駅には何時頃着いてバスはどれに乗れば良いか、バスの乗り換えはどこですればよいか、といった情報は登山計画には書けず自分で管理するしかない。

他にも、バスの時間を一本遅らせたときに後ろの行程にどのくらい影響が出るかを確認したいが、登山の行程と交通機関の行程が分離されていると影響を把握しづらい(手動で後ろの行程の時間をずらしていく必要がある)し、バスの時刻表や地図を埋め込んでおきたいが、画像の貼り付けやリンクには対応していない。

登山では(登山に限らず旅行などでも)プランA とプラン B を考えて、その日の体調や天候に応じて行程を変更するということがあり得ると思う。複数の計画を並列で眺めて比較検討したりするのも登山計画系のサービスではできない。

旅の計画とはつまるところタイムテーブルの管理であり、それはエクセル的なものが使いやすい。スタート時間を 5 分遅らせると後ろが何分遅れるかが簡単にわかる。この計画は何時間かかるのか、というのも勝手に計算してくれる。エクセル的なものであればリンクを埋め込んだり画像を貼り付けたりもできる。

ただ、 Microsoft Excel や Google Spreadsheet の弱点として、一つのシート(画面)に表示できるのは一つの表までだ。一つの画面で複数の表を並べて情報を整理したりできない。画像やリンクを埋め込むことはできるが、あくまで表情のどこかに置くという感じで使い勝手が悪い。セルの中に文字列が隠れてしまったりする。

Numbers は一つのシート(画面)に複数の表を表示できる。これにより関連する複数のデータを並べて情報を整理することができる。それぞれの表はグリグリ動かすこともできる。画像やリンクは表の一部としてではなく、独立したオブジェクトとしてシートの中に埋め込むことができる。こんな感じ。

Numbers

例えるなら表計算機能付きのスクラップブックといった感じだ。たいていのデジタルデータを取り込めて自由に配置でき、コメントを書いたりデータを表に集計して絞り込みしたりグラフ化したりもできる。

いろんなデータを取り込めると言えば Notion が思い浮かんだので同じようなことを Notion でやってみようとした。見た目はおしゃれだし画像やリンクの埋め込みは Notion の方に分があるが、表は作れるものの時間の計算ができない。行程管理において時間の計算ができないのは致命的だ。

Notion

SIer がドキュメント管理に Excel を使うのを嘲笑する風潮があるが(自分もかつて Excel で画面仕様書を作らされていて死ぬほど嫌だった)、何でも Excel で書くのは一理あるのかもしれない。

ただ、上に書いているように Excel には欠点があるので Mac が使えるなら断然 Numbers の方がよい。 Excel のようなマクロはないので高度な処理には向かないが、個人が普通に使う計算はできる。

Numbers のような機能を持ち、チームで共同編集もできる SaaS が出てくると市場を席巻できる気がする。 Miro などがそれに近いかもしれないが、ドローやダイアグラムに特化していてちょっとした計算や条件に応じたデータの絞り込みなどはできない。

話をもとに戻すと、個人が旅行計画のような図や写真、表を一元管理して情報を整理するような用途には Numbers が最適です

| @Mac/iPhone

家で仕事するようになって 3 ヶ月以上経つのだけど、これまでは会社から貸与されている MacBook Pro のディスプレイのみで仕事していた。どうしても大きなディスプレイで仕事したいときは私物 iMac を使うなどしていたけど、職場のルールが厳しくなって私物のパソコンで仕事することができなくなったし、夏で暑くなってきて MacBook Pro 本体のキーボードを触るのがいよいよ厳しくなってきたので、平日の夜に車で会社まで行って会社に持ち込んでいた私物の Dell 4K ディスプレイを自宅に持ち帰り、外付けキーボードで仕事をするようにした。 MacBook Pro 本体のペチペチキーボードよりも Happy Hacking Keyboard の方が快適だ。

ただ、これまで机の上は真ん中に iMac 5K が鎮座していたのでディスプレイの置き場に困ることになった。最初は iMac を真ん中において左にディスプレイ、右に MacBook Pro を置いてみたが、首を 120 度くらい左右に振らないといけないので非常に仕事しづらかった。なので真ん中にディスプレイを置いて左に MacBook Pro 、右に iMac を置くようにした。こんな感じ。

仕事モード

Dell の 4K ディスプレイは入力端子が 3 つあって、 HDMI と Display Port 、 Mini Display Port を受け付けるようになっている。すでに Display Port <-> USB-C ケーブルは持っていたので、 HDMI <-> USB-C のケーブルを買い足して、仕事用の MacBook Pro と私物の iMac 5K の両方に接続してみることにした。

日中仕事しているときは MacBook Pro の外付けディスプレイとして使い、夜は入力チャンネルを切り替えて iMac の外付けディスプレイとして使う。

遊びモード

結構いい感じなのだが問題があって、自分が持っている Dell のディスプレイは P2415Q というやつで、このシリーズの 2016 年 2 月以降の出荷モデルだと HDMI のモードを 2.0 に変更することで 60Hz 表示が可能になるが、自分が持っているのは 2015 年モデルなので 30Hz でしか表示できなかった。

30Hz 出力だと結構描画がかくかくする感じがあって地味にストレス。 Mini Display Port <-> USB-C ケーブルを買えば iMac からも MacBook Pro からも 4K@60Hz 出力できたのかもしれない。残念。

| @Mac/iPhone

リモートワークをするようになって会社から貸与されている MacBook Pro の本体キーボードを使うようになった。普段、会社には私物の 4K ディスプレイと Happy Hacking Keyboard を持ち込んで外付けキーボードと外部ディスプレイの組み合わせで仕事をしているが、在宅に切り替えるタイミングで MacBook Pro 本体だけ持ち帰り、キーボードやディスプレイはオフィスに置きっぱなしにしていた。本体のキーボードを使うようになったことで、キーが引っ込んだまま戻らなくなる例の問題に遭遇するようになった。

修理を依頼しようと Apple のサイトを覗いてみると、緊急事態宣言の影響か配送による修理受付は停止しているようだった。

しょうがないので修理は諦めて外付けキーボード使いたいのだけど、家に USB-C への変換用ドングルがなく困ってる(ドングルも会社に置いている)。 15 インチの画面もなかなか厳しいので iMac の画面を使って仕事ができないかと思ったが、自分が持っている iMac はターゲットディスプレイモードにならないモデルなので無理。

Rebuild のエピソード 266 で miyagawa さんが Mac mini から Remote Desktop で会社支給の Macbook Pro につないで仕事してるって言ってて、なるほどなと思って真似してみた。

私物 iMac から会社の MacBook Pro に vnc でつないでみる。しかし単なる画面共有だとキーボードショートカット使えなくて厳しかった( Command + Space で Alfred を呼び出そうとすると、クライアント側の Mac の Alfred が反応する)。 Apple Remote Desktop でならショートカットも使えるという未確認情報があるのだけど、値段が 10,000 円もしてちょっと試すには厳しいお値段。

一回オフィスに車で行ってディスプレイを持ち帰るとよさそうだなとは思うのだけど、またオフィスで仕事を始めるときにディスプレイを会社に持っていくのもなかなか厳しい(持ち帰るときとまたオフィスに持っていくときの二回、車で送ってもらわないといけない)。こういうことで悩まなくて済むくらいのお金が欲しい

| @Mac/iPhone

Eagle

S3 のバケットを事故で空にしてしまってとても悲しかったので、写真以外の画像もきちんと管理してみることにした。

これまで、仕事やブログ用に作った図表みたいなやつは作ったあと JPEG とか PNG に書き出してドキュメントに書き出した後は適当にデスクトップに置いてあって、ある程度時間が経ったら定期的に削除するような運用にしていた。図表自体は Pixelmator や OmniGraffle で作っているが、ちょっと作ったやつは元ファイルごと消してしまっていた。しかしそれでは今回のようにミスって S3 を飛ばしてしまったときにリカバリできなくなる。

というわけで Pixelmator や OmniGraffle で作ったオリジナルファイルを残していこうと思ったのだけど、これらはプレビューできないし、 Mac の中で仕事のプロジェクトのフォルダの中にあったり、 iCloud の Pixelmator のフォルダの中にあったりデスクトップにあったりで非常にごちゃごちゃしており、 Finder だけで管理するのは無理っぽいなと思った。写真以外の画像ファイルを管理できる何かが必要だと思って調べてみた。

この手のやつは Little Snapper というのを使っていたが、途中から名前が Ember に変わって Mac OS のアップデートについて行けずディスコンになった。 Little Snappter / Ember は結構気に入って使っていて、画面のキャプチャを撮って注釈の文字を入れたりする用途に使っていたが、本来はこれらはデザイナー用の画像管理ソフトだと思う。

色々調べていて Eagle というソフトが存在することを知った。 Eagle はなかなかよくて、 JPEG や PNG 、 Adobe の Photoshop 、 Illustrator に加え Pixelmator や OmniGraffle に対応している。デザイン系だけでなく各所にファイルが散らばりがちな MindNode (マインドマップアプリ)や Numbers 、 PDF 、 Keynote 、 Pages 、 MS Excel 、 MS Word などドキュメント系のファイルにも対応している。

要するにパワーアップした Finder という感じなんだけど、ファイルの中身をプレビューできて一括でタグ付けしたりフォルダ管理できるのが便利。 いわゆる「ファイルの壁」問題が解決できる。デスクトップや iCloud Drive に散らばってるやつをとりあえず一旦突っ込んで整理してみることにした。

UI は日本語翻訳があるのだけどあまり出来がよくなく、スクリーンショットを「スクショ」と略していたり、全体的に翻訳が調子こいてる若者風なのが気持ち悪い…。いまは言語を英語にして使ってみてる。日本語文字列の検索精度がいまいちなところも気になる。 年賀状 で検索しても 年賀状 という文字列を含むファイルがヒットせず、かわりに 年賀 で検索するとヒットしたりする。日本語周りに課題が多そうだ。そのほか、 Windows 版も存在するせいか、通知の UI が Notification Center の標準 UI とかけ離れているところもちょっと気持ち悪い。

同系統の Pixave というのを以前「できる Mac OS X Advent Calendar 2015」で知って試していたが、当時の自分は Little Snapper / Ember の代替となるキャプチャに注釈を入れられる機能を求めていたので用途に合わないと感じた。いまもう一度見てみて試してみたが、 Eagle 同様にデザインデータだけでなく様々なファイルを扱えて、いまの自分の用途には適合してそうだった。惜しむらくはあまり活発に開発されていないようだった( MindNode を取り込めるとウェブサイトに書いてあるが、最新バージョンの MindNode には対応していなかった)。Pixave は App Store の賞を受賞しているだけあって見た目がめっちゃおしゃれで Apple の標準 UI に準拠しており、使い心地は Eagle よりも Pixave の方がよい。もうちょい活発にメンテナンスしてもらえたらうれしい。

しばらく併用してどっちを使うか決めたい。

※ Pixave は韓国系の人が一人で作ってるみたい。以前好きで作っていた The Hit List ( ToDo 管理ソフト)も韓国系の人が作ってた。在米コリアンは優れたデザイナーが多いのだろうか。 The Hit List はめっちゃ UI が革新的だったのに更新が滞ってしまった。 Karelia という会社に買われたあとも更新が滞っている。 The Hit List のようにならないでほしい。