これおもしろい

らふにかいてこ

CoderDojoでメンターしてみて思うこと

CoderDojo Advent Calendar 2018 - Adventar の23日担当のtakasyです。 今年初めてメンターに参加したので、つらつらと振り返ってみたいと思います。

CoderDojo

coderdojo.jp

CoderDojoというのをご存知ですか?

自分は、どこかのカンファレンスでのセッションをきっかけに知るようになりました。 子どもたちがプログラミングを教えてもらうのではなく、一緒にプログラミングをするといった集まりだと認識しています。(多分合っているはず、多分) 公式サイトのスライドで雰囲気が分かるのでぜひご覧ください。

教会に通う中で子どもたちと接する機会もそこそこあり、子どもたちに教える形以外でプログラミングを使って交流出来ないかなぁと思っていたところだったので、セッションを聞き興味を持ちました。 検索してみたら近くで開催されていたので、2月にCoderDojo御茶ノ水に参加させて頂くことにしました。 今年で大体5, 6回くらいメンターとして参加させて頂いたと思います。 メンターで参加しているといっても、ほぼニンジャ(参加する子どもたち)の隣でPC開いてScratchはこういうことが出来るのかぁと触ってみているだけですが。

気づき

参加してみて、色々と気づきがありましたが、その中で特に思ったのは3点です。

  • 子どもたちの感覚が自分の当時の感覚とかなり違う
  • 若者向けのイベントが多い
  • 個性の多様さ

子どもたちの感覚が自分の当時の感覚とかなり違う

当たり前と思われるかもしれませんが、子どもたちの生活や環境などを聞いて、そういうのもあるのかーと驚きました。 ホームスクールとか語学勉強とかゲームとか最近の流行りとか諸々。

選択肢が広がるので、様々知っておくことは大事だと改めて感じました。 ホームスクールとか一つの選択肢として大いにありだと思いました。 自分が見聞きして知っている感覚や世界以外のものがあるということを忘れてはいけないなと思います。

若者向けのイベントが多い

小中高生対象のイベントがあるのを初めて知りました。 特にこの未踏ジュニアというプロジェクトとか。

jr.mitou.org

CoderDojoの発表会などもあるそうで、そこで発表することに慣れ、次に他の年齢制限が低いイベントなどに積極的に応募していく、という人もいて、良いサイクルだと感じました。

得手不得手もあると思うので、全員が全員やれば良いと思っている訳ではありませんが、そういうことも出来るのだと伝え、特別なことではないのだ、と実感させてあげられる環境を提供出来れば良いなと思います。 実績に基づく自信を養える環境は大事ですよね。自分にも言えることだと思いました。

個性の多様さ

一人ひとり本当に個性が違うなぁと、様々な人と接する機会を増やせば増やすほど感じます。 忠実にチュートリアルに沿って進める人、チュートリアルすらも聞かず自分でどんどん機能を触って試してみる人、やりたいことが大きいけど細分化するのは面倒がってやめようとする人、パターンを紙に書き出して仕様書的なものを自ら書いてくる人、ひたすら音にこだわる人などなど。

仕事をしている中でも感じますが、大人よりも純粋な分個性丸出しで、より顕著になって面白いです。(接し方に悩むときはありますが) その個性を伸ばせるようにそっと次を提案する、というレベルに徐々に挑戦していきたいですし、貴重な個性なので、大人子ども関係なく個性を伸ばす環境づくりは学びたいなと思います。

他道場

御茶ノ水以外にも他の道場を見てみたいと思い、埼玉の道場にも一度参加させて頂きました。 チャンピオン(そこのCoderDojoの運営者)によって道場の特色が結構違いそうな印象は受けていましたが、実際に他の場所に参加してみて違いを実感しました。 開催回数による慣れの違いもあり、埼玉は熟練した印象を受けました。 参加しているニンジャたちも回数を重ねているようだったので、作っているものもレベルが高いように思いました。

また、最近では知り合いが三鷹でCoderDojoを開いたので、そちらにも参加するようになりました。 大した戦力にはなれていませんが、わいわいプログラミングできる機会が増えるのは面白くて良いですね。 どういう道場になっていくのか楽しみです。

終わりに

今年はひとまず参加するというレベルでしたが、今まで知らなかった世界に触れられたので、とても良い機会を得られました。 今後はちゃんとUnityを勉強していきたいと思っているので、来年はScratchというよりはUnityよりでメンターに挑戦していければいいなと思います。

自分が感じたことは上述したとおりですが、皆さん参加することで何かしらの気づきを得られると思います。 興味を持たれた方はぜひ参加してみてはいかがでしょうか? かなり色々な場所で開催されているので、検索してみるとお近くで開催されているかもしれません。

Kontribute環境準備でJDKで詰まった時

Mac miniが昨日届き、開発環境を整えていますが、普段使いのMacbook Proと同じ環境にならず苦戦しています。
その中の一つとして、Kotlinのコントリビュート環境を整えるべく作業していた時に、JDKの設定で詰まったので、ビルドを通すまでの対処をメモしました。

基本的には

shiraji (@shiraj_i) | Twitterさんのこちらの資料で事足りると思います。

動画

crash.academy

スライド

photos.google.com

実のところまだ動画で補えていないので、これから拝見させて頂こうと思っています。
(今回詰まったところの説明もあったりして。)

まず1つ目、JDKの取得

旧バージョンのJDKのダウンロード方法 - Qiita
こちらにあるように、過去のバージョンは下の方のJava Archiveという項目に行けばあります。
1.6に関しては本家KotlinのReadMeにあったリンクから取得しましたが。
GitHub - JetBrains/kotlin: The Kotlin Programming Language
取得してきたら、先に紹介した資料を元にパスを通しましょう。(export 〜のところです。)

色々通ってビルド出来そうになったらIDEAのConfigurationを選択してビルドしてみましょう。
f:id:takattata:20181110184627p:plain

次に2つ目、ビルド時のエラー

上記のビルドを試したら転けました。
Could not target platform: 'Java SE 9' using tool chain: 'JDK 8 (1.8)'.
自分が違うパスを指定した可能性が高いので、詰まる人は少ないかもしれませんね。

intellij idea - Gradle - Could not target platform: 'Java SE 8' using tool chain: 'JDK 7 (1.7)' - Stack Overflow
これは設定のところから、
f:id:takattata:20181110183627p:plain
Build, ... > Build Tools > Gradleを選んで、
f:id:takattata:20181110183903p:plain
Gradle JVM: のところが9になっていると思うので、1.8に変えます。(画像は既に1.8ですが 。ちなみにこの1.8.0_181ではない可能性高いので、ご自身が信じた1.8.0を取得してきて下さい。ちゃんと分かったら追記します。)
f:id:takattata:20181110184019p:plain
大体Macだったら同じようなパスだと思います。違ったら9のパスの親を辿っていくと見つかるのではないでしょうか。

これで通ると思います。結構待って、IDEが立ち上がればOKです。

ちなみに

実はこのビルド時に左下で激しく主張されていました。どうやら指定しているバージョンがあっていないとのことで。落としてくるJDK間違えたか...。
f:id:takattata:20181110184912p:plain
あとで直します。

ビルドが通った後は

issueをちゃんと見て、どれが出来るかなーというのを見ないとですね。これはもう色々と読み漁って感覚掴まないと難しいんだろうなぁと思いながら、ちまっちまチラ見してる感じです。本当にちょっとだけど。早く感覚掴みたい。

という訳で、Have a nice Kotlin!

KotlinConf 2018 報告会に参加してきた #JKUG

kotlin.connpass.com
LINEに初めて足を踏み入れました。カフェお洒落。
HAVE A NICE KOTLIN! , Don't have a IC Card!
が今回の鉄則です。

linedevday.linecorp.com LINEの技術カンファレンス。技術の話聞けて参加費無料!
気になりますね👀行ける様に調整しよう。

以下セッションの内容のメモです。あまり追いついてない上に自分が気になるところ程度のメモなので悪しからず。()は自分の心の声です。

「KotlinConf 2018 カンファレンス概要とトピックOverview」

www.slideshare.net

オランダ/アムステルダムで開催された
KotlinConfにかかわるセッション以外の空気感、カンファレンスの概要
およびイベントを通して感じたトピックをギュッと圧縮してお届けします。  

発表者:mhidaka (@mhidaka) | Twitter
カンファレンスと本の編集でお馴染みのエンジニアの日高さん。
空気感や基調講演などをメインとした発表。
今回からはオランダのアムステルダムになった。遠い。12時間くらい掛かる。 街は歴史ある感じ。(行きたい。非常に行きたい。ヨーロッパ行ってみたい。)
東京も寒かったけど、あちらではダウンがいるくらい寒い。
マリファナが合法なのでよく吸ってる人がいるらしく、臭いが強い。(タバコ苦手だから辛そうだなぁ🤔)

証券取引所。(まじか、ステンドグラス無かったっけ?👀)
1日目はワークショップで、2, 3日目はセッション。
参加者数は1200+で、セッションルームは5つ。
テーマはモバイル・サーバー・学術など偏らず、難易度的にも偏らない様に注意されている印象。
皆ネットワーキングを目的に参加しているので、常にコミュニケーション取れる場所が提供されている。

良かったと思うセッション3つ

セッション自体は50くらいあるので、その中の厳選3つをご紹介。

Keynote by Andrey Breslav

www.youtube.com 一通りわかる優れもの

Shaping Your App's Architecture with Kotlin and Architecture Components by Florina

www.youtube.com 会社の人と一緒に観て欲しい、とうい一本。
Rxをcoroutineでこう変えられるよねなど、今書くならこう書けるよね!というのが分かりやすくて一押し!

Kotlin Coroutines in Practice by Roman Elizarov

www.youtube.com 分かりやすく話してくれている良いセッション。 ダメな書き方をまず教えてくれてから良くしていくという流れで、ステップを踏ませてくれる。

上記3つは英語があまり分からなくても、スライドが良くまとまっているので、見るだけでもある程度分かるものになっているのが推しポイントの一つ。
(どれもすごく気になる内容なので、ちゃんと観てチームで共有しようと思います。)

告知

droidkaigi.jp 初心者だけど、こう学んだよ、というのでも是非。
(と仰っていたので、そんな感じの内容のプロポーザルもさっき追加で出してきました👍)

「KotlinConf 2018 のワークショップに参加してきました」

speakerdeck.com

今年の KotlinConf は初日が Workshop Day でした。
丸一日のワークショップに参加してきたのでその内容と様子についてお伝えします。

発表者:Yuki Anzai (@yanzm) | Twitter
ワークショップは今年から始まった。
649ユーロ = 8万以上!!9:00-17:00で結構ハード!受付は8時。
(受付から会場までの写真良いですね。追体験してるみたいで面白い。)

コースは5つ用意されていて、講師が豪華!Kotlin in Actionの著者の方だったり。JetBrainの方やGooglerの方々など。
github.com github.com ここら辺にスライドや使っていたコードに似た様なものが、どことは言わないけど上がっていそうな感じ。Workshopという名前のね。どことは言わないけど。

注意点として、ヨーロッパのカンファレンスに行く人はくぼみに入る変換アダプタを持ってきた方が良い。
(これ最大の罠感ある。危ない。覚えておこう。)

やんざむさんが受けたのはコルーチンのコース。
一通り触ってみる感じの内容。デスクトップアプリといくつかの小さいデモコードがある。

メインのデスクトップアプリ

非同期で処理していくに当たって、非常によく考えられている構成だった。

今までのやり方だとどうなるか、それがコルーチンだとどうなるか、という感じ。 単純にコルーチンを使うだけでなく、repositoryごとにデータを取ってくるのを並列化してみるとか。

blocking = UIが止まっても良いから取ってくるというもの
複数のリポジトリにコントリビュートしてる人はUserIdが重複しているが、同じIDがあったら足していって、という処理をする。それに対して、はいやってみて、と始まったので、なかなか難易度高いワークショップだった。
これの答えとして、講師はgroupingByというのを使っていた。
Groupingというクラスがある。こういうところも勉強になる。

Retrofitのenqueueを利用。callbackはaggregateをするのが大変。
1個目取ってきたリポジトリのcallbackを呼んで、そのリポジトリのcallbackを呼んで〜、とcallabckだと大変。
それがcoroutineだとこう書けるから良いよね、という紹介。
Cancelable, Concurrent, Future, ChannelとActor, Gather...
詳細は先ほどのどことは言わなかったリポジトリを見てください。
リポジトリのコードにあるデスクトップアプリの方ではなく、小さいデモコードの方をまず動かしてみるのが良いのでは、と懇親会で教えて頂いたので、そうしてみようと思います。面白いですね、コルーチン。)

「KotlinConf 2018 Android編」

KotlinConf 2018のAndroid開発に関わるセッションをまとめてお伝えいたします。
Coroutine, KTXなどなどです。

発表者:akira108 (@hoshi_gaki) | Twitter
Androidのセッション3つを15分で伝える取り組みに挑戦!
LINE LIVEのエンジニアの方。Javaに出くわしたらKotlinに変えていく勢いでやっている。

Android Suspenders by Chris Banes

youtu.be サポートライブラリ作っている人で有名。

  • コルーチンの説明
  • Androidでどうやって書くのか
  • キャンセル処理とかあるよ
  • Androidのcallbackを書き換えてみよう

なぜコルーチン?
→I/O処理に良い, 限られたハードウェアの中で使いやすい, Rxより簡単
全部cancel書いてたら辛い!
→parentのjobを指定すればまとめてcancel出来るから安心!
が、まだ辛いのがある。parentのjobがない時。終わるまで生き続けてしまう。
CoroutineScopeを使う必要がある構成になった?何かがdeprecatedになった。(理解が追いつかなかったので、資料公開され次第そちらをご覧ください。)
これによってJobがcancelされるようになる。

Rxを置き換えられるのかという心配ありますよね。大丈夫!できます!
Retrofitではawaitを書く必要もなくなるらしい?soon.

Shaping Your App's Architecture with Kotlin and Architecture Components by Florina

youtu.be コルーチンなぜ使う? → 学ぶの簡単ほか
コルーチンどこで使うの? →ほぼ全部に使おう!
APIどうやって使うの?
Resultで包むのを推奨していた(ioschedであったな🤔)

コルーチンすごい!でもJava残ってるんだけど!Javaから使うとコルーチン入れるの辛い...
→Callbackに入れてしまおう、という良い妥協。

インラインクラスを使うことで生成されまくることがなくなる。
UseCaseは一つの責任しか持ってはいけないはずだから、publicな関数は1つにすべき。
だからinvokeオペレータを実装してしまえば良い。
命名相談してUseCaseつけなければ完全に関数名になるし。

Android KTX: A Dash of Kotlin Makes All the Difference! by Dan Kim

youtu.be KTXの1.0出た!alpha取れたよ!(betaの時とどこが変わったのか調べておくか...)
AOSPにも入ってるから、コントリビュートしてね!やり方教えるね!(これは気になりますなぁ👀)

すごく駆け足だから後でこのセッションの動画観てみてね!

「KotlinConf から見る、最近の Kotlin サーバーサイド事情」

発表者:Hirotaka Kawata /てくの (@hktechno) | Twitter 完全にサーバーサイドのエンジニアの方。
IoTサービスのバックエンドをKotlinで書いている。

思ったよりサーバーサイドのセッションもあった。
何かをやってみたの話が多かった。言語としてはKotlinを使ったよ、みたいな感じの。 サーバーサイド側でも非同期をちゃんとしないと大変なので、コルーチンが熱い。
アメリカよりヨーロッパでカンファレンスやって欲しい。(ここで日高さんがわかる〜と仰ってたのが面白かった😂)

(スライドの情報量が濃かったので、スライド上がったら是非そちらご覧ください。)

良く使われているWebフレームワークは3つ?

  • Ktor
  • http4k
  • Spring Boot

全部入りがほしければSpring

Webフレームワーク比較

業務として使うとなるとまだKtorだと足りないが、コルーチン使いたい場合はKtor。
KotlinNativeを使うにもKtorが可能性ありそう。
業務としてはSwaggerとか使えないと厳しいから、Ktorの今後に期待。 Ktorだとかなりファンクショナルにサーバーが立てられる。アノテーションとか使わなくて良い。

SpringFu, KoFu
(ここら辺理解が追いつかなかった。)

REST APIそろそろオワコンじゃない?という話を良く聞いた。
型がないの辛い、Jsonはパースが重い →GraphQL, gRPC

どこのサーバーを辿っているかを見るのすごく辛い?
→分散Tracing:色々なサーバー立ち上げて、APIたタックという時に必要になっていくのでは。

Kotlin/Nativeの可能性 →まだ辛そう。今後に期待。
JVMは起動が遅いから、Kkotlin/NativeよりはGraalVMの方に期待した方が良さそう?

「Kotlinのユニットテスト ベストプラクティス」

発表者:たろう (@ngsw_taro) | Twitter 「最後に、KotlinConfに行かれなかった太郎さんお願いします。」
お留守番枠だったから一生懸命ビデオを観て発表!
LINEスタンプ売っている。(先ほどTwitterでツイートされていましたね。)

youtu.be

JUnit4

companion objectやJavaに寄せるためのアノテーション、var、従来のモックライブラリだと工夫が必要、whenをバッククォートで囲む必要性、あまり情報を得られないエラーメッセージ...
テストクラスは毎回インスタンスが生成される。
インスタンスに紐づくのではなく、クラスに紐づくstaticが欲しくなる。

JUnit5

上記の様なことがあるから、JUnit5を使おう!という話。
共通のものをstaticにおく必要もなくなる。

ライフサイクルのデフォルト設定が出来る。
@Nestedでグルーピングして読みやすいメソッド名に出来るし、関数名にバッククォートを使うことでスペース入れられたりと人間に読みやすい名前もつけられる。 セッションの人は、JUnit5 + MockK + AssertJという組み合わせを使うそう。
モック生成は高コスト。テストで時間がかかってしまう。clearMocksを使うことで都度リセットする方法を使おう、という注意。

今まで話したものを含めてKotlinで書くとこうなる。

(まとめのメモ忘れた...。資料楽しみにしましょう。)

「build.gradle.kts」

speakerdeck.com 発表者:Panini (@callipan) | Twitter

最後に

いやー面白かったー。久しぶりにブログに書くかーと思うくらいには楽しみだったので、参加できて良かったです。こういう内容共有会本当にありがたいですね。
太郎さんみたくお留守番枠でも動画一生懸命観て何か自分も発表する!みたいな気持ちでやるのも良さそうだなぁ、などの刺激もしっかり受けましたし、良かった。
懇親会も良かったですね。ご飯美味しかった。LINEありがとう。やんざむさんに講義してもらうという贅沢もした。いや、いつも質問しまくって時間頂いてるんですけど。本当にいつもありがたいです🙏

追伸:参加してきた記事が何本か既に出てて、すごいなぁと思いました。

HAVE A NICE KOTLIN!