Selenium実践入門を献本いただきました!

Selenium実践入門を技術評論社様から献本いただきました。ありがとうございます!(って、献本いただくって言い方は、あまりよくないんでしたっけ?)

Selenium実践入門 ―― 自動化による継続的なブラウザテスト (WEB+DB PRESS plus)

Selenium実践入門 ―― 自動化による継続的なブラウザテスト (WEB+DB PRESS plus)

以前仕事でGeb - Very Groovy Browser Automationを使っていたのですが、残念ながらメンテナンスを続けることができずに、途中でやめてしまったという苦い経験をしていました。ですが、とある事情から最近また使いたいなと思ってたところなので、個人的にすごくありがたいタイミングでした。


本書は、以下のような5部構成になっています。一度さくっと目を通しておいて、細かいところは実践しようとした際に本書をリファレンスとして活用するのがいいのかなと感じました。

  • Part 1 Seleniumの基礎知識
  • Part 2 WebDriver
  • Part 3 便利なライブラリ
  • Part 4 Seleniumのさまざまな活用方法
  • Part 5 実践的な運用

以下、いくつか気になった点をピックアップ。

ログ取得API

「現在ベータ版です」という補足もある通り、以前はなかった機能だと思いますが、すごく便利そうに思いました。コンソールに出力されたログを取得できるようです。具体的な利用シーンは、JSのエラーや画像などのリソース読み込みエラーの検知に使えそうだなと。

以前Gebのスクリプトをメンテできなくなったと触れましたが、その原因の一つが(少数のエンジニアしかいない状況で)Gebで細かいレベルのテストもしようとして、結局メンテがつらくなったということがありました。で、次やる場合はスモークテストに絞って主要パスだけを通すようなものを想定しているのですが、それでも最低限JSエラーや画像読み込みエラーなどは拾いたいと思ってます。そのときに、さくっと利用できるかなと想定してます。

FluentLenium

github.com
FluentLeniumというのも、初めて知りました。GebのようにSeleniumを手軽に書けるらしく、Play Frameworkでも採用されてるようです。

以前はGroovyの気軽さが好きでGebを選択した(もしかしたら、最初に導入したのは同僚だったかもしれないけど)のですが、今はJava8でJavaもだいぶ気軽に書ける部分も増えてきたし、やっぱりうちの社内だとJava知ってる人の方が多いので、今度はこっち使ってみようと考えています。

Jenkins Selenium Plugin

JenkinsのSelenium Pluginは、ソースコードはちょくちょく修正されてるけどリリースされてないから、ソースコードを自分でビルドしましょうって話。ただ、ちょっと試すのにさすがにそれはツライ気はしてます。で、自分で試してはいないのですが、Selenium PluginのGitHubリポジトリと紐付いてるCloudBeesのジョブに、ビルドの成果物としてhpiファイルが保存されているんですよね。

今現在のlastBuild(#55)は、masterをビルドしたものではなくこのプルリクエストをビルドしたものですが、このプルリクエストはバージョン上げてるだけっぽいので、これ使っても問題ないんじゃないかなあと推測。だれか検証してくれないかしら(著者のどなたかとか)

サイボウズの事例 - トラブル対応の属人性

属人性を避けるという基本方針を考慮しつつ、(プロダクト本体の問題とは直接関係ない)テスト環境依存のトラブル対応まで全員が対処できる必要があるのか?という問題提起が、事例紹介の最後にされてました。

この辺は、Jenkins職人とされている自分もまさに直面しているところです。今のところの自分の認識では、全員が対処できる必要はなくて数人が対処できるようになっておくぐらいが現実的なところかなというのは考えています。今後メンバーが更に増えてきたら、また認識も変わるかもしれませんけどね。

Dockerエキスパート養成読本を(無理やり)献本いただきました!

@ と @ が寄稿したというのを聞いたので、親愛なる米村さんに「欲しいです!」といったら、献本もらいました。ありがとうございます!

Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!] (Software Design plus)

Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!] (Software Design plus)



巻頭記事

「Dockerプラットフォームがもたらすもの」というタイトルで、Docker単体だけでなく、Dockerをサポートする周りのシステムやツールがどんな状況にあるのかが完結にまとめてあり、ここを抑えておけば最近のDocker事情をある程度追えました。

その代わり、Docker自体の基本的な話、例えばどういう仕組みでどういうメリットがあるかなどの説明はあまりなく、いきなり現状の話に入るので、まったくDockerを知らない人は別途他の本や記事でおさえておいたほうがいいかもしれません。

基本編

基本編は、Dockerの基礎と、コンテナクラスタ管理システムのKubernetesの紹介です。Dockerの基礎は割りと色々なところで見たことはあったのですが、Kubernetesはあまりちゃんと調べたことがなかったので、勉強になりました。(とは言っても、まだ概要さらりといったレベルで、実際どんな感じで使おうかというイメージはあまり湧いていないのですが。。。)

github.com

実践編

[開発者のための]試して分かるDocker活用術

1章目では、Dockernizeされたツールなどを色々紹介していました。記事中ではRedmineやGitlabなどをDockerコンテナ上でたちあげるという例が掲載されていましたが、これは自分が携わってる仕事の中でも生かせるよなーというのをイメージしながら読んでました。あと、各Dockerコンテナをプロキシしてくれるnginx-proxyというのは知らなかったので、知れてよかったです。

github.com

そうそう、コラムの「Dockerの使いどころ」も、課題点の"進化スピードが早過ぎるためにメンテナンスが追いつかない"や、使いどころなど共感できるところが多かったです。

Dockerによる環境構築の自動化入門

2章目は、Dockerfileでのimage buildと、後半はHashicorp製品でのDockerの取り扱いについてでした。VagrantやPackerなどを会社に導入したことや今はTerraformを狙ってることもあって、個人的にHashicorpツールは注目してるのですが、ちょっとこの記事だけでは無理してHashicorpツールからDockerを当たらずともよいのかな、という印象を受けました。

[ビルドとテストを自動化]Drone入門

3章は、おまちかね @mopemope さんによるDockerを使ったCIツール Droneの紹介です。僕が得意とするところがCIツールやJenkinsなこともあって、前々からDroneは調べてみたいやつでした。

github.com

今自社で使ってるやつはもちろんJenkinsで、今すぐこれを乗り換えようとは正直考えていないのですが、Jenkinsだといくつかしんどい部分も当然あるわけです。その内の一つが、ビルド環境の構築部分で、そこにDockerfileを使ったDockerでビルド環境の構築をシステム化しようと今試みています。

そういう観点で、Docker環境が前提のDroneがどういうふうに解決してるかは参考になりました。特に、"services" という定義でデータベースなどの外部リソースを指定できるようになってること、"cache"定義で依存ライブラリを毎回ダウンロードするのではなくキャッシュして使いまわせるようになってること、などです。この辺は、まさにDocker on Jenkinsをトライしてるときに、まさに直面してた問題でした。

また、Droneとは直接関係ないけど、ローカルホストを簡単に外部からアクセス可能にするngrokは色々使いドコロありそうだなというのを再確認しました。(ブラウザキャッシュに残ってたから以前調べたことあったはずだけど、完全に忘れてた・・・)

Gunosyが本気で試したDocker投入・検証記

最後の章は、Gunoryさんの体験記です。

この記事を読む前から、プロダクション環境に投入するのは正直大変だろうなと考えていたところに、この記事を読んでより一層面倒だなと感じたところが正直なところです。と思いながら読み進めてたら、最後の追記で

もともと検討・想定していた運用の多くはAmazon Web Servicesが提供するOpsworksでの運用に切り替えられ、Dockerの利用は非常に限定的な状態です。

で、そうだよな〜と納得してしまいました。現在は、ffmpegを使った動画変換処理はDocker運用されてるようですが、この辺は確かCookpadさんも似たようなこと言ってて、セットアップが面倒なものにはすごい効果的だよなというのを感じました。

ともあれ、Docker移行は局所的になったとは言え、やってみないと分からないこともあるだろうし、ある種ネガティブに受け取られる可能性がある事例もこうやって公開してくれることは、すごく参考になってありがたかったです。

全体的な所感

今現在のDocker事情や活用例などを知りたい方は、非常に参考になると思います。現在のDockerで何ができるのか、どういう風に使えるかをイメージするのに、いい本だと思いました。

惜しむらくは、もうちょっと本全体を通して一貫性というかスムーズな感じで、記事を提供してもらえるといいかなと感じました。例えば、Dockerfileの基本的な文法についての話が章をまたいで何回か出てきたり。この辺は個々の執筆者だけでは気づきにくいところだと思うので、編集者がコントロールしてもらえるとよりよくなるかなと。

こちらからは以上です。

「エンジニア目線での対外ブランディング ~ヌーラボ編~」というタイトルで登壇します

発表者紹介の項目で、是が非でもと推しメンについての項を追加してもらった ikikko です、こんにちは。

3/26 (木) 19:30 から、池袋のアクロビジョン様の会場で登壇してくるので、その裏話的なものを紹介します。


テーマ決めにあたっての思惑

私が今まで発表してきた資料を主催のアクロビジョン様がご覧になり、メールでお声がけいただいたのが、最初の発端です。お話を聞いたとき、どんな内容で発表するかちょっと迷いました。

今まで私が発表してきた中では、大きく以下の2つの切り口で話すことが多かったです。

  1. ヌーラボ開発プロセス(上のスライドなど)
  2. ヌーラボにおけるインフラ・自動化周りの事例紹介(下のスライドなど)

ですが、上記の切り口では何回か話してきて、自分の中ではある程度一段落したというのはありました。上記のテーマだったらある程度参加者にも満足してもらえるだろうという確信はあったのですが、もう少し広げるためにも別のテーマでもやってみたいなと思っていたところでした。

で、少し目線を変えて、「対外ブランディング」的なところをテーマに考えてみようかなと思い立った次第です。

弊社、もしくはうちのサービスである Backlog / Cacoo / Typetalk は、ありがたいことにある程度は認知されるようになってきたのではと感じています。その理由として、サービス自体いいものを提供しようとしている・できているというのもあると思いますが、「なんかよさそう」とイメージ的なところもあるのではと思っています。

後者のイメージ戦略というか、その辺の内容は私自身もしくはうちの会社の中でもまだ具体的に落とし込めていないところもあったので、この機会に考えてみたいと思いました。最初からそうとは意図していない、あとづけ的な内容もあるのですが、私・私の会社での取り組みを紹介したいと思います。

# 余談ですが、単に「ブランディング」だけだと、マーケティング畑の人とかにひっかかりそうでちょっとこちらの想定とは違うので、「エンジニア目線」というのを入れました。

発表者の立ち位置

最初に断っておきますが、私は技術統括とかではなく、単なる1エンジニアです。1エンジニアとして、やれることが発表の中心になります。

例えばイメージ戦略に関して、少し似たような話として、クックパッドさんの採用ブランディング という話もあります。このスライド中では、主にCTOという立ち位置からの話になってますが、大多数の人はCTOという立場ではない人でしょう。そのような人たちにも実践できる内容を、自身の経験からお話したいと思います。

また、先日のJenkins ユーザカンファレンスなど、私はプライベートでオープンソースコミュニティにも関わっているのですが、その辺の話も取り入れてお話できたらと思ってます。


というわけで、興味をひかれたみなさんはこぞって参加ください!

生存戦略、考えてます (2014)

出張・発表・出張が続いた10月のプチ忙しさを抜けて、11月は今のところ特に予定が入ってなくて少し落ち着いています。いい機会なので、前々からちょいちょい考えてた、自分がこの先どういう方向にスキルを伸ばしていくべきかを整理して書き出してみようと思います。

http://dic.nicovideo.jp/oekaki/383663.png

(※:「生存戦略」でひっかかった画像貼ってますが、元ネタ全然知りません (´・ω・`) )



ベースの考え

身の程をわきまえてるというか、基本的に自分がプログラミング的な要素で秀でてるとは思ってません。中の中か、下手したら中の下ぐらいかも。ただ、記憶力や地道に続ける能力、それと ストーカー力 情報追跡力は割りとあるかなと思ってるので、その辺は活かしたいところ。

で、凡人の自分が生きていくためには、(会社の)現状を考慮してニッチだけど必要なところをうまく補っていく方向性がいいのかなと考えています。それが、自分が強い分野 or 興味ある分野だったらよりいいですね。

そういうわけで、今伸ばそうとしている点は主に3つ。

開発に関する裏方的なところを整備する

ここ数年の自分の役割である、Jenkinsのお守りもその一つかな。

上で少し述べたように、プログラミング的なところがあまり強くないので、がんがんアプリを作っていくという能力はあまりありません。そういう人は別にいるので、自分はその人が開発しやすいように、裏方的なところを整備していこうと考えています。

具体的には、ビルドスクリプトやCI環境整えたりテスト整えたり、もろもろの環境を整備したり。裏方整備にはある程度インフラ面の知識も必要になってくるので、その辺もちょいちょい関与しようとしているところです。

英語のWriting的なところを鍛える


↑にもあるように、自分の会社はグローバル化してきています。となると、共通言語である英語は必須になってきてるんですよね。ただ、英語といっても広いので、Listening / Reading / Writing / Speaking の中からWriting的な面を伸ばしていけたらなと思っています。

まあうちは普通の日本人が作った会社なので、英語もみんながみんなできるわけじゃありません。何人かは問題なく意思疎通できる人もいるのですが、大多数の人は四苦八苦して今英語を勉強してるところ。でも、みんな英会話を主体にやってるようなので、ここは逆張り的に英作文のスキルを鍛えようかと*1。サービスの他言語化対応とか、英語ブログとかに生かせると思ってます。

その一環として、先月終わりからLang-8を始めました*2。日記的なものでいいので、できるだけ毎日英文書いていこうと思ってます。まだ全然添削されてないので、添削できる方はしてもらえると嬉しいです>< この調子で全然添削されないなら、有料にあげようかなとも考え中。。


対外発信的なところを積極的に行っていく

対外発信のやり方も色々あると思うけど、小さい方からブログ・イベントのスピーカー、ちょっと大きい物だと記事執筆とか。

うちはシャイな人も多いのと、人数不足でなかなかそっち方面に手回せていないのもあって、対外発信的なところがまだまだだと、個人的には思っています。最近は某エバンジェリストがすごい発信してくれてるのもありますが、逆に頼りっきりになってるところも。

自分より全然できるエンジニアの方もいるのに、それが知られてないのはもったいないと思ってます。なので、そのできるエンジニアがやってくれたことを、自分の中でしっかり噛み砕いた後に(さも自分がやったかのようにドヤ顔で)発信して知らしめていけたらなーと。


タイトルに"2014"とあるように、将来また方向性が変わってくるかもしれません。それでも、現時点ではこんな感じで考えてますよと整理して残しておくのは、決して無駄ではないと思ってます。

ikikko先生の今後の活躍を乞うご期待ください!

*1:もちろん、英会話もまだまだなので、最低限はできるようにならないとなのですが。

*2:どうやらサービス登録だけは2009年にやってたみたいだけど。

Backlog Template Issueで親課題を指定できるようにしました

Backlog Template Issue for Google Apps Script をリリースしました - @ikikko のはてなブログでの1stリリースから4年、作者でさえも半分放置してた Backlog Template Issue が今回バージョンアップしました!

f:id:ikikko:20140803013103j:plain

今回のバージョンアップの内容は、親課題を指定できるようになったことです。親課題の列を追加してますので、こちらに親課題の課題キーを直接入力することもできますし、"*" を入力しておくとシート内で登録しようとしている一つ上の行の課題を親課題とすることができます。

以前のバージョンをお使いの方は、こちらから再度テンプレートをコピーし直してください。


やっつけとまでは言わないけど、ものすごい使い勝手がいいわけでもないしUIは微妙だしですが、割と使ってもらえてるんですよね、これ。ただ、ソースぐだぐだというのをはじめとして、あまり修正にテンションあがるものではないです。なので、おそらく今後致命的なバグ修正以外では更新がされないだろうと思います。すいません。

ただ、pull request とか更新のネタとなるものを投げてもらえれば、少しは心が動くかも。今回のも、もとはと言えばこちらでpull requestとしてあげられたものから始まりましたし。

あれから一日一時間の英語学習を欠かしたことがない

なんてことはありません。あまりにも眠い日とかリリースが重なると、まったく英語の時間を取れないこともあります。まあ月に3, 4日ですかね。神(じん)にはなれないようです。

http://livedoor.blogimg.jp/katsu919nara/imgs/a/0/a05b4172.jpg


ダンコたる決意で英語を勉強してます - @ikikko のはてなブログ から半年ちょい、まだ英語の勉強続けてます。ちょっと中だるみしてた時期もあったのですが、最近また盛り返してきました。

今やってること

英会話レッスン

前回話した英会話レッスンは引き続きやってます。先生との会話に慣れてきたことや、瞬間英作文の効果が出ていることなどから、昔よりはスムーズに話ができるようになってきた気がします。まあ、他のネイティブの会話は聞き取れないことが多いし、教材も初見では聞き取れないのが多いので、まだまだ使えるレベルまで達してないのは分かりきってますが。

あと、3月ごろ妻から「数ヶ月英語勉強してるけど、まだまだ日本人発音だよね」と痛い言葉を言われたので、ムキーッとなって発音の本を買って1ヶ月半ぐらいやりました(時間にしたら20時間弱だけど)。その甲斐あってか、発音についても「前よりよくなったよ」って先生に褒められることも増えてきました。全部社交辞令かもしれませんが (´・ω・`)

英語耳[改訂・新CD版] 発音ができるとリスニングができる

英語耳[改訂・新CD版] 発音ができるとリスニングができる

教材

前回から引き続き、「瞬間英作文」「音読パッケージ」。前のやつを一通り終えたので、シリーズの次の教材をやってます。

ポンポン話すための瞬間英作文 パターン・プラクティス(CD付) (CD BOOK)

ポンポン話すための瞬間英作文 パターン・プラクティス(CD付) (CD BOOK)

ぐんぐん英語力がアップする音読パッケージトレーニング 中級レベル(CD BOOK)

ぐんぐん英語力がアップする音読パッケージトレーニング 中級レベル(CD BOOK)

あとは、最近は「文法」の本として、評判がよかったForestをやってます。これが結構面白くて、1章1時間以上かかることもあるのですがつい読んでしまったり。形から入る派なので、こういう系統の方が向いてるのかもしれません。

総合英語Forest 7th Edition

総合英語Forest 7th Edition

学習時間

引き続きStudyPlusで。2014年の勉強ログはこんな感じ。前述したとおり、段々中だるみにさしかかってたのですが、今月から始めた文法の本がおもしろくて、また盛り返してきました。

あと、今気づきましたが、ようやく累計時間が200h超えてるみたい。10ヶ月ぐらいで200時間ということは、1ヶ月あたり20時間ぐらいか。んー、一日一時間もやれてないと考えると、もうちょいがんばらんとかな。


前回のエントリから、スラムダンクつながりでネタ画像を探してたのですが、なかなかしっくりくるものがなく今に至りました。ネタの無理矢理感はいつも以上ですが、大目に見てやってください (・∀・)

あと、英語の勉強と並行してScalaもやりたいなと思ってるのですが、平日帰ってきてから英語に1時間~1時間半ぐらい取られると、正直それ以上捻出するのはちょっとしんどいです。単なるinput的な学習だけじゃなくて、新しいもの作ったりとか手を動かす作業もしないと、だれがちですし。

精神と時の部屋が欲しいというのが、最近の切実な要望です。

第8弾週末ランサーズで「Infrastructure as Code」をテーマに発表&ハンズオンしてきました

5/24土曜日に、ランサーズさんが開催している「週末ランサーズ」というイベントで、「Infrastructure as Code」をテーマに発表&ハンズオンしてきました。参加者の皆様、会場提供のランサーズさん、ありがとうございます!

資料

セッションの発表資料はこちら。

ハンズオンの手順はこちらです。こちらのファイルをダウンロードして展開すれば、下記の手順にのっとって試すことができます。

  1. 事前準備 / Vagrant の基礎
  2. プロビジョニング (Chef)
  3. テスト (serverspec)
  4. 継続的インテグレーション (Jenkins)

ちなみに、当日は必要なファイルやツールインストーラを、予めUSBメモリに入れておき、始まる前とか最初のセッション中にそのUSBメモリを回してコピーしてもらう方式を取ったのですが、このアイデアは @さんのVagrant体験入門ハンズオンの資料を公開します - Shin x blogパクリ インスパイアさせてもらいました。ありがとうございます!

感想

ハンズオンでは、Vagrant / Chef / serverspec / Jenkins を取り扱ったのですが、それぞれをちょっとずつ触った人はいても、全部を連携して使ってる人はそういないだろうと推測して、「各ツールの連携を実践する」というところを主題としました。参加者の方と話しても、この狙いはわりとありだったのではと思っています。その分、各ツールでやってる事自体はすごく単純で、知ってる人がやれば数分で実践できる初歩的な内容です。

ただ、タイミングが非常に悪く、nokogiriの問題でうまく Vagrantプラグインがインストールできないという人がいました。ちょうど数日前に業務中にも遭遇していたので、下記のコマンドで回避できるかと思います。(ただ、nokogiri は ruby 1.9 じゃないとすんなり入らない?あまり ruby に詳しくなくて、かつ本質的じゃないところなので深追いしてませんが。)

(sudo) gem install nokogiri -v '1.6.2.1'
export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

ハンズオンの主催は初めてで、結構資料作りに苦労しました。自分の環境だけでなく、他の人の環境でも動くように考えるのは大変ですね。特に、普段使いしていない Windows とか Windows とか Windows とか。。。あとは、ハンズオンの講師が一人だけだと、参加者のフォローアップもしつつ全体の進行もしなければいけないので、かなり大変というか無茶だと分かりました。TAの方をアサインしておくべきでしたね。

その他の感想をざっくり。

参加者の方の感想ブログはお二方見つけましたが、ある程度は満足していただけたようで、一安心。


そこそこ時間かけたこともあって、今回とりあげたツールを一通り触ってみるという目的ではこの資料結構いいものができたんではないでしょうか。ほかでも使っていただければ嬉しいですし、もし他でも発表して欲しいというのがあれば乗り込みますので、@ などなどでご連絡ください!