この国では犬が

本と芝居とソフトウェア

株式会社アプレッソでは丁寧なJava書いてくれるソフトウェアエンジニアを募集しています

僕が開発者として所属しているアプレッソでは、ソフトウェアエンジニアを絶賛募集中です。*1
事業は(少なくとも、僕が入った 2 年前からあとは)堅調に伸びていて、会社として、個人としてやりたいことも増える一方なのですが、採用活動がなかなか予定通りには進んでいないのが現状です。

要は、(しっかりとソフトウェアエンジニアリングができる、あるいはできるようになろうとする意志と能力がある)人がほしいです。

ぜろゆさん(@zer0_u)の一昨日のエントリ

teafortw0.hatenablog.com

を見て、弊社割と条件合いそうだし、ぜろゆさんでなくても似たような感じで転職したい人はきっといるはず、ということで、ぜろゆさんのリクエストに答えていくようなスタイルで書いてみます。

ぜろゆさんのリクエストに答えてみる

やったことがあること

Java, Clojure

アプレッソの製品は、9 割方 Java で書かれています。
主力の DataSpider Servista という製品のコードの 9 割は Java です。残りの 1 割が C# で、Studio for Web という Web 用のクライアントを作るのに使っています。

Clojure を業務で使う機会は(自力で作ることは不可能ではないですが)今のところないです。
が、(当然)関数型プログラミングの知識・経験は Java でのプログラミングにも役立つので、歓迎されます。

英語(読み)

当然といえば当然ですが、技術情報を調べる際に英語ができるととてもよいです。
また、近年はグローバル展開も視野に入れた活動をしていて、一方で現状アプレッソのエンジニアの多数が英語が得意というわけでもないので、英語ができる人が増えるのは大歓迎です。

文章校閲・校正

アプレッソの製品はエンタープライズ向けパッケージ製品ですが、使いやすさを重視しているので、ドキュメントの整備にも力を入れています。
ただ、専属のテクニカルライターがいるわけではなく、基本的にエンジニアが書いています。全体を見る人がいて、品質を一定水準以上に保つ努力をしています。

といった事情から、文章に強いエンジニアが増えることはやはり大歓迎です。

応用情報技術者資格を持っています

これについては特に言うことはないです。
まあ、基礎が整っているのは(当然)歓迎すべきことです。

やりたいこと

職種:技術職(というよりは営業職以外)

アプレッソでは職種別採用を行っていて、ソフトウェアエンジニアを熱烈募集中です。
ちなみに、テストエンジニアやサポートエンジニアも同時に募集しています。

本人の意思を無視して突然営業にコンバートみたいなことはまずないです。
と同時に、希望すればテストやサポート、セールスエンジニアに転向することも割と柔軟に可能だと思います。(制度があるわけではなく、都度相談ですが)

分野:教育とか、バックオフィスとか、そういう「表に出づらいけど大事なところ」

ぜろゆさんの志向と完全には一致しないのかもしれませんが、エンタープライズ向けパッケージ製品というのはまさに「表に出づらいけど大事なところ」だと思います。
実際、表に出づらいことで、Web 系の華々しいところに比べると、採用活動で苦戦しがちになる部分でもあると思います……。

主力製品の DataSpider Servista は、具体的には「データ連携」の製品です。
社内・社外を問わずシステムを構築する際に、システムとシステムを連携するために使われます。もちろんプログラマがいれば各システムの API に対してプログラミングをすることでシステムができるのですが、そこを楽にしたい、ゼロからの開発ではなく安定したパッケージでまかなってほしい、ということを基本的な目標としている製品です。

勤務:できたら10~20時で抑えたい

定時は 9:30-18:00 です。
10 人くらいいる開発部に 1 人だけですが、ほぼ 100%、18:00 ちょうどに退勤している人もいます。(数年前からそうすることに決めて、そうしているみたいです)

僕は割とやりたいことがいっぱいあるので残業とかもしますが、自分で選んでやっているので全然苦ではないです。用事がある日には定時で帰ります。
先月の残業時間は 30 時間ちょっとでした。

やや余談ですが、男性で育休を取得しつつ、週 1 で自宅でリモート勤務というかなり変則的な働き方をしている人もいます。
あとは、オーストラリアからフルリモートの人もいます。

パッケージソフトウェア開発では、一つのソフトを長く育てていくので、メンバーにもできるだけ長く在籍してもらいたいという傾向があります。
そのため、色々なスタイルで働けるようにしたい、ということでこのように柔軟になっているのだと思います。

収入

他の人の収入を知らないのでなんともいえませんが、たぶん高くも低くもないです。
僕は一度だけ転職して今アプレッソにいるのですが、個人的には、実力・市場価値相応の給与をもらっているという感覚で、納得感があります。

場所:今は東京にいるので東京を希望

文京区の江戸川橋という駅です。(有楽町線飯田橋のお隣)
駅から徒歩 1 分で、また東西線の神楽坂からも徒歩 10 分くらいなので、そちらから通っている人もいます。

すぐ横が首都高なのがちょっとしょんぼりですが、室内にいれば別に気にならないし、見えるのが首都高とはいえ窓が広いのも嬉しいし、反対側にはかわいい商店街もあって、慣れてくるとなかなか悪くないです。

以下は会社の周りの様子です。

f:id:enk_enk:20151209122022j:plain
▲僕の席の近くから見た首都高

f:id:enk_enk:20151209150109j:plain
▲会社の裏側は案外緑っぽい

f:id:enk_enk:20151209145607j:plain
▲春の江戸川公園(※流れている川は神田川

そのほか

環境:新しいものに抵抗がないことや、学ぶことが当たり前の環境にいたい

あくまでフェアに言うと、どんどん新しいサービスを作る Web 系スタートアップみたいなところに比べると、少し保守的だと思います。

というのも、エンタープライズの世界では、一度パッケージを入れたら(バージョンアップしながらも)何年も使い続けられる場合も多いので、後方互換性や将来的なメンテナンス性にすごく気を使います。
開発言語に Java を採用しているのも、もともと開発者・CTO で今は社長の小野さんが得意だったというのもあるでしょうが、同時に Java プラットフォームの後方互換性、安定性というところが大きいです。

とはいえ、当然 Java は随時最新のものにアップデートしていますし(もうすぐリリースされる DataSpider Servista 4.0 は Java8u66)、きちんと説明できれば OSS のライブラリも入れられます。(たとえば、今 Eclipse Collections を入れてみようとしています)

最近では新製品の動きも出てきていて、まだ決まっていませんが、Go を使ってみようだとか、僕を含む一部のエンジニアがどこかで Scala を使えないかもぞもぞしていたりとか、新しいことを学ぶ土壌はあります。

時期について

早くても4月頃とのことですが、問題ないと思います。

もっと遅くなるとしても、弊社に合う人が来てくれることが一番です。
幸か不幸か(?)採用予定に対して現状は結構不足しているので、遅くなるから不採用、みたいな心配はいらないと思います。 (こればかりは決定権を持っていないのでなんとも言えないところはありますが、声かけていただければしかるべき人に一言伝えることはできます)

というわけで

ぜろゆさん、ぜひ一度アプレッソに遊びに来てみませんか。
当然いきなり面接とか採用とかではなくて、まずはアプレッソも含む色々な会社を見てみるといいと思います。(すごく時間がなくてそんなことできない、とかあれば、僕からの紹介があればいきなり面接も可能だとは思います。たぶん。僕は当時京都に住んでいたこともあり、Wantedly から申し込んで、いきなり面接でした)

それから、ぜろゆさん以外にどなたでも(もちろん、「しっかりとソフトウェアエンジニアリングができる、あるいはできるようになろうとする意志と能力がある」人という前提ですが)、声をかけていただければお会いするなり、しかるべき人にご紹介します。
Twitter@enk_enk)でメンション(ないし、フォローしてメンションいただければフォローし返すので、DM)いただければオッケーです。

各種情報

最後になりましたが、採用情報等各種リソースへのリンクを貼っておきます。

■僕はこれから応募して入りました

www.wantedly.com

■別バージョン

www.wantedly.com

■去年書いた募集エントリ

enk.hatenablog.com

■会社 Web

www.appresso.com

■ミッションステートメント(単なるお題目ではなく、割とまじめにこれでやってます)

www.appresso.com

あえて僕に連絡しなくても、もちろん Wantedly から直接応募していただいてもオッケーです。

*1:ソフトウェアエンジニア以外にテストエンジニアやサポートエンジニアも募集していますが、このエントリでは対象を絞ります

2016 年 1 月に読んだ本(内向型人間のすごい力、「じか」の思想 ほか)

前回の読書記録で、

量から質へ、さらっと読める本から歯ごたえのある本へ、またインプットからアウトプットへ、徐々に移行していきたいな〜と思っているので、この読書記録のつけ方も今後ちょっと変えるかもしれません。

なんてことを言っていましたが、今のところおおむね今までどおり読んでいます。

読んでいるうちは、記録もつけておこう、と思います。

1 月のよかった本

内向型人間のすごい力

内向型人間のすごい力 静かな人が世界を変える (講談社+α文庫)

内向型人間のすごい力 静かな人が世界を変える (講談社+α文庫)

大人になってみて、子供のころこれを知っていれば色々と違っただろうな、もっとずっと生きやすかっただろうな、と思うことがちょくちょくあります。
この本に書かれていることも、そのうちの一つでした。

著者は、「内向型」の人が内向型である理由(原因)や、そのことを生かす方法、「外向型」の人との違いなどを、科学的な知見から論じます。
一つ一つの説明が個人的な経験・記憶によく一致していて、深い納得感がありました。それはただ自分のことだけでなく、きっと内向型だったであろうあの人や、ちょっと苦手だった外向型のあの人のこともです。

この本のいいところは、「内向型はこんなに優れている!」といった内向型賛美みたいなものでは決してなく、むしろ外向型の人も含めた「人間をより深く理解する」ための本として読めるところです。

ちょっと変な言い方ですが、この本を読んだあと、もし同じスタンスで書かれた『外向型人間のすごい力』という本があればぜひ読んでみたくなるような、そういう射程距離を持った本でした。
僕は大きく分けると内向型なので、外向型の(特徴を多く持った)人のことをもっとよく知りたいのです。そのために、この本自体も役立つし、(外向型の人のことを)もっと知りたい、と思わせる不思議な魅力を持った本でした。

かといって、「外向型」の人がこれを読んで感銘を受けるかどうかはさすがにちょっと自信がないのですが、できれば読んでほしいし、自分が「内向型」だと思っている人(そのことを意識的に悩んだことがある人……ほぼすべての内向型の人は、あると思いますが)には、ぜひ読んでほしい本です。

「じか」の思想

「じか」の思想 (第4巻) (セレクション 竹内敏晴の「からだと思想」(全4巻))

「じか」の思想 (第4巻) (セレクション 竹内敏晴の「からだと思想」(全4巻))

去年の一時期にどハマりした竹内俊晴さんのセレクションシリーズ完結編。

実は、この第 4 巻には竹内さん自身が筆を執った『愛の侵略』という戯曲が収められていて、なんとなく「観ていない戯曲」を読む気があまりしない時期だった去年の僕は『愛の侵略』の冒頭でずっと止めたままにしていたのでした。
「愛」の「侵略」という何となくざらっとした違和感のあるタイトルも、読み進めることを思いとどまらせた一因だったかもしれません。

ところが、ふと思い立って読み進めてみると、これが。
マザー・テレサの生涯を追う作品なのですが、このマザー・テレサがしていることがまさに「侵略」そのもので、戦慄的なのです。

具体的なエピソードを引いてもうまく伝わりそうにないので、あえて引きたくないのですが、アルバニアを出て、インドに入って、野垂れ死んでいく人たちに執拗にかまって、介抱して、看取ろうとするマザー・テレサははっきりと侵略者なのです。「愛」の。

それがどういうことなのか、僕が生きることや社会やら世界やらにとってどういう意味を持つのかは、正直言って全然消化できていません。
ただ、とにかく、竹内さんの選集の最後あたりにそんなものが出てくるとは思っていなかったので、びっくりしてしまいました。と同時に、人間と「からだ」と格闘し続けてきた竹内さんがここにぶつかることに、不思議な納得感のようなものもあります。

『愛の侵略』は、単行本も出ています。
が、『「じか」の思想』に収められたものは未公刊の新版とのことだったので、多少内容が異なるのだと思います。

愛の侵略―マザー・テレサとシスターたち

愛の侵略―マザー・テレサとシスターたち

読書メーター

2016年1月の読書メーター
読んだ本の数:18冊
読んだページ数:4271ページ
ナイス数:17ナイス

ひらく美術: 地域と人間のつながりを取り戻す (ちくま新書)ひらく美術: 地域と人間のつながりを取り戻す (ちくま新書)感想
美術を使って、地域と人間、人間と人間とのつながりを取り戻していくことの記録です。著者は最後に「一般解を示したかったがそうはいかなかった」ということを書いていますが、さすがの具体性、個別性と、同時に十分な広がり、長い射程距離を持ちあわせた本だと思います。
読了日:1月2日 著者:北川フラム
日本人はどう住まうべきか? (新潮文庫)日本人はどう住まうべきか? (新潮文庫)感想
この本で言われている「だましだまし」ということの価値(あるいは原理主義のデメリット)を忘れている日本人はきっと多いと思うし、こういった本を通して多くの人がそれに気づいてくれたら、と思います。(その方がたぶん生きやすくなるから)
読了日:1月3日 著者:養老孟司,隈研吾
おとなになるってどんなこと? (ちくまプリマ―新書)おとなになるってどんなこと? (ちくまプリマ―新書)
読了日:1月3日 著者:吉本ばなな
独立国家のつくりかた (講談社現代新書)独立国家のつくりかた (講談社現代新書)感想
実力行使に次ぐ実力行使で現代現実世界をビシバシ拡張していくさまに、しびれます。
読了日:1月3日 著者:坂口恭平
だから演劇は面白い! (小学館101新書 50)だから演劇は面白い! (小学館101新書 50)
読了日:1月3日 著者:北村明子
楽しもう。瞑想:心に青空が広がる (光文社知恵の森文庫)楽しもう。瞑想:心に青空が広がる (光文社知恵の森文庫)感想
瞑想とは何かということから具体的なやり方、その効果(するとどうなるか)、またなぜ機能するのかという説明やTIPS的なところまで幅広く、かつしっかりとカバーしているよい入門書だと思います。
読了日:1月3日 著者:宝彩有菜
掏摸(スリ) (河出文庫)掏摸(スリ) (河出文庫)
読了日:1月4日 著者:中村文則
始めよう。瞑想:15分でできるココロとアタマのストレッチ (光文社知恵の森文庫)始めよう。瞑想:15分でできるココロとアタマのストレッチ (光文社知恵の森文庫)感想
姉妹編の『楽しもう。瞑想』とは多少かぶる部分もあるますがおおむね相補的な内容で、興味深く読みました。やはり入門書です。姉妹編の後に読みましたが実践のこと(手順やコツ)が色々と詳しく書かれていて、参考になりました。
読了日:1月5日 著者:宝彩有菜
実践 JUnit ―達人プログラマーのユニットテスト技法実践 JUnit ―達人プログラマーのユニットテスト技法感想
JUnitの使い方(テクニック)というよりは、テストへの考え方から具体的な留意点、設計の工夫やTDDまで、(JUnitの使い方も解説しながら)ユニットテストの入門〜中級までを幅広く、程よいボリュームで扱った良書です。
読了日:1月7日 著者:JeffLangr,AndyHunt,DaveThomas
角川インターネット講座 (10) 第三の産業革命経済と労働の変化角川インターネット講座 (10) 第三の産業革命経済と労働の変化感想
視点が高くて、面白かった。後半が特に面白いので、構成でちょっと損している気もします。(後半を読んだあとに序盤を読んだ方が面白いような……)
読了日:1月9日 著者:
命売ります (ちくま文庫)命売ります (ちくま文庫)
読了日:1月11日 著者:三島由紀夫
こんな舞台を観てきた: 扇田昭彦の日本現代演劇五十年こんな舞台を観てきた: 扇田昭彦の日本現代演劇五十年感想
日本の演劇を50年以上見つめ続けてきた扇田昭彦さんの連綿たる劇評112本。その場にいなかった/いられなかった人間にとってほんとうにありがたい仕事です。
読了日:1月17日 著者:扇田昭彦
「じか」の思想 (第4巻) (セレクション 竹内敏晴の「からだと思想」(全4巻))「じか」の思想 (第4巻) (セレクション 竹内敏晴の「からだと思想」(全4巻))感想
竹内さんのセレクションシリーズ完結編。これに収められているマザーテレサを描いた戯曲「愛の侵略」はまさに「侵略」そのもので、戦慄しました。
読了日:1月17日 著者:竹内敏晴
内向型人間のすごい力 静かな人が世界を変える (講談社+α文庫)内向型人間のすごい力 静かな人が世界を変える (講談社+α文庫)感想
この本を読んで、「強い言葉を使う人の言うことを必ずしもその通り聞かなくてもいいんだ」ということを本当に深く納得したように思います。他にも、「内向型」の人にとって示唆にあふれた、自分や、自分だけでなく(「外向型」の人も含む)他人をより深く知ることのできる本です。その点、この本のタイトルは必要以上に言葉が強い感じがして、そこだけちょっとマイナス。(タイトルのせいでありがちな自己啓発書の類かな……と思って手に取るのをためらいました)
読了日:1月21日 著者:スーザン・ケイン
からだ・こころ・生命 (講談社学術文庫)からだ・こころ・生命 (講談社学術文庫)
読了日:1月23日 著者:木村敏
時間と自己 (中公新書 (674))時間と自己 (中公新書 (674))
読了日:1月28日 著者:木村敏
詩の樹の下で詩の樹の下で感想
樹の、本です。
読了日:1月29日 著者:長田弘
23区格差 (中公新書ラクレ 542)23区格差 (中公新書ラクレ 542)
読了日:1月31日 著者:池田利道

読書メーター

鑑賞記録 2016 年 1 月(書く女、夫婦 ほか)

新年は芝居が 4。

観た芝居

十一人の少年

色々な劇があるのだ、ということが最近(まともに見始めてから 1 年経ってようやく……)わかってきました。

イスラ! イスラ! イスラ!

  • 岡崎藝術座
  • 1/15(金)20:00~@早稲田小劇場どらま館

これも色々な劇のうちのひとつ。

遠くて、むずかしかった。

役者が全員ずっと仮面をつけていたので、自然とからだの微細な動きに注意が向くのが面白かった。
でも、それ自体に大きな意味はなかったような気もします。

こうやって遠いものがふとした拍子に近くに来ることがあるのは知っているけど、でもやっぱり遠かったなあ。

書く女

最近あまり「美しい」という言葉を使いすぎないようにしようと心がけているのだけれど、書く女の黒木華はじつに美しかったので。

夫婦

ハイバイは今までに観たどの演劇とも少しずつ似ているようで似ていなくて、にもかかわらず観劇体験が高水準で(それこそ「遠い」みたいなことも全然なくて)、不思議な魅力でした。
今度の『おとこたち』もぜひ観に行きたい。

以上、絞って絞って 4 本でした。

スカラ祭 2016 2 日目 : Scala コミュニティはあります #ScalaMatsuri

ScalaMatsuri の 2 日目は、一日を通して行われるアンカンファレンスの題目を決める朝会から始まります。

アンカンファレンスというのは事前に登壇者や内容を決めず、参加者がテーマを持ち寄って、有志が発表したり、パネルディスカッションをしたり、議論をしたりといったことを、その場で決めてから行うカンファレンス、いやアンカンファレンス、のやり方です。
ScalaMatsuri では数年前からこのやり方を取り入れているようです。

詳しくはこの記事の「2日目にアンカンファレンス」のところを読んでいただければよくわかるかなと思います。

blog.scalamatsuri.org

なお 1 日めのレポートはこちら。

enk.hatenablog.com

朝会

というわけで、朝の 10 時から 1 時間、ワイワイと朝会を行い、一日のセッションを決めました。

f:id:enk_enk:20160131101157j:plain
モデレータの岡本さん(右)と、もう一人運営の方(申し訳ありません、お名前がわかりません……)岩永さん(左)(ご本人からメンションいただきました、ありがとうございました!)

テーマは前日のうちにあらかじめホワイトボードに各自で貼り付けておいて、シールで投票する形式だったので、その得票数の多いものから順に取っていくのですが……。

  • 貼った人が(朝だから)いない
  • そのテーマで話してくれるはずの人が(朝だから)いない
  • (朝会に)日⇔英翻訳が必要で、うっかりマイクを通さずに話すと翻訳してもらえないので、何かと混乱が生じる
  • 主に日本人が話すセッションで英語で聞きたい人がいる場合に通訳が必要になるので部屋の制約が生じる

などなどでやたらとワイワイして最後バタバタしました。笑

実際、かなり(このように)複雑度の高い朝会だったので、バタバタしたのも仕方ないというか、むしろその複雑な仕事をとてもうまく回していたと思います。壇上のお二人以外のフォローも的確で、運営の実力を感じました。

こうやって決まった 2 日目のセッションは、50 分 × 6 コマ。
順に感想を述べていきます。

セッション

Domain-Specific Languages with Scala / Model-based testing with Modbat

一発目は、産総研(AIST)の Cyrille Artho さんによる 2 本立てのセッション。

朝会では NASA が何とか(?)言っていたのでドキドキしていたのですが、結果としては NASAドメインにかかわる話は特になかったように思います。笑

内容は、前半が ScalaDSL を作るということについて、外部 DSL と内部 DSL を対比させながら詳しく見ていくものでした。
全体として、Scala は(Ruby などにも似て)言語そのものの表現力が高いので、内部 DSL にする方がとにかく実装が楽だし、コンパイル時チェックも効くし、十分便利に使えてよいのかな……という印象を持ちました。
Scala 自体が DSL をつくるのに向いている言語だと思うので、Scala を本格的に使うことになったらそういう方面も視野に入れることができて、楽しそうだなと思います。

後半は Modbat というツールを使ったモデルベースのテストの話だったのですが、駆け足で例も少なかったこともあり、いまいち飲み込めずじまいでした……。

Spark 入門

続いては、お名前を聞きそびれてしまったのですが日本人の方と、午後に Spark で日本語テキストマイニングをするというセッションを持たれていた Eduardo Gonzalez さんによる Spark の入門セッション。

前半が Spark の概要の説明で、短い時間で Spark がどういうもので、何ができるのかざっくり掴めてありがたかったです。

後半は Azure 上に用意された環境でのハンズオンでしたが、ネットワークがちょっと不安定なこともあってか参加はできず。
見ていました。

Spark shell(ほぼ Scala の REPL みたいなもの)上で実行していたのですが、途中 Ctrl + C で終了してしまう場面があって、作った人が UNIX をよくわかっていないから……みたいなことを言ってウケていました。笑

Spark の考え方自体はわかりやすくて使いやすそうだなと感じるのですが、やはり分散処理基盤のことを考えるときにいつも感じる、「本当にやりたいこと」ができるのか(ノード内で外部リソースと I/O できるのかとか、I/O をさせないとしたら今度は大きなデータをノード間で引き回すことになってネットワーク的に非効率になるのではとか)という疑問は解けなくて、個人的にもやっとします。
実際にある程度使ってみればわかるようになるのでしょうか。できない、ような、そもそも考え方が違う、ような気はするのですが。

リアクティブシステム入門

お昼をはさんで、午後の一発目。
SBT わからないので「SBT 人間」と迷ったのですが、SBT 人間には同僚が出てくれるということでこちらに来ました。

TIS の前出祐吾さんによるセッションです。

大きく分けて「リアクティブシステムとは」ということを説明する前半と、それを実装した例である「Reactive Solar Farm monitor」(多数のソーラーパネルから情報を収集してモニタリングするシステム)を実動させてみる後半という構成で、とてもわかりやすくまとまっていたと思います。

昨日の岡本さんのセッションとかぶる部分もあればかぶらない部分もありで、あわせて聞いたことでだいぶ理解が深まりました。

個人的に「届けたい価値は高レスポンス、支える原理が伸縮性と耐障害性、手段がメッセージ駆動」という説明がとてもわかりやすかったです。
この説明で初めて(ようやく)Reactive Manifesto のあのよく引用される図の意味が腑に落ちました。

腑に落ちて、なるほどもっともだ、と思ったので署名しておきました。笑
理念自体は、(当たり前といえば当たり前ですが)結局これに全部書いてあるのですね。

やや余談ですが、WEB 上のリソースでは伊藤直也さんの Qiita の記事が、僕がこの 2 日間で得た理解とだいたい同じで、納得感がありました。

qiita.com

後半のデモはというと、マシンスペックの問題でやや動作が重たくはあったものの、Akka で動作させている各ノードが協調しながら動作する様子は見事でした。
たとえば、Master Analyzer(単数)と Worker Analyzer(複数)があって、Worker は増減できるし(立ち上がったら自動的にシステムに参加する)、Master が落ちたら生きている Worker が Master に自動で昇格する、というのもうまくいっていました。
かっこいい。

IntelliJ IDEA で Scala をマスターする

続いて JetBrains の Alexander Podkhalyuzin さん(@Safela)によるセッション。

IntelliJ IDEA の便利な使い方をひたすら披露し続ける実に充実した 50 分間でした。

いや実際、こんな機能もあるんだ、こんなこともできるんだ、と発見の連続でした。僕がそもそもほとんど使ってないというのもあるとは思いますが。
Alexander さん自身「IntelliJ IDEA はすごく便利なのに機能を知らない人が多すぎるから discoverability を上げることに力を入れている」みたいなことを言っていて。大事です。そういう活動。
余談ですが僕(たち)が会社で開発している DataSpider Servista *1 も一種の開発ツールみたいな側面があるので、ユーザミートアップのようなところで Tips を教えるコーナーみたいなのがあっても面白いのかな、と思ったりします。

なかでも以下の 2 つがヒットでした。(ショートカットキーは Windows の場合)

  • Find action(Shift + Ctrl + A)で、名前からアクションを探せる
    • 極論を言うと、ショートカットはこれと「Search everywhere(Shift 2 回)」だけ覚えておけば何とでもなる! すごい!
  • Intention action(Alt + Enter)でとにかく賢くコードの変換候補を出してくれる
    • for 式をガシガシ分解して Scala でどう解釈・実行されるかを見られるのは衝撃的

自分用のメモも兼ねるので、取ったメモは以下にそのまま残しておきます。

IDEA Part

  • focusing performance, general usability, and more discoverability!
  • Run : Shit + Ctrl + F10
  • Find action : Shift + Ctrl + A
  • Use distraction free mode!
  • Search everywhere : Double Shift
    • File : Shift + Ctrl + N
    • Context : Shift + Ctrl + Alt + N
  • Recent Files : Ctrl + E
    • Recently Changed Files : Ctrl + Shift + E
  • Switcher : Ctrl + Tab
  • Class Structure : Ctrl + F12
  • Hide All Windows : Ctrl + Shift + F12
  • Presentation mode as super

Scala Part

  • Use Alt + Enter to improve your scala code
  • Inspection for multiple files is also available
  • Worksheet function : light worksheet interactive mode works like REPL!
  • Intention action : Alt + Enter
    • for 式をガシガシ分解できる!
  • Delete Line : Ctrl + Y
  • Smart Completion : Shift + Ctrl + Space
    • When using Option, it's useful
  • Copy Reference : Ctrl + Shift + Left
  • Toggle Breakpoints : Ctrl + F8

Hidden Gems

  • Variables の右クリックメニューからの Mark Object でオブジェクトを追跡する
  • _DebugLabel で Marked Object を取得する(Watches に追加もできる)

DDD + CQRS + EventSourcing 実装する会 / Akka パフォーマンスチューニングについて話してみよう会

ここで僕にとっては今日初めてのパネルディスカッションです。
ChatWork の加藤さんをモデレータに、Scala で DDD を実践されている人たちとして、ゲヒルンのまつしたさん、昨日もセッションを持たれていた MOTEX の藤井さん、Socket のおくださんが登壇されました。

はじめに加藤さんから DDD の概要をさらっと紹介したあとは、ひたすらディスカッションでした。

全体的な印象として、実際にやっている人が集まるとさすがに議論が深いな、ということと、Scala も DDD もやっていないとなかなかついていけないな、ということを感じました。笑
とはいえ、やっている人たちがこれだけいるということには、それだけで勇気づけられる気がします。

それ以外に得たものとしては、(昨日の藤井さんのセッションでも聞きましたが)CQRS(Command Query Responsibility Segregation)や Event Sourcing というキーワードや、それらの使い方と使ったときのイメージ(どう実装して、どういうところが課題になって……)といったところでしょうか。

CQRS には提唱者の Greg Young さんが書いた割と大物のドキュメントがあって、それを参照しながら議論するようなものなのだ、ということがわかったのも収穫の一つでした。

Scala の教育について

ScalaMatsuri 2016 最後のセッションは、昨日や朝会でも登壇された岡本さんをモデレータとして、前のセッションから続いての加藤さん、Wix の Tomer さん、ドワンゴの吉田さん、はてなのだいくしーさんによるパネルディスカッション。

実は今日一番気になっていた Scala の教育についてのセッションです。
というのも、何を隠そう(隠してない)僕自身が Scala 入門者で、Scala軽くて(薄くて)、網羅的で、正しくて、楽しくて、手も動かせるような入門用リソースがなかなか見当たらないことに困っていたからです。

色々求めすぎだろという感もありますが、たとえば同じく(?)モダンコンパイル型言語である Go には Go コードの書き方A Tour of Go といった具合に日本語の入門リソースが充実していますし、『改訂 2 版 基礎からわかる Go 言語』もとてもいい本でした。

それに比べると Scala では公式のチュートリアルはありますが英語ですし、入門編として有名な Scala School も英語ですし、日本語の書籍はちょっと古いものが多く、使えるには使えるのでしょうが、いまいち心がときめきません。
仕方なく今は公式チュートリアルを英語でやっていますが、英語が苦手な人に勧めるのはちょっとためらわれます。(昨日の瀬良さんの話にもあったように英語がんばろうよというのはあるにせよ、そのせいで Scala に入門しづらい、というのはなんかもったいない)

Effective Scala が日本語で読めるのはとてもありがたいですね。ただ、その手前がありません。

コンセンサスのない Scala 教育

前置きが長くなりましたが、そんなわけでとても関心の強いトピックだったのです。

昨日公開されたドワンゴの Scala 研修テキストの話を皮切りに、議論はさまざまな方向へ展開しましたが、結論めいたものは出なかったように思います。

そうなのです……。

岡本さんが最後に(時間切れでまとめる時間がなかったこともあり)「コンセンサスがないのが現状ということのようです」といったことをおっしゃっていましたが、それを象徴するように、加藤さんが「Better Java →関数型への傾倒→純粋関数型」というステージが……みたいな話をしていたら Tomer さんから「ステージを上がっていくという考え方には同意できない、Scala では色々な選択ができるのであって、関数型で書くかは選択の問題」といった反論がありました。
反論といっても別に必ずしも対立しているわけではなくて、要は加藤さんのチームが「純粋関数型を選択した」ということ(そういう前提で話していた)なのだと思いますが、Scala には何かにつけこういうところがある、という印象はあります。

スケーラブルな言語で、色々な書き方ができるので、その分学習者が混乱してしまう面もあるように感じます。
帰り道で同僚が「コップ本一通り読んでも(そこに書かれていない機能が使われているから)OSS のコードが読めるようにはならない」と言っていたのも印象的でした。

そんな状況の中、公開されたドワンゴのテキストは、これは、すごくありがたい存在なのでは……? と個人的には思っています。
もちろん「ドワンゴの社員のための」テキストではあるのでしょうが、

  • 2015-2016 年時点でつくられた新しいテキストであること
  • 日本語であること
  • (一見したところ)言語機能の解説にとどまらず、エコシステムや、それこそ前述した「選択」の理由、のようなところまで丁寧に書かれているようだったこと

といった理由から、うまく使えば Scala の入門一般に役立つのでは、と期待しています。 とりあえず、Scala 入門者である僕自身がさっそく使ってみたいと思います。よければ他の人にも勧めます。

https://dwango.github.io/scala_text/dwango.github.io

まとめ : Scala コミュニティはあります

こうして楽しい 2 日間が幕を閉じました。

いや、楽しかったです。
率直に言って Scala エンジニアではないし、Scala プログラマでもないし、そらで Hello World 書けるかっていうと書けないのですが、それでも。
何が楽しかったかといえば、Scala という言語自体の魅力はもちろんあるのですが、同じくらい Scala コミュニティの魅力というものもあったのでは、と思います。

(ソフトウェアエンジニアとして)大人が多いというか、Scala がまだ普及しきっていない言語だから、Java とかに比べるとエッジに比較的近いからということもあるかもしれませんが、成熟している感じがするのです。(年齢とかではなく。年齢では Java の方がよっぽど……)
2 日目をまる一日使ったアンカンファレンスがふつうに成立してしまうことからも、それがうかがえます。

僕はこの 2016 年において Java の魅力の半分……とまでは言いませんが 3 割くらいはコミュニティの魅力だと思うのですが、Scala にもコミュニティあるんじゃん、がっしりしたやつが、という印象をこの 2 日間で受けました。

その面でも、Scala これからが楽しみな言語だな、と思います。
当初の思惑通り(?)、Scala の学習ペースを早めて、何らかのソフトの開発で実用できるようになっていけたら、と思っています。

*1:残念ながら Scala ではなく Java で開発しています

スカラ祭 2016 1 日目 : Scala を掘り下げたくなりました #ScalaMatsuri

この土日で開催されている ScalaMatsuri 2016 に参加しています。

日常業務ではほぼ 100% Java を使っていて、Java はそのエコシステムまで含めた総合力ではとてもナイスな言語だと思うのですが、どうしても他のよりモダンな言語に比べるともう一つ……というところもあって*1、じんわりと Scala の可能性を探る日々です。

そんなじんわりじんわりした中、一発大きなカンファレンスに参加したら色々とコトが前進するのでは、と一念発起して 1 万円の参加費をはたいて、スカラ祭に参加しています。
まだ 1 日目ですが、参加してとてもよかったと感じています。

以下、参加したセッションの感想を述べます。

セッション

本当は朝の 10:00 からがくぞさん(@gakuzzzz)のセッションがあったのですが、寝坊しました……。
土曜日に早起きはできない。

せめてもの罪滅ぼし(?)に、セッション資料だけでも紹介させてもらいます。

なぜリアクティブは重要か

というわけで、一発目は岡本 雄太さん(@okapies)のセッション。

Java 界隈でも著名な岡本さんのセッションを初めて見たのですが、噂に違わぬハイテンポなセッションでした。
わずか 40 分でリアクティブひとめぐり!

www.slideshare.net

とてもよく整理された内容と語り口で、聞いているときはなるほどなるほどと思っていたのですが、終わってしばらくたってみるとよく覚えていません。笑

記憶が追いついていないだけだと思うので、……スライドで改めて復習します。
スライドもやはりよく整理されていて、あとで見返すこともしやすいのがありがたいと感じます。

楽しく役立つ Scala リファクタリング

Wix 社の Tomer Gabel さん(@tomerg)のセッション。

表題の通り、Scala で書かれたあんまりいけてないコードを Scala の機能を活用しながらいけてるコードにリファクタリングする、という内容で、ライブコーディングも交えながらほどよいテンポで(笑)進みました。

www.slideshare.net

実際僕は Scala を始めたばっかりで、公式のチュートリアルをようやく七割がた終えたところという体たらくなのですが、そのレベルでも Scala らしいコードの書き方、Scala のよさを感じられるありがたいセッションだったと思います。

具体的には、ざっくり以下の二本立てでした。

  • "Stringly Typed"(「書式」を取り決めた文字列を引き回してあれこれするようなコード)を改善する
    • 文字列を渡して内部でパースするコンストラクタを、ファクトリ関数に置き換える
    • そのオブジェクトの使用箇所も、いい感じにパターンマッチを用いるように書き換える
  • Collection Abuse(コレクションの乱用)を改善する
    • インラインで処理をつなぎすぎているところへ、一時変数を導入したり、ローカルな関数を定義して名前をつける
    • タプルをやめ、ケースクラスを定義して要素に名前をつける

こうして見ると、普段から Scala を使っている人にとってはだいぶ基本的だったのかもと思いますが、僕のような初心者にとってはまさに求めていた内容でした!
英語がゆっくりでとても聞き取りやすかったのも助かりました。*2

バッチを Akka Streams で再実装したら100倍速くなった話

TIS の根来 和輝さん(@negokaz)のセッション。

MySQL からその日の取引情報を取り出して時刻順に並べて CSV ファイルに書き出す、という夜間バッチを、Rails による実装から Akka Streams に置き換えたことで 100 倍……どころか 295 倍速くなった、という話でした。295 倍。笑

www.slideshare.net

テスト用の環境とデータを用意して、ボトルネック(メモリ)を特定して、解消して、新しいボトルネック(CPU)を特定して……というパフォーマンス改善の正道をいくプロセスで Akka Streams に行き着いた、といったストーリーで、納得感のある内容でした。

ただ、15 分しかない枠だったこともあり、個人的には Akka Streams ならではの話というか、苦労したところとか、こういう問題があってこう解決したとか、なぜ他の言語やツールキットではなく Akka Streams を採用したのか、みたいな話を期待していたけれどそういうのがなかったのが、ちょっと惜しかったかな……という感もありました……というところまで書いて、そういえば最後に Tips のスライドがあったけれど時間がなくなって飛ばされていたことを思い出しました。
15 分では仕方ない、とは思いますし、この 15 分の枠というもの自体は、お昼すぎの眠たくなりがちな時間帯に軽いテンポをもたらしていてよかったと思うので、なかなか難しいところです。

アジアから Scala OSS に貢献するということ

退職にともなう連日の飲み会で声が……と言いながら始まった、瀬良 和弘さん(@seratch)のセッション。
退職自体はセッションの内容とは(たぶん)関係ありませんが、「エムスリーの瀬良さん」というイメージだったのでちょっとびっくりです。今後のご活躍も楽しみです。

さて、内容はというと、一言でいうと、日本人はもっと世界に出た方がいい、というメッセージを伝えるものだったと思います。英語で。*3

www.slideshare.net

瀬良さん自身は海外に住んだことがない、「ふつうの」日本人プログラマだけれど、Skinny FrameworkScalikeJDBC といった OSS を自ら開発・公開されたり、様々な OSS に貢献されたりしていて、みんなにもできるはずだ、やっていこう、という話でした。
もし自分のプロダクトを公開したら README も英語で書こう、ブログも英語で発信していこう、といったこともおっしゃっていました。

個人的に、「たしかに」と思ったのは、日本では日本語で読める技術書が豊富に出ていて、日本語のコミュニティも活発だけれど、それは(日本人一般が)英語が苦手であることの裏返しだ、ということです。英語が苦手だから、日本語の書籍が充実するし、充実しているから、英語が読めなくてもやっていける。
でも、また同時に、やはり英語ができた方が得られる情報も発信できる情報も増えるのは確かだと思います。この業界、とにかく第一線の一次情報が英語という場合が割合として非常に大きいので、英語を使ってコミュニケーションしていくということは、それが大きなコストのかかることであっても、やる価値があるし、これから先どんどんやらないといけなくなっていくだろうな、と感じています。

Scala コードは JVM でどのように表現されているのか

午後から始まった 15 分セッションの 3 本目にして最後は、関ジャバの会長である阪田 浩一さん(@jyukutyo)のバイトコードセッション。

www.slideshare.net

恥ずかしながら、このセッションに参加するまで Scala コンパイラが最終成果物として何を出しているのかのイメージをきちんと持っていませんでした。

ああ、言われてみれば当たり前なのですが。.class ファイルとして、JVMバイトコードを出しているのですね。
CAFE BABE から始まる、Java プログラマにはおなじみのやつです。

15 分セッションだけあってさすがに駆け足で進むのですが、バイトコードの基礎知識に始まって、trait、パターンマッチ、カリー化といった Scala ならではの記法がバイトコードでどう表現されるのかの解説までを、無駄なく、漏れなく駆け抜ける、見事なセッションでした。

バイトコードはこうやって読むんだよ」とか「javap 使おう!」とか、それだけなら 15 分でもやれると思うのですが、それらの内容もきっちりおさえつつ、Scala コードとの対応関係までわかるように解説するというのは……。

やはり、(なぜか)「イメージをきちんと持っていなかった」僕が「わかった!」という感動を得られたのは、実際の Scala コードとそのコンパイル結果のバイトコード(の javap -v の結果)をバシッと見せてもらったからだと思います。
おみそれしました。

あなたのScalaを爆速にする7つの方法

井上 ゆりさん(@iyunoriue)(と、インケンさん)のセッション。

爆速、爆速……と思いながら参加しましたが、がっつりベンチマーク取っての骨太な、でありながらかつクイズ形式で和やかに進むというお得なセッションでした。

www.slideshare.net

SSD 上の 2GB の Memory Mapped File の方が(同サイズのデータを扱う)memcached 1.4.0 より速い(memcached 1.4.0 では 1 キーあたりのデータサイズが 1MB 以下という制約がある!)とか、フィボナッチ数列の生成で Stream による実装の方が Array による実装の方が圧倒的に速い(Stream の方は値を 1 つしか取り出していなかったから! ずるい!)とか、なかなか意表を突くクイズも取り入れながら、単なる豆知識にとどまらない、Scala の奥深さを感じられる内容だったと思います。

個人的には、コレクションの性能周りの問題に、(Scala のコレクションのことはほとんど知らなかったのですが)C++ 時代の知識とコレクション名からの推測でだいたい正解できたのがなんかちょっと嬉しかったです。笑
でもまじめな話、データ構造なんてのは言語によってそうそう大きく変わるものではないので、こうやって知識が応用できる場合があるのもさもありなんで、プログラマというのは経験をきちんと積めば報われる職業だな、ということもちょっとだけ思ったりします。

あと、Scala はコレクションの性能特性が公式ページに一覧化されている、というのもステキですね。

一目瞭然です!

The Zen of Akka

JavaOne 2015 では Java 9 に入る予定の Reactive Streams の話をされていた、Typesafe 社の Konrad Malawski さん(@ktosopl)のセッション。

同時間帯の関数型ドメインモデリングのセッションもちょっと気になっていたのですが、概要に「ドメインの代数がモノイド、函手、モナドといった圏論的な構造から構築できるか試してみる」みたいな文字列を見つけて(あっ……)と思ってこちらに逃げてきました。

このセッションは、「Akka という考え方」とでもいうべき、Akka とうまく付き合うためにどう考え、どうすればいいかが詰まった内容でした。

www.slideshare.net

そもそも Akka を使ったことも使おうと思ったこともないので*4、Akka そのものとのマッピングはできていないのですが、それぞれの特徴的な考え方から Akka の輪郭が浮かび上がってくるようなセッションでした……いや、まじめな話。笑

実際に使っている人にとっては、なおさら面白い内容だったのではと思います。
いつか使う(使おうとする)日が来たら、きっと思い出すことになるでしょう。

Scalaドメイン駆動設計に真正面から取り組んだ話

本日最後は、MOTEX の藤井 善隆さん(@yoshiyoshifujii)のセッション。

www.slideshare.net

藤井さんは Scala を始めてからまだ 7 か月、チームも似たような感じということで、にもかかわらずドメイン駆動設計というチャレンジも重ねて、苦労しながらの、進行中の知見を共有する、ということで、かえって僕のように知識も経験もない人にも共感できるところの大きい内容だったと思います。

特に面白いと感じたのは、「どうしてもレイヤ感で責務が漏れてしまう」といった課題に対して「チームでどうするか決める」「コードレビューやモデリング(のレビュー)で対処する」「定常的にリファクタリングし続ける」といったプロセス的な解決策が色々上がってきたところです。現場感がありました。

一方で、CQRS(Command Query Responsibility Segregation)の考え方を適用して、クエリ(データの取得)については限定的に Query Model としてレイヤ間を飛ばして扱えるようにする、という技術的な解決策も出ていたり、Query Model に対して Command Model はあくまでレイヤー化アーキテクチャを守る、という判断があったり、結局こちらも現場感なのかもしれませんが……ドメイン駆動設計で開発することになったらきっと同じことで悩むのだろうな、と感じられる、学ぶところの大きい内容だったと思います。

その他雑感と一日目のまとめ

そんなわけでスカラ祭初日はとても充実した一日でした!
セッション終了後の懇親会も楽しみました。

参加費 1 万円を支払った甲斐は十分あったと感じます。
冒頭や本文中にも述べたように Scala は全然始めたばかりなのですが、初心者でもそれなりに理解できて、かつ奥行きもある質の良いセッションが多かったのではないかと思いますし、会場も全体としては広く、時間的なゆとりもあり、水や、お菓子やコーヒーといったちょっとしたサービスもとてもありがたかったです。

何といっても Scala を使っている・使おうとしている人たちが 500 人ばかりも一堂に会する場所に集まって(そんな場所が日本にあるのです!)、その空気を吸うことがとてもいい刺激になっています。
この辺は JavaOne に参加したときの感想にも近いところがありますね。

それから、Scala やっぱりいい言語だな、と思います。
まだ半分お試しのつもりでしたが、Scala をちょっとまじめに掘り下げてみたくなりました。

二日目は主にアンカンファレンス形式ということで、いったいどうなるのか若干不安もありますが笑、それ以上に楽しみです!

追記 : 2 日目も行ってきました

enk.hatenablog.com

*1:Java に限らず、Scala も含むすべての言語には得意不得意があるわけですが

*2:僕は利用しませんでしたが、今回の ScalaMatsuri では、多くのセッションで同時通訳もついていました

*3:ScalaMatsuri のセッションはそもそもだいたい日英半々で、日本人で英語の発表をされている方もいたのですが、瀬良さんの場合は特にそのメッセージと重ねていたところが大きかったのだろう、と思います

*4:Scala 界で有名なライブラリ群、くらいの認識