Project IDX と Gemini API を使って Go アプリケーションを開発する

12月 18, 2024
Suzy Mueller Software Engineer
Nooras Saba Engineering Manager

2024 年 6 月に公開された Project IDX は、クラウドでフルスタック アプリを開発できる AI 支援型ワークスペースです。さまざまなフレームワーク、言語、サービスがサポートされており、Google プロダクトと連携して開発ワークフローを効率化できます。

これを使って Go アプリケーションを開発する方法を、数分で説明しましょう。ここでは、Project IDX で Go 開発環境を設定し、最初のサーバー アプリケーションを作成します。さっそく IDX で Go 開発環境を設定し、簡単な Hello World サーバーを作ってみましょう。

IDX では、いくつかの方法でワークスペースを作成することができます。たとえば、GitHub リポジトリをインポートしたり、新しい空のワークスペースをゼロから作成したり、事前に設定されたテンプレートを使用したりできます。まずはゼロから始める方法を説明し、次にテンプレートを紹介します。


スタートガイド

このセクションでは、IDX で環境を設定する方法と、基本的な Hello World サーバーを作成する方法について説明します。

まず、idx.google.com/new/blank から、IDX に新しい空のプロジェクトを作ります。このプロジェクトには、README とデフォルトの dev.nix が含まれています。


環境のカスタマイズ

環境設定は、nix 環境設定でカスタマイズできます。IDX の Go ワークスペースの最小構成に、Go の nix パッケージを追加し、Go 拡張機能をインストールします。

.idx/dev.nix を更新し、Go の nix パッケージと Go 拡張機能を追加します。

{ pkgs, ... }: {
  packages = [
    pkgs.go
  ];
 
  idx = {
    extensions = [
      "golang.go"
    ];
  };
}

Rebuild your environment to allow these changes to take effect.


Write Go code

Now that the workspace is set up for Go code development, we can start writing our Go server.

First, let's initialize the module that will contain our Go code. You can do this by running the > Go: Initialize go.mod provided by the Go extension from the Command Palette, or by running go mod init from the command line.

$ go mod init github.com/myorg/helloWorld

Let’s create a main.go with a simple server that returns “Hello, World!"

package main
 
import (
	"fmt"
	"log"
	"net/http"
	"os"
)
 
func main() {
	log.Print("starting server...")
	http.HandleFunc("/", handler)
 
	// Determine port for HTTP service.
	port := os.Getenv("PORT")
	if port == "" {
		port = "3000"
		log.Printf("defaulting to port %s", port)
	}
 
	// Start HTTP server.
	log.Printf("listening on port %s", port)
	if err := http.ListenAndServe(":"+port, nil); err != nil {
		log.Fatal(err)
	}
}
 
func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprint(w, "<!DOCTYPE html>\n")
	fmt.Fprint(w, "Hello, World!\n")
}

Preview in IDX

Now that we have a server that can listen to requests, let’s test it out by creating a preview.

To .idx/dev.nix, add the web preview configuration:

idx = {
      previews = {
      enable = true;
      previews = {
          web = {
          command = ["go" "run" "main.go"];
          manager = "web";
          env = {
            # Environment variables to set for your server
            PORT = "$PORT";
          };
        };
      };
    };
  };

Rebuild the environment again to see the web preview. The preview can also be opened from the Command Palette using > Project IDX: Show Web Preview.

Show Web Preview in Project IDX

Explore Go Templates in IDX

To start quickly, we are providing you with ready to use templates that include a pre-configured environment with all the tools and the libraries needed.

Start with one of the Go backend server templates or start building LLM applications with the Go and Gemini template.

Gemini with Go template is integrated with Gemini API to leverage the power of AI. Plug in your Gemini API key to get going.

Code editor displays project files and a web page titled "Baking with Gemini"  with images of baked goods and a prompt to provide a recipe in IDX