ミズノブログ

ミズノです。プログラミング・子育て・経年変化するもの など好きなことを雑多に書きます。

「プロを目指す人のためのRuby入門」は他言語経験者に最適の本

「プロを目指す人のためのRuby入門」を読んだ

仕事でRubyを使うことになったので、本腰を入れて勉強しようと「プロを目指す人のためのRuby入門」(通称:チェリー本)を購入しました。
昔個人的にRubyを勉強していたころ、著者である伊藤淳一さんの技術ブログをよく参考にしていたのでこれは!と予約して購入しました。
通勤や昼休みなどに毎日少しずつ読み進めていきました。
とても良い書籍だったのでおすすめポイントなど紹介します。

おすすめポイント

エンジニアとしてのこだわりがたくさん詰まっている書籍だと感じました。
著者自らが語るこだわりの記事も参考になります。 blog.jnito.com

進行が分かりやすい

最初から順に読み進めてきちんと理解できるように章構成されています。

  • 章初で例題の仕様を提示
  • 例題に必要な知識を説明
  • 知識が揃ったところで例題に着手(基本的にTDDで行う)
  • 必要に応じリファクタリング
  • 発展系の高度なトピックを説明

という進行です。
ご本人のこだわりポイントとして挙げているように、章中に例題があるのが特徴的です。
例題が軸となって学習が進められるので、覚えるべきことが明確になって進めやすかったです。
また語り口が柔らかく、ペアプログラミングをやっているような感覚になります。

情報の粒度・質が高い

曖昧過ぎず、細か過ぎず、他言語でプログラミングを経験している人にとってちょうど良い粒度の内容だと思います。
リファレンス見れば分かるようなことは少なめで、かわりに実務上引っかかりやすいTipsなどが詳しく書いてあり、現場のエンジニアの知見がたくさん詰まった有用な情報ばかりです。

また、本書に収録できなかった技術記事をQiitaのアドベントカレンダーとして公開してくれています。
qiita.com

例題が個性的

proc/yieldの例題として、ワードシンセサイザーなるものが登場したのですが、さながらギターのコンパクトエフェクターのようで、自分も学生の頃弾いていたので思わずニヤリとしました。笑
自分の趣味を織り交ぜて、さらっとOOPで表現するところが素敵なエンジニアだなと思いました。
業務でJavaを使っているのですが、ラムダ式の利用シーンが分からない人たちにこの例題で説明してあげたら良いかも、と思いました。

紙質にこだわっている

写経に便利なよう、本を開いたままにできる紙を使用しています。
これにはめちゃめちゃ感動しました!全ての技術書がこの紙質になればいいと思います。笑

対象読者、オススメの読み方

他言語でプログラミングをひと通り経験している人に向けの書籍です。
プログラミング自体が初めての人にとっては少し難しいかもしれません。

個人的には

の順で進めると最短でRailsエンジニアになれるのでは、と思いました。

その後、

で深く勉強していくのが良さそうかなと感じています。(※よい勉強の仕方あれば教えてください)

参考

改訂2版 パーフェクトRuby
Rubyサポーターズ
技術評論社
売り上げランキング: 103,291
Effective Ruby
Effective Ruby
posted with amazlet at 18.02.14
Peter J. Jones
翔泳社
売り上げランキング: 264,608
メタプログラミングRuby 第2版
Paolo Perrotta
オライリージャパン
売り上げランキング: 200,922

【Ruby入門】superの振る舞いについて

最近Rubyを勉強しています。
Effective Rubyでsuperの振る舞いについて勉強していたところ、サンプルソースが少しわかりにくかったので自分なりに噛み砕いてみました。

1.カッコの有無による振る舞いの違い

  • オーバーライドするメソッドに引数を渡したくない場合は、 super()とする 。
    superではないことに注意。

サンプルソース

class SuperClass
  def m1(x=0, y=0)
    puts "x=#{x}, y=#{y}"
  end
end

class SubClass < SuperClass
  def m1(x, y)
    super(1, 2) # => x=1, y=2
    super(x, y) # => x=a, y=b
    super x, y  # => x=a, y=b
    super       # => x=a, y=b
    super()     # => x=0, y=0 (引数なしで呼び出し)
  end
end

subclass = SubClass.new
subclass.m1('a', 'b')

2.superに対応するメソッドの探索順序

  • スーパークラスのメソッド、moduleのメソッドを呼び出す
  • <クラス>.ancestorsメソッドで返却される、親クラスの配列順にメソッド探索を行う

サンプルソース

class SuperClass
  def m
    puts "SuperClass"
  end
end

module ModuleA
  def m
    puts "ModuleA"
  end
end

module ModuleB
  def m
    puts "ModuleB"
  end
end

# 検証
class SubClass < SuperClass
  def m
    super #=> SuperClass
  end
end

class IncludeModule
  include ModuleA

  def m
    super #=> ModuleA
  end
end

class IncAndSub < SuperClass
  include ModuleA
  include ModuleB
  def m
    p IncAndSub.ancestors #=> [IncAndSub, ModuleB, ModuleA, SuperClass, Object, PP::ObjectMixin, Kernel, BasicObject]
    super #=> ModuleB (ancestorsの結果の順に遡ってメソッドを探す)
  end
end

SubClass.new.m
IncludeModule.new.m
IncAndSub.new.m

3.コンストラクタでのsuperの振る舞い

  • Javaと違い、コンストラクタ(initializeメソッド)は暗黙的に親クラスのコンストラクタを呼ぶわけではない
  • 親クラスのコンストラクタを呼びたい場合は、initializeメソッド明示的にsuperを記述する必要がある

サンプルソース

class Parent
  attr_accessor :name
  def initialize
    @name = 'Howord'
  end
end

class Child1 < Parent
  attr_accessor :grade
  def initialize
    # superを指定しない
    @grade = 8
  end
end

class Child2 < Parent
  attr_accessor :grade
  def initialize
    super
    @grade = 8
  end
end

c1 = Child1.new #=> #<Child:0x00007fd583b2e6b0 @grade=8>
c1.name #=> nil (暗黙的に親クラスのinitializeが呼ばれるわけではない)

c2 = Child2.new #=> #<Child:0x00007fd583b2e6b0 @grade=8>
c2.name #=> Howord

参考

書籍:Effective Ruby

  • 項目7:superのふるまいがひと通りではないことに注意しよう
  • 項目8:サブクラスを初期化するときにはsuperを呼び出そう
Effective Ruby
Effective Ruby
posted with amazlet at 18.02.14
Peter J. Jones
翔泳社
売り上げランキング: 263,592

2018年の目標

あけましておめでとうございます。
昨年は家を建てたり、子供が生まれたりと変化に溢れた年でした。
今年も充実して過ごせるよう、目標を掲げたいなと思います。

生活の目標

パフォーマンス向上

だるさや眠気、肩こり腰痛などを感じ、日中のパフォーマンスが悪いと常々感じていました。
今年は原因を一掃し、体力をつけ、パフォーマンスの向上に注力しようと思います。
また毎日のルーチンを見直し、ムダな時間を減らして時間を有意義に使おうと思います。

  • 肩こりを治す
  • 腰痛を治す
  • 睡眠の質を上げる
  • 運動する
  • 体脂肪15%以下
  • 筋肉をつける
  • 22時までに寝る
  • 5時半に起きて朝活
  • ムダな時間を削る

生活に必要な知識をつける

家庭を持ち、生活を送る上で必要な知識がたくさんあると感じました。
家庭の生活向上のため、少しずつ知識を貯めて家族と共有しようと思います。

  • 子育ての知識をつける
  • お金の知識をつける
  • 健康の知識をつける

家族を大切にする

前職では残業ばかりで家族との時間がとれませんでした。
転職して生活が安定してきたので、家族との時間を大切にしたいと思います。

  • 子供と目一杯遊ぶ
  • 妻とたくさん話す
  • イベントを大事にする
  • 両親、祖父母とまめに会う

家庭のカイゼン

家庭もひとつのプロジェクトとして捉え、日々カイゼンしていくべきと考えています。
今年はきちんと行動に移していこうと思います。

  • どんな家族になりたいか?(ミッション、ビジョン)を話し合う
  • 何歳で何をしたいか?(ロードマップ)を話し合う
  • 妻とお互いの目標を話し合う
  • どんな子どもになってほしいかを話し合う
  • やりたいことを話し合う
  • 普段困っていることを話し合う

仕事の目標

新しい技術を身につける

エンジニアとして成長するため、常にアンテナを高く張り情報収集します。 興味があったけど着手できていなかったことに挑戦したいと思います。

  • rubyをマスターする
  • railsをマスターする
  • AWSをマスターする
  • TDDを実践する
  • DDDを勉強する
  • チームビルディングについて勉強する

アウトプットする

アウトプットすることで自分の考えを整理し、また共感してくれる方との接点を増やしたいと考えています。
セルフブランディングの一環としても、積極的にアウトプットすることを意識します。

  • ブログを書く
  • OSSに貢献する
  • アプリを公開する

収入アップ

今までお金を欲しがることに恥ずかしさがあったのですが、会社への貢献度=年収として捉え、自分の成長度を測る指標である、と考えを改めることにしました。
評価面談時に目標を擦り合わせ、達成することで毎年少しでも年収アップするようチャレンジしたいと思います。
また会社の制度として正式に副業OKとなったので、何かできないか模索しようと思います。

  • 会社に期待されていること、自分のやりたいこと明確にする
  • 副収入について考える

目標を立てただけではダメ

いつも目標を立ててもすぐ忘れてしまうので、目につくところ(ブログ)に書き出してみました。
定期的に進捗を確認し、目標達成に向けて頑張りたいと思います。
皆さん本年もよろしくお願いします!

【読書メモ】SOFT SKILLS ソフトウェア開発者の人生マニュアル

「SOFT SKILLS」という本が面白かったので、読書メモ。

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

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

どんな本?

エンジニアが上手く生きていくために必要なことをまとめた、ちょっと珍しい本です。
技術そのものについては一切触れません。
キャリアの育て方、お金の知識、健康の大切さ、などエンジニア人生を上手く生きるための知識がまとまっています。
Rebuildでも取り上げられ、話題になっていました。

目次
第1部 キャリアを築こう
第2部 自分を売り込め! 
第3部 学ぶことを学ぼう
第4部 生産性を高めよう
第5部 お金に強くなろう
第6部 やっぱり、体が大事
第7部 負けない心を鍛えよう

付録A コードを書けるなら金融は理解できる
付録B 株式市場の仕組み
付録C 食事と栄養の基礎:ガラクタを入れればガラクタが出てくる
付録D 健康な食事の方法:ピザは食品群ではない

どんな人向け?

  • エンジニアとして世の中に名を馳せたい人
  • より良い転職をしたい人
  • 技術さえあれば大丈夫だと思っている人
  • ポモドーロテクニックを知らない人
  • お金は使うか貯金するもんだと思っている人
  • 年齢とともに体力の衰え、体重の増加を感じてきた人

本書で得た学び

目標の設定

エンジニア人生の大目標をたてて、そこに向かうまでの中間目標(マイルストーン)を決めていく、という流れ。
他の本でもよく書いてある通りの流れなので、やはりこれがベストなのだと思います。

  • 自分のキャリアの大きな目標を決める
    • 大企業の重役になりたいのか
    • 起業したいのか
    • フリーランスになりたいのか
  • 大目標に向かうためのマイルストーンを決める(いつまでに何をやるか)
  • 目標を見えるところに貼り出す(大事!)
  • 目標の達成度を計測する
  • 適宜目標を見直す

自分を売り込む(セルフブランディング

エンジニアは、雇われのサラリーマンとして埋没してはダメ。
イチ個人として自分自身のブランド力を高める必要がある。
昔はハードルが高かったが、今はインターネットの力でいくらでも自己発信できるので、最大限に活用する。
また履歴書を常にブラッシュアップし、良い仕事が舞い込んでくるよう準備をしておくのも大切とのこと。
転職しようと思ってからでは遅い。
転職のプロであるエージェントとつながりを持ち、定期的にアドバイスを受けるのが良い。

  • 他者のブログやツイッターにコメントし、自分を知ってもらう
  • 自分のブログを持つ
  • アプリやWebサービスを作る
  • OSSを作る、またはコントリビュートする
  • ポッドキャストやオンライン講座などをおこなう
  • 履歴書を魅力的にする
    • 職務経歴・スキルを定期的に棚卸しする
    • 行為ー結果の順に書く
    • リクルーターに履歴書の出来を聞く

できるまでは、できたふりをする

理想の自分に到達するまでは、まるですでに理想の自分になっているかのように振る舞うのが重要。
そうすることで、だんだん本当に理想の自分に近づく事ができる。
これは他のビジネス書でも書いてあった。
こうすることでコンフォートゾーン(居心地のよい場所)の外に出ることができるし、理想の自分を每日イメージトレーニングすることになるので結果的に理想に近づくことができるのだと思う。

他人の望むことを考える

  • やりたい理由を伝えてもダメ、その人にとってどんなメリットがあるか提案する
  • 議論は避ける

生産性を上げる

  • 自分の行動ログをとり、時間の浪費ポイントを特定する
  • ポモドーロテクニックを使い、短期集中する時間を作る
  • 重要度の高い作業から取り掛かる。朝が一番生産性が高い

お金の知識を持つ

  • 給料をただ貯めるだけではだめ。どのように運用するか考える。
  • 現金で保持していた場合、インフレによる価値の目減りに注意する
  • エンジニアはロジカル思考ができるため、お金のルールを学べば比較的すんなり理解できる
  • 不動産投資がローリスク・ミドルリターンでおすすめ

健康の重要性

  • 健康でいることにより、日々の生産性が向上する
  • 筋肉をつけることで、自信につながる。精神面にも大きく影響する。

心を強くする

  • 全ての出発点は心であることを意識する
  • 自己イメージを変えることはとても難しいことを認識する
    • その上で、プラスの自己イメージを徹底的に植えつける
      • 「できるまでは、できたふりをする」もその一つ

最後に

買った当初は読み終わったら手放つもりでしたが、読了後は何度も読み返すために手元に置いておこうと思い直しました。
エンジニアなら一度は読んでおけ!と後輩にも薦めたい良書です。ぜひ読んでみてください。

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

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

Webエンジニアがフォローしておきたいアカウントリスト

日々の情報収集のためフォローしているアカウントをまとめてみました。

  • 技術書や技術系ブログの著者
  • 技術系イベントの登壇者
  • 興味のある分野で有名なエンジニア
  • 芋づる式に知ったエンジニア

など気になった人をフォローすると新鮮な情報が入ってきて非常に勉強になります。
主観が入っているためだいぶ偏っていると思いますが、良かったら参考にしてみてください。随時更新予定です。

技術全般

及川 卓也 及川 卓也 さん

Twitter facebook Qiita GitHub

Microsoft,Google,Incrementsを渡り歩いたのち2017年6月に独立。
エンジニア組織作りのエンジニアリングマネジメントとプロダクトマネジメント、技術アドバイスの領域で、IT系企業の顧問やアドバイザーとして活動中。
一般社団法人情報支援レスキュー隊 代表理事。Hack For JapanおよびIT×災害コミュニティの発起人。

宮川 達彦 宮川 達彦 さん

Twitter facebook GitHub

元クックパッド、現Fastlyのソフトウェアエンジニア。
Rebuild.fmというエンジニア向けポッドキャストを制作している。
サンフランシスコ在住。

伊藤 直也 伊藤 直也 さん

Twitter facebook Qiita GitHub

元はてなCTO。フリーランス時代は多数のIT会社の技術顧問を務める。
現在は一休のCTO。

増井 雄一郎 増井 雄一郎 さん

Twitter facebook Qiita GitHub

株式会社トレタのCTO。「IT芸人」「風呂グラマー」としておなじみ。
講演やOSS活動を積極的に行っている。

Jxck Jxck さん

Twitter Qiita GitHub

mizchi mizchi さん

Twitter Qiita GitHub

Java

櫻庭 祐一 櫻庭 祐一 さん

Twitter facebook GitHub

公開時からJavaを使い続けるソフトウェア開発者。
ITproなどで多数のJava解説記事を執筆し、JJUGなどにおける講演も活発に行っている。
また、世界でも400人ほどしか認定されていないJavaChampionでもある。

寺田 佳央 寺田 佳央 さん

Twitter facebook

日本マイクロソフト株式会社のJava エバンジェリスト。
2016年7月、日本人で 2 人目となる Java Champion に就任。JJUG 幹事の一員でもある。

きしだ なおき きしだ なおき さん

Twitter GitHub

Ruby

まつもと ゆきひろ まつもと ゆきひろ さん

Twitter Qiita GitHub

伊藤 淳一 伊藤 淳一 さん

Twitter Qiita GitHub

Scala

Kenji Yoshida Kenji Yoshida さん

Twitter GitHub

scalazとsbtとargonautとscalikejdbcのコミッター。

竹添 直樹 さん

Twitter GitHub

ビズリーチ社チーフアーキテクト。
Scala逆引きレシピ著者、GitBucketファウンダー。

瀬良 和弘 瀬良 和弘 さん

Twitter facebook Qiita GitHub

元エムスリー社、現SmartNews社ソフトウェアエンジニア。
ScalikeJDBC、Skinny Framework など Scala OSS プロジェクトリード。
Scalatra、json4s、Scalate のメンテナ。

水島 宏太 さん

Twitter GitHub

ドワンゴ社プログラマ。Japan Scala Association代表理事。

がくぞ(中村 学) さん

Twitter GitHub

株式会社Tech to Value 代表取締役。Japan Scala Association理事。

Kotlin

長澤 太郎 さん

Twitter Qiita GitHub

エムスリー株式会社のソフトウェアエンジニア。
Kotlinエバンジェリスト(JetBrains黙認)。日本Kotlinユーザグループ代表。

テスト駆動開発

和田 卓人 さん

Twitter GitHub

ドメイン駆動設計(DDD)

加藤 潤一(かとじゅん) さん

Twitter facebook Qiita GitHub

人工知能

松尾 豊 さん

Twitter

丸山 不二夫 さん

Twitter

清水 亮 さん

Twitter GitHub

セキュリティ

徳丸 浩 さん

Twitter

HHKBは吸振マットを着けてはじめて完成品となる

HHKB(Happy Hacking Keyboard)専用の「吸振マット」なるモノの存在を知り、さらに打鍵感が向上すると評判だったのでウズウズしてポチってしまいました。
実際に試してとても満足したので、良かったところ、気になるところをまとめます。

吸振マットとは

HHKB吸振マット(Professional用)|PFUダイレクトHHKB吸振マット(Professional用)|PFUダイレクト 

成蹊大学教授の塩澤一洋氏が自ら開発したものを元に製品化した、HHKB打鍵時の振動をさらに抑えるための吸振マットです。
打鍵時の振動・反発を吸収し、HHKBをより快適に利用することが可能になります。
マットの素材にはマイクロセルポリマーを使っています。他の素材に比べ、微細で均一なセル構造をしており、エネルギー吸収性に優れています。

吸振マット装着


こんな感じになります。
専用で作られているのでぴったり収まります。 Pro用とBT用があるので購入の際は注意してください。
全面に接着シートが貼られているので、一度貼ると剥がすのは難しいかも。
シリアルNoなどが見えなくなるので、貼る前に写真を撮っておくことをおすすめします。

良かったところ

面で支えるため安定感が増す

今まで4点で支えていたものが面で支えることなります。
その結果筐体がたわまなくなり剛性感が増し、また滑らなくなることで安定性が向上します。

底打ち感がさらに減り、指が疲れない

クッションが効くことで底打ち感がさらに減り、指が疲れなくなります。
打鍵の反応がよくなるため、自然と力を入れない打鍵方法になる感じです。

打鍵音が静かになる

キーボード裏の空洞が埋まることで音の響くところがなくなり、打鍵音が静かになります。

気になるところ

マット分の厚みが増す


当然ながらマット分の厚みが増す事になります。
マットの厚みは3mmですが、意外と使用感に影響します。最初は違和感があるかも知れません。
必要に応じて、パームレストなどで高さを調整するといいかもしれないです。

結果、買ってよかった

吸振マットを使用することで安定感+静音性が増し、さらにワンランク上のキーボードになった感じです。
マットの割には少々高いですが、HHKBユーザは試す価値ありだと思います。

EclipseをOxygenにUpdateする方法

統合開発環境 Eclipse の最新版 4.7 Oxygen がリリースされました。
現在利用中のEclipse(Neon)をOxygenにUpdateしたので、その方法をメモ。

※Oxygenについては、以下の記事が参考になりました。
参考記事:Eclipse 4.7 Oxygen 新機能 30+ / Java 9 を試そう!

1.Available Software Sites追加

Preferences > Install/Update > Available Software Sites に以下を追加します。

Name: 任意(Oxygenなど)

Location: http://download.eclipse.org/releases/oxygen

Preferences_と_workspace_-__Users_shogo_watanabe_Documents_workspace_-_Eclipse.png

2.Check for Updates 実行

Help > Check for Updates を選択し、Updateを実行します。

Help_と_Menubar.png

3.必要なプラグインをインストールし、再起動

ウィザードに沿って必要なプラグインをインストールし、Eclipseを再起動するとOxygenで起動されます。

Eclipse.png

【勉強会メモ】Java Day Tokyo 2017

Java Day Tokyo 2017に参加してきたのでその時のメモ。
今回はJavaSE9について重点的に聞いてきました。

自分用に書いていたので歯抜けが多く申し訳ないです。
間違いや補足事項あればご指摘いただけると幸いです。

Java Day Tokyo 2017 とは

日本オラクルが開催する、国内最大規模のJava年次イベント。
公式ページ:http://www.oracle.co.jp/events/javaday/2017/ ハッシュタグ: #JavaDayTokyo

参加したセッション

※敬称略

  1. 基調講演 (日本オラクル代表執行役社長 杉原博茂、Oracle Vice President Bernard Traversat、Oracle Senior Director Will Lions)
  2. Java 9 and Beyond: Java Renaissance in the Cloud(Oracle Vice President Bernard Traversat)
  3. Modular Development with JDK日本オラクル株式会社 デイビッド・バック)
  4. Servlet 4.0 で始めるHTTP/2(日本オラクル株式会社 柳原 伸弥)
  5. Java SE 9のすすめ (Java in the Box 櫻庭 祐一)
  6. Spring Framework 5.0によるReactive Web Application (Pivotalジャパン株式会社 槙 俊明) 発表資料:https://www.slideshare.net/makingx/spring-framework-50-reactive-web-application-javadaytokyo

トピック&まとめ

Javaの現状、今後の動向について

  • Java SE 9, Java EE 8がリリースされる
  • Claud上で最適化するための機能強化

◆今年7月にリリース予定のJava SE 9, Java EE 8について

  • Java SE 9については後述。Java EE 8についてはあまり聞けなかったため言及しない。

Java SE 9 で導入される、module(Project jigsaw)とその他の新機能について

  • Module System(Project jigsaw):最も注目されている機能。依存性をモジュール単位で設定可能とする。
  • JShell:PythonRubyのREPLのように、インタラクティブにコードを実行する機能。
  • JLink:JDKのクラスモジュールのうち必要なものだけ指定して読み込むことができる機能。
  • Ahead of Time Compilation(AOT):仮想マシンの起動前にJavaクラスをネイティブコードにコンパイルする機能。起動時の時間短縮。
  • G1GC:デフォルトのGCが、パラレルGCからG1GCに変更された。

Java SE 9 で発生した仕様変更について

Servlet 4.0 で対応するHTTP/2について

  • HTTP/2を利用することで、クライアントとのHTTP通信が高速化可能に。Servlet 4.0 を素で使うのはあまり実現的でないので、フレームワーク側に対応動向をチェックしておく。

Spring Framework 5.0のReactiveプログラミング対応

  • Spring Framework 5.0より、Reactiveプログラミング対応としてSpring WebFluxという新しいWebフレームワークが追加された。
  • Reactiveプログラミングを行うと、Non-Blockingなデータ通信により高速化、柔軟なスケーラリビティが期待できる。
  • RxJava, Reactor, Akka などのライブラリが有名どころ。JavaSE9ではFlowインターフェースによるReactiveプログラミング対応が行われている。

以下、各セッションのメモ

Java Day Tokyo 2017 基調講演 (日本オラクル代表執行役社長 杉原博茂、Oracle Vice President Bernard Traversat、Oracle Senior Director Will Lions)

概要(公式ページより)

いよいよJava SE 9とJava EE 8のリリースが近づいてきました!今回のJava Day Tokyoの基調講演は、Java SE、Java EEそれぞれの開発部門のVice Presidentが、直接みなさまへ新バージョンの価値をご紹介します。新バージョンの注目すべきポイント、さらにその先に何があるのかを、ぜひみなさまご自身でお確かめください。ご参加をお待ちしています。

日本オラクル代表取締役 杉原博茂 氏

  • 「日本を幸せにするカンパニーへ」
  • ITの人材不足が課題、2030年には60万人の不足に
  • オンプレ(12兆) > IaaS(2100億)
  • Cloud上で最適化するための機能強化

Oracle Vice President Bernard Traversat 氏

  • Cloudの基盤となる
    • AWS,MS AzuleなどのコアにJavaが使われている
  • Java is deadはOracleに買収されて払拭された
  • 先日、Dockerとのパートナーシップを発表した

Java9

  • 122のフィーチャーが入った
    • module system
    • modular JDK
    • JShell
    • Encapsulate Internal APIs
    • JLink: Java Linker
    • Ahead of time compilation(AOT)
      • Java9ではスタティックのコンパイレーションを利用可能
      • コンパイラがリアリタイム情報を取得可能に

Java9以降の動向(OpenJDK)

project Valhalla
  • ValueTypes
  • Specialized Generics
  • Var Handles
Project Panama

ビッグデータへの適用 GPUでの実行

  • Foreign Function Inteerface
  • Date Layout Control
  • Arrays 2.0

MazdaでのJavaの利用について

従来型

  • ビジネスプロセスをサポート
  • 機能要件・非機能要件をサポートするのは必須
  • 全ての開発者は共通の開発環境、アーキテクチャ、開発ルール、FWを使っている
  • 自動生成ツールを作成
  • 言語が長生きしてくれるのも重要
  • 下位互換性(バージョンアップしやすい)

最近の流れ

  • 組み合わせ
    • Strategy Pattern →関数型に
  • 期待
    • 開発環境やFWの共通化→肥大化→Jigsawに期待
    • 大量データ→GCの問題→BigData/AI時代のJavaに期待

JShell

  • REPLのようにインタラクティブに実行可能となる
  • mvn jshell compile
  • 補完機能もついている
  • プロトタイプをJShellで作成し、形ができてきたらコードに落とし込む

Oracle Senior Director Will Lions 氏

  • JavaEE8は早ければ今年の夏に発表予定
  • HTTP/2は速度が速くセキュア、アプリケーションに変更必要なし

JJUG

  • 現在6300人以上、コアは20-30代
  • なぜコミュニティに参加するのか
    • 一緒に考えてくれる仲間に出会える
    • すごいエンジニアを知ることが出来る
    • 発信して勉強できる

Java 9 and Beyond: Java Renaissance in the Cloud

概要(公式ページより)

本セッションはJava 9リリースのアップデート情報をお届けします。Java 9は、エンジニアがjavaサービスをクラウド上にjavaサービスを開発し展開する方法を根本的に変えます。新たなツールであるAOTやJLinkはJava 9の新モジュールシステムを活用して新しいタイプのパフォーマンスと密度の最適化を可能にします。Java 9でデフォルトGCに位置づけられたG1はビッグデータクラウドサービス向けの新たなレベルのスケーラビリティを提供します。さらに、value typeやJNIの移行、言語の改良など、Java 9以降の新機能についても触れたいと思います。またこのセッションでは、これら新機能のデモを通してクラウドベースの開発者にとってのJava 9の重要性を理解頂きます。

Java9

  • Javaの問題
    • 冗長性
    • メモリを食う
  • Javaの優先度
    • セキュリティ

新機能

  • jigsaw
  • JLink
  • Ahead of Time(AOT) Java Compiler
  • JShell
  • G1 GC as the Default

Java SE Advanced

  • Flight Recorder Performance
    • 条件に基づいた情報をトレーシングすることが可能
  • Java Mission Control Console
    • 問題箇所を調査することが出来る
  • Advanced Management Console
    • 特定のアプリだけ古いJavaを利用、などを設定できる(セキュリティの向上)

Java9以降の動向

  • Uniform
    • Array, Values, types
  • memory
    • なるべくコンパクトに、もっとライトウェイトなスレッド
  • Compatible
    • 互換性
  • Performance

Modular Development with JDK 9 (日本オラクル株式会社 デイビッド・バック)

概要(公式ページより)

モジュラー開発スタイルは全てのJava開発者(あなたのアプリケーションがたった1つのJARであっても100個のJARであっても)にメリットがあります。本セッションでは内部APIを強力に保護しながら数十の再利用可能なモジュールとしてJDKを構造化したJava 9のモジュールシステムを紹介します。 そして、セッションではモジュールをどのようにして作成するか、一般的に利用されているライブラリ潜むJDKの内部APIへの依存の回避をどのように行うかについて解説します。最後に、モジュールのために用意されたツール群について説明します。

Programs are Classes Package Mogules

  • “public” no longer mean “accessile ti everyone”. 新規ドキュメント 2017-05-17 14.13.09_1.jpg

新規ドキュメント 2017-05-17 14.14.37_1.jpg

exports はパッケージ単位。requires はモジュール単位 新規ドキュメント 2017-05-17 14.20.12_1.jpg

JLinkを利用すると、JDKのクラスモジュールのうち必要なものだけ指定して読み込むことが出来る →メリットは? cloudなどで多数のJDKを起動する場合などに、リソースの節約になる

jdepsでjarの依存関係を検査することができる(Java8から提供されている) 新規ドキュメント 2017-05-17 14.32.35_1.jpg

Automatic Modules 既存のJarを自動的にmodule化する機能 モジュールベースで開発されてないものは、Automatic modules機能を使う。Jarの変更なし

Servlet 4.0 で始めるHTTP/2 (日本オラクル株式会社 柳原 伸弥)

概要(公式ページより)

HTTPの仕様が16年ぶりにHTTP/1.1 からHTTP/2に更新され、通信効率を向上するさまざまな仕組みが取り込まれました。Servlet 4.0では、HTTP/2の活用するアップデートが行われています。本セッションでは、Servlet 4.0を用いたHTTP/2 の活用例についてご紹介します。

Servlet振り返り

  • サーバサイドで動作するJava
  • Controllerとしての役割

Servlet4.0概要

  • Servlet4.0 2017/7リリース予定
  • HTTP2対応

HTTP/2概要

  • 1系
    • TCPコネクションについて、リクエスト・レスポンスが1:1
    • 原則として1つのリクエストの完了を待ってから、次のリクエストを送信→待ちが発生
    • 高速化の取り組み
      • CSSスプライト
      • インラインイメージ
      • ドメインシャーディング
  • 2系
    • TCPコネクションについて、ストリームの多重化
    • ストリーム優先度
    • Server Push
    • ヘッダー圧縮(オーバーヘッドを少なくする)
    • バイナリー・フレーム(今まではテキストベースだった)

Server Push

  • 一つのリクエストに複数のレスポンスを返す
  • PushBuilderオブジェクトを作成 (request.newPushBuilder();)
  • PushBuilderオブジェクトは再利用可能
  • GETまたはHEADを利用する(「キャッシュ可能」かつ「安全」であること(RFC 7540の仕様に準拠))
  • JSファイルの結合や、CSSスプライトを行う必要がなくなる

新規ドキュメント 2017-05-17 14.32.35_2.jpg

Java SE 9のすすめ (Java in the Box 櫻庭 祐一)

概要(公式ページより)

Java SE 9というと、Project JigsawやJShellを思い浮かべるかもしれません。しかし、Java SE 9はそれだけではありません。Java SEの機能追加を定めるJEPの数は89もあります。 本セッションでは、Java SE 9の多くの新機能の中から言語仕様の変更や、コアライブラリの変更点、また互換性に問題がある点などについて実例と共に解説します。

Jigsaw, JShellの話はしない

アジェンダ

  • Compatibility
  • Brand new
  • Update

Compatibility

  • Language & Library
    • アンダースコアのみの変数名は使用できなくなった
    • 消えたメソッド
      • OSに直結するようなメソッドは隠蔽された(Jigsaw絡み)
    • deprecated
      • threadのStop
      • Reflection系のメソッド
  • VM&Tools
  • Operation & Management
    • No More Visual VM
    • No More hprof(heapのプロファイラ), jhat
    • JRE Structure
    • No More rt.jar, tools,jar, lib/ext
    • No More -Xbootclasspath
    • Default GC: G1GC (今まではパラレルGC)
    • Deprecated: CMS(GCの一種)

Brand New

  • Jigsaw
  • Project Kulla/JShell
  • Reactive Streams
    • 非同期プロセス
    • Publisher-Subscriver Model (w / Back Pressure)
    • Flowインターフェース
      • Publisher
      • Subscriber
      • Subscription
  • JEP11 Incubator Modules
    • ベータ版のような機能をJDKに含める
      • Java SE 9 : HTTP/2 Client

Update

  • Language: Milling Project Coin
    • @SafeVarargs
    • try-with-resources
      • finalのついた変数ならばtry句に使用可能に(実質的finalでもOK(Java8より))
    • ダイヤモンド演算子(<>)
      • 匿名クラスでも利用可能に
    • Interfaceでprivateメソッド
    • アンダースコア
  • Library
  • Stream
    • Factory Methods
      • ofNullable(t)
      • iterate(seed, hasNext, next)
        • 条件とつけられるようになった(今までは無限イテレート)
    • New Methods
      • take/dropWhile
      • Collectors.flatMapping
      • Collectors.filtering
  • Optional
    • stream()
    • ifPresentOrElse(action, elseAction)
    • or(supplier)
      • Optional opt = opt1.or(() -> opt2)
  • Collection
    • Factory Method
      • of()
        • List l = List.of(0,1,2);
        • Map<Integer, String> m = Map.of(0,”a”,1,”b”);
    • Making Immutable Collection
    • Enumeration.asIterator();
  • String
    • char → byte
      • heapの使用量がかなり減る
    • concatenation
      • StringBuilder → InvokeDynamic
        • 最適化が可能に
  • Deprecated
    • @Deprecatedのついたものは本当に消される
      • Deprecatedの警告が出た場合はすぐに対応すべき
  • Javadoc

Spring Framework 5.0によるReactive Web Application (Pivotalジャパン株式会社 槙 俊明)

概要(公式ページより)

Spring Framework 5.0の目玉機能としてReactiveプログラミング対応が加わり、Spring WebFluxという新しいWebフレームワーク及びランタイムが追加されます。 本セッションでは、Reactive対応の背景とReactive Streams/Project Reactorの説明から入り、Spring Boot 2.0を交えたSpring WebFluxの使い方をコード例を中心にご紹介します。

発表資料

https://www.slideshare.net/makingx/spring-framework-50-reactive-web-application-javadaytokyo

Reactiveとは?

  • Non-Blocking
  • event-driven
  • backpressure

種類

  • Sync/Bloking
  • Async & Blocking
    • マルチスレッド
      • スレッドを立ち上げる処理が重い
  • Async & Non-Blocking

    • Event-Loop
    • I/Oの待ち時間を有効に利用できる
  • Servletを使うと必然的にBlockingになる

  • Nettyを利用するとNon-Blocking & Event-Loop (Apple, Twitterなどで利用されている)

SpringがReactive対応する理由

  • マイクロサービス→無駄なくスケール可能に
  • スロークライアントからのアクセス
  • スケーラビリティ・安定性など

Reactive Streams

  • non-blocking
  • back prassure
    • データの流量を調節する機構

対応ライブラリ

  • RxJava
  • Reactor
  • Acca Stream

Reactorの場合

Flux/Mono

  • Flux
    • Publisherの実装0~N件のデータを表現する場合に使用
  • Mono
    • Publisherの実装 0または1のデータを表現する場合に使用

SpringFW5.0でのReactive Stream 新規ドキュメント 2017-05-17 17.52.39_1.jpg

HHKBで小文字英字が入力できなくなったら(CapsLock)

普段、HHKB(Happy Hacking Keyboard)というキーボードを使用しています。
ある日、突然大文字英字しか入力できなくなってしまい戻すのに少し手間取ったのでメモ。

挙動的にCapsLockがかかったのだろうと推測したのですが、HHKBにはCapsLockキーがありません。
じゃあショートカットキーかな、、と思い色々調べたところ、公式サイトのFAQに記載がありました。

Happy Hacking Keyboard サポートFAQ

以下、引用です。

Q1:"Caps Lock" を有効にするにはどうしたらいいですか?
A1:キーボード後部のDIPスイッチで、設定したモードにより動作が異なります。
【HHKモード】
"CapsLock"の機能はありません。
【Lite拡張モード、Macモード】
【Fn】+【Tab】キーで"CapsLock"の働きをします。

私はMacモードで使用していたので、Fn + Tabキーで無事CapsLockを解除できました。
FAQの一番上に書かれていたので、意外と皆さん引っかかるのかもしれませんね。

余談ですが、HHKBは純正の吸振マットが本当にオススメなので、存在を知らなかった方はぜひこの記事も読んでみてください! blog.shogo-mizuno.me

リフレクションで引数名を取得するときはjavacに-parametersオプションをつける

Javaでリフレクションを利用してメソッドの引数名を取得したかったのですが、ちょっと詰まったのでメモ。
結論としてはコンパイル時、javacに-parametersオプションをつける必要がありました。
以下検証までの手順です。

問題:リフレクションで取得した引数名がargNになる

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

public class GetArgsName {
    public static void main(String... args) throws NoSuchMethodException, SecurityException {

        Method m = Calc.class.getDeclaredMethod("add", int.class, int.class);
        Arrays.stream(m.getParameters())
            .map(Parameter::getName).forEach(System.out::println);
    }

    public static class Calc {
        public int add(int x, int y) {
            return x + y;
        }
    }
}

上記のプログラムで引数名を取得できると思い、実行してみたところ以下のような結果が。

arg0
arg1

引数名であるx,yを取得したかったのですが、なぜかargNで取得されました。

解決法:javacに-parametersオプションをつける

いろいろ調べた結果、以下のサイトにドンピシャの答えが書いてありました。
ひしだまさんにはいつもお世話になっています。笑

Javaリフレクションメモ(Hishidama's Java Reflection Memo)Javaリフレクションメモ(Hishidama's Java Reflection Memo) 

リフレクションで引数名を取得したい場合、javacに-parametersオプションをつける必要があるとのこと。
またEclipseで実行するときは、プロジェクトのProperties > Java Compiler より以下にチェックを入れればOK。
f:id:nesheep5:20170202140221p:plain

再度実行した結果、以下のように思惑どおり引数名を取得できました。

x
y