DoorKeeper
https://jjug.doorkeeper.jp/events/43045
公式サイト
https://jjug.doorkeeper.jp/events/43045
場所は新宿の「ベルサール新宿グランド」です。
参加者は800名くらいあったのでしょうか。DoorKeeperの申し込みが1200名を超えてましたね。
JJUG CCCは半年に1回の大イベントですが、ここ数年、ずっと参加してます。
今年も楽しんできました。
以下、自分の復習のための当日メモ。
Type Annotation for Static Program Analysis
E-1のirofさんのテストの講演を聞きたかったのですが、部屋が満員だったので、次に今日にがある桜庭さんの講演を聴講しました。
P.11のコード例
- equalsメソッドをオーバーライドしているが、Hashがない。
P.13のコード例
- executeメソッドでgetMessageメソッドの戻り値のnullチェックをしてない
- → NullpointerExceptionがthrowされるが、FindBugsは検出してくれない。
- FindBugsは静的コードチェッカーなので、振る舞いまではあまり役に立ってくれない。
- アノテーションでチェックできるのにチェックされてない
Nullチェック (P.14)
- @NonNullはEclipseで使える。
- @NotNullはInteliJ IDEAで使える。
- これらのアノテーションはJava標準ではなく、IDE依存なので注意。
- アノテーションをつけると、ある程度、ふるまいをチェックできる。
P.16のコード例
- TはNonNullなんだよ、と指定したい。でも、@NonNullと全部の引数につけるの大変。
- クラス宣言の箇所に@NonNullを付けられるが、Java SE7までこれはできなかった。
- →type anotationが出てきた。
Annotation (P.19)
- アノテーションの定義できるところは8種類。
- anotation_type =メタアノテーション
- 8種類に共通しているのは、「全部、宣言につけることができる」ということ。
- 宣言で定義したものを使うときには、アノテーションはつけられない。
Type Annotation (P.21)
- Java SE8で型アノテーションが出てきた。
- コードチェックをしたいけど、今までは宣言のとこでしかアノテーションを書けなかった。
- 宣言のトコだけでなく、使用するトコにもアノテーションを書けるようにして、ふるまいもある程度チェックできるようにした。
JSR 308: Annotation on Java Type (P.22)
- 既存に8種に加え、type_useとtype_parameterが追加された。
ブラウザテストをサクサク進めるためのGeb実践入門
テスト関係の勉強会でよくお会いする高橋さんの講演を聴講しました。
Geb
- 「Seleniumu実践入門」の本にGebの章が1章ある。
- Gebの読み方は「じぇぶ」。「げぶ」じゃない。
- Groovy製のブラウザオートメーションツール。
- パフォーマンステストはGebじゃなくてJmeterを使えばよい。
Why
- Scrumをやってて、Gebでテストがちゃんと動く、というのを見せたくてGebを導入したのがキッカケ。
- あとで、微妙だったな、と思った。
- シナリオをカバーしようとすると、重複する。テストシナリオが重複しちゃう・・・
- ある時、テストが一度に壊れることがあった。
- やりたいのは、シナリオをカバーするより、バグが出ないようにしたい、という点。なので、機能テストに書き直した。
- やってるうちに新しい知見が出た。
- なぜ自動テストやりたかったのか、という点は、定期的に見直したほうがいい。
Where
- 全部テストしたい = 将来的に脆いテストになる
- どこにテストを書くかを検討しないといけない。
- システムテスト自動化標準ガイドにGebについて書かれている。
- 後ろの方の描き下ろしにGebが使われている。Gebの応用をやりたい、という人は読むとよい。ただし初心者向けじゃない。
How
- 自動化ツールはいくつかある。
- SelenideはPure Javaな自動化ツール。FluentもJava。
- どのツールを選ぶかの指針は、今使っている技術との親和性で選ぶ。
- GebはGroovyなので、Javaとの親和性はSelenideやFluentよりは劣るので、Javaエンジニアには学習コストがかかる。
ポイント
- ドキュメントの量も大事。
- Gebはドキュメントが圧倒的に多い。読むとわかる。
- SeleniumuのAPIは辛いところがある。なので自分でラッパーを書いた。
- それで、自分がドキュメントになってしまった。
- その結果、ほかの人から「わからないから教えて」と聞かれまくるハメになった。
- ググれる、というのは大事。自分がドキュメントにならないこと。
頼るなら公式
- 公式サイトは英語だが、動作するコードの例がたくさんある。
extends GebReportingXXX (P.46)
- reportとつくクラスを継承していると、reportメソッドを呼び出したタイミングと終了時に自動でキャプチャを取ってくれる。
ページオブジェクトパターン (P.50)
- 利用するコンテンツのメンテナンスを上げ、再利用性を高めるデザインパターン。
- Gebは標準でサポートしている。Pageクラスを継承することで利用する。
url (P.54)
- Pageオブジェクトのurlフィールドに遷移先を指定すると、そこに遷移する
- 相対パスでurlを指定する場合、GebConfigにbaseUrlを指定しておく。
at (P.55)
- atブロックにアサートの条件を書く。
content (P.56)
- contentでクロージャを作る。
- 操作のエレメントを指定する。
jQueryっぽいAPI (P.57)
- $("div")ってやると最初に見つかったdivが取れる。
テキストマッチ (P.60)
- メソッド名の先頭がiだと、大文字小文字を区別せずにマッチングする。例: iStartsWith
click (P.61)
- toWaitをtrueにすると描画まで待ってくれる。SPAに有効。
どのツールと組み合わせるか (P.81)
- 使ったこと無いツールばっか採用して連携させると、落ちた時にどこが原因で落ちたのかわからない
- 最初は現状使ってるツール使う方が良い。
記述はシンプルを心がける (P.85)
- 中間のエレメントを定義しておくと、親のエレメントが壊れても追随しやすい。
- atで、今どこにいる、というのを確認するようにするとよい。
スローテスト問題 (P.95)
- テキストマッチングは基本使わない方がいい。
- CSS Selectornがないので、Gebがリクエスト発行する。死ぬほど遅くなる。
Jenkins 2.0
CIの世界でデファクトスタンダードになりつつあるJenkins。その開発者の川口さんの講演です。
次の10年を見据えたお話でした。
#1: 広がり続ける自動化の波
- 広がり続ける自動化の波がまだ広がり続けている
- 第1のチャレンジとして、パイプラインでの並列化に取り組んでいる。
#2: コード→○ GUI→× ステート→×
- システムへの変更をコード化して見えるようにする。これにより、意図を記述できる。
- ビルドの仕方をテキストで記述する。
- スニペットジェネレーターがスクリプトを生成してくれる。
- GitHub Organization Folderは、プルリクをあげたら自動でjenkinsでテストを走らせる機能。
#3: UIの課題
- 頻繁に使われる部分のUIをいじる。
- スタートアップウィザードも新しいUIにする。
#4: 「要 組み立て」からの脱却
- 今まではJenkins単品では何もできないので、プラグインをどんどん組み入れる必要があった。
- Jenkins2.0では、お勧めプラグインが最初からついてくる。
#5: ユーザーを守る
- 最初から安全なデフォルトのセキュリティを導入する。
- 後方互換性も確保する。
ネクストStruts/Seasar2としてのJava EEアクションベースMVC入門 - MVC 1.0、Jersey MVC、RESTEasy HTML -
ちょうどJava読書会でJava EE7を勉強中なのと、弊社でもJavaフレームワーク刷新中でなので、興味があり聴講しました。
コンポーネントベースMVCとは? (P.8)
- 画面とBeanを1対1に対応付ける。
MVC 1.0では画面構築の機能なし (P.15)
- MVC 1.0では、Viewは使いたいものを使えという思想。
JSP・Faceletsの問題点 (P.17)
- JSPは デフォルトでエスケープしてくれないので、XSSの脆弱性の危険がある。
- FaceletsはコンポーネントのIDが動的に変わるので、JavaScriptと相性が悪い
ビューに値を渡す (P.25)
- 戻り値はstirngでビューへのパスを拡張子ありで書く。拡張子は必須で、ビューの種類を判断している。
- @Injectでモデルのインタフェースを指定する。
Jersey MVCの基本的な使い方 (P.41)
- /web-inf/viewsにビューは入れるよう、mvcの仕様で決まっている
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界
マイクロサービスというキーワード全盛な昨今、弊社もご多分に漏れず、ということで聴講しました。
先日、鈴木雄介さんのマイクロサービスアーキテクチャの講演を聞いてブログにも書いたんですが、また違う講演者から話を聞くことで多面的に学べた気がします。
分割よりAPI化を重視、という考えは独自性があって興味深いです。
マイクロサービスアーキテクチャとRESTが同時期に注目されている理由はここらへんにあるのでしょうか。
十徳ナイフとしてのGradle
https://nbviewer.jupyter.org/format/slides/github/grimrose/JJUG-CCC-2016-Spring/blob/master/Gradle%20as%20Army%20Knife.ipynb#/講演者の@grimrose さんが主催されてる Yokohama.groovy で、初めてGroovyを学んだ私。
そんときは書籍をターゲットに写経したりしてました。そんな繋がりでGradleにも興味があります。
この日の講演は大盛況で立ち見がたくさん。そんな私も最前列の机前のスペースの地べたに座って聴講しました。
こーゆうイベントで講演したり、エンジニアの成長を求めて転職したりと、エンジニアとしてパワーアップし続ける姿は羨ましいですね。
よく勉強会でもご一緒する @grimrose さんですが、その姿勢は俺も見習わなければならない・・・
もう知らないとは言わせない!Play Frameworkはじめの一歩
先にスライドをSpeaker Deckに公開するという気配り、初の講演とは思えない段取り。素晴らしい。
ときどきスライドに出てくる英単語の発音がとても流暢で巻き舌を駆使されてたけど、帰国子女なんだろうか。
ちなみに私、秋葉原PlayFramework/Java勉強会[読書会]というのに以前参加してたので、Play FrameworkのJava環境は一通り触ったことあります。
あれからもう2年も経ってるし、けっこー変わってるのかなぁ。
デモが興味深かったですね。
ローカルPCにチュートリアルが展開されて、そこだけ見るだけで進められる形式。
Playは後方互換性がSpringに比べてイマイチらしく、2.5は2.4の互換性がないとのこと・・・
Java Puzzlers
青いツナギの服を来た桜庭さんと寺田さん。服装は、この元ネタにあったそうです。
ちなみにJava Puzzlersという書籍があって、日本版ピアソンショックで一回絶版したらしい。
この日は5問のJavaの問題に対し、参加者みんなで考えるという方式でした。
問題2の解決2で、桁あふれで+-が反転しないよう例外を出す機能がJava8で追加されたそうです。
問題3の解説3で、Lambda式はfinalなローカル変数じゃないとアクセスできないそうです。
でも、今回は再代入しているのでFinalじゃないとのことで、普通のLambda式ではコンパイルエラーになるそうです。
lambda式とメソッド参照には微妙な違いがある。
私は5問中、3問正解でした。5問正解した人は、桜庭さん執筆の書籍が賞品でした。
休憩時間のLT大会の一幕

今回のJJUG CCCはお昼休みも、セッション間の休憩時間も長く取られていました。
なので昼食もゆっくり取れたし、セッション間の休憩ではLT大会が催されていました。
こーゆうの、すごく良いですね。ちなみに写真は、Jenkins開発者の川口さんによるLT。
あと、コーヒーやお茶がフリードリンクで提供されており、休憩時間は飲みながらLTを聞くことができました。
懇親会

今年は懇親会にもスポンサーが付いたということで、なんと無料!
夕方の空腹をビールと料理で癒しつつ、顔見知りの方といろいろ会話したり、LT大会を楽しんだり。
とても楽しいヒトトキでした。
感想
朝から夜遅くまで、丸一日、JJUG CCC尽くしで楽しみました。勉強しなければ、学ばなければ、という思いももちろんありますが、何よりも、楽しい、という点が大事ですね。
学びももちろんあるけど、こーやって1日、刺激を受けつつ楽しめるお祭りみたいなイベント、大好きです。
あと、この日も鈴木雄介さんは講演もされてて、幹事として満席のセッションに椅子を追加したりと、とても活動的でした。
この週、私が鈴木さんの講演を聞くのは要求開発、アジャイルがダメだと思う7つの理由、そしてJJUGと、私が聴講したのだけで3つの講演がありました。
すごいバイタリティ。
他の幹事さんも、とても活動的で、頭が下がります。感謝。
こーゆうコミュニティ活動がずっと続くと良いですね。
関係者の皆様、ありがとーございました。
- 関連記事
-
- 「DDD Alliance! ドメインオブジェクトの見つけ方・作り方・育て方」に参加しました
- 「JJUG CCC 2016 Spring」に参加しました。
- "「アジャイルがダメだと思う7つの理由」について議論する会"に参加しました