読者です 読者をやめる 読者になる 読者になる

かまたま日記3

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

リトグリ麻珠 無期限活動休止

寝耳に水のこのニュース、、と言うわけでもなく、春ツアーのときから麻珠が脱退するのでは的なツイートがTwitterで散見されており漠然とした不安はありましたが、ついに来てしまったか、という感じです。

今思うと、春ツアー最終日麻珠の調子が悪そう と私が感じたのも、自分のリトグリ最後のライブということで色々思うことがあったのかなと推測されますね。

活動休止という選択は麻珠の歌手としてさらにレベルアップしたいというポジティブな決断だし、他のメンバーも彼女の決断を尊重し、応援しているので自分も応援したいです。麻珠が抜けたことで彼女のパートをどうするんだろうとか、コーラスの厚みが減ってしまうのではないだろうかという不安は正直ありますが、それらを乗り越えた新しいリトグリを期待したいと思います。

ガオラー歴8ヶ月ですが、麻珠がいたリトグリを生で経験できたのはとても幸運なことでした。Good Luck.

Little Glee Monster のライブに行ってきた@東京国際フォーラム

春ツアー最終日、行ってきました。最終日ということでメンバーガオラーともども気合はいってたと思います。秋ツアー決定したということで、楽しみですね。

  • 基本的なセットは武道館と同じ流れ
    • オレンジ, 永遠に, Girls be Free, 君のようになりたい が無かった。
  • たまに主旋律が聞こえないことがあった。 音響の問題か歌唱ミス?
  • 麻珠がちょっと調子悪そうに感じた、珍しい
  • 途中のMCでご当地CMソング集
  • アサヒのセッションは、"雨で湿気が多い、てるてる坊主忘れた"
  • 芹奈が武道館でJOYの歌詞間違え謝る、manakaも…?
  • 最後のMCで芹奈が “何百年後もみんなの心に残る歌手になりたい"、ぐう感動
  • 5/22 Earth, Wind & Fire の武道館公演のオープニングアクト決定
  • 秋ツアー決定

f:id:kamatama_41:20170409202053j:plain

gradle-embulk-pluginを作った #Embulk

TL;DR

EmbulkのJavaプラグイン開発のときにいろいろ便利につかえるGradleのプラグインを作りました。

github.com

使い方

最低限以下の記述を build.gradle にすれば動きます。*1
最新バージョンは 0.1.4 です (2017/03/21現在)

buildscript {
    repositories {
        jcenter()
        maven { url 'http://kamatama41.github.com/maven-repository/repository' }
    }
    dependencies {
        classpath "com.github.kamatama41:gradle-embulk-plugin:0.1.4"
    }
}

apply plugin: "com.github.kamatama41.embulk"


embulk {
    version = "0.8.18"  // 使うEmbulkのバージョン
    category = "file-input"  // 作るプラグインのカテゴリ (embulk newの時に指定するカテゴリ)
    name = "xlsx"  // 作るプラグインの名前

    // 作者名、メールアドレス、ホームページ (gemspecタスク用)
    authors = ["A User"]  
    email = "a.user@example.com"
    homepage = "https://github.com/a.user/embulk-input-xlsx"
}

何ができるか?

プラグインテンプレート生成

newPlugin タスクを実行することで embulk new コマンドを実行したときと同じテンプレートを生成することができます。*2

% gradle newPlugin
Starting a Gradle Daemon (subsequent builds will be faster)
:embulkSetup
Setting Embulk version to 0.8.18
:embulk_new_java-file-input_xlsx
2017-03-21 04:12:05.020 +0900: Embulk v0.8.18
Creating embulk-input-xlsx/
  Creating embulk-input-xlsx/README.md
  Creating embulk-input-xlsx/LICENSE.txt
  Creating embulk-input-xlsx/.gitignore
  Creating embulk-input-xlsx/gradle/wrapper/gradle-wrapper.jar
  Creating embulk-input-xlsx/gradle/wrapper/gradle-wrapper.properties
  Creating embulk-input-xlsx/gradlew.bat
  Creating embulk-input-xlsx/gradlew
  Creating embulk-input-xlsx/config/checkstyle/checkstyle.xml
  Creating embulk-input-xlsx/config/checkstyle/default.xml
  Creating embulk-input-xlsx/build.gradle
  Creating embulk-input-xlsx/lib/embulk/input/xlsx.rb
  Creating embulk-input-xlsx/src/main/java/org/embulk/input/xlsx/XlsxFileInputPlugin.java
  Creating embulk-input-xlsx/src/test/java/org/embulk/input/xlsx/TestXlsxFileInputPlugin.java

Plugin template is successfully generated.
Next steps:

  $ cd embulk-input-xlsx
  $ ./gradlew package

:newPlugin

BUILD SUCCESSFUL

Total time: 13.166 secs

既存Gradleタスクを網羅

Embulkのプラグイン開発時、最初に embulk new java-input foo のようなコマンドで雛形を生成すると思うのですが、そのときに出来る build.gradle で定義されてるタスクや処理はすべて利用可能です。具体的にはこのテンプレートに記述されてる以下のタスクになります。

これらのタスクはプラグイン側で定義してるので、書く必要が無くなります。*3

“org.embulk:embulk-core” の依存関係を省略可能

プラグイン側で、指定した version に対応したライブラリを追加するので以下の compile provide の記述を書く必要がありません。

dependencies {
    compile  "org.embulk:embulk-core:<embulk-version>"
    provided "org.embulk:embulk-core:<embulk-version>"
}

任意のEmbulkコマンドをGradleタスクとして実行可能

embulk_* のタスクを実行することで任意のembulkコマンドを実行できます。コマンド引数は _ で区切ります。

たとえば、 embulk_--version タスクは embulk --version が実行されます。

% ./gradlew embulk_--version
:embulkSetup
:embulk_--version
embulk 0.8.18

BUILD SUCCESSFUL

Total time: 4.129 secs

embulk_gen_install_embulk-input-hoge タスクは embulk gem install embulk-input-hoge が実行されます。

% gradle embulk_gem_install_embulk-input-command
Starting a Gradle Daemon (subsequent builds will be faster)
:embulkSetup
:embulk_gem_install_embulk-input-command
2017-03-22 07:21:11.578 +0900: Embulk v0.8.18
Successfully installed embulk-input-command-0.1.4
1 gem installed

BUILD SUCCESSFUL

Total time: 13.134 secs

テスト実行が簡単にできる

また、開発中のJavaプラグインをテスト実行(run, preview, guessなど)する場合、以下のような手順を踏むことになると思います。

  1. gradle package でJarライブラリを作る
  2. embulk run-L オプションでクラスパスを追加する

embulk_run タスク*4はそれを全部1コマンドにまとめたタスクです。さらに

  • embulk_run の時のconfigファイルはデフォルトで config.yml
  • embulk_guess の時の出力ファイルは output.yml

指定されます。つまり

  • gradle embulk_run = gradle package && embulk run config.yml -L .
  • gradle embulk_guess = gradle package && embulk guess config.yml -o output.yml -L .

とほぼ同義です。設定ファイルの名前を変えたい場合は build.gradle 内の configYaml, outputYaml を編集して下さい。

embulk {
    ....
    configYaml = "myconfig.yml"
    outputYaml = "myoutput.yml"
}

さいごに

Embulkプラグイン開発者の方は、是非、使ってみて下さい!

*1:今のところMaven CentralとかBintrayには登録してないのでオレオレMavenレポジトリからダウンロードします

*2:実際の処理でもembulk newを実行したあと必要なファイルをコピーしてきてます

*3:もちろん必要があれば上書きできます

*4:preview, guess, cleanupも同様

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回)の得点