dondakeshimoの丸太

データサイエンス/Webアプリケーション/

「アルゴリズムの基本」を読んで実装して

アルゴリズムの基本

下に記す本を読んで、途中まで実装を行ないました。

本の内容

本の概要

アルゴリズムがなぜ必要か、どのように評価するのかをわかりやすく解説してくれています。 アルゴリズム系の他の書籍を読んだことがないのでわからないですが、 読者を舐めたような簡単すぎる内容ではなく、入門書として適切な難易度であったと感じています。 実際のプラグラミングの記述は一切なく、全てのアルゴリズムを言葉で説明しています。

読むと良いと思う人

  • プログラミングを始めたばかりでとりあえず知識をつけたい人
  • Python等の高レベル言語は触れているけど、低水準のアルゴリズムに興味がある人

読んでも大して意味がないと思う人

本の良かったところ

  • 具体例が必ずついてきてイメージしやすい
  • 特定の言語を用いていないので誰でも読める
  • 広く浅く取り扱ってくれているため面白く、そこまで難しくない
  • 参考文献を記述してくれている

本の良くなかったところ

  • 実装に関してのイメージはつきづらい
  • 本に書いてある入出力で関数を作れない気がする
  • 読んで何の役に立つのかは謎

書籍の実装について

下記のリポジトリに途中まで実装を行なっています。

github.com

先述のように実装についてはアルゴリズムが難しくなるにつれて、かなり不親切な記述になっていきます。 そもそも、実装を考えていない入門書という立ち位置の本なので、 そこに文句をいうのはお門違いなのですが。 そのため、後半の実装で疲れ、挫折しました。

技術書の実装について、良かったのは当然理解が深まることですが、 コスパはそれほど良いとは感じなかったので、入門書は入門書、 しゃぶり尽くすことを考えずに、次の実装まで考えられているレベルの書籍を読んだ方が 良かったなと思いました。

機械学習、深層学習に必要な数学についてざっくりしたまとめ

深層学習に必要な数学

深層学習、機械学習に必要な数学についてまとめます。 参考書籍は下に貼り付けておきます。

目次

微積

参考書籍では微積分については各自で習熟しているものとされています。 微積分について必要な知識は

ベクトルと行列の微分については知識がなかったため、下記のサイトを参考にしました。 基本公式を押さえておけば式変形にはついていけます。

線形代数

スカラー、ベクトル、行列、テンソル

  • スカラーはdouble型などの1変数
  • ベクトルは1次元配列
  • 行列は2次元配列
  • テンソルは3次元以上の多次元配列

線型従属と張る空間

ノルム

Lpノルムの定義

 |\mathbf{x}| = (\sum_i|x_i|^p)^{\frac{1}{p}}

最大値ノルム

 |\mathbf{x}|_{\infty} = \max_{i} |x_i|

フロベニウスノルム(行列のノルム)

 | \mathbf{A} |_{F} = \sqrt{ \sum_{ij} A^{2}_{ij} }

固有値分解

固有値分解

 \mathbf{Av} = \lambda\mathbf{v} \qquad (\mathbf{v} \neq \mathbf{0})
 \mathbf{v} : 固有ベクトル, \lambda : 固有値
 \mathbf{V} = [\mathbf{v^{(1)}}, \dots, \mathbf{v^{(n)}} ]
 \mathbf{\lambda} = \left[ \lambda_1, \dots, \lambda_n \right]^{\mathrm{T}}
 \mathbf{A} = \mathbf{V}\mathbf{\mathbf{diag}}(\lambda)\mathbf{V^{-1}}

実対称行列の固有値分解

 \mathbf{A} = \mathbf{Q} \mathbf{\Lambda} \mathbf{Q}
   \qquad (\mathbf{Q}は直交行列)

固有値
  • 全ての  \lambda > 0 なら正定値
  • 全ての  \lambda \ge 0 なら半正定値
  • 全ての  \lambda > 0 なら負定値
  • 全ての  \lambda \le 0 なら半負定値

特異値分解(Singular Value Decomposition, SVD)

SVDの最も有用な特徴は逆行列法を非正方行列に部分的に一般化できること

 \mathbf{A} = \mathbf{U} \mathbf{D} \mathbf{V^{\mathrm{T}}}
 \mathbf{U}, \mathbf{V} : 直交行列, \mathbf{D} : 対角行列

ムーア・ペンローズ擬似逆行列

 \mathbf{A} : m \times n行列, \quad \mathbf{U, V, D} : 特異値分解
 \mathbf{A^+} = \lim_{\alpha \rightarrow 0}
   (\mathbf{A^{\mathrm{T}}A} + \alpha\mathbf{I})^{-1} \mathbf{A^{\mathrm{T}}}
 \mathbf{A^+} = \mathbf{VD^+U^+}

  • m < n なら  \mathbf{x} = \mathbf{A^+y} は全ての解で最小の  |\mathbf{x}|_2
  • m > n なら解が存在しない可能性、  |\mathbf{Ax} - \mathbf{y}|_2 が最小

トレース演算子

 \mathrm{Tr} (\mathbf{A}) = \sum_i \mathbf{A_{i, i}}
 | \mathbf{A} |_{F} = \sqrt{ \sum_{ij} A^2_{ij} } =
   \sqrt{ \mathrm{Tr} ( \mathbf{ A^{ \mathrm{T} } A} ) }
 \mathrm{Tr}\left(\prod^n_{i=1}F^{(i)}\right) =
   \mathrm{Tr}\left(F^{(n)}\prod^{n-1}_{i=1}F^{(i)}\right)

確率

確率変数、確率分布

観測される定義域の値を確率変数、確率変数が従う分布を確率分布

周辺確率分布

 \forall x \in \mathrm{x}, \quad P(\mathrm{x} = x) =
   \sum_y P(\mathrm{x} = x, \mathrm{y} = y)
 \forall x \in \mathrm{x}, \quad p(\mathrm{x} = x) =
   \int p(x, y) \mathrm{dy}

条件付き確率

 \displaystyle P(\mathrm{y} = y | \mathrm{x} = x) =
   \frac{P(\mathrm{y} = y, \mathrm{x} = x)}{P(\mathrm{x} = x)}

条件付き確率の連鎖律

条件付き確率の定義を用いれば、同時確率が条件付き確率の積で表せる

独立と条件付き独立

条件付き確率分布が独立であることを条件付き独立分布という

期待値、分散、共分散

 E_{\mathrm{x} \sim P} [ f(x) ] = \sum_{x} P(x)f(x)
 Var( f(x) ) = E \left[ ( f(x) - E [ f(x) ] )^{2} \right]
 Cov(f(x), g(y)) = E [ ( f(x) - E[ f(x) ] )( g(y) - E[g(y)] ) ]
 Cov(\mathrm{x})_{i, j} = Cov(\mathrm{x_i}, \mathrm{x_j})
 Cov(\mathrm{x_i}, \mathrm{x_i}) = Var(\mathrm{x_i})

一般的な確率分布

一般的な関数の有用な性質

ベイズ

 \displaystyle P(\mathrm{x|y}) = \frac{P(\mathrm{x})P(\mathrm{y|x})}{\mathrm{P(y)}}
 P(\mathrm{y}) = \sum_x P(\mathrm{y|x})P(x)

連続変数の保証

  • 測度論と呼ばれる理論に裏付けされる
  • 測度零やほとんど至るところで(almost everywhere)の概念

情報理論

自己情報量

底が  e なら  ナット 、底が  2 なら  ビット

 I(x) = -\log P(x)

シャノンエントロピー

 H(x) = E_{\mathrm{x} \sim P} [ I(x) ] = -E_{ \mathrm{x} \sim P } [ \log P(x) ]

カルバックライブラーダイバージェンス

 \displaystyle D_{KL}(P | Q) = E_{ \mathrm{x} \sim P } \left[ \log \frac{P(x)}{Q(x)} \right] =
   E_{ \mathrm{x} \sim P } [ \log P(x) - \log Q(x) ]
 D_{KL}(P | Q) \ne D_{KL}(Q | P)

 P Q の並びによって意味合いが異なる

交差エントロピー

 H(P, Q) = H(P) + D_{KL}(P | Q) = -E_{\mathrm{x} \sim P} \log Q(x)

なんかルールは平等でも貧富の差って生まれるらしいのでPythonに本当か聞いてみた

ツイートでこんなの見かけました。

ちょっと実装してみました。

コード

import numpy as np
import sys
from tqdm import tqdm


def release_coin(people):
    random = np.random.rand() * 6 + 0.5
    random = np.round(random)

    if random == 1:
        people["person1"] -= 1
    elif random == 2:
        people["person2"] -= 1
    elif random == 3:
        people["person3"] -= 1
    elif random == 4:
        people["person4"] -= 1
    elif random == 5:
        people["person5"] -= 1
    elif random == 6:
        people["person6"] -= 1
    else:
        print("error")
        print(random)

    return people


def get_coin(people):
    random = np.random.rand() * 6 + 0.5
    random = np.round(random)

    if random == 1:
        people["person1"] += 1
    elif random == 2:
        people["person2"] += 1
    elif random == 3:
        people["person3"] += 1
    elif random == 4:
        people["person4"] += 1
    elif random == 5:
        people["person5"] += 1
    elif random == 6:
        people["person6"] += 1
    else:
        print("error")
        print(random)

    return people


def validation(people):
    total = sum(people.values())

    if total == 600:
        return True
    else:
        return False


def main(loop_num):
    people = {"person1": 100,
              "person2": 100,
              "person3": 100,
              "person4": 100,
              "person5": 100,
              "person6": 100}

    for _ in tqdm(range(loop_num)):
        people = release_coin(people)
        people = get_coin(people)
        val = validation(people)

        if val:
            continue
        else:
            print("error")
            print(people)

    print(people)


if __name__ == "__main__":
    arg = int(sys.argv[1])
    main(arg)

辞書型にした理由は謎です。
乱数生成で +0.5をしばらく忘れていて痛い目にあった以外はすんなり行った気がします。

結果

% python static_disparity.py 1000000
100%|████████████████████████████████████████████████████| 1000000/1000000 [00:15<00:00, 64672.29it/s]
{'person1': 312, 'person2': 21, 'person3': 125, 'person4': -240, 'person5': -383, 'person6': 765}

% python static_disparity.py 1000000
100%|████████████████████████████████████████████████████| 1000000/1000000 [00:15<00:00, 64060.44it/s]
{'person1': 602, 'person2': -757, 'person3': -302, 'person4': 853, 'person5': -183, 'person6': 387}

% python static_disparity.py 1000000
100%|████████████████████████████████████████████████████| 1000000/1000000 [00:18<00:00, 53485.54it/s]
{'person1': -225, 'person2': -295, 'person3': -51, 'person4': -68, 'person5': 696, 'person6': 543}

まじで貧富の差が生まれていた。 一度きりの人生大変だと感じました。

webアプリを独力で作る体験をするのだ[vue-cliを使って敗者の環境構築]

Vue.js

React.jsと肩を並べる人気フレームワークで、 React.jsよりも学習コストが低めと聞いて使うことを決めました。

導入

公式ドキュメント

とりあえずチュートリアルでもやろうかなと思い、 公式ページを訪問したら、公式ドキュメントがめっちゃいい感じに流れに沿った解説だったので、 しばらく読み進めることにしました。 しかしながら、手を動かしながらじゃないと楽しくないし、眠くなるので、 先に環境を整えて遊びながらやっていこうと決めました。

環境構築

思ったよりも最高に大変でした。 まずは 単一コンポーネント という概念があるということから難関は始まるのですが、、、

単一コンポーネント

普通にhtmlとjsを分離して、js側にvueを使って書いていく方法と、 .vue拡張子のファイルにhtml, js, css全て詰め込んで部品を組み立てていく方法の 二種類が存在します。 単一コンポーネントの方がvueっぽいし楽しそう! しかもドキュメントが見た所多そう!!(Qiita斜め読み調べ) ということで単一コンポーネントと呼ばれる .vue拡張子を基礎とした書き方でいくことに決めました。

vue-cli

さて、環境構築に入るのですが、 まずはフレームワークのインストールですね。 なんとなくnpmでやればいいかなと思って

npm i -S vue

えい!これで入りました。あら簡単だ! ここまではよかったのですが、今回 単一コンポーネント を扱うため、 ビルドツールが必要とのことです。 Qiitaから察するに webpack が人気そう!ということでwebpackを導入。 webpackの設定をvueのsample repositoryを参照に書いていく。
...ムズイ。
今になって思うとバベルが何かあまりわかっていなかったことが敗因と思われるのですが、 結論から言うと諦めました。

CLI は Node.js および関連するビルドツールに関する事前知識を前提としています。Vue またはフロントエンドビルドツールを初めて使用している場合、CLI を使用する前に、ビルドツールなしでガイドを参照することを強くお勧めします。

公式に上記のように書かれており、 使ってはいけないと思っていた vue-cliと呼ばれるcliツールを使用することにしました。

npm i -g vue-cli
vue init webpack my-project
cd my-project
npm i
npm run dev

まぁ、便利ですよね、そりゃ、 一瞬で環境構築が終わってしまいました。 webpack.configが書けなかった時点で、 ビルド周りの理解はとりあえず後回しにすることを決め、 とりあえずはこのテンプレートのなかでできることを増やしていく方針にしました。 これにて導入は完了?

最初に入って学習すべきもの

babelとは何か

基本的には将来的に実装されることが決まっているが、 ブラウザがまだ対応していないESバージョンを書かせてくれる。 そして、ビルド時によしなに対応させてくれるっぽい。 新しいESまで勉強できて良いかもしれない。 altJSの一つとしてしか認識していなかったため、 勉強するの面倒としか思っておらず避けようとしていたのですが、 触れられてよかったと今は思っています。

webpackの簡単な使い方

vue-cliを使っていれば

# 開発用簡易サーバー起動
npm run dev
# 本番用ビルド
npm run build

さえ覚えていれば、正直大丈夫な気もします。 ただ、configディレクトリに入っている dev.env.jsなどを用いて環境変数を設定できるので、 それらの使い方だけは見ておくと便利かと思います。 自分はbackendのurlをここで分けています。

eslintとは何か

これはつい最近、タイポが多すぎて勉強していたので面くらわずにすみました。 簡単に言うと書き方が汚いと小煩く叱ってくれるソフトです。 エディタはAtomを使っているのですが、 Atomだと書きながらリアルタイムでeslintが添削を行ってくれます。 Atom使えないシェルでいちいち怒られるか、ブラウザで毎回怒られることになりそうなので、 IDE万歳と思いました。

test(まだ何も触ってない)

これからやります。 とりあえずtestは開発とともに書き溜めるものと言う認識のみあります。 認識だけで実際に書いていないので私はクソです。

まとめ

とりあえず何か作るたいならvue-cliめっちゃ便利

webアプリを独力で作る体験をするのだ[AWSを使ったSPA, API設計を考えた]

設計が完了した

つい先日、AWSのサービスをひたすら適当に列挙していきました。 さらに適当な考察の末、それっぽい設計ができたかなと思います。 これから以下の画像についてざっくりと説明していきます。 (最初画像貼り忘れてた...)

f:id:went-went-takkun135:20171108110110p:plain
SPAの設計

フロントエンド

SPA

Single Page Applicationの略です。 最近やたらとサクサク動くwebサービスが多いなと思っていました。 調べてみるとフロントでレンダリングして、非同期的にデータを取得してるとかいう、 誰が考えたんだよ、天才かよ、っていうものがあったのでそれを作りたいなとなりました。

フレームワーク

SPA作るに際してフレームワークは何にするの問題があって、 みたいな話は以前した気がしますが、Vue.js を用いて実装していっています。

S3, CloudFront

SPAはただの静的ファイルのため、S3 において置くだけで良いようです。 ただ、S3において置くだけだと、アクセスはできないですし、 アクセス許可するとそれはそれでセキュリティ的にどうなのってなるので、 S3の前に CloudFront を噛ませます。 これで安心安全Https接続ですね。あまりhttpsが何かはまだわかっていないんですが...。 以下のページを参考にさせていただきました。 皆さんありがとうございます。

AngularJSで作ったSPAをAWS上の「S3+CloudFront」でお手軽ホスティングして、クラウドサービスってやっぱ素晴らしいなと思った話 | I am mitsuruog

SPAを S3+CloudFront で表示する方法 - Carpe Diem

[CloudFront + S3]特定バケットに特定ディストリビューションのみからアクセスできるよう設定する | Developers.IO

バックエンド

Web API

SPAにはバックエンドが必要です。 いや、何にでもですね、すみません。 基本的にSPAのバックエンドはWeb APIを作れば良さそうです。 将来的にはこの構成で、ネイティブアプリにも対応できるなとか考えてはいます。

フレームワーク

ここもまた前に話した気がするのですが、 Nodehapi を使って実装していきます!

Elastic Beanstalk

Googleさんに聞いている限り、 バックエンドはAPI GatewayAWS Lambdaで実装するパターンが多い気がします。 しかしながら、結構強めのバックエンド作ってやろうと意気込んでいたので、 (あとはシンプルにいつも触っていたので) Elastic Beanstalk を使うことにしました!

データベース

PostgreSQL

今こいつで死ぬほど詰まっています。 なんでDynamoだけじゃないの?って聞かれたら データサイエンティストになるならSQLは書けなければならない。 って誰かに言われたからです。 SQLなんてちょろいやろって思ってたんですけど、 SQL書き始める前のセットアップが辛すぎて泣きそうです。

Dynamo DB

メインは楽そうなのでこの子です。 しかも無料枠の幅が広い。 太っ腹や!!!! NoSQLというのもそうですが、 こっちはAWSコンソールで操作ができるので、セットアップがある程度楽そうですね! 最初のテーブル作るのとかGUIAWS内で提供してくれてるの良いです

まとめ

こんな感じで設計がまとまりました。 ほぼ全ての設定で詰まっているのでなかなか進みませんが、 頑張っていきたいと思います。

webアプリを独力で作る体験をするのだ[AWSのサービスを一通り眺めてまとめた]

AWS

みなさんご存知AWSだと思うのですが、 そのサービスの量に圧倒されました。 どのような設計がベストプラクティスなのかは、 経験と丹念なリサーチによって判断されるものだと思いますが、 初心者だってサービスを作りたいのです。 そこで、丹念なリサーチのみでawsサービスでの ウェブアプリケーションを設計を試みましたが、 とんでもなく時間がかかっているので、 ざっくりとしてサービスまとめを作っていきたいと思います。

コンピューティング

何かしらのソースコードをデプロイして、 CPUに計算を行わせるサービスはここに分類されるようです。

EC2

ありのままのサーバーみたいなもの

Lightsail

簡単にEC2を作るやつ

VPC

まだ調べていない

Batch

まだ調べていない。
まとめて処理?

Beanstalk

EC2上に簡単にウェブアプリケーションの作成を行える。 webサーバーの構築をスキップして、 アプリケーションサーバーのみを作成すれば良くなる。

Lambda

関数をデブロイしておくと、 登録したタイミング(時間指定やイベント指定)でその関数を実行してくれる。

Auto Scailing

これはここに分類されるの正しいのだろうか?
結構なサービスにつけれられる機能で、 仮想サーバーの処理能力を自動、半自動、手動で上下させることでコストを抑えたり、 サーバー負荷によるダウンを防ぐ。

ストレージ

いろんなウェブアプリケーションの事例を検索していた感想としては S3を使えれば良いのではないだろうかと考えています。 ということで今回はスキップさせていただきます。

データベース

データベースも色々出してるっぽいですね。

Aurora

下にあるRDSの中に含まれるべきと思うのですが... amazonが作ったRDSだと。

RDS

MySQLなどのリレーショナルデータベース。 結構色々種類ある。

DynamoDB

言わずと知れたamazonのNoSQLデータベース。

Elastic Cache

Redisなどのインメモリキャッシュミドルウェアを使えるサービス。 サービスの高速化のために。

Redshift

データウェアハウス?ってなんだ... SQL系のデータベースを解析するっぽい

AWS Database Migration Service

データ移行してくれるらしい 次の大項目移行やねんけど、ここであってるんか?

移行

と思ったらAWS Database Migration Serviceちゃんとありました笑 これもしばらく使わなさそうな項目なのでスキップです。

ネットワークとコンテンツ配信

VPC

Virtual Private Cloudの略らしい。 仮想環境の中で仮想コンピュータを立ち上げるみたいな感じなのだろうか。

Cloud Front

CDNサービス。 フロントとしてS3の前に設置するのを良く見る。

Route 53

ドメインネームシステム。 ドメインを取得するのだ。

Direct Connect

専用線接続するらしいです。 すみません勉強不足です

Elastic Load Balancing

サーバーの前などに設置したら、うまいこと負荷を分散してくれるやつ。

開発者用ツール

何やらCodeシリーズみたいなものが大量にありましたが、 自動デプロイとかは使うかもしれないなぁくらいなのでとりあえずスキップ。

管理ツール

Cloud Watchが有名な気がする。 監視系と管理系が詰まっているが、とりあえずスキップ。

セキュリティ、アイデンティティコンプライアンス

疲れてきたので、使いそうなもののみピックアップします!

Certificate Manager

HTTPSにするやつだと思ってるがあっているのだろうか

WAF

よしなに守ってくれるらしい

分析

データベースをうまいこと集計するときとかに使えそうなもの多数

人工知能

クラウドMLは楽しそうですね。 金も吹っ飛びそうですが

モバイルサービス

API Gateway

なぜここにあるのだろうか... APIのフロントエンドになってくれる。 バックエンドとしてLambdaと親和性が高い。

Cognito

認証機能を提供してくれるツール。 それだけかと思っていたら、デバイス間の同期とか書いていたからもう少し高機能っぽい。 コスト的に普通に自分で実装することになりそう

アプリケーションサービス

ふむ。次!!

メッセージング

あらゆるタイプの通知

SQS

どこかに何かを送信するのをキューとして管理

SNS

シンプルな情報発信

PinPoint

プッシュ通知

SES

Emailの送受信

その他

今の所使わなそうだからスキップ!!

感想

多すぎてサービスだけでコアな部分出来上がりそうやけど、 コストとのせめぎ合いになるのだろうか。 クラウドだからと行って管理が楽かは使い方次第だろうしな。 しっかし調べてみて、SIerがなんで儲かるか良くわかったわ。

webアプリを独力で作る体験をするのだ[序章~特に内容がありません~]

Webアプケーションを作る!ぞ!!(読み飛ばしてください)

ご無沙汰しておりました。 今回、見出しに書いているように、webアプリケーションを作る決心をしまして、 コードを書くのが楽しかったのとシンプルにブログ書いてる暇があったらinputしなきゃ! ってなっていたのでブログかけていませんでした。 しかし、inputがなければoutputができないように、 定期的なoutputがないと人は何をinputしていいかわからなくなるもの...? 嘘かもです。とりあえずひと段落ついたので久しぶりに投稿いたします。
モチベーションとしては、就活を控える身となって、 エンジニア職を探していると登録フォームに必ずと言っていいほど

成果物

欄があってですね、そういえば筆者は独力で何かしらの成果物を作り上げたことがあるのか 少し不安になってきまして、いっちょやってやるかとなったわけです。
どんなサービスを作るかはとりあえず秘密です! (上手いこといったら金取れるんちゃうん...とか考えてます)


hapi

Node

インターン先でNodeを使っており、 今の所Nodeの問題点にもそれほど遭遇していないため、 Nodeを使ってサービスを作って行きます! Nodeの大きなメリットは 非同期処理! アクセスが集中しても速度を保ちやすいらしいです! 後、Nodeはフレームワークではなくプラットフォームです。 筆者は使い始めてしばらく勘違いしていました。笑

フレームワーク

有名どころだと

  • express
  • hapi

だと思っています。 文献数が圧倒的に多いexpressを使おうかと思ったのですが、 インターン先で使っているhapiの方が学習コストを抑えられるなと思い、こちらにしました。 ちゃんとリサーチしていないので、双方の強みとかあまりわかってません。

学習方法

ドキュメントの概要みたいなものを一通り読んで、 インターン先のコードを参考にさせてもらいながら、 とりあえず手を動かす方式で行くことにしました。

jwt

認証方式が色々あって色々考えたのですが、 json web tokenがなんか最近流行ってそうかなと 適当に色々斜め読みした結果思ったので、 使うことにしました。 hapiでは hapi-auth-jwt2というpluginを入れてあげて ちょこちょこと設定をすればjwtが使えました。 主にgithubのreadmeを読みながら格闘しました。

Elasticsearch

人気の検索エンジン?ですよね??
なんか普通にデータベースとしても相当優秀なのではないかと思って、 こいつにデータをぶち込んでます。 JSON形式のものをそのまま突っ込むだけなので本当に楽、 その代わり頑健性的にはよくないのだと思います。

nodemon

ファイルに変更が加わったら、サーバを再起動してくれる便利なモジュール。
あってますか?笑 適当な認識でとりあえず使ってますが、 とても簡単に導入できて便利で良いです!

npm i -g nodemon

localのbinディレクトリにpath通すのが面倒だったので globalに入れました!

Vue.js

こいつが今回の関門だと思っています。 フロントエンドの勉強は全然足りていないので、 今からとりあえずドキュメントを一通り読みきろうかと思います。

まとめ

本文にまとまりが一切ないというか、 完全に自分の行なっていることの記録と化してしまいましたが、 とりあえず以上のような環境を用いて実装していこうと思います! 問題にぶつかったり面白いTipsが見つかったりしたら投稿していきます!