どうも、小野です。
5/17に行われたOracle主催のイベント「Oracle Code Tokyo 2019」に参加してきました。
昨年までは、「Java Day Tokyo」として開催されていましたが、 Javaだけではなく、他の技術なども取り入れたいという思いもあり、今年からタイトルが変わったそうです。
個人的には、Javaのセッションが減ってしまったので、最初は参加するつもりはありませんでしたが、 和田卓人さんの「過去を知り、未来に備える - 技術選定の審美眼2019」がどうしても聞きたかったので、当日の午前中に参加を決めました。
今回はセッション内容を簡単に共有したいと思います。
他の大規模なイベントにも参加するのですが、今回のカンファレンスはスーツ率が高かったです。 およそ8割がスーツでしたね。そんな中、私は白Tで参加しました(汗) ↓の写真ですが、これを専用のハッシュタグをつけてツイートすると、ウイダーinゼリーが貰えるということだったのでやりました。 決して、自分をアピールするためではないということを理解していただけたら幸いですm( )m
目次
- 過去を知り、未来に備える - 技術選定の審美眼2019
- 変化する時代にPythonを選ぶ意味
- ブロックチェーンアプリケーション(Dapp)開発の現状と課題
- GraalVM: it's benefits and opportunities
- おわりに
過去を知り、未来に備える - 技術選定の審美眼2019
実は昨年のデブサミでも似たようなタイトルでお話されていたのですが、タイトルにもある通り2019年版ということもあり、 アップデートされた内容が気になり、聞くことにしました。
Web vs ネイティブ
スマホという1つの小さな椅子をネイティブが奪うのか、それともWebが奪うのか。 一昔前はネイティブが有利でしたが、PWAが登場したことにより、Webの技術でもネイティブと遜色ないアプリを作り上げることができるようになりました。
Webアプリ、ネイティブアプリでそれぞれ品質保証が異なります。
Webアプリの場合 「不具合が発生してから、修正されるまでの時間」
ネイティブアプリの場合 「不具合が発生してから、次の不具合が発生するまでの時間」
ちょっと余談ですが。 ネイティブアプリの強みはアプリストアの存在だと個人的には思います。 ユーザはスマホで何かをやりたいといったときにApp Store、またはPlayストアで検索することが殆どだと思います。 この流れを断ち切らない限り、PWA対応のWebアプリがネイティブに勝ることは難しいのかなというのが本音です。
ゲームチェンジャーの話
技術はどんどん変化していき、その中でスルーしていい技術とスルーしないほうがいい技術があります。 そんな中でも、圧倒的な改善に繋がる技術、「ゲームチェンジャー」はスルーし難い存在です。
これまでのゲームチェンジャーの中には、Ruby On Railsなどがあります。
- 開発における生産性
- 学習コスト
- 心理的な負担
実際、登場した技術がゲームチェンジャーかどうかは、上記で述べた観点から判断した上で見極める必要があります。
Worse is Better
直訳で「悪いほうが良い」です。
ソフトウェアを作る際には(おそらく他の分野でも同様に)最小限のものをまず作り、そして必要に応じて育てるほうがよいとされる。
以下のサイトから引用
http://www.kt.rim.or.jp/~hisashim/gabriel/WorseIsBetter.ja.html
「ユーザの負担が増えても、コードがシンプルのほうが良い。」
もちろん、理想はどちらも実現できたほうがよいが、いずれか一方を取るならばの話です。 逆は、「コードが複雑になっても、ユーザの負担は減らしたほうよい。」です。
コードがシンプルであることのメリットとして、
- ソースが読みやすい
- 改善が早い(影響範囲が把握しやすい)
- 開発者が増える
があり、結果的に改善サイクルの高速化に繋がり、ユーザも増えていくという考えです。
システムは利用者目線で考えることが多いですが、今後も見据えてシステムを改善しやすい状態(シンプル)にしておくことも重要なのかなと思いました。
変化する時代にPythonを選ぶ意味
前提知識として、Pythonは機械学習には最適だという何の根拠もない状態で聞きました。 内容的は初心者向けの内容で、わかりやすかったです。
Pythonとはなんぞやという内容から入り、機械学習をするための環境構築方法、実際の数学の計算をPythonを使って試すというような流れでした。
詳しい人にとっては物足りないかもしれませんが、Python初心者にとっては機械学習に取り組むきっかけになったと思います。
Pythonの概要
プログラミング言語にはバージョンは必ず存在し、もちろんPythonにも存在します。 今からPythonを始めようとしている人は、3系を使うべし。
Pythonはプログラミング初心者にとっても、扱い易い言語として知られています。 例えば、条件分岐を行う場合、Javaだとif、case、switchがあり処理によって使い分けますが、 Pythonの場合、ifしかないので迷わずできそうですね。
処理速度に関してはPythonはJavaのようなコンパイル言語ではなく、インタープリタ言語(逐次解析、実行)なので、 コンパイル言語に比べ遅いです。ただ、最近話題のGraalVMの登場により、インタープリタ言語でもネイティブビルドが実行でき、 処理速度の改善が期待できます。 Python3.7でGraalVMとの完全互換を目指しているそうなので、Pythonを使っている方はぜひ注目してください。
機械学習のための環境
Pythonで機械学習を行う場合、Jupyter環境を構築する必要があるのですが、結構手間らしいので、 その場合はAnacondaを使うといいそうです。
数学のお話
機械学習を行う上で、数学の知識は必要になってきます。 本セッションでは、実際の数学の式をPythonを使って説明されていました。
感心したのが、Pythonの数値型には桁数制限がないこと。 他の言語だったら、オーバーフローしてしまいますよね? 数字の単位では表せないほどの桁数の計算も、ライブラリを使えば圧倒的な速さで計算できます。 これがPythonを使う理由なのかなと思いました。
ブロックチェーンアプリケーション(Dapp)開発の現状と課題
前提として、ブロックチェーン=仮想通貨を作る仕組み、中央管理サーバがない、改ざんできないなどのざっくりとした知識の中で聞きました。
よくブロックチェーンで検索すると、一般的なシステムとブロックチェーンで構築された仕組みで比較している記事を見かけますが、 概念はわかるけど、実際の仕組みがモヤモヤしていたので、今回のセッションを聞いてスッキリしました。
一般的なシステムとブロックチェーンのシステムの違い
一般的なシステムでは以下のような状況が起こり得る。
- ユーザが課金によりポイントを購入する。
- 運営会社がプログラムを書き換え、ポイントを0に更新する。
- ユーザは課金したのに、ポイントが増えない。
つまり、運営会社が管理しているシステムは改ざんが行われる可能性があります。
この問題を解決するのがブロックチェーンです。
運営会社がプログラムを書き換える場合、全世界に分散しているノードに対してデプロイを行います。 プログラムが正しいかどうかは第3者でも確認できる仕組み(イーサスキャン)があるため、 不正なデプロイはできません。
しかも、運営会社がプログラムをデプロイする際にGASという手数料を支払わなければなりません。
デモ
Oracle Code Coin(OCC)とう仮想通貨を実際に作成して、送金するような簡単なデモを披露してました。 デモがあると理解が深まりますね。
課題
- トランザクション処理が遅い。
- トランザクション処理に手数料が発生する。
- 開発ツールが未熟である。
ブロックチェーンはサーバが分散されていることはわかったのですが、その分散ネットワーク構築などはどこで管理しているのか未だに謎です。
GraalVM: it's benefits and opportunities
GraalVMを使うことによるメリットなどが聞けました。
主なメリットとしては以下のようなものがあります。
- 起動が早い
- 処理速度の改善
- 省メモリ
- 多言語対応(Polyglot)
私も、JavaのGraalVM対応フレームワーク「Quarkus」に注目しています。 現在はJavaのFWはSpringBootが主流ですが、コンテナ時代において起動の高速化が求められますので、 Quarkusが主流になるの日もそう遠くはないのかなと思います。
おわりに
Pythonやブロックチェーンなど、あまり触れる機会がない技術などの話も聞けたので貴重でした。 内容的にも初学者向けだったので、技術に対するハードルも下がり、より興味を持ちました。
やはり、Javaのセッションをもうちょっと増やしてほしいというのが本音ですね。 来年に期待しましょう。