Magnolia Tech

いつもコードのことばかり考えている人のために。

「Bellroy Lite Laptop Sleeve 14inch」を買った

ノートPC、それなりに重いので日常的に持ち歩かないようにしている

けれど、さすがにまったく持ち歩かずに済む、というときばかりではないので、「Bellroy Lite Laptop Sleeve 14inch」というスリーブケースを買った

この手のケースは値段もピンキリだけど、しっかりとしたクッションが入っていて、手触りが良さそう、という点で選択

ファスナーの感じがいいよね

MacBook Proを入れてファスナーを閉めると、クッションも含めてなかなかの厚みになるけど、これなら安心できる

毎日持ち歩くなら色は黒でもよかったけど、たまにしか使わないので今回は白を選択

荷物の中で紛れないように

(自分が買ったら、Amazonの白の在庫が無くなったみたいだけど)

macOS Sonomaのインストールメモ 2024/7時点

新しいマシンが来ると本格的に使い始める前に、2回くらいは再インストールしたり、工場出荷状態に戻したりして、セットアップ手順を確認するようにしている

その作業メモ

事前準備

  • インストール対象のデバイスとは別のAppleバイス(iPhoneか、iPadか、他のmacか)を1台用意しておく

    認証コードの表示など、Appleバイスの方が楽なので、とにかく一台はあった方が良い あらかじめ同じApple IDでログインしておくこと

  • Apple IDのパスワードを変更しておく

    Appleバイスのセットアップが上手くいかない理由の一つにApple IDのアカウントロックが挙げられる 以前はApple IDのサービスサイトからロック状態の確認や解除ができたが、今では状態の確認もロック解除もできなくなっているので、事前にAppleバイスからパスワード変更を行なっておくと安心

    support.apple.com

再インストールの準備

工場出荷状態へ戻すのはログアウト等色々と面倒くさいので、単に自分のPCを再インストールするだけなら再インストールを行なった方が良い

通常の再インストール方法

support.apple.com

工場出荷状態へ戻す方法

support.apple.com

初期設定

言語(Select Language)

最初の設定は「言語」選択

日本で販売されているmacなら「言語」と表示される

ここでは「English」を選ぶ(ただの個人の好みの問題)-> 表示が「Select Language」に変わる

Select Your Country or Region

「Japan」

Written and Spoken Languages

「Dictation」の設定を「Japanese(Japan)」のみにする

その他はデフォルトのまま

Accessibility

何も設定しない

Select Your Wi-Fi Network

利用するWi-Fiのアクセスポイントを選択し、パスワードを入力する

Data & Privacy

特に設定項目なし

Migration Assistant

この時点では特に設定しない

(必要なドキュメントはiCloudか、外付けSSDに保存する)

Sign In with Your Apple ID

用意したApple IDでサインインする

なるべくiCloudのアカウントと同一の方がおすすめ(別のものを利用することもできる)

Apple IDと、パスワードを入力すると認証コードを求められるので、同じApple IDでログインしているデバイスに表示される認証コードを入力する

Create a Computer Account

アカウントを作成する

Full NameがApple IDから同期されるが、Account nameも同じにするとパス名が長くなってしまうので、短いものに変える

Make This Your New Mac

いくつかのカスタマイズができるが、ここでは何も設定しない

Touch ID

画面の指示に従って、設定する

Card Details

Apple IDに紐づいているクレジットカードが連携される

(Card Verificationが表示されるが、特に完了しないまま先に進んでしまった...なぜ?)

各種設定

Local hostname

Local hostnameで設定されているマシン名が、ターミナルのコマンドプロンプトに表示されるマシン名になる。

この名前がデフォルトではApple IDのFullnameと機種名から生成されるため、デフォルトでは非常に長い文字列となる

  1. 「General」→「Sharing」→「Local hostname」
  2. Editボタンで変更
  3. 「mbp2023」などの短い名前にする

Trackpad

「Tap to click」をオンにする(なぜこれがデフォルトで有効になっていないのか不思議なくらいの必須設定)

Keyboard

US配列キーボードの場合、絶妙な位置にcaps lockキーが配置されていて全然役にたたないので、controlキーに置き換える

「shortcuts」->「Modifier」で「caps lock」キーを「control」キーに設定

homebrewのインストール

macOS必須のソフトウェア、homebrewのインストール

brew.sh

インストールの途中で、Xcode Command line toolsも自動的に一緒にインストールされる、便利

SDKMANのインストール

JVMや、Scala、sbtなどのインストール管理用に、SDKMANをインストール

sdkman.io

その他

細かいことを言えば、Musicや、Finderの表示設定も変更するが、見た目の話だけなので割愛

意外と、最近はデフォルト設定から変えることが少ないなーと思った

US配列キーボードのMacBook Proを購入した

2001年にHHKBを使い始めて以来、ノートPCにしろ、デスクトップPCにしろ、US配列のキーボードに統一している

今回も、MacBook Proを購入するにあたって、当然US配列キーボードを選択した

たしか、2008年モデルのMacBook Pro、2011年モデルのMacBook Airを買った時は銀座のApple Storeに店頭在庫のあるUS配列キーボードのモデルを問い合わせて、在庫があるものをそのまま買った記憶がある

その後、2017年モデルのMacBook Proは、Apple Store OnlineでUS配列キーボード版を購入した

今回はApple Store OnlineでUS配列キーボード版を注文し、Apple Store新宿で受け取った

決済時に表示された到着予定日が注文日の2週間ほど先で、その日に合わせて外出の予定を決めていたのに、結局途中で1週間くらい納期が短くなり、急遽受け取りに行くことになってしまった

ちなみに、ビックカメラMacBook Proの一部モデルは店頭在庫でUS配列キーボードが置かれているが、オンラインでは分からず、店頭で問い合わせる必要がある

もう少しUS配列版の在庫情報が分かりやすいといいのだけど、どこも問い合わせてみないと分からないのは何故なのか...


M3を搭載したMacBook Proのレビューは至るところに載っているので、ベンチマークとかを改めて書く必要はないだろうけど、とにかく「このタイミングで反応が返ってきてほしい」という期待値通りに反応するのが気持ちいい

また、通常の使用ではファンの音は全く気にならないので、無音に近い 最近まで使っていたIntel MacBookが凄まじいファンの音を出していたのと対照的


毎回、「もうMacBookシリーズを買うのはこれが最後か」と思って、結局何世代も買い続けているのは何故なのか分からないけど、単に星の数ほどあるWindowsノートPCの中から選ぶのが面倒なだけかもしれない Surface Laptopが、US配列版&Officeバンドル無しなら買ってたかもなーと思っている

「Incase Hardshell Case for 14インチMacBook Pro」を買った

安めのWindowsノートPCだとあまり気にせず、カバーも無しに持ち歩くのだけど、しばらく使っているうちに「意外とぶつけているな...」みたいな跡が多数できて残念な気持ちになるので、MacBookとかは必ずハードシェルケースを装着したまま使うようにしている。

値段もピンキリだけど、買えるうちはなるべくIncaseのシリーズを買うようにしていて(割とすぐにディスコンになるので、古い機種だと買えないことも多い)、MacBook Pro 14インチ用のHardshell Caseを購入。

最新のモデルだと、細かなドットが表面に入っていて、手触りが気に入っている。

Apple Storeでも売っているけど、値段も違ったり、取り扱いが限定的だったりするので、要注意。

「MacBook Pro 14インチ用液晶保護フィルム 高精細・反射防止」を買った

昔、買ったばかりのPowerBookの液晶を傷づけてしまったトラウマから、ノートPCを導入すると必ず液晶フィルムを貼るようにしている。

別に貼らなくてもいいのでは?と思いつつも、この習慣だけは抜けない。

以前はMac関連のアクセサリの老舗、PowerSupportのフィルムを必ず購入するようにしていた(元祖ノートPCスタンドの「スパルタかます」がお気に入りだった)。

別のメーカーのものが全然ダメで、PowerSupportの液晶フィルムでやり直したら、貼りやすさが全然違ってた、という経験が有ったので。

www.pawasapo.co.jp

しかし、残念ながら2020年モデルのMacBook Air用のフィルムを最後に、新製品は出ていない。


実際にお店に行ってもあまり種類は無く、一番種類の多かったナカバヤシのものを購入。

特にこだわりはなかったけど、反射防止タイプ。

一番の特徴は剥離フィルムが3/1くらいのところで二つに分かれるようになっていて、貼り付けるときの場所合わせややりやすいところ。それにこの方式だとホコリも侵入しづらいし。

最初はどうしても気泡が入ってしまうけど、うまく一部分だけ貼り直しながらヘラで追い出すとかなり綺麗に貼れるところに、進化を感じる。

『13歳から鍛える 具体と抽象』...大人も今すぐ読むべき設計のスタート地点

設計の基本は、「具体と抽象」の間を自在に行ったり来たりできるスキルに有ると度々言われます。つまり、「具体と抽象はどう違うのか?」ということが理解できていないと良い設計はできないのです。

ではどうやって、この「具体と抽象」を学べば良いのか?

実践の中で何度もレビューを受けて、修正されて理解していく、というのも一つの道ですが、ここはやはり先人達の知恵に頼りましょう。

これまでも同じテーマで本を出版されていた細谷 功さんの最新作『13歳から鍛える 具体と抽象』はなんとこの「具体と抽象」を13歳に教える、という設定で極めて分かりやすく解説されています。

特に、”抽象とは「共通の特徴」で関係づけること”から始まる抽象化の過程「個別の具体を観察して」→「共通点を抽出して」→「名前をつける」...という一連の行動はまさにソフトウェア設計における抽象化の行為そのものです。特に最後の「名前をつける」ことの重要性は繰り返しソフトウェアのプラクティスの中でも語られてきました。

また、抽象と具体が綺麗に分かれるわけではなく、グレーな部分があること、階層に分かれること、抽象化と具体化を繰り返しながら対象を理解していくこと、抽象化が勉強やコミュニケーションに役にたつことなど、盛りだくさんの内容になっているので、飽きさせません。

ソフトウェア設計を行うすべての人に、ぜひ読んでほしい1冊です

しかし、100万部突破って書かれていますけど、10代で抽象化をしっかり学んだ世代が社会に出てきたら、我々の世代はどうすればいいんでしょうね......


ちなみに、実装における抽象化の話になるといつもこの資料を引っ張り出して紹介しています。このスライドも抽象化を学ぶ上ではとても学びがある内容になっています。

speakerdeck.com


これまでの細谷 功さんの抽象化に関する著書はどれもおすすめなのでぜひ読んでみてください。

『なぜ依存を注入するのか DIの原理・原則とパターン 』を読んで、”疎結合なアプリケーション”とは何かを考える

なんとDI(Dependency Injection)だけを扱う本の厚さが637ページ!

たぶん、もう日本で今後商業出版されることは無いであろう、DI(Dependency Injection)の解説書『なぜ依存を注入するのか DIの原理・原則とパターン 』を読みました。


はじめてDIに触れたのはGoogle Guiceだったのですが、いつの間にかオブジェクトがフィールドに生えてくる黒魔術的なテクニック、という印象でした。

”動的に実装を切り替える”、という意味ではPerlで実行時に設定に応じて実装を切り替えるモジュールをたくさん見てきたし、自分でも書いたことが有ったので、Javaなどの言語で実行時の実装選択の柔軟性を取り入れることが目的なのか、と理解していました。

しかし、この本を読むことで、DIとは保守のしやすいコードを書くためにアプリケーション全体を疎結合にするためのテクニック、ということを改めて理解することができました。

冒頭に、DIに対するよくある誤解として...

  • 依存注入は遅延バインディング(late binding)を行うときにしか用いられない。
  • 依存注入は単体(unit)テストをするときだけに関係してくる。
  • 依存注入はドーピングをしたAbstract Factoryパターンのようなものである。
  • 依存注入を導入するにはDIコンテナが必要である。

の4つが解説されています。

自分は完全にこの一つ目と四つ目の誤解にハマっていたわけです。

そもそも、本書ではDIコンテナを使わない、依存はコンストラクタ経由で渡す、という手法を徹底的に解説したのちに、プロパティベースの依存注入や、DIコンテナを使った注入の方法の解説に移る、という解説の流れを採っていて、あくまで「疎結合なコードとは何か?」を理解することを優先させる構成になっています。

ページ数は分厚いですが、冒頭の約100ページにわたって解説される「合成起点」、「コンストラクタ経由での注入」、「制御の反転(Inversion of Control)」という3つのキーワードを十分に理解できれば、この本を読む価値は十分に有ったと言えます。

後半の1/3も.NETベースのDIコンテナの解説になっているので、正直.NETでコードを書かない人にはあまり用は無いのですが、一口にDIといってもライブラリによってずいぶん思想が違うし、機能も違うんだな、ということが分かります。


一方で「実装を分離するためにコンストラクタのパラメータの一つとして実装のコードを持つオブジェクトを渡しましょう」というのは、DIという概念を知らずとも比較的自然に出てくる発想であって、あまりDIというテクニックや、DIコンテナというライブラリの豊富な機能に振り回されず、「どうしたら疎結合なコードになるか?」ということを優先して考えていくことが肝要である、ということも言えます。

どうしても概念的に高度なテクニックを使った方が「高度なコード」になると考えすぎる時期も有りますが、余計な複雑性を持ち込むより、シンプルに書き下すことがまずは大事ですよね。


ちなみに、ScalaにはAirframeというDIコンテナライブラリがあるのですが、個々の機能の必然性が今ひとつ分かっていなかったのが、この本を読むことで設計に対する理解が一段階高くなり、理解しやすくなりました。

github.com


きっと日本で今後DIだけの600ページ超えの技術書が出版されることは無いんじゃないかと思うので、.NET以外のプログラミング言語を使う人も絶対に買って読んだ方がいいですね!