はてなの金次郎

とあるエンジニアの技術系ブログ

ES(ECMAScript)の基礎を学ぶハンズオンに参加してきました

はじめに

js-builders.connpass.com

JavaScript Buildersさん主催の「【初心者向け】JavaScriptの次のステップ、ES(ECMAScript)の基礎を学ぶハンズオン」にブログ枠で参加してきました。

今回参加した動機は VueやReactを学ぶ前にESをちゃんと抑えておきたかったから です。

普段の業務としてはPython/DjangoAPIの実装がメインでたまにインフラ構築といった感じで、JSはもちろんESとはあまり縁がありません。

しかし、将来的にはバックエンド、インフラ、フロントエンドをカバーできるようなエンジニアになりたいので今回の参加に至りました。

今回のイベントでは、JavaScriptをProgateや独学で学んだけど、その先のECMAScriptがわからない。 React.js or Vue.js を触り始めたけど、実はECMAScriptがわからない。 そんな方が基礎を学べる機会になる為のハンズオンを行います。

まさにぴったりの勉強会ですね!

感想

今回の勉強会のゴールが設定されていたのでそれに沿って振り返りたいと思います。

明日からドヤ顔でESの歴史を語れるようになる事

まず、ECMAScriptを一言で説明すると、

JavaScriptJScript の仕様差異を一般化するためにECMA Internationalという機関が JavaScriptを標準仕様化したものが ECMAScriptです。

( -`ω-)どや!

講師の村瀬さんが言語の成り立ちから今までバージョン遷移まで詳しく教えてくださりました。

ESは毎年6月にメジャーアップデートがあるかなり開発がさかんな言語みたいで、バージョンごとの豆知識も教えていただきました。

  • ES6:主流なバージョン
  • ES7:主要な2機能がリリースされたが、どっちも使わなくていいらしい
  • ES2017:Async Awaitを使うためにバージョンアップする場合もあるんだとか
  • ES2018:最近リリースされたばかりなので実績が少なく使用者は少ない

とりあえずES6を抑えておくのが基本らしいです。

この記事もわかりやすかったです。

qiita.com

JavaScriptを始めるならまずは読んでおくべきサイトらしいです。

developer.mozilla.org

ECMAScriptについてはこちら。

developer.mozilla.org

ESの基礎がわかるようになる事

ESの基礎を理解するためにJSのハンズオンでJSの基礎を理解してからESのハンズオンでESを理解するという流れでした。

JSはここが使いづらかったからESではこう改善された のようにストーリー仕立てで覚えることができてかなり理解が捗りました。

普段Pythonを書いている身としては、JSの基本仕様にはかなり驚かされることが多かったです。 class構文がなかったりconstがなかったりモジュールのインポートができなかったり...

ここらへんがESのアップデートでプログラミング言語としての基本仕様を満たしてきたんだなと感じました。 また、ESの構文はかなり書き方に柔軟性があるなと思ったのと、ワイルドカードインポートが認められているのが少し驚きましたね。

為藤さんのハンズオンの説明やサンプルがすごくわかりやすかったので、ESはほとんど触ったことありませんでしたがその場で理解できました。

ハンズオンのソースコードJavaScript BuildersさんのSlackチャンネルで公開されているので気になる方はコンパスのページからとんで確認してみてください。

あと、ハンズオンはPlayCodeを使ってやったのですがすごい便利でした。

playcode.io

おわりに

2時間半とは思えないほど凝縮された内容で、これが無料で受けられたので運営の方々には感謝しかありません。

会場提供してくださったナンバーナインさんにも感謝です!

no9.co.jp

次のステップとしてReactかVueを頑張っていきたいです。

ちなみに次回の勉強会にもブログ枠として参加予定なのでお願いしますー!

js-builders.connpass.com

Developers.IO 2018に参加してきました

Developers.IO 2018とは

dev.classmethod.jp

Developers.IOは、クラスメソッド株式会社が主催するイベントです。 Developers.IO 2018のテーマは「AWS」でした。

  • 立ち見が発生してしまったこと
  • カンファレンス用のWifiがなかったこと
  • 懇親会の食べ物がすぐになくなってしまったこと

は少し残念でしたが、AWSといえばクラスメソッドさん、クラスメソッドさんといえばAWSということもあり、どのセッションもとても勉強させていただきました。

印象に残ったセッション

セッションの概要と感想をまとめました。

次世代モバイル向けクラウドサービスAWS AppSyncを使って店舗スタッフと顧客の体験を最大化する方法

RESTの次のパラダイムとして注目されているGraphQLをベースとしたAWSマネージドサービスAppSyncの紹介と、AppSyncを自社サービスのチャット機能に採用したという話でした。

AppSyncを利用したスキーマファースト開発でスマホアプリの開発効率が向上したとのこと。

特に印象に残ったのはAppSyncを利用したモバイルエンジニアの感想で、

  • GraphQLの前提知識が必要だが、手軽に利用できたのが良かった
  • リクエストが1つで済むので、多くの場合で実装がシンプルになる
  • クライアントが自動生成されるので、アプリの実装は少なくて済む
  • アプリ側で必要なプロパティだけを指定して取得できるので効率的
  • 特にクロスプラットフォームでUIが異なる場合などに適している

といったことが列挙されていました。
PyCon JP 2018でもAppSyncを紹介するトークがありましたが、スマホアプリ開発に携わっている身としていち早く試してみたいサービスです。

気になる点としては、サポートされているSDKiOSAndroidJavaScriptである点と(Pythonない)、

Q . AWS AppSyncではどのようなアプリケーション開発言語がサポートされていますか?

A . AWS AppSync SDK では iOSAndroidJavaScript がサポートされています。JavaScript のサポート範囲には、React や Angular などのウェブフレームワーク、および React Native や Ionic といったテクノロジーが含まれます。また、AppSync GraphQL エンドポイントへの接続にオープンソースクライアントを使用して、一般的な HTTP ライブラリやシンプルな CURL コマンドなど、その他のプラットフォームも利用できます。

https://aws.amazon.com/jp/appsync/product-details/

AuroraなどのRDBMSを利用する場合、Lambdaを利用する必要があり、

  • 最大処理時間5分問題
  • 複数回起動問題
  • コールドスタート問題

などのLambdaの制約が付きまとう点です。

Q . AWS AppSync で複雑なクエリを実行するにはどうすればよいですか?

A . AWS AppSync で利用できるデータソースでは、GraphQL を使用することで、Amazon DynamoDBAmazon Elasticsearch Service、AWS Lambda によって提供される機能を最大限活用できます。インデックス作成や条件チェックといった機能とマッピングテンプレートによって、DynamoDB から包括的な結果が返されます。あいまい検索、位置情報検索などの Amazon Elasticsearch Service のユースケースもアプリケーションで利用できます。さらに、Lambda を使用した連続的なリクエストやバッチリクエストによって、Amazon Aurora などの他のソースからもデータを返すことができます。

https://aws.amazon.com/jp/appsync/product-details/

クラスメソッドさんがチャット機能で利用したように適切なユースケースで利用すると効果を発揮しそうです。

5つのユースケースから理解するAWSのデータベースサービスの勘所

データベースサービスの使い分け

ユースケース データベースサービス
一般Webシステム Aurora, ElastiCache
サーバーレス DynamoDB
データ分析 Redshift, Athena, Aurora Parallel Query
IoT IoT Analytics, Redshift, Athena
レコメンデーション Neptune

Aurora - 複雑なクエリが必要な場合 - 同時多数アクセスがありうる場合(コネクションプールを活用する)

ElastiCache - 高速に読み書きが求められる場合

DynamoDB - 複雑なクエリが必要な場合 - 同時接続数が安定しており初回起動時間が長くても問題がない場合

Redshift データ分析で大容量データ(TB〜PB)を扱う必要があり、明確に分析対象が決まっている場合(PostgreSQL互換インターフェースをもつ)

Athena データ分析で大容量データ(TB〜PB)を扱う必要があり、明確に分析対象が決まっていない場合(Prestoを使用してS3ファイルへ並列にアクセスする)

IoT Analytics 多数のデバイスからの接続があり、デバイスのデータを継続的に登録する必要がある場合

Neptune 既存の行動データを元に推奨するアイテムを抽出したい場合

様々なユースケースでデータベースサービスを適切に使い分けるということを学んだセッションでした。

多くの場合はRDBMSで要件を満たすことができるかもしれないが、使い慣れたデータベースを選択するのはアンチパターンであり、RDBMSでは最適ではないかもしれないことを念頭に置くことが大切ということ学びました。

聞いたセッション

コンテナジャーニー〜AWSにおける段階式コンテナ運用〜

  • CI/CDの構築にCodePipline, CodeCommit, CodeBuildを使っている以外はほとんど同じ構成で自信にさせていただきました。

基礎から応用までじっくり学ぶ「AWSでのネットワークの作り方」

  • ランチセッションだったのであまりメモれませんでしたが、ネットワークに疎い自分でもわかりやすい内容でした。

クラスメソッドにおけるWebAPIエンジニアリングの基本的な考え方と標準定義

  • 会社として標準定義があるのはさすがクラスメソッドさんという印象で、RESTをファイルシステムメタファと捉えるのは新鮮でした。
  • RESTは一定の原則こそあれどかなり自由度が高く、定義するのはかなり大変だと思うので、RESTフレームワークにのっかちゃうという選択肢もアリかなと感じました。

AWSのセキュリティ設定がどうなっているか抜け漏れなくちゃんと確認する方法

  • insightwatchというクラスメソッド提供の無料セキュリティチェックサービスの紹介でした。
    ご利用中のAWSアカウントを無料でチェックし、セキュリティのガイドラインに沿った運用なのか、数分で確認いただけます ということでどこまで無料でできるかわかりませんが、便利そうです。

DevOps:変化の激しい環境でビジネス競争力を向上させる具体的な方法

  • コント調の発表がユニークでとても面白かったです。
  • バリューストリームマッピングワークショップ参加してみたいです。

今からでも遅くない 基礎から学ぶサーバーレス開発 -キホンの『キ』-

  • サーバーレスが注目されるまでの経緯をオンプレの時代から丁寧に解説されており、とてもわかりやすかったです。
  • ローカル環境構築のし辛さやアプリケーションフレームワークの不在といったサーバーレス開発のつらみの話が興味深かったです。

Tech Trend Tokyo #7に参加してきました

はじめに

giginc.connpass.com

Tech Trend Tokyo #7にメディア・ブログ枠で参加してきました。テーマは「【Python機械学習機械学習と言語処理を活用してみる」でした。

感想

PyConJP 2018で「テキストマイニングによるTwitter個人アカウントの性格推定」というタイトルでLTをしてきましたが、そこでランダムフォレストを使ったので知っている内容が多くあり良い復習になりました!

jumpyoshim.hatenablog.com

GridSearchCVは知らなかったので勉強になりました!活用していきたいです。

早速アウトプットとして、今回のボストンデータセットの練習問題をGitHubにあげました。

私はpyenvやanacondaはトラブルが多くて好きじゃないのでPipenvを用いた環境構築をしています。
利用される方はPython3.7とPipenvをインストールしてください。

github.com

中島さんのリポジトリはこちらです。

github.com

ネットワーキングも素敵な方とお話できましたし、ピザも美味しかったです。ごちそうさまです。ありがとうございました。
今回お話できなかった方もぜひつながりましょう〜!
フォローお待ちしております。

twitter.com

主催の株式会社GIGのスキルシェアサービス Workship
講師の中島さんがCTOを務めるIGS株式会社のSPI、ESに続く第3の新卒採用ツール Grow360 も面白そうなサービスなので要チェックですね。

goworkship.com

grow-360.com

以下メモ書きです。(メモしきれなかった部分もあります。すみません。)

メモ書き

自己紹介

中島正成さん(IGS株式会社 執行役員CTO)
2011年、株式会社メタップスの取締役CTOとして立ち上げに参画。機械学習とデータサイエンスのプロダクトインプリメントに取り組む。
その後、エン・ジャパン株式会社経営戦略室、個人事業での技術アドバイザー、経営アドバイザーを経て、IGS株式会社に執行役員CTOとしてジョイン。HR領域、人材評価領域のA.I活用プロダクト開発と、教育領域へのA.I活用プロダクト開発に取り組む。

AIといいたくないけどAIの話 part4

  • 第六回ある
  • 今回はスコア予測の実践

回帰と判別

機械学習アルゴリズムな大きく2つに分類できる

  • 回帰モデル
    • 単回帰モデル
    • 重回帰モデル
  • 判別(分類)モデル

教師なし学習

  • 出力すべきものがあらかじめ決まっていないという点が教師あり学習と異なる。
  • データの背後に存在する本質的な構造を抽出するために用いられる。

教師あり学習

  • 事前に与えられたデータをいわば例題とみなしてガイドラインにのっとり学習させる。

教師あり学習

教師なし学習

練習問題

  • よくやるボストンデータセット
  • 有名なボストンデータセットを利用して各種パラメータから住宅価格を予測してみよう
  • ランダムフォレストを使うよ!楽で優秀
  • プロトタイプ作成に有効

ランダムフォレストとは

ボストンデータセットとは

  • scikit-learnに含まれている線形回帰などで使用するデータセット
  • 米国ボストン市郊外における地域別の住宅価格のデータセット

精度を向上するためにはどうすれば良いか

  • ハイパーパラメータチューニング
  • データクリーニング

ランダムフォレストのハイパーパラメータ

ハイパーパラメータ 説明
n_estimators バギングに用いる決定木の個数
max_features 最適な分割をするために考慮するフィーチャーの数
max_depth 決定木の深さの最大値、過学習対策にこの値の調整が有効
min_samples_split ノードを分割するために必要な最少サンプルサイズ
min_samples_leaf 葉を構成するのに必要な最小限のサンプルの数
max_leaf_nodes 生成される決定木における最大の葉の数
n_jobs フィットおよび予測の際に用いるスレッド数
random_state 乱数シード
warm_start Trueを設定するとすでにフィットしたモデルに学習を追加

自動でいい感じのチューニング

  • sklearnのGridSearchCVを使う
from sklearn.model_selection import GridSearchCV

params = {'n_estimators': [3, 10, 100, 1000, 10000], 'n_jobs': [-1]}
cv = GridSearchCV(
    RandomForestRegressor(),
    params,
    cv=10,
    scoring='mean_squared_error',
    n_jobs=-1,
    verbose=True
)
warnings.filterwarnings('ignore')
cv.fit(train_data_bs, train_labels_bs)

※ 注意

  • GridSearchCVを利用する場合は、scikit-learn以外にnumpy, scipyが必要。
  • from sklearn.grid_search import GridSearchCV だと no module named 'sklearn.grid_search' となってしまうため、 from sklearn.model_selection import GridSearchCV とする。