Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
JavaDo #19
Search
Hiroto YAMAKAWA
July 17, 2021
Programming
670
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JavaDo #19
〈7/17〉Java 17 までの新文法をオンラインモブプログラミングで体験会
https://javado.connpass.com/event/217537/
Hiroto YAMAKAWA
July 17, 2021
More Decks by Hiroto YAMAKAWA
See All by Hiroto YAMAKAWA
日本PostgreSQLユーザー会北海道支部(JPUG-Ezo)の紹介 / BEACON#01 JPUG-Ezo
gishi_yama
0
30
Javaユーザーグループ北海道(JavaDo)の紹介 / BEACON#01 JavaDo
gishi_yama
0
31
Beyond Coding: Empowering the Next Generation through Community-Supported Programming Education / CIF26
gishi_yama
0
63
1password で 開発環境の環境変数を安全に管理したい / mild-web-sap #31
gishi_yama
0
57
新しいJavaを学んで・使っていこう! / osd26do
gishi_yama
0
260
Hokkaido JUGのJCP Annual Awards授賞式 / JJUG CCC 2026 Spring LT
gishi_yama
0
110
カンファレンスのCFPを 試しに書いてみよう! / JavaDo32
gishi_yama
0
390
開発環境構築の共通要素:必要なものを手元に持ってきて使えるようにする/JavaDo28
gishi_yama
0
210
ドメイン層×日本語プログラミング/seb_sapporo_04
gishi_yama
1
240
Other Decks in Programming
See All in Programming
JRuby: Past, Present, and Future
headius
0
210
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
300
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
4
400
mrbgem 三角測量 開発
ogom
0
140
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
450
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
770
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
130
Workers Cache を知る
syumai
0
310
setup-vp GitLab対応の裏側
naokihaba
0
140
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.2k
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
510
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
200
Featured
See All Featured
Test your architecture with Archunit
thirion
2
2.4k
How to make the Groovebox
asonas
2
2.5k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
530
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
270
Navigating Team Friction
lara
192
16k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Code Review Best Practice
trishagee
74
20k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
690
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
It's Worth the Effort
3n
188
29k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
340
Transcript
#javado !"#"$%&$'()*+,-. /0120345671807(9:; @gishi_yama (山川広人: 公立千歳科学技術大学) 1
#javado あなたが普段お使いのJavaのバージョンを教えてください。 ※普段使ってないひとは、最後にコーディングした時のJavaのバージョンで 🙇 <=>?@ABCDE0BFGHIJKLMN'OP 2
#javado 3
#javado 3Q0RSTU$KM$3Q0RVW$KM$ XYXYZ[F[Y)R)M\🤔$ ]^_`RFaK\. bcC>d25efghijRkPSIJaK\ 4
#javado 近年のソフトウェア開発の中で広く・強く支持を得ている(当然の様に使う) パラダイムや開発手法、アーキテクチャ、記法、etc...に対応できるよう、 言語やエコシステムの仕組みが備わっていること (もしくは、備えられるように進化できていること) としたい。 やりたいことに仕組みが備わっていれば、自然と開発者の負担が減る ⇒ 簡単に実現できるように見えてくる かといって、言語の元々のもつ特性や守備範囲をひっくり返すものではない
⇒ 例えば、Javaは17になってもきっと「冗長な書き方」に感じられる言語 だってその根幹は「クラスを中心とする」などの基礎仕様などが根っこだから lmCnIJ$3Q0$Ko\ 5
#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は後⽅互換性を⼤切にしつつも、 新たな⾔語や技術が作り出す「最近の当然」を取り込む速度をあげられるようになってきた
#javado FkƒM„…†‚|‡‚‡'†ˆ[‰. . Š‹o!"#"&f!"#"Œ)yzY. ƒ'•(Ž•†'O 7
#javado Java7 からできるようになった try-with-resources Java9 からは、宣言済みの変数の インスタンスをcloseできるようになった ただし、変数は final として扱われる
•‘’“”••–“‘—˜™š‘›—˜$œ$•<ž•Ÿ" Rye 8
#javado ファイルパスがあれば、1行で読み書きできる (※通常の例外処理は必要、close処理は不要) ¡¢tB£¤2x-¥‡ST 9
#javado インターフェースを実装するクラスが、 共通して・初期状態として持つメソッドと その処理内容を記述できるようになった たとえば... getZoneCode() で "JST" を返す TokyoClockクラス
getZoneCode() で "EST" を返す ParisClockクラス を実装すれば、それぞれのインスタンスの getZoneTime で、タイムロケール 設定済みの日時を得ることができる。 20ds£¦st)$§—ž"𠕍$©‘•#"•—$EªA« 10
#javado ローカル変数を var にすることで、 言語側で型推論をしてくれるようになった。 ただし、メソッドの実行結果などで帰ってくる型がコード上で判別しずらいこともあるので、 敢えて使わないという人も多い。(IDEが可視化サポートしてくれる場合もある) 個人的には、フレームワークのコンポーネントの初期化など、 明らかに格納する型が明らかでかつクラス名が長くなるような場合は重宝している。 6s¬xye-#"‘(-®OJ
11
#javado HTTP1.1/HTTP2 に対応し、 同期・非同期アクセスに対応した HTTPClientクラスが準備された。 リクエストヘッダや 同期・非同期なども設定しやすい。 URLをWeb-APIのものにし、 レスポンスボディの文字列を Jacksonなどで読み込むことで
情報も用意にアクセスできる ¯°°±² •—Ÿ• 12
#javado 文字列型の操作の改善や、メソッドの追加例。 String.formatted Formatterを1行で呼び出す String.transform message を s として 処理メソッドを与える
(ラムダ式を利用) ³•‘•Ÿ´>)µ¶P·¸¹-„… 13
#javado 本来は関数型言語などにおける「関数を式の値、引数、データ構造として扱う記法」。 Javaの場合は後述するStream APIなどのために、 「引数と、その引数を使った処理」を特定のメソッドに渡すことができる記法となっている。 さらに、ラムダ式は メソッド参照 という記法に置き換えることもできる。 º»P1¼Q½ 14
引用: 櫻庭祐一, "今こそStream API 入門", https://www.slideshare.net/skrb/stream-api-125945709
#javado イミュータブルなListなどを作りやすくなった (ミュータブルにしたい場合は new ArrayList(alphabetList) などを実行) ミュータブルなものからcopyすることもできる (Set/Mapも同様) ²™ —›••™Ÿ>)µ¶P·¸¹-„…
15
#javado Optional に渡されたものが null だった場合に値を設定しなおしたり、 例外を制御するメソッドが追加されている ¾©••™Ÿ" >)µ¶P 16
#javado Streamの結果をListで取得したいことが よくあるが、toListでimmutableなリスト として取得できるようになった ³•‘—"¿$À±Á>)µ¶P 17 引用: 櫻庭祐一, "今こそStream API
入門", https://www.slideshare.net/skrb/stream-api-125945709 º»P³•‘—"¿$À±Á
#javado Instance of で実体クラスを判定した際に、 わざわざダウンキャストせずに取り扱えるように else部や判定式の途中でも使える。 ÁŸ˜•"Ÿ›—$™ž$)Âds0ÃA? 18
#javado ラムダ式や yield 式の形で、 Switchの判定結果を式として設定できる ˜”••›–½ 19
#javado """ ... """ で複数行の文字列を定義できる。 SQLとか、メールのテンプレートとか いちいち文字列結合せずに、 可視性高く定義できる °—œ•Ä ™›Å˜
20 <html> <body> <div>Hello, Higuma Duke!</div> </body> </html>
#javado データの入れ物としての専用クラス (ValueObject的に利用できる) 例えばJSONのデリアライズ先や DTO、一時的に組にしたいフィールド など、通常のクラスと区別したい (単なる)データの入れ物を 用意しておくことができる。 メソッドの拡張やSerializeも可能。 一つのクラス内に複数のrecordを
宣言することも可能。 あくまでクラスとは別扱い (クラスの手っ取り早い書き方ではない) なので、継承に制限がある。 Æ—›™‘§˜ 21 と書くと、下のクラスと相当が生成される
#javado gÇ)•ȹ 22
#javado スーパークラスが、サブクラスになれるクラスを制限する ³—" —§$² "˜˜—˜>ÉsxÊ1tPË$±‘—#•—” 23 🆗 🙅
#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
#javado (|ÏЃM•‚‡GÑZ•RÒ_R)\. 🤔 25
#javado 345671807(Ó2Ó29:†‚»ÔÕ[ 26
#javado 345671807>34Ósʨ$3Ö07P$Ko 27 マーク・パール (著)、長尾高弘(訳)、 及部敬雄(解説): モブプログラミング・ベストプラクティス モブプログラミング: 複数人の質疑や議論の結果で進み、 フロー効率の向上やチームの成長に
寄与する ◦ 難しい課題に複数人の知識、 スキル、ノウハウを総動員し取り組める ◦ 相互に知識・スキルを共有・継承できる ◦ 開発と改善(レビュー・リファクタリング) を兼ねられる ひとつのプログラミング課題に、複数人のチームメンバーが、 同じ場所で、ひとつのパソコンを使って、解決方法を議論しな がら 開発を進める手法 参考文献:
#javado 1. 3名以上で一カ所に集まる 2. タイピスト(1名)とモブ(そのほか)に分かれる。タイピストは、パソコンの前に座る。 3. 活動する時間と、時間内に到達を目指すゴール、タイピストの交代のタイミング(5〜15分ごと)を決める 〈モブ〉 ・ ディスプレイに表示される画面を全員で見ながら、
解決すべき課題や問題点に集中し、問題解決のための方法を考え・推測・提案する ・ わからないことはわかるまで質問して、学ぶ 〈タイピスト〉 ・モブ全員の合意がとれた操作やコードの入力をする 4. タイミングがきたら、タイピストを交代する。 5. ゴールが達成できたら、みんなで喜ぶ(ハイタッチ!) 6. モブ終了の時間がきたら、次回のモブにむけてふりかえりを行う 345671807)ר 28 モブ タイピスト モブ モブ モブ モブ
#javado lÙ)345671807)9Ú 29 Zoomミーティング AWS Workspaces 遠隔タイピストPC Workspaceクライアントで 接続・タイピスト操作 タイピスト役
音声・カメラ Workspacesの 画面共有 音声・カメラ共有 モブ役たち IntelliJ IDEA, Zoom を起動 ブラウザも利用可 10分程度で交代 モブ役→タイピスト役は Workspacesクライアントを起動 タイピスト役→モブ役は Workspacesクライアントを終了 (変更タイミングはお知らせします) Zoomを起動 遠隔タイピストPCの画面を Zoom画面共有で確認しながら モブ役達でディスカッションし、 タイピストへ操作依頼
#javado • 内職はやめましょう! 通知がきたのでつい...は休み時間までグッと堪える。 ⇒どうしても緊急のときは、一旦モブの活動から抜けて、終了させてから戻ってくる。 進行に必要な調べものも、タイピストに指示をしてみんなで同じ画面で調べる。 ⇒調べる時は一時的にタイマーをポーズしても良い。 • できるだけビデオもONにしましょう! メンバーがどんな表情で参加しているかも、チームに重要な情報です。
差し支えのない範囲で、カメラをONにして参加しましょう。 • タイピストへ指示するときは、Zoomのコメント機能をうまく使おう! オプションを表示>コメントをつける で、画面共有に色々描ける ⇒レーザーポインタのつもりで「絵を描く」「スターをつける」で指し示す ⇒削除で消す • 細かくゴールを設定して、達成したら万歳しよう! 「何分ぐらいで◦◦をしよう」と目標を決めてから作業をする 目標が達成できたら、全員で万歳をして喜ぶ(少し大げさに) 345671807)ÛÜÝ>ÞP 30
#javado • 参加者の人へ どんなに小さいことでも「わからない」「不安」「こういうことかな?と確認したい」が 1つも残らないようにどんどん質問・確認しましょう。 もちろん、プログラムのこと以外でも構いません。 あなたが質問すれことで、同じ事を思っている・実は勘違いしている他の人も助かります。 • 経験者の方へ 参加者(初心者)の方が発言しやすい雰囲気造りや、確認の促しをしてあげてください。
どんな細かいことでも共有された知識・スキルがチームの財産や蓄積になります。 あながた教えることで、チームがどんどん円滑に、ゴールに進めるようになります。 • Java Do スタッフへ 原則経験者と同じ振る舞いですが、タイピストの暴走(モブの合議や指示のない操作)や モブの暴走(一人の意見で質疑や合議無しに進んでしまう)を防いでください。 ゴールに到達したら率先して喜んでください。チームの良い雰囲気が作れます。 345671807)ÛÜÝ>ßP 31
#javado グループで何か素振りができる簡単なアプリを作成して、そのなかで積極的に新しい文法を試して みましょう。 (どうしてもCUIとかになりがちですが)どんなものを作るか、どの文法を試してみたいかも、モ ブのグループの皆さんにお任せします。 例えば... ・簡単なゲームを作ってみる(じゃんけん・ポーカー・トランプなど) ・コロナ感染症のオープンデータをひっぱってきてファイルに書き込む(バッチ処理的な) ・簡単なWebアプリを作ってみる(Spring MVCなど)
・TechFulなどの演習問題の回答をJava17に作り替えてみる Processingを使える人が運良くいる場合は、それを使うのものありかもです... (一応、モブ用マシンに組み込んだプロジェクトがおいてあります) メンバー間のレベル差もあるので、エンジニア経験が豊富な方はぜひリードをお願いします。 345671807)¡sà 32
#javado File > ProjectStructure の Project や Modules で、 Language
Level を 16 (Preview) - Sealed Types にしてください。 •àáP*†k56v¦ÊB-âJã 33