※Makefileに一部間違いがあったため、修正しましたbazelはビルドシステムの一つで、Googleが開発し社内でも使用している。makeなどの従来のビルドシステムと比べると、簡潔な設定で幅広い言語・ビルド対象に対応していて、ビルドが必要なものはほとんどbazelで解決できる。Bazel例えば、Goのビルドと同時にdockerイメージもビルドしたい、protoもビルドしたいといった場合、通常であれば個別にビルドコマンドを打つ必要があるのだが、この作業をbazelに一本化でき、とても便利。rules_dockerrules_goはGo言語向けbazelルール。go_libraries、go_test、go_binaryなどを提供し、Go言語に関するビルド、テスト処理を記述できるようになる。gazelleはrules_goを用いたビルド設定を自動生成するツール。importなどを見て、自動で依存を解決し、ビルド設定を吐き出してくれる。rules_dockerは、bazelを用いてdockerイメージをビルドしたり、プッシュすることができるルール。今回はgoのバイナリを含めたイメージをビルドし、実行する。以下にサンプルのレポジトリを作成した。mjhd-devlion/bazel-gazelle-sampleディレクトリ構造としては以下のようになっており、cmd以下のsampleが、今回動かす対象のプログラム。Worldを出力する。Worldを表示している。vendorまた、以下のようなMakefileを用意している。runすることによってプログラムを実行することができる。./Gopkg.lockここで一つ注意点があり、Makefileのgazelleの項に、update-reposという記述をしている。gazelleとvendoringは相性が悪く、特にprotoをビルドする際など、バージョンの違いによる問題が発生したりする。GitHub)に詳しく載っているのだが、protoをビルドする際にrules_goが提供する依存のバージョンがvendoringしているものと衝突した場合、ビルド時、または実行時のエラーが発生する。これを解決するためには、WORKSPACEにgo_repositoryルールを用いて依存するライブラリのバージョン指定をする必要があるのだが、手作業でやるのは流石に辛い。いうことで、実はgazelleはupdate-reposという「Gopkg.lockとgo_repositoryを同期する」プログラムを用意してくれている。(つい先日知った)サンプルでは、このプログラムを用いてdepの解決した依存に、bazelの依存を同期し、安全にビルドが行えるよう、update-reposをgazelle実行時に呼ぶような設定を行っている。実はvendorディレクトリを削除しても動く。依存はbazelがビルド時にダウンロードし、その後も管理をしてくれるため、vendorディレクトリの中身はビルド時に使用されていない。二重管理になってしまうため、vendorディレクトリを削除したいのだが、vendorディレクトリが無いとエディタが真っ赤になる...。何かもっと良い方法をご存じの方、是非コメントいただけると嬉しいです。LSPRubyの静的型チェッカー、「Sorbet」がオープンソース化された...2018-09-30Golangのメモリ周りのメモ以前、このレポジトリがバズっていた。intel-go/byte...2015-08-23Ghostをapache上に設置+αかっこいいGhostはかっこいいnode.jsを使っている。<p>wait0000さんは、はてなブログを使っています。<p>引用をストックできませんでした。<p>限定公開記事のため引用できません。