生成AIを用いて開発効率を数倍上げる方法
GenieeのCTO孟です。
だいぶ前から生成AIを用いた開発効率を上げる方法を模索してきました。
社内ではGitHub Copilotの導入は比較的成功したかなと思います。
Copilotだけでもコードの補完まではしてくれて、とても快適です。
しかし、チャットで指示するだけで開発をしてくれるまでには至りませんでした。
Claude 3.5 Sonnetがリリースされた後、思った以上に凄かったので、自分のお気に入りの使い方をいくつか紹介したいと思います。
なぜClaude 3.5 Sonnetが良いのか?
LLMの良さを測定するための基準は多数ある中、Claude 3.5 Sonnetの方がほぼ圧勝しています。
数%の差でモデルの良さを表すのは難しいですが、
実際GPT-4oなどと比較してみても、生成したコードをそのままデバッグに回してもClaude 3.5 Sonnetの方が圧倒的にエラー率が低いことが印象的でした。
GPT-4oもかなり優秀ですが、エラー率が高いと、生成したコードをいちいちデバッグするための手間がとてもかかってしまい、場合によっては自前で書いた方が早いこともありました。
個人的に、生成したコードを直接使った場合のエラー率の低さが1つの重要な指標かなと思っています。
どんなことができるの?
私の場合、主に下記のユースケースで使っています:
- ゼロベースのコード生成
- iOSアプリの開発
- iosアプリの開発詳しくないが、claudeだけでアプリが動くレベルまで作れる
- flask apiベースコード生成
- sessionをredisに保持させたり、daoのベースコードの開発なり、1回の指示だけで書いてくれる
- 生成AIに機械学習のコードの開発
- lightgbm, 強化学習などのAIの開発、特徴量の調整など
- iOSアプリの開発
- 既存コードへの新規機能追加
- SSOログイン対応
- JavaScript、TypeScriptなどフロントエンド開発
- メンテナンス性が比較的に悪いJSもほぼchatだけで開発してくれる
- エラーの解消
- pythonの実行エラーとコードをそのままコピペして投げると直してくれる
- コピペしづらいエラー情報をそのままスクショにして、コードと一緒にclaudeに渡して直してもらう
実際どうなってるか、例を書きたいと思います。
Q:
pythonのflaskを用いて、apiサーバを書いて欲しいです
1.sessionをredisに保存するように
2.mysqlのdaoも書いてください
3.apiのhealth checkができるendpointも用意してください、okかngで返してください
4.そのhealth checkをredisのstatusまでチェックし、redisの疎通ができなかった場合をngで返してください
Answer by claude:
# app.py
from flask import Flask, session
from flask_session import Session
import redis
import mysql.connector
from healthcheck import HealthCheck
app = Flask(__name__)
# Redis configuration
app.config['SESSION_TYPE'] = 'redis'
app.config['SESSION_PERMANENT'] = False
app.config['SESSION_USE_SIGNER'] = True
app.config['SESSION_REDIS'] = redis.from_url('redis://localhost:6379')
# Initialize session with the app
Session(app)
# MySQL configuration
mysql_config = {
'host': 'localhost',
'user': 'your_username',
'password': 'your_password',
'database': 'your_database'
}
# HealthCheck
health = HealthCheck()
# dao.py
class UserDAO:
def __init__(self):
self.connection = mysql.connector.connect(**mysql_config)
self.cursor = self.connection.cursor()
def get_user(self, user_id):
query = "SELECT * FROM users WHERE id = %s"
self.cursor.execute(query, (user_id,))
return self.cursor.fetchone()
def create_user(self, name, email):
query = "INSERT INTO users (name, email) VALUES (%s, %s)"
self.cursor.execute(query, (name, email))
self.connection.commit()
return self.cursor.lastrowid
def close(self):
self.cursor.close()
self.connection.close()
# routes.py
@app.route('/api/user/<int:user_id>')
def get_user(user_id):
dao = UserDAO()
user = dao.get_user(user_id)
dao.close()
if user:
return {'id': user[0], 'name': user[1], 'email': user[2]}
return {'error': 'User not found'}, 404
@app.route('/api/user', methods=['POST'])
def create_user():
data = request.json
dao = UserDAO()
user_id = dao.create_user(data['name'], data['email'])
dao.close()
return {'id': user_id}, 201
# Health check function
def redis_available():
try:
redis_client = redis.from_url('redis://localhost:6379')
redis_client.ping()
return True, "redis ok"
except redis.ConnectionError:
return False, "redis ng"
health.add_check(redis_available)
@app.route("/health")
def health_check():
status, message = health.run()[0]
if status:
return "ok", 200
else:
return "ng", 500
if __name__ == '__main__':
app.run(debug=True)
まぁ事例として内容がしょぼいですけど、
地味な作業をaiに任せて、人間にアーキテクチャ設計や、スケーラビリティの部分に集中してもらえるのが、
現代のソフトウェア開発における大きな利点です。このアプローチにより、開発者は創造性を要する高度な意思決定や複雑な問題解決に注力できます。
AIは反復的なコーディングタスク、データ処理、基本的なデバッグなどを効率的に処理し、人間の開発者は:
- システム全体の設計と最適化
- ビジネス要件の分析と戦略的な実装決定
- 新しい技術やアプローチの評価と導入
- チーム間のコミュニケーションとプロジェクト管理
- 倫理的考慮事項やユーザー体験の向上
といった、より高度で価値の高い業務に時間を割くことができます。
この相乗効果により、開発プロセス全体の効率が向上し、より革新的で堅牢なソフトウェアソリューションの創出が可能になるのです。
いかがだったでしょうか?
Claudeの凄さを記事1枚で全て説明するのは難しいと思いますが、
少しでもヒントをお伝えすることができていれば幸いです。
弊社ジーニーでは常時採用を行っておりますので、最先端の生成AIに限らず、機械学習、データ、BI、アドテク、マーテクに興味をお持ちの方は、こちらをチェックしていただけますと幸いです。
最先端技術に情熱を注ぐ仲間たちと、共に革新的なソリューションを生み出していくことを楽しみにしています。ぜひ私たちの挑戦にご参加ください。
Discussion