My tech diary

ソフトウェアエンジニアをやっています。技術的内容を中心に調べたことを書いていきます。

Galaxy スマホの故障と二段階認証移行

年末のときの話。

引っ越し2日前というすごいタイミングで Samsung の Galaxy S9 Plus のスマホが突如として壊れた。 操作できないわけではなくて、内部的にはまったく問題なく動いているんだけど、画面が真っ黒で一切なにも映らない。 (正確には、画面上部に 3 本の緑っぽい線のみが映っている)

スマホの画面を触っていると、ロック解除失敗のバイブレーションがあったりするので、インプットは反応していそうなのだけど、最も大事なアウトプットが欠如している。 ディジタルデバイスは便利だけど、インタフェースを失ったディジタルデバイスはもはやただの金属だな...

引っ越し関連の連絡でひじょーに困るので、とりあえず古い SIM free iPhone に SIM を移して、電話はできるようにした。


Galaxy が直る気配は全く無かったので、速攻で Google Store から Pixel 4a を購入した。 新端末が届いて、こちらに SIM を入れ替えることで、引き続き、最低限電話とネットはできるように。

スマホの写真などのデータ的な部分では大抵バックアップができているはずだから、問題ないけど、ユーザ登録してないアプリのデータとか、2段階認証とか、各種 pay アプリの移行とか、旧端末が復活してくれないと困ることはたくさんある。。

あと LINE は使えないと不便だから、 (引き継ぎしないと、前回乗り換え以降のデータなどが消えてしまうのだけど)、泣く泣く、新端末が届き次第、引き継ぎ処理をせずに、すぐに新端末で使用を開始した。


さて、旧端末の方だけど、ごくごくまれに画面が映る時があって、それでもしや直ったか!?と思うと、すぐに見えなくなる。 その一瞬のすきを突いた移行作業とかストレスフルなので、なんとかならないかなと、原宿にある "Galaxy Harajuku" に年末にわさわざ行ってみた。

地下1Fの修理サポートで、故障端末を見せて、画面映らないんですけど、って言って見せてみたら、あれ、映る。。 いや、さっきまで映らなかったんですけどね〜とかいいながら、真っ黒にならないか待ってみたけど、いや、映る。。。

ディスプレイの交換だと、新端末購入と変わらないくらいかかりますね、っていうことだったので、また壊れたら持ってきますね、とか言って帰ったのだけど、しばらく外で使っていても、いや、普通に映るし、操作できたんですよね。ところが、原宿の駅についた途端、また真っ黒に。

そこで、ピンときました。 Galaxy Harajuku の地下1Fもめちゃくちゃ照明で明るかった。その日は晴れていて、外も非常に明るかった。でも原宿駅のホームは暗い。 そうです、画面を明るい光の下に持ってくると、画面が映るんです。なんじゃそりゃ。

試しに家でもスポットライトのすぐ下にまで持ってくると映る。離すと消える。もっと早くに知りたかったけど、なにか研究で一つの真実を突き止めたような喜びは得られた笑


そんなことで、旧スマホをスポットライトで照らしながらの移行作業が始まりました。

なかでも 2 段階認証ですが、全て Google Authenticator を使っていたんですが、バックアップコードの取得も適当にやっていたので、これが移行できなかったら、ほんとに辛かった。 秋に Facebook でやらかしてから 2 段階認証入れまくったのですが、それが裏目に出たか、、という事態になりかけたので、ほんとに良かった。

Google Authenticator の移行は実に簡単です。

アプリ右上の3点リーダーのメニューから [Transfer accounts (アカウントを移行)] を選択、旧端末の方で [Export accounts (アカウントのエクスポート)]、新端末の方で [Import accounts (アカウントのインポート)] を選べば OK です。

なお、同じアカウントに対する2段階認証を、複数端末の Google Authenticator アプリから利用できるようにする方法もあるっぽいので、バックアップ用にやっておいたほうが良いかも。 今回のような端末の故障時は結構詰むので。。

References

カードリーダーを使わずに e-Tax で確定申告

表題のとおりです。時期遅れは否めない。

今年は住宅ローン減税の恩恵を受けるため、何が何でも確定申告しなければならなかったんですが、ずぼらにずぼらを重ねた結果、コロナで延びた申告期限である 4/15 に滑り込みセーフという危ない橋を渡りました。 Twitter 見てたら、他にもそういう人多そうではあったけど。

激混み税務署には行きたくなかったので (コロナで延ばした意味ない...)、コロナの国民給付金のときにも便利だった、スマホがマイカードのカードリーダー代わりに使えるというのがいけるらしいというので、 e-Tax で確定申告してみることにしました。 (カードリーダー購入したら今までも e-Tax できたんですが、間違いなくこれでしか使わないカードリーダーをわざわざ買うのかといえば。。 ID/PW 方式もあるみたいだけど、ちゃんと調べてない)

結論からいえば、できたんですが、謎技術のオンパレードだし、罠多すぎという感じでした。

(備忘録として書いてますが、もう終わった後にこれ書いても参考にならんかも。来年には多くが改善されてそうだし)

前提

私の場合、妻が昔始めた趣味のネットショップをやってる背景で、個人事業主登録していて、青色申告しないといけないので、そこのハードルがありました。 (青色申告するほどの事業でもないんですが......)

https://ninnyhammer.buyshop.jp/

いわゆる事業所得(青色・白色)の申告をする場合は、スマホだけでは e-Tax では完結しません。

青色・白色申告しない場合で、雑所得や各種控除等を含めて所得税の申請するだけであれば、 PC も要らなくて、スマホだけで申告完結するそうです。 (出産などに伴う医療費控除や、初年度の住宅ローン控除を受ける場合は、会社員も確定申告必要ですが、ボリュームゾーン的にそういうケースを最優先しているんですかね) (こちらは Android, iPhone ともに対応していて、 "マイナポータルAP" アプリだけで完結するとのこと)

以下で書くのは、事業所得の申告を e-Tax で行う場合の話です。

なお、面倒な場合は、税務署で書面で申告しても良いのですが、その場合は、今年から青色申告の控除額が 55 万円になってしまいました。引き続き 65 万円の控除を受けるためには、 e-Tax を行う必要があるので、ご注意を。税務署は 17 時に対面は閉まっちゃうけど、 e-Tax の場合は、申告期間の 23:59 まで受け付けてくれるというメリットもあります。

なお MoneyForward や freee のスマホアプリからも有料プランユーザなら電子申告できるらしいです。

準備するもの

  • マイナンバーカード
  • マイナンバーカード関連の暗証番号
  • Windows PC (Bluetooth 搭載の Windows 8.1, Windows 10 対応です。家にあったのが古い Windows 8.1 PC だったけど、なんとかできた) (macOS 未対応です)
  • Android スマホ (PC と接続するカードリーダーとして利用する機能は iPhone 未対応です)
  • 利用者識別番号 (電子申告・納税開始届出によって取得します。これも Web 上でできます。住所変更 (所轄税務署の変更) は Web でできなかったけど...)

事前準備

手順

手順 7 から先はオプションです。住宅ローン控除を利用する場合は、添付書類を提出する必要があるため、この手順が必要になります。

  1. Windows PC で Internet Explorer 11 (!?) を起動し 国税庁 確定申告書等作成コーナー を開く
  2. 申告書等の作成を開始し、 "e‐Taxで提出 マイナンバーカード方式" を選択する
  3. 事前準備セットアップのチェックが入るので、まだ済んでいない場合は "事前準備セットアップファイル" (jizen_setup.exe) をダウンロードし、インストールしておく
  4. "マイナンバーカードの読み取り" 画面が出てくるので、 Android スマホで "JPKI利用者ソフト" を起動し、 "PC接続" > "PC接続の開始" を実行した上で、マイナンバーカードをスマホに押し当てた状態にし、 PC ブラウザ上の "マイナンバーカードの読み取り" ボタンを押して、画面の指示にしたがう (以下、マイナンバーカード認証を求められたときには同様に行う)
  5. "青色申告決算書・収支内訳書" の作成、 "所得税の確定申告書" の作成を順次行う
  6. 申告データにマイナンバーカードで電子署名した上で、 e-Tax で送信する (この過程でも何度かスマホを使ったマイナンバー読み取りが求められる)
  7. e-Taxソフト(WEB版) を開く
  8. 申告の際に案内された添付書類 (PDF) をアップロードして提出する

References

画像を連結してPDFファイル生成

今年、確定申告を e-Tax で完結させたんですが、住宅ローン関連の書類を PDF でアップロードしなければならなかったので、その際に役立った TIPS です。

元の書類は紙なので、スキャナーが手元になくて、コンビニ行くのも面倒な場合 (そもそも住宅ローン関連の書類は厳重にホッチキス留めされていて、スキャンしにくいし)、スマホで写真撮影して、それを PDF にしたくなりますね。

知らなかったんですが、 ImageMagick を使えば、簡単に複数画像を結合して 1 つの PDF ファイルにできました。

convert image0.jpg image1.jpg image2.jpg output.pdf

複雑なオプションなども要らなくて、いや、楽でした。

References

生活hack vol.01 両面テープを綺麗に剥がす

はじめに書いておきますと、この記事はソフトウェアとは何の関係もありません。 興味がある人だけ読んでください。

いよいよ引っ越しが近づき、今の借家の片付けをしないといけなくなってきました。 できれば、現状復帰させ、できるだけ敷金が返ってくるようにしたいものです。

ちょっとすごく上手くいったので、感動して、共有したくなりました!

両面テープを綺麗に剥がす

lifehack_01_01.jpg

まず、この写真。これをみて、何なのか分かりますかね? そうです、小さな子供がいると、洗面所の下の戸棚を勝手に開けて洗剤とかを飲んでしまって危険なので、簡単に開けられないようにするやつです。

lifehack_01_02.jpg

これ、こんな感じで戸棚の扉にネチョネチョの分厚め両面テープでしっかりと固定されてしまって、びくともしません。素手だとまるで動きませんし、無理やり取ろうとすると扉の塗料まで剥がれてしまいそうです。

lifehack_01_03.jpg

これを取るのに使ったのがこちら。ドライヤーと手ピカジェルです。 両面テープは熱とアルコールに弱いと書いてあったので、こちらを用いました。

lifehack_01_04.jpg

まず、接着部にドライヤーの風をあてて、熱で温めます。

あまり近づけ過ぎたり、長時間当てすぎると、扉の木材が発火しかねないので、その点だけは十分に気をつけてください。手で触って温かい程度、お風呂の温度くらいまで上がれば十分です。燃えやすいものが周囲にないかなども本当に気をつけて行ってください。

lifehack_01_05.jpg

温かくなってきたら、ヘラ状のものを隅から差し込んで少し隙間を作れそうなら作ってください。まだ無理やり広げないように・・・

lifehack_01_06.jpg

この隙間を狙って手ピカジェルを少量流し込みます。そして、さらに浸透させるべくドライヤーで温めます。 この作業を慎重に繰り返し、端から隙間を広げていきます。

lifehack_01_07.jpg

剥がれました! 写真を撮っていなかったのですが、もう片方の方はもっとうまく剥がれたんですが、こちらは写真撮りながらだったからか、ちょっと下手くそ・・・

あとはこれを手でコネコネしながら剥がしていきます。

lifehack_01_08.jpg

全くわからないくらい上手く剥がれましたね。

今回は塗料がしっかりしていたので、上手く剥がれましたが、薄い塗料の場合はそうはいかないと思います。状況によっては自分で剥がさない方がいいかもしれないので、そこは自己判断でお願いします。

クレヨンの汚れを綺麗に落とす

lifehack_01_09.jpg

次はこちら。子供による汚れの定番、クレヨンです。

lifehack_01_10.jpg

こちらは調べるとすぐに出てくるんですが、何と女性が化粧を落とすのに使うクレンジングオイルが有効だそうです。

クレヨンは油性の汚れなので、同類のオイルに溶かし込んじゃおうということですね。世界を支配しているのは、常に、物理と化学です。

lifehack_01_11.jpg

ティッシュに少量クレンジングオイルを染み込ませます。

lifehack_01_12.jpg

これで拭いてあげると・・・

lifehack_01_13.jpg

あら、不思議。こちらも、もはやどこが汚れていたのかわからないくらい、綺麗に取れました。 ただ、クレンジングオイルというだけあって、表面が油っぽくなってしまうので、少量の石鹸水を染み込ませたティッシュで後拭きしておきましょう。

こちらも表面が凸凹していたり、油を吸いやすい素材だったりすると、なかなか上手くいきませんので、自己責任の元、判断してください。

お掃除屋さんはこの辺りのノウハウ、いろいろ知っているんでしょうね。

以上、知っているか、知っていないかで差がつくライフハックでした。

References

EC2 Mac instance でCI環境を作る(未完)

re:Invent 冒頭で、いきなりビッグニュースが飛び込んで来ましたね、 AWS EC2 の Mac instance! 事前観測も自分の知る限り見なかったので、これは驚いた人が多かったのではないでしょうか!?

用途としては、まずは真っ先に iOS 向けの CI 環境構築が視野に入ってくるかと思います。 (価格的には、現時点ではなかなか視野には入ってこないですけど)

そこで、お遊びですが、実際に CI で使うことをイメージして、 Mac Instance を立ち上げてみることにしました。 (最後に書いているように、まだうまくいっていません)

まずは触ってみる

今日の時点で、 Mac instance が利用できるのは以下のリージョンとなっています。

  • US East (N. Virginia)
  • US East (Ohio)
  • US West (Oregon)
  • EU (Ireland)
  • Asia-Pacific (Singapore)

早速 EC2 dashboard から作成してみます。

なお、後述しますが、はじめ試しに Singapore region で作ろうとしたんですが、リリース直後で人気があるためなのか、ホストを取得できなかったので、やむなく取得可能だった Ohio region で作成しました。

[Incetances] > [Launch instances] ボタンを押すと、早速 macOS が選べるようになっています。 Catalina or Mojave が選べるようですね。 (Big Sur は comming soon とブログには書かれています)

  • macOS Catalina 10.15.7 - ami-00692c69a6f9c6ea1
  • macOS Mojave 10.14.6 - ami-0f9804951520118c4

AMI ID は Ohio の場合です。

ec2_macos_instance_choose_ami.png

Catalina を選んでみました。

次は instance type 選択画面ですが、こちらは mac1.metal しか選べません。 bare metal instance とは、非仮想化で動く、ハード専有インスタンスのことです。 ざっくりといえば、クラウド上でレンタルサーバを動かしているようなイメージですかね。。 料金そこそこするので、起動しっぱなしにしないように注意です。 ブログによると、裏では Mac mini が動いているようです。

12 vCPUs, Memory 32GiB となっています。

ec2_macos_instance_choose_instance_type.png

次は instance detail 設定画面です。 こちら、下の方にスクロールしていくと、 [Host] の設定が求められているので、 [Allocate a new host] をクリックして、専有ホストを割り当てます。

ec2_macos_instance_configure_instance_detail.png

クリックすると [Allocate Dedicated Host] という画面が出てくるので、例えば、以下のような項目を入力して [Allocate] ボタンを押します。 (CLI コマンドがコピーできるようになっているので、後のためにコピーしておきましょう)

  • Name tag: tearoom6-test
  • Instance family: mac1
  • Instance type: mac1.metal
  • Availability Zone: us-east-2b
  • Instance auto-placement: Enable
  • Quantity: 1

Mac instance では Host recovery はサポートされていないため、チェックを外しておいてください。

先ほど書いたように、はじめは Singapore region で取ろうとしたんですが、 Insufficient capacity. というエラーが出て、取れなかったので、上記のように Ohio region で取得しました。 (スクショと異なるのはそのためです・・・)

また、一度 allocate すると、少なくとも 24 時間は return できない点にも注意です。 dedicated host の単価は Ohio region で $1.083 / hr となっていますので、特に割引オプションを使わなければ 24 時間で 3000 円近くかかるわけですね、たぶん。

ec2_macos_instance_allocate_dedicated_host.png

さて、 Host を取得した後、 instance 作成画面に戻ると、先ほどの [Host] の箇所が選べるようになっているので、取得できた Host を割り当てます。

ec2_macos_instance_configure_instance_detail_host.png

EBS の設定画面では、デフォルト 30 GiB となっていますが、これでは小さいので 200 GiB に変更しておきます。 ただし、ここのディスク容量を大きくしても、起動直後は 30 GiB しか容量が確保されていない状態になってしまいます。 (後述)

Security Group の設定画面では SSH (TCP 22) と VNC (TCP 5900) を開けておきました。 (でも、今回のように VNCSSH port forwarding で行う場合は、 SSH のみで十分ですし、その方が推奨されます)

ec2_macos_instance_configure_security_group.png

[Launch] ボタンを押すと、 Linux 系の instance を立ち上げた際と同様 SSH key を指定できるダイアログが出てくるので、新規作成します。

ec2_macos_instance_ssh_key.png

Launch 後、 instance が使えるようになるまでは、結構時間がかかるようです。 Status checks のところが System status checks が passed になるのは比較的早いんですが、 Instance status checks の方がかなり時間がかかります。しかも、途中 Instance reachability check failed みたいなエラーが表示されるので、ハラハラします。

ちなみに instance を何らかの事情で一度 terminate した後、別の instance で Dedicated Host を使えるようになるまでも結構小一時間くらい待たされます。

無事 instance の Status checks に pass したら、まず SSH access してみます。 ユーザ名は macOS の場合も ec2-user となっています。

# @macOS@localhost
chmod 400 tearoom6-ec2-mac.pem
ssh -i tearoom6-ec2-mac.pem ec2-user@ec2-18-217-163-168.us-east-2.compute.amazonaws.com
#
#              .:'
#          __ :'__       __|  __|_  )
#       .'`  `-'  ``.    _|  (     /
#      :          .-'   ___|\___|___|
#      :         :
#       :         `-;   Amazon EC2
#        `.__.-.__.'    macOS Catalina 10.15.7
#
# ec2-user@ip-172-31-24-151 ~ %

ちょっとこのリンゴが出てきた時は嬉しいです! macOS から macOS に繋ぐのは斬新な感じですね・・・!

さらに、クラスメソッドさんの記事の追体験に過ぎないのですが、 VNC でも繋いでみます。

SSH access したまま、接続用のユーザを生成します。 <password> のところには、設定したいパスワードをセットしてください。

# @macOS@ec2
sudo dscl . -create /Users/tearoom6
sudo dscl . -create /Users/tearoom6 UserShell /bin/bash
sudo dscl . -create /Users/tearoom6 RealName "Tomohiro Murota"
sudo dscl . -create /Users/tearoom6 UniqueID "1010"
sudo dscl . -create /Users/tearoom6 PrimaryGroupID 80
sudo dscl . -create /Users/tearoom6 NFSHomeDirectory /Users/tearoom6

sudo dscl . -passwd /Users/tearoom6 <password>
sudo dscl . -append /Groups/admin GroupMembership tearoom6

続いて、コマンドで VNC サーバを起動します。 <password> のところに、先程と同じ値をセットするのをお忘れなく。

# @macOS@ec2
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart \
  -activate -configure -access -on \
  -clientopts -setvnclegacy -vnclegacy yes \
  -clientopts -setvncpw -vncpw <password> \
  -restart -agent -privs -all

VNC は直接繋ぐと、セキュリティ上のリスクがあるため、 SSH tunnel を通して行います。 localhost の空 port 5901 を用いています。

# @macOS@localhost
ssh -i tearoom6-ec2-mac.pem -L 5901:localhost:5900 ec2-user@ec2-18-217-163-168.us-east-2.compute.amazonaws.com

この状態で Finder の [Go] > [Connect to Server] で vnc://localhost:5901 に接続します。

ユーザ名とパスワード入力ダイアログが出てくるので、先ほど設定したものを入力します。

ec2_macos_instance_vnc_sign_in.png

すると、 macOSGUI が現れます。 macOS 上のログイン画面が表示されますが、私の場合、この時点では ec2-user しかリストに出てきませんでした。 そのため、 VNC 画面上で macOS の [Restart] を実行しました。すると、 EC2 上の Status check が再度落ちてしまいますが、 5-10 分くらい待っていると、また正常に戻ります。 その後、同じ手順で VNC アクセスをすると、今度は、先ほど作成したユーザがリストに出てきます。

ec2_macos_instance_vnc_mac_login.png

もう、この後は普通に macOS 触っているのと同様の感覚です。セットアップを済ませると、 GUImac を動かせます。 でも、ローカルか EC2 か、どっちを操作しているのか、注意しないと危ないですね。

いきなり Big Sur へのアップデートを勧められたんだけど、これ押したらどうなるんだろう・・・

ec2_macos_instance_vnc_software_update.png

なお、 aws コマンドで EC2 起動までを上記と同様に実行するには、例えば、以下のようにします。 (Ohio region の場合) AWS のブログの記載の通りにやると HostId の指定が足りなくてエラーになります。 (auto assign はされません)

aws ec2 allocate-hosts \
  --instance-type mac1.metal \
  --region us-east-2 \
  --availability-zone us-east-2b \
  --auto-placement on \
  --quantity 1

aws ec2 create-key-pair \
  --key-name tearoom6-ec2-mac \
  --region us-east-2

aws ec2 create-security-group \
  --group-name macos-instance \
  --description "Security Group for macOS instance" \
  --vpc-id vpc-a976bfc0 \
  --region us-east-2

aws ec2 authorize-security-group-ingress \
  --group-id sg-024ad680e59b1113c \
  --protocol tcp \
  --port 22 \
  --cidr 113.xxx.xxx.xxx/32 \
  --region us-east-2

aws ec2 authorize-security-group-ingress \
  --group-id sg-024ad680e59b1113c \
  --protocol tcp \
  --port 5900 \
  --cidr 113.xxx.xxx.xxx/32 \
  --region us-east-2

aws ec2 run-instances \
  --region us-east-2 \
  --instance-type mac1.metal \
  --image-id ami-00692c69a6f9c6ea1 \
  --key-name tearoom6-ec2-mac \
  --security-group-ids sg-024ad680e59b1113c \
  --block-device-mappings "[\
    {\"DeviceName\": \"/dev/sda1\", \"Ebs\": {\"VolumeType\": \"gp2\", \"VolumeSize\": 200, \"DeleteOnTermination\": true}}\
  ]" \
  --placement "{\"Tenancy\": \"host\", \"HostId\": \"h-0e807d0d4457f6c1e\"}" \
  --associate-public-ip-address

References

Homebrew をインストールしてみる

まず Homebrew をインストールしてみます。

# @macOS@ec2
sudo chown -R $(whoami) /usr/local/*
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

1 行目は、以下のようなエラーが出るのを防ぐために行っています。

error: could not lock config file /usr/local/Homebrew/.git/config: Permission denied
fatal: could not set 'core.repositoryformatversion' to '0'
Failed during: git init -q

mas-cli/mas: Mac App Store command line interface をインストールしておきます。

# @macOS@ec2
brew install mas

続いて "App Store" app で Apple アカウントに sign in した上で mas で Xcode をインストールしようとすると、以下のようなエラーが発生。

# @macOS@ec2
$ mas install 497799835
Error: Download failed: NOT_ENOUGH_SPACE_SPECIFIC

App Store で直接インストールしようとしても、以下のエラーが出てきます。

We could not complete your purchase.

There is not enough disk space available to install the product.

References

ディスク (container) 容量拡張 (試行中)

起動直後にディスクの状況を確認すると、以下のようになっていました。 本来のディスク容量は 200 GB 超あるのに、 32 GB しか利用できていないことがわかります。

# @macOS@ec2
$ df -h
Filesystem      Size   Used  Avail Capacity iused     ifree %iused  Mounted on
/dev/disk2s5    30Gi   10Gi   11Gi    49%  488252 312036148    0%   /
devfs          186Ki  186Ki    0Bi   100%     644         0  100%   /dev
/dev/disk2s1    30Gi  5.8Gi   11Gi    35%  154781 312369619    0%   /System/Volumes/Data
/dev/disk2s4    30Gi  2.0Gi   11Gi    16%       1 312524399    0%   /private/var/vm
map auto_home    0Bi    0Bi    0Bi   100%       0         0  100%   /System/Volumes/Data/home

$ diskutil list
/dev/disk0 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *214.7 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                 Apple_APFS Container disk2         32.0 GB    disk0s2

/dev/disk1 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *121.3 GB   disk1

/dev/disk2 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +32.0 GB    disk2
                                 Physical Store disk0s2
   1:                APFS Volume Macintosh HD - Data     6.3 GB     disk2s1
   2:                APFS Volume Preboot                 80.1 MB    disk2s2
   3:                APFS Volume Recovery                529.0 MB   disk2s3
   4:                APFS Volume VM                      2.1 GB     disk2s4
   5:                APFS Volume Macintosh HD            11.0 GB    disk2s5

空き容量いっぱいまで APFS container サイズを拡張しようと、以下のコマンドを打ってみました。

# @macOS@ec2
diskutil apfs resizeContainer /dev/disk2 0

しかし、状況は変わりませんでした。

他にもいろいろ試してみたんですが、一向に状態が変わりませんでした。 ちょっと知識不足を痛感していて、非効率なので、いったん作業を中断しました。 (お金もかかるし...1時間につき100円溶けていく...) 今はまだネット上にも情報も少ないし、このダンジョンに行くにはレベル上げが必要なようです...。

References

最速 Homebrew

タイトル負けしそうな感じしかしない・・・。

私の最新の Homebrew の使い方をまとめておきます。

昔書いた以下の記事も参考にしていただければです。

セットアップ

基本方針として brew bundle を使うようにしています。

まず Homebrew を公式ページにある通りにインストールします。

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

brew bundle は明示的にインストールしなくても大丈夫です。

あとは、あらかじめ用意しておいた Brewfile のあるディレクトリで brew bundle を実行すれば、必要なものを全て入れてくれます。 とても簡単。

brew bundle

参考までに、私の Brewfile を晒しておきます。

https://github.com/tearoom6/dotfiles/blob/master/Brewfile

こんな感じで、一時的にインストールしたけど、全ての環境で使うわけではない、という場合は、コメントアウトしておくと、使いたい時だけ使えて便利ですね。

バージョン管理

brew bundle を実行すると Brewfile.lock.json が生成されますが、こちらはインストールした際のバージョン情報を記録するものであって、例えば Bundler の Gemfile.lock などとは違って、インストールされるバージョンを固定するものではないそうです。

Homebrew 自体が、特定のバージョンをインストールするという機能を備えていないからです。 (代替方法として、バージョンごとの formula を指定できるようにしている場合はありますね)

したがって、運用としては、定期的に最新バージョンにアップデートしておく、ということになるかと思います。

Homebrew インストールしている全てのバージョンを アグレッシブに アップデートするには、以下のようにすれば OK です。

brew update
brew upgrade --cask --greedy
brew bundle

References

macOS Dock は挙動不審

今日は小ネタです。 Docker じゃなくて Dock の方です。 以前から気にはなっていたんですが、ちょっと macOS の Dock の挙動について調べてみたので、記事にしてみます。

以下の挙動は、全て macOS Big Sur (11.0.1) で確認しました。

結果、思っていた以上に挙動不審で、闇を抱えていました・・・ (たぶん、歴史的経緯とか、それなりの理由とか、あるんだとは思うけど)

Dock は画面上部には持ってこれない

これは個人的にはすごくやって欲しいんですけど、仕様的に Dock を画面上部に持ってくることはできないようです。 理由としてはおそらく Menu bar と被るから。それなら Menu bar も移動できるようにしてくれよ、と思ったりしますが、そういうわけにもいかないんでしょう。

System Preferences の設定項目の中では、これは [Dock & Menu Bar] の中にあります。

こちら、 macOS Catalina までは、単に [Dock] というメニュー項目でした。さすが Big Sur はメジャーバージョン上げているだけあって、 UI/UX も刷新していますね。

Dock 全般のその他の設定も可能になっています。

macos_system_preferences_dock_and_menu_bar.png

デュアルディスプレイにしたとき Dock の出現パターンは、ディスプレイの配置に影響される

まず、ここでの記述内容は、後述する System Preferences の [Mission Control] メニューの [Display have separate Spaces] にチェックが入っている前提での話になります。

macos_system_preferences_mission_control.png

この状態で、モニタを MacBook につなぎ、ミラーリングではなく、デュアルディスプレイとして使います。

そして System Preferences の [Displays] を開けば、 "メインディスプレイ" の方には、 [Arrangement] というタブが表示されるはずなので、それを選んで、ディスプレイの配置を調整します。

このとき、まず下のように、ディスプレイを左右に並べて配置した場合

macos_system_preferences_displays_arrangement_001.png

  1. Dock のポジションが Left の場合
    • 1 のディスプレイの左端にのみ Dock が出現
  2. Dock のポジションが Right の場合
    • 2 のディスプレイの右端にのみ Dock が出現
  3. Dock のポジションが Bottom の場合
    • 1, 2 両方のディスプレイの下端に Dock が出現

まぁ分からなくはない仕様ですね。

続いて、 1, 2 のディスプレイを左右逆に、左右に並べて配置した場合

macos_system_preferences_displays_arrangement_002.png

  1. Dock のポジションが Left の場合
    • 2 のディスプレイの左端にのみ Dock が出現
  2. Dock のポジションが Right の場合
    • 1 のディスプレイの右端にのみ Dock が出現
  3. Dock のポジションが Bottom の場合
    • 1, 2 両方のディスプレイの下端に Dock が出現

パターンが分かってきた気がします。

その調子で、以下のように上下に並べて配置した場合も確かめてみたとき、異変が起こります。

macos_system_preferences_displays_arrangement_003.png

  1. Dock のポジションが Left の場合
    • メインディスプレイ (この場合 1) の左端にのみ Dock が出現
  2. Dock のポジションが Right の場合
    • メインディスプレイ (この場合 1) の右端にのみ Dock が出現
  3. Dock のポジションが Bottom の場合
    • 1 のディスプレイの下端にのみ Dock が出現... のように見せかけて
    • 赤い楕円で囲ったエリアの下端でカーソルをゴリゴリ押し当てていると、 1 のディスプレイの下端に Dock が出現

お分かりいただけたでしょうか。説明してもわかりにくと思うので、ぜひやってみてください。

Dock のポジション、および、ディスプレイの配置方向において、上下と左右というのは同列の扱いではなく、明らかに非対称な動作を伴うものなのだということがわかります。そのことも考えて、使いやすいようディスプレイを配置する必要があるようです。

(ディスプレイの配置、上下派で、 Dock のポジション、左端派の自分にとっては、嬉しくない仕様です...)

なお、一番最後のケースの説明で "メインディスプレイ" という言葉を使っていますが、実はこのメインディスプレイは切り替えることができます。

同じ [Arrangement] の設定画面で、ディスプレイの上部に白い枠がありますが、これをドラッグドロップでもう一つのディスプレイに持っていけば、そちらがメインディスプレイに切り替わります。

macos_system_preferences_displays_arrangement_004.png

この状態では、メインディスプレイは 2 の方ですから、 Dock のポジションを Left または Right に持ってきた場合 Dock が出現するのは 2 のディスプレイの方になります。

ただし、メインディスプレイの変更による影響は Dock だけに留まらないため、その点はご注意ください。

(だいたいは) メインディスプレイの方にだけ Dock が出現できるように設定可能

先ほどチラッと書いたんですが System Preferences の [Mission Control] メニューに [Display have separate Spaces] という項目があります。

こちらのチェックを外すと、下のように Requires log out とのメッセージが出るので、その通り、ログアウトして、ログインし直すと、この設定変更が有効になります。

macos_system_preferences_mission_control_displays_have_separate_spaces.png

これをすると、どのような変化があるのかというと、以下のようになります。

ディスプレイの配置が左右の場合:

  1. Dock のポジションが Left の場合
    • 左側ディスプレイの左端にのみ Dock が出現
  2. Dock のポジションが Right の場合
    • 右側のディスプレイの右端にのみ Dock が出現
  3. Dock のポジションが Bottom の場合
    • メインディスプレイの下端にのみ Dock が出現

ディスプレイの配置が上下の場合:

  1. Dock のポジションが Left の場合
    • メインディスプレイの左端にのみ Dock が出現
  2. Dock のポジションが Right の場合
    • メインディスプレイの右端にのみ Dock が出現
  3. Dock のポジションが Bottom の場合
    • メインディスプレイの下端にのみ Dock が出現
    • さっきみたいに、境目部分にゴリゴリカーソルを当てても、 Dock はサブディスプレイの方には出現しない

つまりは、いずれのケースでも、どちらか片方の画面にしか Dock が出現しないようになるんですね。そして、多くのケースでは、それはメインディスプレイです。

ただし、この設定は Dock 以外にも影響があり、 Menu bar もメインディスプレイの方にしか出現しないようになります。個人的にはそれじゃない感が強い。

以上、謎多き Dock の挙動でした。

え、トリプルディスプレイの場合?? 以上ですー。

References