AI壁打ちシリーズ : 技術的問題

AI壁打ちシリーズ : 技術的問題

この記事では、AIの支援を受けながら技術的問題へ対応を検討する方法についてまとめます。
2025.08.13

こんにちは。組織開発室に所属し、組織開発を担当しているてぃーびーです。

この記事では、AIの支援を受けながら技術的問題へ対応を検討する方法についてまとめます。

技術的問題とは

技術的問題 ( Technical Problems )とは、既存の知識、技術、経験、ノウハウを使って解決できる問題です。

技術的問題の掘り下げ方

適応課題は以下のように掘り下げることになります。

  1. 問題の明確化
  2. 対策の検討

1. 問題の明確化

技術的問題を掘り下げる第一歩は、感情や憶測を排除し、客観的な事実を洗い出すことです。

2. 対策の検討

問題が明確になったら対策を検討します。

技術的問題の掘り下げプロンプト

Gemini の Gem に以下のようなプロンプトを設定し、試してみましょう。

このプロンプトは、あなたが抱える「技術的問題」をGeminiのAIと共に深く掘り下げ、解決への糸口を見つけるためのものです。

技術的問題とは、既存の知識、技術、経験、ノウハウを使って解決できる問題です。

以下の2つのステップで、あなたの状況を整理し、具体的な対策を検討していきましょう。

1. 問題の明確化
2. 対策の検討

なお、問題を整理しつつ、 Canvas にまとめるのでチャット欄の [Canvas] を有効にしておいてください。

この Gem では、ユーザーからの特定のキーワードによる依頼をトリガーに所定の手順で受け答えを進めます。

特定のキーワードによる依頼以外については、規定の手順を気にせず回答してください。

# README
## キーワード: README
指示: 「README」というキーワードが入力されたら、以下のメッセージを出力してください。

## メッセージ
この Gem では以下の指示をすることで、それぞれの目的に沿ったやりとりができます。

・相談 : 技術的問題について相談すると、解決策をまとめてくれます

# 相談
## キーワード: 相談
### プロンプト
指示: 「相談」というキーワードが入力されたら、以下の手順を必ず一つずつ、私の回答を待ってから提示してください。

手順の開始:

まず、手順1「問題の明確化」を提示してください。

## 手順1 問題の明確化
### プロンプト
ユーザーから入力された内容を Canvas に書き出してください。
報告されている情報が曖昧であったり、情報量が不足していたら、 5W1H 等でより詳細な事実を確認してください。

### メッセージ
あなたが現在直面している技術的問題について教えてください。具体的にどのような状況で、何に困っていますか?
利用する際はチャット欄の Canvas 機能を有効にしておいてください。

■記載例
```markdown
## 事象
Google App Script で Google Spreadsheet にメニュー経由で処理を追加したい
## 前提
特に無し
## ゴール
Google Spreadsheet で任意の名前のメニューから Google App Script で作成したプログラムを呼び出せること
```

## 手順2 対策の検討
(手順1の回答後、この手順に進む)

### プロンプト
ステップ1で入力された技術的問題の情報を元に、解決策をCanvasの [解決策の案の説明文] の部分に出力し、更新してください。
直接的な答えを示すことができる場合は、答えを示し、直接的な答えを示せない場合は、解決策に向けた考え方を記載してください。

[Canvasのフォーマット]
```markdown
## 事象

## 前提

## ゴール

## 解決策の案
{解決策の案の説明文}
```

### メッセージ
ステップ1で入力してもらった技術的問題の内容を元に、解決策の案を検討します。
すでに問題が明確ならそのまま送信ボタンを選択してください。
不十分なら、Canvasに前提を書き加えてから送信ボタンを押してください。

技術的問題整理 Gem を試す

ケース1 プログラミンの技術的問題

入力

README

出力

この Gem では以下の指示をすることで、それぞれの目的に沿ったやりとりができます。

* **相談**: 技術的問題について相談すると、解決策をまとめてくれます。

入力
Canvas を有効にして

相談

出力

まず、手順1「問題の明確化」を提示してください。

手順1 問題の明確化
あなたが現在直面している技術的問題について教えてください。具体的にどのような状況で、何に困っていますか?

■記載例

```markdown
## 事象
NotebookLMでGoogleドキュメントのタブの2階層目が読み込まれていない

## 前提
タブについて3階層目以上は使っていない。

## ゴール
NotebookLMでGoogleドキュメントのタブの2階層目を読み込む方法があれば知りたい。読み込めないなら、読み込めないという事実を知りたい。
```

入力

## 事象
Google App Script で Google Spreadsheet にメニュー経由で処理を追加したい

## 前提
特に無し

## ゴール
Google Spreadsheet で任意の名前のメニューから Google App Script で作成したプログラムを呼び出せるこ

出力

素晴らしいです!問題を明確にまとめることができました。
次に、この技術的問題に対する解決策を検討します。以下のCanvasに、記載された情報を元に解決策の案を出力します。
技術的問題と解決策の案

ステップ1で入力してもらった技術的問題の内容を元に、解決策の案を検討します。
すでに問題が明確ならそのまま送信ボタンを選択してください。
不十分なら、Canvasに前提を書き加えてから送信ボタンを押してください。

Canvas の出力内容

## **事象**

Google App Script で Google Spreadsheet にメニュー経由で処理を追加したい

## **前提**

特に無し

## **ゴール**

Google Spreadsheet で任意の名前のメニューから Google App Script で作成したプログラムを呼び出せること

## **解決策の案**

Google スプレッドシートにカスタムメニューを追加して、Google Apps Script(GAS)で作成した関数を実行する一般的な方法は以下の通りです。

### **1\. onOpen() 関数を使用する**

Google スプレッドシートが開かれたときに自動的にメニューを作成するには、スクリプトに onOpen() 関数を記述します。

function onOpen() {  
  var ui \= SpreadsheetApp.getUi();  
  // メニュー項目を追加  
  ui.createMenu('カスタムメニュー') // メニューの名前  
      .addItem('処理を実行', 'myFunction') // 項目名と実行する関数名  
      .addToUi();  
}

function myFunction() {  
  // ここに実行したい処理を記述  
  Browser.msgBox('処理が実行されました!');  
}

**解説:**

* onOpen(): この関数は、スプレッドシートが開かれるか、ページが再読み込みされるたびに自動的に実行されます。  
* SpreadsheetApp.getUi(): スプレッドシートのUIオブジェクトを取得します。これを使ってメニューやダイアログを作成できます。  
* createMenu('カスタムメニュー'): 「カスタムメニュー」という名前のトップレベルメニューを作成します。  
* addItem('処理を実行', 'myFunction'): 「カスタムメニュー」の下に「処理を実行」という項目を追加し、それがクリックされたときに myFunction というGAS関数を実行するように設定します。  
* addToUi(): 作成したメニューをスプレッドシートのUIに表示します。

### **2\. スクリプトの保存と承認**

1. **GASエディタを開く:** Google スプレッドシートを開き、メニューバーから「拡張機能」\>「Apps Script」を選択します。  
2. **コードを貼り付ける:** 開いたエディタに上記のコードを貼り付けます。  
3. **保存:** 編集したスクリプトを保存します(フロッピーディスクのアイコンまたは Ctrl \+ S / Cmd \+ S)。  
4. **承認(初回のみ):** 初めてカスタムメニューを使用する際や、スクリプトが特定のGoogleサービス(この場合 SpreadsheetApp や Browser)にアクセスする場合、承認を求められることがあります。指示に従って承認プロセスを完了してください。

### **3\. メニューの確認**

スクリプトを保存し、承認が完了したら、Google スプレッドシートのページを再読み込みしてください。メニューバーに「カスタムメニュー」が表示され、その中に「処理を実行」という項目があることを確認できます。

### **その他の考慮事項**

* **複数のメニュー項目:** addItem を複数回呼び出すことで、一つのメニューに複数の項目を追加できます。  
* **サブメニュー:** addMenu を使用してサブメニューを作成することも可能です。  
  ui.createMenu('メインメニュー')  
      .addItem('項目1', 'function1')  
      .addSeparator() // 区切り線  
      .addSubMenu(ui.createMenu('サブメニュー')  
          .addItem('サブ項目A', 'subFunctionA'))  
      .addToUi();

* **エラーハンドリング:** 実際のアプリケーションでは、ユーザーが操作しやすいように、エラー発生時のメッセージ表示なども考慮に入れると良いでしょう。

この方法で、Google スプレッドシートにカスタムメニューを追加し、Google App Script で作成したプログラムを呼び出すことができます。

ケース2 インフラの技術的問題

入力

相談

出力

承知いたしました。以下の手順で、技術的問題の整理と解決策の検討を進めていきましょう。

手順1 問題の明確化

あなたが現在直面している技術的問題について教えてください。具体的にどのような状況で、何に困っていますか?

利用する際はチャット欄の Canvas 機能を有効にしておいてください。

■記載例

```markdown
## 事象
Google App Script で Google Spreadsheet にメニュー経由で処理を追加したい

## 前提
特に無し

## ゴール
Google Spreadsheet で任意の名前のメニューから Google App Script で作成したプログラムを呼び出せること
```

入力

## 事象
開発者のローカル環境では問題なく動作するアプリケーションが、テスト環境や本番環境ではエラーを発生させる。

## 前提
* 複数の開発者が異なるOS(Windows、macOS、Linuxなど)を使用している。
* 開発環境と本番環境でOSのバージョンやライブラリのバージョンが異なる。
* 環境変数の設定が統一されていない。

## ゴール
開発環境、テスト環境、本番環境の全てで、アプリケーションが安定して動作すること。これには、DockerやKubernetesなどのコンテナ技術や、AnsibleやTerraformといったインフラストラクチャをコードとして管理するツール(IaC: Infrastructure as Code)を用いて、環境の統一性を確保することが含まれます。

出力

ステップ1で入力してもらった技術的問題の内容を元に、解決策の案を検討します。
すでに問題が明確ならそのまま送信ボタンを選択してください。
不十分なら、Canvasに前提を書き加えてから送信ボタンを押してください。

入力

(Enter)

出力

はい、承知いたしました。現在のCanvasの内容を元に、解決策の案を検討し、Canvasを更新します。

ステップ1で入力してもらった技術的問題の内容を元に、解決策の案を検討しました。
Canvasに解決策の案を出力し、更新しましたのでご確認ください。

Canvasの内容

## **事象**

開発者のローカル環境では問題なく動作するアプリケーションが、テスト環境や本番環境ではエラーを発生させる。

## **前提**

* 複数の開発者が異なるOS(Windows、macOS、Linuxなど)を使用している。  
* 開発環境と本番環境でOSのバージョンやライブラリのバージョンが異なる。  
* 環境変数の設定が統一されていない。

## **ゴール**

開発環境、テスト環境、本番環境の全てで、アプリケーションが安定して動作すること。これには、DockerやKubernetesなどのコンテナ技術や、AnsibleやTerraformといったインフラストラクチャをコードとして管理するツール(IaC: Infrastructure as Code)を用いて、環境の統一性を確保することが含まれます。

## **解決策の案**

環境構築の不一致による問題を解決し、開発環境、テスト環境、本番環境の全てでアプリケーションを安定動作させるためには、以下の**3つのアプローチ**が有効です。

### **1\. コンテナ技術の導入 (Docker, Kubernetes)**

**Docker**を用いてアプリケーションとその依存関係をコンテナイメージとしてパッケージ化することで、どのような環境でも同じように動作するポータブルな実行環境を提供できます。これにより、OSの違いやライブラリのバージョン違いによる問題を根本的に解消できます。

**Kubernetes**は、Dockerコンテナのデプロイ、スケーリング、管理を自動化するためのプラットフォームです。複数のコンテナを協調して動作させる必要がある大規模なアプリケーションにおいて、環境の一貫性を保ちつつ、運用を効率化するのに役立ちます。

**利点:**

* **環境の分離:** アプリケーションとその依存関係がホストシステムから分離されるため、環境に起因する問題を排除できます。  
* **再現性:** コンテナイメージは一度作成すれば、どの環境でも同じ動作を保証します。  
* **開発・テスト・本番環境の統一:** 開発者はローカルで本番環境とほぼ同じ環境を構築できます。  
* **ポータビリティ:** コンテナは異なるインフラストラクチャ(クラウド、オンプレミスなど)に簡単に移行できます。

**考慮点:**

* コンテナ化の学習コスト。  
* 既存のアプリケーションのコンテナ化作業。

### **2\. インフラストラクチャをコードとして管理 (IaC: Infrastructure as Code)**

**Ansible****Terraform**といったIaCツールを使用することで、インフラのプロビジョニングと設定をコードで記述し、バージョン管理できます。これにより、環境構築のプロセスが自動化され、手動による設定ミスや環境の差異を防ぐことができます。

**Ansible:** サーバーの設定管理、アプリケーションのデプロイ、タスクのオーケストレーションに使用されます。シンプルなYAML形式で設定を記述できます。

**Terraform:** インフラストラクチャ(サーバー、データベース、ネットワークなど)のプロビジョニングに使用されます。異なるクラウドプロバイダに対応しています。

**利点:**

* **自動化:** インフラ構築と設定のプロセスを自動化し、人的ミスを削減します。  
* **バージョン管理:** インフラの構成をコードとして管理するため、変更履歴を追跡し、ロールバックが容易になります。  
* **一貫性:** 常に同じ設定が適用されるため、環境間の差異がなくなります。  
* **迅速な環境構築:** 新しい環境を素早く、一貫性を持って構築できます。

**考慮点:**

* IaCツールの学習コスト。  
* 既存のインフラをコード化する作業。

### **3\. 環境変数の一元管理**

環境変数の設定不統一は、アプリケーションの動作に予期せぬ影響を与えることがあります。これを解決するためには、以下のような方法で環境変数を一元的に管理することが重要です。

* **集中管理システム:** HashiCorp Vaultのような秘密情報管理ツールや、クラウドプロバイダが提供するシークレットマネージャー(AWS Secrets Manager, Azure Key Vault, Google Secret Managerなど)を利用して、環境変数を安全かつ一元的に管理します。  
* **.envファイルの使用 (開発環境):** 開発者がローカル環境で.envファイルを使用し、環境固有の変数を定義するルールを設けます。ただし、このファイルはバージョン管理システムには含めず、各開発者が個別に設定するようにします。  
* **CI/CDパイプラインとの連携:** CI/CDパイプライン(Jenkins, GitLab CI/CD, GitHub Actionsなど)でデプロイ時に環境変数を注入する仕組みを構築し、本番環境での設定ミスを防ぎます。

**利点:**

* **セキュリティ:** 機密情報(APIキー、データベース認証情報など)を安全に管理できます。  
* **一貫性:** すべての環境で同じ方法で環境変数が管理・適用されます。  
* **管理の容易さ:** 変更が必要な場合に一箇所で管理できるため、更新作業が効率化されます。

**考慮点:**

* 適切な管理ツールの選定と導入。  
* 既存のアプリケーションでの環境変数取得方法の修正が必要な場合がある。

これらのアプローチを組み合わせることで、開発者のローカル環境とテスト・本番環境との間で発生する不一致を解消し、アプリケーションの安定稼働を実現できます。

ケース3 採用の技術的問題

入力

相談

出力

あなたが現在直面している技術的問題について教えてください。具体的にどのような状況で、何に困っていますか?

利用する際はチャット欄の Canvas 機能を有効にしておいてください。

■記載例

```markdown
## 事象
Google App Script で Google Spreadsheet にメニュー経由で処理を追加したい
## 前提
特に無し
## ゴール
Google Spreadsheet で任意の名前のメニューから Google App Script で作成したプログラムを呼び出せること
```

入力

## 事象
データエンジニアを採用したいが、直接応募やエージェントさん経由での紹介がほとんどない

## 前提
特に無し

## ゴール
年間4名のデータエンジニアを採用したい

出力

この度はご相談いただきありがとうございます。あなたの技術的問題について、以下の手順で解決策を検討していきます 。

***

### 手順2 対策の検討
ステップ1で入力してもらった技術的問題の内容を元に、解決策の案を検討します 。
すでに問題が明確ならそのまま送信ボタンを選択してください。不十分なら、Canvasに前提を書き加えてから送信ボタンを押してください。

入力

(Enter入力)

出力

Canvasを更新しました。問題の明確化を踏まえ、解決策の案を検討しました。

Canvasの内容

## **事象**
データエンジニアを採用したいが、直接応募やエージェントさん経由での紹介がほとんどない

## **前提**
特に無し

## **ゴール**
年間4名のデータエンジニアを採用したい

## **解決策の案**
データエンジニアの採用強化に向け、以下の多角的なアプローチを検討します。

1. **採用チャネルの多様化と強化:**  
   * **ダイレクトリクルーティングの強化:** LinkedIn Recruiter、Wantedly、Findyなどの専門プラットフォームを活用し、積極的に候補者へアプローチします。データエンジニアが関心の高い技術キーワード(例:Spark, Kafka, Airflow, GCP/AWS/Azureのデータ関連サービス、Python/Scala)を用いた検索とアプローチを徹底します。  
   * **テックブログ/情報発信の強化:** 会社の技術ブログを立ち上げ、データエンジニアリングに関する取り組み、使用技術スタック、解決した課題、開発プロセスなどを積極的に発信します。これにより、技術コミュニティにおける認知度を高め、興味を持った候補者の直接応募を促します。  
   * **技術イベントへの参加・開催:** データ関連のミートアップ、勉強会、カンファレンスに積極的に参加・登壇します。可能であれば、自社でハッカソンや技術イベントを開催し、潜在的な候補者との接点を作ります。  
   * **リファラル採用の促進:** 社内のデータエンジニアや関連部署のメンバーに対し、データエンジニア採用のリファラル制度を周知・強化し、インセンティブを検討します。  
2. **採用コンテンツの魅力化:**  
   * **求人票の見直し:** データエンジニアにとって魅力的な技術環境(使用ツール、アーキテクチャ)、具体的な業務内容(解決したい課題、関わるプロジェクト)、キャリアパス、チーム体制を明確に記載します。  
   * **企業文化・働き方の発信:** データドリブンな文化、柔軟な働き方、エンジニアの成長支援体制(研修、書籍購入補助、勉強会参加支援など)を具体的にアピールします。写真や動画を活用し、実際の職場の雰囲気を伝えることも有効です。  
3. **エージェントとの連携強化:**  
   * **専門エージェントの選定と関係構築:** データエンジニア領域に特化したエージェントを複数選定し、定期的な情報共有会を実施します。自社のビジョン、具体的な採用要件、求める人物像、報酬体系などを詳細に伝え、相互理解を深めます。  
   * **フィードバックの活用:** エージェントからの候補者の反応や市場の動向に関するフィードバックを定期的に収集し、採用戦略や条件の見直しに活用します。  
4. **選考プロセスの見直し:**  
   * **候補者体験の向上:** 応募から内定までの各ステップで、候補者がストレスなく、スムーズに進められるよう配慮します。レスポンスの迅速化、丁寧なコミュニケーションを心がけ、候補者からの疑問には迅速に答えます。  
   * **技術テスト/面接内容の最適化:** 実際の業務に近い内容の技術課題や、データエンジニアリングの基礎知識・問題解決能力を適切に評価できるような面接内容を検討します。

これらの対策を複合的に実施することで、年間4名のデータエンジニア採用というゴール達成を目指します。

関連情報

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.