革命のブログ

フレボワークスの社員がブログを通じて情報発信します。

AWS Solution Days 2018に参加してきました 〜Machine Learning & IoT編〜

f:id:frevo-works:20181016150440j:plain

どうも、フレボワークスの小野です。 先日、AWS Solution Days 2018というイベントに参加してきました。 本イベントは、MachineLearning & IoTトラックとAnalyticsトラックが用意されていましたが、時間が被っていたので 興味のあったMachine Learning & IoTのほうを聞いてきましたので、簡単に内容についてお話したいと思います。

執筆者のスキル

イベントに参加する前まで、機械学習は全く触ったことがありませんでした。 当初は、統計学の知識が必要というイメージが強かったので、なかなか手が出せませんでした。 まず、基礎的な知識を身に付けようと、本イベントに参加しました。

機械学習(Machine Learning)とは

一般的に機械学習のプロセスは主に以下の手順で行います。

  1. 課題の定義
  2. データ整備
  3. モデリング
  4. アプリケーションの実装

課題の定義

  • ビジネス課題の認識
  • 解決策の仮説
  • 効果の明確化

データ整備

  • データ収集
  • データ検証
  • データ分割、分類

モデリング

  • モデル構築・トレーニング
  • モデルの評価
  • 特徴量(パラメータ)の見直し

アプリケーションの実装

  • プロダクション環境にデプロイ
  • 効果検証
  • 継続的な改善

プロダクション環境にデプロイで終わりではなく、継続的な改善が必要です。 データはより多く集まるので、より正確な推論フレームワークを構築することができます。

上記のプロセスを全て独自で行うとなると、相当の労力、コストがかかります。 AWSではこの課題を解決するためのサービスがあります。それが「SageMaker」というサービスです。

SageMakerとは

機械学習モデルを迅速かつ簡単に構築、トレーニング、デプロイできるフルマネージドサービスです。 これを利用することで、データサイエンティストが機械学習の本質に注力できます。

詳しくは以下のリンクから aws.amazon.com

利用方法

SageMakerの利用方法には以下の3つあります。

  • SageMakerのビルトイン(組み込み)アルゴリズムを使う
    →学習用データが必要
  • Tensorflow/Chainer/PyTorch
    →学習用データと学習用のコードが必要
  • その他
    →学習用データ、学習用コード入りのコンテナが必要

特に組み込みを利用する場合は、統計学の知識が不要ということになります。 多少、アルゴリズムの理解は必要だとは思いますが。

あと、機械学習を行う上で必要な開発環境(jupyter notebook)も管理コンソールから簡単に構築が可能です。

jupyter.org

学習の時間を短縮したいなどの要望に対しても、高スペックなGPUのプロセッサーを搭載したP3インスタンスも提供されています。

簡単に構築済みモデルを使いたい

AWSでは構築済みのモデルを提供しているサービスがあります。

サービス 概要
Amazon Rekognition 深層学習に基づく画像認識・動画認識サービス。静止画だけはなく、動画にも対応
Amazon Translate 深層学習に基づいた高品質な多言語翻訳サービス。2018年7月に日本語が対応し英語間の翻訳が可能に。
Amazon Polly テキストをリアルな音声に変換するサービス

これらを利用すれば、簡単に学習モデルを独自のアプリケーションに組み込むことができます。

逆に言えば、上記の学習モデル以外の推論を行いたい場合は、SageMakerなどを利用して学習モデルを構築する必要があるということです。

深層学習を行いたい

深層学習を行うためのAMIが用意されています。TensorFlowの最適化もされています。

aws.amazon.com

機械学習とIoT

最近のIoTは「自律化」がトレンドになってきています。

つまり、クラウドで学習したMLモデルをエッジデバイスにデプロイすることで、デバイス側で推論し結果を活用することが可能になります。 オフライン状態でもエッジデバイス自身で学習することができます。

これらを実現するために、GreengrassというAWSのサービスをエッジデバイスに導入します。

AWS Greengrass (IoT アプリケーションをシームレスに実行) | AWS

Greengrassを利用することで以下のことが実現できます。

  • Lambdaをローカルで実行 (Lambdaはクラウドから配布)
  • ローカルでのメッセージングとLambdaのイベントトリガ
  • 機械学習の推論

Greengrassの他にもIoTに特化したサービスが提供されています。

サービス名 概要
AWS IoT Core 安全なデバイス接続とメッセージング
AWS IoT Device Management デバイスの導入、管理、ソフトウェアアップデート
AWS IoT Device Defender デバイスの監査と保護
AWS IoT Analytics IoTデータ分析とインテリジェンス
Greengrass IoTアプリケーションをシームレスに実行
Amazon FreeRTOS マイクロコントローラー向け IoT オペレーティングシステム

これらのサービスを組み合わせることで、セキュアで堅牢なIoTアプリケーションが実現できます。

さいごに

本トラックで講師の方が口酸っぱくおっしゃっていたのは、機械学習を使って何かを作るのではなくて、 ビジネス上の課題を把握し、課題解決の手段の1つとして機械学習を利用すべきということでした。

今回のイベントに参加して、機械学習に対するハードルが下がったように感じました。 まずはAmazon SageMakerを利用して機械学習に取り組むことから始めようと思います。

AWS SOLUTION DAYS 2018~Analytics トラック

こんにちはクラウドビジネス部マネージャのササクラです。

先日、AWS SOLUTION DAYS 2018 に参加し、
午前は「基調講演」、午後は「Analytics トラック」の講演を聞いてきましたので、印象に残った内容をメモしておきます。

講演内で紹介のあった主なAWSサービスは、以下。

 SageMaker(セイジメーカー) → 機械学習のマネージドサービス
 Andes(アンデス)       → データレイク
 Glue(グルー)        → データレイク内のデータの所在を管理
 Atlas(アトラス)         → ストリームデータ処理
 QuickSight(クイックサイト)  → BIツール

全部、現在利用していない馴染みのないサービスでした。


■AWSサービスで印象的な内容
SageMakerを利用すれば、すぐにでも機械学習にチャレンジできそうなのでタイミングみて利用してみたいですね。
午後の「機械学習・ IoT トラック」では、セッションで取り上げられていたようなので少し聞いてみたかったです。

QuickSightはBIツールで、蓄積データを閲覧できるので
「現在運用しているクラウドサービスのユーザ向けに公開したらどうかな?」
と考えましたが、どちらかというと社内ユーザなど公開範囲を限定すべき性質な気がするので
ちょっと難しいですかね。
APIを使って、グラフなどのUIコンテンツ丸ごと取得できれば、サービス内の一画面に嵌め込めるので使えるかも。。


何気に、講演中に聞けたタメになる話は、

 S3 に格納するファイルは全て圧縮すべき

という内容で、確かにサイズが膨大になってくるとインパクトも比例するので大切そうです。


■AWSサービス以外で印象的な内容
Lambda Architectureのスピードレイヤ、バッチレイヤという考え方。
データの用途により、RDSなど利用するAWSサービスや処理方式を分離するというのは、そのうち必要になりそう。
全てを一緒くたに扱うのは無理がありますね。


講演中に今月末の DEVDAY が紹介されていたので、そちらにも参加してみようと思います。

AWS Loft Tokyoのオープニングイベントに参加してきました

f:id:frevo-works:20181001145333j:plain

2018年10月1日にAWS Loft Tokyoがオープンしたので、オープニングイベントに参加してきましたので、 そのご報告をしようと思います。

場所は目黒駅から徒歩1分の目黒セントラルスクエアの17Fにあります。

MEGURO CENTRAL SQUARE - 目黒セントラルスクエア

初めて行ったので、迷路のようで迷いました(汗

本日からオープンしたAWS Loft Tokyo はAWSのアカウントを持っていれば、無料で利用できます。 アクセス抜群、17階から眺める景色も最高でした。(東京タワーとスカイツリーが同時に見える!)

f:id:frevo-works:20181001145409j:plain

あと本日限定でラテアートされたカフェラテが貰えました。

f:id:frevo-works:20181001145436j:plain

ちなみにアートされた顔は私です。似ている偉人の名前とソックリ度が書かれていました。
さすがに人の手ではなく、ラテアートメーカーみたいなものを使っていました。
受付にてiPadから専用のページを通じて、自分の顔を撮影するかAWS Loft Tokyoのロゴにするか選べます。

iPadから入力されたデータがAWSに送られ、画像認識や機械学習などの機能を利用して作成しているみたいです。

挨拶

最初はアマゾンウェブサービスジャパン 代表取締役社長 長崎忠雄による挨拶でした。
いつもAWS Summitでのスーツ姿しか拝見していなかったので、私服が新鮮でした。
AWS Loft Tokyoがオープンされましたが、実はの常設地点は日本が3拠点目みたいです。
他にはサンフランシスコ、ニューヨークにあるそうです。

「挑戦をカタチにする場所へ」のスローガンを掲げ、スタートアップやデベロッパーのために立ち上がりました。

AWS Loft Tokyoには以下の3つの目的(利用価値)があります。

  • コ・ワーキングスペース
    コーディングするための環境を提供。他のエンジニアとのネットワーキング

  • Ask An Expert
    AWSのエキスパートが常駐しているので、AWSに関する疑問や質問を解決

  • テクニカルセッション
    最新技術情報などのセミナーを実施

ワクワクする話ありがとうございました。

テープカット

オープニングイベントということで、テープカットが執り行われました。 さすがはAWS。ただのテープではありませんでした。テープにはイルミネーションライトが仕込まれてました。 まだ、明るい時間帯ですが、普通ではないところが素敵でした。

↓はテープカットの様子です。

f:id:frevo-works:20181001145456j:plain

スタートアップトークショー

以下の3名による対談が行われました。

  • 株式会社トレタ共同創業者 増井雄一郎
  • 株式会社ユーザベース チーフテクノロジスト/ 株式会社UB Venturesテクノロジーパートナー 竹内秀行
  • アマゾンウェブサービスジャパン代表取締役社長 長崎忠雄

対談の中で印象に残った内容としては、AWSのサービスはどんどん拡大しており、挑戦をカタチにする機会は増えたが、 それを使いこなせるエンジニアが不足しているということが課題のようです。

私も、業務でAWSを利用していますが、必要なサービスしか使わないので、
他のサービスがどのようなもので、どんなことが実現できるのか正直、把握できていません。
そう状況になったときに、AWS Loft Tokyoでエキスパートの方に質問できる環境があるというのは、大きなメリットだと思います。

あとは、新たなイノベーションを起こすためには常に好奇心を持ち続けることが大事とのことでした。

さいごに

AWS Loft Tokyoはとても開放的で、カフェもありリラックスした状態でできるので、開発が捗りそうです。 私も普段は会社通勤なので、週一くらいは通いたいですね(希望)

ぜひ、みなさんもAWS Loft Tokyoを利用してみてはいかがでしょう。

まず、AWSアカウントを作ってくださいね。

Nuxt.jsでPWA対応のOnsenUIアプリを作ってみる

どうも、最近はNuxtにハマっている小野です。

業務でモバイルアプリを開発することになったので、
NuxtでPWAを使う方法について調べたので共有します。

ついでに画面にグラフ表示ライブラリchart.jsのVue用ラッパーでもあるvue-chartjsも使ってみます。

前提

  • npm、vue-cliが利用できること。
  • Githubアカウントを持っていること。

Nuxtのプロジェクト作成

まず、Nuxtのコミュニティで公開されているテンプレートを使って、プロジェクトを作成します。

# Nuxt.jsのテンプレート作成
vue init nuxt-community/starter-template nuxt-onsen

cd nuxt-onsen/

# 依存モジュールインストール
npm install

NuxtはデフォルトでユニバーサルアプリケーションなのでSSRも対応していますが、今回はSPAのみで行うため以下の設定が必要です。 nuxt.config.jsに以下の内容を追記します。

module.exports = {
  ・・・
  mode: 'spa'
}

OnsenUIを導入する

今回はモバイルアプリということで、モバイルに最適化されたUIであるOnsenUIを使います。

ja.onsen.io

# OnsenUI関連モジュールインストール
npm install onsenui vue-onsenui --save

Nuxtプロジェクト内のpluginsフォルダにonsenui.jsを作成してください。

plugins/onsenui.js

import 'onsenui/css/onsenui.css';
import 'onsenui/css/onsen-css-components.css';
 
import Vue from 'vue';
import VueOnsen from 'vue-onsenui';
 
Vue.use(VueOnsen);

nuxt.config.jsファイルに以下の内容を追記してください。

module.exports = {
  ・・・
  plugins: ['~/plugins/onsenui']
}

これでVueでOnsenUIが利用できるようになりました。

PWAモジュールをインストール

NuxtにはPWA用のモジュールが用意されているので、今回はこれを使います。

# PWAモジュールインストール
npm install @nuxtjs/pwa --save

nuxt.config.jsに以下の内容を追記します。

module.exports = {
  ・・・
  manifest: {
    name: "Nuxt.js OnsenUI",
    lang: 'ja'
  }
  modules: [
    '@nuxtjs/pwa' // PWAのモジュールを読み込む
  ],
  workbox: {
    dev: true // 開発モードでも利用できるようにする場合に必要
  }
}

上記で出てきたmanifestですが、PWAはネイティブアプリの様にホーム画面に追加することができます。 その際、ホーム画面に追加する際のアイコンや名称などを設定します。

動かしてみる

OnsenUIとPWAの準備が整いました。index.vueを編集して実際に動かしてみます。

vue-chartjsのセットアップ

vue-chartjsをインストールします。

npm install vue-chartjs chart.js --save

componentsフォルダにLineChart.jsを作成します。

import { Line } from 'vue-chartjs'

export default {
  extends: Line,
  props: ['data', 'options'],
  mounted () {
    this.renderChart(this.data, this.options)
  }
}

index.vueでグラフが表示されるように編集します。

<template>
  <v-ons-page>
    <v-ons-toolbar>
      <div class="center">Hello,Nuxt-OnsenUI!</div>
    </v-ons-toolbar>
    <line-chart :data="chartData" :options="chartOptions"></line-chart>
  </v-ons-page>
</template>

<script>
import LineChart from "../components/LineChart.js";
export default {
  components: {
    LineChart
  },
  data() {
    return {
      chartData: {
        labels: [
          "1月",
          "2月",
          "3月",
          "4月",
          "5月",
          "6月",
          "7月",
          "8月",
          "9月",
          "10月",
          "11月",
          "12月"
        ],
        datasets: [
          {
            label: "2018年",
            data: [8, 7, 7, 6, 5, 8, 9, 6, 7, 4, 8, 7],
            fill: false
          }
        ]
      },
      chartOptions: {
        title: {
          display: true,
          text: "平均睡眠時間"
        },
        responsive: true,
        maintainAspectRatio: false
      }
    };
  }
};
</script>

ここまでできたら、実行します。

npm run dev

ブラウザでhttp://localhost:3000を開きます。

表示されましたね。

Github Pagesで公開してみる

とりあえず、無料枠で公開したいので、Github Pagesを利用します。

以下のサイトを参考にリポジトリを作成します。

www.tam-tam.co.jp

公開用のファイルをビルドする

リポジトリ名がコンテキストパスとして付与されるので、nuxt.config.jsを修正する必要があります。

module.exports = {
  ・・・
  manifest: {
    name: "Nuxt.js OnsenUI",
    lang: 'ja',
    start_url:'/<repository>/'
  },
  ・・・
  router: {
    base: "/<repository>/"
  }
}

公開用リポジトリにプッシュする

上記で作成されたdistフォルダを別の場所に移動させ、以下のコマンドを実行します。

git init
git add -A
git commit -m "InitialCommit"
git remote add origin https://github.com/<username>/<repository>.git
git push -u origin master 

Githubへのプッシュが完了したら、スマホで確認してみます。 https://.github.io/にアクセスします。

f:id:frevo-works:20180927143336p:plain

上記のような画面が表示されましたか?これはホーム画面に追加されたあとの画面です。 そのため、アドレスバーが表示されていません。

おわりに

Nuxt.jsを利用すればこんなに簡単に導入できるんですね。
設定系がnuxt.config.jsに集約されているので、管理も楽です。

PWAに関してはプッシュ通知もNuxtのモジュールとして用意されているので、簡単に実装できると思います。 気が向いたら試してみます。

STS4(Spring Tool Suite 4)が出たので環境構築してみた

どうも、フレボワークスの小野です。
2018年9月25日に待望のSpring Tool Suiteのバージョン4がリリースされました。

spring.io

対応のIDEはEclipse、Visual Studio Code、Atomみたいです。
最近だとVisual Studio Codeの利用者が増えてきていますが、やはりJavaの開発はEclipseの方が便利ですね。
今回はEclipse版の開発環境を構築していきます。

動作環境

カテゴリ バージョン等
OS Mac OS X El Capitan
Java 1.8

※STS4の動作にはJDK 1.8.0_060以上が必要です。

インストール

以下のサイトからダウンロードしてください。 spring.io f:id:frevo-works:20180926104438p:plain

ダウンロード後、dmgファイルを実行し、アプリケーションフォルダにコピーしてください。

日本語化

Eclipseはデフォルトで英語表記なので、おなじみのPleiadesの力を借ります。
以下のサイトからプラグインをダウンロードしてください。 Eclipse 日本語化 | MergeDoc Project

f:id:frevo-works:20180926104816p:plain

ダウンロードし、解凍したらpleiades-mac->setup.dmgを実行してください。

f:id:frevo-works:20180926105338p:plain

これで、日本語化は完了です。STSを起動して確認してみましょう。 f:id:frevo-works:20180926105523p:plain

余談ですが、Pleiadesのプラグインをインストールすると、スプラッシュも変わってしまうんですね。。。
STS4のままがよかった。。。
スプラッシュを変更する方法はあるみたいなので、自分で調べてみてください。
今回は割愛します。もし、変更できたら追記します。

実行してみる

ワークスペースを指定し、STSを起動する。 起動後、ファイル->新規->Spring スターター・プロジェクトを開く。

f:id:frevo-works:20180926114601p:plain

f:id:frevo-works:20180926120940p:plain

プロジェクトが作成されたら、実行(右クリック->実行->Spring Bootアプリケーション)する。

Started DemoApplication in 3.522 seconds (JVM running for 5.659)

コンソール上に上記のログが表示されたら、ブラウザからhttp://localhost:8080を表示する。
以下のような画面が表示されたら成功です。(index.htmlファイルがないため404が表示されます。) f:id:frevo-works:20180926115821p:plain

lombokを導入

通常であれば、lombokインストーラから導入ができるのですが、
STS4のアプリケーション名が変更されているため、インストーラから設定ができません。
そのため、iniファイルに手動でlombok.jarのパスを設定する必要があります。

以下のサイトからlombok.jar(バージョン1.18.2)をダウンロードする。(9/26時点)

Download

ダウンロードしたjarファイルを/Applications/SpringToolSuite4.app/Contents/Eclipse/にコピーしてください。

アプリケーション->SprintToolSuite4.app->Contents->Eclipse->SprintToolSuite4.iniをテキストエディタで開き、以下のように変更します。

-startup
../Eclipse/plugins/org.eclipse.equinox.launcher_1.5.100.v20180827-1352.jar
--launcher.library
../Eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.800.v20180827-1352
-product
org.springframework.boot.ide.branding.sts4
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.8
--add-modules=ALL-SYSTEM
-Xms40m
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts
-Xdock:icon=../Resources/sts4.icns
-Xmx1200m
-Xverify:none
-javaagent:../Eclipse/dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
-javaagent:/Applications/SpringToolSuite4.app/Contents/Eclipse/lombok.jar ←追記

保存したら、STS4を再起動してください。

動作確認

com.example.demoにTodo.javaを作成してください。

package com.example.demo;

import lombok.Data;

@Data
public class Todo {
    private String title;
    private String content;
}

f:id:frevo-works:20180926130414p:plain

候補にgetterメソッドが表示されていれば、lombokは正しく動作しています。

おわりに

lombokの手動設定は多少手間でしたが、問題なく構築ができました。
VisualStudioCodeでもSpringBootの開発はできますが、本格的に開発するとなるとやはりEclipseに軍配が上がります。
個人的にはVisualStudioCodeがさらに充実し、開発が容易になることを期待しています。

今は、フロントエンドはVSCodeで、バックエンドはSTSで開発しています。
Eclipseはフロントエンドの開発には弱い気がします。。。

早くIDEを統一したい。あ、IntelliJ IDEAがあった。

チリも積もれば山となる通勤時間

突然ですが、あなたは通勤時間にどれだけの時間をかけているでしょうか。

私はドアToドアで片道1時間20分。朝はよく電車が遅延するのでおよそ1日に3時間を移動時間として使っています。

 この時間がとても無駄だなあと思うので、最初は読書やスマホで勉強をするようにしていたのですが通勤時間のギッチギチの満員電車なので全く捗りません。

 

何もできないくらいの混み具合であれば諦めもつくのですが、ギリギリ読書できそうなくらいの混み具合のため努力してみます。

…しかし揺れのたび誰かがぶつかってきて気が散ったり、臭い人がいると気が散ってしまい勉強したつもりの無駄な達成感とストレスだけが残ります。(私の集中力がないだけかもしれないですが)

 

さて、1日は24時間なので1/8の時間を毎日混んでいる通勤電車での移動に費やしている事になります。

 1ヶ月の営業日は約20日なので1ヶ月のうち60時間を移動していることになります。

そして1年では720時間となるので1年間のうち30日をただただ移動しているだけに人生を費やしています。

rocketnews24.com

 

こんな結果もでているくらいなので通勤時間をずらす働き方改革よりも通勤をなくす・通勤のストレスを感じずに済むところに住む必要があるのではないでしょうか。

 

【祝】2周年記念

当社はお陰様で、設立2周年を無事迎えられました。 せっかくの設立記念なので、お客様もご招待して、東京ドームのメモリアル巨人観戦に行ってきました! バックスクリーンに映して頂いたり、当社用のジャイアンツユニホームも東京ドーム様より、プレゼント され、楽しい時間を過ごす事が出来ました。 来年も更に盛大なイベントが出来るよう、社員一同頑張って、世の中に必要な会社を目指します! f:id:frevo-works:20180910172552j:plain