フューチャー技術ブログ

プロンプトエンジニアリングから逆算して考える、エンジニアのスキルアップ

Gemini_Generated_Image

本記事は、AI Tips連載の1本目の記事となります。

はじめに

こんにちは。HealthCare Innovation Group(HIG)の山本竜玄です。

業務やプライベートを通して、GeminiやGitHub Copilot、Cursor、Claudeなどを使用していますが、これらのAIエージェントツールをうまく使うにはプロンプトエンジニアリングの知識が必要だと実感しています。

例えば、Few-Shot Prompting(数個の例を与えてつつ、同様のタスクを依頼する)であったり、Tree of Thoughts(複数の選択肢や段階を並行して評価・検討させる)などを意識すると、AIからの回答の質が大きく向上します。

これらの手法を勉強する中で、ふと思ったことがあります。プロンプトエンジニアリングで使われる思考法は、LLMへの指示だけでなく、人にタスクを依頼する際や、自分のスキル改善について考えるときにも応用できるのではないか、ということです。

そこで本記事では、プロンプトエンジニアリングの各種手法と、エンジニアのスキル・成長段階の理論を調べた上で、それぞれを紐付け、日々の業務で実践できることはなにかを考えていきます。

なお、筆者自身は現在中級者レベル(Advanced Beginner / レベル2)程度の認識です。Andy Huntが指摘するように、多くのエンジニアがこのレベルで停滞するのが現実です。レベル3以降については実体験よりも調査・考察が中心となるため、推測や仮説が多分に含まれることをあらかじめお断りしておきます。

背景知識

まず最初に、今回の記事で使う理論やフレームワークについて簡単に整理していきます。

すぐに本題を読みたい方は、「スキルレベル別の実践アイデア」セクションまで読み飛ばしてもOKです。

エンジニアの成長に関する理論

エンジニアの成長について考える時、有名なのがドレイファスモデルです。これは個人のスキルがどうやって身についていくかを説明した理論です。ただ、実際の現場では個人の技能だけでなく、チームや組織への影響力も重要になると考えています。そこで本記事では、ドレイファスモデルをメインにしつつ、エンジニアリングのキャリアラダーの視点も取り入れて考えていきます。

技能習得に関する「ドレイファスモデル」(Andy Hunt版)

ドレイファスモデルは1980年にドレイファス兄弟が作ったスキル習得の考え方です。いろんな分野で使われていて、看護の世界ではPatricia Bennerの「From Novice to Expert」が有名です。

エンジニアに関連するものとしては、「プラグマティック・プログラマー」を執筆したAndy Huntが、2008年に「Pragmatic Thinking and Learning」で、このモデルをソフトウェア開発用にアレンジしたものを執筆しています。

graph TD
    A[初心者
Novice
ルールに従って行動] --> B[中級者
Advanced Beginner
状況を認識し始める] B --> C[上級者
Competent
概念モデルを構築] C --> D[熟練者
Proficient
全体像を把握] D --> E[達人
Expert
直感的に行動] style A fill:#ffcccc style B fill:#ffe0cc style C fill:#fff0cc style D fill:#e0ffcc style E fill:#ccffcc

このモデルで面白い(身も蓋もない)のは、ほとんどのエンジニアが「中級者」で止まってしまうという指摘です。達人レベルになるには最低10年の意図的な練習が必要とのこと。結構厳しいですね。

5つの段階をざっくり説明すると以下の通りです。

  • 初心者(Novice):コンテキストに左右されない明確なルールが必要。指示通りなら実行可能だが、想定外の事態では対処困難
  • 中級者(Advanced Beginner):わずかにルールから離れ、独力で作業可能。ただし全体像は見たがらず問題処理に手こずる
  • 上級者(Competent):問題領域の概念モデルを発展させ、独力で新しい問題を解決できる。チームの指導的役割
  • 熟練者(Proficient):全体像を求め、自己補正能力を持つ。格言を理解し、過去の失敗から学んで改善できる
  • 達人(Expert):直感に従って行動。膨大な経験を適切な状況で応用し、本質的な部分を瞬時に識別

Andy Hunt版で個人的に面白かったポイントが他にもいくつかあります。

  • アジャイル開発は熟練者以上のレベルが前提(自分でフィードバックを活かして改善できるから)
  • 技能は分野ごとに評価される(JavaScriptで熟練者でも、機械学習では初心者の可能性)
  • 多くのエンジニアが中級者レベルで止まってしまう
  • 達人になるには最低10年の「意図的な練習」が必要

看護版(ベナー版)との違いとしては、

両方ともスキルは生まれつきの才能ではなく、経験で身につくものだとしています。ただ、Andy Hunt版は技術の変化が速いエンジニアリングの世界を意識して、積極的な学習と「意図的な練習」を重視しています。一方、看護のベナー版は患者の安全を第一に、より段階的で安定した成長を大事にしています。

本記事ではエンジニアリングの文脈でAndy Hunt版を使いますが、会社の文化や役職によっては、ベナー版のような段階的なアプローチの方が適切な場合もあるかもしれません。

ドレイファスモデルとキャリアラダーの統合

ドレイファスモデルは個人のスキルがどう発達するかにフォーカスしていますが、実際のエンジニアの職場では特定の技術的な深さだけでなく、チームや組織への影響力も評価されることが多いのではないでしょうか?

そこで本記事では、この2つを組み合わせて考えていきます。

graph LR
    subgraph "個人スキル(ドレイファスモデル)"
        D1[初心者] --> D2[中級者]
        D2 --> D3[上級者]
        D3 --> D4[熟練者]
        D4 --> D5[達人]
    end

    subgraph "組織への影響(キャリアラダー)"
        I1[個人レベル
Junior] --> I2[チームレベル
Mid-level] I2 --> I3[複数チーム
Senior] I3 --> I4[組織レベル
Staff+] end D1 -.-> I1 D2 -.-> I1 D3 -.-> I2 D4 -.-> I3 D5 -.-> I4 style D1 fill:#ffcccc style D2 fill:#ffe0cc style D3 fill:#fff0cc style D4 fill:#e0ffcc style D5 fill:#ccffcc style I1 fill:#e6f3ff style I2 fill:#cce6ff style I3 fill:#99d9ff style I4 fill:#66ccff

注意点として、大まかなイメージとして紐づけましたが、これらは別々の軸ではあります。個人のスキルレベルと組織への影響範囲は、必ずしも1対1で対応するわけではありません。当社で言えば、特定領域で達人レベルのスキルを持ちながら、個人貢献者として活動し続けるエンジニアもいます。

本記事では、プロンプトエンジニアリングの手法を両方の軸で活用する方法を考えていきます。「個人のスキルアップ」のテクニックと、「チーム・組織への貢献」のコミュニケーション手法の両方を整理していきます。

プロンプトエンジニアリングについて

本題のプロンプトエンジニアリングの話です。これは簡単に言うと「AIにうまく指示を出して、期待した結果を得るためのテクニック集」です。

しかし、これらの手法はAIへの指示だけでなく、人間同士のコミュニケーションや自分の思考整理にも応用できるのではないかと考えています。

以下の表で、代表的な手法を整理しています。これらは単独でも使えますが、組み合わせることでより効果的になります。

[object Object] undefined

手法選択について

これらの手法は、どのようなタスクや課題にすべてが適応できるわけではなく、問題の複雑さや求める成果物に応じて組み合わせるのが良いと感じています。

シンプルなタスクには Few-Shot Prompting + Self-Critque の組み合わせで十分なことが多く、複雑な推論が必要なら Chain of Thought + Self-Consistency で信頼性を上げます。多角的な分析が必要なら Tree of Thoughtsで検討し、段階的な解決が必要なら Step-Back Prompting + Least-to-Most Prompting で基礎から積み上げます。

この記事のメインアイデアは、AIにうまく指示を出すために作られたこれらの手法が、エンジニアの日々の業務や成長にも応用できるのではないかということです。

成長段階とプロンプトエンジニアリング手法の対応関係

以下は、ドレイファスモデルの個人スキルの成長段階と、組織への影響範囲を考慮した実践的な対応関係です。筆者(中級者)の考察なので、あくまで一つの仮説として参考にしてください。

[object Object] undefined

この対応関係のポイントは、個人スキルの向上だけでなく、そのスキルを組織でどう活かすかという視点を大事にしています。例えば、中級者のChain of Thoughtを壁打ちに用いる際には、自分の思考整理だけでなく、ドキュメントやコードレビューでチーム全体の知識共有にも役立てることができます。

スキルレベル別の実践アイデア

ここからは、前章で整理した理論をもとに、「こんなふうに活用できるのでは?」というアイデアを成長レベルごとに紹介していきます。特にレベル3以降は筆者自身がまだ到達していない領域なので、推測や仮説が多く含まれる点をご了承ください。

レベル1:初心者

[object Object] undefined

このレベルでのポイント

初心者の段階では、抽象的な指示から具体的なアウトプットを想像するのが難しいです。

AIに良いお手本をいくつか見せると、そのパターンを学習するFew-Shot Promptingと同じように、初心者にも具体的な「完成形」や「お手本」を示すことで、効率的な学習が期待できると考えます。

日々のAIを活用した実践アクション

[object Object] undefined

次のレベル(中級者)への成長のための実践

Andy Huntによると、初心者は「コンテキストに左右されない明確なルール」が必要ですが、中級者への成長には「わずかにルールから離れる」能力が求められます。

成長のためのプロンプトエンジニアリング活用法

  1. Chain of Thoughtの練習:日々の作業で「この場合は少し違うアプローチが良いかもしれない」と感じた時、AIに「なぜこの状況では標準的な方法と違うアプローチが良いのか、ステップバイステップで考えてください」と問いかけ、判断根拠を言語化する練習を積む
  2. 状況認識能力の養成:完全に指示通りではない場面に遭遇した際、「この状況で考慮すべき要素を3つ挙げ、それぞれがどう解決策に影響するか分析してください」などとAIと対話し、状況に応じた判断力を育てる

レベル2:中級者(Advanced Beginner)

[object Object] undefined

このレベルでのポイント

Andy Huntが指摘するように、技能レベルの引き上げに最も効果的なのは「周囲に優れたお手本を配置すること」と考えます。単純な模倣から一歩進み、思考の「プロセス」そのものを意識的に言語化する必要があります。プロンプトエンジニアリングの「ステップバイステップで考えて」を人間版として応用し、優れたエンジニアの思考プロセスを再現することで、論理的思考力を鍛えます。

日々の実践アクション

[object Object] undefined
具体例:バグ調査での思考プロセス可視化

Badアプローチ(思考プロセスが見えない):

// いきなりコードを書き始める
console.log(userPosts); // undefinedが出力される
// あれこれ試行錯誤...

Chain of Thoughtを意識したアプローチ:

/*
思考ステップ:
1. まず現象を整理する
- ユーザー投稿一覧が「たまに」表示されない
- 「たまに」ということは条件によって発生している

2. 仮説を立てる
- API呼び出しのタイミング問題?
- データの形式が想定と異なる場合がある?
- 認証状態による影響?

3. 検証手順を決める
- ネットワークタブでAPI呼び出しを確認
- レスポンスデータの形式をログ出力
- 認証状態をログ出力
*/

// 上記の手順に従って調査を開始
console.log('認証状態:', authState);
console.log('API呼び出し前:', userPosts);

次のレベル(上級者)への成長のための実践

Andy Huntによると、中級者は「全体像を見たがらない」特徴があり、上級者への成長には「問題領域の概念モデルを発展させる」必要があります。

成長のためのプロンプトエンジニアリング活用法

  1. Step-Back Promptingの実践:いきなり解決策を考えるのではなく、「まずこの技術の基本原理を整理してから、具体的な実装方法を検討しよう」という流れを意識する
  2. Self-Critiqueの習慣化:自分の実装をAIに「客観的な観点から潜在的な問題点を指摘してください」と評価させ、コードレビュー前のセルフチェックとして活用することで、自分の成果物やタスクを客観的にみる視点を取り入れる

レベル3:上級者(Competent)

以下レベル3以降の内容は、筆者の直接的な経験だけではなく、観察や調査をもとにした考察です。

[object Object] undefined

参考になりそうな思考法:ReAct + Self-Critique + Self-Consistency

プロンプトエンジニアリングのReActパターンのように、自分の頭の中だけで推論する(Reason)閉じた世界から、外部からの情報(Act/Observation)を得て思考を修正するサイクルと、Self-Critiqueのように自分の成果物を客観的に批判する視点を取り入れることが重要です。

例えば、重要な技術的判断を行う際は、調査や情報を取得しつつ、パフォーマンス、保守性、拡張性といった異なる観点から評価し、自己批判的に見直しもしつつ最もバランスの取れた解決策を選ぶようにします。

日次で取り入れられる具体的なアクション

[object Object] undefined

成長を意識した実践ポイント

Andy Huntによると、熟練者への移行には「自己補正能力」の獲得が重要です。上級者は問題解決はできるものの、「以前うまくいかなかった自らの行いを修正する」能力はまだ不十分です。個人レベルではReActのような行動を意識し、組織レベルでは自分の判断や行動が他のチーム・プロジェクトに与えた影響を Tree of Thoughtsで多角的に分析する習慣をつけることで、個人の成長と組織への貢献を両立できます。

レベル4:熟練者(Proficient)

[object Object] undefined

参考になりそうな思考法:Tree of Thoughts

プロンプトエンジニアリングのTree of Thoughtsが示すように、最適解が一つではない複雑な問題に対し、複数の可能性を網羅的に比較検討し、意思決定の質を高める必要があります。

日次で取り入れられる具体的なアクション

[object Object] undefined

成長を意識した実践ポイント

Andy Huntによると、達人への移行は大きな質的転換を伴います。熟練者は「格言」を理解し適用できますが、達人は「直感」に従って行動します。この転換のために、Zero-Shot CoTの発想を応用し、「具体例や過去の経験に頼らず、この状況で直感的に最適解はなにか、ステップバイステップではなく一発で答えてみてください」といった直感的判断の練習を意識的に行います。

レベル5:達人(Expert)

[object Object] undefined

参考になりそうな思考法:Meta Prompting

Andy Huntの指摘では、達人の特徴は「直感に従って行動し、理由を説明できない」ことです。この段階では、ルールやプロセスを強制するとむしろパフォーマンスが低下します。達人は本質的な部分と重要でない部分を瞬時に区別し、パターンマッチングを瞬時に行います。

この段階でのAIの活用法は、組織的なシステム設計ではなく、達人の直感を補完し、暗黙知を明文化するための「壁打ち相手」として機能できると考えます。達人は結論に達した理由を説明できないため、AIに「なぜこのアプローチが最適だと思うのか、可能な理由を列挙してみて」と依頼することで、新人教育やナレッジシェアに活用できます。

日次で取り入れられる具体的なアクション

[object Object] undefined

成長を意識した実践ポイント

達人レベルでは、Andy Huntが指摘するのは「達人であり続けるには、実践を続けること」が最も重要です。しかし、組織では達人の個人的専門性だけでなく、その知識を組織全体に波及させる影響力も期待されます。効果的な指導方法を自動生成したり、Role Promptingで専門家としての視点を明確化することで、直感的判断を組織の技術文化として体系化することが求められます。

まとめ

本記事では、プロンプトエンジニアリングの各種手法をエンジニアの成長段階と組み合わせ、「個人スキルの向上」と「組織への貢献」の両面から活用する方法を考察してきました。特にレベル3以降については筆者の実体験が限られるため、推測や仮説に基づく部分が多いことをお断りしておきます。

今回記事を執筆して考えたこととしては、プロンプトエンジニアリングの手法は単一のタスクだけでなく、様々に活用できるのではないかということです。

例えば、Chain of Thoughtによる思考の言語化は、自分自身の頭の整理になるだけでなく、チームでの技術議論などでも活用できます。また、Self-Critiqueによる客観的評価は、個人のコード品質向上はもちろん、技術ドキュメントや設計資料の質向上にも貢献します。

プロンプトエンジニアリングの技術を意識して磨くことは、生産性の向上だけでなくに自分自身の思考の質を向上させることに繋がります。AIを単なるコード生成ツールとしてだけでなく、スキルやキャリアの「壁打ち相手」として活用することで、日々の業務やスキルアップにまた違った面白みが生まれるのではないかと考えています。

この記事が、皆さんの現場での業務において、AIとの新しい付き合い方を考える何かしらのヒントになれば幸いです。筆者自身もまだ学習の途上にあるため、ご意見やフィードバックをいただけますと大変ありがたく思います。

参考文献

  • Benner, P. (1984). From Novice to Expert: Excellence and Power in Clinical Nursing Practice. Addison-Wesley.
  • Hunt, A. (2008). Pragmatic Thinking and Learning: Refactor Your Wetware. The Pragmatic Bookshelf.
  • Hunt, A., & Thomas, D. (1999). The Pragmatic Programmer: From Journeyman to Master. Addison-Wesley.
  • Wei, J., et al. (2022). Chain-of-thought prompting elicits reasoning in large language models. Advances in Neural Information Processing Systems, 35, 24824-24837.
  • Wang, X., et al. (2022). Self-consistency improves chain of thought reasoning in language models. arXiv preprint arXiv:2203.11171.
  • Yao, S., et al. (2022). ReAct: Synergizing reasoning and acting in language models. arXiv preprint arXiv:2210.03629.
  • Yao, S., et al. (2023). Tree of thoughts: Deliberate problem solving with large language models. Advances in Neural Information Processing Systems, 36.
  • Besta, M., et al. (2024). Graph of Thoughts: Solving Elaborate Problems with Large Language Models. Proceedings of the AAAI Conference on Artificial Intelligence, 38(16), 17682-17690.
  • Zhou, D., et al. (2022). Least-to-Most Prompting Enables Complex Reasoning in Large Language Models. arXiv preprint arXiv:2205.10625.
  • Zhang, Z., et al. (2023). Multimodal Chain-of-Thought Reasoning in Language Models. arXiv preprint arXiv:2302.00923.