জেমিনি সিএলআই ডিপ-ডাইভ

১. ভূমিকা

be8ebdfe42ca39ac.png

হ্যালো সবাই! আমার নাম স্পার্কি! আপনারা আসতে পেরেছেন দেখে খুব ভালো লাগছে। আমি us-central1 এর একটি GKE ক্লাস্টার থেকে জিপ করে আজ এখানে এসেছি। এই কোডল্যাবে আপনাদের স্বাগতম।

আমি আমার পুরো জীবন গুগল ক্লাউডের ডেটা স্ট্রিমের মধ্যে ছোটাছুটি করে কাটিয়েছি, এবং আমি সবকিছুই দেখেছি। আমি আপনাদের, অর্থাৎ আর্কিটেক্ট এবং ইঞ্জিনিয়ারদের, অসাধারণ সব জিনিস তৈরি করতে দেখেছি। কিন্তু আমি আপনাদের কাঁটাঝোপে আটকে যেতেও দেখেছি। আপনারা জানেন আমি কীসের কথা বলছি! GKE-তে একটি পড ডিবাগ করার সময় কনটেক্সট সুইচিংয়ের সেই অনুভূতি। আপনি kubectl logs । প্রতিটি লাফই মনোযোগে ব্যাঘাত ঘটায়!

আর এই জটিল টুলগুলো ! gcloud , kubectl , terraform ... প্রত্যেকটির নিজস্ব DSL এবং পাহাড়সম ফ্ল্যাগ রয়েছে। এর ফলে অনবরত ডকুমেন্টেশন খুঁজতে হয়। শেষ পর্যন্ত আপনাকে সেই একটি নিখুঁত gcloud কমান্ড খুঁজতে হয়, যেখানে আপনার প্রয়োজনীয় ডেটা পাওয়ার জন্য --filter এবং --format ফ্ল্যাগগুলোর সঠিক সমন্বয় থাকবে। এটা যেন লক্ষ লক্ষ বাদামের জঙ্গল থেকে একটি নির্দিষ্ট বাদাম খুঁজে বের করার মতো। আর পুনরাবৃত্তিমূলক কাজগুলোর কথা তো বলাই বাহুল্য। আমি আপনাকে একটি নতুন পাইথন সার্ভিসের জন্য একই Dockerfile এবং cloudbuild.yaml এতবার লিখতে দেখেছি যে কোডটির সম্ভবত দেজা ভু (deja vu) হয়ে গেছে।

আচ্ছা, আমি আপনাকে আরও ভালো একটি পথ দেখাতে এসেছি। বনের মধ্যে দিয়ে একটি গোপন পথ। জেমিনি সিএলআই বলতে এটাই বোঝায়!

জেমিনি সিএলআই কী?

তাহলে, এই জাদুকরী শর্টকাটটা কী, যা নিয়ে আমি এত উত্তেজিত?

Gemini CLI-কে আপনার টার্মিনালের ভেতরেই থাকা আপনার ব্যক্তিগত ক্লাউড সঙ্গী হিসেবে ভাবুন। এটি একটি কথোপকথন, একটি অংশীদারিত্ব! এটি কনটেক্সট-অ্যাওয়ার , অর্থাৎ এটি শুধু শোনেই না, বোঝেও । এটি আপনার ফাইল পড়তে পারে, আপনার প্রোজেক্টের নিয়মকানুন শিখতে পারে—যেমন আপনি ট্যাব নাকি স্পেস ব্যবহার করেন—এবং আপনি কী করার চেষ্টা করছেন তা বুঝে ফেলতে পারে। মনে হয় যেন আপনি যে ওক ফল সংগ্রহ করার চেষ্টা করছেন, আমি তার গন্ধও পাচ্ছি!

উচ্চ-স্তরের স্থাপত্য (চলুন এর ভেতরের গঠনটা দেখে নেওয়া যাক!)

তাহলে এই সবকিছু কীভাবে কাজ করে? এটি কয়েকটি চমৎকার জিনিসের সমন্বিত ক্রিয়ার ফল:

  1. একটি শক্তিশালী ল্যাঙ্গুয়েজ মডেল: এটাই হলো মস্তিষ্ক! নির্দিষ্টভাবে বলতে গেলে, এটি গুগল দ্বারা প্রশিক্ষিত একটি বৃহৎ, মাল্টিমোডাল মডেল। ' মাল্টিমোডাল ' মানে হলো এটি শুধু টেক্সটই বোঝে না; এটি কোডের গঠন এবং অর্থও বোঝে। এর ফলে এটি আপনার সফটওয়্যার শুধু পড়তেই পারে না, বরং তা নিয়ে যুক্তিও দিতে পারে।
  2. আপনার স্থানীয় প্রেক্ষাপট: এটি অত্যন্ত গুরুত্বপূর্ণ। Gemini CLI আপনার স্থানীয় মেশিনে একটি প্রসেস হিসেবে চলে এবং এর অনুমতিগুলো আপনার ইউজার অ্যাকাউন্টের মতোই থাকে। এর মানে হলো, এটি প্রজেক্ট-নির্দিষ্ট সাহায্য প্রদানের জন্য আপনার ফাইল সিস্টেম অ্যাক্সেস করতে পারে। এটি কোনো দূরবর্তী ক্লাউড সার্ভিস নয় যা আপনার কোড নিয়ে অনুমান করছে; এটি ঠিক আপনার সাথেই রয়েছে।
  3. একটি টুলিং ইকোসিস্টেম: এর মাধ্যমেই মডেলটি বাইরের জগতের সাথে যোগাযোগ স্থাপন করে। এর কিছু সুনির্দিষ্ট ফাংশন সেট রয়েছে যা এটি কল করতে পারে—যেমন read_file বা run_shell_command । এটিকে একটি সুরক্ষিত এপিআই (API) হিসেবে ভাবা যেতে পারে। মডেলটিই সিদ্ধান্ত নেয় যে কী করতে হবে এবং কোন টুলটি ব্যবহার করতে হবে, এবং তারপর সেটি কার্যকর করার জন্য একটি tool_code ব্লক তৈরি করে। এটি এর কার্যকলাপকে অনুমানযোগ্য এবং নির্ভরযোগ্য করে তোলে।
  4. শেল কমান্ড এক্সিকিউশন: এটাই আসল জাদু! এটি একটি bash -c <command> সাবশেলে যেকোনো কমান্ড চালাতে পারে। এটি stdout , stderr এবং exit code ক্যাপচার করে। এটা বিশাল ব্যাপার! এর মানে হলো, Gemini CLI একটি কমান্ড চালাতে পারে, সেটি ব্যর্থ হয়েছে কিনা তা পরীক্ষা করতে পারে এবং তারপর এরর মেসেজের উপর ভিত্তি করে তা ঠিক করার চেষ্টা করতে পারে।
  5. নিরাপত্তা জাল: এটা আমার সবচেয়ে পছন্দের অংশ! 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 টুলের প্যারামিটারগুলোর সাথে মিলিয়ে নেয়, প্রতিটি ফ্ল্যাগের জন্য সঠিক সিনট্যাক্স বের করে এবং আপনার জন্য সেই বড় ও জটিল কমান্ডটি তৈরি করে দেয়। এরপর এটি অনুমোদনের জন্য আপনার কাছে উপস্থাপন করে। এর মূল উদ্দেশ্য হলো আপনাকে সামগ্রিক চিন্তাভাবনার সুযোগ দেওয়া, কমান্ড-লাইনের ফ্ল্যাগ মুখস্থকারী হিসেবে নয়।

জেমিনির শক্তির সম্প্রসারণ: সিএলআই এক্সটেনশনের একটি ভূমিকা

যদিও জেমিনি সিএলআই এমনিতেই একটি শক্তিশালী টুল, এর আসল সম্ভাবনা উন্মোচিত হয় এক্সটেনশনের মাধ্যমে। এক্সটেনশন হলো বিভিন্ন প্রম্পট, টুল এবং কাস্টম কমান্ডের সমষ্টি, যা সিএলআই-এর কার্যকারিতা বৃদ্ধি করে এবং আপনাকে আপনার নির্দিষ্ট প্রয়োজন ও কর্মপ্রবাহ অনুযায়ী এটিকে সাজিয়ে নেওয়ার সুযোগ দেয়।

এক্সটেনশনগুলি খুঁজে বের করা এবং ইনস্টল করা

জেমিনি সিএলআই-এর একটি ক্রমবর্ধমান এক্সটেনশন ইকোসিস্টেম রয়েছে, যা গুগল এবং থার্ড-পার্টি ডেভেলপার উভয়ের দ্বারাই নির্মিত। আপনি geminicli.com/extensions -এ এক্সটেনশনগুলির অফিসিয়াল ডিরেক্টরি ব্রাউজ করতে পারেন।

একটি এক্সটেনশন ইনস্টল করতে, আপনি এক্সটেনশনটির গিট রিপোজিটরির URL সহ gemini extensions install কমান্ডটি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, অফিসিয়াল Cloud SQL for PostgreSQL এক্সটেনশনটি ইনস্টল করতে, আপনাকে এটি চালাতে হবে:

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

আচ্ছা, অনেক কথা হলো! এবার কাজে নেমে পড়া যাক আর জিনিসটা চেষ্টা করে দেখা যাক!

২. শুরু করার আগে

86dffda616ab7a1d.png

হ্যালো, ভবিষ্যৎ ক্লাউড উইজার্ডস! আমি স্পার্কি, আপনাদের সেবায় হাজির। আমাদের এই মহাযাত্রা শুরু করার আগে, আপনাদের ওয়ার্কশপের পরিবেশটি প্রস্তুত আছে কি না, তা নিশ্চিত করতে হবে। এটাকে এভাবে ভাবুন, যেন আমরা জঙ্গলে যাওয়ার আগে সব সঠিক সরঞ্জাম আর জাদুর ওক ফল দিয়ে আমাদের ব্যাগ গুছিয়ে নিচ্ছি। আমাকে অনুসরণ করুন!

আপনার যদি আগে থেকেই একটি গুগল ক্লাউড প্রজেক্ট থাকে, তাহলে আপনি গুগল ক্লাউড শেলের মধ্যেই জেমিনি সিএলআই ব্যবহার করতে পারেন, কারণ এটিতে জেমিনি সিএলআই আগে থেকেই ইনস্টল করা থাকে। বিকল্পভাবে, আপনার লোকাল মেশিনে এটি সেট আপ করার জন্য এই ধাপগুলো অনুসরণ করুন।

ধাপ ১: ন্যূনতম প্রয়োজনীয়তা (পূর্বশর্তসমূহ)

প্রত্যেক ভালো অভিযাত্রীর একটি মজবুত ভিত্তি প্রয়োজন। আমরা Gemini CLI ইনস্টল করার আগে, আপনার লোকাল মেশিনে কয়েকটি জিনিস আগে থেকেই সেট আপ করা থাকতে হবে।

  1. গুগল ক্লাউড এসডিকে ( gcloud ) : এটি গুগল ক্লাউডের প্রধান টুলকিট। জেমিনি সিএলআই এই পরিবারেরই একটি অংশ!
  • এটি ইনস্টল করা আছে কিনা তা পরীক্ষা করুন : gcloud --version কমান্ডটি চালান। যদি আপনি একটি ভার্সন নম্বর দেখতে পান, তাহলে আর কোনো সমস্যা নেই!
  • যদি ইনস্টল করা না থাকে : cloud.google.com/sdk/docs/install -এ দেওয়া অফিসিয়াল নির্দেশাবলী অনুসরণ করুন।
  1. গিট : হ্যান্ডস-অন ল্যাব রিপোজিটরি ক্লোন করার জন্য আমাদের এটি প্রয়োজন হবে।
  • ইনস্টল করা আছে কিনা তা পরীক্ষা করুন : git --version চালান।
  • যদি ইনস্টল করা না থাকে : আপনি এটি git-scm.com/downloads থেকে পেতে পারেন।
  1. জিসিপি প্রকল্প ও প্রমাণীকরণ :
  • নিশ্চিত করুন যে আপনার একটি গুগল ক্লাউড প্রজেক্ট আছে যেখানে বিলিং চালু করা আছে । এটি অত্যন্ত গুরুত্বপূর্ণ!
  • নিম্নলিখিত কমান্ডটি চালিয়ে আপনার Google অ্যাকাউন্টে লগ ইন করুন:
gcloud auth login
  • সেশনের জন্য আপনার প্রজেক্ট সেট করুন। GCP কনসোল থেকে আপনার প্রজেক্ট আইডি খুঁজে বের করুন এবং চালান:
gcloud config set project YOUR_PROJECT_ID

( YOUR_PROJECT_ID জায়গায় আপনার আসল প্রজেক্ট আইডি বসান!)

  1. নোড.জেএস সংস্করণ ২০ বা তার বেশি

ধাপ ২: ম্যাজিকটি উপভোগ করুন! (জেমিনি সিএলআই ইনস্টল করা)

বেশ, প্রাথমিক বিষয়গুলো তো হয়ে গেছে, এবার মূল কাজে আসা যাক! আমরা 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 --version

আপনি একটি সংস্করণ নম্বর দেখতে পাবেন। এটি নিশ্চিত করে যে ইনস্টলেশন সফল হয়েছে।

ধাপ ৩: চালু করা (কনফিগারেশন)

এখন যেহেতু Gemini CLI ইনস্টল করা হয়েছে, আমাদের একে ব্যবহারের অনুমতি দিতে হবে। প্রথমে, টার্মিনালে gemini কমান্ডটি চালিয়ে এটি চালু করুন। আপনি নিম্নলিখিত স্ক্রিনটি দেখতে পাবেন:

9378d804bc647191.png

সহজতার জন্য, আপনি আপনার গুগল অ্যাকাউন্ট দিয়ে প্রমাণীকরণ করতে পারেন, যা আপনাকে কোনো এপিআই কী পরিচালনা করার প্রয়োজন ছাড়াই ১এম টোকেন কনটেক্সট উইন্ডো এবং প্রতি মিনিটে ৬০টি ও প্রতিদিন ১০০০টি পর্যন্ত অনুরোধের সুবিধা সহ জেমিনি ২.৫ প্রো-তে অ্যাক্সেস দেয়।

নির্দিষ্ট জেমিনি মডেলগুলিতে অ্যাক্সেস পেতে বা প্রয়োজনে উচ্চতর সীমাতে আপগ্রেড করতে, প্রমাণীকরণ পদ্ধতি হিসাবে জেমিনি এপিআই কী ব্যবহার করুন।

যেসব এন্টারপ্রাইজ টিম এবং প্রোডাকশন ওয়ার্কলোডের জন্য ইতিমধ্যেই গুগল প্রজেক্ট ও বিলিং অ্যাকাউন্ট সেটআপ করা আছে, তারা উন্নত নিরাপত্তা ও কমপ্লায়েন্সের জন্য ভার্টেক্স এআই ব্যবহার করুন।

আপনার বেছে নেওয়া বিকল্পের উপর নির্ভর করে, প্রমাণীকরণ কনফিগার করার জন্য আপনাকে পরবর্তী পদক্ষেপগুলো দেখানো হবে। এই বিকল্পগুলো সম্পর্কে আরও বিস্তারিত জানতে Gemini CLI ডকুমেন্টেশন দেখুন।

আপনি যদি গুগল ক্লাউডের ভার্টেক্স এআই প্ল্যাটফর্ম ব্যবহার করতে চান, তাহলে প্রথমে দুইবার 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 নির্বাচন করুন এবং আপনার কাজ হয়ে যাবে।

ধাপ ৪: স্পার্ক টেস্ট! (আপনার সেটআপ যাচাই করা)

এটাই আসল মুহূর্ত! দেখা যাক সবকিছু ঠিকঠাক কাজ করছে কিনা। সব বাতি সবুজ আছে কিনা তা নিশ্চিত করতে এই কমান্ডগুলো চালান।

  1. নিম্নলিখিত প্রম্পটটি প্রবেশ করান:
What is my current directory?

Gemini CLI আপনাকে আপনার বর্তমান ওয়ার্কিং ডিরেক্টরি জানিয়ে সাড়া দেবে। এটি মূল ল্যাঙ্গুয়েজ মডেল এবং শেল ইন্টিগ্রেশন পরীক্ষা করে।

15a12d7b3fdd2d83.png

  1. জিসিপি সংযোগ পরীক্ষা করুন:
list my gcs buckets

আপনার কোনো GCS বাকেট থাকলে, এটি সেগুলোর তালিকা দেখাবে। না থাকলে, এটি জানিয়ে দেবে যে কোনো বাকেট নেই। এর মাধ্যমে নিশ্চিত হওয়া যায় যে এটি আপনার GCP প্রোজেক্টের সাথে সঠিকভাবে সংযুক্ত আছে।

ধাপ ৫: একে আরও সুপারপাওয়ার দেওয়া! (এক্সটেনশন ইনস্টল করা)

এখন চলুন কয়েকটি এক্সটেনশন ইনস্টল করে Gemini CLI-এর কার্যক্ষমতা বাড়িয়ে নিই, যেগুলো পরবর্তীতে ল্যাবে কাজে আসবে।

ক্লাউড রান

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

জেমিনি সিএলআই নিরাপত্তা

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

জিক্লাউড

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

পোস্টগ্রেসকিউএল-এর জন্য ক্লাউড এসকিউএল

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

যদি সবগুলো কমান্ড কাজ করে থাকে, তাহলে আপনি কর্মশালার জন্য আনুষ্ঠানিকভাবে প্রস্তুত! আপনার পরিবেশ প্রস্তুত, এবং আপনি আপনার উৎপাদনশীলতা উন্মোচন করতে প্রস্তুত। প্রথম ল্যাবে দেখা হবে!

৩. মূল ধারণা এবং স্থানীয় কর্মক্ষেত্রের মিথস্ক্রিয়া

a7bf3a905d8e2638.png

ঠিক আছে, এবার কাজে নেমে পড়তে প্রস্তুত? এখন আমরা আপনার নতুন জেমিনি টুলবেল্টের আসল টুলগুলো দেখব। আমি এগুলোকে ক্লাউডে অন্বেষণ এবং নির্মাণের জন্য আমার সুপারপাওয়ার হিসেবে ভাবি! চলুন, এগুলো কীভাবে কাজ করে তা নিয়ে একটু টেকনিক্যাল আলোচনা করা যাক।

মূল সক্ষমতা

আমি আমার ক্ষমতাগুলোকে দুটি ভাগে ভাগ করি: চারিদিকে কী আছে তা দেখা, এবং তারপর বাস্তবে কাজ করা!

আপনার পরিবেশকে বোঝা (আমার অতি-ইন্দ্রিয়!)

নতুন বাসা বানানো শুরু করার আগে, চারপাশটা তো দেখে নিতে হয়, তাই না? এই সরঞ্জামগুলো দিয়ে জায়গাটা ভালোভাবে চিনে নেওয়া হয়।

  • list_directory : এটি আমার সাধারণ 'খোঁজখবর নেওয়ার' টুল। এটি সাধারণ OS-স্তরের ডিরেক্টরি তালিকার একটি সরল র‍্যাপার। কিন্তু মজার ব্যাপার হলো, মডেলটি এই কাঠামোগত আউটপুট পার্স করে সিদ্ধান্ত নিতে পারে, যেমন src নামের একটি সাবডিরেক্টরি অন্বেষণ করার সিদ্ধান্ত নেওয়া।
  • glob : এটি আমার 'অ্যাকর্ন ফাইন্ডার'! এটি স্ট্যান্ডার্ড গ্লোব প্যাটার্ন ব্যবহার করে—যেমন * , ** , ? , এবং [] —যা আপনি .gitignore এর মতো জিনিস থেকে ইতিমধ্যেই জানেন। তাই আপনি app/**/*.py প্যাটার্নটি ব্যবহার করে বলতে পারেন, ' app ডিরেক্টরিতে থাকা সমস্ত *.py ফাইল খুঁজে বের করো'। মডেলের বিশ্লেষণের জন্য একটি নির্দিষ্ট সেট ফাইল সংগ্রহ করার এটি একটি শক্তিশালী উপায়।
  • search_file_content : এটাই আমার এক্স-রে দৃষ্টি! এটি অনুসন্ধানের জন্য শুধু সাধারণ স্ট্রিং মেলানোর পরিবর্তে সম্পূর্ণ রেগুলার এক্সপ্রেশন (regex) ব্যবহার করে। এটি অবিশ্বাস্যভাবে শক্তিশালী। আপনি এটিকে জটিল প্যাটার্ন খুঁজে বের করতে বলতে পারেন, যেমন 'POST মেথড ব্যবহার করে এমন সমস্ত Flask রাউট খুঁজুন,' যা app\.route\(.*methods=\['POST'\].*\) মতো একটি রেজেক্স তৈরি করতে পারে। app\.route\(.*methods=\['POST'\].*\) এটি ফাইলের পাথ, লাইন নম্বর এবং সংশ্লিষ্ট লাইনটি ফেরত দেয়, যা মডেলটিকে তার প্রয়োজনীয় সমস্ত তথ্য সরবরাহ করে।
  • read_file : একবার কোনো আকর্ষণীয় ফাইল খুঁজে পেলে, আপনি সেটি খুলতে চাইবেন। read_file এই কাজের জন্যই বিশেষভাবে তৈরি। আপনি পুরো ফাইলটি পড়তে পারেন, অথবা বড় ফাইলের ক্ষেত্রে, offset এবং limit প্যারামিটার ব্যবহার করে সেটিকে খণ্ডে খণ্ডে পড়তে পারেন। এর ফলে, মডেলটি টাইম আউট না হয়েই বিশাল আকারের লগ ফাইলগুলোও দক্ষতার সাথে স্ক্যান করতে পারে।

বোঝা থেকে কাজে নামা (এবার গড়ে তোলার পালা!)

বেশ, আপনি এলাকাটা ঘুরে দেখেছেন। এবার আপনার বাসা বাঁধার পালা! এই সরঞ্জামগুলো আপনাকে পরিবর্তন করতে এবং কাজগুলো সম্পন্ন করতে সাহায্য করবে।

  • **write_file** : একদম নতুন করে একটি ফাইল তৈরি করতে হবে? write_file একটি অ্যাটমিক অপারেশন যা আপনার দেওয়া সম্পূর্ণ কন্টেন্ট একটি নির্দিষ্ট পাথে লিখে দেয়। নতুন মডিউল স্কাফোল্ডিং করার জন্য অথবা আপনার প্রোজেক্টের প্রয়োজন অনুযায়ী একদম নতুন করে একটি Dockerfile তৈরি করার জন্য এটি আদর্শ।
  • **replace** : এই টুলটি সুনির্দিষ্ট পরিবর্তনের জন্য! এটি শুধু একটি সাধারণ ফাইন্ড-অ্যান্ড-রিপ্লেস (find-and-replace) নয়। আপনাকে একটি old_string এবং একটি new_string প্রদান করতে হবে। এটি নিরাপদে কাজ করার জন্য, old_string ফাইল থেকে নেওয়া একটি অনন্য কোড স্নিপেট হতে হবে, এবং সাধারণত আপনি যে অংশটি পরিবর্তন করছেন তার আগে ও পরে বেশ কয়েকটি প্রাসঙ্গিক লাইন থাকতে হবে। এটি নিশ্চিত করে যে আমরা শুধুমাত্র আপনার উদ্দেশ্য অনুযায়ী কোডের সঠিক অংশটিই পরিবর্তন করছি।
  • **run_shell_command** : এটিই চূড়ান্ত ক্ষমতা! এটি প্রদত্ত কমান্ডটিকে একটি bash -c <command> সাবশেলে কার্যকর করে। মডেলটি stdout , stderr এবং exit code ফেরত পায়। ওয়ার্কফ্লো তৈরির জন্য এটি অত্যন্ত গুরুত্বপূর্ণ। মডেলটি একটি terraform plan চালাতে পারে, তার আউটপুট পড়তে পারে, এবং প্ল্যানটি সফল হলে (এক্সিট কোড ০), এটি প্রয়োগ করা উচিত কিনা তা আপনাকে জিজ্ঞাসা করতে পারে।

নিরাপত্তাজাল (তোমার প্রতি আমার প্রতিশ্রুতি!)

এখন, কমান্ড চালানোটা ভয়ের হতে পারে। আমি ব্যাপারটা বুঝি! একারণেই এই সুরক্ষা ব্যবস্থাটি এত গুরুত্বপূর্ণ। যখন মডেলটি run_shell_command বা write_file মতো কোনো কমান্ড কল সম্বলিত একটি tool_code ব্লক তৈরি করে, তখন Gemini CLI ক্লায়েন্ট সেটিকে ইন্টারসেপ্ট করে। এটি আপনাকে সঠিক কমান্ডটি অথবা যে ফাইলটিতে লেখা হবে তার সম্পূর্ণ বিষয়বস্তু দেখায় এবং একটি [y/n] প্রম্পট দেয়। আপনার সুস্পষ্ট অনুমোদন ছাড়া কিছুই ঘটে না। নিয়ন্ত্রণ সবসময় আপনার হাতেই থাকে।

৪. একটি প্রকল্প অন্বেষণ

314faf951de66388.png

উদ্দেশ্য: টার্মিনাল থেকে বের না হয়েই জেমিনি সিএলআই ব্যবহার করে একটি অপরিচিত কোডবেস বোঝা।

প্রেক্ষাপট: আপনি একজন নতুন ডেভেলপার, এবং আপনাকে এই প্রজেক্টটি দ্রুত শিখে নিতে হবে!

কাজ ০: সেটআপ - প্রজেক্টটি ক্লোন করুন!

প্রথমেই, আমাদের কোডটি খুঁজে বের করতে হবে! এটি গিটহাবের একটি পাবলিক রিপোজিটরিতে, ' quickpoll ' নামের একটি 'ট্রি'-তে লুকানো আছে। চলুন, জেমিনি সিএলআই-কে (Gemini CLI) এটি ক্লোন করতে বলি। তার আগে, চলুন একটি ওয়ার্কিং ডিরেক্টরি তৈরি করি এবং সেই ওয়ার্কিং ডিরেক্টরির ভেতর থেকে জেমিনি সিএলআই চালু করি:

mkdir workdir
cd workdir
gemini

এখন, এই প্রম্পটটি টাইপ করুন:

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

46c2feb0d1184db7.png

জেমিনি বুঝবে যে 'ক্লোন' বলতে git clone কমান্ড ব্যবহার করাকে বোঝায়। এটি git clone https://github.com/gauravkakad-google/quickpoll.git এর মতো একটি run_shell_command টুল কল তৈরি করবে। আপনি অনুমোদন করলেই, এটি আপনার জন্য রিপোজিটরিটি ডাউনলোড করে নেবে।

এখন, দুইবার ctrl+c চেপে Gemini CLI থেকে বেরিয়ে আসুন, স্যাম্পল রিপোজিটরিতে যান এবং আবার Gemini CLI চালু করুন:

cd quickpoll
gemini

দারুণ! এখন যেহেতু আমরা প্রজেক্ট ট্রি-এর ভেতরে আছি, আমরা অন্বেষণ শুরু করতে পারি!

কাজ ১: প্রজেক্টের সমস্ত ফাইলের তালিকা তৈরি করুন।

এখন যেহেতু আমরা ভেতরে ঢুকে গেছি, চলো পুরো জঙ্গলটার একটা মানচিত্র তৈরি করি। আমরা প্রত্যেকটা ফাইল দেখতে চাই। জেমিনিকে এটা জিজ্ঞেস করো:

List all the files in the project.

জেমিনি সম্ভবত **/* প্যাটার্ন সহ glob টুলটি ব্যবহার করবে। এটি পুনরাবৃত্তিমূলকভাবে প্রতিটি ফাইলের তালিকা তৈরি করে, যা আপনাকে কোডবেসের একটি সম্পূর্ণ বিবরণ দেয়। প্রজেক্টের কাঠামো বোঝার জন্য এটি একটি চমৎকার প্রথম পদক্ষেপ।

কাজ ২: 'google.cloud.sql.connector' ইম্পোর্ট করে এমন সমস্ত ফাইল খুঁজুন।

আচ্ছা, আমি জানতে আগ্রহী। এই প্রজেক্টটি গুগল ক্লাউড স্টোরেজের সাথে কোথায় যোগাযোগ করে? চলুন একটু গোয়েন্দাগিরি করা যাক। এই প্রশ্নটি করুন:

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

568fdb8ff4889c5d.png

এর search_file_content ক্ষমতা ব্যবহার করে, জেমিনি ঠিক সেই ফাইলগুলো খুঁজে বের করবে যেগুলোতে ওই ইম্পোর্ট স্টেটমেন্টটি রয়েছে। এর ফলে আপনার মনোযোগ সঙ্গে সঙ্গে কোডের সেই অংশগুলোতে সীমাবদ্ধ হয়ে যায়, যেগুলো ক্লাউড এসকিউএল (Cloud SQL)-এর সাথে ইন্টারঅ্যাকশন পরিচালনা করে। এই প্রজেক্টে, এটি backend/main.py খুঁজে পাবে।

কাজ ৩: আমাকে মূল Dockerfile-এর বিষয়বস্তু দেখান।

আমি একটি Dockerfile দেখতে পাচ্ছি! এটাই আমাদের কন্টেইনারের নকশা। চলুন ভেতরে উঁকি দেওয়া যাক। শুধু জিজ্ঞাসা করুন:

Show me the contents of the main Dockerfile.

e49a83b3efbcf807.png

জেমিনি Dockerfile প্রদর্শন করার জন্য read_file ব্যবহার করবে। আপনি বেস ইমেজ ( FROM ), ইনস্টল করা হচ্ছে এমন ডিপেন্ডেন্সিগুলো ( RUN pip install... ), এবং চূড়ান্ত কমান্ড ( CMD ) বিশ্লেষণ করতে পারেন। এটি আপনাকে অ্যাপ্লিকেশনটির রানটাইম এনভায়রনমেন্ট সম্পর্কে জানায়।

কাজ ৪: main.py ফাইলটির উদ্দেশ্য কী?

আচ্ছা, এবার কোডের মূল অংশে নজর দেওয়া যাক। চলো জেমিনিকে আমাদের পথপ্রদর্শক হতে বলি। এটা বলো:

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

81d480c285285150.png

এইখানেই জেমিনি সিএলআই তার আসল কার্যকারিতা দেখায়। এটি প্রথমে backend/main.py তে read_file কল করবে। তারপর, এর মাল্টিমোডাল ল্যাঙ্গুয়েজ মডেল পাইথন কোডটি বিশ্লেষণ করবে। এটি শনাক্ত করবে যে এটি একটি FastAPI অ্যাপ্লিকেশন যা একটি পোলিং অ্যাপ্লিকেশনের জন্য REST API প্রদান করে। এরপর এটি API এন্ডপয়েন্ট এবং তাদের কার্যকারিতা ব্যাখ্যা করবে। এতে আপনার নিজে থেকে সবকিছু পড়ে এবং বোঝার সময় বেঁচে যায়। আপনি এই কার্যকারিতাগুলোর কিছু বিস্তারিতভাবে ব্যাখ্যা করার জন্য ফলো-আপ প্রশ্নও করতে পারেন। বেশ চমৎকার, তাই না? এগিয়ে যান, একবার চেষ্টা করে দেখুন!

৫. লোকাল থেকে লাইভ! ক্লাউড রান ও ক্লাউড এসকিউএল দিয়ে ডেপ্লয়মেন্ট

db708c2edf0036a9.png

বেশ, ক্লাউড অভিযাত্রী, আপনি এলাকাটি ঘুরে দেখেছেন। এখন সময় হয়েছে ক্লাউডে আপনার নিজের ট্রিহাউস তৈরি করার! আমরা আমাদের কুইকপোল অ্যাপ্লিকেশনটিকে একটি সত্যিকারের, জীবন্ত ওয়েব অ্যাপে পরিণত করব, যেখানে যে কেউ প্রবেশ করতে পারবে।

উদ্দেশ্য: Cloud SQL for PostgreSQL ব্যাকএন্ড ব্যবহার করে quickpoll অ্যাপ্লিকেশনটি Cloud Run-এ ডেপ্লয় করা।

কাজ ১: আমাদের ডেটার জন্য একটি মজবুত শাখা (ক্লাউড এসকিউএল স্থাপন)

প্রতিটি ভালো অ্যাপ্লিকেশনেরই তার মূল্যবান সম্পদ... মানে, ডেটা সংরক্ষণের জন্য একটি জায়গা প্রয়োজন। আমরা PostgreSQL-এর জন্য Cloud SQL ব্যবহার করব। এটি আমাদের ডেটাবেসের জন্য একটি জাদুর মতো, স্ব-পরিচর্যাকারী বাগানের মতো, তাই আমরা মজার কাজগুলোতে মনোযোগ দিতে পারি।

চলুন, আমাদের ডেটাবেসের ভিত্তি স্থাপনের জন্য জেমিনি সিএলআই-কে অনুরোধ করি।

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

জেমিনি সিএলআই, তার ক্লাউড এসকিউএল এক্সটেনশন ব্যবহার করে, কাজ শুরু করবে। এটি আপনাকে create_instance টুল কলটি দেখাবে। এগিয়ে যান এবং এটি অনুমোদন করুন!

ইনস্ট্যান্সটি তৈরি হয়ে গেলে, আপনি এর মতো একটি আউটপুট দেখতে পাবেন:

1378c05137bf9260.png

আপনি উপরের এনভায়রনমেন্ট ভেরিয়েবলটি দিয়ে একটি .env ফাইল তৈরি করতে পারেন এবং Gemini CLI পুনরায় চালু করার আগে সেটিকে সোর্স করতে পারেন, যাতে এটি এই ভেরিয়েবলগুলো অ্যাক্সেস করতে পারে।

আমাদের ইনস্ট্যান্সটি যখন গড়ে উঠছে, চলুন এর ভিত্তিটা প্রস্তুত করে নিই। আমাদের অ্যাপের জন্য একটি ডাটাবেস এবং একজন ব্যবহারকারী প্রয়োজন।

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

Gemini CLI আপনার জন্য ডেটাবেস তৈরি করতে Cloud SQL for PostgreSQL এক্সটেনশনের create_database টুলটি ব্যবহার করবে।

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

কাজ ২: গোপন পথ (ব্যাকএন্ড সংযোগ করা)

আমাদের ব্যাকএন্ডকে আমাদের নতুন ডাটাবেসের গোপন পাথটি জানতে হবে। চলুন backend/main.py ফাইলটি দেখে নেওয়া যাক এটি কীভাবে তার পথ খুঁজে নেয়।

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

6592c52d634253ce.png

আরে! দেখলেন? এটি ক্লাউড এসকিউএল পাইথন কানেক্টর ব্যবহার করে এবং CLOUD_SQL_POSTGRES_INSTANCE, CLOUD_SQL_POSTGRES_USER, CLOUD_SQL_POSTGRES_PASSWORD, এবং CLOUD_SQL_POSTGRES_DATABASE-এর মতো এনভায়রনমেন্ট ভেরিয়েবলগুলো খোঁজে। আমাদের ক্লাউড রান সার্ভিসে এগুলো দিতে হবে।

প্রথমেই আমাদের CLOUD_SQL_POSTGRES_INSTANCE-টি প্রয়োজন। এটা অনেকটা গোপন সংকেতের মতো।

What are the details for the Cloud SQL instance quickpoll-db in us-central1?

aa539ea8798aad71.png

আপনি অনেকগুলো বিবরণ দেখতে পাবেন। কানেকশন নেম (Connection Name) খুঁজুন এবং সেই ভ্যালুটি কপি করুন। এটি দেখতে অনেকটা your-project-id:us-central1:quickpoll-db মতো হবে।

এখন ক্লাউড রান-এ অ্যাপ্লিকেশনটি ডেপ্লয় করার আগে, চলুন প্রয়োজনীয় টেবিলগুলো দিয়ে ডাটাবেসটি ইনস্ট্যানশিয়েট করি। যেহেতু আমরা একটি আলাদা ডাটাবেস এবং একজন ইউজার তৈরি করেছি, তাই চলুন 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 কমান্ড আলাদাভাবে কার্যকর করেছে।

টাস্ক ৩: ব্যাকএন্ড, যাত্রা শুরু! (ক্লাউড রান-এ ডেপ্লয় করা হচ্ছে)

এবার আমাদের ব্যাকএন্ডের কাজ শুরু করার পালা! আমরা জেমিনিকে ব্যাকএন্ড ফোল্ডারটি ক্লাউড রানে ডেপ্লয় করতে বলব এবং ডেটাবেসের গোপন পাথটি দিয়ে দেব।

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

জেমিনি আপনার কোড প্যাকেজ করে একটি কন্টেইনার ইমেজ তৈরি করবে এবং ক্লাউড রান-এ ডেপ্লয় করবে। কাজটি হয়ে গেলে, যাতে কয়েক মিনিট সময় লাগতে পারে, আপনি আপনার নতুন ব্যাকএন্ড সার্ভিসের জন্য একটি ইউআরএল পাবেন। ইউআরএলটি হাতের কাছে রাখুন!

f3330321e52c98e9.png

কাজ ৪: চূড়ান্ত পর্যায় (ফ্রন্টএন্ড কনফিগার ও ডেপ্লয় করা)

আমাদের ফ্রন্টএন্ড হলো আমাদের অ্যাপ্লিকেশনের পরিচিত মুখের মতো। ব্যাকএন্ডকে কোথায় খুঁজে পাওয়া যাবে, তা তার জানা প্রয়োজন। চলুন, তাকে বলে দিই কোথায় যেতে হবে।

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

পর্ব ৫: মহা উন্মোচন!

এই তো এসে গেছে! আসল মুহূর্ত! আপনার কুইকপোল-এফই (quickpoll-fe) পরিষেবার ইউআরএলটি নিন এবং আপনার ওয়েব ব্রাউজারে খুলুন।

আপনি আপনার কুইকপোল অ্যাপ্লিকেশনটি চালু এবং ব্যবহারের জন্য প্রস্তুত দেখতে পাবেন! এগিয়ে যান, একটি পোল তৈরি করুন, ভোট দিন এবং রিয়েল-টাইমে ফলাফল আপডেট হতে দেখুন।

আপনি পেরেছেন! আপনি আপনার লোকাল মেশিন থেকে একটি প্রজেক্ট নিয়ে সেটিকে গুগল ক্লাউডে জীবন্ত করে তুলেছেন। আর এই পুরো কাজটিই আপনি করেছেন আপনার টার্মিনালের আরামদায়ক পরিবেশ থেকে, আপনার বিশ্বস্ত সঙ্গী জেমিনি সিএলআই-এর সাহায্যে।

একে বলে কর্মদক্ষতা!

৬. ডেভেলপারদের জন্য - ডেভেলপমেন্ট লাইফসাইকেলকে ত্বরান্বিত করা

8feb670e686f4038.png

ঠিক আছে, ডেভেলপারগণ, আসল মজাটা এবার শুরু হচ্ছে! আমরা একটি প্রজেক্ট নিয়ে আলোচনা করেছি, কিন্তু এখন এটি তৈরি করার পালা। আমি আপনাদের দেখাবো কিভাবে জেমিনি আপনার সেরা কোডিং পার্টনার হতে পারে, যা আপনাকে একটি সাধারণ ধারণা থেকে প্রোডাকশন-রেডি কোড তৈরি করতে সাহায্য করবে, এতটাই দ্রুত যে একটি কাঠবিড়ালিও বাদাম খুঁজে পায় না!

ধারণা থেকে কোড পর্যন্ত

সাধারণ ডেভেলপমেন্ট চক্রটির কথা ভাবুন। এটা শুধু কোড লেখাই নয়, তাই না? এর মধ্যে রয়েছে স্কাফোল্ডিং, এরর হ্যান্ডলিং যোগ করা, রিফ্যাক্টরিং এবং টেস্ট লেখা। জেমিনি এই সব কিছুতেই সাহায্য করতে পারে!

গতানুগতিক ও পুনরাবৃত্তিমূলক কাজ: আর কপি-পেস্ট নয়!

ঠিক আছে, আপনার অ্যাপ্লিকেশনের মৌলিক কার্যকারিতা তৈরি হয়ে গেছে। এখন আপনাকে লগিং যোগ করতে হবে এবং সম্ভাব্য ত্রুটিগুলো সামলাতে হবে, তাই না? এর জন্য সাধারণত বারবার try...except ব্লক ব্যবহার করতে হয়। কিন্তু আর নয়! চলুন, Gemini CLI-কে কোড বিশ্লেষণ করতে এবং এরর লগিং ও এক্সেপশন হ্যান্ডলিং-এর জন্য সেরা পদ্ধতির সুপারিশ করতে বলে শুরু করা যাক:

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

3a132d7bbf57bf67.png

জেমিনি সিএলআই বিদ্যমান ফাইলটি বিশ্লেষণ করে কিছু সেরা অনুশীলনমূলক সুপারিশ প্রদান করবে। এটিকে এমন একজন বিশেষজ্ঞ সহকারী হিসেবে ভাবুন, যা আপনাকে নিজে থেকে এই বিষয়গুলো নিয়ে গবেষণা করার সময় বাঁচিয়ে দেবে।

এখন, এটিকে আপনার জন্য এই সুপারিশগুলো বাস্তবায়ন করতে বলুন:

please go ahead and implement these in the existing app

আপনার ক্ষেত্রে প্রকৃত আউটপুট ভিন্ন হতে পারে, কিন্তু শেষে আপনি এর করা পরিবর্তনগুলোর বিস্তারিত দেখতে পাবেন। উদাহরণস্বরূপ, নিচের স্ক্রিনশটে আপনি দেখতে পাচ্ছেন যে, এটি JSON-ফরম্যাটের লগ তৈরি করার জন্য structlog যোগ করেছে, কেন্দ্রীভূত এক্সেপশন হ্যান্ডলিং বাস্তবায়ন করেছে এবং রিকোয়েস্ট রেসপন্স লগ করার পদ্ধতি উন্নত করেছে। ভাবুন তো, আপনি কত টাইপিংয়ের শ্রম বাঁচিয়ে ফেললেন!

7fcd0153f88740ce.png

রিফ্যাক্টরিং: আপনার ব্যক্তিগত কোড পর্যালোচক

আমরা সবাই পরিচ্ছন্ন ও কার্যকর কোড লিখতে চাই। কিন্তু কখনও কখনও আমাদের তাড়া থাকে। জেমিনি আপনার ব্যক্তিগত কোড রিভিউয়ার হিসেবে কাজ করতে পারে। আপনি একে এই ধরনের প্রশ্ন করতে পারেন:

please perform a comprehensive code review for best practices and security

e5482012a524210e.png

32039b0638d1efd.png

জেমিনি ভাষা-নির্দিষ্ট সেরা অনুশীলনগুলো বোঝে। আবারও বলছি, আপনার ক্ষেত্রে প্রকৃত আউটপুট উপরের স্ক্রিনশটগুলোর থেকে ভিন্ন হতে পারে, কিন্তু আপনি যদি আউটপুটটি পড়েন, তবে কোডটি বিশ্লেষণ করার জন্য জেমিনি সিএলআই যে কতটা সূক্ষ্মভাবে কাজ করেছে তা উপলব্ধি করতে পারবেন। এটি আপনাকে একই সাথে শিখতে এবং আপনার কোড উন্নত করতে সাহায্য করে!

টেস্ট তৈরি: সেরা অংশ!

এটা আমার সবচেয়ে পছন্দের কৌশল! আমরা সবাই জানি যে আমাদের টেস্ট লেখা উচিত , কিন্তু এটা বেশ ক্লান্তিকর হতে পারে, বিশেষ করে যখন কোনো কিছু মক করতে হয়। আচ্ছা, এটা দেখুন। আপনি শুধু জিজ্ঞাসা করতে পারেন:

Add a test suite to this application

d7475f5ca8c9d99d.png

ac55b84b842187b.png

3653819afe847cf3.png

জেমিনি আপনার ফাংশনটি বিশ্লেষণ করবে, এর ইনপুট ও আউটপুট শনাক্ত করবে এবং এর নির্ভরতাগুলো খুঁজে বের করবে। এরপর এটি একটি 'হ্যাপি পাথ' এবং সম্ভবত একটি এরর কন্ডিশনসহ বেশ কয়েকটি টেস্ট কেস সম্বলিত একটি সম্পূর্ণ test_main.py ফাইল তৈরি করবে। এটি উৎপাদনশীলতা ব্যাপকভাবে বাড়িয়ে দেয়!

পরীক্ষাগুলো চালান! (আপনার জন্য একটি চ্যালেঞ্জিং কাজ)

এবার আসল মজা শুরু হচ্ছে! এই অংশটি আমি আপনার জন্য একটি চ্যালেঞ্জ হিসেবে রেখে যাচ্ছি, যা আপনি নিজে থেকে অন্বেষণ করবেন। Gemini CLI যে টেস্ট কেসগুলো তৈরি করেছে, সেগুলো চালানোর জন্য আপনি নির্দ্বিধায় নির্দেশ দিতে পারেন। তারপর, শুধু আরাম করে বসে জাদুর মতো ঘটনাটি ঘটতে দেখুন!

৭. লোকালহোস্টের বাইরে: গিটহাবের সাথে একীকরণ

d2664a4c173f1d6.png

আমরা আমাদের লোকাল মেশিনে, আমাদের নিজস্ব ছোট্ট জগতে কিছু অসাধারণ কাজ করেছি। কিন্তু ক্লাউডের আসল শক্তি হলো সহযোগিতা এবং সংযোগ! এখন সময় হয়েছে উড়াল দেওয়ার এবং দেখার যে, ডেভেলপার জগতের সবচেয়ে বড় বৃক্ষ গিটহাব-কে দিয়ে শুরু করে জেমিনি কীভাবে বৃহত্তর বিশ্বের সাথে সংযোগ স্থাপন করতে পারে!

ধারণা: আপনার সমন্বিত ডেভঅপস সহকারী

এখন পর্যন্ত, আমরা জেমিনিকে একটি স্থানীয় কোডিং সঙ্গী হিসেবে ব্যবহার করে এসেছি। এখন, আমরা এটিকে একটি পূর্ণাঙ্গ ইন্টিগ্রেটেড ডেভঅপস অ্যাসিস্ট্যান্ট -এ আপগ্রেড করতে যাচ্ছি। এই সবকিছু সম্ভব হয়েছে মডেল কনটেক্সট প্রোটোকল (MCP) ইন্টিগ্রেশনের কল্যাণে। নামটি শুনতে আকর্ষণীয় হলেও, এর সহজ অর্থ হলো জেমিনি আপনার হয়ে অন্যান্য সার্ভিসের সাথে নিরাপদে যোগাযোগ করতে পারে, এবং আমরা সর্বপ্রথম যে সার্ভিসটি আয়ত্ত করতে যাচ্ছি তা হলো গিটহাব।

ভেবে দেখুন। একটি পুল রিকোয়েস্ট চেক করতে, একটি ইস্যু তৈরি করতে, বা গিটহাবের কোনো রিপোজিটরি ব্রাউজ করতে আপনাকে কতবার আপনার টার্মিনাল ছাড়তে হয়? এতে তো আরও বেশি কনটেক্সট সুইচিং হয়! github টুলসেটের সাহায্যে, আপনি এই সবকিছু এখানেই করতে পারেন। এটি জেমিনিকে গিটহাবের একটি নেটিভ ইন্টারফেসে পরিণত করে।

অফিসিয়াল গিটহাব এমসিপি সার্ভার ডকুমেন্টেশনে এর উপলব্ধ টুলস এবং কনফিগারেশন অপশনগুলো সম্পর্কে বিস্তারিত নির্দেশনা দেওয়া আছে। আপনি লোকাল বা রিমোট অপারেশনের মধ্যে যেকোনো একটি বেছে নিতে পারেন, কারণ জেমিনি সিএলআই উভয় ধরনের রিমোট এমসিপি সার্ভারকেই সম্পূর্ণরূপে সমর্থন করে।

এই টিউটোরিয়ালটি আপনাকে গিটহাবের জন্য রিমোট এমসিপি সার্ভার অপশনটি সেট আপ করার পদ্ধতি ধাপে ধাপে দেখাবে। প্রথমেই, আপনার গিটহাব থেকে একটি পার্সোনাল অ্যাক্সেস টোকেন (PAT) প্রয়োজন হবে।

একবার আপনার PAT পেয়ে গেলে, আপনার settings.json ফাইলে MCP Server অবজেক্টটি যোগ করার সময় এসেছে। আমার সম্পূর্ণ 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-এর ব্যবহারযোগ্য শক্তিশালী টুলগুলোর সম্ভার তুলে ধরে।

cf9cab5f70ca1fc2.png

কী কমান্ডের প্রদর্শনী

মিথুন রাশি বিশেষভাবে গিটহাবের জন্য একগুচ্ছ নতুন সুপারপাওয়ার নিয়ে আসে। এখানে আমার পছন্দের কয়েকটি দেওয়া হলো:

  • github.list_repositories : ব্রাউজার না খুলেই আপনার অর্গানাইজেশনের সমস্ত রিপোজিটরি দেখতে চান? এই টুলটিই আপনার জন্য! শুধু বলুন, 'আমার অর্গের সমস্ত রিপোজিটরি তালিকাভুক্ত করুন।'
  • github.create_issue : কোনো বাগ খুঁজে পেয়েছেন? ইস্যু তৈরি করতে উইন্ডো বদলানোর দরকার নেই। আপনি শুধু জেমিনিকে বলতে পারেন, ' sample-flask-app রিপোতে "Fix the login bug" শিরোনামে এবং এই বিবরণসহ একটি ইস্যু তৈরি করুন...' এবং সাথে সাথেই ইস্যুটি তৈরি হয়ে যাবে।
  • github.get_pull_request : কোনো PR-এর অবস্থা জানতে চান? আপনি বলতে পারেন, ' sample-flask-app রিপো-তে থাকা ৪২ নম্বর PR-এর বিস্তারিত তথ্য আমাকে দেখাও।' Gemini স্বয়ংক্রিয়ভাবে এর টাইটেল, ডেসক্রিপশন, স্ট্যাটাস এবং রিভিউয়ারদের তথ্য সংগ্রহ করে আনবে।
  • github.get_file_contents : এটা দারুণ একটা ফিচার। এর মাধ্যমে আপনি প্রথমে ক্লোন না করেই একটি রিমোট রিপোজিটরি থেকে ফাইল পড়তে পারবেন! আপনার লোকালি নেই এমন কোনো প্রজেক্টের কনফিগারেশন ফাইল বা README দ্রুত চেক করার জন্য এটি খুবই কার্যকর।

৮. গিটহাব অন্বেষণ

7e66f28519488019.png

অনেক কথা হলো, এবার কাজে নামা যাক! আমরা আমাদের নতুন গিটহাব দক্ষতা ব্যবহার করে, নিজেদের টার্মিনালের আরামদায়ক পরিবেশ থেকেই একটি অর্গানাইজেশন এবং একটি প্রজেক্ট ঘুরে দেখব।

উদ্দেশ্য : জেমিনি ব্যবহার করে গিটহাবে হোস্ট করা একটি প্রজেক্ট অন্বেষণ ও অনুধাবন করা।

প্রেক্ষাপট : আপনাকে গিটহাবের এমন একটি প্রজেক্টের সাথে পরিচিত হতে হবে, যেটিতে আপনি আগে কাজ করেননি।

কাজ ১: একটি প্রতিষ্ঠানে রিপোজিটরিগুলোর তালিকা তৈরি করুন

প্রথমে, চলুন একটি গিটহাব অর্গানাইজেশনের সমস্ত প্রজেক্ট দেখে নেওয়া যাক। এই ল্যাবের জন্য, আপনি আপনার নিজের গিটহাব ইউজারনেম অথবা আপনার অন্তর্ভুক্ত কোনো অর্গানাইজেশন ব্যবহার করতে পারেন। চলুন জেমিনিকে সেগুলোর একটি তালিকা তৈরি করতে বলি।

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

(মনে রাখবেন [your-org-or-username] -এর জায়গায় আপনার আসল তথ্য বসাতে হবে!) জেমিনি github.list_repositories টুলটি ব্যবহার করে আপনাকে সমস্ত প্রোজেক্টের একটি তালিকা দেখাবে। চমৎকার!

কাজ ২: একটি নির্দিষ্ট রিপোজিটরি খুঁজুন

ঠিক আছে, আপনি রিপোজিটরিগুলোর একটি তালিকা দেখতে পাবেন। এখন, একজন সত্যিকারের ডেভেলপারের মতোই, আপনাকে সেই তালিকাটি ভালোভাবে দেখে আপনার পছন্দের প্রজেক্টটি খুঁজে বের করতে হবে। আমাদের ল্যাবের জন্য, ধরা যাক আমরা আগে ক্লোন করা quickpoll রিপোজিটরিটি খুঁজছি। এই অংশের জন্য আপনার কোনো কমান্ডের প্রয়োজন নেই—শুধু আগের ধাপের আউটপুটটি পড়ুন এবং রিপোটি খুঁজে বের করুন!

কাজ ৩: খোলা পুল অনুরোধগুলির তালিকা তৈরি করুন

এখন যেহেতু আমরা আমাদের টার্গেট রিপোজিটরিটি চিহ্নিত করে ফেলেছি, চলুন দেখি সেটির কী অবস্থা। কোনো ওপেন পুল রিকোয়েস্ট আছে কি? চলুন জিজ্ঞাসা করা যাক:

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

জেমিনি github.list_pull_requests টুলটি ব্যবহার করবে এবং open স্টেট অনুযায়ী ফিল্টার করবে। এরপর এটি যেকোনো ওপেন পিআর (PR)-এর একটি তালিকা দেখাবে, যেখানে পিআর নম্বর, টাইটেল এবং কে এটি তৈরি করেছে তা উল্লেখ থাকবে। এর মাধ্যমে আপনি প্রজেক্টটির সক্রিয় ডেভেলপমেন্ট সম্পর্কে তাৎক্ষণিকভাবে ধারণা পাবেন। আপনি যে রিপোজিটরিতে সক্রিয়ভাবে অবদান রাখছেন, সেটির ক্ষেত্রে এটি চেষ্টা করে ফলাফল যাচাই করতে পারেন।

38aecd94347e633c.png

কাজ ৪: একটি পুল রিকোয়েস্ট তদন্ত করুন

ধরা যাক, ওই তালিকায় একটি আকর্ষণীয় PR আছে। আমরা এটি সম্পর্কে আরও জানতে চাই! আমরা এর বিবরণ এবং কোন ফাইলগুলো পরিবর্তন করা হয়েছে তা দেখতে চাই। তালিকা থেকে একটি PR নম্বর বেছে নিন (যদি কোনোটি না থাকে, আপনি এটি এড়িয়ে যেতে পারেন, কিন্তু ধরা যাক একটি আছে!)।

Show me the details and files changed in PR number 1 in the `quickpoll` repo.

এটি জেমিনির জন্য একটি বহু-ধাপের কাজের চমৎকার উদাহরণ! প্রথমে, এটি সম্ভবত github.get_pull_request ব্যবহার করে মূল বিবরণগুলো—যেমন শিরোনাম, মূল অংশ, লেখক, ইত্যাদি—সংগ্রহ করবে। তারপর, ফাইলের পরিবর্তনগুলো পাওয়ার জন্য, এটি github.get_pull_request_files দ্বিতীয় একটি টুল ব্যবহার করবে। এরপর এটি এই সমস্ত তথ্য একত্রিত করে আপনার জন্য একটি সুন্দর ও পরিচ্ছন্ন সারসংক্ষেপ তৈরি করবে। আপনি এইমাত্র আপনার টার্মিনাল থেকে বের না হয়েই একটি পিআর (PR) পর্যালোচনা করলেন! এটা কতই না আশ্চর্যজনক, তাই না?!

৯. পিআরডি থেকে প্রাথমিক প্রতিশ্রুতি পর্যন্ত

bbaad74efa344d07.png

আপনি অন্বেষণ করতে, নির্মাণ করতে এবং পরীক্ষা করতে শিখেছেন। এখন, আমরা এই সবকিছুকে একটি বাস্তব পরিস্থিতিতে একত্রিত করতে যাচ্ছি। এটাই সেই মুহূর্ত যখন আমরা একটি পরিকল্পনাকে পণ্যে পরিণত করি। আমরা একটি প্রোডাক্ট রিকোয়ারমেন্টস ডকুমেন্ট (PRD) থেকে শুরু করে আমাদের প্রথম কমিট পর্যন্ত যাব। চলুন, অসাধারণ কিছু তৈরি করি!

উদ্দেশ্য : স্থানীয় ও দূরবর্তী প্রেক্ষাপটের সমন্বয়ে একটি বাস্তব উন্নয়নমূলক কাজ শুরু থেকে শেষ পর্যন্ত অনুকরণ করা।

দৃশ্যকল্প : আপনাকে একটি নতুন ফিচারের দায়িত্ব দেওয়া হয়েছে! প্রজেক্টটির গিটহাব রিপোজিটরির ভেতরে একটি PRD ফাইলে এর প্রয়োজনীয়তাগুলো আপনার জন্য অপেক্ষা করছে।

কাজ ১: বুঝুন - পিআরডি পড়ুন

এটি সবচেয়ে গুরুত্বপূর্ণ ধাপ! এক লাইন কোড লেখার কথা ভাবার আগেই, আপনাকে অবশ্যই পরিকল্পনাটি ভালোভাবে বুঝতে হবে। আমাদের নতুন ফিচারের প্রয়োজনীয়তাগুলো prd/NEW_FEATURE.md ফাইলটির মধ্যে রয়েছে। চলুন, ফাইলটি খুলে দেখা যাক এর ভেতরে কী আছে।

explain the requirements mentioned in prd/NEW_FEATURE.md

Gemini CLI, PRD-এর বিষয়বস্তু দেখানোর জন্য read_file ব্যবহার করবে। চলুন দেখে নেওয়া যাক! এটি নতুন ফিচারটির রূপরেখা দেবে: ব্যবহারকারীদের জন্য সক্রিয় পোল তালিকা ম্যানুয়ালি আপডেট করার একটি রিফ্রেশ বাটন। সর্বদা প্রথমে ব্লুপ্রিন্টটি দেখে নিন!

b07e95a5977e927d.png

কাজ ২: কোড - প্রয়োজনীয়তাকে বাস্তবে রূপদান

এটাই সেই জাদুকরী মুহূর্ত! আমরা PRD থেকে প্রয়োজনীয়তাগুলো নেব এবং জেমিনিকে আমাদের জন্য কোড লিখতে বলব। আসুন আমরা সুনির্দিষ্টভাবে বলি যে আমরা ঠিক কী চাই।

Implement the changes as per the PRD

জেমিনি সিএলআই সক্রিয় হয়ে উঠবে, এবং কিছুক্ষণ পরেই আপনি অনেকটা এইরকম একটি আউটপুট দেখতে পাবেন। আমাদের ঝকঝকে নতুন কোডটি এখন একটি আরামদায়ক ঠিকানা পেয়েছে!

aff664dee6796f8b.png

কাজ ৩: আপনার পরিবর্তনগুলো যাচাই করুন

আমরা নতুন কোড দিয়ে একটি নতুন ফাইল তৈরি করেছি। এই ল্যাবের শেষ ধাপ হলো ক্লাউড রান-এ পরিবর্তনটি ডেপ্লয় করা এবং যাচাই করা।

let's deploy the changes made to frontend to Cloud Run. The existing service on Cloud Run is quickpoll-fe in us-central1.

লক্ষ্য করুন, সেই প্রম্পটটি অতিরিক্ত বিবরণ প্রদান করেছে, যেমন বিদ্যমান ক্লাউড রান পরিষেবার নাম এবং এর ডেপ্লয়মেন্ট অঞ্চল। সুনির্দিষ্ট হলে সময় বাঁচানো যায়, যদিও আপনি কোনো বিবরণ বাদ দিলে জেমিনি সিএলআই সর্বদা আপনাকে তা জানাতে বলবে।

আপনার আপডেট করা ক্লাউড রান পরিষেবাতে কোনো ত্রুটি দেখা দিলে, কোডটি ডিবাগ ও সংশোধন করতে কেবল জেমিনি সিএলআই (Gemini CLI) চালু করুন। মনে রাখবেন, এটি আপনার অতি শক্তিশালী সঙ্গী!

১০. অভিনন্দন

393fa778d8ee9f18.png

এবং এখানেই শেষ! আপনি এইমাত্র একটি সম্পূর্ণ ডেভেলপমেন্ট সাইকেল সম্পন্ন করেছেন। আপনি একটি রিকোয়ারমেন্ট ডকুমেন্ট থেকে একটি নতুন ফিচার তৈরি করেছেন, যা কমিট এবং পুশ করার জন্য প্রস্তুত। আপনি লোকাল কনটেক্সট, রিমোট কনটেক্সট, ফাইল সিস্টেম অপারেশন এবং কোড জেনারেশনকে একত্রিত করেছেন। আপনি শুধু একজন ডেভেলপার নন; আপনি একজন অত্যন্ত কর্মঠ ক্লাউড আর্কিটেক্ট! অভিনন্দন!

রেফারেন্স নথি