24 ポイント 投稿者 GN⁺ 2025-04-05 | 1件のコメント | WhatsAppで共有
  • ここ数か月、個人プロジェクトと仕事の両方でAIベースのコーディングツールを試験的に使ってみた
  • 結果は非常に良好で、開発時間の短縮と成果物の品質向上の両方を実感した
  • 一方で、一部の開発者はAIツールがうまく機能しないという否定的なフィードバックも共有している
  • この経験を通じて、AIを活用したソフトウェア開発には生産性の面で次の段階へ跳躍する可能性があると確信するようになった
  • ただし、無批判に受け入れるのではなく、正しい視点とバランスの取れたアプローチが必要だ
  • この記事では、自ら経験し発見したベストプラクティスを共有することで、
    AIツールの賢明な導入を、より広い開発コミュニティで少しでも早めたい

現在のAIコーディングツールの活用状況

  • Twitterで観察する限り、非専門の開発者の間でAIコーディングツールが大きな人気を集めている
    • 彼らはAIを通じて新しいプロジェクトに挑戦し、楽しみながら開発を学んでいる
  • こうした流れは前向きであり、新しいユーザー層に対して技術への参入障壁を下げることに貢献している
  • しかし、これはAIツールの可能性を示す一面にすぎず
    • シニア開発者のような専門的な文脈でもAIは大きな価値を提供できる

シニア開発者の強み

  • まだ発展の初期段階ではあるが、現時点での結論は次の通りだ:
    • シニア開発者はAIツールを最も効果的に活用できる立場にある
    • 単に助けを受けるだけでなく、最適化された活用が可能
  • 核心は次の通りだ:

    AI時代にはやや古く見えるかもしれない開発経験やプロジェクト運営のノウハウこそが、
    これらのツールを最も上手く活用するための基盤である

  • LLMベースのプログラミングエージェントをたとえるなら、
    • プログラミング知識は非常に豊富なシニアだが、現在の文脈では設計理解が不足しているジュニアに近い
  • そのため、彼らに実務を任せるには、
    • 戦略的な準備とガイダンスが不可欠
    • この役割を担うのに最適な人物こそシニア開発者だ
  • 結論として、最先端技術であるAIツールでさえ、従来の開発慣行と経験を基盤にするとき最も効果的に活用できる

成功するAIコーディングセッションのための3つの重要要素

  • AIと協業して良い結果を得るには、次の3つの要素が重要だ:
    • 洗練された要件文書化 (Well-structured Requirements)
    • ツールベースの品質ガードレール (Tool-based Guard Rails)
    • ファイルベースのキーフレーム手法 (File-based Keyframing)
  • 本格的な説明に入る前に、AIを活用した実践的なプロジェクト事例を紹介する
    • Green-fieldプロジェクト: ゼロから新しく作るプロジェクト
    • Brown-fieldプロジェクト: 既存コードベースに新機能を追加するプロジェクト
  • どちらの場合も、AIが実装全体をほぼ全面的に担当した事例に焦点を当てる
    • 単なる自動補完支援や対話型アシスタントとしてのAIではなく、
      エージェントモードで実際の作業を行う方式に焦点を当てる
  • 使用したツールはCursorで、
    • AnthropicのClaude Sonnet 3.7モデルをベースにしている
    • プロジェクト全体のファイルを直接修正し、関連コマンドも実行できる機能を提供する

例1: Platform Problem Monitoring (Green-fieldプロジェクト)

  • CursorとClaudeを活用して新規アプリケーションであるPlatform Problem Monitoringを実装した
  • このアプリは毎時間ELKのElasticsearchサーバーに接続してエラーメッセージを収集し、
    Webプラットフォームの現在の問題状況を要約した整形済みのメールレポートを送信する
  • 実装全体はAIが担い、自分で書いたコードはない
  • 著者はPython言語に詳しいわけではないが、
    • アーキテクチャ、運用、ベストプラクティスに対する幅広い理解のおかげでスムーズに進められた
    • このプロジェクトは不慣れな技術スタックでAIがどれほど役立つかを実験する機会だった

参考: コード品質の問題
HackerNewsの議論では、ロギング設定、カスタム設定のパース、レースコンディションなどのコード品質問題が指摘された
このプロジェクトは本番コードというより迅速なプロトタイプ作成が目的であり、
長期保守や言語慣習よりも機能実装に重点を置いていた

例2: Process Management UI Integration (Brown-fieldプロジェクト)

  • 既存のPHP/Symfonyベースのレガシーバックエンド機能にUIを統合した事例
  • バックエンドはcronベースのCLIコマンドで運用されており、UIは存在しなかった
  • この機能を最新のSymfonyアプリケーションに統合しようとした
    • 最新のコードベース、テスト体制、スタイルガイドが存在するUIフレンドリーな構造を活用
  • 主な作業内容:
    • HTTP APIによるレガシーシステムとの通信
    • システム間のデータ転送の実装
    • UIデザインシステムに合わせた画面構成
    • 共有Symfonyバンドル内でのAPIクライアント実装
  • キーフレームファイルを除き、実装全体をAIが自動で実行した

2つのプロジェクトから得られた重要なインサイト

  1. Green-fieldプロジェクト: 不慣れな技術スタックでもAIの助けによって機能するアプリを実装できる
  2. Brown-fieldプロジェクト: UI実装が不慣れな作業であっても、AIのおかげで素早く機能を完成できた
  • これら2つの事例を通じて、AIツールが個人の生産性とチーム全体のワークフローに実質的な変化をもたらし得ることを実感した
  • ただし、AIが大幅な時間短縮をもたらすためには、初期のセットアップ投資と戦略的アプローチが必要だ
    • 優秀なジュニア開発者を上手く導くのと同じように運用してこそ、最良の結果を引き出せる

洗練された要件作成の重要性

  • 成功するAIコーディングセッションの核心は、体系的で包括的な要件文書
  • 実際のプロジェクト Platform Problem Monitoring では、セッション開始前にREQUIREMENTS.md文書を作成した
  • この文書は全371行で構成され、次のような階層構造に従っている
    • 最上位: 核心要件を1行で要約
    • 上位レベル: ユースケースと開発動機
    • 中位レベル: プロセスと動作方式
    • 中位レベル: アーキテクチャ、技術スタック、制約条件
    • 下位レベル: 具体的な作業手順を入力/出力/副作用の基準で詳細に整理
  • このように体系化された文書は、AIにとっても明確なフレームワークを提供し、正確な結果を導く
  • 文書作成には時間と労力がかかるが、成功する実装のための必須投資
  • ソフトウェア開発の格言の1つにこうある:

    「6週間の実装は2時間の計画を節約する」

    • 皮肉な表現だが、実装段階での非効率は計画不足に起因するという真実を含んでいる
  • だからこそプロジェクトは常にキーボードではなくホワイトボードから始めるべきであり、この原則はAIと協業するときにも同じく当てはまる
  • 実践では、Cursorセッションを次のような段階で始める:
    1. AIに要件を自分で要約させる
    2. 実行計画を生成させる
    3. 不明確な部分について質問するよう促す
  • この検証段階を終えて初めて、AIを「Agent」モードに切り替えて実装を始める

ツールベースの品質ガードレール設定

  • 要件文書が目的地を定義するなら、品質ガードレールはその目的地までの最短ルートを維持してくれる
  • 開発中のリアルタイムフィードバックシステムの重要性と同様に、静的解析ツールはAIにとっても大きな助けになる
  • たとえば、リリース後に顧客問い合わせでnullチェック漏れを発見するより、開発段階で事前に検知する方がはるかに効率的だ
  • そのため、AIコーディングセッションを始める前に次のような品質保証ツールを必ず設定する
    • Makefileの例を基準にすると:
      • black, isort: コードフォーマット
      • ruff: リンティング
      • mypy: 型チェック
      • bandit: セキュリティ解析
      • テストスイート全般
  • ClaudeベースのAIエージェントはこれらのツールを認識し活用できる
    • 例: 型チェックに失敗すると、AIが自らコードを修正して通るように調整する
  • 機能検証のためにcurlコマンドでのAPIテストリクエストも提供する
    • AIが直接エンドポイントを呼び出し、応答を確認しながらコードを改善していく過程は印象的だ
  • このようなツールベースのガードレールは、AIが信頼できる結果を出せるよう支援する必須構成要素

ファイルベースのキーフレーム手法

  • AIは創造的な実装には強いが、コード構造やファイル構成については方向性が不足することがある
    • それを補うために使う戦略がファイルベースのキーフレーム(file-based keyframing)
  • この手法はアニメーション制作におけるキーフレーム方式から着想を得ている:
    • 熟練したアニメーターが**重要な場面(キーフレーム)**を先に作り、残りを補助スタッフが埋める方式
    • 品質を維持しながら作業効率を高められる
  • 実際のAIコーディングプロジェクトでは、実装前にあらかじめ**空のスタブファイル(stub files)**を作成しておく
    • 例: APIエンドポイント、APIクライアント、コントローラクラス、Twigテンプレートなど
  • こうしたキーフレームファイルは、AIに次のような重要なコンテキスト情報を提供する
    • プロジェクトのファイル構成方式
    • 名前空間構造
    • 命名規則
    • 一貫したコードパターン
  • プロンプトですべての構造を説明するより、コードベースそのものにヒントを与えることでAIの推論精度を高められる
  • このアプローチは、AI時代においてもなお重要な**「命名」**の原則を強調している
    • AIは言語を基盤に動作するため、意図と意味が込められたテキストはより良い結果を導く

実例で見る統合適用 : サブスクリプション契約ダッシュボードUI実装

  • 前述した3つの核心原則を1つのプロジェクトに統合して適用した実践例を紹介する:
    • 洗練された要件文書化
    • ツールベースの品質ガードレール
    • ファイルベースのキーフレーム手法
  • プロジェクト概要

    • 目標: プラットフォーム内のサブスクリプション契約情報を表形式で可視化する読み取り専用のWeb UIダッシュボードを実装
    • 対象: マルチコードベース(monorepo)環境
      • backend-app: Symfony 5アプリケーション、データを保持
      • janus-christophorus: Symfony 7アプリケーション、UIを提供
      • janus-shared-bundle: APIクライアント実装を含む
      • janus-webui-bundle: スタイルガイド、Tailwind設定、Twigテンプレートを含む
  • 要件構造

    • APIを通じてバックエンドデータを読み取り、フロントエンドUIで表示
    • 実際のAPIエンドポイントに加えてデモモード対応(テスト用のダミーデータを提供)
    • UIはスタイルガイドと一貫するように実装
    • 各レイヤーは次の構成要素で実装される:
      • APIエンドポイント
      • APIクライアント
      • Presentationレイヤーのサービスクラス
      • コントローラおよびTwigテンプレート
  • AIセッションのための事前作業

    • すべてのコードベースにファイルベースのキーフレーム方式で空ファイルをあらかじめ作成
    • 既存のスタイルガイド、ナビゲーションサービス、類似機能などをAIの参考資料として提供
    • 各コードベースで**品質ツール(PHPStanなど)**を実行可能にする
      • 例: .dxcli/dxcli.sh qualityスクリプトを使用
  • 統合された原則の活用方法

    • 要件整理: プロンプトに詳細な要件とシステム構造を説明
    • ガードレール提供: コード検査ツールの利用案内を含める
    • キーフレーム提供: 実装対象ファイルをあらかじめ作成し、AIが正確な位置と文脈にコードを書けるようにする
  • 主な目標

    • 迅速に契約情報を全体的に把握できるUIを提供する
    • 実装においてAIが質問し計画を立てられるよう、明確な構造とヒントを提供する
  • この例は、AIツールと人間の経験が協業するとき、どれほど強力なシナジーを生み出せるかをよく示している

結論: AIツール + 人間の経験 = 最良の組み合わせ

  • 洗練された要件ツールベースのガードレールファイルベースのキーフレームを提供することで、
    AIの強力な機能を活用しつつ、コード品質とアーキテクチャの一貫性を維持できる
  • こうした従来の開発慣行はAI時代でもなお有効であり、
    むしろシニア開発者の経験と洞察によってさらに大きな効果を発揮する
  • 結局のところ、AIはあくまでツールにすぎず、
    それを正しく活用できる人間の経験とスキルがこれまで以上に重要な時代なのだ

1件のコメント

 
GN⁺ 2025-04-05
Hacker Newsの意見
  • 経験豊富なPython開発者が特定のファイルをレビューした結果、初級ソフトウェアエンジニアのミスだらけだと指摘

    • ルートロガーをモジュールレベルで設定していることに始まり、標準ライブラリの設定ファイルパーサーを使わず自前で書いている点
    • ファイルの存在を確認した後、そのファイルが確実に存在する前提で処理を進めるload_jsonの問題点
    • 全体的にコードの質が低いと言及
  • 25年の経験を持つ趣味のコーダーが、LLMとvibecodingは創造性を損なうと感じている

    • 新しいツールを学んで使うことを楽しみ、市場性のあるソリューションを作りたいと考えている
    • LLMを使えば自分が想像したものを素早く実装できるが、自分で作る満足感は薄れる
    • この1年、大きなプロジェクトを作れておらず、楽しさが減ったと吐露
  • 40歳未満の開発者が、AIは手間を減らしてくれる道具として有用だと感じている

    • 重い腱炎を患っており、コード自動補完を使って改善を実感
    • "vibe coding"が主流になるのではないかと懸念し、状況を理解できるのは経験豊富な開発者だけかもしれないと危惧
  • AIを使ったコード生成は非効率だと感じるユーザー

    • プロンプト作成とコードのエラー追跡に多くの時間がかかる
    • 自分でコードを書くほうが心の平穏を得られると言及
  • AIは新規プロジェクト(greenfield)では有用だが、既存プロジェクト(brownfield)では非効率だと感じている

    • AIは既存コードとの統合に苦労すると指摘
  • プロジェクト開始時にMarkdownファイルで計画を立てる開発者

    • Rustを使い、コンパイル時チェックでコードの正確さを保証しようとしている
    • AIが生成したRustコードでは、より多くのエラーを発見できるため満足している
  • AI時代にはソフトウェアエンジニアリングの経験が重要だと考えるユーザー

    • LLMに依存すると経験が劣化するのではないかと心配している
  • 情報理論における「驚き」の概念をLLMに適用しようとするユーザー

    • LLMが生成したコードが予想外だと、エラーの特定が難しくなる可能性がある
    • これを「探求」として捉え直し、新しいトピックを学ぶ機会にしようとしている
  • テスト駆動開発(TDD)によってAI生成コードを導こうとするユーザー

    • TDDが契約のように機能し、AIまたは手書きコーディングを選べるようにする
  • AIの現状はソフトウェアの将来の方向性と合っていないのではないかと懸念するユーザー

    • Javaの成功は、JDKとともに提供されたソースコードのおかげだと言及
    • AIはコードの明確さや発見可能性を改善できていないと指摘
  • AIは急速に進歩しており、圧倒されることもあると感じるユーザー

    • 経験豊富な開発者はAIを活用して新しいアプリケーションを計画できる
    • 個人ブランドの構築が重要で、自分自身のアプリを作るべきだと考えている