かまたま日記3

プログラミングメイン、たまに日常

CicleCIでDockerイメージを再利用する

CircleCI v1の話です、v2.0になったらもうちょっと楽になってそう(未確認)

基本的には以下のページを参考にしてます。

Caching docker image on CircleCI

1. キャッシュ用のディレクトリを用意する

例えば ~/docker-images、これを circle.ymlcache_directories に追加しておく

dependencies:
  cache_directories:
    - "~/docker-images"

2. イメージのタグを生成する

Dockerfile と依存ファイル達の sha1sum を取る。

たとえばRailsアプリの場合、gemだけイメージに含めるなら GemfileGemfile.lock これらに変更が無ければ同じ値になるはず。(なのでキャッシュが使えるはず)

tag=$(sha1sum Dockerfile Gemfile Gemfile.lock | sha1sum | cut -d' ' -f1)

アプリ全体をイメージに入れるなら全ソースファイルを対象とする

3. ビルドしたイメージをdocker saveする

こんな感じ

docker save ${image_name}:${tag} > ~/docker-images/${image_name}-${tag}.tar

4. 再ビルドするときにキャッシュを使う

イメージのタグを算出してキャッシュディレクトリにあったら docker load する

  if [[ -e ~/docker-images/${image_name}-${tag}.tar ]]; then
    docker load -i ~/docker-images/${image_name}-${tag}.tar
  else
    # 略. buildしてsaveする
  fi

ローカルにGitサーバを立ち上げる with Docker

Gitサーバ(というかGitHub)のレポジトリに対してcommitとかpushするOSSのテスト用に作りましたが、必要無くなったのでw 別リポジトリにしておきました。

github.com

READMEにも書いてますが、cloneして create_git_server.sh を叩くと2222ポートが開いてるGitサーバが出来上がります。

  • レポジトリの実体は work/git-server/repos 配下に作られていて、それがマウントされている
  • SSHの公開鍵は ~/.ssh/*.pub を登録してるので、無いと動きません
$ git clone ssh://git@localhost:2222/git/repos/awesome-repo.git
Cloning into 'awesome-repo'...
Warning: Permanently added '[localhost]:2222' (ECDSA) to the list of known hosts.
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 1), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.
Resolving deltas: 100% (1/1), done.
Checking connectivity... done.

$ cd awesome-repo

$ git log
commit f35d53a97488fac01267d094551df59a53e7ae07
Author: xxxx xxxx <xxxx@example.com>
Date:   Mon Mar 6 02:10:30 2017 +0900

    Add hello.txt

commit b15e864ddade594953ef671d1a2d3b4a0e3e9b0d
Author: xxxx xxxx <xxxx@example.com>
Date:   Mon Mar 6 02:10:30 2017 +0900

    my first commit

JJUG ナイトセミナーKotlin勉強会に参加してきた

jjug.doorkeeper.jp


EmbulkのプラグインをKotlinで書き直したり最近自分の中で激アツ言語のKotlinの勉強会が開かれると言うので早速参加してきました。サイバーエージェントのサーバサイドの事例だったりSpringのKotlin対応だったりKotlinの波が来ているのを感じられて良かったです。実際(元)JavaエンジニアとしてKotlinは本当に痒いとことに手が届く感じがして書いてて楽しいです。自分のところのプロダクトにも是非導入してみたいです。

続きを読む

TOEIC 217回 結果

Listening:315 (335), Reading:370 (255), Total: 685 (590) *1

Listeningが落ちたけとReadingが上がったので全体的には結構up、はじめて600点超え。次は700点超え目指す。

過去ログ

*1:括弧の中は前回(213回)の得点

EmbulkのプラグインをKotlinで書く

embulk-input-remoteをKotlinで書き直したv0.3.0をリリースしました。

Kotlinは4年ほど前に会社のレポートでちょっと調べたままで知識が止まってましたが、最近はAndroidやサーバサイドの事例も多く出てきたので勉強がてらやってみるかなと思い試してみました。

結果

Kotlin、イイね 👍

積極的に使って行きたくなりました。

良かったところ

Javaとの相互運用性高い

  • KotlinからJavaライブラリ、JavaからKotlinライブラリどちらも透過的に呼べるので、混在させやすい(移行がしやすい)

導入が簡単

Javaで不便なところが解消されてて簡潔に書ける

  • embulk-input-remoteでは行数が 33% 減りました*2
  • アクセサ, equals, hashCodeなどのboilerplateが省略可能
  • (比較的) Null安全
  • 型推論があるので、型を明示する機会が減る
  • Function as first class object
    • Embulkプラグインは匿名クラスの利用が多いので助かった
  • コレクションの便利メソッド*3

不明点

パフォーマンス (vs Java)

実際測ってないので、断言はできませんが、 以下のリンク*4を見る感じそんなにオーバーヘッド的なのは無いのでは、という期待を持ってます...w ttps://www.reddit.com/r/Kotlin/comments/3ddj8w/what_is_the_performance_of_kotlin

*1:たまにエラーになることもあるけどちょっと修正すればたいてい大丈夫

*2:約430行から290行

*3:map, filterなど

*4:h抜きなのはなぜかフルのURLを貼ると投稿に失敗するので