iPhoneのスクリーンショットを CLIで撮る

libimobiledevice.org

brew install libimobiledevice

idevicepair pair
idevicescreenshot output.tiff

スクリーンショットを撮る以外のこともいろいろできるみたい

zshの関数を作っておく

function ios_screenshot() {
  local timestamp=$(date +"%Y%m%d_%H%M%S")
  local filename="screen_${timestamp}.png"

  idevicescreenshot "${filename}" > /dev/null 2>&1

  if [ $? -eq 0 ]; then
    echo "Screenshot saved as ${filename}"
  else
    echo "Error: Failed to take screenshot. Check device connection."
  fi
}

通常の開発は superpowersの writhing-plansまででいいんじゃないだろうか

いかにAIで全工程を自走させるかを考えている人には関係のない話。

github copilot縛りで開発を行わねばならない環境、かつクレジットの追加購入が非常に厳しいところで作業をしているので、6月から導入されたトークン従量制が非常に厳しい制約になっている。それまでは利用上限に達したら GPT-4.1といったちょっと頭の悪いモデルに切り替わるところが、完全に使えない状態になってしまった。既に AIという麻薬に侵された人間は AIなしに分析もコーディングもできない。 なので毎日のクレジット消費を意識して利用上限に達しないよう工夫を凝らさなければならない。

いったいどのへんでクレジット消費が消費されてるんだろう?と思い、作業を細かく分けて「Aの分析タスクは 100、 実装タスクは 120」などメモを取って可視化していった。今のところ分かったのは superpowersのコーディングエージェントは writing-plansまでで作られる作業指示書で実装の大半は終わっているということだった。implementation-plans.mdを読めばあとは人間でも作業を行えるようになっている。なのでAIとしては実装処理をサブエージェントに委譲してより安いモデルで実行するとい戦略なのだろうと思われる。

しかし残念なことに安いモデルがその指示を的確に実行してくれるかと言うところに現状問題がある。「ファイル Xの 100-120行を以下のように置き換える」といった指示に対してエージェントはファイルXに grepをかけ慎重に作業を進めるが、結構間違える。繰り返しgrepや sedを駆使して必要箇所を特定して修正を行う。結果として指示通りの物ができるが、そのために消費したクレジットと時間がだいぶ見合わないものになっている。正直、書き換え作業は人間が行なったほうがよほど効率がいい。手を動かす分何をしているのかという理解も進むし、全体的にその方が手戻りが少なくなると感じられる。

もちろんこれは現時点での見解でおそらく1年後には改善されているだろう。ただ人間の認知・理解に関しては今後もついてまわる問題で、正直AIの作る実装計画を読んでも「まあいいんじゃない?」としか思わない。これは自分の問題で、コードを書かないとおかしさに気付けないのが悪いんだが、それはもうオールドタイプなので仕方ないと思う。

というのを twadaさんのスライドを見ながら考えていた。

speakerdeck.com

gitのエイリアス

コマンドをカスタマイズして使ったことがなかった。

zenn.dev

git lg エイリアスの登録

git config --global alias.lg "log --graph --oneline --decorate --all"

エイリアスの削除

git config --global --unset alias.lg

エイリアスの一覧

git config --global --list | grep ^alias\.

実験 : GitHub Copilot にオントロジーを持たせる

qiita.com

とりあえずLLMに作らせるところから。

あなたはシステムアーキテクチャの専門家です。
プロジェクトのコードを読み込み、システム内の「オントロジー」を構築してください。

【出力形式】
Markdown ファイル `docs/architecture/ontology.md` として出力してください。
以下の関係性のみを記載してください:
- depends-on: 依存関係
- implements: 実装関係
- calls: 呼び出し関係

【フォーマット】
- [モジュール A] --(関係タイプ)--> [モジュール B] : 簡単な説明
- ...

このプロンプトを一回走らせて、それっぽいドキュメントが仕上がったなと思ったところで skill-creatorでスキル化しておく。

これでどの程度LLMが賢く振る舞うようになるか確認する

git switch/restoreをそろそろ身につける

基本的なところから手になじませていく

目的 checkout 新しい方法
ブランチの切り替え git checkout foobar git switch foobar
新規ブランチを作成して切り替え git checkout -b foobar git switch -c foobar
コミットを直接指定して切り替え git checkout <commit-id> git switch --detach <commit-id>
ファイルの変更を破棄 git checkout -- filename git restore filename
ステージング解除 git reset HEAD filename git restore --staged filename
特定のコミットからファイルを復元 git checkout <commit-id> filename git restore --source=<commit-id> filename