以前Nuxt.js と Python でつくるぬるさく AI アプリ開発入門 途中で分からなくなってしまい中断していましたが、改めてやってみようと思います。
まずは、Vuetifyのスライダーでの入力画面と、amChartsのグラフ表示。
router-linkによるメニュー追加 現在、v-navigation-drawer > v-list > router-linkという階層で、メニューを作っており、、、が並んでいる状態で、ここに、を追加したいと思います。
そして、こんなものは、単にコピペーして、文字変えれば良いのではと思ったのですが、なかなか反応してくれません。
結構調べましたが、解消せず。最後の最後に、再起動(docker-compose down、 docker-compose up -d)を行ったら見事(?)反映されました。
Vuetify Slider コンポーネント 前回はスッキリ行きませんでしたが、今回はこれはあっさりできました。
components/FormCard.vue
<template <v-card class="ma-2 pa-1" <div class="subheading" Heading </div <div class="caption" 1/11 </div <v-slider class="px-5 pt-5 pb-3" thumb-label="always" height="3" hide-details</v-slider </v-card </template <script lang="ts" import Vue from 'vue' export default Vue.extend({ }) </script pages/wine/index.vue
<template <v-layout column <form-card v-for="i in 11" :key="'${i}'"</form-card <v-btn @click="submit"診断結果を表示する</v-btn </v-layout </template <script lang="
ぬるさく画面に再チャレンジ
Firebase ユーザ認証機能を利用する
今回もこちらの続き。Vuetify の基本 今回も参考はこちら。
Nuxt × TypeScript でTodoListとユーザ認証を実装してFirebase Hostingにデプロイ [Tutorial – Part 5/5 – ユーザ認証の追加]
https://note.mu/tkugimot/n/n80c2e4b33bbc
で、ちょっと時間が空いてしまい、始める前に気づいたら、エラーが出ている。
This dependency was not found: nuxt_plugin_bootstrapvue_69bcb01f in ./.nuxt/index.js To install it, you can run: npm install --save nuxt_plugin_bootstrapvue_69bcb01f 書いてある通りnpm installしてもNot Foundと言われるだけ。
しかし、
docker-compose down
docker-compose up -d
で復旧。なんのこっちゃ。
Firebase Authentication機能の利用 手順としては、まず、package.jsonにfirebaseの記述を追加して、npm updateを実行するところから始まるのですが、ここで早速大量エラー。
概ねこんな感じ。
Can't find Python executable "python", you can set the PYTHON env variable. Failed at the grpc@1.20.0 install script. This is probably not a problem with npm.
Firebase Hostingにデプロイ
こちらの続き。Vuetify の基本 デザインについて、今参考にしているのはVuetify公式サイトのレイアウトサンプル。
https://vuetifyjs.com/ja/framework/pre-made-layouts
これとかすごいと思いますが、初心者はまだ手を出さないことにします。
Vue Material Admin
https://vuejsprojects.com/vue-material-admin
Firebase Hostingにデプロイ 引き続き、こちらを参考に。
Nuxt × TypeScript でTodoListとユーザ認証を実装してFirebase Hostingにデプロイ [Tutorial – Part 4/5 – Firebase Hostingにデプロイ]
https://note.mu/tkugimot/n/n44c327a22c24
最終的にはGCPにリリースする予定ですが、Firebaseも勉強してみたいので、流れに沿ってやってみます。
npm install -g firebase-tools でfirebase-toolsのインストール、
firebase login でログインして、プロジェクト作成して、というところは書いているまま。
この次の
firebase init をどこで実行すべきか?
今現在nuxtアプリを作っている、すなわち、componentsとかlayoutsとかが存在するフォルダで実行します。
最初
? What do you want to use as your public directory?
に対して、初期値のpublicで進めてしまいましたが、distを指定すべき。
? Configure as a single-page app (rewrite all urls to /index.html)?
はNoでよいかと。
ところが、
npm run build で大量エラー。
Vuetify の基本
Nuxt.jsでTodoList機能を作りながら、Vuetifyの基本を学習。
こちらを参考に、進めています。
https://note.mu/tkugimot/n/n47218fd1eec5
なんとか自力で問題解決できたので、既存のアプリに機能追加する形で動かすことができました。
上記サイトでは、次に、デザインを整えることになります。で、そこではbulmaを使っているのですが、できればあれこれ手を広げたくないので、Vuetifyで作ってみることにします。
全体デザインについて、上記サイトでは、「ヒーロー」というパターンを使っています。「ヒーロー」なんていうデザインのパターンがあるのですね。
簡単にVuetifyでもそんな指定ができたら良いかと思いましたが、そういう名前のものがあるわけではなさそう、かつ、メニュー構造は必要なので、Vuetify公式サイトのレイアウトサンプルから選択することにし、一番基本的な「Baseline」を使ってみることにします。
https://vuetifyjs.com/ja/framework/pre-made-layouts
最初は、部分的に移植しようと思いましたが、それだとレイアウト崩れが発生してしまうため、逆に、いったん、layouts/default.vueを書き換えてしまってから、必要な部分を戻す、という形にしました。
また、Todoの一覧表示のところに関しても、bulmaを使用していると思われるため、そのままではなく、各詳細情報は、v-cardを使用するようにしました。これも、サンプルメージを参考にしてなんとかなったような、なってないようなです。(幅指定がよくわからない・・・)
また、テキスト入力欄も、v-text-fieldを使用して、プレースホルダよりラベル表示の方が面白いと思い、それで作りました。
なお、入力位に自動でイベントを発生させる際に、このやり方だと日本語変換確定のEnterでも反応してしまって本当は良くありません。
下記のサイトに記載の通りですが、今はここは対応保留としておきます。
[Vue.js] 日本語変換の確定でkeyup.enterが発火してしまうのを防ぐhttps://qiita.com/h-orito/items/6d99e2256074132d7867
カードの並べ方等、もう少し綺麗にできたら良いのでしょうが、一旦これで、次に進みます。
Nuxt.js環境の学習継続中
Nuxt.js開発を進めるためには、もう少し学習が必要ということで、入門サイトを見てみたりしていますが、なかなか思う方向には進んでくれません。その苦労の足跡を残します。(ごちゃごちゃになりすぎて記憶も飛び気味ですが)
やりたいことのゴールはこちらタイタニックアプリを作ろう(Nuxt.js 開発環境の基本) 入門用サイト 本当はまずやりたいのはヌルサクです。Nuxt.js と Python でつくるぬるさく AI アプリ開発入門 ただ、結構端折られているところも多く、また、微妙に最新環境でないところがあって、初心者にはエラー対処が難しかったりするため、もう少し入門的なところから始めたいと思いました。そして、それはそれで色々参考になるサイトがあるのですが、これもなかなかそのままは動いてくれなかったりして、苦労しました。
Nuxt × TypeScript でTodoListとユーザ認証を実装してFirebase Hostingにデプロイ https://note.mu/tkugimot/n/nfe81dbbe8bad
こちらのサイトは、入門者の立場から、gitの使い方的なところにも配慮しながら進めてくれるので、非常に勉強になります。
それでもたまにそのままでは動かないところがあったりして、例えば、
3.Todoの module と Component を準備する
の時点でのpages/index.vueは
<template <Todos / </template ではなくて
<template <TodoList / </template ですよね、みたいなのがあったりします。
また、結構
implicitly has an ‘any’ type.
で怒られることが多く、「: any」をつけて対処したりしてたのですが、それで良いのか、理解できていません。
さらに、
module namespace not found in mapGetters(): todos/
みたいなエラーが出て、これは解消できずにとりあえず進めたりしました。
その後も色々なエラーを解消できず、もう一度最初からやり直してみても最後には上記エラーに引っかかってしまう状態から抜けられず、途中で一旦中止しました。
(追記)
この問題は解消しました。
store/modules/todos.ts
という構造になっているので、
// export const name = 'todos'; export const name = 'modules/todos'; とすることにより、エラー解消しました。
Docker内のNuxt.jsサイトを公開する
Docker内に構築したNuxt.jsのサイトを公開する、条件として、公開サイトもDockerで構築し、かつ、ソースはボリューム機能でDocker外と共有とする。無料で。
なかなかハードルが高かったですが、できました!
Docker環境をどこに公開するか 無料公開と考えた場合に、1年の期間制限のAWSは対象から外します。そして、本サイト自体がGCEで立っているので、一旦それも除外。そこで検討したのが、Azureです。
Azure App Service Azureでは、素のApp Serviceは無料プランがあります。
App Service の価格
https://azure.microsoft.com/ja-jp/pricing/details/app-service/windows/
この素のサービスはPaaSなので、Dockerをインストールして環境構築するということはできません。これと連携してコンテナを読み込む、Web App for Containersというサービスがありますが、これは無料プランでは利用できません。さらに、通常であれば利用を検討すべきContainer InstancesとかAKS(Azure Kubernetes Service)というものもありますが、これらも有料プランのみです。
色々苦労した挙句、無料でDockerコンテナを立ち上げるのは無理ということで、あきらめました。
Heroku Herokuでもコンテナを読み込んでリリースする機能が提供されています。
https://devcenter.heroku.com/articles/container-registry-and-runtime
これは無料で使えるプランもあるのですが、Volumeはサポートされていません。
なぜVolumeを使いたいかというと、ローカルの開発環境もDockerで構築したい、それと同一の環境をリリース環境に持っていきたい、ただ開発ツールはクライアントに持つことになるのでソースはローカルに持ちたい、そのソースをコミットすることでリリース環境にも反映したい、という理由です。
そういう意味で、最近話題の、VSCodeのRemote Development機能
https://crieit.net/posts/VSCode-Remote-Development
開発ツールをローカルに持ちつつソースはローカルに持つ必要がないという意味ですごいと思うのですが、複数人開発と考えた時にはどうなんだろうとも思ったりします。
さくらArukas https://arukas.io/
今回試しませんでしたが、これもHerokuと同様、Volumeはサポートされません。ただ、無料プランが提供されているのは発見でした。
GCE(Google Compute Engine) 結局VMをそのまま使わせてもらえる環境でなければ今回の条件には合わない、と理解し、そうなると使えるのはGCEしかないのでは、という結論になりました。すでにDocker立てているわけですが、そこはDocker。複数立てることもできるわけです。ということで、もう一つDocker環境を立てることにしました。
公開用Docker構築 前回タイタニックアプリを作ろう(Nuxt.js 開発環境の基本) ここではなるべくシンプルなDockerファイルを目指して設定をしましたが、これはDockerをUpした後にサービスを起動しなければならないということです。
そうではなく、Upと共にNuxtサービスも立ち上げるということで試行錯誤しました。
まず、最初はDocker Build、あるいはUpでのエラー。
ERROR: Service ‘app’ failed to build: containerd-shim not installed on system
DokerファイルをいじるとBuildだけはできたりして、大いに悩みましたが、最終的には、VMリスタートで解消。時間を返せ・・・
再起動したらしたで、既存のDocker=本サイトが立ち上がらないという問題発生!原因は、先にApaheが起動していてポート80を取られていたため。サービスを落として再度実行により問題解消。かなりの時間を費やして、やっと本題。
最終的には下記のサイトを大いに参考にさせていただきました。
dockerでnuxt.jsの環境を作ってみる
https://qiita.com/reflet/items/e7c33f84ab43ab237ee4
Dockerfile
FROM node:12.1.0-alpine WORKDIR /app RUN npm install --global @vue/cli @vue/cli-init WORKDIR /app/titanic-client RUN yarn install ENV HOST 0.
タイタニックアプリを作ろう(Nuxt.js 開発環境の基本)
Kaggleのタイタニック問題は、機械学習の基礎として面白いので、それを活用し、かつ、技術書典の2冊で学んだことも生かして、アプリを作ってみましょう。
Kaggleのタイタニック問題で機械学習 Nuxt.js と Python でつくるぬるさく AI アプリ開発入門 コンテナ時代のWebサービスの作り方 環境のイメージ たどり着けるかわかりませんが、ゴールのイメージとしては、下記のようになります。
ローカルにDockerでNuxt.jsのWebアプリ環境 Jupyter Notebookで機械学習環境を作り、responder のAPIサービス環境はDockerで Dockerプライベートでレジストリとして、GitLab Container Registry プライベートレジストリからAzure App Service に公開 DockerによるNuxt環境構築 今回フォルダ構成はこのようにしています。
titanic -app --docker-compose.yml --client ---Dockerfile --server ---Dockerfile 参考にさせていただいたのはこちら。
Nuxt.jsの動作環境をdockerで作る
https://qiita.com/FrozenVoice/items/2ae89ce820cade84924e
若干新しいバージョンに変更しました。
client/Dockerfile
FROM node:12.1.0-alpine RUN mkdir /app WORKDIR /app RUN npm install -g vue-cli ENV HOST 0.0.0.0 EXPOSE 3000 docker-compose.yml
version: '3' services: app: build: ./client volumes: - ./client:/app ports: - "
Kaggleのタイタニック問題で機械学習
ぬるさくで学んだ基礎を生かして、アプリを作ってみよう!
ぬるさくの学習はこちらNuxt.js と Python でつくるぬるさく AI アプリ開発入門 参考はこちら【Kaggle初心者入門編】タイタニック号で生き残るのは誰? Kaggleの説明もこちら
Kaggleとは?機械学習初心者が知っておくべき3つの使い方 そしてKaggleの入門用コンペ
Titanic: Machine Learning from Disaster
https://www.kaggle.com/c/titanic
最初にプロジェクト用のディレクトリ(例:titanic)を作成し、その中にdatasetフォルダを作成して、ダウンロードしたデータを配置。
さらにworkspaceディレクトリも作成。
Anaconda-Navigatorを起動
Notebookを起動
プロジェクト用のディレクトリのworkspaceに移動
New > Python 3
そうすると
import pandas as pd import numpy as np train = pd.read_csv("../dataset/train.csv") test = pd.read_csv("../dataset/test.csv") で行ける。
「データセットの欠損の確認」のスクリプトは、そのまま貼り付けるとインデントが効いていないので注意。
「文字の数字への置き換え」のところでエラー発生。
train["Sex"][train["Sex"] == "male"] = 0 train["Sex"][train["Sex"] == "female"] = 1 train["Embarked"][train["Embarked"] == "S" ] = 0 train["Embarked"][train["Embarked"] == "C" ] = 1 train["
Nuxt.js と Python でつくるぬるさく AI アプリ開発入門
技術書典6で購入した本2冊目。
これも素晴らしい。#技術書典6 の #ぬるさくAI ですが 14時に完売しました!!
ご購入いただいた皆様、本当にありがとうございました!!!
BOOTHでのpdf販売を同時に開始しましたので
ぜひ、#技術書典 にお越しいただけなかった方、ご購入ください!https://t.co/S7fajL0B8o — takayama.k (@pco2699) April 14, 2019 なんとか連休中に平成最初のリリースまで持って行きたかったのですが、色々つまり出してきたので、実際に何かを作ってリリースするところを目指したいと思い、Docker環境構築までで一旦まとめておきたいと思います。
Jupyter Notebook いきなり、あなたの知らない世界で、Jupyter Notebook のインストールから。
こちらなども参考に。
https://techacademy.jp/magazine/17430
まずはAnaconda をインストール。Anaconddaで2.3GBも使うんですね・・・
インストールしたら、
Enviroments > 「analytics」
Notebookをインストールしようとして間違えてJupyterLabをインストールしてしまいました。そうしたらNotebookも勝手に入りました。
3.3.1 データセットを読み込む 第1章、第2章も読み応えありますが、作り始めるのは第3章からになります。
初めてJupyter Notebook を使う身としては、色々不明点を抱えながら進めます。どうやって実行するんだ、というところから始まりますが、Runボタンで実行です。
実行すると、エラー。
ModuleNotFoundError Traceback (most recent call last) <ipython-input-2-aed2979e33dd in <module 1 # 分析に必要なライブラリをインポート ---- 2 import pandas as pd 3 import numpy as np 4 5 # データセットを読み込む ModuleNotFoundError: No module named 'pandas' 先に
コンテナ時代のWebサービスの作り方
技術書典6で購入した本1冊目。
ガチで役に立つ本でした。
コンテナ時代のWebサービスの作り方 | 楽描商店 https://t.co/xFdOX3orNn 技術書典6で頒布した本をboothにて委託しております。ご活用ください。#booth_pm #技術書典 — とまと(nasum)技術書典え35楽描帳 (@tomato360) April 14, 2019 とりあえず、76/103ページまでやってみました。ここまで行くと、ソースをコミットしたら自動的にサイトに反映される仕組みが動きます。
が、多少悪戦苦闘したところもありますので、その辺をメモ。
リージョン 書籍では、東京リージョン(ap-northeast-1)を使うことになっていますが、元々オハイオを使っていたのでそちらのus-east-2を使うことにしてみました。
すると、
The image id '[ami-785c491f]' does not exist となります。これはリージョンによって異なるので、ami-8b92b4eeに変更します。(参考)https://docs.docker.com/machine/drivers/aws/
Terraform Terraform初体験。インフラをコードで定義するとはこういうことなんだ。
しかし、これも簡単に進ませてはくれません。
Error inspecting states in the "s3" backend: BucketRegionError: incorrect region, the bucket is not in 'us-east-2' region status code: 301, request id: , host id: 今回一番ハマったかもしれないのはこのエラー。
例えば、
aws s3 ls なんかを叩くと帰ってくるので、この接続でs3の所定のバケットが見えていないわけでもない。結局、フォルダ全体を一回消して、再度やり直したらOKという最悪パターンでした。
また、実際の発生順序は前後しますが、さらに進んでまたこのエラーが出るようになりましたが、書籍だと、aws_route_table.tf、aws_route_table_association.tfが、間違っているのでgithub(書籍に記載あり)のソースを見て記載しました。
rubyバージョン 元々のローカル環境がruby2.3.7だったのが悪いと思うのですが、最初にそれで進めてしまい、いざbuildが動くと
You must use Bundler 2 or greater with this lockfile が出るようになってしまいました。