5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WindowsのEclipseでGo+AppEngineの開発環境を構築

Last updated at Posted at 2016-10-31

GO言語を使ったWebサービスを開発しようと思うので、まずは開発環境の構築から。
休日にチマチマ開発して年度内のサービスインが目標です。

せっかくGo言語を使うので、動作させるサーバーはGCPのAppEngineを選択。

5年前に「lanovedia -ラノベディア-」というラノベのコミュニティサイトをAppEngine + Javaで作ったけれど、仕事が忙しくなりすぎてすぐに更新できなくなり閉鎖してしまったので反省…。
あの頃は「Spin-up時間」や「低レンテンシ」に悩まされていたけど、Goと東京リージョンの登場で完全に解決してることを期待!

開発環境としては、6年前に買ったMacBookAirか最近買ったSurfacePro4か悩んだ結果、後者を選択しました。
windowsで開発とかダサい?しかもEclipse?いやいや、結構いいことも多いよ!(たぶん)

そんなわけで、構築スタート。

環境

  • Microsoft Surface Pro4 (i5 2.4GHz, Mem 4GB)
  • OS:Windows 10 Pro
  • Go 1.7.1 (Windows/amd64)
  • Eclipse Neon 4.6.1 (for Java Developers)
  • App Engine SDK for Go v1.9.40 (64bit)
  • Python 2.7.12
  • Git for Windows v2.10.0 (64bit)
  • GAE設定済みのgoogleアカウント

事前準備

  1. Gitのインストール。 (https://git-for-windows.github.io/)
  2. Eclipseのインストール。 (https://www.eclipse.org/downloads/eclipse-packages/)

Goのインストール

GoのサイトからWindows用のmsiをダウンロード。
https://golang.org/dl/
※執筆辞典では1.7.3が最新

ダウンロードしたmsiファイルを実行しインストール。

インストール先
C:\Go

App Engine SDK for Goのインストール

GCPのサイトからAppEngine用のSDKをダウンロード。
https://cloud.google.com/appengine/docs/go/download
※執筆時点では64bit v1.9.40が最新だったのでそれを選択

Pythonの2.7が入ってない場合はそちらもインストール。
https://www.python.org/downloads/release/python-2712/
※環境変数を通し忘れないように

ダウンロードしたgo_appengine_sdk_windows_amd64-1.9.40.zipを解凍し、任意のディレクトリに配置。

筆者の配置先
C:\GCP\go_appengine

環境変数の設定

setxコマンドはcmdを管理者権限で実行していないと設定できません。

環境変数の追加
setx GOROOT "C:\Go" -m
setx GOPATH "{任意のパス。筆者はC:\works\go}" -m
setx GOBIN "%GOPATH%\bin" -m
setx GAEPATH "{gae sdkのインストール先。筆者はC:\GCP\go_appengine}" -m

setxでPATHへの追記を行う場合、追記元の変数内の変数が展開されてしまいますので、気になる方はシステム変数の環境設定画面から追記したほうがいいです。

環境変数名 説明
GOROOT GO本体のインストール先
GOPATH パッケージのソースコードとオブジェクトファイル、実行ファイル等が格納されるディレクトリ。任意のパスでOK。
GOBIN 指定しない場合は%GOPATH%/bin。上記の例だとわざわざ指定しなくてもOK。go install時の格納ディレクトリ。
GAEPATH 著者オリジナル。
PATHへの追記
setx PATH "%PATH%;%GOROOT%\bin;%GOPATH%\bin;%GAEPATH%" -m

Eclipseの設定

Eclipseを起動し、メニューのHelp > Install New Software...を選択。
Work with:に「http://goclipse.github.io/releases/ 」を入力しGoClipseをインストール。

goclipseのSS_01.PNG

Goclipseの基本設定

  1. メニューからWindow > Preferencesを選択し、GOを選択
  2. Directoryで「C\Go」を選択
  3. Use same vlaue~にチェック
  4. Also add project~にチェック

ecliseの設定_01.PNG

GoclipseのToolsの設定

Go > Toolsを選択し、gocode, guru, godefの3つ全て「Download…」を押下してDL。
※恐らくwindowsにgitが入ってる必要があります

ecliseの設定_02.PNG

プロジェクト作成

メニューからFile > New > Go Projectを選択し、適当にプロジェクトを作成。
筆者は「gae-sample」という名称で作成。

hello world (exe版)

まずは正常にビルドが通る確認も兼ねて、mainのみのhello.exeを作成。

  1. srcを右クリック。New > Folderで「hello」ディレクトリを作成。
  2. helloを右クリック。New > Fileで以下の「main.go」ファイルを作成。
  3. プロジェクトを選択し右クリック。Build Projectを実行
  4. bin配下に「hello.exe」が作られれば成功
  5. exeファイルを実行すると「hello world」と出力される
main.go
package main

import (
    "fmt"
)

func main() {
    fmt.Println("hello world")
}

ecliseの設定_03.PNG

exeの実行
cd C:\works\eclipse\workspace\gae-sample
>bin\hello.exe
hello world

hello world (GAE SDK版)

ではいよいよローカルのGAE SDK上でhello worldをしてみます。

  1. 上記のmain.goを削除(念のため)
  2. hello配下に以下の「hello.go」ファイルを作成
  3. src配下に以下の「app.yaml」ファイルを作成
hello.go
package hello

import (
    "fmt"
    "net/http"
)

func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Hello, world!")
}
app.yaml
runtime: go
api_version: go1

handlers:
- url: /.*
  script: _go_app

Eclipseで実行するための準備

まずはgoappでのデプロイをEclipseに登録します。

  1. メニューからRun > External Tools > External Tools Configurations...を選択
  2. Programをダブルクリックし、「New_configuration」を作成
  3. Nameを「Local_GAE_Build」に変更(任意)
  4. Locationに「C:\GCP\go_appengine\goapp.bat」と入力(%GAEPATH%と同じ場所)
  5. Working Directory:に「${project_loc}\src」と入力
  6. Arguments:に「serve」と入力
  7. Buildタブを押下し、「Build before lanch」のチェックを外す

ecliseの設定_04.PNG

ecliseの設定_05.PNG

Eclipseでのbuild

Eclipseで実行したいプロジェクトを選択した状態で、先ほど登録した「Local_GAE\Build」を実行。

ecliseの設定_06.PNG

Eclipseのコンソールに無事起動したログが表示されます。

http://localhost:8080 にアクセスすると「Hello, world!」が表示。

hello_01.PNG
試しにEclipse上で「Hello, world!」を「Hello, world2!」に変更すると、ちゃんとホットデプロイされました。

Eclipseでsrcを編集した際のログ
INFO     2016-10-31 23:39:54,634 module.py:402] [default] Detected file changes:
  hello\hello.go

hello_02.PNG

.batを実行しているため、Eclipse上で停止しても「バッチ ジョブを終了しますか (Y/N)?」を回避できておらず終了されていません。
タスクマネージャーからプロセスを落としてください。

python.PNG

↑誰かいい方法教えて… echo y|を付けてgoappを実行できればいいんだけどEclipseでは無理でした。

コンソールから実行する場合

Eclipseから実行する場合はこの手順は不要です。
コンソールから実行する方がgoappをオプションを調べやすいというメリットがあります。

コンソールから実行する場合
>goapp serve C:\works\eclipse\workspace\gae-sample\src

こんな感じのログが出ます

デプロイ時のログ
>goapp serve C:\works\eclipse\workspace\gae-sample\src
INFO     2016-10-31 22:25:55,230 devappserver2.py:769] Skipping SDK update check.
INFO     2016-10-31 22:25:55,428 api_server.py:205] Starting API server at: http://localhost:53541
INFO     2016-10-31 22:25:55,436 dispatcher.py:197] Starting module "default" running at: http://localhost:8080
INFO     2016-10-31 22:25:55,440 admin_server.py:116] Starting admin server at: http://localhost:8000

hello world (GAE版)

では、GAE上にアップしてみます。
ひとまずローカルサーバーとして立ち上がってるpythonをタスクマネージャーから停止。
python.PNG

以下のコマンドで自身のアカウントのGAE上にデプロイしてみます。

コンソールから実行
>appcfg.py -A ******** -V v1 update C:\works\eclipse\workspace\gae-sample\src

********はGAEのproject_idに置き換えてください。

実行時のログ
11:54 PM Application: ******** (was: None); version: v1 (was: None)
11:54 PM Host: appengine.google.com
11:55 PM Starting update of app: ********, version: v1
11:55 PM Getting current resource limits.
11:55 PM Scanning files on local disk.
11:55 PM Cloning 2 application files.
11:55 PM Uploading 1 files and blobs.
11:55 PM Uploaded 1 files and blobs.
11:55 PM Compilation starting.
11:55 PM Compilation: 1 files left.
11:55 PM Compilation completed.
11:55 PM Starting deployment.
11:55 PM Checking if deployment succeeded.
11:55 PM Deployment successful.
11:55 PM Checking if updated app version is serving.
11:55 PM Completed update of app: ********, version: v1

無事GAEにデプロイされました。

gae_01.PNG

環境構築はここまで。
サラっと書いてますが、実際はかなりいろいろハマりました…。
ほぼ一日仕事だったかも笑
同じ環境を構築したい方の参考になれば幸いです。

次回からはGoで遊んでみます!

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?