# 1.4 Go開発ツール

本章ではいくつかの開発ツールをご紹介します。これらはすべて自動化を備えており、fmt機能を自動化します。なぜならこれらはすべてクロスプラットフォームであり、そのためインストール手順といったものはすべて同じものです。

## LiteIDE

  LiteIDEはGo言語の開発に特化したクロスプラットフォームの軽量統合開発環境(IDE)です。visualfcで書かれています。

  ![](images/1.4.liteide.png?raw=true)

図1.4 LiteIDEのメイン画面

**LiteIDEの主な特徴：**

* 主なオペレーティングシステムのサポート
	* Windows 
	* Linux 
	* MacOS X
* Goコンパイル環境の管理と切り替え
	* 複数のGoコンパイル環境の管理と切り替え
	* Go言語のクロスコンパイルのサポート
* Go標準と同じ項目管理方式
	* GOPATHに基づいたパッケージブラウザ
	* GOPATHに基づいたコンパイルシステム
	* GOPATHに基づいたドキュメント検索
* Go言語の編集サポート
	* クラスブラウザとアウトライン表示
	* Gocode(コード自動作成ツール)の完全なサポート
	* Go言語ドキュメントとApi高速検索
	* コード表現情報の表示`F1`
	* ソースコード定義とジャンプのサポート`F2`
	* Gdbブレークポイントとテストサポート
	* gofmt自動整形のサポート
* その他の特徴
	* 多言語メニューのサポート
	* 完全にプラガブルな構成
	* エディタのカラーリングサポート
	* Kateに基づいた文法表示サポート
	* 全文に基づく単語の自動補完
	* キーボードショートカットのバインディングサポート
	* Markdownドキュメントの編集サポート
		* リアルタイムプレビューと表示の同期
		* カスタムCSS表示
		* HTML及びPDFドキュメントのエクスポート
		* HTML/PDFドキュメントへの変換とマージ

**LiteIDEインストール設定**

* LiteIDEインストール
	* ダウンロード <http://code.google.com/p/golangide>
	* ソースコード <https://github.com/visualfc/liteide>
	
        まずGo言語環境をインストールし、その後オペレーティングシステムにしたがってLiteIDEの対応圧縮ファイルを直接解凍すれば使用できます。

* Gocodeのインストール

        Go言語の入力自動補完を起動するにはGocodeをインストールする必要があります：
	
		go get -u github.com/nsf/gocode

* コンパイル環境設定

        自身のシステムの要求にしたがってLiteIDEが現在使用している環境変数を切り替えまたは設定します。
	
        Windowsオペレーティングシステムの64bitGo言語の場合、
        ツール欄の環境設定のなかでwin64を選択し、`編集環境`をクリックしてLiteIDEからwin64.envファイルを編集します。
	
		GOROOT=c:\go
		GOBIN=
		GOARCH=amd64
		GOOS=windows
		CGO_ENABLED=1
		
		PATH=%GOBIN%;%GOROOT%\bin;%PATH%
		。。。
	
        この中の`GOROOT=c:\go`を現在のGoのインストールパスに修正し、保存するだけです。もしMinGW64があれば、`c:\MinGW64\bin`をPATHの中に入れて、goによるgccのコールでCGOコンパイラのサポートを利用することができます。

        Linuxオペレーティングシステムで64bitGo言語の場合、
        ツール欄の環境設定の中からlinux64を選び、`編集環境`をクリックし、LiteIDEからlinux64.envファイルを編集します。
	
		GOROOT=$HOME/go
		GOBIN=
		GOARCH=amd64
		GOOS=linux
		CGO_ENABLED=1
		
		PATH=$GOBIN:$GOROOT/bin:$PATH	
		。。。
		
        この中の`GOROOT=$HOME/go`を現在のGoのインストールパスに修正して保存します。

* GOPATH設定

        Go言語のツールキーはGOPATH設定を使用します。Go言語開発のプロジェクトのパスリストです。コマンドライン(LiteIDEでは`Ctrl+,`を直接入力できます)で`go help gopath`を入力するとGOPATHドキュメントを素早く確認できます。
	
        LiteIDEでは簡単に確認でき、GOPATHを設定することができます。`メニュー-確認-GOPATH`設定を通じて、システム中に存在するGOPATHリストを確認することができます。
        同時に必要な追加項目にそってカスタムのGOPATHリストに追加することができます。

## Sublime Text

  ここではSublime Text 2（以下「Sublime」）+GoSublime+gocode+Margoの組み合わせをご紹介します。なぜこの組み合わせなのでしょうか？

  - コード表示の自動化、以下の図の通り

	![](images/1.4.sublime1.png?raw=true)

        図1.5 sublimeコードの自動化画面

  - 保存した時にはコードが自動的に整形されています。あなたの書いたコードをより美しくGoの標準に合うよう仕上げてくれます。
  - プロジェクト管理のサポート
	
	![](images/1.4.sublime2.png?raw=true)
	
        図1.6 sublimeプロジェクト管理画面　
	
  - 文法のハイライトサポート
  - Sublime Text 2はフリーで使用できます。保存回数が一定の量を超えると購入するかのダイアログが現れるので、継続利用をキャンセルするをクリックします。正式登録版とは何の違いもありません。


次はどのようにインストールするかご説明します。[Sublime](http://www.sublimetext.com/)ダウンロードします。

  自分のシステムに合わせて対応するバージョンをダウンロードし、Sublimeを開きます。Sublimeに詳しくない方はまず[Sublime Text 2 入門とテクニック](http://lucifr.com/139225/sublime-text-2-tricks-and-tips/)の文章を読んでみてください。

  1. 開いた後、 Package Controlをインストールします。Ctrl+`でコマンドラインを開き、以下のコードを実行します：

		import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text to finish installation'

   この時Sublimeを再度開き直してください。メニュー欄に一つ項目が増えているのがお分かりいただけるかと思います。これでPackage Controlが正しくインストールされました。

  ![](images/1.4.sublime3.png?raw=true)

        図1.7 sublimeパッケージ管理


  2. インストールが完了するとSublimeのプラグインをインストールできます。GoSublime, SidebarEnhancementsとGo Buildをインストールする必要があるので、プラグインをインストールしたあとSublimeを再起動させて有効にしてください。Ctrl+Shift+pでPackage Controlを開き、`pcip`を入力します。（これは"Package Control: Install Package"と省略されます）。

  この時、左下のコーナーに現在読み込んでいるパッケージデータが表示されます。完了すると下のような画面になります。

  ![](images/1.4.sublime4.png?raw=true)

        図1.8 sublimeプラグインのインストール画面

  この時、GoSublimeと入力し、「確認」をクリックするとインストールが始まります。同じようにSidebarEnhancementsとGo Buildにも行います。

  3. インストールが成功したかテストします。Sublimeを開き、main.goを開いて文法がハイライトされているのをご確認ください。`import`を入力してコードの自動表示がされます。`import "fmt"`のあとに`fmt.`を入力すると自動的に関数の候補が現れます。

  もしすでにこのような表示がされる場合は、インストールが成功しており、自動補完が完了しています。

  もしこのような表示がなされない場合、あなたの`$PATH`が正しく設定されていないのかもしれません。ターミナルを開き、gocodeを入力して、正しく実行できるか確認してください。もしダメであれば`$PATH`が正しく設定されていません。

  4. MacOSではすでに$GOROOT, $GOPATH, $GOBINが設定されていても自動的にはどうすればよいか教えてくれません。
  
  sublimeにてcommand + 9を押し、envを入力して$PATH, $GOROOT, $GOPATH, $GOBINといった変数を確認します。もしなければ、以下の手順に従ってください。
  
  まず下のシンボリックリンクを作成し、Terminalで直接sublimeを起動します
  
  ln -s /Applications/Sublime\ Text\ 2.app/Contents/SharedSupport/bin/subl /usr/local/bin/sublime


## Vim
Vimはviから発展したテキストエディタです。コード補完、コンパイルまたエラージャンプなど、プログラミングに特化した機能が豊富です。広くプログラマに使用されています。

![](images/1.4.vim.png?raw=true)

図1.9 VIMエディタのGoの自動補完画面

 1. vimハイライト表示の設定

		cp -r $GOROOT/misc/vim/* ~/.vim/

 2. ~/.vimrcファイルで文法のハイライト表示を追加します

		filetype plugin indent on
		syntax on

 3. [Gocode](https://github.com/nsf/gocode/)をインストールします

		go get -u github.com/nsf/gocode

        gocodeはデフォルトで`$GOBIN`の下にインストールされています。

 4. [Gocode](https://github.com/nsf/gocode/)を設定します。

		~ cd $GOPATH/src/github.com/nsf/gocode/vim
		~ ./update.bash
		~ gocode set propose-builtins true
		propose-builtins true
		~ gocode set lib-path "/home/border/gocode/pkg/linux_amd64"
		lib-path "/home/border/gocode/pkg/linux_amd64"
		~ gocode set
		propose-builtins true
		lib-path "/home/border/gocode/pkg/linux_amd64"

        >gocode setの２つのパラメータの意味を説明します：
	>
        >propose-builtins：はGoのビルトイン関数を補完するかです。タイプは定数です。デフォルトはfalseで、表示しません。
	>
        >lib-path:デフォルトで、gocodeは**$GOPATH/pkg/$GOOS_$GOARCH**と**$GOROOT/pkg/$GOOS_$GOARCH**ディレクトリのパッケージを検索するだけです。当然この設定には私達の外側のlibを検索できるようパスを設定することができます。


 5. おめでとうございます。インストール完了です。あなたは今から`:e main.go`でGoで開発する面白さを体験することができます。


## Emacs
Emacsは伝説の神器です。彼女はエディタであるだけでなく、統合環境でもあります。または開発環境の集大成と呼んでもよいかもしれません。これらの機能はユーザの身を万能のオペレーティングシステムに置きます。

  ![](images/1.4.emacs.png?raw=true)

図1.10 EmacsでGoを編集するメイン画面

1. Emacsのハイライト表示設定

		cp $GOROOT/misc/emacs/* ~/.emacs.d/

2. [Gocode](https://github.com/nsf/gocode/)をインストール

		go get -u github.com/nsf/gocode

        gocodeはデフォルトで`$GOBIN`の下にインストールされます。

3. [Gocode](https://github.com/nsf/gocode/)を設定


		~ cd $GOPATH/src/github.com/nsf/gocode/emacs
		~ cp go-autocomplete.el ~/.emacs.d/
		~ gocode set propose-builtins true
		propose-builtins true
		~ gocode set lib-path "/home/border/gocode/pkg/linux_amd64" // あなたのパスに置き換えてください。
		lib-path "/home/border/gocode/pkg/linux_amd64"
		~ gocode set
		propose-builtins true
		lib-path "/home/border/gocode/pkg/linux_amd64"

4. [Auto Completion](http://www.emacswiki.org/emacs/AutoComplete)をインストールする必要があります。

   AutoCompleteをダウンロードして解凍します。

	~ make install DIR=$HOME/.emacs.d/auto-complete

   ~/.emacsファイルを設定します。

		;;auto-complete
		(require 'auto-complete-config)
		(add-to-list 'ac-dictionary-directories "~/.emacs.d/auto-complete/ac-dict")
		(ac-config-default)
		(local-set-key (kbd "M-/") 'semantic-complete-analyze-inline)
		(local-set-key "." 'semantic-complete-self-insert)
		(local-set-key ">" 'semantic-complete-self-insert)

   詳細情報はこちらを参考にしてください：http://www.emacswiki.org/emacs/AutoComplete

5. .emacsを設定します。

		;; golang mode
		(require 'go-mode-load)
		(require 'go-autocomplete)
		;; speedbar
		;; (speedbar 1)
		(speedbar-add-supported-extension ".go")
		(add-hook
		'go-mode-hook
		'(lambda ()
			;; gocode
			(auto-complete-mode 1)
			(setq ac-sources '(ac-source-go))
			;; Imenu & Speedbar
			(setq imenu-generic-expression
				'(("type" "^type *\\([^ \t\n\r\f]*\\)" 1)
				("func" "^func *\\(.*\\) {" 1)))
			(imenu-add-to-menubar "Index")
			;; Outline mode
			(make-local-variable 'outline-regexp)
			(setq outline-regexp "//\\.\\|//[^\r\n\f][^\r\n\f]\\|pack\\|func\\|impo\\|cons\\|var.\\|type\\|\t\t*....")
			(outline-minor-mode 1)
			(local-set-key "\M-a" 'outline-previous-visible-heading)
			(local-set-key "\M-e" 'outline-next-visible-heading)
			;; Menu bar
			(require 'easymenu)
			(defconst go-hooked-menu
				'("Go tools"
				["Go run buffer" go t]
				["Go reformat buffer" go-fmt-buffer t]
				["Go check buffer" go-fix-buffer t]))
			(easy-menu-define
				go-added-menu
				(current-local-map)
				"Go tools"
				go-hooked-menu)

			;; Other
			(setq show-trailing-whitespace t)
			))
		;; helper function
		(defun go ()
			"run current buffer"
			(interactive)
			(compile (concat "go run " (buffer-file-name))))

		;; helper function
		(defun go-fmt-buffer ()
			"run gofmt on current buffer"
			(interactive)
			(if buffer-read-only
			(progn
				(ding)
				(message "Buffer is read only"))
			(let ((p (line-number-at-pos))
			(filename (buffer-file-name))
			(old-max-mini-window-height max-mini-window-height))
				(show-all)
				(if (get-buffer "*Go Reformat Errors*")
			(progn
				(delete-windows-on "*Go Reformat Errors*")
				(kill-buffer "*Go Reformat Errors*")))
				(setq max-mini-window-height 1)
				(if (= 0 (shell-command-on-region (point-min) (point-max) "gofmt" "*Go Reformat Output*" nil "*Go Reformat Errors*" t))
			(progn
				(erase-buffer)
				(insert-buffer-substring "*Go Reformat Output*")
				(goto-char (point-min))
				(forward-line (1- p)))
			(with-current-buffer "*Go Reformat Errors*"
			(progn
				(goto-char (point-min))
				(while (re-search-forward "<standard input>" nil t)
				(replace-match filename))
				(goto-char (point-min))
				(compilation-mode))))
				(setq max-mini-window-height old-max-mini-window-height)
				(delete-windows-on "*Go Reformat Output*")
				(kill-buffer "*Go Reformat Output*"))))
		;; helper function
		(defun go-fix-buffer ()
			"run gofix on current buffer"
			(interactive)
			(show-all)
			(shell-command-on-region (point-min) (point-max) "go tool fix -diff"))

6. おめでとうございます。今からあなたはこの神器を使ってGo開発の楽しみを体験できます。デフォルトのspeedbarは閉じています。もし開く場合は ;; (speedbar 1) の前のコメントを取り去るか、*M-x speedbar*を手動で起動してください。

## Eclipse
Eclipseも非常によく使われる開発ツールです。以下ではEclipseを使ってどのようにGoプログラムを編集するかご紹介します。

  ![](images/1.4.eclipse1.png?raw=true)

図1.11 EclipseでのGo編集のメイン画面

1. まず[Eclipse](http://www.eclipse.org/)をダウンロードしてインストールします。

2. [goclipse](https://code.google.com/p/goclipse/)プラグインをダウンロードします。

	http://code.google.com/p/goclipse/wiki/InstallationInstructions

3. gocodeをダウンロードして、goのコード補完を表示させます。

        gocodeのgithubアドレス：

		https://github.com/nsf/gocode

        windowsではgitをインストールする必要があります。通常は[msysgit](https://code.google.com/p/msysgit/)を使います。
	
        cmdでインストールを行います：
	
		go get -u github.com/nsf/gocode
	
        以下のコードをダウンロードし、直接go buildでコンパイルしてもかまいません。この場合はgocode.exeが生成されます。

4. [MinGW](http://sourceforge.net/projects/mingw/files/MinGW/)をダウンロードして要求に従いインストールしてください。

5. プラグイン設定

	Windows->Reference->Go

  (1).Goのコンパイラを設定します。

  ![](images/1.4.eclipse2.png?raw=true)

  図1.12 Goの基本情報を設定します。


  (2).Gocodeを設定します（オプション、コード補完）、Gocodeのパスは事前に生成したgocode.exeファイルを設定します。

  ![](images/1.4.eclipse3.png?raw=true)

  図1.13 gocode情報を設定します。

  (3).GDBを設定します（オプション、テスト用）、GDBのパスはMingGWのインストールディレクトリ下のgdb.exeファイルを設定します。

  ![](images/1.4.eclipse4.png?raw=true)
  
  図1.14 GDB情報の設定

6. テストが成功するか

        goプロジェクトを一つ新規作成して、hello.goを作成します：
	
	  ![](images/1.4.eclipse5.png?raw=true)
	
          図1.15 プロジェクトの新規作成とファイルの編集
	
        テストの実行（consoleでコマンドを入力する必要があります）：
	
	  ![](images/1.4.eclipse6.png?raw=true)
	  
          図1.16 Goプログラムのテスト

## IntelliJ IDEA
Javaに親しい読者はideaには不慣れだと思います、ideaはプラグインを通してgo言語のシンタックスハイライト、コード補完およびリビルドをサポートしています。

1. ideaを先にダウンロードします。ideaはマルチプラットフォームをサポートしています：win,mac,linux、もしお金があれば正式版を購入します、もし無ければ、コミュニティの無料版を使ってください。Go言語を開発するだけであれば無料版で十分事足ります。

	![](images/1.4.idea1.png?raw=true)

2. Goプラグインをインストールし、FileメニューのSettingをクリックします。Pluginsを探したら、Browser repoボタンをクリックします。中国国内のユーザはおそらくエラーが出るかもしれませんが、自分で解決してくれよな。

	![](images/1.4.idea3.png?raw=true)

3. この時いくつものプラグインが見つかります。Golangを検索して、download and installをダブルクリックしてください。golangの行末にDownloadedの表示が現れるのを待って、OKをクリックします。

	![](images/1.4.idea4.png?raw=true)
	
        その後Applyをクリックすると、IDEが再起動を要求します。
	
4. 	再起動が完了し、新規プロジェクトを作成すると、golangプロジェクトが作成可能であることがお分かりいただけるかとおもいます：

	![](images/1.4.idea5.png?raw=true)

        次に、go sdkの場所を入力するよう促されるかもしれません。普段はいつもC:\Goにインストールされています。Linuxとmacは自分のインストールディレクトリの設定にしたがって、ディレクトリを選択すれば大丈夫です。

## links
   * [目次](<preface.md>)
   * 前へ: [Goのコマンド](<01.3.md>)
   * 次へ: [概要](<01.5.md>)
