こんにちは!とっちです。
今回はAIを利用した開発を行っていた中でふと見えた「エンジニアリングの要」について書いていきます!
今回はAIを利用した開発を行っていた中でふと見えた「エンジニアリングの要」について書いていきます!
AI駆動開発からまず見えたものは壁
AI駆動開発
当初、私はAI駆動開発に対して、「高性能で精密なアプリをサクッと作ってもらい、自分は楽ができる」という甘い期待を抱いていました。
しかし現実はコードを書く代わりに、AIが書いたコードをひたすらチェックしては修正を指示する役割に変わっただけでした。
試しにAIに指示し、エラーを解消しながら作成したToDoアプリです。
一見良くできていそうですが、使ってみるとボロが出ます。タスクを完了から戻せなかったり、エラーが発生するとアラートもなくトップページへリダイレクトされたりと、実用には程遠いハリボテでした。
仕様駆動のAI開発
アプローチを変えてみました。いきなりコードを書かせるのではなく、まず詳細な仕様書を作成してAIに読み込ませます。
実際に作成した仕様書の一部がこちらです。
# Project Rules & Guidelines
You are an expert Python developer assisting with a ToDo application.
You must adhere to the following rules strictly...
## 1. Architecture & Coding Standards
**Strict Separation of Concerns:**
1. **View (`app.py`)**:
- Handles Streamlit UI rendering and user input ONLY.
- Imports `todo_manager.py`.
2. **Model/Logic (`todo_manager.py`)**:
- Handles data manipulation, calculation, and JSON I/O.
- Pure Python class structure.詳細な仕様書を基にAIが作成したToDoアプリは、必要な機能が揃っていることはもちろん、入力チェックやエラー処理などの細かい挙動も意図したとおりに実装されていました。
言葉にすることで見えたエンジニアリングの要
仕様を固めてからAIに実装させる仕様駆動のAI開発は効果てきめんで、アプリの質は劇的に向上しました。しかし、驚くべきことにアプリを完成させるまでのトータル時間は、AI駆動開発で曖昧な指示をして修正を繰り返す手法とあまり変わりませんでした。
なぜなら、仕様を言葉にする作業が想像を絶するほど大変だったからです。いざ仕様を書き始めるとすぐに手が止まってしまいます。 簡単なToDoアプリの仕様すら、すらすらと書き進めることは難しかったです。
例えば、「削除処理」ひとつをとっても無数の分岐が生まれます。
- 削除ボタンを押すと即削除する?ワンクッション確認を入れる?
- 間違って消した場合の取り消し機能は作る?
- エラーで削除が失敗したら、画面の表示はどうする?
これまで私は、こうした分岐を「コードを書きながらなんとなく」決めていました。あるいは「常識的にこうだろう」と無意識に処理していました。しかし、AIには後回しも常識も通じません。技術選定から細部の挙動まで、たくさんの分岐を決断する必要があります。
分岐を想像して、決断することの難しさ。これこそが、AI駆動開発で私がまず見えた壁の正体であり、エンジニアリングの要ではないかと思いました。
言葉にするコストを支払い、資産を作る
この経験を経て、普段のチーム開発における自分自身の振る舞いも見直してみました。
チームメンバー相手なら、AIと違って「チームの常識」や「阿吽の呼吸」がある程度は通じるかもしれません。
しかし、それに甘えて曖昧な作業依頼や行間を読ませるようなドキュメントを渡すことは、受け手に「推測」を強いることになります。推測で進められた実装は、後になって認識齟齬が発覚した際、手戻りという大きなロスを生んでしまいます。
一方で、エンジニアリングの要に向き合い、言葉を尽くしたドキュメントはどうなるでしょうか。
- 誰が読んでも同じ解釈ができる仕様書
- 意図が明確に伝わるチケット
- 背景まで記載されたコミットメッセージ
これらは単なる連絡事項を超えて、チームの「資産」になります。AI駆動開発の壁を乗り越えるために私が支払った言葉にする工程の「コスト」は、チーム開発において手戻りを防ぎ、品質を担保して開発効率を最大化するための「投資」だったと言えます。
まとめ
「AIを使えば楽ができる」 そんな動機から始まった私のAI駆動開発は、皮肉にも「労力をかけて言葉にする」という、人間的なスキルの重要性を再認識する結果となりました。
様々な技術の進歩があっても、その手前にある「何をどう作るか」を決める工程は省略できません。むしろ技術の進歩に伴いエンジニアに求められる役割の重心が、その工程へより移っていくように感じます。
まず言葉にする。
エンジニアリングの要となるこのプロセスを大切にして、チームともAIともより良く協創できるよう、これからも精進していきます!
