3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

若手エンジニア必見!生成AIの最強活用方法

3
Posted at

はじめに

個人的に最強だと思う生成AIの活用方法を紹介します。
実際にやってみて意識が変わったので周りにも勧めたくなりました。

どう使うのか

使い方は至ってシンプルです。
生成AIを相手にソースレビューの練習をする!
それだけです。

現職では私が若手なので、誰かのソースレビューをする機会はまだありません。
レビューされる側だけだと、どうしても受け身になってしまい、あまり成長を実感しきれない部分がありました。
転職活動を始めたこともあり、自分の実力を確かめる方法としてこの練習をやってみました。

自身の目指したい経験年数を指定する

下記のプロンプトで簡単にサンプルを作成してくれます。

「エンジニア歴3年目程度のスキルアップを目的とした、Javaのソースレビュー練習用コードを生成してください。」

あえて改善の余地を残したコードがこちらです。

サンプルコード
import java.sql.*;
import java.util.*;

public class InventoryManager {

    // 在庫更新処理
    public void updateStock(String productId, int quantity) {
        Connection conn = null;
        try {
            // DB接続の取得
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/shop", "user", "pass");
            
            // 現在の在庫を確認
            String sql = "SELECT stock_count FROM products WHERE product_id = '" + productId + "'";
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            
            int currentStock = 0;
            if (rs.next()) {
                currentStock = rs.getInt("stock_count");
            }

            // 在庫が足りるかチェック
            if (currentStock >= quantity) {
                int newStock = currentStock - quantity;
                
                // 更新クエリの実行
                String updateSql = "UPDATE products SET stock_count = " + newStock + 
                                 " WHERE product_id = '" + productId + "'";
                stmt.executeUpdate(updateSql);
                
                System.out.println("INFO: 在庫を更新しました。商品ID: " + productId);
            } else {
                System.out.println("ERROR: 在庫不足です。");
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

後は上記のサンプルコードに対して修正すべき箇所を文章として与えるだけです。
コードを書けるようになりたい方はコードを実際に書いてみるのもありです!

私だったら下記のように返事を書きます。

  1. DB接続のID、パスワードはハードコーディングせず外部ファイル等から取得する。(機密情報の管理)
  2. 入力値をそのままSQLに埋め込まない。バインド変数を使用する。SQLインジェクション対策。
  3. InventoryManagerクラスに責務を持たせすぎなのでDB接続、SQL実行、データを取得する部分はRepository層に書く。interfaceを活用して依存性の逆転(DIP)を意識し疎結合にする事ができる。(責務の分離)
  4. 「現在の在庫を確認」と「在庫が足りるか」チェックを別々のメソッドに分け、それぞれの中でRepository層のロジックを呼び出す。在庫更新処理の中でSELECT、UPDATEを行うのはよくない。
  5. stmt(Statement)、rs(ResultSet)を閉じ忘れている。try-with-resourcesを使用して書くとよい。(リソース解放)
  6. quantityがマイナス値の場合、在庫は増えないか。バリデーション必須。(バリデーション)

ここに直接生成AIからの回答を書くと長くなってしまうので後はご自身で試してみてください。
これを繰り返す事によって成長を感じると思います。

「受け身のレビュー」から「攻めのレビュー練習」へ変えて起きた変化

結果的にこの方法で何が変わったか私の経験をお話しします。
科学的根拠はございません。ご了承ください。

  • インプット/アウトプット両方を同時に行うので記憶力の定着になる
  • 上と連動しますが、繰り返し行える
  • 言語を変えてもしっかりその言語に合わせた観点を教えてくれる 例)JavaScript等
  • 自身の力に合わせて難易度を上げられるので柔軟に練習できる
  • 細かい指示を出せば業務に合わせた内容もしっかり教えてくれる 例)トランザクション処理等
  • 気付かないうちにクリーンアーキテクチャ設計を学んでいた。たぶん最新のトレンドに対応している。

上記の点から、生成AIと対話をしながら自身の力に合わせたソースレビュー練習を繰り返す事で意識が変わります。
今までは上司がレビューして修正して。。。
という事を繰り返していました。が、なぜか技術力が身に付きませんでした。

繰り返し繰り返し行えるという事は記憶力の定着にとても良いです!
それにとても褒めてくれます(笑)
これが1番伸びるきっかけだと思います。
モチベーションが高く保てる!良い対話の相手です。

おわりに

最近、生成AIにソースレビューのレポート作成をさせる方法はないか。
上司が毎日考え情報収集しています。

品質管理の面からも積極的に活用していくべきだと私も思います。
ただ、100%ではないはずなので疑うという意識も大事ですね。

結局は人間の手を加えないと完成しない!
それを1番に生成AIを良い方向で活用していければと思います。

今後もまた良い活用方法あれば共有します。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?