更新され続ける世界を目指して

このエントリーをはてなブックマークに追加

開発エンジニャーの t です.

今日も自宅 Gentoo サーバの emerge -uDN @world を暖房代わりに生き延びてます.gcc ghc の更新がかかると長く楽しめるのでおすすめです.

冗談はさておき,Gentoo Linux は,portage というパッケージ管理システムを採用していて,基本的にはカーネルを含む全てのパッケージをコンパイルして継続的に更新していくため,バージョンという概念が事実上存在しないという特徴があります.

アドベントカレンダー 12日目は,そういうローリングアップデートを開発中のサービスでもやっていくために toubun というのをつくってみましたというお話です.

定期的に依存ライブらいを更新するという,もともとのコンセプトは ruby kaigi 2013 の Continuous gem dependency updating with Jenkins and Pull Request にあります.そしてそれを実装したtachikoma にかなりの部分を負っています.

新規開発のプロジェクトには Ruby を採用したので tachikoma を使いたかったのですが,Shanon では自社ドメイン下で GHE を運用しているため,octokit のための設定を使えるようにする必要がありました.

ghe 対応はすぐにできたので良かったのですが,別の問題が有りました.

まず,複数のプロジェクトに対して使おうとすると,それぞれのプロジェクトが使うバージョンの分必要になることでした.

rbenv を使っていた場合,それぞれのバージョンに対してインストールしておく必要がありますし, それを避けようとプロジェクトの Gemfile に書いて,bundle install 出来るようにしてしまうとプロジェクトに余計な依存と制約となってしまいます.

一番の問題は,ruby 以外のプロジェクトに対して適用しようとするとそのためだけに ruby の環境を維持することになり大げさになることでした.

そこで toubun では go を採用し,対象のプロジェクトの言語とパッケージに依存も影響もしないで済むようにしました.

go の場合,シングルバイナリなので適当なところに置いておけば良いため,環境維持のコストも小さく当然に ruby なり NodeJS なりの環境に相互に影響することもなくなりました.

これを cron に仕込んであり,毎週火曜にはパッケージの更新のPRを出て, github PR build plugin経由で一連のテストを行い,適宜更新して終局の回避を図っています

次の記事
« Prev Post
前の記事
Next Post »
Related Posts Plugin for WordPress, Blogger...