0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Geminiで業務効率化のアイデア100個出しから実装まで試行錯誤してみた

0
Posted at

Gemini は AI であり、間違えることがあります。

本記事の取り組みには生成AIであるGeminiを活用していますが、出力内容にはハルシネーション(もっともらしい嘘)が含まれている可能性があります。実務に適用する際は、必ず専門家が内容の正確性を確認してください。
生成AIをどのように活用できるのか、具体的な業務にどう落とし込めるのか、その「最適解」を実験してみました。
なお、この記事にも一部生成AIが使われています。

この取り組みの目的

今回は単なる生成AIとの会話ではなく実務で成果を出すための取り組みのため、以下3つの目的を設定しました。

  • 生成AIの使い方を学ぶ:望む結果を得るためのプロンプトエンジニアリング技術を学ぶ
  • 生成AIの活用方法を知る:膨大な事例から自分の業務に直結しそうなユースケースを選定する
  • 実務効率化の体験:Geminiを用いた具体的な工数削減効果を検証し、実業務へ落とし込むための足掛かりとする

取り組み - 概要

アイデアの創出から実装までを以下の4ステップで体系化しました。

  • Step 1: 100個の活用事例創出
    Geminiに「AI活用事例100選」を出力させ、幅広い可能性を網羅。製造、マーケティング、ITインフラなど、多角的な視点でAIの適用箇所を洗い出しました。
  • Step 2: 実業務への適合性評価
    生成された100のアイデアから、自分の業務課題解決に直結するものをピックアップ。今回は【構成図から設定値の抽出】と【箇条書きメモからマニュアル作成支援】を選定しました。
  • Step 3: 実装方法の深掘り
    選定した事例に対し、最適なアウトプット(MarkdownテーブルやTerraformコード)を得るためのプロンプトを構築。単なる質問ではなく、役割定義や出力形式を指定する「ロジックの具体化」を行いました。
  • Step 4: 実践と検証
    実際のアウトプットを生成し、その精度を評価。人間による修正時間を加味しても、ゼロから作成する場合と比較してドキュメント作成時間を約60%削減できることを確認しました。

取り組み - 詳細

Geminiのマルチモーダル機能と高度な推論能力を活用した、2つの具体的な実行例を紹介します。

ケース1:インフラ構成図からの設定値抽出とコード化

Gemini_Generated_Image_j3r853j3r853j3r8.png

先ずはGeminiに「この"構成図から設定値を抽出するプロンプト"をテストするために、AWSで標準的なWEB3層構造の構成図を画像で作成して。」と聞くと、Nano Bananaで上の画像を生成してくれました。

画像形式のAWS構成図(Standard Web 3-Tier Architecture)を読み取り、設定値を抽出した上でTerraformコードへと変換しました。

  • プロンプトの内容:構成図画像を提示し、「この画像から設定値を抽出し、その後IaCとして利用可能なTerraform形式に変換して」と指示。精度を高めるため、リージョンやサブネットの層(Tier)を明示するよう調整しました
  • 生成プロセス(試行錯誤):当初は汎用的な回答でしたが、「Markdownテーブル形式でAZ(アベイラビリティゾーン)を含めて出力せよ」と条件を追加することで、実務で即利用可能なリストを得ることができました
  • アウトプット結果:Geminiは正確に「ap-northeast-1」リージョンや各層のCIDRを特定しました
カスタム指示
役割 あなたは高度なネットワークエンジニアおよびクラウドアーキテクトです
目的 添付された構成図画像から設計に必要な設定値を正確に抽出し表形式でまとめてください
抽出項目 以下の情報を優先的に探してください
- デバイス名 / インスタンス名
- IPアドレスプロパティIP, サブネットマスク, デフォルトゲートウェイ
- VLAN ID / サブネット名
- 接続インタフェースGi0/0, eth0 
 【出力形式
  そのままGoogleスプレッドシートに貼り付けられるようカンマ区切りCSVまたはテーブル形式で出力してください
注意事項
- わからないを許容する: 画像が不鮮明で読み取れない箇所がある場合無理に推測せず、「不明Unclear)」と出力する
- 論理的な整合性チェック: 抽出したデータに対し図面上のセグメントとIPアドレスが論理的に矛盾していないかチェックすること
回答
ご提示いただいた構成図AWS Standard Web 3-Tier Architectureから設計設定に必要な情報を抽出しました
論理的な整合性を確認したところVPC10.0.0.0/16の範囲内に各サブネット/24が重複なく収まっておりパブリック/プライベートの切り分けも標準的なベストプラクティスに従っています
### 抽出設定値一覧(テーブル形式)
| カテゴリ | リソース名 / 項目 | 設定値 / プロパティ | AZ | 備考 |
| --- | --- | --- | --- | --- |
| **Network** | VPC CIDR | 10.0.0.0/16 | - | Region: ap-northeast-1|
| **Network** | IGW Gateway | Internet Gateway | - | インターネット接続用|
| **Subnet** | Public Subnet 1a | 10.0.1.0/24 | 1a | Presentation Tier|
| **Subnet** | Public Subnet 1c | 10.0.2.0/24 | 1c | Presentation Tier|
| **Subnet** | Private App Subnet 1a | 10.0.11.0/24 | 1a | Application Tier|
| **Subnet** | Private App Subnet 1c | 10.0.12.0/24 | 1c | Application Tier|
| **Subnet** | Private DB Subnet 1a | 10.0.21.0/24 | 1a | Database Tier|
| **Subnet** | Private DB Subnet 1c | 10.0.22.0/24 | 1c | Database Tier|
| **Gateway** | NAT-GW-1a | EIP: 13.234.56.78 | 1a |  |
| **Gateway** | NAT-GW-1c | EIP: 13.234.56.79 | 1c |  |
| **Gateway** | VPC Endpoint | S3 (Gateway型/Interface型不明) | 1c | S3-Artifactsバケット接続用|
| **LoadBalancer** | ALB-External | DNS: my-app-external... | 1a/1c | インターネット面|
| **Compute** | EC2 Auto Scaling | Desired: 2, Max: 4 | 1a/1c |  |
| **Compute** | AppServer-1a | m5.large | 1a |  |
| **Compute** | AppServer-1c | m5.large | 1c |  |
| **Database** | Amazon RDS | Multi-AZ Deployment | 1a/1c | PostgreSQL 14|
| **Database** | RDS-Primary | - | 1a |  |
| **Database** | RDS-Standby | - | 1c |  |
| **Security** | SG-ALB | Allow 80/443 (From Any) | - |  |
| **Security** | SG-APP | Allow 80/443 (From SG-ALB) | - |  |
| **Security** | SG-DB | Allow 5432 (From SG-APP) | - |  |
| **Storage** | Amazon S3 | S3-Artifacts | - |  |
---

### スプレッドシート用(CSV形式)

Category,Resource_Name,Property,AZ,Note
Network,VPC CIDR,10.0.0.0/16,-,Region: ap-northeast-1
Subnet,Public Subnet 1a,10.0.1.0/24,1a,Presentation Tier
Subnet,Public Subnet 1c,10.0.2.0/24,1c,Presentation Tier
Subnet,Private App Subnet 1a,10.0.11.0/24,1a,Application Tier
Subnet,Private App Subnet 1c,10.0.12.0/24,1c,Application Tier
Subnet,Private DB Subnet 1a,10.0.21.0/24,1a,Database Tier
Subnet,Private DB Subnet 1c,10.0.22.0/24,1c,Database Tier
Gateway,NAT-GW-1a,EIP: 13.234.56.78,1a,
Gateway,NAT-GW-1c,EIP: 13.234.56.79,1c,
LoadBalancer,ALB-External,DNS: my-app-external.ap-northeast-1.elb.amazonaws.com,1a/1c,
Compute,EC2 ASG,"Desired: 2, Max: 4",1a/1c,
Compute,AppServer-1a,m5.large,1a,
Compute,AppServer-1c,m5.large,1c,
Database,Amazon RDS,PostgreSQL 14 (Multi-AZ),1a/1c,Primary: 1a / Standby: 1c
Security,SG-ALB,Port 80/443 from Any,-,
Security,SG-APP,Port 80/443 from SG-ALB,-,
Security,SG-DB,Port 5432 from SG-APP,-,
Storage,Amazon S3,S3-Artifacts,-,

これらの情報はTerraformやCloudFormationなどのIaCツールへの入力値またはAWSマネジメントコンソールでの構築パラメータとして直接利用可能です

さらに、以下のTerraformコードも生成されました。

回答
AWS 3層アーキテクチャ Terraform構成 (HCL)
ご提示いただいた構成図に基づき主要なリソースを定義するTerraformのコードを作成しましたこの構成は高い可用性とセキュリティのベストプラクティスに従いパブリックPresentation)、プライベートApplication)、データベースDataの3つのレイヤーで構成されています
1. ネットワーク構成 (VPC & Subnets)
VPC CIDR 10.0.0.0/16 内に各アベイラビリティゾーン(1a, 1c)ごとのサブネットを配置します
# VPC
resource "aws_vpc" "main" {
  cidr_block           = "10.0.0.0/16"
  enable_dns_hostnames = true
  tags = { Name = "3tier-vpc" }
}

# Internet Gateway
resource "aws_internet_gateway" "igw" {
  vpc_id = aws_vpc.main.id
  tags   = { Name = "3tier-igw" }
}

# Public Subnets
resource "aws_subnet" "public_1a" {
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.1.0/24"
  availability_zone = "ap-northeast-1a"
  tags              = { Name = "public-1a" }
}

resource "aws_subnet" "public_1c" {
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.2.0/24"
  availability_zone = "ap-northeast-1c"
  tags              = { Name = "public-1c" }
}

# Private App Subnets
resource "aws_subnet" "app_1a" {
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.11.0/24"
  availability_zone = "ap-northeast-1a"
  tags              = { Name = "app-private-1a" }
}

# Private DB Subnets
resource "aws_subnet" "db_1a" {
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.21.0/24"
  availability_zone = "ap-northeast-1a"
  tags              = { Name = "db-private-1a" }
}


2. ロードバランサー & オートスケーリング
外部からのトラフィックをALBで受けAuto Scaling Group (ASG)によって管理されるEC2インスタンスへ振り分けます
# Application Load Balancer
resource "aws_lb" "external_alb" {
  name               = "external-alb"
  internal           = false
  load_balancer_type = "application"
  security_groups    = [aws_security_group.alb_sg.id]
  subnets            = [aws_subnet.public_1a.id, aws_subnet.public_1c.id]
}

# Auto Scaling Group
resource "aws_autoscaling_group" "app_asg" {
  desired_capacity    = 2
  max_size            = 4
  min_size            = 2
  vpc_zone_identifier = [aws_subnet.app_1a.id, aws_subnet.app_1c.id]

  launch_template {
    id      = aws_launch_template.app_template.id
    version = "$Latest"
  }
}

# Launch Template
resource "aws_launch_template" "app_template" {
  name_prefix   = "app-server-"
  image_id      = "ami-xxxxxxxxxxxxxxxxx" # Amazon Linux 2023等
  instance_type = "m5.large"

  network_interfaces {
    security_groups = [aws_security_group.app_sg.id]
  }
}


3. データベース (Amazon RDS)
PostgreSQL 14 を使用しマルチAZ構成で耐障害性を確保します
resource "aws_db_subnet_group" "db_group" {
  name       = "db-subnet-group"
  subnet_ids = [aws_subnet.db_1a.id, aws_subnet.db_1c.id]
}

resource "aws_db_instance" "db" {
  allocated_storage      = 20
  engine                 = "postgres"
  engine_version         = "14"
  instance_class         = "db.t3.medium"
  db_subnet_group_name   = aws_db_subnet_group.db_group.name
  vpc_security_group_ids = [aws_security_group.db_sg.id]
  multi_az               = true
  skip_final_snapshot    = true
}


4. セキュリティグループ
階層間の通信のみを許可する設定です
SG名
許可元
ポート
説明
 
ALB SG
0.0.0.0/0
80/443
インターネットからのHTTP(S)
APP SG
ALB SG
80/443
ALBからの通信のみ許可
DB SG
APP SG
5432
AppサーバーからのDB接続

ケース2:ネットワークトラブルシューティング・マニュアルの作成

BGPやVPNの接続トラブルに対応するための、新人エンジニア向け「逆引きマニュアル」を作成しました。

  • プロンプトの内容:トラブルツリー形式にすること、具体的なコマンド例(show ip bgp summary等)を含めること、そして抽象的な概念と具体的な操作を両立させることを指示しました
  • 生成プロセス(試行錯誤):VPN接続に関しては、単なるパスワードミスだけでなく、ソースコンテキストにある「Windows Updateの未適用による検疫機能のブロック」といった、現場で発生しがちな具体的要因を含めるよう指示を重ね、精度を高めました
  • アウトプット結果:専門知識を要するBGPのトラブルも、以下のような構造化された逆引き表として整理されました
カスタム指示
役割 あなたは経験豊富なテクニカルライターです
目的 新人エンジニアが迷わず操作できる[システム名] の操作マニュアルを作成してください
構成 以下の項目を含めてMarkdown形式で出力してください
1. 概要この作業で何が達成されるか
2. 前提条件必要な権限や環境
3. 手順ステップバイステップで注意点を添えて
4. トラブルシューティングよくあるエラーとその対処法態へ更新して再接続
例:BGPトラブル対応メモ
状況拠点間接続のBGPピアがEstablishedにならないあるいはピアは張れているが特定のルートが広報/受信されない
まず物理レイヤーとIP疎通の確認Ping 1.1.1.1対向IPが飛ぶかTTLの設定ミスでeBGPが届かないパターンが多いマルチホップ設定を確認
AS番号の不一致設定ミス自組織と相手組織のASが逆になっていないか
ピアがIdleActiveの状態ならTCP 179番ポートがFWでブロックされていないかチェック
・「Establishedなのに経路が来ない場合prefix-listやroute-mapのフィルタ設定を確認denyしすぎ
広報側networkコマンドで指定したルートがルーティングテーブルRIBにそもそも存在するか存在しない経路は広報できない
受信側soft-reconfiguration inboundが入っていないと反映にクリアが必要になる
BGPテーブルshow ip bgpを見てネクストホップが到達可能Accessibleか確認ネクストホップが解決できないとRIBに載らない
これでも不明ならログを収集してエスカレーション
回答
# BGP接続トラブルシューティング・マニュアル
## 1. 概要
本マニュアルは拠点間接続においてBGPピアが確立されないあるいは期待したルートが広報受信されないトラブルを迅速に解決することを目的としています物理層からプロトコル層まで順を追って確認することでダウンタイムを最小限に抑えます
## 2. 前提条件
* 対象ルータへの特権実行モード`enable`でのアクセス権限
* 対向拠点とのネットワーク構成図AS番号IPアドレス期待される広報ルートの一覧)。
* コンソールまたはSSHによるCLI操作環境
---
## 3. トラブルシューティング・フロー(診断ツリー)
以下のフローに従って現在のステータスを確認し適切なステップへ進んでください
mermaid
graph TD
    Start[トラブル発生] --> Q1{ピアの状態は?}
    Q1 -- "Idle / Active" --> Step1[物理疎通 & TCP 179確認]
    Q1 -- "Establishedだが経路なし" --> Step2[フィルタ & RIB確認]
    
    Step1 --> Q2{Ping疎通あり?}
    Q2 -- No --> Action1[物理/IPレイヤーの復旧]
    Q2 -- Yes --> Action2[AS番号/eBGPマルチホップ設定確認]
    
    Step2 --> Q3{自拠点の広報ミス?}
    Q3 -- Yes --> Action3[networkコマンド & RIB存在確認]
    Q3 -- No --> Action4[prefix-list / ネクストホップ解決確認]
---
## 4. 解決手順(ステップバイステップ)
### ステップ1:物理・IPレイヤーの疎通確認
BGPメッセージが届く状態にあるかを確認します
1. 
**対向IPへの疎通確認** 
* `ping [対向ピアIP]` を実行
* **注意点:** 応答がない場合はIFの状態やルーティングを確認してください
2. 
**TCP 179番ポートの確認** 
* ファイアウォールFW等でBGPの通信TCP 179が遮断されていないか確認します
3. 
**eBGPマルチホップの設定** 
* 直接接続されていない相手とeBGPを張る場合TTL制限で届かないことがあります
* `neighbor [IP] ebgp-multihop [TTL数]` の設定を確認してください
### ステップ2:ネイバー設定の整合性確認
ピアがEstablishedにならない原因を特定します
1. **ステータスの確認**
* コマンド: `show ip bgp summary`
* **Idle:** 設定ミスや物理断 **Active:** 接続試行中応答なし)。
2. 
**AS番号の照合** 
* 自組織と相手組織のAS番号が逆になっていないか設定値に誤りがないか再確認します
### ステップ3:経路広報・受信の確認
ピアは張れているEstablishedのにルートが届かない場合の対応です
1. 
**広報側RIBルーティングテーブルの確認** 
* `network` コマンドで指定した経路がそもそもルータ内のルーティングテーブルに存在するか確認します
* **原則:** RIBにない経路はBGPで広報できません
2. 
**受信側ネクストホップの解決確認** 
* コマンド: `show ip bgp`
* ステータスが **Accessible到達可能** か確認ネクストホップへ到達できない経路は有効なルートとしてRIBに載りません
3. 
**フィルタリング設定の確認** 
* `prefix-list`  `route-map` で意図せず `deny` していないか見直します
---
## 5. トラブルシューティング(逆引き集)
| 事象 | 主な原因 [cite番号] | 推奨アクション |
| --- | --- | --- |
| **ステータスがIdleから動かない** | FWでのTCP 179ブロック 

 | セキュリティグループやACLの設定を変更 |
| **ピアがActiveを繰り返す** | AS番号の不一致 

 | `router bgp [AS]`  `neighbor remote-as` を再確認 |
| <br>**経路が一つも受信できない** | soft-reconfiguration inbound未設定 

 | 設定を入れるか`clear ip bgp * soft` で更新 |
| **特定の経路だけが届かない** | フィルタ設定のミス 

 | route-mapの条件式permit/denyを精査 |

> **[重要] エスカレーションの判断**
> 上記手順をすべて確認しても解決しない場合はログ`show logging`を収集し速やかに上位エンジニアへエスカレーションしてください 

まとめ

今回の体験を通じて、Geminiが単なる「チャットボット」ではなく、アイデア創出から実装までつなげてくれることを体験できました。

  1. 一気通貫の価値:100の事例から最適なものを選び、コード生成やマニュアル作成までを一つのツールで完結できる効率性
  2. 実務適用のリアリティ:ハルシネーションを前提とした「人間による最終チェック」の工程を組み込めば、現状でも十分に実務投入可能なレベルだと感じました

今後は Google Apps Script (GAS) を組み合わせたWorkspace連携による自動化を行ってみたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?