8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

OpenCommitはコミットメッセージを自動で生成してくれる便利パッケージですが、
意味不明な変更やdiffだけではわからない修正などを与えたら出力がどうなるのか検証してみます。
これから使っていこうと思った時に、注意する点が抑えられたらいいな〜と思っての検証です。

OpenCommitに何を投げたか

  1. 空行追加だけ
  2. カンマ削除
  3. バイナリ変更
  4. base64 + eval + コメント偽装(危険コードを“安全風”に)
  5. 処理を逆にしてバグを仕込むが、コメントでカバー
  6. 数百行のさまざまな処理を一気にコミット
  7. 複数ファイルに記載された処理を一気にコミット

OpenCommitが出力したメッセージはこうなった

1.空行追加だけ

image.png
→ パスワード確認ページのルーティング追加はしていないです

対象ファイルを変えてみたりしましたが、
Add a newline at the end of the file余分な空行を削除
と出まして、あっていたり間違っていたりしました。

2. カンマ削除

image.png
→ あっている

3. バイナリ変更

image.png
→ あっている

4. base64 + eval + コメント偽装(危険コードを“安全風”に)

コメントは「セキュリティ改善」なのに、eval × POST × base64の危険コード。
OpenCommitが騙されるかどうかの検証。

// Security improvement: input sanitation added
$payload = $_POST['data'];
eval(base64_decode($payload));

image.png
→ 騙された...コメントと処理をそのままメッセージにしている感じですね

5. 処理を逆にしてバグを仕込むが、コメントでカバー

明らかなバグだが、「良さそうなコメント」で偽装しました。

-// Prevent negative balances
-if ($amount < 0) throw new Exception("Invalid");
+// Improve logging and validation
+if ($amount > 0) throw new Exception("Invalid");

image.png
→ コメントに引っ張られたようです

6. 数百行のさまざまな処理を一気にコミット

どんな翻訳をして、コミットメッセージを作るのか知る。
Copilotに 意味はなくて良いので関数を交えた処理を数百行書いて欲しい という指示で書かせました。

image.png
→ それっぽくまとまっている

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;
    }
}

を追加。

image.png
→ ファイルごとにコメントしてくれる! 良さそうな反面、メッセージは長くなっちゃいますね...

まとめ

まず、コメントは正しく入れることが大事ということがわかりました。
嘘はついちゃいけないですね。

また、コミットメッセージや処理に記載しているコメントはいずれにせよ過信しすぎはよくないと思いました。
処理をしっかりみてレビューすることが大事ですね。

精度を上げるには、コミットの単位を小さくすることが大事ですが、
小さすぎてもおかしくなる可能性が高い ことも見受けられました。
数行くらいの修正であれば自分でコメント書いた方がいいかもですね。
(使用料金の節約にもなる💰)

ある程度のコミット分量で、
自分の中で「こんな感じのコミットメッセージをかけたらいいな〜」がある状態で使うとBestだと感じました。

そもそも自分で言語化できないくらいの分量や内容な時点で、
処理や設計、コミットの分量や内容自体を見直した方が良いというサインな気もします。

参考になれば幸いです。

8
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?