TravisCI/drone.io/wercker/CircleCIを比較

背景

  • ちょっと色々テストしたかったので,CI Serviceの比較サイトをいくつか探した
  • 比較サイトを比較すると,粒度と鮮度がまちまちのように感じたので自分で調べることにした
  • でも,沢山のサービスを調査するのは面倒なので少なめで!

結論

  • Werckerが以下のほしい機能にマッチしてそう
  • カスタマイズ性にも優れている感じがする
  • 最悪Werckerが使えなくなった場合は,CircleCIに乗り換えるでよさそう

ほしい機能

  • Must
    • Linux上でテストできる
    • Pythonコードがテストできる
    • Github repositoryが使える
  • Want
    • Private repositoryが無料でビルドできると嬉しい
    • Github Releaseが簡単にできると嬉しい
    • ビルドキャッシュが効くと嬉しい

比較結果

- TravisCI drone.io wercker CircleCI
対応言語 27 11 box次第? 7
設定方法 Yaml,WebGUI Yaml,WebGUI Yaml,WebGUI Yaml,WebGUI
通知 Email,Webhook,ChatApp Email Email,MacApp,ChatApp Webhook,ChatApp
ビルドキャッシュ 一部対応 非対応 ? 対応 対応
タイムアウト 50分 5分 60分 20分
git submodule 対応 対応 対応 対応
OSの依存パッケージインストール 対応 対応? 対応 対応
Artifactsアップロード 対応 非対応(手動DLのみ?) 対応 非対応(API経由&手動DLのみ?)
対応DB 12 9 box次第? 16
対応OS Mac,Linux Linux Linux Linux only?
Browserテスト 対応 対応 対応 対応
対応デプロイ先数 24 5 box次第? 6
ビルドトリガ Push,PR Push ? Push,PR 手動&PR ?
PrivateRepo 対応(有料) 対応(有料) 対応 対応
対応Repository Provider Github Github,BitBucket Github,BitBucket Github

参考にしたもの

上記テーブルヘッダのリンクの各種サイトのドキュメントを参考にしました

2014年に購入してよかったもの(Ingress編)

この記事は Ingress Advent Calendar 2014 - Adventar の22日目のエントリーです。

こんにちわ、Enlightenedの@wasabi0522です。 本日は、私がIngressをプレイするに当ってリアル課金購入したものを一部ご紹介します。

まずは自己紹介を

  • @wasabi0522
  • Enlightened所属、Lv11
  • Ingress歴は来年の1月上旬で丁度1年です。

実際に購入したもの

自転車

f:id:aircastle:20140330201817j:plain

GIANTのESCAPE Airを購入しました。前々からほしいとは思っており、休日1日6時間以上Ingressのために歩き続けるのが辛かったので購入しました。結果、休日1日に10時間以上自転車で走り回ることになりました。

モバイルバッテリー

この製品だと急速充電ができるので充電中にスマホがシャットダウンすることがなくなりました。*1

バックパック

もともと、ショルダーバッグ派でしたが、長時間カバンを身につけて歩くことによる、体(背骨?)の歪みを懸念してバックパックを購入しました。色のバリエーションが少し少ない以外は、特に不満なく使えています。

ランニングシューズ

Ingressを始めた当初、革靴でエージェント活動をしていたのですが、歩く際(足の第三関節を曲げた際?)に靴の革が足の関節付近の筋を圧迫して、腱鞘炎状態になったため急いで購入しました。結果腱鞘炎状態を解決するとともに、クッション素材があるため徒歩時に足の裏にバネがあるような感覚で歩けるようになりました。

USB充電器とUSBケーブル

Nexus5/Nexus7/iPhone/モバイルWifiルーター(いずれもIngress用)を一度に、且つ急速に充電したかったので購入しました。

モバイルWifiルーター

IngressやIngressに関連する作業で、通信量が制限値(7GB)に達しそうだったので追加SIMとともに購入しました。Ingressをする際には(通信量的に)重宝しますが、PC/Macからネットに繋ぐ際には、通信頻度や通信量の関係で熱を持ち、インターネットに繋がらなくなることがあるように感じます。*2

終わりに

皆様が、来年も安全に安心して、何より楽しくIngressをプレイされることをお祈り申し上げます。

*1:放電量?が充電量を超えると充電しながらでもスマホがシャットダウンするようです。もしくは、充電量が落ちるとシャットダウンするように感じます

*2:個人の感想です

node.js, websocketのURL少しまとめ

連休中にたまたまいじっていたら、id:naoyaさんも書いておられたので少しURLだけまとめます。

node.js, websocket概要

node.js 入門

node.js サーバサイドで動かす。

MacPortsを掃除する

にゃんこ先生のジャンボぬいぐるみを購入して、毎日もふもふしているわさびです。今回はタイトルの通り、MacPortsの掃除のお話です。

きっかけ

先日、MacBookさんのHDDの空き容量が1.16GBという危機的状況になりました。いろいろソフトウェアを削除しても、すでに何度も掃除をしていたので、ほとんど変わらず、頭を悩ませていました。そして、ふと思ったのが、

「よく考えたら、MacPortsのダウンロードファイルとか全然掃除いてないんじゃね?」

ということです。

MacPorts利用のスタンス

自宅で使っているMacBookはほとんど個人で利用してるため、ソフトウェアのバージョンはなるべく最新のものを利用しているだけで、ほとんど特定バージョンへのこだわりはありません。*1なので、MacPortsでインストール済みのソフトウェアで2種類以上のバージョンの同一ソフトウェアがインストールされていたら、古いバージョンのものはいらないのでは?ということになります。

MacPortsの何をどうして掃除できるのか

掃除について触れる前に、ソフトウェアのインストールとアップグレードについてです。

MacPortsを用いてソフトウェアをインストールする仕組み

MacPortsを用いてソフトウェアをインストールする場合、内部的にやっていることは、大まかには以下の3点だと思います。

  1. ソフトウェアのソースコードをダウンロードする
  2. ダウンロードしたソースコードをコンパイルする
  3. コンパイルしたものを特定ディレクトリにインストールする

インストール作業が終了すれば、ダウンロードしたソースコードと、コンパイルしたものはいらなくなりますね。これは掃除できそうです。でも、それだけじゃないんです。

MacPortsを用いてソフトウェアを更新する仕組み

今まで僕は、以下のようなport_upgrade.shを作っておいてソフトウェアを更新してきました。

port selfupdate
port sync
port outdated
port upgrade installed

やっていることは至ってシンプルで、

  1. MacPorts自体のアップグレード
  2. Portsツリーの更新
  3. アップグレードされるパッケージの表示
  4. パッケージのアップグレード

だけです。

上記のようなport_upgradeスクリプトを用いると更新を完全に自動化できるわけですが、あるソフトウェアAのバージョン1.14から1.15へのアップグレードの際に、MacPortsは古いバージョン(1.14)を削除しません。インストールした新しいバージョン(1.15)はアクティブという状態になり、古いバージョンはインアクティブという状態になります。コマンドを打って使われるのはアクティブなソフトウェアです。古いバージョンのソフトウェアを利用したければ、新しいバージョンをインアクティブにして、古い方をアクティブにすれば、アップグレード後に不具合があっても、もとの環境に戻すことができるようです。親切なんだけど、僕の利用方法だとあまり古いソフトウェアに戻すことは少ないような気がします^^;

インアクティブなソフトウェアの削除と不要ファイルの掃除

というわけで、作成したのが以下のport_clean.sh。

port -u uninstall
port clean --all installed

上記のスクリプトでは、

  1. インアクティブなソフトウェアのアンインストール
  2. インストール済みソフトウェアのソースコードと作業ファイルを削除

という流れをやっています。

掃除の結果

# sudo sh port_clean.sh

というコマンドを用いて、空き容量は1.16GBから15GBに増加したのでした。
これで当分もちそうです。いらないインアクティブなソフトウェアはたまには掃除しないといけませんね。*2

*1:特に特定バージョンを使う制約もありませんし。

*2:upgradeでcオプションとか使っても良いかもしれません。

ちょっと更新

更新するのを忘れてたので、今更更新

zshrc

zshの設定 - aircastle.py
ssh時に新しいscreenを開くなどなど

自分の.emacs.d以下を公開してみた。

需要があるのかどうかわかりませんが、.emacs.d以下の掃除をやりきったついでに公開してみました。*1

http://github.com/aircastle/dot-emacs-dot-d

使い方は、至って簡単(?)で、

1. .emacs.dをgit cloneします。(~/.emacs.dの上書きに注意)

$ git clone git://github.com/aircastle/dot-emacs-dot-d.git ~/.emacs.d

2. .emacsをコピーします。

$ cp ~/.emacs.d/dot-emacs ~/.emacs

3. elispフォルダを作ります。

$ mkdir ~/.emasc.d/elisp

4. install-elisp.elをインストールします。

$ wget  http://www.emacswiki.org/cgi-bin/wiki/download/install-elisp.el ~/.emacs.d/elisp/

5. emacsを起動します。

$ emacs

6. ~/.emacs.d/update-elisp.elを開いて、ほしいelispの行でC-x C-eします。*2
7. 自動的にファイルが開くので、C-c C-cしてインストールします。
8. .emacsの所定の行のコメントアウトをはずします。

もうちょっとわかりやすくなるようになんとかします。

*1:インストール済みelispは公開してないです。

*2:コメントアウトしてあるところは、install-elispでインストールできないです、多分

あればいいなと思うもの

emacsでパッケージ管理システム

現状、特定のelispをインストールしようと思うと、依存するelispも手動で入れないといけない。おまけに、更新されたelispも自分で探さないといけない。

anything.elで特定の行をpatternにコピペ

findfileでanythingを起動させて、patternを打ち込んだ際に、候補に挙がってきたものをpatternに一発でコピペしたい。長いパスのものを開きたいけど、開きたいファイルと同一ディレクトリの別ファイルしか候補に上がってこないときになど。こういうのってあるのかしら。locate dbとかでなんとかするしかないのかなぁ。