Code-Beispiele

Praktische Code-Beispiele und Vorlagen, die Ihnen helfen, das Beste aus Gemini CLI herauszuholen. Von der grundlegenden Nutzung bis hin zu erweiterten Automatisierungs- und Integrationsmustern.

Grundlegende Nutzung

Einfache Beispiele für den Einstieg in Gemini CLI

Einfacher Chat

Grundlegende Unterhaltung mit Gemini beginnen

bashCode
# Interaktiven Chat starten
gemini chat

# Eine Frage stellen
gemini ask "Was ist maschinelles Lernen?"

# Mit spezifischem Modell fragen
gemini ask "Quantencomputing erklären" --model gemini-pro

Datei-Analyse

Code-Dateien mit KI-Unterstützung analysieren

bashCode
# Einzelne Datei analysieren
gemini analyze src/main.js

# Mehrere Dateien analysieren
gemini analyze src/*.js --type code-review

# Code-Vorschläge erhalten
gemini analyze package.json --suggest-improvements

Konfigurationsverwaltung

Grundlegende Konfigurationsverwaltung

bashCode
# Aktuelle Konfiguration anzeigen
gemini config list

# Standardmodell festlegen
gemini config set model gemini-pro

# Temperatur festlegen
gemini config set temperature 0.7

# Auf Standardwerte zurücksetzen
gemini config reset

Automatisierungsskripte

Skripte zur Automatisierung von Entwicklungsaufgaben

Code-Review-Skript

Automatisierte Code-Überprüfung für Pull-Requests

bashCode
#!/bin/bash
# code-review.sh - Automatisiertes Code-Review-Skript

# Geänderte Dateien abrufen
CHANGED_FILES=\$(git diff --name-only HEAD~1)

echo "🔍 Automatisierte Code-Überprüfung wird gestartet..."

for file in $CHANGED_FILES; do
  if [[ $file == *.js || $file == *.ts || $file == *.py ]]; then
    echo "📝 Überprüfung läuft: $file"

    # Datei analysieren
    gemini analyze "$file" \
      --type code-review \
      --prompt "Überprüfen Sie diesen Code auf Fehler, Leistungsprobleme und bewährte Praktiken" \
      --output review-$file.md
  fi
done

echo "✅ Code-Überprüfung abgeschlossen! Überprüfen Sie die review-*.md Dateien"

Dokumentations-Generator

Dokumentation aus Code generieren

bashCode
#!/bin/bash
# generate-docs.sh - Automatische Dokumentationsgenerierung

echo "📚 Dokumentation wird generiert..."

# API-Dokumentation generieren
gemini analyze src/api/*.js \
  --prompt "Umfassende API-Dokumentation mit Beispielen generieren" \
  --output docs/api.md

# README generieren
gemini ask "README.md für dieses Projekt basierend auf der Codebasis erstellen" \
  --context src/ \
  --output README.md

# Changelog generieren
git log --oneline --since="1 month ago" | \
  gemini ask "Diese Git-Commits in ein Changelog umwandeln" \
  --output CHANGELOG.md

echo "✅ Dokumentationsgenerierung abgeschlossen!"

Test-Generator

Automatisch Unit-Tests generieren

bashCode
#!/bin/bash
# generate-tests.sh - Automatische Unit-Test-Generierung

SOURCE_DIR="src"
TEST_DIR="tests"

echo "🧪 Unit-Tests werden generiert..."

find $SOURCE_DIR -name "*.js" -o -name "*.ts" | while read file; do
  # Relativen Pfad erhalten
  rel_path=\$\{file#\$SOURCE_DIR/\}
  test_file="\$TEST_DIR/\$\{rel_path%.*\}.test.\$\{file##*.\}"

  echo "📝 Tests werden generiert für: $file"

  gemini analyze "$file" \
    --prompt "Umfassende Unit-Tests mit Grenzfällen generieren" \
    --template jest \
    --output "$test_file"
done

echo "✅ Test-Generierung abgeschlossen!"

Integrationsbeispiele

Gemini CLI mit anderen Tools und Workflows integrieren

GitHub Actions Workflow

CI/CD-Integration mit GitHub Actions

yamlCode
name: KI Code-Review
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  ai-review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Node.js einrichten
        uses: actions/setup-node@v3
        with:
          node-version: '18'

      - name: Gemini CLI installieren
        run: npm install -g @google/generative-ai-cli

      - name: Gemini CLI konfigurieren
        run: |
          gemini config set api-key \$\{\{ secrets.GEMINI_API_KEY \}\}
          gemini config set model gemini-pro

      - name: Geänderte Dateien abrufen
        id: changed-files
        run: |
          echo "files=\$(git diff --name-only HEAD~1 | tr '\n' ' ')" >> $GITHUB_OUTPUT

      - name: KI Code-Review
        run: |
          for file in \$\{\{ steps.changed-files.outputs.files \}\}; do
            if [[ $file == *.js || $file == *.ts || $file == *.py ]]; then
              gemini analyze "$file" \
                --type code-review \
                --output "review-$file.md"
            fi
          done

      - name: PR kommentieren
        uses: actions/github-script@v6
        with:
          script: |
            const fs = require('fs');
            const reviews = fs.readdirSync('.').filter(f => f.startsWith('review-'));

            let comment = '## 🤖 KI Code-Review\n\n';
            reviews.forEach(file => {
              const content = fs.readFileSync(file, 'utf8');
              comment += `### ${file}\n${content}\n\n`;
            });

            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: comment
            });

VS Code Erweiterung

Benutzerdefinierte VS Code Erweiterungsintegration

javascriptCode
// extension.js - VS Code Erweiterung für Gemini CLI
const vscode = require('vscode');
const { exec } = require('child_process');

function activate(context) {
  // Befehl: Code erklären
  let explainCommand = vscode.commands.registerCommand(
    'gemini.explainCode',
    async () => {
      const editor = vscode.window.activeTextEditor;
      if (!editor) return;

      const selection = editor.selection;
      const text = editor.document.getText(selection);

      if (!text) {
        vscode.window.showErrorMessage('Bitte wählen Sie Code zum Erklären aus');
        return;
      }

      // Fortschritt anzeigen
      vscode.window.withProgress({
        location: vscode.ProgressLocation.Notification,
        title: "Code wird mit Gemini erklärt...",
        cancellable: false
      }, async () => {
        return new Promise((resolve, reject) => {
          exec(`echo "${text}" | gemini ask "Erkläre diesen Code"`,
            (error, stdout, stderr) => {
              if (error) {
                vscode.window.showErrorMessage(`Fehler: ${error.message}`);
                reject(error);
                return;
              }

              // Erklärung in neuem Dokument anzeigen
              vscode.workspace.openTextDocument({
                content: stdout,
                language: 'markdown'
              }).then(doc => {
                vscode.window.showTextDocument(doc);
                resolve();
              });
            });
        });
      });
    }
  );

  context.subscriptions.push(explainCommand);
}

function deactivate() {}

module.exports = { activate, deactivate };

Docker Integration

Gemini CLI in Containern verwenden

dockerfileCode
# Dockerfile - Gemini CLI Container
FROM node:18-alpine

# Gemini CLI installieren
RUN npm install -g @google/generative-ai-cli

# Arbeitsverzeichnis festlegen
WORKDIR /app

# Projektdateien kopieren
COPY . .

# Umgebungsvariablen festlegen
ENV GEMINI_API_KEY=""

# Analyseskript erstellen
RUN echo '#!/bin/sh' > /usr/local/bin/analyze-project && \
    echo 'gemini analyze src/ --output analysis.md' >> /usr/local/bin/analyze-project && \
    chmod +x /usr/local/bin/analyze-project

# Standardbefehl
CMD ["analyze-project"]

Erweiterte Nutzung

Komplexe Szenarien und erweiterte Funktionen

Benutzerdefinierte Tool-Entwicklung

Benutzerdefinierte Tools für spezifische Aufgaben erstellen

javascriptCode
// custom-tools.js - Benutzerdefinierte Tool-Definitionen
const tools = {
  // Datenbankabfrage-Tool
  database_query: {
    name: 'database_query',
    description: 'SQL-Abfragen auf der Datenbank ausführen',
    parameters: {
      query: { type: 'string', required: true },
      database: { type: 'string', default: 'main' }
    },
    execute: async ({ query, database }) => {
      const db = require('./db-connection');
      try {
        const result = await db.query(query, database);
        return JSON.stringify(result, null, 2);
      } catch (error) {
        return `Fehler: ${error.message}`;
      }
    }
  },

  // API-Test-Tool
  api_test: {
    name: 'api_test',
    description: 'API-Endpunkte testen',
    parameters: {
      url: { type: 'string', required: true },
      method: { type: 'string', default: 'GET' },
      headers: { type: 'object', default: {} },
      body: { type: 'object', default: null }
    },
    execute: async ({ url, method, headers, body }) => {
      const fetch = require('node-fetch');
      try {
        const response = await fetch(url, {
          method,
          headers,
          body: body ? JSON.stringify(body) : undefined
        });

        const data = await response.text();
        return `Status: ${response.status}\nAntwort: ${data}`;
      } catch (error) {
        return `Fehler: ${error.message}`;
      }
    }
  },

  // Code-Formatierungs-Tool
  format_code: {
    name: 'format_code',
    description: 'Code mit prettier formatieren',
    parameters: {
      code: { type: 'string', required: true },
      language: { type: 'string', default: 'javascript' }
    },
    execute: async ({ code, language }) => {
      const prettier = require('prettier');
      try {
        const formatted = prettier.format(code, {
          parser: language === 'typescript' ? 'typescript' : 'babel',
          semi: true,
          singleQuote: true,
          tabWidth: 2
        });
        return formatted;
      } catch (error) {
        return `Fehler: ${error.message}`;
      }
    }
  }
};

// Tools bei Gemini CLI registrieren
Object.values(tools).forEach(tool => {
  process.env.GEMINI_TOOLS = JSON.stringify([
    ...(JSON.parse(process.env.GEMINI_TOOLS || '[]')),
    tool
  ]);
});

module.exports = tools;

Stapelverarbeitung

Mehrere Dateien oder Aufgaben stapelweise verarbeiten

bashCode
#!/bin/bash
# batch-process.sh - Stapelverarbeitung mit Gemini CLI

BATCH_SIZE=5
CONCURRENT_JOBS=3

# Funktion zur Verarbeitung einer einzelnen Datei
process_file() {
  local file=$1
  local task=$2

  echo "🔄 Verarbeitung: $file"

  case $task in
    "translate")
      gemini ask "Diese Code-Kommentare ins Englische übersetzen" \
        --file "$file" \
        --output "${file%.js}.en.js"
      ;;
    "optimize")
      gemini analyze "$file" \
        --prompt "Diesen Code für Leistung optimieren" \
        --output "${file%.js}.optimized.js"
      ;;
    "document")
      gemini analyze "$file" \
        --prompt "Umfassende JSDoc-Kommentare hinzufügen" \
        --output "${file%.js}.documented.js"
      ;;
  esac

  echo "✅ Abgeschlossen: $file"
}

# Haupt-Stapelverarbeitungsfunktion
batch_process() {
  local task=$1
  shift
  local files=("$@")

  echo "🚀 Stapelverarbeitung starten: $task"
  echo "📁 Zu verarbeitende Dateien: ${#files[@]}"

  # Dateien stapelweise verarbeiten
  for ((i=0; i<${#files[@]}; i+=BATCH_SIZE)); do
    batch=("${files[@]:i:BATCH_SIZE}")

    echo "📦 Stapel $((i/BATCH_SIZE + 1)) verarbeiten"

    # Stapel mit begrenzter Parallelität verarbeiten
    for file in "${batch[@]}"; do
      (($(jobs -r | wc -l) >= CONCURRENT_JOBS)) && wait
      process_file "$file" "$task" &
    done

    wait # Auf Abschluss des aktuellen Stapels warten
  done

  echo "🎉 Stapelverarbeitung abgeschlossen!"
}

# Verwendungsbeispiele
case $1 in
  "translate")
    batch_process "translate" src/**/*.js
    ;;
  "optimize")
    batch_process "optimize" src/**/*.js
    ;;
  "document")
    batch_process "document" src/**/*.js
    ;;
  *)
    echo "Verwendung: $0 {translate|optimize|document}"
    exit 1
    ;;
esac

Benötigen Sie weitere Hilfe?

Erkunden Sie weitere Ressourcen und Dokumentation