Hatena::ブログ(Diary)

川口耕介の日記

2015/10/02

[cloudbees][jenkins] CloudBeesは日本で技術者を募集しています

趣味の日曜プロジェクトとして始めたJenkinsも、もう10年を超え、世界で10万件以上のインストールベースと40万台規模のビルドクラスタを誇る巨大なプロジェクトになりました。今でもまだ年率約30%の成長を続けており、これも全て、日本を始め世界のユーザー&開発者コミュニティのおかげです。


CloudBeesでは、2010年頃からJenkins関連の製品・サービス・サポートを提供する会社で働いています。僕自身は、CTOという肩書で、Jenkinsの普及を後押ししたり大きな企業での導入を手伝ったりと、色々な事をやっています。


おかげさまで会社の中の人の名前が全員覚えられないくらいの規模に成長し、主に北米とヨーロッパを中心にビジネスを展開しています。昨年度は前年比売上が約3倍となり、25億円の資金調達もしました。技術部門も、世界中の優秀な人をほとんど場所を問わずに雇っており、アメリカは勿論のことスウェーデンアイルランドイギリスドイツフランスロシアハンガリーオーストラリアニュージーランドなどCloudBees技術部に日の沈む時なしという勢いです。


そんな中で唯一心残りだったのは、日本のエンジニアを雇う体制が整っていないことだったのですが、今度2016年に向けて新しいプロジェクトを立ち上げるにあたって、遂にこの「バグ」を修正しました。ようやっと、これで日本の技術者が如何に優秀かというのを世界に見せつけることができます。


そこで!!


CloudBeesでは、以下の2つの職種で、世界を股にかけて活躍したい日本の技術者を募集しています。我こそはという方はぜひ僕宛(kk at kohsuke dot org)にメールを送ってください。


英語でのコミュニケーションはどちらも必須ですが、あまり自信がないという方も多いかなと思います。僕もサポートしますし、入社後に勉強してもらえる気さえあれば何とかなると思うので、あまり悩まないで挑戦してみてください。


シニアJenkinsエンジニア

技術部に所属して開発にあたります。


職責

  • Jenkinsのコア、プラグイン、及び関連システムの設計、開発、運用します
  • Product managersと協力してアイディアを動くソフトウェアにします
  • 大きな機能エリアを管掌し、アーキテクチャから実装までの全工程を主体的に遂行します
  • Jenkinsプロジェクトにも関与してバグ修正や機能追加をします
  • サポートチームが難しい問題を解決するのに協力します

応募要件

  • Javaの開発に関する知識と経験
  • Jenkinsのコアやプラグインに関する知識
  • 高い問題解決能力と英語でのコミュニケーションスキル

ソリューション・アーキテクト

営業部に所属してパートナー会社や営業の人と協力して、お客様の問題をCloudBeesの製品を使って解決する技術的なアドバイスや提案をします。技術に関する造詣も必要ですが、営業にフォーカスした仕事のため、コミュニケーション能力が重視され、クオータもあり、会社の業績に直結する花型の仕事です。


職責

  • 営業、サポート、技術者などとお客様の間の仲介をします
  • 営業の人がお客様と電話やメールのやりとりをするのに協力します
  • 弊社の製品をよく理解し、訴求点や競合製品との違いをよく理解します
  • 製品のデモをします

応募要件

  • ソフトウェア開発、継続的インテグレーション、DevOps等技術に関する一定の知識
  • お客様の要件・環境を理解して製品の機能と結びつけ、売上につなげる力
  • コミュニケーションスキル(英語も含む)
  • 東京近郊在住

なぜCloudBeesなのか?

お堅い大企業で働くよりも、シリコンバレーのスタートアップの方が個人の能力を活かせ、短期間に圧倒的に面白い経験が出来ます。日本にもスタートアップはありますが、世界で活躍している企業は本当に稀です。CloudBeesはその点「本場」の会社です。


また、世界中の粒選りの優秀な技術者と(バーチャルに)机を並べて作業できます。彼らとの仕事を通じて得られる多くの経験と、自分の技術力が世界で通用するという自信はかけがえのないものです。


それでいて、日本全国津々浦々、場所を問わず自宅で仕事することが出来ます。時間も自由が効き、気が向いたらぷいっと映画を見に行ったりできます。

2013/04/29

[book] コーディングを支える技術

「コーディングを支える技術」という本を読みました。著者の西尾さんは、未踏ソフトウェアの関連でお会いしたことがあって、また、ブログにもいつも面白いことが書かれています。


この本も実に西尾さんならでは、という感じです。プログラミング言語そのものにこれだけの興味を持って、色々な言語に関する知識を貪欲に吸収し、そして一冊の本を書いてしまうというのは中々普通の人にはできないと思います。脱帽です。


この本はプログラミングの初級者よりも、多分中級者向けに書かれた本なのでしょう。プログラミングを最初に覚える時は、多分みんな写経(本書のキーワードの一つです)から始めることでしょう。とりあえず決まり事は深く考えずに受け入れて先に進み、知識と知識が繋がって密な知識のネットワークができてからようやっと決まり事の意味を立ち返って理解を深めることができるわけですから。制御構造にしろ型にしろ、プログラミング言語の基本となる概念というのは、ある程度自分で使ってみないとまずは始まらないものです。


そう割りきって、ぜひ西尾さんには初級者向けの説明は割愛して、本は薄くてもいいので内容を濃くした本を書いて欲しかった、と個人的には思うのですが、やはり書籍という媒体だとあんまりニッチすぎる内容はできないのかな...。



さて、この本の帯には、色々な言語を比較するとか、言語に共通の知識を身につけるとか、そういう風に書かれています。でも、僕はそういった視点はこの本の本質を捉えていないように思います。


というのも、仕事でプログラミングをしている人達の間では、言語の選択の自由は限られているでしょうし、言語の技術的な仕様というのはその決定に際しての要素の一つに過ぎないからです。そして、よくできた概念というのはその成り立ちを学ばなくても理解できるものです。ちょうどアラビア数字の記法を覚えるためにローマ数字を覚える必要がないように。


じゃあ、僕に言わせればこの本は断然何が面白いかというと、普段は当然だと思って気にも留めていない事が実は全然当たり前じゃなかったとわかる、という足元に穴が開く感を体験するところです。その点、第七章の名前の話なんかは白眉です。だって変数に名前をつけるとか、みんな当然だと思っているでしょう。


日常を構成するものを分解して再構築するという体験が面白いのは、海外暮らしが面白いのにも共通するところがありますよね。食器をつかってご飯を食べるのは全然当たり前じゃない!とか。


プログラミングに話をもどすと、僕にとって一番「当たり前のことが実は当たり前でなかった」体験は、なんといってもメモリモデルです。僕はアセンブラC++と進んだので、僕にとってはメモリというものは0から順番に番号が振ってあって、その番地を使ってMOV AX,[BX+3]などとアクセスするものだったわけです。ハードウェアの仕組みといいCPUの仕組みといい、メモリに番地が振ってあるのは天地開闢以来の当然の決まり事だと思っていました。


ところが、Javaを学んでみると、メモリに番地がある、という決まり事はどこかにいってしまい、それどころか番地を数字として取り扱ったり任意の番地のメモリにアクセスする機能は存在しないわけです。そして、この単純な機能を取り除くことによって、アクセス制御だのバッファオーバーフローの阻止だの、プログラミング環境としてとても優れた幾つかの性質を得ることができます。当時の僕にとってはそれなりの「発見」でした。


大人になってからはこういった「発見」に感動する機会は減りましたが、こういう「発見」を面白いと思う人はぜひ本屋さんでチラ見してみたらいいと思います。

2013/03/14

電子立国日本の自叙伝は本当に素晴らしい

子供の学校の古本市をちらちらみていたら、電子立国日本の自叙伝が全巻セットでたった1$で売られていたので、買ってきました。

NHK 電子立国日本の自叙伝〈上〉

NHK 電子立国日本の自叙伝〈上〉

僕はソフトウェアの人なのですが、中学校の頃ちょっとだけ電子工作をやっていたこともあって半導体の話は少しはわかるし、何よりもここに登場する技術者達の生き様があまりに格好良くて、毎晩深夜になるまで読みふけっています。DVD全巻セットも2万円くらいで買えるみたいなので、買おうか悩んでいるところです。プロジェクトXも嫌いではないけれど、ちょっとドラマ仕立てが過ぎることもなくはありません。その点、この本は本当に素晴らしい。

NHKスペシャル 電子立国 日本の自叙伝 DVD- BOX 全6枚セット

NHKスペシャル 電子立国 日本の自叙伝 DVD- BOX 全6枚セット

あまりに素晴らしいので、Sunも潰れたことだし、誰かJavaの世界の興亡もこうした本にまとめてくれないかな...と思ったので早速インターネットで探してみたら、


なんと!


ありました!


民明書房刊、タイトルは「Java、その歩み」。著者は不詳で、中古本で第3巻だけをかろうじて入手できました。一部を紹介します。

■第三章 Maven誕生秘話

Mavenの生みの親であるジェイソン・バン・ジルさんをMountain Viewに訪ねた。ジェイソンさんは眼光鋭いカナダ人である。今はMavenの直接の開発からは離れているそうだが、Mavenの事になると鋭い眼光を一層鋭くして語ってくれた。


ーどうしてMavenを作ろうと思ったのですか?

ジェイソン「当時はAnt全盛の時代でしてね。私がその頃コンサルタントとして派遣されていた仕事先でもみんなAntを使ってビルドスクリプトを書いていたんです。これからはMakefileはオワコンだ、ってな調子でね(笑)。ところが、多くの班に別れて作業しているような環境では思ったより効率があがらないように私には思えたんです。」


ー効率があがらない?

ジェイソン「そう。何しろ大きなプログラムを開発していたんでね、そう、300人位はいたかな。だから、両手でも数えきれない位の班が、それぞれの部分を開発していたんです。そうすると、みんながてんでバラバラにビルドスクリプトを書くでしょう。そうすると、同じようなことをしているのにあっという間に全然違うスクリプトができちゃう。


ー1人の人が書くんじゃないですか?

ジェイソン「とても一人じゃ書ききれないですよ、何千行もあるんだし、ビルドスクリプト専属なんてやりたがる人もいなくてね。私も直したことあるけど、良くわからないから適当に誤魔化したりとかね。だから、ビルドスクリプトの部品を共通化してみんなで使ったらいいんじゃないか、って思ったんです。そうすれば、それぞれの班が同じようなことを繰り返さずに済むし、どの班も同じ手順でビルドできたら人を融通しあうのも簡単になるでしょう。だから、最初はそういうところからスタートしたんです。今ではAnt自体にもマクロといって共通部分を部品化する仕組みがありますけどね、私のほうが3年は早かったね。


ー周りの人の反応はどうでしたか?

ジェイソン「最初は私の班と隣りの班のから始めたんです。隣の班の人は私がビルドスクリプトを手伝うといったら鴨がネギしょって来たと思ったみたいでね(笑)、喜んでやらしてくれましたよ。2つの班の共通部分を括り出して行ってね。最初は大変だったけど、2つやったら後はドミノ倒しみたいなもんでうまくいきました。実際にやってみると、うまく部品化するためには班に固有の部分を記述するための方法が必要だとわかってきて、それをPOMと呼ぶことにしました。


ーそれがあの有名なpom.xmlになったんですね

ジェイソン「それはMaven2だからもっと後の話でね。当時はproject.xmlっていう名前だったんですよ。


そういって立ち上がると、ジェイソンさんは引き出しの中を開けてDVDディスクを探し始めた。しばらくして奥のほうから出てきたディスクの中に、当時のプロジェクトが入っていた。

Mavenのところを読んでいたらAntのところも気になったのでちょっとページをめくって見ました。

ーAntは最近は使う人も減ってきているみたいですね

ジェシー「そういう見方もあるとは思います。確かに、antのビルドスクリプトを目にすることは減っていますし、これからもその傾向は続くでしょう。少し寂しい気持ちもないではありません。ですが、目には直接見えないところでantは今もたくさん使われていますよ。例えばGradleというツールをご存知ですか?新しいビルドツールなんですが、これも実際の仕事をしているのはAntですよ。Jenkinsというツールでも使われているし、JSPのコンパイルだってAntを使っているやつがたくさんあるのです。


ー縁の下の力持ちですね

ジェシー「ソフトウェアのビルドにはファイル操作やプロセス操作など、色々OSに依存する処理が必要になります。ですが、Javaは伝統的にそういう処理が嫌いでライブラリを提供していないのです。そのために、AntにはコアのJavaライブラリではできない機能が沢山書かれることになりました。こうしたコードは簡単に置き換えがきかないので、最先端のビルドツールもAntに頼る、というわけなんです。Antを馬鹿にしている人に限って、そういうことに気付いていないんですよ。


ジェシーさんの話しの端々から、彼がAntのことをとても誇りに思っているということが伝わってきた。

ね、面白そうでしょ。全部で何巻あるのか、他の言語のもあるのか、全くわかりませんが、他の巻を書いた人は見つけた人はぜひ教えてください。








(念の為、この本はフィクションで、実在の人物とは何ら関係がありません。)

2012/12/26

JenkinsとGerritによるコードレビュー

今月号のWEB+DB PRESSの特集はコードレビューです。(ちなみに、特集3を書いているのはリアルJenkinsさんことikikkoさんです。Cacooは僕の同僚も使っていて「世界で通用する」というのは本当です。)

特に第二章はまるまるGerritというGit向けのコードレビューツールについて書かれています。Gerritは、こちらでも周りで使っている人が多い、ポピュラーなツールです。


この特集ではJenkinsについては一行だけさらっと書かれているだけですが、Gerritを使うならば、Jenkinsを使わない手はありませんね。特にGerrit Trigger pluginを使うと、サブミットされたコードレビューが自動でテストされてそれがレビューに反映されるという仕組みが実現できます。これによって、メインのブランチにマージされるコードがテストに失敗しないということが保証出来ます。


GerritとGitの組み合わせについては、実にタイムリーなことにこないだ日本語の本が出ています。

入門Jenkins

入門Jenkins

この本は「入門」と書いてありますが、実際はむしろ入門的な内容は最初の一割で終わり :-)、残りは発展的で高度な内容を取り扱った本になっています。Gerritの他にも、Ruby on Rails、Androidアプリの開発など、特定の状況に向けてプラグインを組み合わせる話などになります。著者の一人、太田さんは前回のJenkins勉強会でこの内容について発表をしてくれました


Gerrit+Jenkinsの組み合わせはこちらでもポピュラーです。英語ですが、R. Tyler CroyのJUCでの発表ビデオがあります。

D

2012/11/23

Pyrhon Professional Programming

この本は、Jenkinsコミュニティでいつもお世話になっているさぼてんさんから頂戴した本です。会社はPythonがメインだそうで、ここでの開発方法をまとめたのがこの本、ということみたいです。

Pythonプロフェッショナルプログラミング

Pythonプロフェッショナルプログラミング

Pythonに詳しい人にとっては多分当たり前の事が書いてあるのだと思うのですが、僕自身はあまりPythonでプログラムを書く機会はないので、まさに対象読者層にぴったりです。


なるほど、rvmの代わりにvirtualenvでbundlerの代わりにpipね...という感じで、知っている環境と比べるとスムースに頭に入ります。それにしても、この種のツールの類似性の高さは言語間の垣根を下げるので素晴らしいですね。Javaでも同じような感じのツール群を書いたら面白いんじゃないかと思ってしまいます。いつか暇があったらやるぞ...。


また、Jenkinsの中の人としては、Python開発者がどういう風なツールを使ってどういう風に作業しているかわかるので、「なるほど、こういうツールをサポートすればいいわけね、フムフム」という具合にメモを取りまくりです。これも暇があったらPythonの自動インストーラとかvirtualenvによる環境の自動切り分けとか、ぜひやりたいです。


パッケージの作り方とチーム内での共有の仕方、みたいな話にスペースが割かれているのも大変素晴らしいです。Python入門本というとprintln "Hello world!"とか変数とかみたいな言語仕様の話が多くて、「そんなの仕様書を読めばいいでしょ!」という気になるのですが、この本みたいにウェブ上に散在している部品をどうやって繋ぎ合わせて一人前の環境を作るかというのは、特に他言語からくるプログラマには価値が高いです。


長いこと積んだままでレビューできずにすいませんでした。