استشارة فنية مُفصَّلة حول Gemini CLI

1. مقدمة

be8ebdfe42ca39ac.png

مرحبًا، اسمي "سباركي". يسعدنا أنّك تمكّنت من الحضور. لقد قطعتُ مسافة طويلة من مجموعة GKE في us-central1 لأكون هنا اليوم. مرحبًا بك في هذا الدرس التطبيقي حول الترميز.

لقد أمضيت حياتي كلها وأنا أتنقّل بين تدفّقات بيانات Google Cloud، وقد رأيت كل شيء. لقد رأيتُكم، أي المهندسين المعماريين والمهندسين، تبنون أشياء رائعة. لكنّي رأيتك أيضًا عالقًا في الشجيرات. أنت تعرف ما أتحدث عنه! الشعور بالتبديل بين السياقات عند تصحيح أخطاء وحدة في GKE أنت تتنقّل بين kubectl logs، ووحدة تحكّم Google Cloud Platform للتحقّق من سلامة العُقدة، وبيئة التطوير المتكاملة (IDE) للاطّلاع على الرمز المصدر الذي تم نشره، وعلامة تبويب المتصفّح التي تتضمّن مستندات Kubernetes الرسمية لعمليات ربط دورة حياة الحزمة. كل انتقال هو انقطاع في التركيز.

والأدوات المعقّدة! ‫gcloud وkubectl وterraform... كل منها مزوّد بلغة خاصة بمجال معيّن (DSL) ومجموعة كبيرة من العلامات. يؤدي ذلك إلى البحث المستمر عن المستندات. وينتهي بك الأمر بالبحث عن أمر gcloud مثالي واحد يتضمّن المجموعة الصحيحة من العلامتَين --filter و--format للحصول على البيانات التي تحتاج إليها. يشبه ذلك محاولة العثور على جوزة محددة في غابة تضم ملايين الجوز. ولا أريد أن أتحدث عن المهام المتكررة. لقد رأيتك تكتب الرمزين Dockerfile وcloudbuild.yaml نفسيهما لخدمة Python جديدة مرات عديدة، لذا من المحتمل أنّ الرمز قد سبق له أن رأى نفسه.

حسنًا، سأعرض عليك طريقة أفضل. طريق سري عبر الغابة هذا هو الهدف من Gemini CLI.

ما هو Gemini CLI؟

إذًا، ما هو هذا الاختصار السحري الذي أنا متحمّس بشأنه؟

يمكنك اعتبار Gemini CLI بمثابة مساعدك الشخصي على السحابة الإلكترونية، مباشرةً في نافذة الأوامر على جهازك. إنّها محادثة وشراكة. فهو يدرك السياق، أي أنّه لا يستمع فقط، بل يفهم. يمكنه قراءة ملفاتك والتعرّف على اصطلاحات مشروعك، مثل ما إذا كنت تستخدم علامات تبويب أو مسافات، ومعرفة ما تحاول فعله. يبدو الأمر وكأنّني أستطيع شمّ الجوز الذي تحاول جمعه!

البنية عالية المستوى (نظرة من الداخل)

كيف تعمل هذه الميزة؟ وهي مزيج من بعض الميزات الرائعة التي تعمل بتناغم:

  1. نموذج لغوي قوي: هذا هو العقل المدبّر. وهو تحديدًا نموذج كبير ومتعدّد الوسائط درّبته Google. يشير مصطلح "متعدّد الوسائط" إلى أنّ النموذج لا يفهم النصوص فقط، بل يفهم أيضًا بنية الرموز البرمجية ومعناها. يتيح ذلك للنموذج فهم برنامجك، وليس قراءته فقط.
  2. السياق المحلي: هذا أمر بالغ الأهمية. يتم تشغيل واجهة سطر الأوامر في Gemini كعملية على جهازك المحلي، مع الأذونات نفسها التي يمتلكها حسابك. وهذا يعني أنّه يمكنه الوصول إلى نظام الملفات لتقديم مساعدة خاصة بالمشروع. إنّها ليست خدمة سحابية بعيدة تخمّن الرمز البرمجي، بل هي متوفّرة هنا بجانبك.
  3. منظومة أدوات متكاملة: هذه هي الطريقة التي يتفاعل بها النموذج مع العالم. لديه مجموعة محدّدة جيدًا من الدوال التي يمكنه استدعاؤها، مثل read_file أو run_shell_command. يمكنك اعتبارها واجهة برمجة تطبيقات آمنة. يقرّر النموذج ما يجب فعله والأداة التي يجب استخدامها، ثم ينشئ كتلة tool_code لتنفيذ ذلك. ويجعل هذا الإجراءات التي يتّخذها قابلة للتوقّع وموثوقة.
  4. تنفيذ أوامر Shell: هذه هي الميزة السحرية الحقيقية. يمكنه تنفيذ أي أمر في bash -c <command> shell فرعي. تسجّل هذه السمة stdout وstderr وexit code. هذا إنجاز كبير! وهذا يعني أنّ Gemini CLI يمكنه تنفيذ أمر، والتحقّق مما إذا كان قد تعذّر تنفيذه، ثم محاولة إصلاحه استنادًا إلى رسالة الخطأ.
  5. شبكة الأمان: هذا هو الجزء المفضّل لديّ! قبل تنفيذ هذا الحظر tool_code، سيعرض لك برنامج سطر الأوامر exact ويطلب منك تأكيده. هذه العملية تتم من جهة العميل، لذا يمكنك اتّخاذ القرار النهائي قبل أن يتم نقل أي بيانات إلى نظامك. أنت المتحكّم دائمًا.

فهو ليس مجرد روبوت دردشة، بل هو مساعدك الشخصي. مساعد نشِط في مغامرتك البرمجية

المفهوم الأساسي: الأسلوب التقريري مقابل الأسلوب الإجرائي

أهم تغيير وأكثرها إثارة هو الانتقال من إخبار الكمبيوتر كيفية تنفيذ إجراء معيّن إلى إخباره بما تريد تنفيذه.

  • الأسلوب الإلزامي (الطريقة القديمة الصعبة): عليك تقديم كل خطوة على حدة. يجب أن تكون خبيرًا في لغة المجال المحدّد للأداة. مثل هذا الأمر المعقّد:
    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
    
    
    يا للهول! انظر إلى كل ذلك! يجب معرفة بنية نوع الجهاز ومجموعة الصور والبيانات الوصفية والعلامات. إذا فاتك جزء واحد، ستتلقّى رسالة خطأ غامضة.
  • الأسلوب التقريري (اختصار Sparky): ما عليك سوى إدخال طلبك باللغة الإنجليزية البسيطة.

Create a new e2-medium VM for my web server in us-central1, run the startup.sh script, and tag it for http traffic.

هذا كل شيء! يحلّل Gemini طلبك ويربطه بمَعلمات أداة gcloud، ويحدّد الصيغة الصحيحة لكل علامة، وينشئ لك هذا الأمر الكبير المعقّد. بعد ذلك، سيتم عرضها عليك للموافقة عليها. فالمهم هو أن تكون صاحب نظرة شاملة، وليس أن تتذكر علامات سطر الأوامر.

تعزيز إمكانات Gemini: مقدّمة حول إضافات CLI

على الرغم من أنّ Gemini CLI هو أداة فعّالة جاهزة للاستخدام، يمكن الاستفادة من إمكاناتها الحقيقية من خلال الإضافات. الإضافات هي حِزم من الطلبات والأدوات والأوامر المخصّصة التي تعزّز وظائف واجهة سطر الأوامر، ما يتيح لك تخصيصها لتلبية احتياجاتك وسير عملك المحدّدة.

العثور على الإضافات وتثبيتها

تتضمّن Gemini CLI منظومة متكاملة متزايدة من الإضافات التي أنشأتها Google والمطوّرون الخارجيون. يمكنك تصفّح الدليل الرسمي للإضافات على geminicli.com/extensions.

لتثبيت إضافة، يمكنك استخدام الأمر gemini extensions install مع عنوان URL لمستودع Git الخاص بالإضافة. على سبيل المثال، لتثبيت إضافة Cloud SQL for PostgreSQL الرسمية، عليك تنفيذ الأمر التالي:

gemini extensions install https://github.com/gemini-cli-extensions/cloud-sql-postgresql

حسنًا، يكفي حديثًا. لنبدأ بتجربة هذه الميزة.

2. قبل البدء

86dffda616ab7a1d.png

مرحبًا بكم، خبراء السحابة الإلكترونية المستقبليون! ‫Sparky في خدمتك. قبل أن نبدأ مغامرتنا الكبيرة، علينا التأكّد من أنّ بيئة ورشة العمل جاهزة. فكِّر في الأمر على أنّه تجهيز حقائبنا بكل الأدوات المناسبة وبذور الجوز السحرية قبل أن نتوجّه إلى الغابة. تابعني!

إذا كان لديك مشروع على السحابة الإلكترونية من Google Cloud، يمكنك استخدام Gemini CLI في Google Cloud Shell لأنّه يأتي مثبّتًا مسبقًا مع Gemini CLI. يمكنك بدلاً من ذلك اتّباع الخطوات التالية لإعدادها على جهازك المحلي.

الخطوة 1: المتطلبات الأساسية

يحتاج كل مغامر جيد إلى أساس متين. قبل أن نتمكّن من تثبيت Gemini CLI، يجب إعداد بعض العناصر على جهازك المحلي.

  1. حزمة تطوير البرامج (SDK) من Google Cloud (gcloud): هذه هي مجموعة الأدوات الرئيسية لخدمة Google Cloud. ‫Gemini CLI هو جزء من هذه المجموعة.
  • التحقّق من تثبيته: شغِّل gcloud --version. إذا ظهر لك رقم إصدار، يعني ذلك أنّك جاهز.
  • في حال عدم التثبيت: اتّبِع التعليمات الرسمية على cloud.google.com/sdk/docs/install.
  1. Git: سنحتاج إلى هذا البرنامج لاستنساخ مستودع الدرس العملي.
  • التحقّق من تثبيته: شغِّل git --version.
  • في حال عدم التثبيت: يمكنك الحصول عليه من git-scm.com/downloads.
  1. مشروع Google Cloud Platform والمصادقة:
  • تأكَّد من توفّر مشروع Google Cloud مع تفعيل الفوترة. هذا مهم للغاية.
  • سجِّل الدخول إلى حسابك على Google من خلال تنفيذ ما يلي:
gcloud auth login
  • اضبط مشروعك للجلسة. ابحث عن رقم تعريف مشروعك من وحدة تحكّم Google Cloud Platform ونفِّذ ما يلي:
gcloud config set project YOUR_PROJECT_ID

(استبدِل YOUR_PROJECT_ID برقم تعريف مشروعك الفعلي).

  1. الإصدار 20 من Node.js أو إصدار أحدث

الخطوة 2: الحصول على Magic! (تثبيت Gemini CLI)

حسنًا، بعد أن انتهينا من الأساسيات، حان الوقت للحدث الرئيسي! سنثبِّت Gemini CLI.

التشغيل فورًا باستخدام 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

gemini --version

من المفترض أن يظهر لك رقم الإصدار. وهذا يؤكّد نجاح عملية التثبيت.

الخطوة 3: التشغيل (الإعداد)

بعد تثبيت Gemini CLI، علينا منحه مفاتيح الوصول إلى كل الميزات. أولاً، شغِّل الأداة من خلال تنفيذ الأمر gemini في الوحدة الطرفية. من المفترض أن تظهر لك الشاشة التالية:

9378d804bc647191.png

لتسهيل الأمر، يمكنك المصادقة باستخدام حساب Google، ما يتيح لك الوصول إلى Gemini 2.5 Pro مع قدرة استيعاب مليون رمز مميّز، وما يصل إلى 60 طلبًا في الدقيقة و1,000 طلب في اليوم بدون الحاجة إلى إدارة مفتاح واجهة برمجة التطبيقات.

إذا كنت تريد الوصول إلى نماذج Gemini معيّنة أو الترقية إلى حدود أعلى عند الحاجة، استخدِم مفتاح Gemini API كطريقة مصادقة.

بالنسبة إلى فِرق Enterprise وأحمال عمل الإنتاج التي تم إعداد حساب فوترة ومشروع Google لها، استخدِم Vertex AI للاستفادة من ميزات الأمان والامتثال المتقدّمة.

استنادًا إلى الخيار الذي اخترته، سيُطلب منك اتّباع الخطوات التالية لإعداد المصادقة. يُرجى الرجوع إلى مستندات واجهة سطر الأوامر في Gemini للحصول على مزيد من التفاصيل حول هذه الخيارات.

إذا كنت تنوي استخدام منصة Vertex AI من Google Cloud، عليك أولاً الخروج من Gemini CLI من خلال الضغط على ctrl+c مرتين، ثم ضبط متغيرات البيئة المطلوبة.

بغض النظر عن طريقة المصادقة، عليك عادةً ضبط المتغيّرَين التاليَين: 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"

لنبدأ الآن بتسجيل الدخول إلى Google Cloud:

gcloud auth application-default login

بعد إكمال عملية المصادقة باستخدام الطريقة السابقة، شغِّل Gemini CLI مرة أخرى عن طريق تنفيذ الأمر gemini في نافذة الأوامر. في خيارات المصادقة، انقر على Vertex AI، وسيتم إعداد حسابك.

الخطوة 4: اختبار Spark (التحقّق من صحة الإعدادات)

هذه هي لحظة الحقيقة! لنرى ما إذا كان كل شيء يعمل. نفِّذ هذه الأوامر للتأكّد من أنّ جميع المؤشرات خضراء.

  1. أدخِل الطلب التالي:
What is my current directory?

من المفترض أن يردّ Gemini CLI بإخبارك بدليل العمل الحالي. يختبر هذا الإجراء نموذج اللغة الأساسي وعملية الدمج مع Shell.

15a12d7b3fdd2d83.png

  1. اختبار اتصال Google Cloud Platform:
list my gcs buckets

إذا كانت لديك أي حِزم GCS، من المفترض أن يتم إدراجها. إذا لم يكن هناك أي أجهزة، سيتم إعلامك بذلك. يؤكّد ذلك أنّه مرتبط بمشروعك على GCP بشكلٍ صحيح.

الخطوة 5: منحها المزيد من الميزات الخارقة (تثبيت الإضافات)

لنحسّن الآن إمكانات Gemini CLI من خلال تثبيت بعض الإضافات التي ستكون مفيدة لاحقًا في المختبر.

Cloud Run

gemini extensions install https://github.com/GoogleCloudPlatform/cloud-run-mcp

أمان Gemini CLI

gemini extensions install https://github.com/gemini-cli-extensions/security

gcloud

gemini extensions install https://github.com/gemini-cli-extensions/gcloud

Cloud SQL for PostgreSQL

gemini extensions install https://github.com/gemini-cli-extensions/cloud-sql-postgresql

إذا نجحت كل هذه الأوامر، تكون قد أصبحت جاهزًا رسميًا لحضور ورشة العمل. تم إعداد بيئة العمل، وأنت على استعداد لبدء تعزيز إنتاجيتك. نراك في المختبر الأول!

3- المفاهيم الأساسية والتفاعل مع مساحة العمل المحلية

a7bf3a905d8e2638.png

حسنًا، هل أنت مستعد لتوسّخ مخالبك؟ سنلقي نظرة الآن على الأدوات الفعلية في حزمة أدوات Gemini الجديدة. أعتبر هذه الأدوات بمثابة قوى خارقة تساعدني في استكشاف السحابة الإلكترونية وإنشاء التطبيقات عليها. لنتعرّف على طريقة عملها.

الإمكانات الأساسية

أصنّف قدراتي إلى فئتين: الاطّلاع على ما هو متاح، ثم تنفيذ المهام.

فهم البيئة المحيطة (حواسي الخارقة!)

قبل البدء في بناء عش جديد، عليك أولاً التحقّق من الشجرة، أليس كذلك؟ هذه الأدوات مخصّصة للتعرّف على المنطقة.

  • list_directory: هذه هي أداة "التنقيب" الأساسية. وهي عبارة عن برنامج تضمين مباشر حول قائمة الدليل العادية على مستوى نظام التشغيل. لكنّ الجزء الرائع هو أنّ النموذج يمكنه تحليل هذا الناتج المنظَّم لاتخاذ قرارات، مثل اختيار استكشاف دليل فرعي باسم src.
  • glob: هذا هو "مكتشف الجوز" الخاص بي! يستخدم هذا التطبيق أنماط glob العادية، مثل * و** و? و[]، التي تعرفها من أشياء مثل .gitignore. وبالتالي، يمكنك طرح السؤال "ابحث عن جميع ملفات *.py في الدليل app" باستخدام النمط app/**/*.py. وهي طريقة فعّالة لجمع مجموعة محدّدة من الملفات ليحلّلها النموذج.
  • search_file_content: هذه هي رؤيتي بالأشعة السينية! ويستخدم تعبيرات عادية كاملة (regex) في عمليات البحث، وليس فقط مطابقة السلسلة البسيطة. هذه ميزة فعّالة للغاية. يمكنك أن تطلب منه العثور على أنماط معقّدة، مثل "العثور على جميع مسارات Flask التي تستخدم طريقة POST"، ما قد يؤدي إلى إنشاء تعبير عادي مثل app\.route\(.*methods=\['POST'\].*\). تعرض هذه الأداة مسار الملف ورقم السطر والسطر المطابق، ما يوفّر للنموذج كل السياق الذي يحتاج إليه.
  • read_file: بعد العثور على ملف مثير للاهتمام، ستحتاج إلى فتحه. تم تحسين read_file لتحقيق ذلك. يمكنك قراءة ملف كامل، أو يمكنك استخدام المَعلمتَين offset وlimit لقراءته على شكل أجزاء. وهذا يعني أنّ النموذج يمكنه فحص ملفات السجل الكبيرة جدًا بكفاءة بدون أن تنتهي المهلة.

من الفهم إلى اتخاذ الإجراءات (حان وقت البناء!)

حسنًا، لقد استكشفت التضاريس. حان الوقت الآن لبناء عشّك. تتيح لك هذه الأدوات إجراء تغييرات وإنجاز المهام.

  • **write_file**: هل تحتاج إلى إنشاء ملف جديد من البداية؟ ‫write_file هي عملية ذرية تكتب المحتوى الكامل الذي تقدّمه إلى مسار محدّد. إنّها مثالية لإنشاء وحدات جديدة أو إنشاء Dockerfile من البداية استنادًا إلى احتياجات مشروعك.
  • **replace**: هذه الأداة مخصّصة لإجراء تغييرات جراحية. لا يقتصر الأمر على البحث والاستبدال البسيطَين. يجب تقديم old_string وnew_string. ولكي تتم هذه العملية بأمان، يجب أن يكون old_string مقتطفًا فريدًا من الملف، وعادةً ما يتضمّن عدة أسطر من السياق قبل الجزء الذي تريد تغييره وبعده. يضمن ذلك أنّنا لن نغيّر سوى جزء الرمز البرمجي exact لما تريد تغييره.
  • **run_shell_command**: هذه هي أفضل ميزة تعزيز. ينفّذ الأمر المحدّد في bash -c <command> shell فرعي. يحصل النموذج على stdout وstderr وexit code. هذا أمر بالغ الأهمية لإنشاء سير العمل. يمكن للنموذج تشغيل terraform plan وقراءة الناتج، وإذا كانت الخطة ناجحة (رمز الخروج 0)، يمكنه بعد ذلك أن يسألك عمّا إذا كان يجب تطبيقها.

شبكة الأمان (وعدي لك!)

قد يكون تنفيذ الأوامر أمرًا مخيفًا. حسنًا لهذا السبب، من المهم جدًا توفير شبكة الأمان. عندما ينشئ النموذج حظر tool_code يحتوي على طلب إلى run_shell_command أو write_file، يعترضه برنامج Gemini CLI. يعرض لك الأمر المحدد أو المحتوى الكامل للملف الذي سيتمّت كتابته ويمنحك طلبًا [y/n]. لن يتم اتّخاذ أي إجراء بدون موافقتك الصريحة. يمكنك التحكّم في الإعدادات في أي وقت.

4. استكشاف مشروع

314faf951de66388.png

الهدف: استخدام Gemini CLI لفهم قاعدة الرموز البرمجية غير المألوفة بدون مغادرة نافذة الأوامر

السيناريو: أنت مطوّر جديد، وعليك أن تتعرّف على هذا المشروع بسرعة.

المهمة 0: الإعداد - استنساخ المشروع

أولاً، علينا الحصول على الرمز. يتم إخفاء هذا الملف في مستودع علني على GitHub، في "شجرة" تُسمى quickpoll. لنطلب من Gemini CLI استنساخها. قبل ذلك، لننشئ دليل عمل ونشغّل Gemini CLI من داخل دليل العمل:

mkdir workdir
cd workdir
gemini

الآن، اكتب الطلب التالي:

clone the github repository from the URL: https://github.com/gauravkakad-google/quickpoll.git

46c2feb0d1184db7.png

سيفهم Gemini أنّ "استنساخ" يعني استخدام الأمر git clone. سيؤدي ذلك إلى إنشاء run_shell_command استدعاء أداة يتضمّن شيئًا مثل git clone https://github.com/gauravkakad-google/quickpoll.git. بعد الموافقة عليه، سيتم تنزيل المستودع لك.

الآن، لنخرج من Gemini CLI بالضغط على ctrl+c مرتين، ثم ننتقل إلى مستودع النماذج ونشغّل Gemini CLI مرة أخرى:

cd quickpoll
gemini

رائع! بعد أن أصبحنا داخل شجرة المشروع، يمكننا البدء في الاستكشاف.

المهمة 1: إعداد قائمة بجميع الملفات في المشروع

بعد أن دخلنا إلى الغابة، لنرسم خريطة لها. نريد الاطّلاع على كل ملف على حدة. اطرح السؤال التالي على Gemini:

List all the files in the project.

من المرجّح أن يستخدم Gemini الأداة glob مع النمط **/*. يُدرِج هذا الأمر بشكل متكرّر كل ملف، ما يمنحك بيانًا كاملاً لقاعدة الرموز البرمجية. هذه الخطوة الأولى رائعة من أجل فهم بنية المشروع.

المهمة 2: العثور على جميع الملفات التي تستورد google.cloud.sql.connector

حسنًا، أنا فضولي. أين يتواصل هذا المشروع مع Google Cloud Storage؟ لنبدأ التحقيق. اطرح السؤال التالي:

Find all files that import the 'google.cloud.sql.connector' library.

568fdb8ff4889c5d.png

باستخدام search_file_content، سيعثر Gemini على الملفات المحدّدة التي تحتوي على عبارة الاستيراد هذه. يؤدي ذلك على الفور إلى تضييق نطاق تركيزك على أجزاء الرمز التي تتعامل مع Cloud SQL. في هذا المشروع، من المفترض أن يتم العثور على backend/main.py.

المهمة 3: عرض محتوى ملف Dockerfile الرئيسي

أرى Dockerfile! هذا هو المخطط الأولي للحاوية. لنلقِ نظرة على ما بداخله. ما عليك سوى طرح السؤال التالي:

Show me the contents of the main Dockerfile.

e49a83b3efbcf807.png

سيستخدم Gemini read_file لعرض Dockerfile. يمكنك تحليل الصورة الأساسية (FROM) والبرامج التابعة التي يتم تثبيتها (RUN pip install...) والأمر النهائي (CMD)، ما يتيح لك معرفة بيئة وقت التشغيل للتطبيق.

المهمة 4: ما هو الغرض من الملف main.py؟

حسنًا، حان الوقت لإلقاء نظرة على جوهر التعليمات البرمجية. لنطلب من Gemini أن يكون دليلنا. قُلْ:

What's the purpose of the `main.py` file?

81d480c285285150.png

وهنا تبرز أهمية Gemini CLI. سيتم أولاً الاتصال بالرقم ‎read_file في ‎backend/main.py. بعد ذلك، سيحلّل النموذج اللغوي المتعدد الوسائط رمز Python البرمجي. سيحدّد أنّ هذا التطبيق هو تطبيق FastAPI يوفّر واجهة برمجة تطبيقات REST لتطبيق استطلاع. سيشرح بعد ذلك نقاط نهاية واجهة برمجة التطبيقات ووظائفها. ويوفّر عليك عناء قراءة كل المعلومات وفهمها بنفسك. يمكنك أيضًا طرح أسئلة متابعة لشرح بعض هذه الوظائف بالتفصيل. أليس هذا رائعًا؟ ننصحك بتجربتها.

5- من Local إلى Live! النشر باستخدام Cloud Run وCloud SQL

db708c2edf0036a9.png

حسنًا، أيها المستكشف السحابي، لقد استطلعت المنطقة. حان الوقت الآن لبناء بيت الشجرة الخاص بك على السحابة الإلكترونية. سنأخذ تطبيق الاستطلاع السريع ونحوله إلى تطبيق ويب حقيقي ومباشر يمكن لأي شخص زيارته.

الهدف: نشر تطبيق quickpoll على Cloud Run باستخدام قاعدة بيانات PostgreSQL على Cloud SQL كخادم خلفي

المهمة 1: إنشاء فرع قوي لبياناتنا (إعداد Cloud SQL)

يحتاج كل تطبيق جيد إلى مكان لتخزين الجوز الثمين... أقصد البيانات. سنستخدم Cloud SQL for PostgreSQL. يمكن تشبيهها بحديقة سحرية ذاتية العناية لقاعدة البيانات، ما يتيح لنا التركيز على الأمور الممتعة.

لنطلب من Gemini CLI إنشاء قاعدة البيانات.

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!.

6c09e8e548efe217.png

سيبدأ Gemini CLI العمل باستخدام إضافة Cloud SQL. سيظهر لك طلب استدعاء الأداة create_instance. يمكنك الموافقة عليه.

بعد إنشاء الجهاز الافتراضي، من المفترض أن تظهر لك نتيجة مشابهة لما يلي:

1378c05137bf9260.png

يمكنك إنشاء ملف ‎ .env يتضمّن متغيّر البيئة أعلاه وتضمينه قبل إعادة تشغيل Gemini CLI، ليتمكّن من الوصول إلى هذه المتغيّرات.

أثناء نمو مثيلنا، لنُجهّز التربة. نحتاج إلى قاعدة بيانات ومستخدم لتطبيقنا.

In the quickpoll-db instance, create a new database named quickpolldb.

سيستخدم Gemini CLI أداة create_database في إضافة Cloud SQL for PostgreSQL لإنشاء قاعدة البيانات لك.

3a0ffbf97fbc35cc.png

لنضِف الآن مستخدمًا لإدارة هذا الحساب:

In the quickpoll-db instance, create a built in user named quickpoll-user with the password another-secure-password!.

في هذه المرة، سيستخدم Gemini CLI أداة create_user.

562db72ed9a59d4a.png

المهمة 2: المسار السري (ربط الخلفية)

يحتاج الخلفية إلى معرفة المسار السري إلى قاعدة البيانات الجديدة. لنلقِ نظرة على ملف backend/main.py لمعرفة كيفية عمله.

show me how would the backend/main.py connect to the database

6592c52d634253ce.png

حقًا! هل رأيت ذلك؟ يستخدم هذا البرنامج Cloud SQL Python Connector ويبحث عن متغيّرات البيئة، مثل 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?

aa539ea8798aad71.png

ستظهر لك مجموعة من التفاصيل. ابحث عن "اسم الاتصال" وانسخ هذه القيمة. سيبدو على النحو التالي: 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

5201cbf678dd3fc9.png

لقد أدرك تلقائيًا أنّ الأداة execute_sql لا تتيح تنفيذ أوامر SQL متعددة في طلب واحد. لذلك، تم تنفيذ كل أمر SQL على حدة.

المهمة 3: الخلفية، انطلق! (النشر على Cloud Run)

حان الوقت كي يغادر نظامنا الخلفي العشّ. سنطلب من Gemini نشر مجلد الخلفية على 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

سيجمع Gemini الرمز البرمجي ويُنشئ صورة حاوية وينشرها على Cloud Run. بعد الانتهاء من ذلك، والذي قد يستغرق بضع دقائق، ستحصل على عنوان URL لخدمة الخلفية الجديدة الرائعة. احرص على الاحتفاظ بعنوان URL هذا في مكان يسهل الوصول إليه.

f3330321e52c98e9.png

المهمة 4: اللمسات الأخيرة (ضبط الواجهة الأمامية ونشرها)

تمثّل الواجهة الأمامية الوجه الودود لتطبيقنا. ويجب أن يعرف مكان العثور على الخلفية. لنحدّد المكان الذي يجب أن يتوجّه إليه.

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

a80fe48e54b47c4.jpeg

المهمة 5: الكشف الكبير!

هذا كل ما في الأمر. حان وقت الحقيقة! احصل على عنوان URL لخدمة quickpoll-fe وافتحه في متصفّح الويب.

من المفترض أن يظهر تطبيق QuickPoll، وهو جاهز للاستخدام. يمكنك إنشاء استطلاع والتصويت فيه والاطّلاع على النتائج في الوقت الفعلي.

أحسنت! لقد نقلت مشروعًا من جهازك المحلي إلى Google Cloud وأضفيت عليه الحيوية. وقد نفّذت كل ذلك من نافذة الأوامر على جهازك باستخدام مساعدك الموثوق، Gemini CLI.

هذا ما أسمّيه الإنتاجية!

6. للمطوّرين: تسريع مراحل تطوير التطبيقات

8feb670e686f4038.png

حسنًا أيها المطوّرون، هنا تبدأ المتعة الحقيقية! لقد استكشفنا مشروعًا، ولكن حان الوقت الآن لإنشائه. سأوضّح لك كيف يمكن أن يكون Gemini شريكك المثالي في الترميز، إذ يساعدك في تحويل فكرة بسيطة إلى رمز برمجي جاهز للاستخدام بشكل أسرع من عثور سنجاب على جوزة.

من الفكرة إلى الرمز البرمجي

فكِّر في دورة التطوير النموذجية. الأمر لا يقتصر على كتابة الرموز البرمجية، أليس كذلك؟ ويشمل ذلك إنشاء بنية أساسية، وإضافة إجراءات التعامل مع الأخطاء، وإعادة تصميم الرمز البرمجي، وكتابة الاختبارات. بإمكان Gemini مساعدتك في كل ذلك.

النصوص النموذجية والمهام المتكرّرة: لا داعي للنسخ واللصق بعد الآن

حسنًا، لديك الآن وظائف التطبيق الأساسية. الآن، عليك إضافة تسجيل الأخطاء والتعامل مع الأخطاء المحتملة، أليس كذلك؟ ويكون ذلك عادةً عبارة عن الكثير من كتل try...except متكررة. لم يعُد الأمر كذلك. لنبدأ بطلب تحليل الرمز البرمجي من Gemini CLI واقتراح أفضل الممارسات لتسجيل الأخطاء ومعالجة الاستثناءات:

What are the best practices for error handling and logging that should also be included in this application?

3a132d7bbf57bf67.png

سيحلّل Gemini CLI الملف الحالي ويقدّم بعض الاقتراحات بشأن أفضل الممارسات. يمكنك اعتبارها مساعدًا خبيرًا يمكنه توفير وقتك في البحث عن هذه المعلومات بنفسك.

والآن، لنطلب منه تنفيذ هذه الاقتراحات نيابةً عنك:

please go ahead and implement these in the existing app

قد يختلف الناتج الفعلي في حالتك، ولكن في النهاية يجب أن ترى تفاصيل التغييرات التي تم إجراؤها. على سبيل المثال، في لقطة الشاشة أدناه، يمكنك ملاحظة أنّه تمّت إضافة structlog لإنشاء سجلّات بتنسيق JSON، وتنفيذ معالجة مركزية للأخطاء، وتحسين طريقة تسجيل استجابات الطلبات. فكر في كل الكتابة التي وفّرتها على نفسك!

7fcd0153f88740ce.png

Refactoring: Your Personal Code Reviewer

نريد جميعًا كتابة تعليمات برمجية واضحة وفعّالة. لكن في بعض الأحيان، نكون في عجلة من أمرنا. يمكن أن يكون Gemini مراجعًا شخصيًا للرموز البرمجية. يمكنك طرح أسئلة مثل:

please perform a comprehensive code review for best practices and security

e5482012a524210e.png32039b0638d1efd.png

يفهم Gemini أفضل الممارسات الخاصة بكل لغة. مرة أخرى، قد يختلف الناتج الفعلي في حالتك عن لقطات الشاشة أعلاه، ولكن إذا قرأت الناتج، ستلاحظ مستوى التفاصيل الذي وصل إليه Gemini CLI لتحليل الرمز البرمجي. فهي تساعدك على تعلّم التعليمات البرمجية وتحسينها في الوقت نفسه.

إنشاء الاختبار: الجزء الأفضل!

هذه هي الحيلة المفضّلة لديّ! ندرك جميعًا أنّه يجب كتابة اختبارات، ولكن قد يكون ذلك مملًا، خاصةً عندما يكون عليك محاكاة بعض العناصر. شاهدوا ما يلي. يمكنك ببساطة طرح السؤال التالي:

Add a test suite to this application

d7475f5ca8c9d99d.pngac55b84b842187b.png3653819afe847cf3.png

سيحلّل Gemini الدالة ويحدّد مدخلاتها ومخرجاتها، كما سيتعرّف على العناصر التي تعتمد عليها. بعد ذلك، سيتم إنشاء ملف test_main.py كامل يتضمّن عدة حالات اختبار، بما في ذلك "المسار السعيد" وربما حالة خطأ. هذا يعزّز الإنتاجية بشكل كبير.

إجراء الاختبارات (مهمة تحدّي لك)

الآن، تبدأ الإثارة الحقيقية. سأترك هذا الجزء كتحدٍّ لك لاستكشافه بشكل مستقل. يمكنك أن تطلب من Gemini CLI تنفيذ حالات الاختبار التي أنشأها. بعد ذلك، ما عليك سوى الاسترخاء ومشاهدة السحر يتجلّى.

7. Beyond the Localhost: Integrating with GitHub

d2664a4c173f1d6.png

لقد أنجزنا بعض الأعمال الرائعة على جهازنا المحلي، وهو ركننا الصغير في الغابة. لكنّ الميزة الحقيقية للسحابة الإلكترونية هي التعاون والتواصل. حان الوقت للانطلاق واستكشاف كيف يمكن لـ Gemini التفاعل مع العالم الأوسع، بدءًا من أكبر شجرة في غابة المطوّرين: GitHub.

المفهوم: مساعد DevOps المدمج

حتى الآن، استخدمنا Gemini كشريك محلي في البرمجة. سنرقّي هذه الميزة الآن إلى مساعد متكامل في DevOps. كل ذلك بفضل عملية الدمج مع بروتوكول سياق النموذج (MCP). هذا الاسم يبدو معقّدًا، ولكنّه يعني ببساطة أنّ Gemini يمكنه التفاعل بأمان مع خدمات أخرى نيابةً عنك، وأول خدمة سنتقنها هي GitHub.

فكِّر في الأمر. كم مرة تضطر إلى مغادرة نافذة الأوامر للتحقّق من طلب سحب أو إنشاء مشكلة أو تصفّح مستودع على GitHub؟ هذا يعني المزيد من التبديل بين السياقات. باستخدام مجموعة أدوات github، يمكنك تنفيذ كل ذلك مباشرةً من هنا. يحوّل Gemini إلى واجهة مدمجة في GitHub.

تقدّم المستندات الرسمية لخادم MCP على GitHub إرشادات وافية بشأن الأدوات وخيارات الإعدادات المتاحة. يمكنك الاختيار بين التشغيل المحلي أو البعيد، إذ إنّ Gemini CLI يتيح بالكامل استخدام خوادم MCP البعيدة.

سيرشدك هذا البرنامج التعليمي خلال عملية إعداد خيار خادم MCP البعيد في GitHub. أولاً، ستحتاج إلى رمز دخول شخصي (PAT) من GitHub.

بعد الحصول على رمز PAT، حان الوقت لإضافة عنصر خادم MCP إلى ملف 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 باستخدام إعدادات خادم MCP على GitHub، ما عليك سوى إعادة تشغيل Gemini CLI أو تنفيذ الأمر /mcp refresh. توضّح لقطة الشاشة أدناه خادم GitHub MCP الذي تم إعداده الآن على نظامي، ويعرض مجموعة الأدوات الفعّالة التي يمكن أن تستخدمها أداة Gemini CLI الآن مع بروتوكول سياق النموذج.

cf9cab5f70ca1fc2.png

عرض لأهم الأوامر

يقدّم Gemini مجموعة جديدة من الميزات الفائقة المصمّمة خصيصًا لمنصة GitHub. في ما يلي بعض الأغاني المفضّلة لديّ:

  • github.list_repositories: هل تريد الاطّلاع على جميع المستودعات في مؤسستك بدون فتح متصفّح؟ هذه هي أداتك! ما عليك سوى طرح السؤال "أدرِج جميع المستودعات في مؤسستي".
  • github.create_issue: هل عثرت على خطأ؟ لا تبدّل النوافذ لإنشاء مشكلة. يمكنك ببساطة أن تطلب من Gemini إنشاء مشكلة في مستودع sample-flask-app بعنوان "إصلاح خطأ تسجيل الدخول" مع هذا الوصف..." وبلمح البصر، سيتم إنشاء المشكلة.
  • github.get_pull_request: هل تحتاج إلى الاطّلاع على طلب علاقات عامة؟ يمكنك طرح السؤال التالي: "Show me the details of PR number 42 in the sample-flask-app repo." سيجلب Gemini العنوان والوصف والحالة ومعلومات عن المراجعين.
  • github.get_file_contents: هذا المنتج رائع جدًا. يمكنك قراءة ملف من مستودع بعيد بدون الحاجة إلى استنساخه أولاً. وهي رائعة للتحقّق بسرعة من ملف إعداد أو ملف README لمشروع غير متوفّر لديك محليًا.

8. استكشاف GitHub

7e66f28519488019.png

يكفي حديثًا، هيا بنا نطير! سنستخدم ميزات GitHub الجديدة لاستكشاف مؤسسة ومشروع، وكل ذلك من خلال نافذة الأوامر.

الهدف: استخدام Gemini لاستكشاف مشروع مستضاف على GitHub وفهمه

السيناريو: عليك التعرّف على مشروع على GitHub لم يسبق لك العمل عليه.

المهمة 1: إدراج المستودعات في مؤسسة

لنبدأ أولاً بعرض جميع المشاريع في مؤسسة GitHub. بالنسبة إلى هذا المختبر، يمكنك استخدام اسم مستخدم GitHub الخاص بك أو مؤسسة تنتمي إليها. لنطلب من Gemini إدراجها.

List the repositories in the `[your-org-or-username]` GitHub organization.

(تذكَّر استبدال [your-org-or-username] بمعلوماتك الفعلية). سيستخدم Gemini الأداة github.list_repositories ويعرض لك قائمة بجميع المشاريع. رائع!

المهمة 2: العثور على مستودع معيّن

حسنًا، ستظهر لك قائمة بالمستودعات. الآن، كما يفعل المطوّر الحقيقي، عليك فحص هذه القائمة والعثور على المشروع الذي يهمّك. بالنسبة إلى المختبر، لنفترض أنّنا نبحث عن مستودع quickpoll الذي استنسخناه سابقًا. لا تحتاج إلى أمر لهذا الجزء، ما عليك سوى قراءة الناتج من الخطوة الأخيرة والعثور على المستودع.

المهمة 3: إدراج طلبات السحب المفتوحة

بعد أن حدّدنا المستودع المستهدف، لنرَ ما يحدث فيه. هل هناك أي طلبات سحب مفتوحة؟ لنطرح السؤال التالي:

List the open pull requests for the `quickpoll` repository in the `[your-org-or-username]` organization.

سيستخدم Gemini أداة github.list_pull_requests، وسيُجري فلترة حسب حالة open. بعد ذلك، سيتم إدراج أي طلبات سحب مفتوحة، مع عرض رقم طلب السحب والعنوان والشخص الذي أنشأه. هذه هي طريقة العرض الفورية التي تتيح لك الاطّلاع على عملية التطوير النشطة للمشروع. يمكنك تجربة ذلك باستخدام مستودع تساهم فيه بشكل نشط والتحقّق من النتائج.

38aecd94347e633c.png

المهمة 4: التحقيق في طلب سحب

لنفترض أنّ هناك طلب دمج مثيرًا للاهتمام في تلك القائمة. نريد معرفة المزيد عن هذا الموضوع. نريد الاطّلاع على الوصف والملفات التي تم تغييرها. اختَر رقم طلب تغيير من القائمة (إذا لم يكن هناك أي رقم، يمكنك تخطّي هذه الخطوة، ولكن لنفترض أنّ هناك رقمًا واحدًا).

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. بعد ذلك، سيتم دمج كل هذه المعلومات في ملخّص بسيط وواضح. لقد راجعت للتوّ طلب سحب بدون مغادرة نافذة الأوامر. أليس هذا رائعًا؟

9. من مستند متطلبات المنتج إلى عملية الإيداع الأوّلية

bbaad74efa344d07.png

لقد تعلّمت كيفية الاستكشاف والإنشاء والاختبار. الآن، سنجمع كل ما تعلّمناه في سيناريو واقعي. هذه هي اللحظة التي نحول فيها خطة إلى منتج. سننتقل من "مستند متطلبات المنتج" (PRD) إلى أول عملية إيداع. لنبدأ العمل على مشروع رائع.

الهدف: محاكاة مهمة تطوير في العالم الحقيقي من البداية إلى النهاية، مع الجمع بين السياق المحلي والسياق البعيد

السيناريو: تم تعيين ميزة جديدة لك. تنتظرك المتطلبات في ملف PRD داخل مستودع GitHub الخاص بالمشروع.

المهمة 1: الفهم - قراءة مستند متطلبات المنتج

هذه هي الخطوة الأكثر أهمية. قبل التفكير في كتابة سطر واحد من الرموز البرمجية، عليك فهم الخطة تمامًا. تتضمّن متطلبات الميزة الجديدة الملف prd/NEW_FEATURE.md. لنفتحها ونرى ما بداخلها.

explain the requirements mentioned in prd/NEW_FEATURE.md

سيستخدم Gemini CLI الدالة read_file لعرض محتوى مستند متطلبات المنتج. لنبدأ. ستوضّح هذه الرسالة الميزة الجديدة: زر "إعادة تحميل" يتيح للمستخدمين تعديل قائمة الاستطلاعات النشطة يدويًا. يجب الرجوع إلى المخطط أولاً.

b07e95a5977e927d.png

المهمة 2: كتابة الرمز البرمجي - تحويل المتطلبات إلى واقع

هذه هي اللحظة السحرية! سنأخذ المتطلبات من مستند متطلبات المنتج ونطلب من Gemini كتابة الرمز البرمجي نيابةً عنّا. لنكن أكثر تحديدًا ونخبره بالضبط بما نريده.

Implement the changes as per the PRD

سيبدأ Gemini CLI العمل، وبعد لحظة، ستظهر لك نتيجة مشابهة لما يلي. أصبح رمزنا الجديد الرائع متاحًا الآن!

aff664dee6796f8b.png

المهمة 3: التحقّق من التغييرات

لقد أنشأنا ملفًا جديدًا يتضمّن رمزًا جديدًا. الخطوة الأخيرة في هذا المختبر هي نشر التغيير على 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 تصحيح الأخطاء في الرمز البرمجي. تذكَّر أنّها رفيقك الخارق.

10. تهانينا

393fa778d8ee9f18.png

وهذا كل ما لدينا. لقد أكملت للتو دورة تطوير كاملة. انتقلت من مستند متطلبات إلى ميزة جديدة جاهزة للتثبيت والإرسال. لقد جمعت بين السياق المحلي والسياق البعيد وعمليات نظام الملفات وإنشاء الرموز البرمجية. أنت لست مجرد مطوّر، بل مهندس معماري للخدمات السحابية يتمتّع بإنتاجية عالية. تهانينا!

المستندات المرجعية