🌊

Cloud Workstationsで開発をやってみて

2023/05/29に公開

初めに

こんにちは。クラウドエースバックエンドディビジョンの王です。
待望のCloud Workstationsがついに2023年5月11日に一般提供(General Availability)になりました。この記事では、私が実際にCloud Workstationsを使用して開発を行った経験について紹介します。

Cloud Workstationsとは

Cloud Workstationsの概要については下記の記事で紹介していますので、リンク先をご参照ください。
https://zenn.dev/cloud_ace/articles/925c11d6601324

実は、私は今Visual Studio Code(以下、VSCode)を使って開発を行うことが多いです。また、Stack Overflow's Developer Surveyによると、ますます多くの人がVSCodeをメインの開発IDEとして使用しています。Cloud Workstationsをブラウザで開かれたIDEはCODE-OSS(VSCodeのオープンソース版)であるということですが、ローカルのVSCodeで開発することに慣れている人もいると考えています。そのため、以下では、ローカルのVSCodeを使用してクラウドワークステーションに接続する方法を詳しく説明します。

ローカルの VSCode エディターからCloud Workstationsに接続する

はじめる前に、ワークステーションを作成し、起動していることを確認してください(まだの場合はワークステーションの使い方に参照ください)。ローカルマシンから、gcloud CLIをインストールしてください。

その後、Remote - SSH 拡張機能をローカルのVSCodeにインストールする必要があります。

installRemoteSSH

Remote - SSH 拡張機能は、開発者がVSCodeの使い慣れたインターフェースを通じてリモートサーバーや仮想マシンと直接連携することを可能にする強力なツールです。この拡張機能を使用すると、シームレスにローカル開発環境からリモート環境上のファイルを編集したり、コマンドを実行したり、アプリケーションのデバッグを行ったりすることができます。

次に、gcloud beta workstations start-tcp-tunnelコマンドを使用して、ローカルマシンからワークステーションへのSSHトンネルを開きます。これにより、ローカルプロセスがTCPトラフィックをワークステーションに転送するためのトンネルが開始されます。--local-host-portの値をローカルマシンが空いているportを入力してください。

gcloud beta workstations start-tcp-tunnel \
  --project=プロジェクトID \
  --cluster=クラスタ名 \
  --config=構成名 \
  --region=クラスタのリージョン \
  ワークステーション名 22 \
  --local-host-port=:2222

SSHトンネルを開いた後は、以下の手順に従ってCloud Workstationsホストに接続できます。VSCodeの左下の「Open a Remote Window」をクリックし、「Connect to Host」を選択して、user@localhost:$LOCAL_PORTと入力してください。$LOCAL_PORTは先ほど--local-host-portの値を書き換えてください。

installRemoteSSH
installRemoteSSH

GitHubからソースコードをクローンする

Cloud WorkstationsをローカルVSCodeに接続した後は、プロジェクトをクローンし、開発を開始することができます。Cloud WorkstationsインスタンスにはGit、gcloud CLI、そしてDockerまでもがインストールされていることに気づくでしょう。これにより、開発者は自分自身でこれらのツールをインストールする必要がなく、直接Cloud Workstations内で開発を始めることができます。これは非常に便利で、開発環境を構築するために時間を節約することができます。

また、Workstationsを使用すれば、環境構成を統一できるので、チームメンバーは同じ開発環境を共有することができます。これにより、チーム内の協力がスムーズになります。同じバージョンのツールの使用、設定の一貫性、および共通の作業フローにより、コードの共有や問題の追跡が容易になります。これにより、チームの効率性やコラボレーションの品質が向上し、プロジェクトの成功につながるでしょう。

mkdir work
cd work
git clone $YOUR_PROJECT_LINK

(もし、これがはじめてCloud WorkstationsでGitHubを使用する場合は、まずGitHubに認証を求められるはずです。)

Cloud Workstations から ほかのクラウドサービス にアクセスする

Cloud Workstationsは、開発者にクラウドベースの開発環境を提供する強力なツールです。Cloud Workstationsを使用する際の主要な利点の1つは、Virtual Private Cloud(VPC)内にあるため、より安全にクラウドリソースに簡単にアクセスできます。

例えば、Cloud SQLにアクセスする際には、ローカルのように認証情報を設定する必要がなく、VPC内でのプライベートIPを使用して直接アクセスすることができます。これにより、より安全な通信経路が確立され、外部からのアクセスを制御しやすくなります。また、同じVPC内に配置された他のクラウドサービスとの通信も高速でスムーズに行うことができます。

Cloud WorkstationsはVPC内で動作するため、デフォルトの認証情報漏洩の心配がなく、安心して利用することができます。今回、私はプロジェクトでFirestoreを使用しました。Firestoreを初期化する際、Cloud Workstationsのインスタンスで、gcloud auth application-default loginコマンドを実行し、指示に従って自分のGoogleアカウントでログインし、要求された権限を確認しアクセスを許可すると、デフォルトの認証情報を直接使用できました。また、Firestoreを初期化するのようにGoogle Cloudで初期化すると、最終的にコードをクラウドサービスにデプロイする際にコードを書き直す必要がないため、より効率的です。

// Google Cloud で初期化する
// Use the application default credentials
ctx := context.Background()
conf := &firebase.Config{ProjectID: projectID}
app, err := firebase.NewApp(ctx, conf)
if err != nil {
  log.Fatalln(err)
}

client, err := app.Firestore(ctx)
if err != nil {
  log.Fatalln(err)
}
// 各自のサーバーで初期化する
// Use a service account
ctx := context.Background()
sa := option.WithCredentialsFile("path/to/serviceAccount.json")
app, err := firebase.NewApp(ctx, nil, sa)
if err != nil {
  log.Fatalln(err)
}

client, err := app.Firestore(ctx)
if err != nil {
  log.Fatalln(err)
}

最後に

この記事では、Cloud Workstationsを使用した開発環境の構築と活用について解説しました。Cloud Workstationsを使うことで、ローカル環境とは異なる新しい開発体験を得ることができます。クラウド上での作業は、リソースへのアクセスやセキュリティの管理など、多くの面で利点をもたらします。

Cloud Workstationsを使った開発に興味がある方は、ぜひこの記事で紹介した手順やヒントを参考にしてみてください。

Discussion