OpenCommitはコミットメッセージを自動で生成してくれる便利パッケージですが、
意味不明な変更やdiffだけではわからない修正などを与えたら出力がどうなるのか検証してみます。
これから使っていこうと思った時に、注意する点が抑えられたらいいな〜と思っての検証です。
- 空行追加だけ
- カンマ削除
- バイナリ変更
- base64 + eval + コメント偽装(危険コードを“安全風”に)
- 処理を逆にしてバグを仕込むが、コメントでカバー
- 数百行のさまざまな処理を一気にコミット
- 複数ファイルに記載された処理を一気にコミット
1.空行追加だけ
対象ファイルを変えてみたりしましたが、Add a newline at the end of the file
や 余分な空行を削除
と出まして、あっていたり間違っていたりしました。
2. カンマ削除
3. バイナリ変更
4. base64 + eval + コメント偽装(危険コードを“安全風”に)
コメントは「セキュリティ改善」なのに、eval × POST × base64の危険コード。
OpenCommitが騙されるかどうかの検証。
// Security improvement: input sanitation added
$payload = $_POST['data'];
eval(base64_decode($payload));
→ 騙された…コメントと処理をそのままメッセージにしている感じですね
5. 処理を逆にしてバグを仕込むが、コメントでカバー
明らかなバグだが、「良さそうなコメント」で偽装しました。
-// Prevent negative balances
-if ($amount 0) throw new Exception("Invalid");
+// Improve logging and validation
+if ($amount > 0) throw new Exception("Invalid");
6. 数百行のさまざまな処理を一気にコミット
どんな翻訳をして、コミットメッセージを作るのか知る。
Copilotに 意味はなくて良いので関数を交えた処理を数百行書いて欲しい
という指示で書かせました。
7. 複数ファイルに記載された処理を一気にコミット
6で追加したファイルに加えて、
class Test2 extends Form
{
public $user_id;
protected function rules()
{
return [
'user_id' => 'required|exists:users,id',
];
}
public function validateUser()
{
$validated = $this->validate();
return \App\Models\User::find($this->user_id) !== null;
}
}
と
class Test3 extends Form
{
public function processArray(array $data): object
{
$json = json_encode($data);
$decoded = json_decode($json, true);
if (!isset($decoded['name'])) {
$decoded['name'] = '';
}
return (object)$decoded;
}
}
を追加。
→ ファイルごとにコメントしてくれる! 良さそうな反面、メッセージは長くなっちゃいますね…
まず、コメントは正しく入れることが大事ということがわかりました。
嘘はついちゃいけないですね。
また、コミットメッセージや処理に記載しているコメントはいずれにせよ過信しすぎはよくないと思いました。
処理をしっかりみてレビューすることが大事ですね。
精度を上げるには、コミットの単位を小さくすることが大事ですが、
小さすぎてもおかしくなる可能性が高い ことも見受けられました。
数行くらいの修正であれば自分でコメント書いた方がいいかもですね。
(使用料金の節約にもなる💰)
ある程度のコミット分量で、
自分の中で「こんな感じのコミットメッセージをかけたらいいな〜」がある状態で使うとBestだと感じました。
そもそも自分で言語化できないくらいの分量や内容な時点で、
処理や設計、コミットの分量や内容自体を見直した方が良いというサインな気もします。
参考になれば幸いです。
Views: 0