Gemini CLI'ya dair ayrıntılı inceleme

1. Giriş

be8ebdfe42ca39ac.png

Merhaba, Adım Sparky! Katıldığınız için çok teşekkür ederiz. Bugün burada olmak için us-central1 bölgesindeki bir GKE kümesinden geldim. Bu codelab'e hoş geldiniz.

Tüm hayatımı Google Cloud'un veri akışlarında koşuşturarak geçirdim ve her şeyi gördüm. Sizlerin, mimarların ve mühendislerin harika şeyler inşa ettiğini gördüm. Ama dikenli çalılarda da takıldığını gördüm. Ne demek istediğimi biliyorsunuz. GKE'de bir pod'da hata ayıklarken bağlam değiştirme hissi. kubectl logs, düğümün durumunu kontrol etmek için GCP konsolu, dağıtılan kaynak koduna bakmak için IDE'niz ve pod yaşam döngüsü kancalarıyla ilgili resmi Kubernetes belgelerini içeren bir tarayıcı sekmesi arasında geçiş yapıyorsunuz. Her atlama, odaklanmayı kesintiye uğratır.

Karmaşık araçlar da var. gcloud, kubectl, terraform... her biri kendi DSL'sine ve bir sürü işarete sahip. Bu durum, sürekli belge arayışına yol açar. İhtiyacınız olan verileri elde etmek için doğru --filter ve --format işaretleri kombinasyonuna sahip mükemmel gcloud komutunu ararsınız. Bu, milyonlarca ağacın bulunduğu bir ormanda belirli bir fındığı bulmaya çalışmaya benzer. Tekrarlanan görevler konusuna hiç girmeyelim. Yeni bir Python hizmeti için aynı Dockerfile ve cloudbuild.yaml kodunu o kadar çok kez yazdığını gördüm ki kodda muhtemelen deja vu vardır.

Size daha iyi bir yol göstermek için buradayım. Ormandaki gizli bir yol. Gemini CLI'nin amacı da budur.

Gemini CLI nedir?

Peki, bu sihirli kısayol nedir?

Gemini CLI'yı, terminalinizde kişisel bulut arkadaşınız olarak düşünebilirsiniz. Bu bir sohbet, bir ortaklık! Bağlama duyarlıdır. Bu, yalnızca dinlemediği, aynı zamanda anladığı anlamına gelir. Dosyalarınızı okuyabilir, projenizin kurallarını (ör. sekmeler mi yoksa boşluklar mı kullandığınız) öğrenebilir ve ne yapmaya çalıştığınızı anlayabilir. Bu, toplamaya çalıştığınız meşe palamutlarının kokusunu alabilmeye benzer.

Üst Düzey Mimari (İşleyiş şekline göz atalım)

Peki, tüm bu süreç nasıl işler? Bu özellik, uyum içinde çalışan birkaç harika şeyin birleşimidir:

  1. Güçlü bir dil modeli: Bu, beynimizdir. Bu model, Google tarafından eğitilmiş büyük ve çok formatlı bir modeldir. "Çok formatlı" ifadesi, bu modelin yalnızca metni değil, kodun yapısını ve anlamını da anladığı anlamına gelir. Bu sayede, yazılımınızı sadece okumakla kalmaz, yazılımınız hakkında akıl yürütebilir.
  2. Yerel Bağlamınız: Bu çok önemlidir. Gemini KSA, yerel makinenizde kullanıcı hesabınızla aynı izinlere sahip bir işlem olarak çalışır. Bu nedenle, projeye özel yardım sağlamak için dosya sisteminize erişebilir. Kodunuz hakkında tahminde bulunan uzak bir bulut hizmeti değil, tam da yanınızda.
  3. Araç Ekosistemi: Modelin dünyayla etkileşim kurma şeklidir. Çağırabileceği iyi tanımlanmış bir işlev grubu vardır (ör. read_file veya run_shell_command). Bunu güvenli bir API olarak düşünebilirsiniz. Model, ne yapacağına ve hangi aracı kullanacağına karar verir, ardından bunu yürütmek için bir tool_code bloğu oluşturur. Bu sayede eylemleri öngörülebilir ve güvenilir olur.
  4. Shell Komut Yürütme: İşte asıl sihir burada! bash -c <command> alt kabuğunda herhangi bir komutu çalıştırabilir. stdout, stderr ve exit code yakalanır. Bu çok önemli bir gelişme. Bu, Gemini CLI'nın bir komutu çalıştırabileceği, başarısız olup olmadığını kontrol edebileceği ve ardından hata mesajına göre düzeltmeyi deneyebileceği anlamına gelir.
  5. Güvenlik Ağı: En sevdiğim kısım! Bu tool_code blok yürütülmeden önce CLI istemcisi size exact komutu veya kodu gösterir ve onayınızı ister. Bu, istemci tarafında yapılan bir kontrol olduğundan sisteminize dokunulmadan önce son kararı siz verirsiniz. Kontrol her zaman sizdedir.

Bu sadece bir chatbot değil, aynı zamanda bir eylem aracıdır. Kodlama maceranızda etkin bir yardımcı.

Temel Kavram: Bildirimsel ve Zorunlu

En büyük ve en etkileyici değişiklik, bilgisayara bir şeyi nasıl yapacağını söylemekten ne istediğinizi söylemeye geçmektir.

  • Emir kipi (Eski ve Zorlu Yol): Her adımı ayrı ayrı belirtmeniz gerekir. Aracın belirli alan dilinde uzman olmanız gerekir. Şu komut gibi:
    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
    
    
    Eyvah! Şuna bakın! Makine türü, görüntü ailesi, meta veriler ve etiketlerin söz dizimini bilmeniz gerekir. Bir bölümü atlarsanız anlaşılması zor bir hata mesajı alırsınız.
  • Bildirici (Sparky Kısayolu!): İsteğinizi basit İngilizceyle söylemeniz yeterli.

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

İşte bu kadar. Gemini, isteğinizi ayrıştırır, gcloud aracının parametreleriyle eşler, her işaret için doğru söz dizimini bulur ve sizin için bu büyük ve korkutucu komutu oluşturur. Ardından, onaylamanız için size sunar. Bu araç, komut satırı işaretlerini ezberlemek yerine büyük resmi düşünmenizi sağlar.

Gemini'ın gücünü artırma: CLI uzantılarına giriş

Gemini CLI, kullanıma hazır olarak güçlü bir araç olsa da gerçek potansiyeli uzantılar aracılığıyla ortaya çıkar. Uzantılar, CLI'nin işlevselliğini artıran istemler, araçlar ve özel komutlar paketleridir. Bu sayede CLI'yi özel ihtiyaçlarınıza ve iş akışlarınıza göre uyarlayabilirsiniz.

Uzantıları bulma ve yükleme

Gemini CLI, hem Google hem de üçüncü taraf geliştiriciler tarafından oluşturulan, büyüyen bir uzantı ekosistemine sahiptir. Resmi uzantı dizinine geminicli.com/extensions adresinden göz atabilirsiniz.

Bir uzantıyı yüklemek için gemini extensions install komutunu ve uzantının Git deposunun URL'sini kullanabilirsiniz. Örneğin, resmi PostgreSQL için Cloud SQL uzantısını yüklemek üzere şu komutu çalıştırırsınız:

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

Tamam, yeterince konuştuk. Haydi, ellerimizi kirletip bu işi gerçekten deneyelim.

2. Başlamadan önce

86dffda616ab7a1d.png

Merhaba, geleceğin bulut sihirbazları! Sparky, hizmetinizde. Büyük maceramıza başlamadan önce atölye ortamınızın hazır olduğundan emin olmamız gerekiyor. Bunu, ormana gitmeden önce çantalarımızı doğru araçlar ve sihirli meşe palamutlarıyla doldurmaya benzetebiliriz. Beni takip edin!

Google Cloud projeniz varsa Gemini KSA önceden yüklü olarak geldiği için Google Cloud Shell'de Gemini KSA'yı kullanabilirsiniz. Alternatif olarak, özelliği yerel makinenizde ayarlamak için aşağıdaki adımları uygulayın.

1. adım: Temel Gereksinimler (Ön Koşullar)

Her iyi maceraperestin sağlam bir temele ihtiyacı vardır. Gemini CLI'yı yükleyebilmemiz için yerel makinenizde önceden ayarlamanız gereken birkaç şey var.

  1. Google Cloud SDK (gcloud): Google Cloud'un ana araç setidir. Gemini CLI de bu ailenin bir parçasıdır.
  • Yüklü olup olmadığını kontrol edin: gcloud --version komutunu çalıştırın. Sürüm numarası görüyorsanız kullanmaya hazırsınız demektir.
  • Yüklü değilse: cloud.google.com/sdk/docs/install adresindeki resmi talimatları uygulayın.
  1. Git: Uygulamalı laboratuvar deposunu klonlamak için bu araca ihtiyacımız olacak.
  • Yüklü olup olmadığını kontrol edin: git --version komutunu çalıştırın.
  • Yüklü değilse: git-scm.com/downloads adresinden indirebilirsiniz.
  1. GCP Projesi ve Kimlik Doğrulama:
  • Faturalandırmanın etkinleştirildiği bir Google Cloud projeniz olduğundan emin olun. Bu çok önemlidir.
  • Aşağıdaki komutu çalıştırarak Google Hesabınıza giriş yapın:
gcloud auth login
  • Oturum için projenizi ayarlayın. GCP Console'dan proje kimliğinizi bulun ve şu komutu çalıştırın:
gcloud config set project YOUR_PROJECT_ID

(YOUR_PROJECT_ID yerine gerçek proje kimliğinizi yazın.)

  1. Node.js 20 veya sonraki sürümü

2. adım: Sihri keşfedin (Gemini CLI'yı yükleme)

Temel bilgileri öğrendiğimize göre artık asıl konuya geçebiliriz. Gemini CLI'yı yükleyeceğiz.

npx ile anında çalıştırma

# Using npx (no installation required)
npx https://github.com/google-gemini/gemini-cli

npm ile global olarak yükleme

npm install -g @google/gemini-cli

Homebrew ile global olarak yükleme (macOS/Linux)

brew install gemini-cli

Gemini sürümünü kontrol etme

gemini --version

Sürüm numarasını görürsünüz. Bu, yüklemenin başarılı olduğunu gösterir.

3. adım: Güç verme (yapılandırma)

Gemini CLI yüklendiğine göre, ona krallığın anahtarlarını vermemiz gerekiyor. Öncelikle terminalde gemini komutunu çalıştırarak başlatın. Aşağıdaki ekranı görmeniz gerekir:

9378d804bc647191.png

Basitlik için Google Hesabınızla kimlik doğrulayabilirsiniz. Bu sayede, API anahtarı yönetmenize gerek kalmadan 1 milyon parçalık bağlam penceresi ve dakikada 60, günde 1.000 isteğe kadar destek sunan Gemini 2.5 Pro'ya erişebilirsiniz.

Belirli Gemini modellerine erişmek veya gerektiğinde daha yüksek sınırlara yükseltmek istiyorsanız kimlik doğrulama yöntemi olarak Gemini API anahtarını kullanın.

Google Projesi ve Faturalandırma Hesabı kurulumu olan Enterprise ekipleri ve üretim iş yükleri için gelişmiş güvenlik ve uyumluluk amacıyla Vertex AI'ı kullanın.

Seçtiğiniz seçeneğe bağlı olarak, kimlik doğrulama işlemini yapılandırmak için sonraki adımlar hakkında bilgi verilir. Bu seçenekler hakkında daha fazla bilgi için Gemini KSA dokümanlarına bakın.

Google Cloud'un Vertex AI platformunu kullanmayı planlıyorsanız önce ctrl+c tuşlarına iki kez basarak Gemini CLI'dan çıkın ve gerekli ortam değişkenlerini ayarlayalım.

Kimlik doğrulama yönteminizden bağımsız olarak genellikle GOOGLE_CLOUD_PROJECT ve GOOGLE_CLOUD_LOCATION değişkenlerini ayarlamanız gerekir.

Bu değişkenleri ayarlamak için:

# 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"

Şimdi Google Cloud'da oturum açalım:

gcloud auth application-default login

Önceki yöntemle kimliğinizi doğruladıktan sonra terminalde gemini komutunu çalıştırarak Gemini CLI'yi tekrar başlatın. Kimlik doğrulama seçeneklerinde Vertex AI simgesini seçtiğinizde işlem tamamlanır.

4. adım: İlham testi (Kurulumunuzu Doğrulama)

Gerçeklerle yüzleşme zamanı! Her şeyin düzgün çalıştığından emin olalım. Tüm ışıkların yeşil olduğundan emin olmak için bu komutları çalıştırın.

  1. Aşağıdaki istemi girin:
What is my current directory?

Gemini CLI, mevcut çalışma dizininizi söyleyerek yanıt vermelidir. Bu işlem, temel dil modelini ve kabuk entegrasyonunu test eder.

15a12d7b3fdd2d83.png

  1. GCP bağlantısını test etme:
list my gcs buckets

GCS paketleriniz varsa bunlar listelenir. Aksi takdirde, herhangi bir sorun olmadığı bildirilir. Bu işlem, GCP projenize doğru şekilde bağlandığını onaylar.

5. adım: Daha fazla süper güç ekleyin (Uzantıları Yükleme)

Şimdi de laboratuvarın ilerleyen aşamalarında işimize yarayacak birkaç uzantı yükleyerek Gemini CLI'nin özelliklerini geliştirelim.

Cloud Run

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

Gemini CLI Güvenliği

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

gcloud

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

PostgreSQL İçin Cloud SQL

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

Bu komutların tamamı çalıştıysa atölyeye katılmaya hazırsınız demektir. Ortamınız hazır ve üretkenliğinizi artırmaya başlayabilirsiniz. İlk laboratuvarda görüşmek üzere.

3. Temel Kavramlar ve Yerel Çalışma Alanı Etkileşimi

a7bf3a905d8e2638.png

Ellerinizi kirletmeye hazır mısınız? Şimdi de yeni Gemini araç kutunuzdaki araçlara göz atacağız. Bu araçları, bulutta keşif ve geliştirme yaparken kullandığım süper güçlerim olarak görüyorum. Şimdi bu kartların nasıl çalıştığına biraz daha yakından bakalım.

Temel Özellikler

Güçlerimi iki grupta topluyorum: neler olduğunu görmek ve gerçekten bir şeyler yapmak.

Çevrenizi Anlama (Süper Duyularım!)

Yeni bir yuva yapmaya başlamadan önce ağacı kontrol etmeniz gerekir, değil mi? Bu araçlar, arazi hakkında bilgi edinmek için kullanılır.

  • list_directory: Bu, temel "etrafı koklama" aracım. Bu, standart işletim sistemi düzeyindeki dizin listelemesinin basit bir sarmalayıcısıdır. Ancak model, src adlı bir alt dizini keşfetmeyi seçmek gibi kararlar vermek için bu yapılandırılmış çıktıyı ayrıştırabilir.
  • glob: Bu benim "meşe palamudu bulucum"! *, **, ? ve [] gibi, .gitignore gibi yerlerden bildiğiniz standart glob desenlerini kullanır. Bu nedenle, app/**/*.py kalıbını kullanarak "app dizinindeki tüm *.py dosyalarını bul" gibi bir soru sorabilirsiniz. Bu özellik, modelin analiz etmesi için belirli bir dosya grubunu toplamanın etkili bir yoludur.
  • search_file_content: Bu benim X ışını görüşüm! Aramalarında yalnızca basit dize eşleştirme değil, tam normal ifadeler (regex) kullanır. Bu özellik inanılmaz derecede güçlüdür. "POST yöntemini kullanan tüm Flask rotalarını bul" gibi karmaşık kalıpları bulmasını isteyebilirsiniz. Bu durumda app\.route\(.*methods=\['POST'\].*\) gibi bir normal ifade oluşturulabilir. Dosya yolunu, satır numarasını ve eşleşen satırı döndürerek modele ihtiyaç duyduğu tüm bağlamı sağlar.
  • read_file: İlginç bir dosya bulduğunuzda onu açmak istersiniz. read_file bu amaç için optimize edilmiştir. Dosyanın tamamını okuyabilir veya büyük dosyaları offset ve limit parametrelerini kullanarak parçalar halinde okuyabilirsiniz. Bu sayede model, zaman aşımına uğramadan çok büyük günlük dosyalarını bile verimli bir şekilde tarayabilir.

Anlamaktan Eyleme Geçme (Geliştirme Zamanı!)

Tamam, araziyi keşfettiniz. Şimdi yuvanızı kurma zamanı! Bu araçlar, değişiklik yapmanıza ve işlerinizi tamamlamanıza olanak tanır.

  • **write_file**: Sıfırdan yeni bir dosya mı oluşturmanız gerekiyor? write_file, sağladığınız içeriğin tamamını belirtilen bir yola yazan atomik bir işlemdir. Yeni modüller oluşturmak veya projenizin ihtiyaçlarına göre sıfırdan Dockerfile oluşturmak için idealdir.
  • **replace**: Bu araç, cerrahi değişiklikler için kullanılır. Bu sadece basit bir bulma ve değiştirme işlemi değildir. old_string ve new_string bilgilerinizi girin. Bu işlemin güvenli bir şekilde çalışması için old_string, dosyadan alınan benzersiz bir snippet olmalıdır. Genellikle, değiştirdiğiniz bölümden önce ve sonra birkaç satır bağlam bilgisi içerir. Bu sayede, yalnızca exact olarak istediğiniz kod parçası değiştirilir.
  • **run_shell_command**: Bu, en iyi güçlendirmedir. Belirtilen komutu bash -c <command> alt kabuğunda yürütür. Model, stdout, stderr ve exit code değerlerini geri alır. Bu, iş akışları oluşturmak için çok önemlidir. Model, terraform plan komutunu çalıştırabilir, çıkışı okuyabilir ve plan başarılı olursa (çıkış kodu 0) uygulayıp uygulamaması gerektiğini sorabilir.

The Safety Net (My Promise to You!)

Komut çalıştırmak korkutucu olabilir. Anlıyorum. Bu nedenle, güvenlik ağı çok önemlidir. Model, run_shell_command veya write_file çağrısı içeren bir tool_code bloğu oluşturduğunda Gemini CLI istemcisi bunu engeller. Yazılacak dosyanın tam içeriğini veya tam komutunu gösterir ve [y/n] istemi verir. Açıkça onaylamadığınız hiçbir şey yapılmaz. Kontrol her zaman sizdedir.

4. Projeyi Keşfetme

314faf951de66388.png

Amaç: Terminalden ayrılmadan Gemini CLI'yi kullanarak bilinmeyen bir kod tabanını anlama.

Senaryo: Yeni bir geliştiricisiniz ve bu projeye hızlı bir şekilde adapte olmanız gerekiyor.

0. Görev: Kurulum - Projeyi Klonlayın

Öncelikle kodu almamız gerekiyor. quickpoll adlı bir "ağaçta" GitHub'daki herkese açık bir depoda saklanıyor. Gemini CLI'dan bunu bizim için klonlamasını isteyelim. Bunu yapmadan önce bir çalışma dizini oluşturalım ve Gemini CLI'yı çalışma dizininden başlatalım:

mkdir workdir
cd workdir
gemini

Şimdi şu istemi yazın:

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

46c2feb0d1184db7.png

Gemini, "clone"un git clone komutunu kullanmak anlamına geldiğini anlar. Bu işlem, run_shell_command gibi bir git clone https://github.com/gauravkakad-google/quickpoll.git ile araç çağrısı oluşturur. Onayladığınızda, depo sizin için indirilir.

Şimdi ctrl+c tuşuna iki kez basarak Gemini CLI'dan çıkalım, örnek depoya gidelim ve Gemini CLI'ı tekrar başlatalım:

cd quickpoll
gemini

Mükemmel! Proje ağacına girdiğimize göre keşfetmeye başlayabiliriz.

1. görev: Projedeki tüm dosyaları listeleme

Şimdi de tüm ormanı haritalandıralım. Tüm dosyaları görmek istiyoruz. Gemini'a şunu sorun:

List all the files in the project.

Gemini, glob aracını **/* deseniyle kullanır. Bu komut, her dosyayı yinelemeli olarak listeleyerek kod tabanının tam bir manifestini oluşturur. Bu, projenin yapısını anlamak için harika bir ilk adımdır.

2. görev: "google.cloud.sql.connector" öğesini içe aktaran tüm dosyaları bulun

Tamam, merak ettim. Bu proje Google Cloud Storage ile nerede iletişim kuruyor? Dedektiflik yapalım. Şunu sorun:

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

568fdb8ff4889c5d.png

Gemini, search_file_content gücünü kullanarak bu içe aktarma ifadesini içeren dosyaları bulur. Bu işlem, odak noktanızı hemen Cloud SQL etkileşimini işleyen kod bölümleriyle sınırlandırır. Bu projede backend/main.py bulunmalıdır.

3. görev: Ana Dockerfile'ın içeriğini göster

Dockerfile görüyorum. Bu, kapsayıcımızın planıdır. İçeriye göz atalım. Şunu sormanız yeterlidir:

Show me the contents of the main Dockerfile.

e49a83b3efbcf807.png

Gemini, Dockerfile öğesini göstermek için read_file kullanır. Temel resmi (FROM), yüklenen bağımlılıkları (RUN pip install...) ve son komutu (CMD) analiz edebilirsiniz. Bu, uygulamanın çalışma zamanı ortamı hakkında bilgi verir.

4. görev: main.py dosyasının amacı nedir?

Şimdi kodun özüne bakma zamanı. Rehberimiz olarak Gemini'dan yardım isteyelim. Şunu söyleyin:

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

81d480c285285150.png

Gemini CLI'nin en iyi olduğu nokta burasıdır. Öncelikle backend/main.py tarihinde read_file aranır. Ardından, çok formatlı dil modeli Python kodunu analiz eder. Bu, yoklama uygulaması için REST API sağlayan bir FastAPI uygulaması olduğunu tanımlar. Ardından, API uç noktalarını ve işlevlerini açıklayacaktır. Bu sayede, tüm metni okuyup kendiniz çözmek zorunda kalmazsınız. Ayrıca, bu işlevlerin bazılarını ayrıntılı olarak açıklamak için ek sorular da sorabilirsiniz. Çok kullanışlı, değil mi? Hemen deneyin.

5. From Local to Live! Cloud Run ve Cloud SQL ile dağıtma

db708c2edf0036a9.png

Peki, bulut maceraperesti, bölgeyi keşfettin. Artık bulutta kendi ağaç evinizi inşa etme zamanı! Hızlı anket uygulamamızı alıp herkesin ziyaret edebileceği gerçek bir canlı web uygulaması haline getireceğiz.

Amaç: quickpoll uygulamasını, PostgreSQL için Cloud SQL arka ucuyla Cloud Run'a dağıtın.

1. görev: Verilerimiz için sağlam bir dal (Cloud SQL'i ayarlama)

Her iyi uygulamanın değerli meşe palamutlarını saklayabileceği bir yere ihtiyacı vardır. Yani veriler! PostgreSQL İçin Cloud SQL'i kullanacağız. Veritabanımız için sihirli, kendi kendine bakım yapan bir bahçe gibidir. Böylece biz de eğlenceli şeylere odaklanabiliriz.

Gemini CLI'dan veritabanımızın temelini oluşturmasını isteyelim.

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

Cloud SQL uzantısını kullanan Gemini CLI çalışmaya başlar. create_instance araç çağrısını gösterir. Onaylayabilirsiniz.

Örnek oluşturulduktan sonra şuna benzer bir çıkış alırsınız:

1378c05137bf9260.png

Yukarıdaki ortam değişkeniyle bir .env dosyası oluşturabilir ve Gemini CLI'yı yeniden başlatmadan önce bu dosyayı kaynaklayabilirsiniz. Böylece Gemini CLI, bu değişkenlere erişebilir.

Örneğimiz büyürken toprağı hazırlayalım. Uygulamamız için bir veritabanı ve kullanıcıya ihtiyacımız var.

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

Gemini CLI, sizin için veritabanı oluşturmak üzere PostgreSQL için Cloud SQL uzantısında create_database aracını kullanır.

3a0ffbf97fbc35cc.png

Şimdi de bu hesaba bakacak bir kullanıcı ekleyelim:

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

Bu sefer Gemini CLI, create_user aracını kullanacak.

562db72ed9a59d4a.png

2. görev: Gizli yol (arka ucu bağlama)

Arka uç sistemimizin, yeni veritabanımızın gizli yolunu bilmesi gerekir. Nasıl çalıştığını görmek için backend/main.py dosyasına göz atalım.

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

6592c52d634253ce.png

İşte! Gördünüz mü? Cloud SQL Python Bağlayıcısı'nı kullanır ve CLOUD_SQL_POSTGRES_INSTANCE, CLOUD_SQL_POSTGRES_USER, CLOUD_SQL_POSTGRES_PASSWORD ve CLOUD_SQL_POSTGRES_DATABASE gibi ortam değişkenlerini arar. Bunları Cloud Run hizmetimize vermemiz gerekir.

İlk olarak CLOUD_SQL_POSTGRES_INSTANCE'a ihtiyacımız var. Gizli bir el sıkışma gibidir.

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

aa539ea8798aad71.png

Birçok ayrıntı görürsünüz. Bağlantı adını bulun ve bu değeri kopyalayın. Bu, your-project-id:us-central1:quickpoll-db gibi görünür.

Şimdi uygulamayı Cloud Run'a dağıtmadan önce veritabanını gerekli tablolarla başlatalım. Ayrı bir veritabanı ve kullanıcı oluşturduğumuz için Gemini CLI'dan çıkıp daha önce oluşturduğumuz .env dosyasını yeni değerlerle güncelleyelim:

export CLOUD_SQL_POSTGRES_USER=quickpoll-user
export CLOUD_SQL_POSTGRES_PASSWORD=password-you-provided
export CLOUD_SQL_POSTGRES_DATABASE=quickpolldb

Şimdi Gemini CLI'ı yeniden başlatın ve aşağıdakileri girin:

execute backend/database.sql file on quickpolldb database as quickpolluser in quickpoll-db instance

5201cbf678dd3fc9.png

Araç execute_sql'nın tek bir çağrıda birden fazla SQL komutunun yürütülmesini desteklemediğini otomatik olarak anladı. Bu nedenle, her SQL komutunu ayrı ayrı yürütmeye devam etti.

3. görev: Arka uç, uçuşa hazır! (Cloud Run'a dağıtma)

Arka uç sistemimizin yuvadan ayrılma zamanı geldi. Gemini'a arka uç klasörünü Cloud Run'a dağıtmasını ve veritabanının gizli yolunu vermesini söyleyeceğiz.

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, kodunuzu paketler, bir container görüntüsü oluşturur ve bunu Cloud Run'a dağıtır. Bu işlem birkaç dakika sürebilir. Tamamlandığında, yepyeni arka uç hizmetiniz için bir URL alırsınız. Bu URL'yi elinizin altında bulundurun.

f3330321e52c98e9.png

4. Görev: Son Dokunuşlar (Ön Ucu Yapılandırma ve Dağıtma)

Ön uç, uygulamamızın samimi yüzü gibidir. Arka ucun nerede bulunacağını bilmesi gerekir. Nereye gideceğini söyleyelim.

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. Görev: Büyük Açılış!

İşte bu! Gerçek anı! Quickpoll-fe hizmetinizin URL'sini alın ve web tarayıcınızda açın.

QuickPoll uygulamanızın yayında ve kullanıma hazır olduğunu görürsünüz. Anket oluşturun, oy kullanın ve sonuçların anında güncellendiğini görün.

Başardınız! Yerel makinenizdeki bir projeyi Google Cloud'da hayata geçirdiniz. Tüm bunları, güvenilir yardımcınız Gemini CLI ile terminalinizin rahatlığında yaptınız.

İşte ben buna üretkenlik derim!

6. Geliştiriciler için: Geliştirme Yaşam Döngüsünü Hızlandırma

8feb670e686f4038.png

Evet geliştiriciler, asıl eğlence şimdi başlıyor. Bir projeyi inceledik. Şimdi ise oluşturma zamanı. Gemini'ın nasıl en iyi kodlama yardımcınız olabileceğini ve basit bir fikirden üretime hazır koda sincabın fındık bulmasından daha hızlı bir şekilde geçmenize nasıl yardımcı olabileceğini göstereceğim.

Fikirden Koda

Tipik geliştirme döngüsünü düşünün. Bu sadece kod yazmakla ilgili değil, değil mi? İskele oluşturma, hata işleme ekleme, yeniden düzenleme ve test yazma. Gemini tüm bu konularda yardımcı olabilir.

Hazır Metinler ve Tekrarlanan Görevler: Kopyalama-Yapıştırma İşlemlerine Son!

Temel uygulama işleviniz hazır. Şimdi de günlüğü eklemeniz ve olası hataları ele almanız gerekiyor, değil mi? Bu genellikle çok sayıda tekrarlanan try...except bloktur. Artık değil. Öncelikle Gemini CLI'dan kodu analiz etmesini ve hata günlüğü oluşturma ile istisna işleme için en iyi uygulama önerilerinde bulunmasını isteyerek başlayalım:

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

3a132d7bbf57bf67.png

Gemini CLI, mevcut dosyayı analiz edip en iyi uygulamalarla ilgili önerilerde bulunur. Bu özelliği, bu konuları kendiniz araştırmanıza gerek kalmadan size zaman kazandırabilecek bir uzman asistan olarak düşünebilirsiniz.

Şimdi de bu önerileri sizin için uygulamasını isteyelim:

please go ahead and implement these in the existing app

Gerçek çıktı sizin durumunuzda farklı olabilir ancak sonunda yaptığı değişikliklerin ayrıntılarını görmeniz gerekir. Örneğin, aşağıdaki ekran görüntüsünde, JSON biçimli günlükler oluşturmak için structlog eklendiğini, merkezi istisna işleme uygulandığını ve istek yanıtlarının kaydedilme şeklinin iyileştirildiğini görebilirsiniz. Ne kadar çok yazmaktan kurtulduğunuzu düşünün!

7fcd0153f88740ce.png

Refactoring: Kişisel Kod İnceleyiciniz

Hepimiz temiz ve verimli kod yazmak isteriz. Ancak bazen acele ederiz. Gemini'ı kişisel kod inceleme uzmanınız olarak kullanabilirsiniz. Şu gibi sorular sorabilirsiniz:

please perform a comprehensive code review for best practices and security

e5482012a524210e.png

32039b0638d1efd.png

Gemini, dile özgü en iyi uygulamaları anlar. Yine, sizin durumunuzdaki gerçek çıktı yukarıdaki ekran görüntülerinden farklı olabilir ancak çıktıyı okursanız Gemini CLI'nın kodu analiz etmek için ne kadar ayrıntılı çalıştığını anlayabilirsiniz. Bu sayede hem kodunuzu öğrenebilir hem de geliştirebilirsiniz.

Test Oluşturma: En İyi Kısım!

Bu en sevdiğim numara! Test yazmamız gerektiğini hepimiz biliyoruz ancak özellikle öğeleri taklit etmeniz gerektiğinde bu işlem sıkıcı olabilir. Şuna bir bakın. Şu soruyu sorabilirsiniz:

Add a test suite to this application

d7475f5ca8c9d99d.png

ac55b84b842187b.png

3653819afe847cf3.png

Gemini, işlevinizi analiz eder, giriş ve çıkışlarını belirler ve bağımlılıklarını tespit eder. Ardından, "happy path" (mutlu yol) ve muhtemelen bir hata durumu da dahil olmak üzere çeşitli test durumlarını içeren eksiksiz bir test_main.py dosyası oluşturur. Bu, üretkenliğinizi büyük ölçüde artırır.

Testleri Çalıştırın (Sizin İçin Bir Meydan Okuma Görevi)

İşin heyecanlı kısmı şimdi başlıyor. Bu bölümü, bağımsız olarak keşfetmeniz için bir meydan okuma olarak bırakıyorum. Gemini CLI'dan oluşturduğu test durumlarını yürütmesini isteyebilirsiniz. Ardından arkanıza yaslanıp büyülü anları izleyebilirsiniz.

7. Yerel Ana Bilgisayarın Ötesinde: GitHub ile Entegrasyon

d2664a4c173f1d6.png

Yerel makinemizde, ormanın kendi küçük köşemizde harika işler yaptık. Ancak bulutun asıl gücü ortak çalışma ve bağlantı kurmaktır. Artık uçuşa geçme ve Gemini'ın geliştirici ormanındaki en büyük ağaç olan GitHub'dan başlayarak dünyayla nasıl etkileşim kurabileceğini görme zamanı.

Kavram: Entegre DevOps Asistanınız

Şimdiye kadar Gemini'ı yerel bir kodlama arkadaşı olarak kullandık. Şimdi ise bu aracı tam teşekküllü bir Entegre DevOps Asistanı'na yükselteceğiz. Bu, Model Context Protocol (MCP) entegrasyonu sayesinde mümkün olur. Bu, Gemini'ın sizin adınıza diğer hizmetlerle güvenli bir şekilde iletişim kurabileceği anlamına gelir. İlk olarak GitHub'ı kullanmayı öğreneceğiz.

Bir düşünün. GitHub'da bir çekme isteğini kontrol etmek, sorun oluşturmak veya bir depoya göz atmak için ne sıklıkta terminalinizden ayrılmanız gerekiyor? Bu da daha fazla bağlam değiştirme anlamına gelir. github araç setiyle tüm bunları buradan yapabilirsiniz. Bu uzantı, Gemini'ı GitHub için yerel bir arayüze dönüştürür.

Resmi GitHub MCP sunucusu dokümanında, sunulan araçlar ve yapılandırma seçenekleri hakkında yeterli bilgi verilmektedir. Gemini CLI, her iki uzak MCP sunucusunu da tam olarak desteklediğinden yerel veya uzak işlem arasında seçim yapabilirsiniz.

Bu eğitim, GitHub için Uzak MCP Sunucusu seçeneğini ayarlama konusunda size yol gösterecektir. Her şeyden önce GitHub'dan kişisel erişim jetonu (PAT) almanız gerekir.

PAT'nizi aldıktan sonra MCP sunucu nesnesini settings.json dosyanıza ekleyebilirsiniz. settings.json dosyamın tamamı aşağıda gösterilmiştir ancak mcpServers nesnenizin burada gördüğünüzle eşleştiğinden emin olmanız yeterlidir:

{
  "security": {
    "auth": {
      "selectedType": "vertex-ai"
    }
  },
 "mcpServers": {
    "github": {
      "httpUrl": "https://api.githubcopilot.com/mcp/",
      "headers": {
        "Authorization": "GITHUB_PAT"
      },
      "timeout": 5000
    }
  }
}

settings.json dosyanızı GitHub MCP sunucu yapılandırmasıyla güncelledikten sonra Gemini CLI'yi yeniden başlatmanız veya /mcp refresh komutunu çalıştırmanız yeterlidir. Aşağıdaki ekran görüntüsünde, sistemimde kullanıma hazır hâle gelen GitHub MCP sunucusu gösterilmektedir. Bu sunucu, Gemini CLI'nin Model Context Protocol ile kullanabileceği güçlü araçları sergilemektedir.

cf9cab5f70ca1fc2.png

Önemli Tuş Komutlarının Gösterimi

Gemini, GitHub için özel olarak tasarlanmış yepyeni bir süper güç setiyle birlikte gelir. En sevdiklerimden bazıları:

  • github.list_repositories: Tarayıcı açmadan kuruluşunuzdaki tüm depoları görmek mi istiyorsunuz? Bu sizin aracınız! "List all the repositories in my org" (Kuruluşumdaki tüm depoları listele) diye sormanız yeterlidir.
  • github.create_issue: Bir hatayla mı karşılaştınız? Sorun oluşturmak için pencereler arasında geçiş yapmayın. Gemini'a "sample-flask-app deposunda "Giriş hatasını düzelt" başlıklı ve şu açıklamaya sahip bir sorun oluştur..." demeniz yeterlidir. İşte sorun oluşturuldu.
  • github.get_pull_request: Bir halkla ilişkiler çalışmasının durumunu mu kontrol etmek istiyorsunuz? "sample-flask-app deposundaki 42 numaralı PR'nin ayrıntılarını göster" diye sorabilirsiniz. Gemini; başlığı, açıklamayı, durumu ve incelemecileri getirir.
  • github.get_file_contents: Bu çok havalı. Önce klonlamanıza gerek kalmadan uzak bir depodaki dosyaları okuyabilirsiniz. Yerel olarak sahip olmadığınız bir projenin yapılandırma dosyasını veya README'sini hızlıca kontrol etmek için idealdir.

8. GitHub'ı Keşfetme

7e66f28519488019.png

Yeter bu kadar konuşma, haydi uçalım! Yeni GitHub özelliklerimizi kullanarak bir kuruluşu ve projeyi terminalimizden keşfedeceğiz.

Amaç: GitHub'da barındırılan bir projeyi keşfetmek ve anlamak için Gemini'ı kullanın.

Senaryo: Daha önce üzerinde çalışmadığınız bir GitHub projesine aşina olmanız gerekiyor.

1. Görev: Bir kuruluştaki depoları listeleme

Öncelikle bir GitHub kuruluşundaki tüm projeleri görelim. Bu laboratuvarda kendi GitHub kullanıcı adınızı veya üyesi olduğunuz bir kuruluşu kullanabilirsiniz. Gemini'dan bunları listelemesini isteyelim.

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

([your-org-or-username] yerine gerçek bilgilerinizi girmeyi unutmayın.) Gemini, github.list_repositories aracını kullanarak tüm projelerin listesini gösterir. Mükemmel!

2. görev: Belirli bir depoyu bulma

Tamam'ı tıkladığınızda depoların listesini görürsünüz. Şimdi, gerçek bir geliştirici gibi bu listeyi taramanız ve ilgilendiğiniz projeyi bulmanız gerekiyor. Laboratuvarımız için daha önce klonladığımız quickpoll deposunu aradığımızı varsayalım. Bu bölüm için komuta ihtiyacınız yok. Yalnızca son adımdaki çıktıyı okuyup depoyu bulun.

3. görev: Açık çekme isteklerini listeleme

Hedef depomuzu belirlediğimize göre, şimdi bu depoda neler olduğuna bakalım. Açık çekme isteği var mı? Şu soruyu soralım:

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

Gemini, github.list_pull_requests aracını kullanarak open eyaletine göre filtreleme yapacak. Ardından, açık tüm PR'leri listeleyerek PR numarasını, başlığını ve kimin oluşturduğunu gösterir. Bu, projenin aktif geliştirme sürecine anında göz atmanızı sağlar. Bu işlemi, aktif olarak katkıda bulunduğunuz bir depoda deneyebilir ve sonuçları kontrol edebilirsiniz.

38aecd94347e633c.png

4. Görev: Çekme isteğini inceleme

Bu listede ilginç bir halkla ilişkiler çalışması olduğunu varsayalım. Bu konuda daha fazla bilgi edinmek istiyoruz. Açıklamayı ve hangi dosyaların değiştirildiğini görmek istiyoruz. Listeden bir halkla ilişkiler numarası seçin (yoksa bu adımı atlayabilirsiniz ancak bir numara olduğunu varsayalım).

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

Bu, Gemini için çok adımlı bir görev örneğidir. Öncelikle başlık, gövde, yazar vb. gibi ana ayrıntıları getirmek için github.get_pull_request aracını kullanır. Ardından, dosya değişikliklerini almak için ikinci bir araç olan github.get_pull_request_files aracını kullanır. Ardından tüm bu bilgileri sizin için güzel ve net bir özet halinde birleştirir. Terminalinizden ayrılmadan bir çekme isteğini incelediniz. Bu harika değil mi?

9. PRD'den İlk Commit'e

bbaad74efa344d07.png

Keşfetmeyi, oluşturmayı ve test etmeyi öğrendiniz. Şimdi tüm bunları gerçek hayattaki bir senaryoda bir araya getireceğiz. Bu, planı ürüne dönüştürdüğümüz andır. Ürün gereksinimleri belgesinden (PRD) ilk commit'imize kadar tüm süreçleri ele alacağız. Haydi birlikte muhteşem içerikler üretelim.

Amaç: Yerel ve uzak bağlamı birleştirerek gerçek dünyadaki bir geliştirme görevini baştan sona simüle edin.

Senaryo: Size yeni bir özellik atandı. Gereksinimler, projenin GitHub deposundaki bir PRD dosyasında sizi bekliyor.

1. Görev: Anlama - Ürün gereksinimleri belgesini okuma

Bu en önemli adımdır. Tek bir satır kod yazmayı düşünmeden önce planı mutlaka anlamanız gerekir. Yeni özelliğimizin koşulları prd/NEW_FEATURE.md dosyasında yer almaktadır. Hadi açıp içinde ne olduğuna bakalım.

explain the requirements mentioned in prd/NEW_FEATURE.md

Gemini KSA, PRD'nin içeriğini göstermek için read_file işlevini kullanır. Hemen başlayın. Bu makalede, yeni özellik (kullanıcıların etkin anketler listesini manuel olarak güncelleyebileceği bir yenileme düğmesi) açıklanır. Her zaman önce planı inceleyin.

b07e95a5977e927d.png

2. görev: Kod - Gereksinimleri Gerçeğe Dönüştürme

İşte sihirli an! PRD'deki şartları alıp Gemini'dan bizim için kodu yazmasını isteyeceğiz. İsteğimizi net bir şekilde belirtelim.

Implement the changes as per the PRD

Gemini CLI harekete geçer ve kısa bir süre sonra aşağıdakine benzer bir çıkış görürsünüz. Yepyeni kodumuz artık rahat bir yuvada!

aff664dee6796f8b.png

3. görev: Değişikliklerinizi doğrulayın

Yeni kod içeren yeni bir dosya oluşturduk. Bu laboratuvarın son adımı, değişikliği Cloud Run'a dağıtmak ve doğrulamaktır.

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

Bu istemin, mevcut Cloud Run hizmeti adı ve dağıtım bölgesi gibi ek ayrıntılar sağladığını fark edin. Net olmak zamandan tasarruf etmenizi sağlar. Ancak Gemini CLI, eksik bıraktığınız ayrıntılar için her zaman istemde bulunur.

Güncellenen Cloud Run hizmetinizde bir hatayla karşılaşırsanız Gemini CLI'dan kodu ayıklamasını ve düzeltmesini isteyin. Unutmayın, bu özellik süper güçlü yardımcınızdır.

10. Tebrikler

393fa778d8ee9f18.png

Bu kadar! Tam bir geliştirme döngüsünü tamamladınız. Bir şartname belgesinden, commit edilip push edilmeye hazır yeni bir özelliğe geçtiniz. Yerel bağlam, uzak bağlam, dosya sistemi işlemleri ve kod oluşturmayı birleştirdiniz. Sadece bir geliştirici değil, süper verimli bir bulut mimarı olabilirsiniz. Tebrikler!

Referans belgeleri