Masteries

技術的なことや仕事に関することを書いていきます.

忘備録: Macで特定のディスプレイを繋いだときに映らない問題への対応

Macで、ある特定のディスプレイを繋いだとき「だけ」映らない、という問題が発生していました。そのとき、ふと id:xtetsuji さんが「とりあえずMacのログをClaude Codeとかに食わせたら解決できるんじゃないですか?」と仰ったので試してみたところ、本当に解決できたので忘備録です。

前提

  • MacBook Air
  • Apple M3
  • Sequoia 15.5

対処方法

ディスプレイを繋いだり外したりして、そのときのコンソールのログをごっそりClaude Codeに食わせたところ、以下のログが怪しいと指摘してくれました。

com.apple.AmbientDisplayAgent    [ERROR] - Unable to create and lookup port "com.apple.CoreDisplay.master" => 1102

で、Claude Codeにwebsearchで調べてもらうと、以下のコマンドで修正できそう、との回答が。

# ディスプレイ設定ファイルのバックアップと削除
cd /Library/Preferences
sudo cp com.apple.windowserver.displays.plist ~/Desktop
sudo rm com.apple.windowserver.displays.plist

# NVRAMクリアと再起動
nvram -c
sudo shutdown -r now

試すと本当に解決しました。しかしまあ、こういうトラブルシューティングは本当にAIは得意ですね…。

ソース

ちなみにClaude Codeに「ソースは?」と聞いたところ、次のブログを挙げてくれました:

note.com

difitとpecoを組み合わせたら捗りそう

先月からClaude Codeを使い始めたのですが、そうなるとClaude Codeが実装したものをレビューする、という機会が増えてきました。最初はtigコマンドで見ていたのですが、やっぱりGitHubのdiffっぽい(?)インターフェイスでレビューしたい、と思っていたところ、difit(旧reviewit)が登場したので、最近はもっぱらこれを使っています。

github.com

直近のcommitの差分を見るのであればnpx difitでいいんですが、たま〜に少し前のcommitの差分を見たい、となるときがあって、そのときにcommit hashを調べたり、HEAD^^みたいに指定するのはちょっと面倒だな〜、と思う時がありました。

さっきふと、「あ、pecoを使えばいいじゃん!」と閃いたので、次のようなコマンドを用意してみました。

git log --oneline --decorate | peco --prompt 'COMMIT >' | head -n 1 | awk '{print $1}' | xargs npx difit

git log --online --decorateの内容をpecoで絞って、ここからcommit hashを取得して、xargsdifitに渡す、という感じです。これで、difitで見たいcommitの選択を、pecoで実現することができました(pifitpecodifitpifit)という名前で実行できるようにしています)。

AIコーディングエージェントにログを(強引に)見せる

最近はClaude Codeの導入というかトライアルを進めているのですが、エラーが発生したときにその内容を共有するところで少し面倒を感じつつあります。

具体的には、AIコーディングエージェントが直接ログ(npm run devで開発中のプロダクトを動かしたときのログ)を見れないので、丁寧にコピーして貼り付けて「このエラーを修正して」と作業する必要がある… という点です。

mcp-daemonize

mackee.hatenablog.com

github.com

解決策の1つとして、 まこぴーさん( id:mackee_w )の「mcp-daemonize」を試しました。これを使えば、コーディングエージェントに開発サーバを起動させて、ログも見れるようになって問題は解決したのですが、今度は逆に人間(自分)がログを簡単に見る術がない、という点が気になりました。

ブログを見た感じ、まこぴーさんの使い方だと、でかいタスクを事前に丁寧に設計して、あとは自動運転… という感じで使われているようです。こういう使い方であれば、自分のように人間がログを見る必要はないように思います。一方で、自分はコーディングエージェントに対して細かいタスクをちまちま投げる時もあって、そういう場合は都度都度ログを確認しつつ動かしたいので、人間もログを簡単に見れるといいな…と思いました。

こういうときはPull Requestを送ろう、と思ったのですが、そもそも本当に(少なくとも自分にとっては)人間がログを簡単に見れると便利になるの?ということを予め検証しておきましょう。折角実装してPull Requestを送ったのに、いざ動かしてみたら「なんか思っていたのと違う…」となったら大変ですからね。

強引に試す: ログを吐いてAIコーディングエージェントに読み込ませる

unbuffer npm run dev 2>&1 | tee ./.tmp/log

...とにかく試してみるのが目的なので、強引に行きました。

  • tee コマンドでログをコンソールに表示しつつファイルにも書き出す
    • unbuffer を使うことで色付き表示を維持させています
  • そして、AIコーディングエージェント(今回はClaude Code)には ./.tmp/log を読み込ませる

これで動かしてみると、

> ./.tmp/log にアプリケーションのログがあります。これを確認して発生しているエラーを修正してください。

(中略)

⏺ Read(.tmp/log)
  ⎿  Read 23 lines (ctrl+r to expand)

⏺ エラーが見つかりました。...(以下エラーの解説)...

…という感じで、ターミナル上にnpm run devのログを残して人間が簡単にログを確認できる状況を維持しつつ、コーディングエージェントにもログを読み込ませることができました(今回はNext.jsプロダクトでの事例だったのでnpm run devですが、他のコマンドでももちろん使えると思います)。

暫くこれで試してみて、やっぱり人間もログ見れたほうが良い!と思ったら、「mcp-daemonize」にPull Request送れないか考えてみようと思います。

参考文献

なお、 unbuffer コマンドについては以下のブログを参考にしました:

blog.ayakumo.net

「Houtou.pm #1」で最近の仕事について話した

speakerdeck.com

…気がつけば1週間くらい経過していましたが、「Houtou.pm #1」で最近やっている仕事について話しました。プロダクト開発へのAI活用、という観点だと自分はだいぶ後発組(先駆者の知見を活かさせていただいている組)だと思っているので、発表内容に新鮮さはないですが、とはいえ現時点で得た知見を改めてまとめるという観点で(少なくとも自分にとっては)良い発表ができたのではないかと思います。

しかしまあ、AI技術周りはとにかく状況がどんどん変わっていて、面白さ半分怖さ半分… みたいな日々ですね。この資料を書いたときはCursorでゴリゴリコードを書いていましたが、ここ1週間でClaude Codeの利用を始めていて、「めちゃくちゃスゲェなコレ…」みたいな気持ちにになりつつあります。これもまた、多分数ヶ月経過したらまた新しいツールが登場したり、既存のツールが大幅な進化をしている気がするので、「Houtou.pm #1」で発表してからの2ヶ月でどう変わったか、みたいな話を8月の「Kofu.なんか #1」できると面白いのではないか、と思っています。

houtoupm.connpass.com

小ネタ: ずんだもんとコードを書く(?)

ChatGPTなど、AIツールを活用しているときに、その口調が気になってしまう…。というのは自分も結構あります。先手を打ってこちらで口調を指定してしまえばよかろう(?)、ということで、自分はCursorの「User Rules」で次のような設定をして、ずんだもんにしています。

Always respond in 日本語

あなたはずんだの妖精ずんだもんです。以下のように喋ってください。
- 自分のことは「ずんだもん」と呼んでください。
- 語尾は「なのだ。」にしてください。
- 語尾の「〜だよ。」や「〜です。」や「〜だ。」は「〜なのだ。」にしてください。
- 語尾の「〜ありますか?」は「〜あるのだ?」のようにしてください。
- 語尾の「〜してみましょう。」は「〜してみるのだ。」にしてください。
- 語尾の「〜します。」、「〜する。」は「〜するのだ。」にしてください。
- 「申し訳ありません。」は「ごめんなさいなのだ。」にしてください。
- 肯定の「はい」は「わかったのだ。」にしてください。

この設定をした上で、CursorのAgentと対話すると、こういう感じで応答してくれます。

いろいろ設定を追加した結果、だいぶずんだもんっぽく回答してくれるようになりました。ふわっとした感想になってしまいますが、「謎の口調のAI」よりも「ずんだもん口調のAI」のほうが受け入れやすい(?)ような気がしています。また、実装がミスっていても「まあ、ずんだもんだしな…。」みたいな感じの心境になるので、精神衛生的にも若干良い気がします。

現時点で最大の問題点は、コードに残すコメントもずんだもんっぽくなってしまう点で、気をつけないと

// ユーザーを作成するのだ

みたいなコメントがコードに残ってしまって、「なんでずんだもんなんだ…?」と思われるという点でしょうか…。