Примеры Кода
Практические примеры кода и шаблоны, которые помогут вам максимально использовать Gemini CLI. От базового использования до продвинутых паттернов автоматизации и интеграции.
Категории Примеров
Выберите категорию для изучения связанных примеров
Базовое Использование
Простые примеры для начала работы с Gemini CLI
Простой Чат
Начать базовую беседу с Gemini
# Запустить интерактивный чат
gemini chat
# Задать вопрос
gemini ask "Что такое машинное обучение?"
# Спросить с конкретной моделью
gemini ask "Объяснить квантовые вычисления" --model gemini-pro
Анализ Файлов
Анализировать файлы кода с помощью ИИ
# Анализировать один файл
gemini analyze src/main.js
# Анализировать несколько файлов
gemini analyze src/*.js --type code-review
# Получить предложения по коду
gemini analyze package.json --suggest-improvements
Управление Конфигурацией
Базовое управление конфигурацией
# Посмотреть текущую конфигурацию
gemini config list
# Установить модель по умолчанию
gemini config set model gemini-pro
# Установить температуру
gemini config set temperature 0.7
# Сбросить к значениям по умолчанию
gemini config reset
Скрипты Автоматизации
Скрипты для автоматизации задач разработки
Скрипт Ревью Кода
Автоматизированное ревью кода для pull request'ов
#!/bin/bash
# code-review.sh - Скрипт автоматизированного ревью кода
# Получить измененные файлы
CHANGED_FILES=\$(git diff --name-only HEAD~1)
echo "🔍 Запуск автоматизированного ревью кода..."
for file in $CHANGED_FILES; do
if [[ $file == *.js || $file == *.ts || $file == *.py ]]; then
echo "📝 Проверка: $file"
# Анализировать файл
gemini analyze "$file" \
--type code-review \
--prompt "Проверить этот код на ошибки, проблемы производительности и лучшие практики" \
--output review-$file.md
fi
done
echo "✅ Ревью кода завершено! Проверьте файлы review-*.md"
Генератор Документации
Генерация документации из кода
#!/bin/bash
# generate-docs.sh - Автоматическая генерация документации
echo "📚 Генерация документации..."
# Генерировать API документацию
gemini analyze src/api/*.js \
--prompt "Сгенерировать полную API документацию с примерами" \
--output docs/api.md
# Генерировать README
gemini ask "Создать README.md для этого проекта на основе кодовой базы" \
--context src/ \
--output README.md
# Генерировать changelog
git log --oneline --since="1 month ago" | \
gemini ask "Преобразовать эти git коммиты в changelog" \
--output CHANGELOG.md
echo "✅ Генерация документации завершена!"
Генератор Тестов
Автоматическая генерация модульных тестов
#!/bin/bash
# generate-tests.sh - Автоматическая генерация модульных тестов
SOURCE_DIR="src"
TEST_DIR="tests"
echo "🧪 Генерация модульных тестов..."
find $SOURCE_DIR -name "*.js" -o -name "*.ts" | while read file; do
# Получить относительный путь
rel_path=\$\{file#\$SOURCE_DIR/\}
test_file="\$TEST_DIR/\$\{rel_path%.*\}.test.\$\{file##*.\}"
echo "📝 Генерация тестов для: $file"
gemini analyze "$file" \
--prompt "Сгенерировать полные модульные тесты с граничными случаями" \
--template jest \
--output "$test_file"
done
echo "✅ Генерация тестов завершена!"
Примеры Интеграции
Интеграция Gemini CLI с другими инструментами и рабочими процессами
Рабочий Процесс GitHub Actions
CI/CD интеграция с GitHub Actions
name: ИИ Ревью Кода
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
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Установить Gemini CLI
run: npm install -g @google/generative-ai-cli
- name: Настроить Gemini CLI
run: |
gemini config set api-key \$\{\{ secrets.GEMINI_API_KEY \}\}
gemini config set model gemini-pro
- name: Получить измененные файлы
id: changed-files
run: |
echo "files=\$(git diff --name-only HEAD~1 | tr '\n' ' ')" >> $GITHUB_OUTPUT
- name: ИИ Ревью Кода
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
uses: actions/github-script@v6
with:
script: |
const fs = require('fs');
const reviews = fs.readdirSync('.').filter(f => f.startsWith('review-'));
let comment = '## 🤖 ИИ Ревью Кода\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
Интеграция пользовательского расширения VS Code
// extension.js - Расширение VS Code для Gemini CLI
const vscode = require('vscode');
const { exec } = require('child_process');
function activate(context) {
// Команда: Объяснить Код
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('Пожалуйста, выберите код для объяснения');
return;
}
// Показать прогресс
vscode.window.withProgress({
location: vscode.ProgressLocation.Notification,
title: "Объяснение кода с помощью Gemini...",
cancellable: false
}, async () => {
return new Promise((resolve, reject) => {
exec(`echo "${text}" | gemini ask "Объясни этот код"`,
(error, stdout, stderr) => {
if (error) {
vscode.window.showErrorMessage(`Ошибка: ${error.message}`);
reject(error);
return;
}
// Показать объяснение в новом документе
vscode.workspace.openTextDocument({
content: stdout,
language: 'markdown'
}).then(doc => {
vscode.window.showTextDocument(doc);
resolve();
});
});
});
});
}
);
// Команда: Генерировать Тесты
let testCommand = vscode.commands.registerCommand(
'gemini.generateTests',
async () => {
const editor = vscode.window.activeTextEditor;
if (!editor) return;
const filePath = editor.document.fileName;
const testPath = filePath.replace(/\.(js|ts)$/, '.test.$1');
exec(`gemini analyze "${filePath}" --prompt "Сгенерировать модульные тесты" --output "${testPath}"`,
(error, stdout, stderr) => {
if (error) {
vscode.window.showErrorMessage(`Ошибка: ${error.message}`);
return;
}
vscode.window.showInformationMessage(`Тесты сгенерированы: ${testPath}`);
vscode.workspace.openTextDocument(testPath).then(doc => {
vscode.window.showTextDocument(doc);
});
});
}
);
context.subscriptions.push(explainCommand, testCommand);
}
function deactivate() {}
module.exports = { activate, deactivate };
Интеграция Docker
Использование Gemini CLI в контейнерах
# Dockerfile - Контейнер Gemini CLI
FROM node:18-alpine
# Установить Gemini CLI
RUN npm install -g @google/generative-ai-cli
# Установить рабочую директорию
WORKDIR /app
# Скопировать файлы проекта
COPY . .
# Установить переменные окружения
ENV GEMINI_API_KEY=""
# Создать скрипт анализа
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
# Команда по умолчанию
CMD ["analyze-project"]
Продвинутое Использование
Сложные сценарии и продвинутые функции
Разработка Пользовательских Инструментов
Создание пользовательских инструментов для конкретных задач
// custom-tools.js - Определения пользовательских инструментов
const tools = {
// Инструмент запросов к базе данных
database_query: {
name: 'database_query',
description: 'Выполнение SQL запросов к базе данных',
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 `Ошибка: ${error.message}`;
}
}
},
// Инструмент тестирования API
api_test: {
name: 'api_test',
description: 'Тестировать API эндпоинты',
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 `Статус: ${response.status}\nОтвет: ${data}`;
} catch (error) {
return `Ошибка: ${error.message}`;
}
}
},
// Инструмент форматирования кода
format_code: {
name: 'format_code',
description: 'Форматировать код с помощью prettier',
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 `Ошибка: ${error.message}`;
}
}
}
};
// Зарегистрировать инструменты в Gemini CLI
Object.values(tools).forEach(tool => {
process.env.GEMINI_TOOLS = JSON.stringify([
...(JSON.parse(process.env.GEMINI_TOOLS || '[]')),
tool
]);
});
module.exports = tools;
Пакетная Обработка
Обработка нескольких файлов или задач пакетами
#!/bin/bash
# batch-process.sh - Пакетная обработка с Gemini CLI
BATCH_SIZE=5
CONCURRENT_JOBS=3
# Функция для обработки одного файла
process_file() {
local file=$1
local task=$2
echo "🔄 Обработка: $file"
case $task in
"translate")
gemini ask "Перевести эти комментарии кода на английский" \
--file "$file" \
--output "${file%.js}.en.js"
;;
"optimize")
gemini analyze "$file" \
--prompt "Оптимизировать этот код для производительности" \
--output "${file%.js}.optimized.js"
;;
"document")
gemini analyze "$file" \
--prompt "Добавить полные JSDoc комментарии" \
--output "${file%.js}.documented.js"
;;
esac
echo "✅ Завершено: $file"
}
# Основная функция пакетной обработки
batch_process() {
local task=$1
shift
local files=("$@")
echo "🚀 Начало пакетной обработки: $task"
echo "📁 Файлов для обработки: ${#files[@]}"
# Обработка файлов пакетами
for ((i=0; i<${#files[@]}; i+=BATCH_SIZE)); do
batch=("${files[@]:i:BATCH_SIZE}")
echo "📦 Обработка пакета $((i/BATCH_SIZE + 1))"
# Обработка пакета с ограниченной параллельностью
for file in "${batch[@]}"; do
(($(jobs -r | wc -l) >= CONCURRENT_JOBS)) && wait
process_file "$file" "$task" &
done
wait # Ожидание завершения текущего пакета
done
echo "🎉 Пакетная обработка завершена!"
}
# Примеры использования
case $1 in
"translate")
batch_process "translate" src/**/*.js
;;
"optimize")
batch_process "optimize" src/**/*.js
;;
"document")
batch_process "document" src/**/*.js
;;
*)
echo "Использование: $0 {translate|optimize|document}"
exit 1
;;
esac
Система Плагинов
Создание расширяемой архитектуры плагинов
// plugin-system.js - Пример системы плагинов
const { GeminiCLI } = require('@google/generative-ai-cli');
class PluginManager {
constructor() {
this.cli = new GeminiCLI();
this.plugins = new Map();
}
// Регистрация плагина
registerPlugin(plugin) {
if (!plugin.name || !plugin.version) {
throw new Error('Плагин должен иметь имя и версию');
}
this.plugins.set(plugin.name, plugin);
// Регистрация команд плагина
if (plugin.commands) {
Object.entries(plugin.commands).forEach(([cmd, handler]) => {
this.cli.registerCommand(`${plugin.name}:${cmd}`, handler);
});
}
// Регистрация инструментов плагина
if (plugin.tools) {
plugin.tools.forEach(tool => {
this.cli.registerTool(tool);
});
}
console.log(`✅ Плагин ${plugin.name} v${plugin.version} зарегистрирован`);
}
// Получение информации о плагине
getPlugin(name) {
return this.plugins.get(name);
}
// Список всех плагинов
listPlugins() {
return Array.from(this.plugins.values());
}
}
// Пример плагина: Проверка качества кода
const codeQualityPlugin = {
name: 'code-quality',
version: '1.0.0',
description: 'Плагин проверки качества кода',
commands: {
'check': async (args) => {
const files = args.files || ['src/'];
console.log(`🔍 Проверка качества кода: ${files.join(', ')}`);
// Реализация логики проверки качества кода
return 'Проверка качества кода завершена';
},
'metrics': async (args) => {
console.log('📊 Генерация метрик кода...');
// Реализация логики генерации метрик
return {
complexity: 'low',
maintainability: 'high',
coverage: '85%'
};
}
},
tools: [
{
name: 'complexity_analyzer',
description: 'Анализ сложности кода',
parameters: {
file: { type: 'string', required: true }
},
execute: async ({ file }) => {
// Реализация анализа сложности
return `Сложность файла ${file}: средняя`;
}
}
]
};
// Пример использования
async function main() {
const manager = new PluginManager();
// Регистрация плагина
manager.registerPlugin(codeQualityPlugin);
// Использование команды плагина
const result = await manager.cli.executeCommand('code-quality:check', {
files: ['src/main.js', 'src/utils.js']
});
console.log('Результат проверки:', result);
// Список всех плагинов
console.log('Установленные плагины:', manager.listPlugins());
}
main().catch(console.error);
Нужна дополнительная помощь?
Изучите больше ресурсов и документации