Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JavaDo #19

JavaDo #19

〈7/17〉Java 17 までの新文法をオンラインモブプログラミングで体験会
https://javado.connpass.com/event/217537/

Hiroto YAMAKAWA

July 17, 2021
Tweet

More Decks by Hiroto YAMAKAWA

Other Decks in Programming

Transcript

  1. #javado
    !"#"$%&$'()*+,-.
    /0120345671807(9:;
    @gishi_yama
    (山川広人: 公立千歳科学技術大学)
    1

    View Slide

  2. #javado
    あなたが普段お使いのJavaのバージョンを教えてください。
    ※普段使ってないひとは、最後にコーディングした時のJavaのバージョンで 🙇
    <=>[email protected]'OP
    2

    View Slide

  3. #javado 3

    View Slide

  4. #javado
    3Q0RSTU$KM$3Q0RVW$KM$
    XYXYZ[F[Y)R)M\🤔$
    ]^_`RFaK\.
    bcC>d25efghijRkPSIJaK\
    4

    View Slide

  5. #javado
    近年のソフトウェア開発の中で広く・強く支持を得ている(当然の様に使う)
    パラダイムや開発手法、アーキテクチャ、記法、etc...に対応できるよう、
    言語やエコシステムの仕組みが備わっていること
    (もしくは、備えられるように進化できていること)
    としたい。
    やりたいことに仕組みが備わっていれば、自然と開発者の負担が減る
     ⇒ 簡単に実現できるように見えてくる
    かといって、言語の元々のもつ特性や守備範囲をひっくり返すものではない
     ⇒ 例えば、Javaは17になってもきっと「冗長な書き方」に感じられる言語
       だってその根幹は「クラスを中心とする」などの基礎仕様などが根っこだから
    lmCnIJ$3Q0$Ko\
    5

    View Slide

  6. #javado
    〜 Java 9 : Milling Project Coin (2017)
     Java 7(Project Coin: try-with-resouces や型引数の省略など)の微修正
     ・インターフェースのPrivateメソッド  ・try-with-resources の実質finalな変数利用
     ・_ だけの使用禁止 など
    Java 9 〜 Project Amber (半年ごと)
     Javaの生産性を重視した小規模な言語使用のインキュベート
     一部 Preview で導入し、その後追加の改善や正式が行われる
     ・var ・Instance of のパターンマッチ ・switch式 ・Textブロック ・Records など
    その他:標準ライブラリの改善など(半年ごと)
     ・List などの .of , copyOf、Stringのformatted 、Streamのnot, drop/takeWhile, toList、
      HTTPClientなど
    !pq$rrsttuvwsx)yz{|+,)}~Y•€CR•‚TG
    6
    Javaは後⽅互換性を⼤切にしつつも、
    新たな⾔語や技術が作り出す「最近の当然」を取り込む速度をあげられるようになってきた

    View Slide

  7. #javado
    FkƒM„…†‚|‡‚‡'†ˆ[‰.
    .
    Š‹o!"#"&f!"#"Œ)yzY.
    ƒ'•(Ž•†'O
    7

    View Slide

  8. #javado
    Java7 からできるようになった
    try-with-resources
    Java9 からは、宣言済みの変数の
    インスタンスをcloseできるようになった
    ただし、変数は final として扱われる
    •‘’“”••–“‘—˜™š‘›—˜$œ$•8

    View Slide

  9. #javado
    ファイルパスがあれば、1行で読み書きできる
    (※通常の例外処理は必要、close処理は不要)
    ¡¢tB£¤2x-¥‡ST
    9

    View Slide

  10. #javado
    インターフェースを実装するクラスが、
    共通して・初期状態として持つメソッドと
    その処理内容を記述できるようになった
    たとえば...
    getZoneCode() で "JST" を返す
    TokyoClockクラス
    getZoneCode() で "EST" を返す
    ParisClockクラス
    を実装すれば、それぞれのインスタンスの
    getZoneTime で、タイムロケール
    設定済みの日時を得ることができる。
    20ds£¦st)$§—ž"š •¨$©‘•#"•—$EªA«
    10

    View Slide

  11. #javado
    ローカル変数を var にすることで、
    言語側で型推論をしてくれるようになった。
    ただし、メソッドの実行結果などで帰ってくる型がコード上で判別しずらいこともあるので、
    敢えて使わないという人も多い。(IDEが可視化サポートしてくれる場合もある)
    個人的には、フレームワークのコンポーネントの初期化など、
    明らかに格納する型が明らかでかつクラス名が長くなるような場合は重宝している。
    6s¬xye-#"‘(-®OJ
    11

    View Slide

  12. #javado
    HTTP1.1/HTTP2 に対応し、
    同期・非同期アクセスに対応した
    HTTPClientクラスが準備された。
    リクエストヘッダや
    同期・非同期なども設定しやすい。
    URLをWeb-APIのものにし、
    レスポンスボディの文字列を
    Jacksonなどで読み込むことで
    情報も用意にアクセスできる
    ¯°°±² •—Ÿ•
    12

    View Slide

  13. #javado
    文字列型の操作の改善や、メソッドの追加例。
    String.formatted
    Formatterを1行で呼び出す
    String.transform
    message を s として
    処理メソッドを与える
    (ラムダ式を利用)
    ³•‘•Ÿ´>)µ¶P·¸¹-„…
    13

    View Slide

  14. #javado
    本来は関数型言語などにおける「関数を式の値、引数、データ構造として扱う記法」。
    Javaの場合は後述するStream APIなどのために、
    「引数と、その引数を使った処理」を特定のメソッドに渡すことができる記法となっている。
    さらに、ラムダ式は メソッド参照 という記法に置き換えることもできる。
    º»P1¼Q½
    14
    引用: 櫻庭祐一, "今こそStream API 入門", https://www.slideshare.net/skrb/stream-api-125945709

    View Slide

  15. #javado
    イミュータブルなListなどを作りやすくなった
    (ミュータブルにしたい場合は
     new ArrayList(alphabetList)
    などを実行)
    ミュータブルなものからcopyすることもできる
    (Set/Mapも同様)
    ²™ —›••™Ÿ>)µ¶P·¸¹-„…
    15

    View Slide

  16. #javado
    Optional に渡されたものが
    null だった場合に値を設定しなおしたり、
    例外を制御するメソッドが追加されている
    ¾©••™Ÿ" >)µ¶P
    16

    View Slide

  17. #javado
    Streamの結果をListで取得したいことが
    よくあるが、toListでimmutableなリスト
    として取得できるようになった
    ³•‘—"¿$À±Á>)µ¶P
    17
    引用: 櫻庭祐一, "今こそStream API 入門", https://www.slideshare.net/skrb/stream-api-125945709
    º»P³•‘—"¿$À±Á

    View Slide

  18. #javado
    Instance of で実体クラスを判定した際に、
    わざわざダウンキャストせずに取り扱えるように
    else部や判定式の途中でも使える。
    ÁŸ˜•"Ÿ›—$™ž$)Âds0ÃA?
    18

    View Slide

  19. #javado
    ラムダ式や yield 式の形で、
    Switchの判定結果を式として設定できる
    ˜”••›–½
    19

    View Slide

  20. #javado
    """ ... """ で複数行の文字列を定義できる。
    SQLとか、メールのテンプレートとか
    いちいち文字列結合せずに、
    可視性高く定義できる
    °—œ•Ä ™›Å˜
    20


    Hello, Higuma Duke!


    View Slide

  21. #javado
    データの入れ物としての専用クラス
    (ValueObject的に利用できる)
    例えばJSONのデリアライズ先や
    DTO、一時的に組にしたいフィールド
    など、通常のクラスと区別したい
    (単なる)データの入れ物を
    用意しておくことができる。
    メソッドの拡張やSerializeも可能。
    一つのクラス内に複数のrecordを
    宣言することも可能。
    あくまでクラスとは別扱い
    (クラスの手っ取り早い書き方ではない)
    なので、継承に制限がある。
    Æ—›™‘§˜
    21
    と書くと、下のクラスと相当が生成される

    View Slide

  22. #javado
    gÇ)•È¹
    22

    View Slide

  23. #javado
    スーパークラスが、サブクラスになれるクラスを制限する
    ³—" —§$² "˜˜—˜>ÉsxÊ1tPË$±‘—#•—”
    23
    🆗
    🙅

    View Slide

  24. #javado
    一覧しててみやすい参考サイト:
    @hishidama "ひしだま's ホームページ Java新機能(Javaの変更点)"
    https://www.ne.jp/asahi/hishidama/home/tech/java/uptodate.html
    きしだなおきさんのQiita記事:
    @kis "Java16新機能まとめ" など
    https://qiita.com/nowokay
    櫻庭 祐一さんのBlog記事:
    @skrb "JEPでは語れないJava 16" など
    http://www.javainthebox.com/
    "今こそStream API 入門" もとても参考になる
    https://www.slideshare.net/skrb/stream-api-125945709
    X)ÌMCYGkÍ•ÎJ
    24

    View Slide

  25. #javado
    (|ÏЃM•‚‡GÑZ•RÒ_R)\.
    🤔
    25

    View Slide

  26. #javado
    345671807(Ó2Ó29:†‚»ÔÕ[
    26

    View Slide

  27. #javado
    345671807>34Ósʨ$3Ö07P$Ko
    27
    マーク・パール (著)、長尾高弘(訳)、
    及部敬雄(解説):
    モブプログラミング・ベストプラクティス
    モブプログラミング: 
     複数人の質疑や議論の結果で進み、
     フロー効率の向上やチームの成長に
     寄与する
    ○ 難しい課題に複数人の知識、
       スキル、ノウハウを総動員し取り組める
    ○ 相互に知識・スキルを共有・継承できる
    ○ 開発と改善(レビュー・リファクタリング)
       を兼ねられる
    ひとつのプログラミング課題に、複数人のチームメンバーが、
    同じ場所で、ひとつのパソコンを使って、解決方法を議論しな
    がら
    開発を進める手法
    参考文献:

    View Slide

  28. #javado
    1. 3名以上で一カ所に集まる
    2. タイピスト(1名)とモブ(そのほか)に分かれる。タイピストは、パソコンの前に座る。
    3. 活動する時間と、時間内に到達を目指すゴール、タイピストの交代のタイミング(5〜15分ごと)を決める
    〈モブ〉
    ・ ディスプレイに表示される画面を全員で見ながら、
      解決すべき課題や問題点に集中し、問題解決のための方法を考え・推測・提案する
    ・ わからないことはわかるまで質問して、学ぶ
    〈タイピスト〉
    ・モブ全員の合意がとれた操作やコードの入力をする
    4. タイミングがきたら、タイピストを交代する。
    5. ゴールが達成できたら、みんなで喜ぶ(ハイタッチ!)
    6. モブ終了の時間がきたら、次回のモブにむけてふりかえりを行う
    345671807)×Ø
    28
    モブ
    タイピスト
    モブ モブ
    モブ
    モブ

    View Slide

  29. #javado
    lÙ)345671807)9Ú
    29
    Zoomミーティング
    AWS Workspaces
    遠隔タイピストPC
    Workspaceクライアントで
    接続・タイピスト操作
    タイピスト役
    音声・カメラ
    Workspacesの
    画面共有
    音声・カメラ共有
    モブ役たち
    IntelliJ IDEA,
    Zoom を起動
    ブラウザも利用可
    10分程度で交代
    モブ役→タイピスト役は
     Workspacesクライアントを起動
    タイピスト役→モブ役は
    Workspacesクライアントを終了
    (変更タイミングはお知らせします)
    Zoomを起動
    遠隔タイピストPCの画面を
    Zoom画面共有で確認しながら
    モブ役達でディスカッションし、
    タイピストへ操作依頼

    View Slide

  30. #javado
    • 内職はやめましょう!
    通知がきたのでつい...は休み時間までグッと堪える。
     ⇒どうしても緊急のときは、一旦モブの活動から抜けて、終了させてから戻ってくる。
    進行に必要な調べものも、タイピストに指示をしてみんなで同じ画面で調べる。
     ⇒調べる時は一時的にタイマーをポーズしても良い。
    • できるだけビデオもONにしましょう!
    メンバーがどんな表情で参加しているかも、チームに重要な情報です。
    差し支えのない範囲で、カメラをONにして参加しましょう。
    • タイピストへ指示するときは、Zoomのコメント機能をうまく使おう!
    オプションを表示>コメントをつける で、画面共有に色々描ける
     ⇒レーザーポインタのつもりで「絵を描く」「スターをつける」で指し示す
     ⇒削除で消す
    • 細かくゴールを設定して、達成したら万歳しよう!
    「何分ぐらいで○○をしよう」と目標を決めてから作業をする
    目標が達成できたら、全員で万歳をして喜ぶ(少し大げさに)
    345671807)ÛÜÝ>ÞP
    30

    View Slide

  31. #javado
    • 参加者の人へ
    どんなに小さいことでも「わからない」「不安」「こういうことかな?と確認したい」が
    1つも残らないようにどんどん質問・確認しましょう。
    もちろん、プログラムのこと以外でも構いません。
    あなたが質問すれことで、同じ事を思っている・実は勘違いしている他の人も助かります。
    • 経験者の方へ
    参加者(初心者)の方が発言しやすい雰囲気造りや、確認の促しをしてあげてください。
    どんな細かいことでも共有された知識・スキルがチームの財産や蓄積になります。
    あながた教えることで、チームがどんどん円滑に、ゴールに進めるようになります。
    • Java Do スタッフへ
    原則経験者と同じ振る舞いですが、タイピストの暴走(モブの合議や指示のない操作)や
    モブの暴走(一人の意見で質疑や合議無しに進んでしまう)を防いでください。
    ゴールに到達したら率先して喜んでください。チームの良い雰囲気が作れます。
    345671807)ÛÜÝ>ßP
    31

    View Slide

  32. #javado
    グループで何か素振りができる簡単なアプリを作成して、そのなかで積極的に新しい文法を試して
    みましょう。
    (どうしてもCUIとかになりがちですが)どんなものを作るか、どの文法を試してみたいかも、モ
    ブのグループの皆さんにお任せします。
    例えば...
    ・簡単なゲームを作ってみる(じゃんけん・ポーカー・トランプなど)
    ・コロナ感染症のオープンデータをひっぱってきてファイルに書き込む(バッチ処理的な)
    ・簡単なWebアプリを作ってみる(Spring MVCなど)
    ・TechFulなどの演習問題の回答をJava17に作り替えてみる
    Processingを使える人が運良くいる場合は、それを使うのものありかもです...
    (一応、モブ用マシンに組み込んだプロジェクトがおいてあります)
    メンバー間のレベル差もあるので、エンジニア経験が豊富な方はぜひリードをお願いします。
    345671807)¡sÃ
    32

    View Slide

  33. #javado
    File > ProjectStructure の Project や Modules で、
    Language Level を 16 (Preview) - Sealed Types にしてください。
    •àáP*†k56v¦ÊB-âJã
    33

    View Slide