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

1. مقدمة

be8ebdfe42ca39ac.png

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

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

والأدوات المعقّدة! ‫gcloud وkubectl وterraform... كل منها مزوّد بلغة خاصة بالمجال وعدد كبير من العلامات. يؤدي ذلك إلى البحث المستمر عن المستندات. سينتهي بك الأمر بالبحث عن أمر 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: مقدّمة عن إضافات واجهة سطر الأوامر

على الرغم من أنّ 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 طلب في اليوم بدون الحاجة إلى إدارة مفتاح API.

إذا أردت الوصول إلى نماذج 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، من المفترض أن يتم إدراجها. إذا لم يكن هناك أي أجهزة، سيتم إعلامك بذلك. يؤكّد ذلك أنّه مرتبط بمشروعك على Google Cloud Platform بشكلٍ صحيح.

الخطوة 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- من المحلية إلى المباشرة! النشر باستخدام Cloud Run وCloud SQL

db708c2edf0036a9.png

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

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

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

لنطلب الآن من "مساعد Google" تنفيذ هذه الاقتراحات نيابةً عنك:

please go ahead and implement these in the existing app

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

7fcd0153f88740ce.png

Refactoring: Your Personal Code Reviewer

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

please perform a comprehensive code review for best practices and security

e5482012a524210e.png

32039b0638d1efd.png

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

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

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

Add a test suite to this application

d7475f5ca8c9d99d.png

ac55b84b842187b.png

3653819afe847cf3.png

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

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

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

7. ما وراء Localhost: الدمج مع GitHub

d2664a4c173f1d6.png

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

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

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

cf9cab5f70ca1fc2.png

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

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

  • github.list_repositories: هل تريد الاطّلاع على جميع المستودعات في مؤسستك بدون فتح متصفّح؟ هذه هي أداتك! ما عليك سوى طرح السؤال "أدرِج جميع المستودعات في مؤسستي".
  • github.create_issue: هل عثرت على خطأ؟ لا تبدّل النوافذ لإنشاء مشكلة. يمكنك ببساطة أن تطلب من Gemini إنشاء مشكلة في مستودع sample-flask-app بعنوان "إصلاح خطأ تسجيل الدخول" مع هذا الوصف..." وها هي المشكلة تم إنشاؤها.
  • github.get_pull_request: هل تحتاج إلى الاطّلاع على طلب سحب؟ يمكنك طرح السؤال التالي: "أريد الاطّلاع على تفاصيل طلب السحب رقم 42 في مستودع sample-flask-app". سيجلب 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

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

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