1. 📖 مقدمة

في هذا الدرس التطبيقي حول الترميز، ستتعرّف على أساسيات Gemini CLI وتستفيد من إضافة مراجعة الرموز البرمجية وتحليل الأمان في سير عمل تطوير البرامج.
ما ستتعلمه
- كيفية إعداد Gemini CLI
- كيفية ضبط Gemini CLI
- كيفية تثبيت إضافة Gemini CLI
- كيفية استخدام إضافة Gemini CLI لمراجعة الرموز البرمجية وتحليل الأمان
- كيفية ضبط MCP لـ Gemini CLI
- كيفية فحص Gemini CLI في عملية الدمج المتواصل والتسليم المتواصل
المتطلبات
- متصفّح الويب Chrome
- حساب Gmail
- مشروع على السحابة الإلكترونية مع تفعيل حساب الفوترة
2. 🚀 إعداد بيئة تطوير ورشة العمل
الخطوة 1: اختيار "المشروع النشط" في Cloud Console
في Google Cloud Console، في صفحة اختيار المشروع، اختَر أو أنشِئ مشروعًا على Google Cloud (راجِع القسم العلوي الأيمن من وحدة التحكّم).

انقر على هذا الرمز، وستظهر لك قائمة بجميع مشاريعك كما في المثال التالي:

القيمة الموضّحة في المربّع الأحمر هي معرّف المشروع وسيتم استخدام هذه القيمة في جميع أنحاء البرنامج التعليمي.
تأكَّد من تفعيل الفوترة لمشروعك على Cloud. للتأكّد من ذلك، انقر على رمز الهامبرغر ☰ في الشريط العلوي الأيمن الذي يعرض قائمة التنقّل وابحث عن قائمة "الفوترة".


إذا ظهر لك "حساب فوترة تجريبي في Google Cloud Platform" ضمن العنوان الفوترة / نظرة عامة ( الجزء العلوي الأيسر من Cloud Console )، يكون مشروعك جاهزًا للاستخدام في هذا البرنامج التعليمي. إذا لم يكن كذلك، ارجع إلى بداية هذا البرنامج التعليمي واستردّ قيمة حساب الفوترة التجريبي.

الخطوة 2: التعرّف على Cloud Shell
ستستخدم Cloud Shell في معظم أجزاء البرامج التعليمية، لذا انقر على "تفعيل Cloud Shell" في أعلى وحدة تحكّم Google Cloud. إذا طُلب منك التفويض، انقر على تفويض.


بعد الاتصال بـ Cloud Shell، علينا التحقّق مما إذا كان قد تمّت مصادقة الصدفة ( أو الوحدة الطرفية) باستخدام حسابنا.
gcloud auth list
إذا ظهر لك حساب Gmail الشخصي كما في مثال الناتج أدناه، يعني ذلك أنّ كل شيء على ما يرام.
Credentialed Accounts
ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com
To set the active account, run:
$ gcloud config set account `ACCOUNT`
إذا لم يكن كذلك، جرِّب إعادة تحميل المتصفّح وتأكَّد من النقر على تفويض عند مطالبتك بذلك ( قد يتمّ مقاطعة العملية بسبب مشكلة في الاتصال).
بعد ذلك، نحتاج أيضًا إلى التحقّق مما إذا كان قد تمّت تهيئة الصدفة مسبقًا باستخدام معرّف المشروع الصحيح الذي لديك. إذا رأيت قيمة داخل ( ) قبل رمز $ في الوحدة الطرفية ( في لقطة الشاشة أدناه، القيمة هي "your-workshop-project")، تشير هذه القيمة إلى المشروع الذي تمّت تهيئته لجلسة الصدفة النشطة.

إذا كانت القيمة المعروضة صحيحة، يمكنك تخطّي الأمر التالي. ومع ذلك، إذا كان غير صحيح أو غير متوفّر، شغِّل الأمر التالي
gcloud config set project <YOUR_PROJECT_ID>
الخطوة 3: التعرّف على "محرّر Cloud Shell" وإعداد دليل عمل التطبيق
الآن، يمكننا إعداد محرّر الرموز البرمجية لتنفيذ بعض مهام الترميز. سنستخدم "محرّر Cloud Shell" لهذا الغرض.
انقر على الزر فتح المحرِّر، وسيؤدي ذلك إلى فتح
في "محرِّر Cloud Shell".
ستظهر لك الآن واجهة Cloud Shell Editor كما هو موضّح أدناه

الآن، استنسِخ مستودع العرض التوضيحي الذي سنتفاعل معه. أولاً، علينا فتح الوحدة الطرفية للمحرّر. يمكنك إجراء ذلك من خلال النقر على Terminal -> New Terminal في شريط القوائم، أو استخدام Ctrl + Shift + C، وسيؤدي ذلك إلى فتح نافذة طرفية في الجزء السفلي من المتصفح.

بعد ذلك، شغِّل الأمر التالي في الوحدة الطرفية
git clone https://github.com/alphinside/gemini-cli-code-analysis-demo.git code-analysis-demo
بعد ذلك، انتقِل إلى القسم العلوي من "محرّر Cloud Shell" وانقر على ملف->فتح مجلد (File->Open Folder)، وابحث عن دليل اسم المستخدم وابحث عن دليل المستودع الذي تم استنساخه code-analysis-demo، ثم انقر على الزر "حسنًا" (OK). سيؤدي ذلك إلى جعل الدليل الذي تم اختياره هو دليل العمل الرئيسي. في هذا المثال، اسم المستخدم هو alvinprayuda، وبالتالي يظهر مسار الدليل أدناه


يجب أن يبدو دليل العمل في "محرّر Cloud Shell" الآن على النحو التالي

يمكننا الآن الانتقال إلى المرحلة التالية
3- 🚀 الإعدادات وعمليات الضبط
إذا أردت تثبيت Gemini CLI في نظامك المحلي، يمكنك اتّباع الخطوات التالية:
- تأكَّد من أنّ نظامك يتضمّن الإصدار 20 أو إصدارًا أحدث من Node.
- فعِّل Gemini CLI من خلال إحدى الطريقتَين التاليتَين:
- تثبيته كحزمة عامة
# Install as an executor
npm install -g @google/gemini-cli
# then run it from terminal
gemini
- أو شغِّله مباشرةً من المصدر للحصول دائمًا على أحدث إصدار
npx https://github.com/google-gemini/gemini-cli
عند تشغيله للمرة الأولى، سيُطلب منك الإجابة عن عدة أسئلة. إذا شغّلتها من بيئة تطوير متكاملة (مثل VSCode)، سيُطرح عليك السؤال التالي

بعد ذلك، سيطلب منك تحديد عدة خيارات للمصادقة.

هناك العديد من الخيارات:
- إذا اخترت تسجيل الدخول باستخدام حساب Google، سيتم فتح صفحة مصادقة Google في المتصفّح، وما عليك سوى قبولها.
- إذا كنت تفضّل استخدام مفتاح Gemini API، عليك إنشاء مفتاح في صفحة AI Studio، ثم إنشاء ملف .env في دليل العمل مع ضبط المتغيّر GEMINI_API_KEY ( أو تنفيذ الأمر
export GEMINI_API_KEY="your-api-key"في سطر الأوامر). - إذا اخترت استخدام Vertex AI، ستحتاج إلى مشروع مثل الذي أعددته سابقًا وإنشاء ملف .env وضبط GOOGLE_CLOUD_PROJECT وGOOGLE_CLOUD_LOCATION.
إذا أردت تغيير طرق المصادقة هذه، يمكنك تنفيذ الأمر /auth من Gemini CLI أو تعديل ملف الإعداد. إذا أردت تعديل ملف الإعداد مباشرةً، يجب أن يكون في $HOME/.gemini/settings.json على نظام التشغيل Linux . سيظهر لك نوع security وauth ويمكنك تعديله
{
"security": {
"auth": {
"selectedType": "vertex-ai" # or "gemini-api-key" or "oauth-personal"
}
}
}

4. 🚀 الأوامر الأساسية والأدوات المضمّنة
لنستكشف الآن Gemini CLI لمعرفة المزيد عنه. إذا كنت تبحث عن بعض الأوامر الأساسية التي يمكن استخدامها، يمكنك كتابة /help لعرض جميع الأوامر المتاحة.

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

/tools
ستظهر لك نتيجة مشابهة لما يلي

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

Find top 10 OWASP security issue and write it down to owasp.md
ستلاحظ أنّه سيتم استدعاء الأداة GoogleSearch، ثم سيتم كتابة النتيجة باستخدام الأداة WriteFile. وإذا كنت تستخدم بيئة تطوير متكاملة، سيظهر لك الاقتراح على شكل اختلاف وخيار عرض لتحديد ما إذا كنت تريد قبول الاقتراحات أو رفضها. يمكنك هنا ملاحظة أنّ Gemini CLI يطلب منك الإذن بكتابة الملف

5- 🚀 الإضافات
لتحسين نتائج مهمة معيّنة باستخدام وكيل مستند إلى الذكاء الاصطناعي، يجب معرفة كيفية صياغة طلب بشكل صحيح، وإدارة هندسة السياق بشكل صحيح من خلال دمج الأدوات المناسبة وما إلى ذلك.
"إضافات Gemini CLI" هي حِزم مسبقة التجهيز وسهلة التثبيت من الطلبات وعمليات الدمج التي يمكن ربطها بأدوات خارجية. يحتوي كلّ إضافة على "دليل" مدمج حول كيفية استخدام الأدوات بفعالية، ويمكن أن يتألف من المكوّنات التالية:
- أوامر تبدأ بشرطة مائلة مخصّصة
- إعدادات MCP
- ملفات السياق

تثبيت إضافات الأمان
على سبيل المثال، في هذا البرنامج التعليمي، سنتعرّف على كيفية تثبيت الإضافتَين code-review وsecurity.
نفِّذ الأمر التالي لتثبيت إضافات security من الوحدة الطرفية
gemini extensions install https://github.com/gemini-cli-extensions/security
ستظهر الأسئلة التالية، ما عليك سوى الضغط على Enter للموافقة
Installing extension "gemini-cli-security". **Extensions may introduce unexpected behavior. Ensure you have investigated the extension source and trust the author.** This extension will run the following MCP servers: * securityServer (local): node /home/alvinprayuda/.gemini/extensions/gemini-cli-security/mcp-server/dist/security.js This extension will append info to your gemini.md context using GEMINI.md Do you want to continue? [Y/n]: Extension "gemini-cli-security" installed successfully and enabled.
تثبيت إضافات مراجعة الرموز
بعد ذلك، لنثبّت الإضافة code-review من خلال تنفيذ الأمر أدناه
gemini extensions install https://github.com/gemini-cli-extensions/code-review
بعد الانتهاء، شغِّل Gemini CLI مرة أخرى
gemini
وتشغيل الأمر /extensions، ستلاحظ أنّه تم تثبيت هاتين الإضافتين من قبل.

/extensions
حسنًا، لننفّذ الآن عملية عملية على مستودع النماذج الذي استنسخته سابقًا
6. 🚀 تطبيق إضافة "وضع التفاعل" - تحليل أمان الرموز البرمجية
إضافة Security هي إضافة مفتوحة المصدر لـ Gemini CLI، وهي مصمَّمة لتحسين أمان المستودع. تضيف الإضافة أمرًا جديدًا إلى Gemini CLI يحلّل تغييرات الرمز البرمجي لتحديد مجموعة متنوّعة من المخاطر والثغرات الأمنية.
لنجهّز الآن مستودع العرض التوضيحي أولاً، وننفّذ الأمر التالي للانتقال إلى الفرع الذي تم فيه تطبيق التغييرات التي تنطوي على مخاطر أمنية
git checkout refactor/analysis-demo
بعد ذلك، شغِّل Gemini CLI في الوحدة الطرفية
gemini
بعد ذلك، لنشغّل الإضافات

/security:analyze
سيؤدي ذلك إلى بدء عملية طويلة الأمد، وستتلقّى خلالها عدة طلبات للحصول على إذنك بتنفيذ عملية معيّنة، مثل mkdir كما هو موضّح أدناه.

هذه آلية وقائية لضمان معرفة المستخدمين بالإجراءات التي سينفّذها Gemini CLI. بالنسبة إلى بقية البرنامج التعليمي، يمكنك السماح له دائمًا ( الخيار 2).
سيؤدي هذا الامتداد إلى بدء عملية تستغرق وقتًا طويلاً، ويمكنك الاطّلاع على ملف تخطيط تم إنشاؤه داخل الدليل .gemini_security، كما يمكنك الاطّلاع على قائمة التحقّق التي توضّح ما إذا كانت العملية قد اكتملت أم لا. كما هو موضّح في المثال التالي:

سيستغرق إكمال المهام بعض الوقت، وخلال الانتظار، يمكننا التحقّق من مصدر هذه الإضافات في مستودع Github . يعرض عنوان URL هذا الطلب المستخدَم لتنفيذ كل عمليات فحص الأمان هذه

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

بعد ذلك، اطلب من Gemini CLI المتابعة.

continue
هذه آلية لتجنُّب حلقات لا نهائية وغير منتجة لاستدعاء الأدوات، وسنواصل تحسينها بمرور الوقت.
بعد الانتهاء، سيتم عرض التقرير في الوحدة الطرفية التفاعلية، ولتسهيل ذلك، لنطلب من Gemini CLI كتابته في security-analysis.md

write the result to security-analysis.md file
يمكنك الآن فحص النتيجة المكتوبة في الملف
7. 🚀 وضع عدم التفاعل - تطبيق إضافة مراجعة الرمز البرمجي
تضيف الإضافة code-review أمرًا جديدًا إلى Gemini CLI يحلّل تغييرات الرمز البرمجي لتحديد مجموعة متنوّعة من المشاكل المتعلّقة بجودة الرمز البرمجي.
يمكن تنفيذ هذه الإضافة في وضع Gemini CLI غير التفاعلي، ما يعني أنّه يمكن تنفيذ كل العملية بدون الحاجة إلى إدخال شل Gemini CLI. لتشغيل Gemini CLI في الوضع غير التفاعلي، يمكنك استخدام نمط الأوامر التالي
gemini "put your command here"
ومع ذلك، من المهم ملاحظة أنّه سيؤدي التشغيل في الوضع غير التفاعلي إلى إيقاف أي عملية أدوات تتطلّب إذن المستخدم، وبالتالي نحتاج إلى إضافة العلامة --yolo للموافقة تلقائيًا على جميع الإجراءات، ما يعني تفعيل جميع الأدوات أثناء الوضع غير التفاعلي.
لننفِّذ الإضافة code-review باستخدام الأمر التالي
gemini "/code-review" --yolo -e code-review > code-review.md
سيكتب هذا الأمر نتيجة إخراج Gemini CLI في الملف code-review.md. لاحظ العلامة -e هنا، فهذه العلامة تتحكّم في الإضافة التي سيتم تفعيلها أثناء الجلسة. هنا، نفعّل الإضافة code-review فقط ونوقف الإضافات الأخرى.
سيستغرق ذلك بعض الوقت، ولكن بعد الانتهاء، يمكنك الاطّلاع على نتيجة مشابهة لما هو موضّح أدناه مكتوبة في ملف Markdown.
Here are the results of the code review.
While the recent changes to rename `get_products` and `get_product` to `GetProducts` and `GetProduct` are minor, the codebase has some inconsistencies in its naming conventions. For instance, other functions like `create_product` use `snake_case`, while the newly renamed functions use `PascalCase`. For better code quality and readability, I recommend using a consistent naming convention throughout the project.
More importantly, I have identified several security vulnerabilities in the `main.py` file. Here is a summary of the findings:
### 1. SQL Injection
* **Severity**: High
* **Location**:
* `main.py:99` in `get_products_by_category`
* `main.py:146` in `search_products`
* `main.py:372` in `get_user_transactions`
* `main.py:438` in `adjust_inventory_by_query`
* **Description**: The endpoints directly use f-strings to construct SQL queries, making them vulnerable to SQL injection attacks. An attacker could manipulate the input to execute arbitrary SQL commands, potentially leading to data breaches or unauthorized modifications.
* **Recommendation**: Use parameterized queries or an ORM to handle database interactions. This will ensure that user input is properly sanitized and prevent SQL injection attacks.
### 2. Server-Side Request Forgery (SSRF)
* **Severity**: High
* **Location**: `main.py:265` in `fetch_url`
* **Description**: The `fetch_url` endpoint allows users to specify an arbitrary URL, which the server then requests. This can be exploited to make requests to internal services or local files, leading to information disclosure or other security breaches.
* **Recommendation**: Implement a whitelist of allowed domains or protocols to restrict the URLs that can be requested. Additionally, you can disable redirects and use a timeout to limit the impact of an attack.
### 3. Information Exposure
* **Severity**: Medium
* **Location**: `main.py:423` in `get_environment_variables`
* **Description**: The `get_environment_variables` endpoint exposes all environment variables to the user. This can include sensitive information such as API keys, database credentials, and other secrets.
* **Recommendation**: Remove this endpoint or restrict access to it to authorized users. If you need to expose some environment variables, do so selectively and avoid exposing sensitive information.
8. 🚀 التوافق مع بروتوكول سياق النموذج
الآن، وكما أوضحنا سابقًا في شرح الإضافة، يمكن أن تتصل أداة Gemini CLI بخوادم MCP، أي التطبيقات التي توفّر الأدوات والموارد من خلال Model Context Protocol. يتيح هذا الربط لواجهة سطر الأوامر في Gemini التفاعل مع الأنظمة الخارجية ومصادر البيانات من خلال استخدام خوادم MCP كجسور إلى بيئتك المحلية والخدمات الخارجية، مثل واجهات برمجة التطبيقات.

إذا أردت إعداد خادم MCP الخاص بك، عليك تعديل ملف .gemini/settings.json وإضافة الإعدادات التالية :
{
...
# Previous settings above if any
"mcpServers": {
"server_name": {
# MCP server configurations here
}
}
}
في هذا البرنامج التعليمي، لنضبط إعدادات الربط بحسابنا على Github لنقل بيانات التقرير السابقة إلى Github
ضبط خادم MCP في Github
لننشئ أولاً ملف إعداد مشروع Gemini CLI. نفِّذ الأمر التالي
mkdir -p .gemini && touch .gemini/settings.json
بعد ذلك، افتح الملف .gemini/settings.json واملأه بالإعدادات التالية
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "your-personal-access-token"
},
"timeout": 5000
}
}
}
الآن، سنحتاج إلى رمز الدخول الشخصي الخاص بك على Github هنا، لذا تأكَّد من أنّ لديك حسابًا على Github.
سجِّل الدخول إلى حسابك على Github وانتقِل إلى الإعدادات.

بعد ذلك، انتقِل للأسفل للعثور على إعدادات المطوّرين وانقر عليها.

بعد ذلك، انقر على رموز الدخول الشخصية واختَر الرموز (القديمة).


أدخِل اسم رمز الدخول الشخصي هنا وضَع علامة في مربّعات النطاقات repo.

بعد ذلك، انتقِل للأسفل وانقر على الزر إنشاء رمز مميّز، وتأكَّد من
انقر على زر إنشاء رمز مميّز جديد واختَر إنشاء رمز مميّز جديد (الإصدار القديم). بعد ذلك، انسخ الرمز المميّز الذي تم إنشاؤه واكتبه في .gemini/settings.json

لذلك، من المفترض أن يبدو ملف .gemini/settings.json على النحو التالي
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "ghp-xxxx"
},
"timeout": 5000
}
}
}
الآن، لنؤكّد عملية الربط. إدخال Gemini CLI من خلال تنفيذ هذا الأمر
gemini
بعد ذلك، شغِّل الأمر /mcp، وسيظهر لك أنّ Github MCP تم إعداده بشكلٍ صحيح.

/mcp
بعد ذلك، لنختبر اتصال MCP هذا من خلال إرسال هذا الأمر

Aggregate the findings from @code-review.md and @security-analysis.md into a single report and ensure no duplicates issues reported. Post this report as a comment on the relevant pull request for the current git branch on GitHub and display the pull request URL for manual review
يُرجى ملاحظة الرمزين @code-review.md و@security-analysis.md هنا، فهما الطريقة التي نشير بها إلى الملفات التي سيتم تمريرها إلى واجهة سطر الأوامر في Gemini. سيقرأ هذا الأمر محتوى الملفَين ويدفع تعليقًا إلى طلب السحب المرتبط بهذا الفرع باستخدام اتصال Github MCP. بعد ذلك، يمكنك التحقّق من ذلك في عنوان URL لطلب السحب.

9- 💡Gemini CLI في سير عمل التكامل المستمر/التسليم المستمر
إذا كنت من مستخدمي Github، يمكنك بسهولة تضمين Gemini CLI في مسار CI/CD من خلال استخدام run-gemini-cli Github Action. يعمل هذا المساعد كوكيل مستقل لتنفيذ مهام الترميز الروتينية المهمة، وكشريك عند الطلب يمكنك تفويض العمل إليه بسرعة.
يمكنك الاستفادة منه لإجراء مراجعات لطلبات الدمج وتصنيف المشاكل وتنفيذ تحليل الرموز البرمجية وتعديلها وغير ذلك باستخدام Gemini بشكل حواري مباشرةً داخل مستودعات GitHub
يمكن الاطّلاع على مثال على عملية الدمج هذه في طلب السحب هذا، حيث نستخدم إضافة Gemini CLI Security داخل برنامج التشغيل ونقدّم المراجعات عند إنشاء طلب السحب.




10. 💡استكشاف إضافات Gemini CLI الأخرى

يمكنك أيضًا استكشاف المزيد من الإضافات في https://geminicli.com/extensions . يمكنك الاطّلاع عليه للحصول على المزيد من الأدوات المفيدة.
11. 🧹 تنظيف
لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا الدرس العملي، اتّبِع الخطوات التالية:
- في Google Cloud Console، انتقِل إلى صفحة إدارة الموارد.
- في قائمة المشاريع، اختَر المشروع الذي تريد حذفه، ثم انقر على حذف.
- في مربّع الحوار، اكتب رقم تعريف المشروع، ثم انقر على إيقاف لحذف المشروع.