sgykfjsm.github.com

ベンダリングのためのgomvpkgとgbについて考えてみる

GO言語には多言語にあるようなパッケージマネジメントの仕組みが(公式には)サポートされていない。GOv1.5では実験的に導入されているが、例えばJavaで言うmaven、Pythonで言うpipなどのような共通として用いられているツールなどは無く、基本的には以下の3つのやり方が主流だと思われる。

  • 依存するパッケージを自分のリポジトリに取り込むVendoring
  • 3rd partyツールによるRevison指定などといった擬似的なパッケージマネジメント
  • そもそもパッケージマネジメントをしない

自分の開発では、業務も含めて、あまり外部パッケージに依存するようなことはあまり無いが、もしやるなら1つ目のVendoringになると思う。で、今回はVendoringを行なう際に便利だと思われる2つのツール、gomvpkggbを試してみる。

Ginkgo 基本的な使い方編

最近、golangでプログラムを書く機会が増えてきた。golangでTDDをする場合、標準のtestingパッケージを使うのが一般的なようだ。ただし、標準パッケージだけだとちょっとテストが書きづらいので、stretchr/testifyを使っている人も多いと思う。

関数のテストをしたいときは標準パッケージなりtestifyを使うなりで良いのだけど、振る舞いをテストしたい、つまりBDDをしたいなーと思った時にちょっと調べらたらGinkgoというのが良さ気だったので、ちょっと試してみる。

Sonatype Nexusの始め方

自前でmavenリポジトリを運用する場合に、リポジトリ運用を楽にしてくれるソフトウェアがいくつかある。 今回はおそらく良く使われているであろうSonatype NexusのOSS版でmavenリポジトリを始める方法をメモする。

AWS BeanstalkでDockerをカスタムAMIで使う。

既知の通り、BeanstalkでDockerを使うことができるが、通常の使い方だとインスタンスが配備される度にDocker ImageをPull、BuildしてからRunする。初期配備時は問題ないが、スケールアウトの観点で見た場合、非常にもたつくことがある。また、Docker Imageが大きい(800MB以上ぐらい?)と、devicemapper errorでBuildに失敗することが多い(ような気がする)。単にBuildに失敗しただけであれば切り離せば良いが、複数台のうちいくつかがBuildに失敗しただけでは検知が難しく、そのまま生き残ってしまうとムダなコストが発生する。

上記のような認識でいたため、これまではBeanstalkでDockerを運用することにはあまり乗り気ではなかった。しかし、同僚からの意見で予めデプロイしておいたカスタムAMIを使うのはどうか、という意見があり、検証することにした。

なお、結論から言うと、ここで記した方法では実運用に耐えないと思う。アレコレがんばらないで、素直にAmazon EC2 Container ServiceがGAになるのを待ったほうが良い。

AnsibleでMySQLをインストールする。

AWSなんかを使ってると、イチからMySQLなどの基本的なミドルウェアをセットアップすることは減ってくる。そんな中、AnsibleでMySQLをインストールする事になったのだけど、意外と忘れてたりAnsibleで作業するのと手作業で進めることの差異でちょっと詰まったりしたので、ここに備忘しておく。