こんにちは、データアナリティクス部のmorishitaです。
最近は「AIで開発効率が何倍になった!」という話をよく見かけます。
一方で、実際の業務で使うとなると、
「セキュリティ面は大丈夫?」
「本当に品質は担保できる?」
「再現性はどう確保する?」
「実際の開発ではどう使えばいい?」
といった疑問も多いのではないでしょうか。
そこで今回は、実際の業務で長年運用されてきたSASプログラム群をAIを用いてPythonに移行できるのか、検証してみました。
ちなみに本記事は、データアナリティクス部のカルチャーである「チームとして成長する」ための活動の一環として発信しています。
カルチャーについては下記の記事で紹介しているので、気になった方は覗いてみてください。
![]() |
データ分析のプロ集団が大切にしている「カルチャー」についてDA部が日々の業務で大切にしている価値観、「カルチャー」について |
テーマはシンプルです。
AIを駆使すると、どこまで開発をラクにできるのか?
ここで、今回の開発スタイルについて少し整理しておきます。
今回取り組んだのは、広い意味ではAI駆動開発です。
AI駆動開発は、AIを単なる「コードを書くための道具」として使うのではなく、設計、コーディング、テスト、修正など、開発そのものにAIを組み込んでいく考え方です。
その中には、いくつか異なる進め方があります。
たとえば、AIとの対話を繰り返しながら「まず動くものを作ってみる」というスタイルがバイブコーディングです。
一方で、コードを書く前に仕様を明文化し、「この仕様を満たすものを作って」とAIに実装させるのが仕様駆動開発(SDD)です。
ざっくり整理すると、
という関係です。
今回は、臨床データ解析や疫学データ解析向けにオープンソースとして公開されているSASプログラムを検証対象に選びました。
全部で102個のSASマクロがあり、コホート定義や包含・除外条件、妊娠・出産アウトカムなど、医療特有の複雑なロジックが詰め込まれています。
この解析基盤をAIを活用してPythonへ移行してみる、というのが今回のお題です。
これを人間だけでやろうとすると、依存関係の洗い出しからコードの書き換え、等価性検証、ドキュメント作成まで、気が遠くなるような大仕事になります。
もし私がこの作業をAIを使用せずに行うとしたら、SASコードを解析する段階で涙目になりそうですが、今回はAI駆動開発の中でも、AIと対話しながらどんどん作ってみる「バイブコーディング」のスタイルで挑みました。
Gemini Code Assistは、Googleが提供するAIコーディングアシスタントです。VS CodeなどのIDEに拡張機能として導入でき、コード補完やコード生成、リファクタリング、コードレビューなどを対話形式で支援してくれます。
エディタ上で「この関数を書いて」「この処理をPythonで実装して」といった指示をそのまま実行できるため、日常的な開発を効率化するのに適したツールです。
今回メインで使用したのは Gemini CLI です。
Gemini CLIは、ターミナル上で動作するAIエージェントです。単にコードを生成するだけではなく、プロジェクト全体を理解しながらファイル操作やコマンド実行まで行えるのが特徴です。
例えば、
といった一連の作業を対話形式で進めることができます。
当初はGemini Code Assistを使っていましたが、102個のマクロを一括解析しようとするとコンテキスト上限でフリーズしてしまったため、大量のファイルを一括で扱えるCLI版に切り替えました。
Conductorは、AIエージェントによる開発を支援するためのプロジェクト管理フレームワークです。
開発ルールや技術スタック、タスク、仕様などをMarkdownファイルとして管理し、それらをAIが参照することで、プロジェクト全体の状況やルールを理解した状態で開発を進められます。
今回の検証では、
に利用しました。
複数日にわたって開発を進める場面も多くありましたが、Conductorによってプロジェクト全体の状態をAIと共有できたため、「前回の続きから作業する」「未完了タスクを洗い出す」といった作業をスムーズに進めることができました。
Gemini CLI単体でも開発は可能ですが、Conductorを組み合わせることで、AIが設計方針や進捗を踏まえながら一貫性のある開発を行えるようになり、大規模な移行プロジェクトとの相性の良さを実感しました。
Conductorを使用し、以下の流れで進めました。
/conductor:setup を実行すると、Gemini CLIがディレクトリをスキャンし、プロジェクト概要を推論してくれます。product.md:プロジェクト概要product-guidelines.md:コーディング規約・機能要件tech-stack.md:使用言語やライブラリworkflow.md:標準開発フロー/conductor:newTrack を使用して、トラックを作成します。トラックとは、機能やテーマごとに分けた作業単位です。/conductor:review を実行すると、プロジェクト全体のステータスや設計基準を評価できます。この②〜③を、すべてのSASコードがPythonへ移行されるまで繰り返しました。
結果として、102個のSASマクロすべてを15個のPythonモジュールへと移行し、等価性テストも100%合格させることができました。
もし人手だけで対応していたらどれくらい掛かっていたのでしょうか……100時間?200時間?
概算ですが、人の工数は約90〜95%削減できたと考えてよさそうです。
ただし、今回の評価指標はあくまで「すべてのSASコードがPythonへ移行され、動作すること」です。
業務でそのまま利用できる品質かどうかは別の話なので、その点も含めて実際に使って感じたことを紹介します。
一番驚いたのはスピード感です。
たった一行のコマンドを入力するだけで大量のコードを解析し、概要を理解してくれる。数百行のコードを書き上げるのも一瞬です。
デバッグも、人間なら「エラー箇所の特定 → 原因調査 → 修正」という流れになりますが、AIはこれを一気に進めてくれます。このスピード感は人間には再現できない、AIならではの強みだと感じました。
一方で、
など、「AIあるある」も少なくありませんでした。
今回特に効果があったのは次の2つです。
をできるだけ具体的に伝えるようにしました。
AIは非常に便利ですが、万能ではありません。
今回のようなAIに主導権を委ねるやり方では、実務で利用する上で特に注意すべき3つのポイントも見えてきました。
今回の検証を経て強く感じたのは、仕様を定義せずに何を作るかの判断や進め方までAIへ委ねる(いわゆるバイブコーディングのような)開発にはリスクがあるということです。
実務で安全に品質と生産性を担保するためには、AIを活用しながらも、人間が定義した仕様を主軸に置く「仕様駆動開発」のアプローチが適していると感じました。
AIエージェントの使い心地は、想像以上に良いものでした。
今回のような移行案件では、最も工数が掛かる既存コードの解析や実装を数時間でこなしてしまうのは、本当に強力だと感じます。
だからこそ、実務においては感覚任せに開発を進めるのではなく、人間が教官となって『仕様』という指示を明確に出し、AIを適切にコントロールしていく必要があると思いました。
これからの開発では、
人間は設計・レビュー・ガバナンスを担当し、AIが実装を高速で回す。
そんな役割分担が、現時点では最も現実的で強力な開発スタイルなのではないでしょうか。
今回の検証を通して、「AIを使うと楽になる」ということ以上に、
「AIをどう使えば、安全に生産性を最大化できるのか」
という視点の重要性を実感できた、とても面白い取り組みでした。
コメント