生産性向上ブログ

継続的な生産性向上を目指すエンジニアのためのブログ

Jenkins 2.0 (1): Dockerで環境構築

Jenkins 2.0

2016/04/26にJenkins 2.0がリリースされてから1年近くが経ちました。

リリース当初は、正直2.0のメリットをほとんど感じていませんでした。というのも、2.0の目玉であったPipeline Pluginは実は1.x系でもその時点の2.0とほぼ同等の機能が使えたのです。そうなるとUI変更ぐらいしか取り上げる点がなく、そこまでインパクトのある変更ではなかったため積極的にバージョンを上げることはしませんでした。

しかし、最近になってJenkins 2.0のPipeline Pluginまわりを調べると、2.0リリース当初と比べて状況は大きく変わっていました。Piepline Pluginとその関連プラグインの発展により、1.xでは不可能だった数々の機能を実現できるようになっていました。

公式ドキュメントやプラグインのwikiは整備されつつあり、Jenkinsコミュニティブログも頻繁に更新され、その新しい機能の全貌がどんどん発信されています。しかし、まだまだ国内ではその機能についての情報が少ないようなので、何回かの記事に分けてJenkins 2.0の最新情報を書いていこうと思います。基本的には、Jenkins 1.xを一通り触ったことがある人向けです。

今回は、Dockerを使った環境構築について書きます。

続きを読む

今年読んでよかった本4冊【2016年版】

2016年に読んでよかった書籍をまとめておきます。

Work Rules!

ワーク・ルールズ!―君の生き方とリーダーシップを変える

ワーク・ルールズ!―君の生き方とリーダーシップを変える

Googleの人事が採用、育成、評価について書いた本です。

人事関連の仕事というとエンジニア的には苦手な人とのコミュニケーションとか心の話とかになりがちだと思っていたのですが、この本はできるだけ具体的なデータを使って人事という仕事を分析しています。人事をGoogleがエンジニアリングするとこうなりましたという内容で、最初から最後まで飽きることなく読み切ることができました。

もちろんGoogleだからできている部分もあるとは思うのですべてを鵜呑みにすればいいというわけではないですが、たいていの組織ではこの本から得られる学びがあるのではないかと思います。人事やエンジニアの人におすすめできる本です。

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

ソフトウェア開発者がよりよい人生を過ごすためのノウハウをまとめた一冊です。一言で表すと、エンジニア向けの自己啓発書です。

この本の著者の体験に依るところがかなり大きいので、書かれている内容についてはそのまま受け取らないほうがいい部分も多いです。自分は、不動産で儲けているノウハウのあたりはかなり生存者バイアスがかかっているのではと感じました。

一方、これまであまり触れられてこなかったエンジニアのセルフブランディングや仕事の効率化、運動、料理、果ては恋愛といった人生のあらゆる側面を改善するためのノウハウが詰まっているのは間違いないです。できる限り科学的なエビデンスなども合わせて書かれていて、それぞれの項目についての分量は少なめでも十分な内容となっています。

著者がかなりストイックなので書かれていることを誰もが完璧に実現できるとは言えないですが、日々の生活を見直したいエンジニアにおすすめです。

人を動かす

人を動かす 文庫版

人を動かす 文庫版

前に感想を書きましたが、人間関係を円滑にするための原則について書かれた自己啓発書です。ひょっとしたら、自分は自己啓発書好きなのかもしれませんね。。

誰もが自分を大切に思われたがっているというところがこの本の核になっていると思います。正直この本を読めば書かれてることを実践できるというものでもないですが、人とのコミュニケーションに課題を感じている人は読んで損はないと思います。自分もまだまだ実践できてないので、また読み直したいと思います。

ファシリテーションの教科書

ファシリテーションの教科書: 組織を活性化させるコミュニケーションとリーダーシップ

ファシリテーションの教科書: 組織を活性化させるコミュニケーションとリーダーシップ

会議や議論でのファシリテーション手法について書かれた一冊です。

事前の『仕込み』と実際の会議での『さばき』の大きく2つについて書かれています。論理的な部分と感情的な部分の両方についてうまくバランスをとって書かれている印象で、あまりファシリテーションに慣れていないけど今後は必要になるという人におすすめです。

自分も正直こういう分野は得意じゃないですが、この本のおかげで事前に把握しておくべきことや議論中に気をつけるべきことが自分の中で形に落とし込めたのでよかったです。

まとめ

今年読んでよかった本について簡単にまとめました。今年は正直あまり読書していなかったので、おすすめできる本も少なかったです。積ん読してる本もいくつか溜まってきてるので、少しずつでも読書する習慣を作り直さないといけないと感じています。

なぜSeleniumテストは不安定なのかとその対策

この記事は、Selenium/Appium Advent Calendar 2016の18日目の記事です。17日目は、xshsakuさんのAppiumとSTFを使ったAndroid実機テストでした。

はじめに

Seleniumテストを運用する上で安定性は大事です。テストが不具合以外の原因で頻繁に失敗してしまうと、チームメンバーは段々テスト結果を気にかけなくなってしまいます。そうなってしまうと、いざ不具合でテストが落ちても気づかれずに後回しになってしまう恐れがあります。自動テストの目的が問題の早期発見であることを考えると、これは深刻な問題になります。

この記事では、Seleniumテストが不安定になりやすい要因とその対策を、自分の経験の中からまとめてみます。

続きを読む

JavaScript in Selenium Test (3): selenium-webdriverをCircleCIで動かす

概要

前回: JavaScript in Selenium Test (2): selenium-webdriverでhookとページオブジェクト

今回は、前回までに実装したテストをCircleCIに乗せてみようと思います。

CircleCI

これまでのテストが入ったリポジトリをCircleCIで有効化してみました。circle.ymlを置かなくても npm test が自動で実行されるのでそのまま動くかと思われましたが、次のようなエラーになりました。

npm test

> selenium-webdriver-samples@1.0.0 test /home/ubuntu/selenium-webdriver-samples
> mocha --require intelli-espower-loader --timeout 300000

SyntaxError: Unexpected token ...
    ...

npm install のログを見てみると、どうやらselenium-webdriverが最新のLTSのnodeのバージョンに依存しているようです。

npm install
WARN engine selenium-webdriver@3.0.1: wanted: {"node":">= 6.9.0"} (current: {"node":"4.2.6","npm":"2.14.12"})

というわけで、次のように circle.yml を記述してnodeのバージョンを指定します。CircleCIのドキュメントを見ると6.1.0までしか対応してなさそうなのですが、どうやら実際にはLTSまで対応しているらしいことがコミュニティに書かれていました

machine:
  node:
    version: 6.9.1

これでグリーンになりました。CircleCIはデフォルトでchromedriverへのパスも通っているので、最小限の設定でSeleniumテストを動かすことができます。

しかし、Test Summaryを見てみるとまだなにも表示されていません。CircleCIにテスト結果を拾ってもらうためには、 $CIRCLE_TEST_REPORTS 環境変数で指定できるディレクトリ下にJUnit形式のXMLファイルを置かないといけません。このために、まず mocha-junit-reporter パッケージをインストールします。

npm install mocha-junit-reporter --save-dev

さらに、 package.jsonnpm test コマンドの内容を修正します。

  "scripts": {
    "test": "./node_modules/.bin/mocha --reporter mocha-junit-reporter --require intelli-espower-loader --timeout 300000"
  },

そして、 circle.yml で環境変数を設定してmochaのテスト結果出力先を設定します。

machine:
  node:
    version: 6.9.1
  environment:
    MOCHA_FILE: $CIRCLE_TEST_REPORTS/junit/test-result.xml

すると、無事にTest Summaryにテスト結果が表示されるようになりました。

Your build ran 1 tests in junit with 0 failures
Slowest test: should work Reserve App should work (took 1.66 seconds).

今回の変更のプルリクエストを作成したところ、ちゃんとCircleCIのチェックの結果がリポジトリ上で確認できました。

f:id:miya-jan:20161206000800p:plain

念のために失敗させたらちゃんと赤くなったので、今回はこれにて完成です。CircleCIの設定の簡単さを実感できました。

まとめ

今回は、selenium-webdriverで記述したSeleniumテストをCircleCI上で動かしてみました。CircleCIが優秀なので設定に困ることはほとんどありませんでした。

今回の修正もGitHubのサンプルリポジトリに取り込んであるので、ご自由にお使いください。

次回は、Seleniumテストで重要になりやすいテストの並列実行について書こうかと思います。