۱. مقدمه

سلام به همه! اسمم اسپارکی هست! خیلی خوشحالم که تونستی بیای. من از یه کلاستر GKE توی us-central1 با سرعت زیپ اومدم اینجا تا امروز. به این آزمایشگاه کد خوش اومدید.
من تمام عمرم را صرف گشت و گذار در جریان دادههای گوگل کلود کردهام و همه چیز را دیدهام. شما، معماران و مهندسان، را دیدهام که چیزهای شگفتانگیزی میسازید. اما همچنین دیدهام که در بوتهها گیر میکنید. میدانید در مورد چه چیزی صحبت میکنم! آن حس تغییر زمینه هنگام اشکالزدایی یک پاد در GKE. شما بین kubectl logs ، کنسول GCP برای بررسی سلامت گره، IDE خود برای بررسی کد منبع مستقر شده و یک تب مرورگر با اسناد رسمی Kubernetes برای قلابهای چرخه عمر پاد، میپرید. هر پرش، یک وقفه در تمرکز است!
و ابزارهای پیچیده ! gcloud ، kubectl ، terraform ... هر کدام DSL مخصوص به خود و کوهی از flagها را دارند. این منجر به جستجوی مداوم مستندات میشود. در نهایت شما به دنبال آن دستور gcloud بینقص با ترکیب مناسب flagهای --filter و --format میگردید تا دادههای مورد نیاز خود را بدست آورید. مثل این است که بخواهید یک دانه خاص را در جنگلی از میلیونها دانه پیدا کنید. و من را با کارهای تکراری شروع نکنید. من دیدهام که شما Dockerfile و cloudbuild.yaml یکسانی را برای یک سرویس جدید پایتون نوشتهاید، آنقدر که احتمالاً کد برایتان آشناست.
خب، من اینجام تا یه راه بهتر بهتون نشون بدم. یه راه مخفی از وسط جنگل. Gemini CLI همینه دیگه!
رابط خط فرمان جمینی چیست؟
خب، این میانبر جادویی که من اینقدر در موردش هیجانزدهام چیه؟
رابط خط فرمان Gemini را به عنوان همراه ابری شخصی خود، درست درون ترمینال خود در نظر بگیرید. این یک مکالمه است، یک همکاری! این رابط از متن آگاه است ، که به عبارت سادهتر فقط گوش دادن نیست، بلکه درک کردن است. میتواند فایلهای شما را بخواند، قراردادهای پروژه شما - مانند اینکه آیا از تب یا فاصله استفاده میکنید - را یاد بگیرد و بفهمد که سعی دارید چه کاری انجام دهید. مثل این است که من میتوانم بوی بلوطهایی را که سعی در جمعآوری آنها دارید، حس کنم!
معماری سطح بالا (بیایید نگاهی به زیر کاپوت بیندازیم!)
خب، همه اینها چطور کار میکند؟ ترکیبی از چند چیز جالب است که با هماهنگی با هم کار میکنند:
- یک مدل زبانی قدرتمند: این مغز است! به طور خاص، این یک مدل بزرگ و چندوجهی است که توسط گوگل آموزش دیده است. « چندوجهی » به این معنی است که فقط متن را نمیفهمد؛ بلکه ساختار و معنای کد را نیز درک میکند. این به آن اجازه میدهد تا در مورد نرمافزار شما استدلال کند، نه فقط آن را بخواند.
- زمینه محلی شما: این بسیار مهم است. رابط خط فرمان Gemini به عنوان یک فرآیند در دستگاه محلی شما، با همان مجوزهای حساب کاربری شما اجرا میشود. این بدان معناست که میتواند به سیستم فایل شما دسترسی داشته باشد تا کمکهای خاص پروژه را ارائه دهد. این یک سرویس ابری دورافتاده نیست که در مورد کد شما حدس بزند؛ این دقیقاً همینجا با شماست.
- یک اکوسیستم ابزارسازی: این نحوه تعامل مدل با جهان است. این اکوسیستم مجموعهای از توابع خوشتعریف دارد که میتواند فراخوانی کند - مانند
read_fileیاrun_shell_command. آن را مانند یک API امن در نظر بگیرید. مدل تصمیم میگیرد چه کاری انجام دهد و از کدام ابزار استفاده کند و سپس یک بلوکtool_codeبرای اجرای آن تولید میکند. این امر اقدامات آن را قابل پیشبینی و قابل اعتماد میکند. - اجرای دستورات شل: این جادوی واقعی است! میتواند هر دستوری را در یک زیرپوسته
bash -c <command>اجرا کند. این ابزارstdout،stderrوexit codeرا ضبط میکند. این قابلیت فوقالعادهای است! به این معنی که Gemini CLI میتواند یک دستور را اجرا کند، بررسی کند که آیا با شکست مواجه شده است یا خیر، و سپس بر اساس پیام خطا سعی در رفع آن کند. - شبکه ایمنی: این بخش مورد علاقه من است! قبل از اینکه بلوک
tool_codeاجرا شود، کلاینت CLI دستور یا کد دقیق را به شما نشان میدهد و از شما تأیید میخواهد. این یک بررسی سمت کلاینت است، بنابراین قبل از اینکه چیزی به سیستم شما آسیب برساند، حرف آخر را میزنید. شما همیشه مسئول هستید!
این فقط یک چتبات نیست، بلکه یک عملگر است! یک یاور فعال در ماجراجویی کدنویسی شما.
مفهوم کلیدی: اعلانی در مقابل امری
بزرگترین و شگفتانگیزترین تغییر، تغییر از گفتن چگونگی انجام کاری به کامپیوتر، به گفتن آنچه میخواهید به آن است.
- دستوری (مسیر قدیمی و دشوار): شما باید در هر قدم، با دقت عمل کنید. شما باید در زبان دامنه خاص آن ابزار متخصص باشید. مانند این دستور غولپیکر:
وای! به همه اینها نگاه کنید! شما باید سینتکس مربوط به نوع ماشین، خانواده تصویر، فراداده و برچسبها را بدانید. اگر یک بخش را از دست بدهید، با یک خطای مبهم مواجه میشوید.gcloud compute instances create my-vm --project=my-project --zone=us-central1-a --machine-type=e2-medium --image-family=debian-11 --image-project=debian-cloud --metadata-from-file startup-script=./startup.sh --tags=http-server,dev - اعلانی (میانبر پر زرق و برق!): شما فقط آنچه را که میخواهید به انگلیسی ساده بیان میکنید!
Create a new e2-medium VM for my web server in us-central1, run the startup.sh script, and tag it for http traffic.
همین! جمینی درخواست شما را تجزیه و تحلیل میکند، آن را به پارامترهای ابزار gcloud نگاشت میکند، سینتکس صحیح هر پرچم را پیدا میکند و آن دستور بزرگ و ترسناک را برای شما میسازد. سپس آن را برای تأیید به شما ارائه میدهد. همه چیز در مورد این است که به شما اجازه دهیم متفکر تصویر کلی باشید، نه حافظ پرچمهای خط فرمان.
گسترش قدرت Gemini: مقدمهای بر افزونههای CLI
اگرچه رابط خط فرمان Gemini ابزاری قدرتمند و آماده به کار است، اما پتانسیل واقعی آن از طریق افزونهها آشکار میشود. افزونهها مجموعهای از اعلانها، ابزارها و دستورات سفارشی هستند که عملکرد رابط خط فرمان را افزایش میدهند و به شما امکان میدهند آن را با نیازها و گردشهای کاری خاص خود تطبیق دهید.
پیدا کردن و نصب افزونهها
رابط خط فرمان Gemini دارای یک اکوسیستم رو به رشد از افزونههای ساخته شده توسط گوگل و توسعهدهندگان شخص ثالث است. میتوانید فهرست رسمی افزونهها را در geminicli.com/extensions مرور کنید.
برای نصب یک افزونه، میتوانید از دستور gemini extensions install به همراه URL مخزن گیت افزونه استفاده کنید. به عنوان مثال، برای نصب افزونه رسمی Cloud SQL برای PostgreSQL، دستور زیر را اجرا کنید:
gemini extensions install https://github.com/gemini-cli-extensions/cloud-sql-postgresql
خب، دیگه بسه حرف زدن! بیایید دست به کار بشیم و این چیز رو امتحان کنیم!
۲. قبل از شروع

سلام به جادوگران ابری آینده! اسپارکی، در خدمت شما. قبل از اینکه بتوانیم ماجراجویی بزرگ خود را شروع کنیم، باید مطمئن شویم که محیط کارگاه شما آماده است. به این فکر کنید که قبل از رفتن به جنگل، چمدانهایمان را با تمام ابزارهای مناسب و بلوطهای جادویی پر میکنیم. دنبالم بیایید!
اگر از قبل یک پروژه Google Cloud دارید، میتوانید از Gemini CLI در Google Cloud Shell استفاده کنید زیرا Gemini CLI از قبل روی آن نصب شده است. روش دیگر این است که برای راهاندازی آن روی دستگاه محلی خود، این مراحل را دنبال کنید.
مرحله ۱: ملزومات اولیه (پیشنیازها)
هر ماجراجوی خوبی به یک پایه محکم نیاز دارد. قبل از اینکه بتوانیم Gemini CLI را نصب کنیم، به چند چیز نیاز دارید که از قبل روی دستگاه محلی شما تنظیم شده باشند.
- کیت توسعه نرمافزار گوگل کلود (
gcloud) : این ابزار اصلی برای گوگل کلود است. رابط خط فرمان Gemini بخشی از این خانواده است!
- بررسی کنید که آیا نصب شده است یا خیر : دستور
gcloud --versionرا اجرا کنید. اگر شماره نسخه را مشاهده کردید، آماده استفاده هستید! - اگر نصب نشده است : دستورالعملهای رسمی را در cloud.google.com/sdk/docs/install دنبال کنید.
- گیت : برای کپی کردن مخزن آزمایشگاهی عملی به این نیاز داریم.
- بررسی کنید که آیا نصب شده است یا خیر :
git --versionاجرا کنید. - اگر نصب نیست : میتوانید آن را از git-scm.com/downloads دریافت کنید.
- پروژه GCP و احراز هویت :
- مطمئن شوید که یک پروژه گوگل کلود با قابلیت پرداخت فعال دارید. این خیلی مهم است!
- با اجرای دستور زیر وارد حساب گوگل خود شوید:
gcloud auth login
- پروژه خود را برای جلسه تنظیم کنید. شناسه پروژه خود را از کنسول GCP پیدا کنید و اجرا کنید:
gcloud config set project YOUR_PROJECT_ID
(به جای YOUR_PROJECT_ID ، شناسه پروژه خود را قرار دهید!)
- Node.js نسخه ۲۰ یا بالاتر
مرحله ۲: جادو را به دست بگیرید! (نصب رابط خط فرمان Gemini)
خب، حالا که مقدمات کار را انجام دادیم، وقت آن رسیده که به سراغ بخش اصلی برویم! رابط خط فرمان Gemini را نصب خواهیم کرد.
فوراً با npx اجرا کنید
# Using npx (no installation required)
npx https://github.com/google-gemini/gemini-cli
نصب سراسری با npm
npm install -g @google/gemini-cli
نصب سراسری با Homebrew (macOS/Linux)
brew install gemini-cli
نسخه جمینی را بررسی کنید
gemini --version
شما باید شماره نسخه را ببینید. این تایید میکند که نصب موفقیتآمیز بوده است.
مرحله ۳: روشن کردن (پیکربندی)
حالا که رابط خط فرمان Gemini نصب شده است، باید کلیدهای پادشاهی را به آن بدهیم. ابتدا، با اجرای دستور gemini در ترمینال، آن را اجرا کنید. باید صفحه زیر را ببینید:

برای سادگی، میتوانید با حساب گوگل خود احراز هویت کنید که به شما امکان دسترسی به Gemini 2.5 Pro را با پنجره متن ۱ میلیون توکن و تا ۶۰ درخواست در دقیقه و ۱۰۰۰ درخواست در روز بدون نیاز به مدیریت کلید API میدهد.
اگر میخواهید به مدلهای خاص Gemini دسترسی داشته باشید یا در صورت نیاز به محدودیتهای بالاتر ارتقا دهید، از کلید API Gemini به عنوان روش احراز هویت استفاده کنید.
برای تیمهای سازمانی و حجم کاری تولیدی که از قبل یک حساب Google Project و Billing Account راهاندازی کردهاند، از Vertex AI برای امنیت و انطباق پیشرفته استفاده کنید.
بسته به گزینهای که انتخاب کردهاید، مراحل بعدی برای پیکربندی احراز هویت از شما پرسیده خواهد شد. برای جزئیات بیشتر در مورد این گزینهها به مستندات Gemini CLI مراجعه کنید.
اگر قصد دارید از پلتفرم هوش مصنوعی Vertex گوگل کلود استفاده کنید، ابتدا با دو بار فشردن کلیدهای ctrl+c از Gemini CLI خارج شوید و متغیرهای محیطی مورد نیاز را تنظیم کنید.
صرف نظر از روش احراز هویت شما، معمولاً باید متغیرهای زیر را تنظیم کنید: GOOGLE_CLOUD_PROJECT و GOOGLE_CLOUD_LOCATION.
برای تنظیم این متغیرها:
# Replace with your project ID and desired location (e.g., us-central1)
export GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"
export GOOGLE_CLOUD_LOCATION="YOUR_PROJECT_LOCATION"
حالا بیایید وارد گوگل کلود شویم:
gcloud auth application-default login
پس از احراز هویت با روش قبلی، با اجرای دستور gemini در ترمینال، دوباره Gemini CLI را اجرا کنید. در گزینههای احراز هویت، Vertex AI را انتخاب کنید و باید تنظیم شده باشید.
مرحله ۴: تست جرقه! (تأیید تنظیمات شما)
این لحظه حقیقت است! بیایید ببینیم که آیا همه چیز کار میکند یا خیر. این دستورات را اجرا کنید تا مطمئن شوید که همه چراغها سبز هستند.
- دستور زیر را وارد کنید:
What is my current directory?
رابط خط فرمان Gemini باید با اعلام دایرکتوری کاری فعلی شما پاسخ دهد. این کار مدل زبان اصلی و ادغام پوسته را آزمایش میکند.

- اتصال GCP را آزمایش کنید:
list my gcs buckets
اگر سطلهای GCS دارید، باید آنها را فهرست کند. در غیر این صورت، به شما میگوید که هیچ سطلی وجود ندارد. این تأیید میکند که به درستی به پروژه GCP شما متصل شده است.
مرحله ۵: دادن قدرتهای برتر بیشتر به آن! (نصب افزونهها)
حالا بیایید قابلیتهای Gemini CLI را با نصب چند افزونه که بعداً در آزمایشگاه به کار خواهند آمد، افزایش دهیم.
اجرای ابری
gemini extensions install https://github.com/GoogleCloudPlatform/cloud-run-mcp
امنیت رابط خط فرمان (CLI) جمینی
gemini extensions install https://github.com/gemini-cli-extensions/security
جیکلاود
gemini extensions install https://github.com/gemini-cli-extensions/gcloud
SQL ابری برای PostgreSQL
gemini extensions install https://github.com/gemini-cli-extensions/cloud-sql-postgresql
اگر همه این دستورات کار کردند، شما رسماً برای کارگاه آماده هستید! محیط شما راهاندازی شده است و شما آمادهاید تا بهرهوری خود را آزاد کنید. شما را در اولین آزمایش میبینم!
۳. مفاهیم اصلی و تعامل فضای کاری محلی

خب، آمادهاید که حسابی کار کنید؟ حالا میخواهیم نگاهی به ابزارهای موجود در جعبه ابزار جدید جمینی شما بیندازیم. من آنها را به عنوان ابرقدرتهای خودم برای کاوش و ساخت و ساز در فضای ابری میشناسم! بیایید کمی در مورد نحوه کار آنها کنجکاو شویم.
قابلیتهای اصلی
من قدرتهایم را به دو دسته تقسیم میکنم: دیدن آنچه در اطرافم هست، و بعد انجام دادن کارها!
درک محیط اطرافتان (حواس برتر من!)
قبل از اینکه شروع به ساختن لانه جدید کنید، باید درخت را بررسی کنید، درست است؟ این ابزارها برای آشنایی با محل ساخت لانه هستند.
-
list_directory: این ابزار پایهی «اسنیف اینور و آنور» من است. این یک پوشش سرراست برای فهرستبندی استاندارد دایرکتوریها در سطح سیستمعامل است. اما نکتهی جالب این است که مدل میتواند این خروجی ساختاریافته را تجزیه کند تا تصمیماتی بگیرد، مانند انتخاب کاوش در یک زیردایرکتوری به نامsrc. -
glob: این یکی «یابنده بلوط» من است! از الگوهای استاندارد glob - مانند*،**،?و[]- که شما از قبل از چیزهایی مانند.gitignoreمیدانید، استفاده میکند. بنابراین میتوانید با استفاده از الگویapp/**/*.pyبپرسید «تمام فایلهای*.pyرا در دایرکتوریappپیدا کن». این یک روش قدرتمند برای جمعآوری مجموعهای خاص از فایلها برای مدل جهت تجزیه و تحلیل است. -
search_file_content: این دید اشعه ایکس من است! این برنامه از عبارات منظم کامل (regex) برای جستجوهای خود استفاده میکند، نه فقط تطبیق رشته ساده. این فوقالعاده قدرتمند است. میتوانید از آن بخواهید الگوهای پیچیدهای مانند «یافتن همه مسیرهای Flask که از یک متد POST استفاده میکنند» را پیدا کند، که ممکن است یک عبارت منظم مانندapp\.route\(.*methods=\['POST'\].*\)تولید کند.app\.route\(.*methods=\['POST'\].*\)این تابع مسیر فایل، شماره خط و خط منطبق را برمیگرداند و تمام زمینه مورد نیاز مدل را در اختیار آن قرار میدهد. -
read_file: وقتی یک فایل جالب پیدا کردید، میخواهید آن را باز کنید.read_fileبرای این کار بهینه شده است. میتوانید یک فایل کامل را بخوانید، یا برای فایلهای بزرگ، میتوانید از پارامترهایoffsetوlimitبرای خواندن آن به صورت تکهتکه استفاده کنید. این بدان معناست که مدل میتواند حتی فایلهای لاگ بزرگ را بدون وقفه زمانی به طور موثر اسکن کند.
از درک تا عمل (وقت ساختن است!)
خب، شما زمین را کاوش کردهاید. حالا وقت ساختن لانهتان است! این ابزارها به شما امکان میدهند تغییراتی ایجاد کنید و کارها را انجام دهید.
-
**write_file**: آیا نیاز به ایجاد یک فایل جدید از ابتدا دارید؟write_fileیک عملیات اتمیک است که محتوای کامل ارائه شده توسط شما را در یک مسیر مشخص مینویسد. این دستور برای ایجاد ماژولهای جدید یا ایجاد یکDockerfileاز ابتدا بر اساس نیازهای پروژه شما عالی است. -
**replace**: این ابزار برای تغییرات جزئی و دقیق است! این فقط یک جستجوی ساده و جایگزینی نیست. شما یکold_stringو یکnew_stringارائه میدهید. برای اینکه این کار به طور ایمن انجام شود،old_stringباید یک قطعه کد منحصر به فرد از فایل باشد، معمولاً با چندین خط متن قبل و بعد از بخشی که تغییر میدهید. این تضمین میکند که ما فقط دقیقاً همان قطعه کدی را که قصد تغییر آن را دارید تغییر میدهیم. -
**run_shell_command**: این آخرین قدرتنمایی است! دستور داده شده را در یک زیرپوستهbash -c <command>اجرا میکند. مدلstdout،stderrوexit codeرا دریافت میکند. این برای ساخت گردشهای کاری بسیار مهم است. مدل میتواند یکterraform planاجرا کند، خروجی را بخواند و اگر طرح موفقیتآمیز باشد (کد خروج 0)، میتواند از شما بپرسد که آیا باید آن را اعمال کند یا خیر.
شبکه ایمنی (قول من به شما!)
خب، اجرای دستورات میتواند ترسناک باشد. میفهمم! به همین دلیل است که شبکهی ایمنی بسیار مهم است. وقتی مدل یک بلوک tool_code تولید میکند که حاوی فراخوانی run_shell_command یا write_file است، کلاینت Gemini CLI آن را رهگیری میکند. دستور دقیق یا محتوای کامل فایلی که باید نوشته شود را به شما نشان میدهد و یک اعلان [y/n] به شما میدهد. هیچ اتفاقی بدون تأیید صریح شما نمیافتد. شما همیشه کنترل اوضاع را در دست دارید.
۴. بررسی یک پروژه

هدف: استفاده از رابط خط فرمان Gemini برای درک یک کدبیس ناآشنا بدون ترک ترمینال.
سناریو: شما یک توسعهدهنده تازهکار هستید و باید خیلی سریع با این پروژه آشنا شوید!
وظیفه ۰: راهاندازی - کپی کردن پروژه!
اول از همه، باید کد را دریافت کنیم! این کد در یک مخزن عمومی در گیتهاب، در یک «درخت» به نام quickpoll پنهان شده است. بیایید از Gemini CLI بخواهیم که آن را برای ما کلون کند. قبل از انجام این کار، بیایید یک دایرکتوری کاری ایجاد کنیم و Gemini CLI را از داخل دایرکتوری کاری اجرا کنیم:
mkdir workdir
cd workdir
gemini
حالا، این دستور را تایپ کنید:
clone the github repository from the URL: https://github.com/gauravkakad-google/quickpoll.git

جمینی متوجه خواهد شد که «کلون» به معنای استفاده از دستور git clone است. این ابزار یک فراخوانی run_shell_command با چیزی شبیه به git clone https://github.com/gauravkakad-google/quickpoll.git ایجاد میکند. پس از تأیید شما، مخزن را برای شما دانلود میکند.
حالا، با دو بار زدن ctrl+c از محیط خط فرمان Gemini خارج میشویم، به مخزن نمونه میرویم و دوباره Gemini CLI را اجرا میکنیم:
cd quickpoll
gemini
عالی! حالا که داخل درخت پروژه هستیم، میتوانیم کاوش را شروع کنیم!
وظیفه ۱: فهرست کردن تمام فایلهای موجود در پروژه
حالا که وارد شدیم، بیایید کل جنگل را نقشه برداری کنیم. ما میخواهیم تک تک فایلها را ببینیم. از Gemini این را بپرسید:
List all the files in the project.
احتمالاً Gemini از ابزار glob با الگوی **/* استفاده خواهد کرد. این ابزار به صورت بازگشتی هر فایل را فهرست میکند و یک مانیفست کامل از کدبیس به شما میدهد. این اولین قدم عالی برای درک ساختار پروژه است.
وظیفه ۲: یافتن تمام فایلهایی که 'google.cloud.sql.connector' را وارد میکنند
خب، من کنجکاوم. این پروژه کجا با فضای ذخیرهسازی ابری گوگل (Google Cloud Storage) ارتباط برقرار میکند؟ بیایید کمی تحقیق کنیم. این را بپرسید:
Find all files that import the 'google.cloud.sql.connector' library.

با استفاده از قدرت search_file_content ، Gemini فایلهای دقیقی را که حاوی آن دستور import هستند پیدا میکند. این کار بلافاصله تمرکز شما را به بخشهایی از کد که تعامل Cloud SQL را مدیریت میکنند، محدود میکند. در این پروژه، باید backend/main.py پیدا کند.
وظیفه ۳: محتویات فایل اصلی داکر را به من نشان بده
من یک Dockerfile میبینم! این طرح اولیه کانتینر ماست. بیایید نگاهی به داخل آن بیندازیم. فقط بپرسید:
Show me the contents of the main Dockerfile.

Gemini از read_file برای نمایش Dockerfile استفاده خواهد کرد. شما میتوانید ایمیج پایه ( FROM )، وابستگیهای در حال نصب ( RUN pip install... ) و دستور نهایی ( CMD ) را تجزیه و تحلیل کنید. این به شما در مورد محیط زمان اجرای برنامه اطلاعات میدهد.
وظیفه ۴: هدف فایل main.py چیست؟
بسیار خب، وقت آن رسیده که به اصل کد نگاهی بیندازیم. بیایید از Gemini بخواهیم که راهنمای ما باشد. این را بگویید:
What's the purpose of the `main.py` file?

اینجاست که رابط خط فرمان Gemini واقعاً میدرخشد. ابتدا read_file در backend/main.py فراخوانی میکند. سپس، مدل زبان چندوجهی آن، کد پایتون را تجزیه و تحلیل میکند. مشخص میکند که این یک برنامه FastAPI است که یک API REST برای یک برنامه نظرسنجی ارائه میدهد. سپس نقاط پایانی API و عملکرد آنها را توضیح میدهد. این کار باعث میشود در زمان خواندن و رمزگشایی همه چیز توسط خودتان صرفهجویی کنید. همچنین میتوانید سوالات تکمیلی بپرسید تا برخی از این عملکردها را با جزئیات توضیح دهید. خیلی مرتب است، نه؟ امتحانش کنید!
۵. از لوکال به لایو! استقرار با Cloud Run و Cloud SQL

بسیار خب، ماجراجوی فضای ابری، شما قلمرو را کشف کردهاید. حالا وقت آن رسیده که خانه درختی خودتان را در فضای ابری بسازید! ما قصد داریم برنامه quickpoll خود را به یک برنامه وب واقعی و زنده تبدیل کنیم که هر کسی بتواند از آن بازدید کند.
هدف: برنامه quickpoll را روی Cloud Run، با یک Cloud SQL برای PostgreSQL backend، مستقر کنید.
وظیفه ۱: یک شاخه محکم برای دادههای ما (راهاندازی Cloud SQL)
هر برنامهی خوبی به جایی برای ذخیرهی اطلاعات ارزشمندش نیاز دارد... منظورم دادهها است! ما از Cloud SQL برای PostgreSQL استفاده خواهیم کرد. این مثل یک باغ جادویی و خودکفا برای پایگاه دادهی ماست، بنابراین میتوانیم روی چیزهای جالب تمرکز کنیم.
بیایید از رابط خط فرمان Gemini بخواهیم که بذر پایگاه داده ما را بکارد.
Please create a new Cloud SQL for PostgreSQL instance for me in project <myproject>. Call it quickpoll-db and put it in us-central1. Lets use the Development preset for now, and make the root password a-very-secure-password!.

رابط خط فرمان Gemini، با استفاده از افزونهی Cloud SQL خود، شروع به کار خواهد کرد. فراخوانی ابزار create_instance را به شما نشان میدهد. آن را تأیید کنید!
پس از ایجاد نمونه، باید خروجی مشابه این را مشاهده کنید:

شما میتوانید یک فایل .env با متغیر محیطی فوق ایجاد کنید و قبل از راهاندازی مجدد Gemini CLI، آن را source کنید تا به این متغیرها دسترسی داشته باشد.
در حالی که نمونه ما در حال رشد است، بیایید خاک را آماده کنیم. ما به یک پایگاه داده و یک کاربر برای برنامه خود نیاز داریم.
In the quickpoll-db instance, create a new database named quickpolldb.
رابط خط فرمان Gemini از ابزار create_database در افزونه Cloud SQL for PostgreSQL برای ایجاد پایگاه داده برای شما استفاده خواهد کرد.

حالا بیایید یک کاربر برای رسیدگی به آن اضافه کنیم:
In the quickpoll-db instance, create a built in user named quickpoll-user with the password another-secure-password!.
این بار، رابط خط فرمان Gemini از ابزار create_user استفاده خواهد کرد.

وظیفه ۲: مسیر مخفی (اتصال به بکاند)
بکاند ما باید مسیر مخفی به پایگاه داده جدیدمان را بداند. بیایید نگاهی به فایل backend/main.py بیندازیم تا ببینیم چگونه این مسیر را پیدا میکند.
show me how would the backend/main.py connect to the database

آها! دیدی؟ این برنامه از رابط پایتون Cloud SQL استفاده میکند و به دنبال متغیرهای محیطی مانند CLOUD_SQL_POSTGRES_INSTANCE، CLOUD_SQL_POSTGRES_USER، CLOUD_SQL_POSTGRES_PASSWORD و CLOUD_SQL_POSTGRES_DATABASE میگردد. ما باید این موارد را به سرویس Cloud Run خود بدهیم.
اول، ما به CLOUD_SQL_POSTGRES_INSTANCE نیاز داریم. این مثل یک دست دادن مخفی است.
What are the details for the Cloud SQL instance quickpoll-db in us-central1?

کلی جزئیات خواهید دید. به دنبال Connection Name بگردید و مقدار آن را کپی کنید. چیزی شبیه به your-project-id:us-central1:quickpoll-db خواهد بود.
حالا قبل از اینکه برنامه را روی Cloud Run مستقر کنیم، بیایید پایگاه داده را با جداول مورد نیاز نمونهسازی کنیم. از آنجایی که یک پایگاه داده و یک کاربر جداگانه ایجاد کردهایم، بیایید از Gemini CLI خارج شویم و .env را که قبلاً ایجاد کردیم با مقادیر جدید بهروزرسانی کنیم:
export CLOUD_SQL_POSTGRES_USER=quickpoll-user
export CLOUD_SQL_POSTGRES_PASSWORD=password-you-provided
export CLOUD_SQL_POSTGRES_DATABASE=quickpolldb
حالا Gemini CLI را ریستارت کنید و دستور زیر را وارد کنید:
execute backend/database.sql file on quickpolldb database as quickpolluser in quickpoll-db instance

این ابزار به طور خودکار متوجه شد که ابزار execute_sql از اجرای چندین دستور SQL در یک فراخوانی واحد پشتیبانی نمیکند. بنابراین، هر دستور SQL را جداگانه اجرا کرد.
وظیفه ۳: بکاند، پرواز کن! (استقرار در فضای ابری)
وقت آن رسیده که backend ما از این وضعیت خارج شود! به Gemini میگوییم که پوشه backend را در Cloud Run مستقر کند و مسیر مخفی به پایگاه داده را به آن بدهد.
Deploy the backend folder to a new Cloud Run service called quickpoll-be in us-central1. Here are the secrets (environment variables):
CLOUD_SQL_POSTGRES_INSTANCE=your-project-id:us-central1:quickpoll-db
CLOUD_SQL_POSTGRES_USER=quickpoll-user
CLOUD_SQL_POSTGRES_PASSWORD=password-you-provided
CLOUD_SQL_POSTGRES_DATABASE=quickpolldb
جمینی کد شما را بستهبندی میکند، یک تصویر کانتینر ایجاد میکند و آن را در Cloud Run مستقر میکند. پس از اتمام کار، که میتواند چند دقیقه طول بکشد، یک URL برای سرویس backend جدید و جذاب خود دریافت خواهید کرد. آن URL را دم دست داشته باشید!

وظیفه ۴: کارهای پایانی (پیکربندی و استقرار رابط کاربری)
فرانتاند ما مانند چهره دوستانه برنامه ماست. باید بداند که بکاند را کجا پیدا کند. بیایید به آن بگوییم که کجا برود.
Deploy the frontend folder to a new Cloud Run service called quickpoll-fe in us-central1. Here are the secrets (environment variables):
BACKEND_URL=backend-url

وظیفه ۵: رونمایی باشکوه!
همینه! لحظه حقیقت! آدرس اینترنتی سرویس کوئیکپولفِی (quickpoll-fe) خود را بگیرید و آن را در مرورگر وب خود باز کنید.
شما باید برنامه QuickPoll خود را ببینید، زنده و آماده برای اقدام! ادامه دهید، یک نظرسنجی ایجاد کنید، رأی دهید و بهروزرسانی نتایج را در لحظه مشاهده کنید.
شما موفق شدید! شما یک پروژه را از دستگاه محلی خود برداشتید و آن را در Google Cloud به اجرا درآوردید. و همه این کارها را از راحتی ترمینال خود با دستیار قابل اعتماد خود، Gemini CLI، انجام دادید.
حالا این چیزی است که من به آن بهرهوری میگویم!
۶. برای توسعهدهنده - تسریع چرخه عمر توسعه

بسیار خب، توسعهدهندگان، اینجاست که لذت واقعی شروع میشود! ما یک پروژه را بررسی کردهایم، اما حالا وقت ساختن آن است. من به شما نشان خواهم داد که چگونه Gemini میتواند شریک کدنویسی نهایی شما باشد و به شما کمک کند تا از یک ایده ساده به کد آماده تولید سریعتر از یک سنجاب که میتواند یک فندق پیدا کند، برسید!
از ایده تا کد
به چرخه توسعه معمولی فکر کنید. فقط نوشتن کد نیست، درست است؟ این شامل ایجاد چارچوب، اضافه کردن مدیریت خطا، بازسازی کد و نوشتن تستها میشود. Gemini میتواند در همه این موارد کمک کند!
کارهای تکراری و کلیشهای: دیگر خبری از کپی-پیست نیست!
خب، شما قابلیتهای اولیه برنامهتان را دارید. حالا باید ثبت وقایع (logging) و مدیریت خطاهای احتمالی را اضافه کنید، درست است؟ این معمولاً شامل کلی try...except بلوکها. دیگر نه! بیایید با درخواست از Gemini CLI برای تجزیه و تحلیل کد و ارائه بهترین توصیههای عملی برای ثبت وقایع خطا و مدیریت استثنائات شروع کنیم:
What are the best practices for error handling and logging that should also be included in this application?

رابط خط فرمان Gemini فایل موجود را تجزیه و تحلیل کرده و بهترین توصیهها را ارائه میدهد. آن را به عنوان یک دستیار متخصص در نظر بگیرید که میتواند در زمان شما برای تحقیق در مورد این موارد صرفهجویی کند.
حالا، بیایید از آن بخواهیم که این توصیهها را برای شما اجرا کند:
please go ahead and implement these in the existing app
خروجی واقعی ممکن است در مورد شما متفاوت باشد، اما در نهایت باید جزئیات تغییراتی که انجام داده است را ببینید. برای مثال، در تصویر زیر میتوانید ببینید که structlog برای تولید لاگهای با فرمت JSON اضافه کرده، مدیریت متمرکز خطاها را پیادهسازی کرده و نحوه ثبت پاسخهای درخواست را بهبود بخشیده است. به تمام تایپهایی که ذخیره کردهاید فکر کنید!

بازسازی کد: بررسیکننده کد شخصی شما
همه ما میخواهیم کدی تمیز و کارآمد بنویسیم. اما گاهی اوقات عجله داریم. Gemini میتواند به عنوان بررسیکننده کد شخصی شما عمل کند. میتوانید از آن چیزهایی مانند موارد زیر بپرسید:
please perform a comprehensive code review for best practices and security


Gemini بهترین شیوههای خاص زبان را درک میکند. باز هم، خروجی واقعی در مورد شما ممکن است با تصاویر بالا متفاوت باشد، اما اگر خروجی را بخوانید، از سطح جزئیاتی که Gemini CLI برای تجزیه و تحلیل کد به کار گرفته است، قدردانی خواهید کرد. این به شما کمک میکند تا همزمان کد خود را یاد بگیرید و بهبود بخشید!
تولید تست: بهترین قسمت!
این ترفند مورد علاقهی من است! همه ما میدانیم که باید تست بنویسیم، اما میتواند خستهکننده باشد، مخصوصاً وقتی که مجبور باشید چیزهایی را شبیهسازی کنید. خب، این را بررسی کنید. میتوانید فقط بپرسید:
Add a test suite to this application



جمینی تابع شما را تجزیه و تحلیل میکند، ورودیها و خروجیهای آن را شناسایی میکند و وابستگیهای آن را تشخیص میدهد. سپس یک فایل test_main.py کامل با چندین مورد آزمایشی، از جمله یک «مسیر شاد» و شاید یک شرط خطا، ایجاد میکند. این یک افزایش بهرهوری عظیم است!
تستها را اجرا کنید! (یک کار چالشبرانگیز برای شما)
حالا، اینجاست که همه چیز واقعاً هیجانانگیز میشود! من این بخش را به عنوان یک چالش برای شما میگذارم تا خودتان به طور مستقل آن را بررسی کنید. میتوانید از Gemini CLI بخواهید که موارد آزمایشی تولید شده را اجرا کند. سپس، فقط بنشینید و شاهد جادوی آن باشید!
۷. فراتر از میزبان محلی: ادغام با گیتهاب

ما کارهای شگفتانگیزی روی دستگاه محلیمان، گوشه کوچک جنگل خودمان، انجام دادهایم. اما قدرت واقعی فضای ابری، همکاری و ارتباط است! وقت آن رسیده که پرواز کنیم و ببینیم Gemini چگونه میتواند با دنیای وسیعتر تعامل داشته باشد، و این کار را با بزرگترین درخت در جنگل توسعهدهندگان، یعنی GitHub، شروع کنیم!
مفهوم: دستیار یکپارچه DevOps شما
تاکنون، ما از Gemini به عنوان یک دوست کدنویسی محلی استفاده کردهایم. اکنون، قصد داریم آن را به یک دستیار توسعه یکپارچه (Integrated DevOps Assistant ) تمام عیار ارتقا دهیم. همه اینها به لطف ادغام پروتکل Model Context (MCP) امکانپذیر است. نام زیبایی است، اما فقط به این معنی است که Gemini میتواند به طور ایمن از طرف شما با سایر سرویسها ارتباط برقرار کند و اولین سرویسی که قرار است بر آن مسلط شویم GitHub است.
در موردش فکر کنید. چند وقت یکبار مجبور میشوید ترمینال خود را برای بررسی یک درخواست pull، ایجاد یک مشکل یا مرور یک مخزن در GitHub ترک کنید؟ این بیشتر به معنای تغییر زمینه است! با مجموعه ابزارهای github ، میتوانید همه این کارها را همین جا انجام دهید. این ابزار Gemini را به یک رابط بومی برای GitHub تبدیل میکند.
مستندات رسمی GitHub MCP Server راهنماییهای کاملی در مورد ابزارها و گزینههای پیکربندی آن ارائه میدهد. شما میتوانید بین عملیات محلی یا از راه دور یکی را انتخاب کنید، زیرا Gemini CLI به طور کامل از هر دو سرور MCP از راه دور پشتیبانی میکند.
این آموزش شما را در تنظیم گزینه Remote MCP Server برای GitHub راهنمایی میکند. قبل از هر چیز، به یک Personal Access Token (PAT) از GitHub نیاز دارید.
وقتی PAT خود را دریافت کردید، وقت آن است که شیء MCP Server را به فایل settings.json خود اضافه کنید. settings.json کامل من در زیر نشان داده شده است، اما میتوانید به سادگی مطمئن شوید که شیء mcpServers شما با آنچه در اینجا میبینید مطابقت دارد:
{
"security": {
"auth": {
"selectedType": "vertex-ai"
}
},
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "GITHUB_PAT"
},
"timeout": 5000
}
}
}
بعد از اینکه فایل settings.json خود را با پیکربندی GitHub MCP Server بهروزرسانی کردید، کافیست Gemini CLI را مجدداً راهاندازی کنید یا دستور /mcp refresh را اجرا کنید. تصویر زیر GitHub MCP Server را که اکنون روی سیستم من آماده است، روشن میکند و مجموعهای از ابزارهای قدرتمندی را که Gemini CLI اکنون میتواند با پروتکل Model Context در اختیار داشته باشد، نشان میدهد.

ویترین دستورات کلیدی
Gemini با مجموعهای کاملاً جدید از قدرتهای ویژه برای GitHub ارائه میشود. در اینجا چند مورد از موارد مورد علاقه من آمده است:
-
github.list_repositories: آیا میخواهید تمام مخازن سازمان خود را بدون باز کردن مرورگر ببینید؟ این ابزار شماست! فقط بپرسید، 'لیست تمام مخازن سازمان من.' -
github.create_issue: آیا باگی پیدا کردهاید؟ برای ایجاد مشکل، نیازی به تغییر پنجره نیست. میتوانید به Gemini بگویید: «یک مشکل در مخزنsample-flask-appبا عنوان «رفع مشکل ورود» با این توضیحات ایجاد کن...» و poof ، مشکل ایجاد میشود. -
github.get_pull_request: آیا نیاز به بررسی PR دارید؟ میتوانید بپرسید: «جزئیات PR شماره ۴۲ را در مخزنsample-flask-appبه من نشان بده.» Gemini عنوان، توضیحات، وضعیت و بررسیکنندگان را دریافت میکند. -
github.get_file_contents: این یکی خیلی باحاله. میتونید یه فایل رو از یه مخزن راه دور بخونید، بدون اینکه لازم باشه اول اون رو کپی کنید! این برای بررسی سریع یه فایل پیکربندی یا README پروژهای که به صورت محلی ندارید عالیه.
۸. کاوش در گیتهاب

حرف زدن بسه، بریم سراغ شروع! قراره از قدرتهای جدید گیتهابمون برای بررسی یه سازمان و یه پروژه، از طریق ترمینال خودمون استفاده کنیم.
هدف : استفاده از Gemini برای کاوش و درک یک پروژه میزبانی شده در GitHub.
سناریو : شما باید با پروژهای در گیتهاب آشنا شوید که قبلاً روی آن کار نکردهاید.
وظیفه ۱: فهرست کردن مخازن در یک سازمان
ابتدا، بیایید نگاهی به تمام پروژههای موجود در یک سازمان GitHub بیندازیم. برای این آزمایش، میتوانید از نام کاربری GitHub خود یا سازمانی که به آن تعلق دارید استفاده کنید. بیایید از Gemini بخواهیم که آنها را فهرست کند.
List the repositories in the `[your-org-or-username]` GitHub organization.
(به یاد داشته باشید که [your-org-or-username] را با اطلاعات واقعی خود جایگزین کنید!) Gemini از ابزار github.list_repositories استفاده میکند و لیستی از تمام پروژهها را به شما نشان میدهد. عالی!
وظیفه ۲: پیدا کردن یک مخزن خاص
بسیار خب، لیستی از مخازن را خواهید دید. حالا، درست مثل یک توسعهدهنده واقعی، باید آن لیست را اسکن کنید و پروژهای را که به آن علاقه دارید پیدا کنید. برای آزمایش ما، فرض میکنیم که به دنبال مخزن quickpoll هستیم که قبلاً کلون کردیم. برای این بخش به دستوری نیاز ندارید - فقط خروجی مرحله قبل را بخوانید و مخزن را پیدا کنید!
وظیفه ۳: فهرست کردن درخواستهای بازِ Pull
حالا که مخزن هدف خود را شناسایی کردهایم، بیایید ببینیم چه اتفاقی برای آن میافتد. آیا درخواستهای pull باز وجود دارد؟ بیایید بپرسیم:
List the open pull requests for the `quickpoll` repository in the `[your-org-or-username]` organization.
جمینی از ابزار github.list_pull_requests استفاده میکند و وضعیت open را فیلتر میکند. سپس هرگونه درخواستهای باز را فهرست میکند و شماره درخواست، عنوان و سازنده آن را به شما نشان میدهد. این نمای فوری شما از توسعه فعال پروژه است. میتوانید این کار را با مخزنی که به طور فعال در آن مشارکت دارید امتحان کنید و نتایج را بررسی کنید.

وظیفه ۴: بررسی یک درخواست pull
فرض کنید یک PR جالب در آن لیست وجود دارد. میخواهیم درباره آن بیشتر بدانیم! میخواهیم توضیحات و فایلهای تغییر یافته را ببینیم. یک شماره PR از لیست انتخاب کنید (اگر هیچ کدام وجود ندارد، میتوانید از این مرحله بگذرید، اما فرض کنید یکی وجود دارد!).
Show me the details and files changed in PR number 1 in the `quickpoll` repo.
این یک مثال عالی از یک کار چند مرحلهای برای Gemini است! ابتدا، احتمالاً از github.get_pull_request برای دریافت جزئیات اصلی - عنوان، بدنه، نویسنده و غیره - استفاده میکند. سپس، برای دریافت تغییرات فایل، از ابزار دوم، github.get_pull_request_files ، استفاده میکند. سپس تمام این اطلاعات را در یک خلاصه خوب و تمیز برای شما ترکیب میکند. شما همین الان یک PR را بدون اینکه حتی از ترمینال خود خارج شوید، بررسی کردید! چقدر شگفتانگیز است؟!
۹. از PRD تا کامیت اولیه

شما یاد گرفتهاید که کاوش کنید، بسازید و آزمایش کنید. حالا، قرار است همه اینها را در یک سناریوی دنیای واقعی کنار هم قرار دهیم. این لحظهای است که یک طرح را به یک محصول تبدیل میکنیم. ما از یک سند الزامات محصول (PRD) تا اولین کامیت خود پیش خواهیم رفت. بیایید چیزی شگفتانگیز بسازیم!
هدف : شبیهسازی یک کار توسعه در دنیای واقعی از ابتدا تا انتها، با ترکیب زمینه محلی و از راه دور.
سناریو : یک ویژگی جدید به شما اختصاص داده شده است! الزامات در یک فایل PRD در مخزن GitHub پروژه منتظر شما هستند.
وظیفه ۱: فهمیدن - خواندن PRD
این مهمترین مرحله است! قبل از اینکه حتی به نوشتن یک خط کد فکر کنید، کاملاً باید طرح را درک کنید. الزامات ویژگی جدید ما در فایل prd/NEW_FEATURE.md قرار دارد. بیایید آن را باز کنیم و ببینیم چه چیزی درون آن است.
explain the requirements mentioned in prd/NEW_FEATURE.md
رابط خط فرمان Gemini از read_file برای نمایش محتوای PRD استفاده خواهد کرد. شروع کنید! این ویژگی جدید را شرح میدهد: یک دکمه Refresh برای کاربران تا بتوانند لیست نظرسنجیهای فعال را به صورت دستی بهروزرسانی کنند. همیشه ابتدا به طرح اولیه مراجعه کنید!

وظیفه ۲: کد - تبدیل الزامات به واقعیت
این لحظه جادویی است! ما الزامات را از PRD میگیریم و از Gemini میخواهیم که کد را برای ما بنویسد. بیایید دقیق باشیم و دقیقاً به آن بگوییم که چه میخواهیم.
Implement the changes as per the PRD
رابط خط فرمان Gemini شروع به کار میکند و پس از لحظهای، خروجیای تقریباً شبیه به این خواهید دید. کد جدید و جذاب ما اکنون جای دنجی دارد!

وظیفه ۳: تغییرات خود را تأیید کنید
ما یک فایل جدید با کد جدید ایجاد کردهایم. آخرین مرحله برای این آزمایش، اعمال تغییر در Cloud Run و تأیید آن است.
let's deploy the changes made to frontend to Cloud Run. The existing service on Cloud Run is quickpoll-fe in us-central1.
توجه کنید که چگونه آن اعلان جزئیات بیشتری مانند نام سرویس Cloud Run موجود و منطقه استقرار آن را ارائه داد. دقیق بودن به صرفهجویی در زمان کمک میکند، اگرچه Gemini CLI همیشه در صورت عدم ذکر جزئیات، آنها را از شما میپرسد.
اگر سرویس Cloud Run بهروزرسانیشده شما با خطایی مواجه شد، کافیست از Gemini CLI بخواهید تا کد را اشکالزدایی و اصلاح کند. به یاد داشته باشید، این همراه فوقالعاده قدرتمند شماست!
۱۰. تبریک

و این تمام! شما یک چرخه کامل توسعه را به پایان رساندید. از یک سند نیازمندیها به یک ویژگی جدید رسیدید، آماده برای کامیت و ارسال. شما زمینه محلی، زمینه از راه دور، عملیات سیستم فایل و تولید کد را با هم ترکیب کردید. شما فقط یک توسعهدهنده نیستید؛ شما یک معمار ابری فوقالعاده پربازده هستید! تبریک میگویم!