Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all 21635 articles
Browse latest View live

memcachedについて

$
0
0

概要

memcachedとは、分散型のキャッシュシステムを構築するためのソフトウェアである。
今まで、サーバーとDBの接続にはRDBMSが主流で使われていたが、大規模なシステムには
向かなかった。(処理が重くなりすぎるため)

そこで、memcached(メムキャシュトゥ)が登場すると。

特徴

  • メモリ上にデータ保存を保存しているので、高速に読める。
  • クライアントの設定で分散処理にできる。(スケールアウトが用意である)
  • 設定した容量を超えると、アクセスされていないモノから消される(LRU)

こんな感じ

スライド1.jpeg

参考

https://gihyo.jp/dev/feature/01/memcached/0001
https://qiita.com/juve_534/items/54f7732641a406f31b55


【Mac】Mac初心者ユーザーが膨大な時間を費やして得た基本操作メモ

$
0
0

完全究極パーフェクトアルティメット自分用メモ

Dear.将来おうちにMacを買うであろう自分へ

また一からググってイライラしないようにメモを残しておいたよ。
体に気を付けてね。あともっと勉強しろよ。

ps.たまには実家に帰りなさい。
From Mac初心者おじさん

マウスホイールの向きが違う

システム環境設定マウス→スクロールのチェック外す

ターミナルの出し方

Command+ Space入力後、ターミナルと打つ
※以後Dock(アイコンいっぱい並んでるやつ)に加える

隠しファイル、フォルダ表示

ターミナルで入力

defaults write com.apple.finder AppleShowAllFiles TRUE

一回Finder閉じる

killall Finder

以後、ショートカットでOK

[command] + [shift] + [.(ドット)]

【参考リンク】:【Mac】隠しファイル・隠しフォルダを表示する方法

adb command打ちたい

ターミナルでこれ打ったらbash_profileが開くらしい

vi ~/.bash_profile

iでInsert(挿入)モードにして下記入力

export PATH=$PATH:Android SDKの場所(/platform-tools まで)

Esc押してInsert終了して
:wqと打ち込んで保存してターミナルに戻る

ターミナルで下記打てば完了

source ~/.bash_profile

【参考リンク】:adbをMacのターミナルで使えるようにする

スクショ

スクリーンショットというプリインストールのアプリがある

場所はLaunchpadその他の中見るとだいたいあるらしい

GIF

Windowsで使えた最強のGIF作成ツール
Macでは使えないらしいので見つけ次第加筆予定。。。

ショートカットキーいろいろ

呼び出せる機能Key
ファンクションキーの機能いろいろFn+ Function Key
Windowサイズ最大化&解除Ctr+command+F
Spotlite(検索的なやつ)command+ Space
Finder起動時、任意のフォルダへ移動command+Shift+G
Finder起動時、パスをコピーOption+command+C
Finderをもう一つ開くcommand+N
フォルダ、ファイルをリネーム選択してEnter
フォルダ、ファイルを消すcommand+Delete
Chorme?で閉じたタブをもう一度開くShift+Command+T
Chorme?の文字サイズ縮小command+-(マイナス)
Chorme?の文字サイズ拡大command+Shift++(プラス)

Chorme?は他のブラウザで検証してないってことです

Rで散布図を描く ---初心者向け---

$
0
0
tags: rBasicLearning

散布図

使用するデータ

今回は, データとしてmtcarsを使う.

library(datasets)mtcars

散布図を使う場合

ヒストグラムは, 二つの量的データの関係性の概観を見る時に使う.

まずは, 量的データの概観を一つずつヒストグラムで見ていく

まずは, それぞれの変数のヒストグラムを見て, 概観を掴む.

hist(mtcars$wt)hist(mtcars$mpg)

散布図をプロットする

散布図は, 以下のコードで書くことができる.

plot(mtcars$wt,mtcars$mpg)

散布図に装飾を加える

散布図は, 以下のように装飾を加えることができる.
pchは, プロットの点の種類(pch = 19は丸)
cexは, プロットのサイズの拡大・縮小を表す(cex = 1.5は, プロットのサイズを1.5倍にする)
colは色, mainはグラフのタイトル, xlabはx軸ラベル, ylabはy軸ラベル.

plot(mtcars$wt,mtcars$mpg,pch=19,# Solid circlecex=1.5,# Make 150% sizecol="#cc0000",# Redmain="MPG as a Function of Weight of Cars",xlab="Weight (in 1000 pounds)",ylab="MPG")plot(mtcars$wt,mtcars$mpg,pch=3,# plus markcex=1.5,# Make 150% sizecol="#cc0000",# Redmain="MPG as a Function of Weight of Cars",xlab="Weight (in 1000 pounds)",ylab="MPG")plot(mtcars$wt,mtcars$mpg,pch=19,# Solid circlecex=0.3,# Make 30% sizecol="#cc0000",# Redmain="MPG as a Function of Weight of Cars",xlab="Weight (in 1000 pounds)",ylab="MPG")

CentOS7+Apacheでphpinfoを表示させたい。

$
0
0

概要

筆者「WindowsでLAMP環境を構築してからアプリ開発をしたい!」
⇒でも、ソースを書いてもサーバー上でPHPが読み込まれない…
⇒調査!!!(した結果を自分用にメモとして綴ります)

環境


・Vagrant
・VirtualBox
・CentOS7.7
・PHP7.2
・Apache2.4

①httpd.confに追記

$ cd /etc/httpd/conf
httpd.confがあるディレクトリに移動して、


$ vi httpd.conf
viで編集します。

httpd.conf
LoadModule php7_module C:/php/sapi/php7Apache2.dll
AddType application/x-httpd-php .php

【viコマンドメモ】
・「i」で編集
・追記したら「:wq」で保存+終了

②phpinfo.phpをつくる

$ cd var/www/html
今度はドキュメントルートに移動して


$ touch phpinfo.php
phpinfoのファイルを作成

phpinfo.php
<?phpphpinfo();//phpの詳細を表示する関数?>

これを書いて保存+終了!
サーバーを立ち上げてphpinfo.phpにアクセスすれば無事中身が確認できました。
phpinfo.JPG

まとめ

XAMPPに慣れてVagrant等の仮想環境から逃避していたので勉強になりました。
vagrant box addとかyumコマンドでインストールさえ済めば万事解決なわけなかった()

[Python3] 「A//B」と「math.floor(A/B)」は必ずしも同じではない!?

$
0
0

注意

本記事は「Atcoder Beginner Contest 148 E - Double Factorial」のネタバレを含みます。この問題を自力で解く予定のある方は閲覧をお控えください。

概要

Atcoderを解いている時にタイトルに関する問題にはまったので、備忘録として残しておくのと、Python有識者の意見を聞きたいがために本記事を投稿します。

問題

Atcoder Beginner Contest 148 E - Double Factorial

0以上の整数nに対し、f(n)を次のように定義します。

・f(n) = 1 [n < 2 のとき]\\
・f(n) = nf(n-2) [n \geq 2 のとき]

整数Nが与えられます。f(N)を10進数で表記した時に末尾に何個の0が続くかを求めてください。

環境

  • MacBook Pro(64bit)
  • Python 3.8

※AtcoderのPython3のバージョンは「3.4.3」ですが、上記環境でも同様の結果を得られることを事前確認済です。

現象

下記2つのコードで、上はAC(正解)となりますが、下はWA(不正解)となってしまいます。

AC.py
importmathN=int(input())ans=0ifN%2!=0:passelse:foriinrange(0,25):ans+=N//(10*5**i)print(ans)
WA.py
importmathN=int(input())ans=0ifN%2!=0:passelse:foriinrange(0,25):ans+=math.floor(N/(10*5**i))print(ans)

なお、本問題のテストケースは15個ありますが、そのうち下記2つのテストケースでWAとなってしまいました。

[15.txt]
IN:  237590337949089028
OUT: 29698792243636116

[16.txt]
IN:  999003990299500294
OUT: 124875498787437525

予想原因

予想原因は私が原因を特定するまで色々試した内容を綴ったものです。
結果だけ知りたいよ!という方は次の章までスキップしていただけたらと思います。

ACとWAに関わるのは下記の部分です。

ans+=N//(10*5**i)#AC
ans+=math.floor(N/(10*5**i))#WA

両方とも似たようなことをしているので同じ結果になりそうですが、違います。

とりあえず、どこで誤差が生じているのかを出力してみます。下記の通りにします。
※ Nの値はWAとなったテストケース「237590337949089028」を使用します。

debug.py
importmathN=int(input())ans_ac=0ans_wa=0ifN%2!=0:passelse:foriinrange(0,25):ans_ac=N//(10*5**i)ans_wa=math.floor(N/(10*5**i))print('i =',i)print('d =',N/(10*5**i))print('AC:',ans_ac)print('WA:',ans_wa)

結果は次のようになりました。

i = 0 # 誤差: 2
d = 2.3759033794908904e+16
AC:  23759033794908902
WA:  23759033794908904

i = 1 # 誤差: 1
d = 4751806758981781.0
AC: 4751806758981780
WA: 4751806758981781

i = 2 # 誤差: 0
d = 950361351796356.1
AC: 950361351796356
WA: 950361351796356

i = 3 # 誤差: 0
d = 190072270359271.22
AC: 190072270359271
WA: 190072270359271

(以下省略)

これ以降の繰り返し(iが3以上25未満)はACとWAの誤差が全て0(ACとWAが等しい)でした。
繰り返しの最初(i = 0, 1)だけ誤差が生じていたようです。
とりあえず、このままでは何もわからなさそうなので、違うことを考えることにしました。

ここで一つ頭に思い浮かんだことがありました。これら計算の型は一体どうなっているのでしょうか。
Pythonには実数値を表す型として2つあります。

  • int
  • float

前者には精度の制限はありませんが、後者にはあります。
問題となっている2つの計算方法はどのような型の偏移をしているのでしょうか。

abc.001.jpeg

//に関して、公式ドキュメントによると

x // y xとyの商を切り下げたもの
整数の除算とも呼ばれます。結果の型は整数型とは限りませんが、結果の値は整数です。
結果は常に負の無限大の方向に丸められます。

とあります。ACの計算では一度もfloat型になることなく変数に代入されるようです。

では、WAの計算ではどうでしょうか。こちらはx/yの計算結果によって一度float型を経由しています。
手元の環境で確かめてみました。

test.py
A=4B=2print(type(A),type(B))print(type(A/B))print(A/B)'''
<class 'int'> <class 'int'>
<class 'float'>
2.0
'''

つまり、math.floor()を使う前の時点で既にfloat型になってしまっているのです。
//math.floor()は似て非なるものなんじゃないか?と考えていましたが、それが原因ではないっぽいです。

公式ドキュメントに載っているmath.floor()の定義については下記の通りです。

x の「床」 (x 以下の最大の整数) を返します。
x が浮動小数点数でなければ、内部的に x.__ floor __() が実行され、Integral値が返されます。

むしろ、WAの計算はfloat型を介したことで、そもそもmath.floor()に適切ではない値を渡していたと予想しました。

型紹介のときに記述しましたが、float型はint型と違って精度の制限があります。
これを調べる方法として次のようなものがありました。

dig.py
importsysprint(sys.float_info.dig)# 15

公式ドキュメントは次の通りです。

sys.float_info
float型に関する情報を保持している名前付きタプル
dig: 浮動小数点数で正確に表示できる最大の10進数桁

どうやらfloat型は15桁までは精度がでるが、それ以上の桁は怪しいよということですね...
それでは、先程のWAを出したテストケースを再度確認します。今回は桁数に注目します。

i = 0 # 誤差: 2
d = 2.3759033794908904e+16 # 整数17桁, 少数0桁
AC:  23759033794908902     # 23759033794908904
WA:  23759033794908904     # 17桁 > 15桁

i = 1 # 誤差: 1
d = 4751806758981781.0     # 整数16桁, 少数1桁
AC: 4751806758981780       # 16桁 > 15桁
WA: 4751806758981781

i = 2 # 誤差: 0
d = 950361351796356.1      # 整数15桁, 少数1桁
AC: 950361351796356        # 15桁 = 15桁
WA: 950361351796356

i = 3 # 誤差: 0
d = 190072270359271.22     # 整数15桁, 少数2桁
AC: 190072270359271        # 15桁 = 15桁
WA: 190072270359271

(以下省略)

今回のAtcoder問題の解答は整数桁部分が重要となります。
整数桁がfloat型の精度15桁より多い場合に誤差が生じることが判明しました!
4 <= i < 25のときは整数桁が15桁より大きくなることはないので、誤差が生じることはなかったようです。

誤差が生じたfloat型のdmath.floor()に噛ませたことで、今回はACがでなかったようでした。

まとめ

  • A // Bmath.floor(A / B)はやっていることは同じ
  • ABも整数(int)型のときA // Bはそのまま整数型で出力
  • ABも整数(int)型であってもmath.floor(A / B)A / B浮動小数点(float)型を経由する
  • A / Bの結果がfloat型の精度を超えてしまうと誤差が生じてしまう
  • A, Bの値によってはA // Bmath.floor(A / B)の結果が違うことがある
  • 競プロでは注意しよう!!

以上になります。ここまでお読みいただきありがとうございました!

Node.js - Mysql「Error: Cannot enqueue Query after invoking quit.」の対処(Connection pool)

$
0
0

はじめに

本記事はデータベースにおけるコネクションプール(connection pool)について触れていくものです。

実際にハマったシチュエーションをもとに説明していきたいと思います。

  • 事象の詳細
  • 原因
  • 状況を再現してみる
  • 適切な対処方法
  • コネクションプールの実装

事象の詳細

Node.jsにて、Mysqlからデータを取得しようとしたとき、以下のエラーが発生した。

Error: Cannot enqueue Query after invoking quit.

どうやら2回目のGET:/api/todoを呼び出した時に必ず発生するようです。
その時のソースコードは以下です。

constexpress=require("express");constmysql=require("mysql");constapp=express();// データベースへのコネクションを生成constconnection=mysql.createConnection({// DB接続に関するオプション設定});connection.connect();app.get("/api/todo",(req,res)=>{constquery="SELECT * FROM todo;";connection.query(query,(err,rows)=>{if(err)console.log("err: ",err);res.json(rows);});connection.end();});// サーバー起動app.listen(8081,()=>console.log("Example app listening on port 8081!"));

原因

コネクションは再利用できない。

変数connectionに対して、end()を呼び出し、丁寧に接続を切っています。
そこで再度connection()を呼び出せばまた接続できるのでは?という発想でした。

状況を再現してみる

実装した処理

同一のコネクションに対して、複数回接続を行う処理を作成してみました。

constmysql=require("mysql");constconnection=mysql.createConnection({// DB接続に関するオプション設定});for(letindex=0;index<2;index++){connection.connect();constquery=connection.query("SELECT * FROM todo;");query.on("result",(row,index)=>{console.log("--- result ---");console.log(row);console.log(index);});connection.end();}

処理結果

nodeコマンドを使って、この処理を実行すると、以下のようなエラーになります。

Error: Cannot enqueue Handshake after invoking quit.

一度使ったんだから、ちゃんと破棄してくれってことですね。

適切な対処方法

何度もアクセス要求ができる接続窓口を作ってあげる。

実際のWebアプリケーションでは、同一のデータベースに対して何度も接続する処理が行われます。
規模にもよりますが、多人数で利用することを考えると、その数は膨大なものになります。

よって、以下の観点からコネクション確立処理は極力減らしたほうが良いです。

  • 本処理自体がオーバーヘッド(overhead)である
  • コネクション確立には時間がかかるため、ユーザーを都度待たせてしまう
  • コネクションの数だけDB側でメモリを確保する必要があるため、高負荷状態になりやすい

それらを実現するのがコネクションプール(connection pool)です。

  • コネクションの状態を保持し、そのコネクションを使いまわすことができる
  • コネクション数に上限を設けることができる

コネクションプールの実装

mysql - Pooling connectionsを参考に、コネクションプールを作成し、複数回のデータベース接続処理を行ってみます。

使用する関数はcreatePool()です。
実行するクエリが一つの場合、以下のような書き方でOKです。

constmysql=require("mysql");constpool=mysql.createPool({// DB接続に関するオプション設定});pool.query("SELECT * FROM todo;",(error,results)=>{if(error)throwerror;console.log(results[0]);});

プールが持つquery関数はpool.getConnection()connection.query()connection.release()を省略してくれます。

複数回のクエリ実行を行いたい場合などは以下です。

pool.getConnection((err,connection)=>{if(err)throwerr;connection.query("SELECT something FROM sometable",(error,results)=>{connection.release();if(error)throwerror;console.log(results[0])});});

おわり

データベースに関する基礎的な知識が不足していたせいで、こんなところでハマってしまいました。
基礎的な部分を固めることができたと思うので、次の課題に取り組んでいきたいと思います。

あと、mysqlライブラリのドキュメントに書いてあるとおりに実装していくと、コールバック地獄に陥りそうですね。
async/awaitなどを使ってもっとスマートに実装していきたいです。

ラズベリーパイのOSのRaspbian導入エラー

$
0
0

はじめに

ラズベリーパイ4Bの初心者セットを購入しました。今思えば技適マークがついてないもの買ってしまったなと少し後悔。
私が購入したものは以下のラズパイ入門セット。
https://www.amazon.co.jp/gp/product/B07ZRF5BC1/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1

やってしまったこと

ネットで調べながら組み立て、Raspbianを別パソコンに入れてSDカードにコピー…。コピーには以下のDDWinというフリーソフトを使用しました。
https://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows

普通ならば…正常にコピーできるですが何らかのエラーが発生した模様。SDカード移行中に”フォーマットしますか?”みたいなメッセージがでたときにYESを押しちゃったのが悪かったのかと思います。ま、まぁうまくいっているだろうと、気になりながらもラズパイにSDカード入れてスイッチオン!ラズベリーマークが出てきてテンションマックスになるも以下の画面から動かない…。

unnamed.jpg

”end kernel panic”とかいうのが出てしまっている!!。

対策

色々調べてみましたが、結局SDカードを完全フォーマットしました。ただ、普通にwindowsでフォーマットしようとしてもうまくいかない…。MiniTool Partition Wizardというフリーソフトでフォーマットしました。
https://forest.watch.impress.co.jp/library/software/partwizhome/
以下はフォーマット後に再度OSを入れた後の画面ですけど、こんな感じです。
mini tool partition wizard.PNG

結果

フォーマット&Raspbianを再度コピーし、無事に導入成功。
IMG_3037.jpg

さいごに

新しくSDカードを購入して対応したりしている方もいるようなのですが…僕みたいに夜中に一人でコツコツやってる人にとっては新しいSDカードを買いに行く時間すら節約したいし、Amazonで注文して翌日まで待つのも惜しい。僕みたいな初心者で一人コツコツ派の助けになれば幸いです。

Vue.jsの基礎

$
0
0

Vue.jsの基本的な使い方

  • Reactは単方向データバインディングで一方通行なのに対し、Vueは双方向データバインディングで双方向にデータを流す仕組みになっている。
    • 双方向データバインディングの場合はjsの中身が変わったらすぐに反映される
    • 単方向データバインディングの場合はrenderなどの描画の処理が単方向であるため即時反映とはならない

環境構築 ---未完成

  • vue.esn.jsというtemplate機能のないランタイム限定ビルドがあるので、これも必要に応じてnpmでインストールする

基本的な書き方

  • new Vueでインスタンス生成
  • elでセレクターを書き込み、スコープを指定する
  • dataプロパティはオブジェクトの形で自分が使いたいプロパティを定義する
    • データオブジェクトの中の値を出し入れするための入れ物のようなもの
  • dataで定義したプロパティはhtmlで使うことができる

ファイルのベースづくり

app.js
importVuefrom'vue'newVue({el:'#app1',data:{message:'vueのテンプレートの構文。{{}}で囲って処理がかける'}})

htmlの方では{{}}の中でテンプレートの構文やif文など、またインスタンス化したdataのプロパティなども使える

index.html
<divid="app1">
  {{ message }}
</div>

v-bindを使った属性のバインド

  • 単方向のデータバインディング
  • dataの変更に応じて表示されるが、HTML側の入力でdataが変更されることはない
  • v-bind:とすることでインスタンスで定義したdataのプロパティが属性として出力される
  • v-bind:は省略可能で、:のみで書くことができる
  • class属性を渡すときは連想配列の形で渡す
  • その連想配列の値がtruefalseかでプロパティ名が付くどうかが判別される
  • この例の場合、activetext-dangertrueなのでclass="active text-dangerとして入ってくる

text-dangerのように-を使っている場合''または""で囲む必要がある

app.js
importVuefrom'vue'newVue({el:'#app2',data:{message:'このページをロードしたのは '+newDate().toLocalString(),classObject:{active:true,'text-danger':true}}})
index.html
<divid="app2"><!-- title属性は補足的な情報を与えるときに使用し、ポインタを重ねると吹き出し(ツールチップ)が表示される --><spanv-bind:title="message":class="classObject">この文字にロードした日付が表示される
  </span></div>

v-if, v-else-if, v-elseを使った条件分岐で表示非表示

v-ifのみでの条件分岐

app.js
importVuefrom'vue';newVue({el:'#app3',data:{isShow:true}})
  • isShowの名称は任意
  • v-ifの中でtruefalseかを判定し、trueであれば、そのタグ自体を表示し、falseであれば、そのタグ自体を非表示にする ※ 非表示の場合DOM自体がなくなる(DOMの残るdisplay:noneとは異なる)
htmlindex.html
<divid="app3"><spanv-if="isShow">v-ifを使ったDOMの表示非表示</span></div>

v-if, v-else-if, v-elseを使った条件分岐

app.js
newVue({el:'#app3',data:{isShow:'a'}})
index.html
<divid="app3"><spanv-if=" isShow === 'a' ">v-ifを使った条件分岐</span><spanv-else-if=" isShow === 'b' ">v-ifと同階層に書く</span><spanv-else>v-ifと同階層に書く</span></div>

v-showを使った要素の表示非表示

  • v-showによる要素は常に描画され、v-ifと異なりDOMを維持する
  • styleだけ非表示になっているだけ(display: none;)
  • v-showtrueなら表示、falseなら非表示(display:none;)
app.js
newVue({el:'#app3',data:{isShow:true}})
index.html
<divid="app3"><spanv-show="isShow">v-showで表示</span><spanv-show="!isShow">v-showで非表示に</span></div>

v-forを使ったループ処理

v-forの値に変数名を割り当てる(今回はtodo)
todo in todosとすることでtodoにjsファイルで定義したtodosの一つ一つの値のデータが入る
dataプロパティの値を配列リテラルの形式で渡すことで、配列一つ一つを回せる

app.js
importVuefrom'vue';newVue({el:'#app4',data:{todos:[{text:'v-forで'},{text:'htmlを'},{text:'ループ生成'}]}})
index.html
<divid="app4"><ol><liv-for="todo in todos">
      {{ todo.text }}
    </li></ol></div><!-- 出力結果 --><ol><li>v-forで</li><li>htmlを</li><li>ループ生成</li></ol>

v-onを使ったイベント発火

v-on:のあとにイベント名を指定し、イベント後の発火したいメソッドを指定
v-on:は省略可能で、@のみで書くことができる

  • vueではmethodsプロパティを定義でき、viewの中で使いたい関数を定義する
    • methodsは関数の置き場所として用いられる
    • methodsは関数なので、呼べばそのまま実行される
    • methodsで算出された値はキャッシュされない
  • changeMessageという関数名は任意
  • methodsプロパティ内でthisを使うとdataプロパティにアクセスできる

this.messagemessageにアクセスできる

app.js
importVuefrom'vue';newVue({el:'#app5',data:{message:'Hello Vue.js'},methods:{changeMessage:function(){this.message=this.message+'変更しました'}}})
index.html
<divid="app5"><p>{{ message }}</p><buttonv-on:click="changeMessage">メッセージを変える</button></div><!-- 出力結果 -->メッセージを変える
  <!-- クリック -->
  Hello Vue.js変更しました

v-onでtoggle

v-onでは、必ずしもmethodを使わなければいけないというわけではない
以下はtoggle処理の例である

<divid="app5"><buttonv-on:click="show = !show">Toggle</button>
</div>

v-model 双方向データバインディング

  • 双方向のデータバインディング
  • dataの変更に応じて表示され、HTMLでフォームの入力を行った際にもdataの値の変更が可能
  • input要素やtextarea要素、select要素に双方向 (two-way) データバインディングを作成
  • v-modeldataのプロパティを指定すると、jsファイルのプロパティと描画が連携される
  • 双方向データバインディングでは入力フォームの値が変わると描画も変わるため、pタグの中身もすぐに反映される
  • 下の例ではinputタグの中にmessageの値がvalueの形で入る
  • ユーザーの入力データが自動で更新される
app.js
importVuefrom'vue';newVue({el:'#app6',data:{message:'双方向データバインディング'}})
index.html
<divid="app6"><p>{{ message }}</p><inputtype="text"v-model="message"></div>

computed 算出プロパティ

  • computedは関数の処理を書く算出のプロパティである
  • methodsと似ているが、computeddataプロパティの変更に依存して描画に反映される
  • dataやcomputedの値が変化することで自動的に実行
  • computedはjsの方で算出された値が常に結果がキャッシュされており再利用できる。dataの変更(thisの変更)をthisで監視しているため、dataプロパティに変更があった場合のみ描画に反映される
    • thisを持たないcomputeddataの変更を参照できず、ずっと初回のキャッシュを表示し続ける
  • methodsは再描画されるたびに処理が実行される
app.js
importVuefrom'vue';newVue({el:'#app7',data:{isShow:true}computed:{showString:function(){return(this.isShow)?Date.now():'isShowはfalse'},showString2(){returnDate.now()}},methods:{showStringMethods(){return(this.isShow)?Date.now():'isShowはfalse'},showStringMethods2(){returnDate.now()}}})

computedの場合は()は不要

index.html
<divid="app7"><inputtype="checkbox"v-model='isShow'><p>isShow: {{ isShow }}</p><p>showString: {{ showString }}</p><p>showString2: {{ showString2 }}</p><p>showStringMethods: {{ showStringMethods() }}</p><p>showStringMethods2: {{ showStringMethods2() }}</p></div><!-- 出力結果 -->
isShow: true
showString: 123456789
showString2: 123456789
showStringMethods: 123456789
showStringMethods2: 123456789
  <!-- checkbox click -->
  isShow: true
  <!-- 関数内でthisをを持つため、dataの変更を監視して反映 -->
  showString: isShowはfalse 
  <!-- dataが変更されてもthisがないので反映されず、初回のキャッシュ内容保持 -->
  showString12: 123456789
  <!-- methodsはdataに依存せず毎回再描画がされるため更新される -->
  showStringMethods: isShowはfalse 
  showStringMethods2: 234567890

v-htmlでサニタイズを無効化

vue.jsでは自動でサニタイズされ、タグは文字列として読み込まれる
タグとして読み込ませたい場合はサニタイズを無効化するv-htmlを使う

app.js
importVuefrom'vue';newVue({el:'#app10',data:{script:'<p style="color:red">タグとして表示</p>'}})
index.html
<divid="app10"><p>{{ script }}</p><pv-html="script"></p></div><!-- 出力結果 --><pstyle="color:red">タグとして表示</p>タグとして表示  (color:red; 適用)

トランジションとアニメーション

アニメーションにはEnterアニメーションとLeaveアニメーションがある

  • Enter: 非表示から表示に変わるときのアニメーション
    • 変化前の状態のclassはv-enter, 変化後のclassはv-enter-to
    • 変化過程にアニメーションを設定したいときのclassはv-enter-active
  • Leave: 表示から非表示に変わるときのアニメーション
    • 変化前の状態のclassはv-leave, 変化後のclassはv-leave-to
    • 変化過程にアニメーションを設定したいときのclassはv-leave-active

transitionタグでname属性を付けた場合はv-の箇所をその名前に変更できる

app.js
importVuefrom'vue';newVue({el:'#app11',data:{show:true}})
index.html
<style>.fade-enter-active,.fade-leave-active{transition:opacity.5s;}.fade-enter,.fade-leave-to{/* .fade-leave-active below version 2.1.8 */opacity:0;}</style><divid="app11"><buttonv-on:click="show = !show">
    Toggle
  </button><transitionname="fade"><pv-if="show">hello</p></transition></div>

コンポーネントの使い方

コンポーネントとは名前付きの再利用可能なVueインスタンスである(部品のようなもの)

  • Vue.componentでコンポーネントの登録

    • 第一引数にコンポーネント名を指定する、第二引数にコンポーネントに定義したい値(data, templateなど)を設定する
    • コンポーネントでdataを定義するときは関数で定義する ※ 関数ではなくオブジェクトの形にすると複数のコンポーネントで値を共有する形になる。関数にすることで、個々のコンポーネントに値をもたせることができる
  • コンポーネント登録後にnew Vueでインスタンス化する

app.js
// 登録するVue.component('sample-component'{template:'<div>this is sample</div>'})// インスタンス生成newVue({el:'#app'})

コンポーネントを挿入したいところに呼び出すコンポーネントのタグを記述し、app.jsを読み込む

sample.html
<divid="app"><sample-component></sample-component></div><script src="app.js"></script>

HTMLが置換され、次のようになる

<divid="app"><div>this is sample</div></div>

templateについて

temaplateはコンポーネントのHTMLを渡す
htmlファイルでtempalteのタグが挿入される

app.js
Vue.component('button-counter',{data:function(){return{count:0}},template:'<button v-on:click="count++">clicked {{ count }} times</button>'})newVue({el:'#app12'})

コンポーネント名button-counterにコンポーネントが割り当てられ、templateのHTMLが挿入される

index.html
<divid="app12"><button-counter></button-counter><button-counter></button-counter><button-counter></button-counter></div>

コンポーネントの登録を省略

slotを使用していなければ下記のように省略できる

// 省略なし<template><divid="app"><app-header></app-header>
</div>
</template>
// 省略あり<temaplte><divid="app"><app-header/></div>
</template>

単一ファイルコンポーネントを使うとき

app.js
// 登録するVue.component('sample-component',require('./components/SampleComponent.vue').default);// インスタンス生成newVue({el:'#app'})
./components/SampleComponent.vue
// template作成<template>//</template>
// このtemplateを使ったときの共通の処理を追記する<script>exportdefault{data:{//},mounted(){//}}</script>

propsで親コンポーネントから受け継ぐ

  • propsを使うことでコンポーネントの親から子へ値を受け渡せる
  • propsは配列の形式で属性を定義し、親コンポーネントからその属性値を受け継いでdataのプロパティのように振る舞う
app.js
Vue.component('blog-post',{props:['title'],template:'<h3>{{ title }}</h3>'})newVue({el:'#app13'})
index.html
<divid="app13"><!-- 親コンポーネント(コンポーネントの受け渡し先となる生成元のタグのこと) --><!-- このタグを親コンポーネントといい、作成したコンポーネントを子コンポーネントという --><blog-posttitle="title属性をpropsで渡せる"></blog-post><blog-posttitle="title属性をpropsで渡せる"></blog-post><blog-posttitle="title属性をpropsで渡せる"></blog-post></div>

オブジェクトでない配列を指定する場合

  • 子が親からデータを受け取るとき、配列で指定するか、オブジェクトの配列として指定するかの2通りある
  • 簡潔に列挙できるが、データの情報が記述できず、itemもvalueも同様に扱われる
parent.vue
<child:param0="item",:param1="value">
child.vue
props:['item','value']

オブジェクトの配列として受け取る場合

  • 詳細に記述できるため、違いを明記できる
child.vue
props:{item:{type:Object},value:{type:Number,default:0}}

emitで子から親へデータを伝達

  • 子から親へのデータの伝搬では$emitと$onを一対として使用するカスタムイベントを活用する
  • 親コンポーネントからこのイベントを監視する場合はv-on:, @でイベント名を紐付けて使用する

子コンポーネント

child.vue
<template><divclass="item"><span>{{value}}</span>
<button@click="updateEvt">追加</button>
</div>
</template>
<script>exportdefault{data(){return{value:0}},methods:{plus0ne(){this.value+=1// $emitの第2, 第3...引数で変数を指定するとその変数を親が受け取ることができるthis.$emit('update',this.value)}}}</script>

親コンポーネント

parent.vue
<template><counter@updated="updateEvt"/></template>
<script>importChildfrom'./Child.vue'exportdefault{components:{Child},methods:{// 子から変数を受けとることができるupdateEvt(value){console.log('The value updated'+value)}}}</script>

イベントとメッセージを親コンポーネントに渡す方法

  • v-on:click=$emit('カスタムイベント名')のように$emitで任意のカスタムイベント名を指定することで、そのイベントをイベント名として親子コンポーネントで通知することができる

    • この例ではv-on:カスタムイベント名=func()とするとclickイベントが通知される
  • templateはバッククォートで囲むことで階層構造で文字列を書くことができる(ES6より)

app.js
Vue.component('blog-post',{props:['post'],template:`
    <div class="blog-post">
      <h3>{{ post.title }}</h3>
      <button v-on:click="$emit('enlarge-text')">
        Enlarge text
      </button>
      <div v-thml="post.content"></div>
    </div>
  `})newVue({el:'#app14',data:{posts:[{id:1,title:'sample post1',content:'<p>サンプル投稿のコンテント</p>'},{id:2,title:'sample post2',content:'<p>サンプル投稿のコンテント</p>'},{id:3,title:'sample post3',content:'<p>サンプル投稿のコンテント</p>'},]}})
index.html
<divid="app14"><divid="blog-posts-events-demo"><div:style="{ fontSize: postFontSize + 'em' }"><blog-postv-for="post in posts"v-on:enlarge-text="fontSizeScale()"v-bind:key="post.id"v-bind:post="post"></blog-post></div></div></div>

SwiftPMで�Quickを入れたら"No such module 'Quick'" というエラーが出た話

$
0
0

iOSテスト全書を読んでいると、第5章に「BDDによるアプリ開発」というQuick/Nimbleを利用したチュートリアルがあったので、早速やろうとしたらライブラリ導入の時点でつまづきました。

初歩的すぎて呆れる方もいるかもしれませんが、初心者の自分はこれで3時間以上溶かしてしまったので、同じ様な初心者の方にお役に立てれば幸いです。Qiita初投稿のため、内容に誤り等あればコメントでご指摘いただけると助かります。

ちなみに、簡単にSwiftPMの話もしています。

環境

MacOS Mojave 10.14.6
Xcode11.2.1
Swift5

まずライブラリを入れる

「iOSテスト全書」内ではCocoaPodsとCarthageでの導入手順が記載されていますが、私はSwiftPMで入れてみました。Xcode11からはGUIでパッケージ管理できるので便利ですね。
まずはXcodeのメニューから[File]→[Swift Packages]→[Add Package Dependency...]を選びます。
スクリーンショット 2020-02-08 17.22.00.png

すると、githubのリポジトリを検索するウインドウが出てくるので、お目当の「Quick」を検索します。ちなみに、github以外にあるものでもURLを指定すればパッケージを入れることができるそうです(私は未検証)。
スクリーンショット 2020-02-08 17.16.29.png

バージョンやブランチを聞かれます。今回は特にこだわらないのでそのままNextを押します。
スクリーンショット 2020-02-08 17.17.39.png

次は、ライブラリをどのターゲットに対して追加するかを聞かれます。デフォルトでは実際のソース(今回はqiitasample)が選ばれていますが、Quickはテストコードで使いたいライブラリなので、忘れずにテストコードの方(qiitasampleTests)を選びましょう。
スクリーンショット 2020-02-08 17.27.19.png

すると、Xcodeの左側に追加したパッケージと、その依存関係にあるパッケージが追加されます。Quickを入れただけでSwiftPMがNimbleも落としてきてくれたみたいですね。
スクリーンショット 2020-02-08 17.29.33.png

いきなりエラー

早速Quick/Nimbleを使ってテストコードを書いていきましょう!まずはQuickをimportして...
スクリーンショット 2020-02-08 17.36.45.png
それらしいものがサジェストされません。もう不穏ですね。
とりあえずQuickと手打ちしてビルド(Controll+B)してみると...
スクリーンショット 2020-02-08 17.36.59.png
No such module Quick
と言われてしまいました。いや、あるじゃん。
この後プロジェクトをクリーンしてみたり、エラー名でググってみたりしましたが、それらしい解決法に出会えずハマってしまいました...

解決法

どうにかできないかと思いXcodeのメニューを見ていると、[Product]の中に[Build for...]という項目を見つけました。よく見ると...
スクリーンショット 2020-02-08 17.41.38.png
Build For Testingがある!ここでようやく、Controll+Bではテストコードに対するビルドが行われていないことに気付きました。確かにXcode上部のバーにQuickがビルドされているような表示は出ていなかった気がする。
Build For Testingを実施すると、QuickやNimbleにもビルドがかかり、無事エラーも解消されました。

まとめ

  • テストコードに対してパッケージを追加した時は、Build For Testingを実行する。
  • ググってもわからないからといって諦めず、メニューをよく見てIDEの機能をよく確認する。

ディープラーニング備忘録

$
0
0

はじめに

目的

@daikikatsuragawaは機械学習に興味があり、学習しています。しかし、何故かディープラーニングを避けていました。この記事は、そのような著者に強制的にディープラーニングを学習させることを目的としています。

※断り

  • 本記事は筆者の学びに応じて更新されます📖
  • 本記事に誤りが存在した場合、積極的に編集リクエストをしてください🙇‍♂️

ディープラーニングとは

概要

人間の神経細胞(ニューロン)の構造を模倣するニューラルネットワークを何層も使い、機械がデータから自動的に学習する方法である。 深層学習、ディープニューラルネットワーク、DNNとも呼ばれる。学習の過程は、大きく入力層、隠れ層(中間層)、出力層の3つに分かれる。計算処理の主流は、並列処理に特化した「GPU」(Graphics Processing Unit)を使用することです。

3つの層

入力層(input layer)

データが入ってくる部分。

隠れ層(hidden layers)

この層が多いほど複雑で正確な判断が可能。

出力層(output layer)

判断した結果を出力する部分。

種類

1. 畳み込みネットワーク

画像認識に適した手法。

2. 再起型ニューラルネットワーク

時系列情報に適した手法。

3. オートエンコーダ

データを抽象化する手法(次元削減)。

4. 敵対的生成ネットワーク

画像分野で良い結果を持つ手法。以下、2つのネットワークで構成される。

  • ジェネレータ:入力値から画像データを出力。
  • ディスクリミネータ:ジェネレータから出力された画像データを受け取り、本物か偽物かを予測。

課題

ブラックボックス問題

ディープラーニングで出力された結果の経路および経緯など根拠を知り得ないという問題がある。

【入門】PowerAppsでSharePointリストのフォームをカスタマイズ (2)

$
0
0

はじめに

SharePointのリストをPowerAppsを使っていい感じにカスタマイズする為の道のりを記事にまとめます。

前回の記事はこちら
[入門]PowerAppsでSharePointリストのフォームをカスタマイズ(1)

やりたい事

今回やりたいことは以下の三つです

  • NewForm/EditForm/DispFormを作成する
  • 【保存】ボタンでデータを更新する
  • 【キャンセル】ボタンで画面をリセットする

各フォームについて

SharePoint 2016のモダンUIを触っている方向けに
それぞれのフォームの役割について、簡単にまとめました。

NewForm

新しいアイテムを追加する為のフォーム。
コマンドバーの 「+新規」ボタンをクリックすると表示される。

image.png

フォームには「保存」「キャンセル」のボタンが存在します。

image.png

「保存」ボタンを押すと、アイテムを追加します。

DispForm

閲覧用のフォーム。
アイテムのメニューから「開く」を選択、またはタイトルクリックで表示される。

image.png

フォームにはアイテムの編集ボタンが存在します。

image.png

EditForm

編集用のフォーム。
DispFormから編集ボタンを押す、またはメニューから編集を選択すると表示される。

image.png

「保存」ボタンを押すと、アイテムの更新がされる。
「キャンセル」ボタンを押すと、更新しないでフォームを閉じる。

作成方法

ではフォームを追加したいリストからPowerAppsを起動します。
操作方法が分からない方は、まず先に[入門]PowerAppsでSharePointリストのフォームをカスタマイズ(1)を確認してください。

[step1] 画面の複製

[手順]
1. FormScreen1のメニューから「画面の複製」を選択

image.png
  1. それぞれ名前を変更します
image.png

[step2] レイアウトを変更する

ちゃんと変更されていることがわかるよう、レイアウトを少し変えます。

レイアウトの変更については別途記事をまとめる予定なので
それぞれのフォームの見分けが付くぐらいでOKです。
画面レイアウト.png

今回は「新規作成」「表示」「編集」がタイトルheaderに表示されるようにしました。

[step3]表示するフォームを指定

各ボタンが押されたときに表示するフォームを指定します。

ボタンプロパティ
新規OnNew
編集OnEdit
表示OnView

設定"SharePointIntegration"のアクションから指定できます。

step3_プロパティ.png

既存の設定では、一つのフォームのモードを切り替えて表示しています。

モードの切り替えに関してはこちらに載っています。

今回のカスタマイズでは、各アクションに対し
 (1) フォームのモードを切り替える
 (2) 画面遷移する
の処理を追加していきます。

(1) フォームのモードを切り替える

各フォームのモードを設定します。

アクションモード処理
OnNew新規NewForm(NewForm)
OnViewビューViewForm(DispForm)
OnEdit編集EditForm(EditForm)

(2) 表示画面を指定する

画面を切り替える場合は「Navigate」関数を利用します。

Navigate関数の第2引数で画面の切り替え方法を指定することが出来ます。
詳しいパラメータはこちら

今回は特に指定しません。
一つのアクションに複数の処理を追加する場合は「;(セミコロン)」を追加します。

image.png

この状態で保存&発行をして動作を確認しましょう。
それぞれのフォームが表示されればOKです。

[Step4] 保存 /キャンセルの動作を指定する

次に、「保存」「キャンセル」ボタンが押されたときの動作を指定します。
こちらの設定も"SharePointIntegration"から指定できます。

ボタンプロパティ
保存OnSave
キャンセルOnCancel

やりたい事は
 (1) 状態を管理する変数を作る
 (2) 新規作成時、OnSaveで新しいアイテムを追加。編集時、OnSaveでアイテムの更新
 (3) OnCancelで入力していたデータをリセットする
の3点です。

アクションは同じでもユーザの開いているフォームによって、
ボタンの挙動が変わるところに注意が必要です。

(1) 状態を管理する変数を作る

新規作成の画面で、「保存」ボタンが押されたときの動作を制御します。

まずは、保存ボタンが押されたときに表示されていたフォームが
「NewScreen」なのか「EditScreen」を判別する為、状態を管理するための変数を用意します。

変数を管理する場合には「set関数」を利用します。
変数名は「mode」にしました。

image.png

※ 今回は、「New」か「Edit」が分かればよいので、OnViewはなくてもよいです。

(2) OnSaveが押された時の処理を追加

データを更新するには「submitForm関数」を利用します。

modeが"new"の時は"NewForm"をsubmitします。
それ以外の時は"EditForm"をsubmitします。

image.png

(3)OnCancelが押された時の処理を追加

フォームをリセットするには「ResetForm」を利用します。

数式自体はOnSaveとほぼ同じです。

image.png

[補足] ResetFormでリセットされないとき

ResetFormがうまく反映されない場合、
フォームのプロパティを設定を変更することで解決するケースがあります。

反映されないフォームのプロパティから「OnReset」を「ture」にして保存してください。
image.png

完成

以上で各フォームのベースが出来上がりました。

画面遷移さえ定義できてしまえば、
ラベルを追加したり、色を変えたりするだけで
とてもリッチなリストフォームを作ることが出来るようになるでしょう。

制約により出来ないこと

この記事をまとめるにあたり、分かったこと、
イケてないなーとか他にやりようありそうだなーってところをメモしました。

強制的にフォームが非表示

アイテムの編集の時、「キャンセル」が押されたら表示フォームに戻りたかったけど
以下の制約で、「キャンセル」を押したら強制的にフォームが閉じてしまう。

https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/sharepoint-form-integration

OnCancel - SharePointForm1 の変更をリセットします。 ユーザーが SharePoint で [キャンセル] をクリックまたはタップすると、SharePoint では常にフォームが非表示になります。

SubmitするとEditモードになる

各フォームのDefaultModeを設定すれば、OnNew/OnEditでわざわざモードをしなくていいんじゃないの?
って思ったんですが、submitするとNewモードはEditモードに切り替わるようです。
なので、フォームを起動するたびにモードを指定してあげないといけない。

https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/functions/function-for

送信が成功した場合、フォームの OnSuccess 動作が実行され、 Error プロパティと ErrorKind プロパティがクリアされます。 フォームが FormMode.New モードだった場合は FormMode.Edit モードに戻ります。m

Laravel ユーザー登録、ログイン・ログアウト機能(Seederでユーザー生成)

$
0
0

ユーザー登録、ログイン・ログアウト機能生成

ユーザー登録やログイン・ログアウト機能はコントローラーやビューを作る必要があるが、
Laravelではコマンド一つで作成可能

$ php artisan make:auth

すると下記ファイルが自動生成される

resources|-views|-home.blade.php|-layouts||-app.blade.php|-auth|-passwprds||-email.blade.php||-reset.blade.php|-login.blade.php|-register.blade.php|-verify.blade.phpapp|-Http|-Controllers||-HomeController.php|-Auth|-ForgotPasswordController.php|-LoginController.php|-RegisterController.php|-ResetPasswordController.php|-VerificationController.php

また、ルーティングroutes/web.phpに次のように追加される

Route::get('/',function(){returnview('welcome');});// 以下が追加される内容Auth::routes();Route::get('/home','HomeController@index')->name('home');
  • ルーティングではgetメソッドでサーバー側に要求が来た時の処理を定義する
  • 第一引数にuri(ドメイン以降のurl)を指定し、第二引数に処理を指定する
  • Auth::routes();では、vendor/laravel/framework/src/Illuminate/Routing/Router.phpで定義されたルーティングが読み込まれる

生成されたコントローラとビューとエンドポイントの関係

生成されたエンドポイントとそれぞれのコントローラーとビューの役割と関係は次の通り

URI(エンドポイント)HTTPメソッドコントローラー名@アクション名機能名
/homeGETHomeController@indexマイページ表示
/registerGETRegisterController@showRegistrationFormユーザー登録表示
/registerPOSTRegisterController@registerユーザー登録
/loginGETLoginController@showLoginFormログイン表示
/loginPOSTLoginController@loginログイン
/logoutPOSTLoginController@logoutログアウト
/password/resetGETForgotPasswordController@showLinkRequestFormパスワードリマインダー画面
/password/emailPOSTForgotPasswordController@sendResetLinkEmailパスワードリマインド
/password/reset/{token}GETForgotPasswordController@showResetFormパスワード再入力画面
/password/resetPOSTForgotPasswordController@resetパスワード更新
/email/verifyGETVerificationController@showEメール認証画面
/email/verify/{id}GETVerificationController@verifyEメール認証
/email/resendGETVerificationController@resendEメール認証メール再送信

※Eメール認証機能を使うには別途カラムが必要であったり、設定が必要となる

seederを使ってダミーデータを入れる

LaravelにはDBのテーブルにダミーデータを入れる機能がある

  • ログイン機能を作る際にユーザー登録機能が存在しない時にうまく動くかテストする際に使用したりする
# seederファイル作成$ php artisan make:seeder {適当な名前}# usersテーブルにダミーデータを追加したい場合の例$ php artisan make:seeder UsersTableSeeder

データを1つずつ入れる場合

/database/seeds配下にUsersTableSeeder.phpが作成される

作成されたファイルの関数は空なので自分で追加する

<?phpuseIlluminate\Database\Seeder;useIlluminate\Support\Facades\DB; // 関数でDBクラスを使えるようにuseCarbon\Carbon;// 関数でCarbonクラスを使えるようにclassUsersTableSeederextendsSeeder{/**
     * Run the database seeds.
     *
     * @return void
     */publicfunctionrun(){// ここが空なので以下を追加するDB::table('users')->insert([// ランダムもしくは特定の文字列を入れることも可能'name'=>str_rand(10),'email'=>str_rand(10).'@example.com',// bcryptでハッシュ化'password'=>bcrypt('password'),// Carbonクラスのnowで現在時刻になる'created_at'=>Carbon::now(),  'updated_at'=>Carbon::now(),]);}}

Seederクラスを書き上げたら、Composerのオートローダを再生成するために、dump-autoloadコマンドを実行する必要がある

$ composer dump-autoload

seederファイルを編集したら次のコマンドで実行する
実行するとseederで定義したダミーデータが作成される
実行するたびにダミーデータが一つずつ生成される

$ php artisan db:seed --class=UsersTableSeeder

ダミーデータを削除し、DB再生成は次のコマンド

$ php artisan migrate:refresh --seed

データをまとめていっぱい作りたい場合は下記参考

Laravel ダミーデータ登録(seeder, factory, faker)

Rails アプリを作成する際に出たエラー

$
0
0

目的

  • アプリ作成コマンド$ rails new アプリ名を実行した際に出力されたエラーを解決したときの話をまとめる

エラー

  • 下記にエラー内容を記載する。
[10:51:19]MacBook-miriwo~/workspace/study/rails$rails new tropical_fish_sns --database=mysql
      create  
      create  README.md
      create  Rakefile
      create  .ruby-version
      create  config.ru
      create  .gitignore
      create  Gemfile
         run  git init from "."
Initialized empty Git repository in /Users/admin/workspace/study/rails/tropical_fish_sns/.git/
      create  package.json
      create  app
      create  app/assets/config/manifest.js
      create  app/assets/stylesheets/application.css
      create  app/channels/application_cable/channel.rb
      create  app/channels/application_cable/connection.rb
      create  app/controllers/application_controller.rb
      create  app/helpers/application_helper.rb
      create  app/javascript/channels/consumer.js
      create  app/javascript/channels/index.js
      create  app/javascript/packs/application.js
      create  app/jobs/application_job.rb
      create  app/mailers/application_mailer.rb
      create  app/models/application_record.rb
      create  app/views/layouts/application.html.erb
      create  app/views/layouts/mailer.html.erb
      create  app/views/layouts/mailer.text.erb
      create  app/assets/images/.keep
      create  app/controllers/concerns/.keep
      create  app/models/concerns/.keep
      create  bin
      create  bin/rails
      create  bin/rake
      create  bin/setup
      create  bin/yarn
      create  config
      create  config/routes.rb
      create  config/application.rb
      create  config/environment.rb
      create  config/cable.yml
      create  config/puma.rb
      create  config/spring.rb
      create  config/storage.yml
      create  config/environments
      create  config/environments/development.rb
      create  config/environments/production.rb
Traceback (most recent call last):
        47: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/bin/rails:23:in `<main>'
        46: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/bin/rails:23:in `load'
        45: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/railties-6.0.2.1/exe/rails:10:in `<top (required)>'
        44: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
        43: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
        42: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/railties-6.0.2.1/lib/rails/cli.rb:18:in `<top (required)>'
        41: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/railties-6.0.2.1/lib/rails/command.rb:46:in `invoke'
        40: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/railties-6.0.2.1/lib/rails/command/base.rb:69:in `perform'
        39: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch'
        38: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
        37: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
        36: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/railties-6.0.2.1/lib/rails/commands/application/application_command.rb:26:in `perform'
        35: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/base.rb:485:in `start'
        34: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/group.rb:232:in `dispatch'
        33: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/invocation.rb:134:in `invoke_all'
        32: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/invocation.rb:134:in `map'
        31: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/invocation.rb:134:in `each'
        30: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/invocation.rb:134:in `block in invoke_all'
        29: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
        28: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
        27: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/railties-6.0.2.1/lib/rails/generators/rails/app/app_generator.rb:319:in `create_config_files'
        26: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/railties-6.0.2.1/lib/rails/generators/app_base.rb:156:in `build'
        25: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/railties-6.0.2.1/lib/rails/generators/rails/app/app_generator.rb:106:in `config'
        24: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/railties-6.0.2.1/lib/rails/generators/rails/app/app_generator.rb:19:in `inside'
        23: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions.rb:187:in `inside'
        22: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/2.5.0/fileutils.rb:122:in `cd'
        21: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/2.5.0/fileutils.rb:122:in `chdir'
        20: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions.rb:187:in `block in inside'
        19: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/railties-6.0.2.1/lib/rails/generators/rails/app/app_generator.rb:115:in `block in config'
        18: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/railties-6.0.2.1/lib/rails/generators/rails/app/app_generator.rb:19:in `directory'
        17: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions/directory.rb:52:in `directory'
        16: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions.rb:93:in `action'
        15: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions/directory.rb:66:in `invoke!'
        14: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions/directory.rb:80:in `execute!'
        13: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions/directory.rb:80:in `each'
        12: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions/directory.rb:92:in `block in execute!'
        11: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions/file_manipulation.rb:122:in `template'
        10: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions/create_file.rb:25:in `create_file'
         9: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions.rb:93:in `action'
         8: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions/create_file.rb:60:in `invoke!'
         7: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions/empty_directory.rb:117:in `invoke_with_conflict_check'
         6: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions/create_file.rb:63:in `block in invoke!'
         5: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions/create_file.rb:63:in `open'
         4: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions/create_file.rb:63:in `block (2 levels) in invoke!'
         3: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions/create_file.rb:53:in `render'
         2: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-1.0.1/lib/thor/actions/file_manipulation.rb:131:in `block in template'
         1: from /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/2.5.0/erb.rb:885:in `result'
/Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/2.5.0/erb.rb:885:in `eval': /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/railties-6.0.2.1/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt:10: syntax error, unexpected ')', expecting end-of-input (SyntaxError)
);if spring_install? 

原因

  • Railsのバージョンを指定せず現時点で最新のものを使用し作成したため発生したエラーである。

解決方法

  • $ rails new アプリ名の実行時にrailsのバージョンを指定することで解決した。
  • 下記に問題を解決したときのコマンドを記載する。
$rails _6.0.0_ new tropical_fish_sns --database=mysql

付録

  • 下記に正常に$ rails new アプリ名が実行できたときのターミナル出力を記載する。
[10:54:05]MacBook-miriwo~/workspace/study/rails$rails _6.0.0_ new tropical_fish_sns --database=mysql
      create  
      create  README.md
      create  Rakefile
      create  .ruby-version
      create  config.ru
      create  .gitignore
      create  Gemfile
         run  git init from "."
Initialized empty Git repository in /Users/admin/workspace/study/rails/tropical_fish_sns/.git/
      create  package.json
      create  app
      create  app/assets/config/manifest.js
      create  app/assets/stylesheets/application.css
      create  app/channels/application_cable/channel.rb
      create  app/channels/application_cable/connection.rb
      create  app/controllers/application_controller.rb
      create  app/helpers/application_helper.rb
      create  app/javascript/channels/consumer.js
      create  app/javascript/channels/index.js
      create  app/javascript/packs/application.js
      create  app/jobs/application_job.rb
      create  app/mailers/application_mailer.rb
      create  app/models/application_record.rb
      create  app/views/layouts/application.html.erb
      create  app/views/layouts/mailer.html.erb
      create  app/views/layouts/mailer.text.erb
      create  app/assets/images/.keep
      create  app/controllers/concerns/.keep
      create  app/models/concerns/.keep
      create  bin
      create  bin/rails
      create  bin/rake
      create  bin/setup
      create  bin/yarn
      create  config
      create  config/routes.rb
      create  config/application.rb
      create  config/environment.rb
      create  config/cable.yml
      create  config/puma.rb
      create  config/spring.rb
      create  config/storage.yml
      create  config/environments
      create  config/environments/development.rb
      create  config/environments/production.rb
      create  config/environments/test.rb
      create  config/initializers
      create  config/initializers/application_controller_renderer.rb
      create  config/initializers/assets.rb
      create  config/initializers/backtrace_silencers.rb
      create  config/initializers/content_security_policy.rb
      create  config/initializers/cookies_serializer.rb
      create  config/initializers/cors.rb
      create  config/initializers/filter_parameter_logging.rb
      create  config/initializers/inflections.rb
      create  config/initializers/mime_types.rb
      create  config/initializers/new_framework_defaults_6_0.rb
      create  config/initializers/wrap_parameters.rb
      create  config/locales
      create  config/locales/en.yml
      create  config/master.key
      append  .gitignore
      create  config/boot.rb
      create  config/database.yml
      create  db
      create  db/seeds.rb
      create  lib
      create  lib/tasks
      create  lib/tasks/.keep
      create  lib/assets
      create  lib/assets/.keep
      create  log
      create  log/.keep
      create  public
      create  public/404.html
      create  public/422.html
      create  public/500.html
      create  public/apple-touch-icon-precomposed.png
      create  public/apple-touch-icon.png
      create  public/favicon.ico
      create  public/robots.txt
      create  tmp
      create  tmp/.keep
      create  tmp/cache
      create  tmp/cache/assets
      create  vendor
      create  vendor/.keep
      create  test/fixtures
      create  test/fixtures/.keep
      create  test/fixtures/files
      create  test/fixtures/files/.keep
      create  test/controllers
      create  test/controllers/.keep
      create  test/mailers
      create  test/mailers/.keep
      create  test/models
      create  test/models/.keep
      create  test/helpers
      create  test/helpers/.keep
      create  test/integration
      create  test/integration/.keep
      create  test/channels/application_cable/connection_test.rb
      create  test/test_helper.rb
      create  test/system
      create  test/system/.keep
      create  test/application_system_test_case.rb
      create  storage
      create  storage/.keep
      create  tmp/storage
      create  tmp/storage/.keep
      remove  config/initializers/cors.rb
      remove  config/initializers/new_framework_defaults_6_0.rb
         run  bundle install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.Fetching gem metadata from https://rubygems.org/............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies......
Using rake 13.0.1
Using concurrent-ruby 1.1.5
Using i18n 1.8.2
Using minitest 5.14.0
Using thread_safe 0.3.6
Using tzinfo 1.2.6
Using zeitwerk 2.2.2
Using activesupport 6.0.2.1
Using builder 3.2.4
Using erubi 1.9.0
Using mini_portile2 2.4.0
Using nokogiri 1.10.7
Using rails-dom-testing 2.0.3
Using crass 1.0.6
Using loofah 2.4.0
Using rails-html-sanitizer 1.3.0
Using actionview 6.0.2.1
Using rack 2.1.2
Using rack-test 1.1.0
Using actionpack 6.0.2.1
Using nio4r 2.5.2
Using websocket-extensions 0.1.4
Using websocket-driver 0.7.1
Using actioncable 6.0.2.1
Using globalid 0.4.2
Using activejob 6.0.2.1
Using activemodel 6.0.2.1
Using activerecord 6.0.2.1
Using mimemagic 0.3.4
Using marcel 0.3.3
Using activestorage 6.0.2.1
Using mini_mime 1.0.2
Using mail 2.7.1
Using actionmailbox 6.0.2.1
Using actionmailer 6.0.2.1
Using actiontext 6.0.2.1
Using public_suffix 4.0.3
Using addressable 2.7.0
Using bindex 0.8.1
Using msgpack 1.3.3
Using bootsnap 1.4.5
Using bundler 2.0.2
Using byebug 11.1.1
Using regexp_parser 1.6.0
Using xpath 3.2.0
Using capybara 3.31.0
Using childprocess 3.0.0
Using ffi 1.12.2
Using jbuilder 2.9.1
Using rb-fsevent 0.10.3
Using rb-inotify 0.10.1
Using ruby_dep 1.5.0
Using listen 3.1.5
Using method_source 0.9.2
Using mysql2 0.5.3
Using puma 3.12.2
Using rack-proxy 0.6.5
Using thor 1.0.1
Using railties 6.0.2.1
Using sprockets 3.7.2
Using sprockets-rails 3.2.1
Using rails 6.0.2.1
Using rubyzip 2.2.0
Using sass-listen 4.0.0
Using sass 3.7.4
Using tilt 2.0.10
Using sass-rails 5.1.0
Using selenium-webdriver 3.142.7
Using spring 2.1.0
Using spring-watcher-listen 2.0.1
Using turbolinks-source 5.2.0
Using turbolinks 5.2.1
Using web-console 4.0.1
Using webdrivers 4.2.0
Using webpacker 4.2.2
Bundle complete! 17 Gemfile dependencies, 75 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
         run  bundle binstubs bundler
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.         run  bundle exec spring binstub --all
* bin/rake: Spring inserted
* bin/rails: Spring inserted
       rails  webpacker:install
      create  config/webpacker.yml
Copying webpack core config
      create  config/webpack
      create  config/webpack/development.js
      create  config/webpack/environment.js
      create  config/webpack/production.js
      create  config/webpack/test.js
Copying postcss.config.js to app root directory
      create  postcss.config.js
Copying babel.config.js to app root directory
      create  babel.config.js
Copying .browserslistrc to app root directory
      create  .browserslistrc
The JavaScript app source directory already exists
       apply  /Users/admin/.anyenv/envs/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/webpacker-4.2.2/lib/install/binstubs.rb
  Copying binstubs
       exist    bin
      create    bin/webpack
      create    bin/webpack-dev-server
      append  .gitignore
Installing all JavaScript dependencies [4.2.2]
         run  yarn add @rails/webpacker@4.2.2 from "."
yarn add v1.19.1
info No lockfile found.
[1/4] 🔍  Resolving packages...
[2/4] 🚚  Fetching packages...
[3/4] 🔗  Linking dependencies...
[4/4] 🔨  Building fresh packages...
success Saved lockfile.
warning Your current version of Yarn is out of date. The latest version is "1.22.0", while you're on "1.19.1".
info To upgrade, run the following command:
$brew upgrade yarn
success Saved 610 new dependencies.
info Direct dependencies
├─ @rails/actioncable@6.0.2
├─ @rails/activestorage@6.0.2
├─ @rails/ujs@6.0.2
├─ @rails/webpacker@4.2.2
└─ turbolinks@5.2.0
info All dependencies
├─ @babel/code-frame@7.8.3
├─ @babel/core@7.8.4
├─ @babel/helper-builder-binary-assignment-operator-visitor@7.8.3
├─ @babel/helper-call-delegate@7.8.3
├─ @babel/helper-compilation-targets@7.8.4
├─ @babel/helper-create-class-features-plugin@7.8.3
├─ @babel/helper-define-map@7.8.3
├─ @babel/helper-explode-assignable-expression@7.8.3
├─ @babel/helper-wrap-function@7.8.3
├─ @babel/helpers@7.8.4
├─ @babel/highlight@7.8.3
├─ @babel/plugin-proposal-async-generator-functions@7.8.3
├─ @babel/plugin-proposal-class-properties@7.8.3
├─ @babel/plugin-proposal-dynamic-import@7.8.3
├─ @babel/plugin-proposal-json-strings@7.8.3
├─ @babel/plugin-proposal-nullish-coalescing-operator@7.8.3
├─ @babel/plugin-proposal-object-rest-spread@7.8.3
├─ @babel/plugin-proposal-optional-catch-binding@7.8.3
├─ @babel/plugin-proposal-optional-chaining@7.8.3
├─ @babel/plugin-proposal-unicode-property-regex@7.8.3
├─ @babel/plugin-syntax-top-level-await@7.8.3
├─ @babel/plugin-transform-arrow-functions@7.8.3
├─ @babel/plugin-transform-async-to-generator@7.8.3
├─ @babel/plugin-transform-block-scoped-functions@7.8.3
├─ @babel/plugin-transform-block-scoping@7.8.3
├─ @babel/plugin-transform-classes@7.8.3
├─ @babel/plugin-transform-computed-properties@7.8.3
├─ @babel/plugin-transform-destructuring@7.8.3
├─ @babel/plugin-transform-dotall-regex@7.8.3
├─ @babel/plugin-transform-duplicate-keys@7.8.3
├─ @babel/plugin-transform-exponentiation-operator@7.8.3
├─ @babel/plugin-transform-for-of@7.8.4
├─ @babel/plugin-transform-function-name@7.8.3
├─ @babel/plugin-transform-literals@7.8.3
├─ @babel/plugin-transform-member-expression-literals@7.8.3
├─ @babel/plugin-transform-modules-amd@7.8.3
├─ @babel/plugin-transform-modules-commonjs@7.8.3
├─ @babel/plugin-transform-modules-systemjs@7.8.3
├─ @babel/plugin-transform-modules-umd@7.8.3
├─ @babel/plugin-transform-named-capturing-groups-regex@7.8.3
├─ @babel/plugin-transform-new-target@7.8.3
├─ @babel/plugin-transform-object-super@7.8.3
├─ @babel/plugin-transform-parameters@7.8.4
├─ @babel/plugin-transform-property-literals@7.8.3
├─ @babel/plugin-transform-regenerator@7.8.3
├─ @babel/plugin-transform-reserved-words@7.8.3
├─ @babel/plugin-transform-runtime@7.8.3
├─ @babel/plugin-transform-shorthand-properties@7.8.3
├─ @babel/plugin-transform-spread@7.8.3
├─ @babel/plugin-transform-sticky-regex@7.8.3
├─ @babel/plugin-transform-template-literals@7.8.3
├─ @babel/plugin-transform-typeof-symbol@7.8.4
├─ @babel/plugin-transform-unicode-regex@7.8.3
├─ @babel/preset-env@7.8.4
├─ @babel/runtime@7.8.4
├─ @rails/actioncable@6.0.2
├─ @rails/activestorage@6.0.2
├─ @rails/ujs@6.0.2
├─ @rails/webpacker@4.2.2
├─ @types/parse-json@4.0.0
├─ @types/q@1.5.2
├─ @webassemblyjs/floating-point-hex-parser@1.8.5
├─ @webassemblyjs/helper-code-frame@1.8.5
├─ @webassemblyjs/helper-fsm@1.8.5
├─ @webassemblyjs/helper-wasm-section@1.8.5
├─ @webassemblyjs/wasm-edit@1.8.5
├─ @webassemblyjs/wasm-opt@1.8.5
├─ @xtuc/ieee754@1.2.0
├─ abbrev@1.1.1
├─ acorn@6.4.0
├─ aggregate-error@3.0.1
├─ ajv-errors@1.0.1
├─ ajv-keywords@3.4.1
├─ ajv@6.11.0
├─ amdefine@1.0.1
├─ ansi-styles@3.2.1
├─ anymatch@2.0.0
├─ are-we-there-yet@1.1.5
├─ argparse@1.0.10
├─ arr-flatten@1.1.0
├─ array-find-index@1.0.2
├─ asn1.js@4.10.1
├─ asn1@0.2.4
├─ assert@1.5.0
├─ assign-symbols@1.0.0
├─ async-each@1.0.3
├─ async-foreach@0.1.3
├─ asynckit@0.4.0
├─ atob@2.1.2
├─ autoprefixer@9.7.4
├─ aws-sign2@0.7.0
├─ aws4@1.9.1
├─ babel-loader@8.0.6
├─ babel-plugin-macros@2.8.0
├─ base@0.11.2
├─ base64-js@1.3.1
├─ bcrypt-pbkdf@1.0.2
├─ big.js@5.2.2
├─ binary-extensions@1.13.1
├─ bindings@1.5.0
├─ block-stream@0.0.9
├─ bluebird@3.7.2
├─ boolbase@1.0.0
├─ brace-expansion@1.1.11
├─ braces@2.3.2
├─ browserify-aes@1.2.0
├─ browserify-cipher@1.0.1
├─ browserify-des@1.0.2
├─ browserify-sign@4.0.4
├─ browserify-zlib@0.2.0
├─ buffer-xor@1.0.3
├─ buffer@4.9.2
├─ builtin-status-codes@3.0.0
├─ cache-base@1.0.1
├─ caller-callsite@2.0.0
├─ caller-path@2.0.0
├─ callsites@2.0.0
├─ camelcase-keys@2.1.0
├─ caniuse-lite@1.0.30001025
├─ case-sensitive-paths-webpack-plugin@2.3.0
├─ caseless@0.12.0
├─ chokidar@2.1.8
├─ chownr@1.1.3
├─ chrome-trace-event@1.0.2
├─ class-utils@0.3.6
├─ clean-stack@2.2.0
├─ cliui@5.0.0
├─ clone-deep@4.0.1
├─ coa@2.0.2
├─ code-point-at@1.1.0
├─ collection-visit@1.0.0
├─ color-convert@1.9.3
├─ color-name@1.1.3
├─ color-string@1.5.3
├─ color@3.1.2
├─ combined-stream@1.0.8
├─ commander@2.20.3
├─ compression-webpack-plugin@3.1.0
├─ concat-map@0.0.1
├─ concat-stream@1.6.2
├─ console-browserify@1.2.0
├─ console-control-strings@1.1.0
├─ constants-browserify@1.0.0
├─ convert-source-map@1.7.0
├─ copy-concurrently@1.0.5
├─ copy-descriptor@0.1.1
├─ core-js-compat@3.6.4
├─ core-js@3.6.4
├─ core-util-is@1.0.2
├─ create-ecdh@4.0.3
├─ create-hmac@1.1.7
├─ cross-spawn@6.0.5
├─ crypto-browserify@3.12.0
├─ css-blank-pseudo@0.1.4
├─ css-color-names@0.0.4
├─ css-declaration-sorter@4.0.1
├─ css-has-pseudo@0.10.0
├─ css-loader@3.4.2
├─ css-prefers-color-scheme@3.1.1
├─ css-select-base-adapter@0.1.1
├─ css-select@2.1.0
├─ css-unit-converter@1.1.1
├─ css-what@3.2.1
├─ cssdb@4.4.0
├─ cssnano-preset-default@4.0.7
├─ cssnano-util-raw-cache@4.0.1
├─ cssnano-util-same-parent@4.0.1
├─ cssnano@4.1.10
├─ csso@4.0.2
├─ currently-unhandled@0.4.1
├─ cyclist@1.0.1
├─ dashdash@1.14.1
├─ debug@2.6.9
├─ decamelize@1.2.0
├─ decode-uri-component@0.2.0
├─ deep-extend@0.6.0
├─ delayed-stream@1.0.0
├─ delegates@1.0.0
├─ des.js@1.0.1
├─ detect-file@1.0.0
├─ detect-libc@1.0.3
├─ diffie-hellman@5.0.3
├─ dom-serializer@0.2.2
├─ domain-browser@1.2.0
├─ domelementtype@1.3.1
├─ domutils@1.7.0
├─ dot-prop@4.2.0
├─ duplexify@3.7.1
├─ ecc-jsbn@0.1.2
├─ electron-to-chromium@1.3.345
├─ emoji-regex@7.0.3
├─ emojis-list@2.1.0
├─ enhanced-resolve@4.1.0
├─ entities@2.0.0
├─ errno@0.1.7
├─ error-ex@1.3.2
├─ es-to-primitive@1.2.1
├─ escape-string-regexp@1.0.5
├─ eslint-scope@4.0.3
├─ esprima@4.0.1
├─ esrecurse@4.2.1
├─ estraverse@4.3.0
├─ events@3.1.0
├─ execa@1.0.0
├─ expand-brackets@2.1.4
├─ expand-tilde@2.0.2
├─ extend@3.0.2
├─ extglob@2.0.4
├─ extsprintf@1.3.0
├─ fast-deep-equal@3.1.1
├─ fast-json-stable-stringify@2.1.0
├─ file-loader@4.3.0
├─ file-uri-to-path@1.0.0
├─ fill-range@4.0.0
├─ find-cache-dir@2.1.0
├─ findup-sync@3.0.0
├─ flatted@2.0.1
├─ flatten@1.0.3
├─ flush-write-stream@1.1.1
├─ for-in@1.0.2
├─ forever-agent@0.6.1
├─ form-data@2.3.3
├─ from2@2.3.0
├─ fs-minipass@2.1.0
├─ fs.realpath@1.0.0
├─ fsevents@1.2.11
├─ fstream@1.0.12
├─ gauge@2.7.4
├─ gaze@1.1.3
├─ gensync@1.0.0-beta.1
├─ get-caller-file@2.0.5
├─ get-stream@4.1.0
├─ getpass@0.1.7
├─ glob-parent@3.1.0
├─ glob@7.1.6
├─ global-modules@2.0.0
├─ global-prefix@3.0.0
├─ globule@1.3.0
├─ har-schema@2.0.0
├─ har-validator@5.1.3
├─ has-ansi@2.0.0
├─ has-unicode@2.0.1
├─ has-value@1.0.0
├─ hash.js@1.1.7
├─ hex-color-regex@1.1.0
├─ hmac-drbg@1.0.1
├─ hosted-git-info@2.8.5
├─ hsl-regex@1.0.0
├─ hsla-regex@1.0.0
├─ html-comment-regex@1.1.2
├─ http-signature@1.2.0
├─ https-browserify@1.0.0
├─ iconv-lite@0.4.24
├─ icss-utils@4.1.1
├─ ieee754@1.1.13
├─ ignore-walk@3.0.3
├─ import-cwd@2.1.0
├─ import-fresh@2.0.0
├─ import-from@2.1.0
├─ import-local@2.0.0
├─ in-publish@2.0.0
├─ indent-string@4.0.0
├─ infer-owner@1.0.4
├─ inflight@1.0.6
├─ ini@1.3.5
├─ interpret@1.2.0
├─ invert-kv@2.0.0
├─ is-absolute-url@2.1.0
├─ is-accessor-descriptor@1.0.0
├─ is-arrayish@0.2.1
├─ is-binary-path@1.0.1
├─ is-callable@1.1.5
├─ is-color-stop@1.1.0
├─ is-data-descriptor@1.0.0
├─ is-date-object@1.0.2
├─ is-descriptor@1.0.2
├─ is-directory@0.3.1
├─ is-extglob@2.1.1
├─ is-finite@1.0.2
├─ is-obj@1.0.1
├─ is-plain-obj@1.1.0
├─ is-plain-object@2.0.4
├─ is-regex@1.0.5
├─ is-resolvable@1.1.0
├─ is-stream@1.1.0
├─ is-svg@3.0.0
├─ is-symbol@1.0.3
├─ is-typedarray@1.0.0
├─ is-utf8@0.2.1
├─ is-windows@1.0.2
├─ is-wsl@1.1.0
├─ isarray@1.0.0
├─ isexe@2.0.0
├─ isstream@0.1.2
├─ jest-worker@25.1.0
├─ js-base64@2.5.1
├─ js-tokens@4.0.0
├─ jsesc@2.5.2
├─ json-schema-traverse@0.4.1
├─ json-schema@0.2.3
├─ json-stringify-safe@5.0.1
├─ json5@2.1.1
├─ jsprim@1.4.1
├─ last-call-webpack-plugin@3.0.0
├─ lcid@2.0.0
├─ leven@3.1.0
├─ lines-and-columns@1.1.6
├─ load-json-file@1.1.0
├─ loader-runner@2.4.0
├─ locate-path@3.0.0
├─ lodash.get@4.4.2
├─ lodash.has@4.5.2
├─ lodash.memoize@4.1.2
├─ lodash.template@4.5.0
├─ lodash.templatesettings@4.2.0
├─ lodash.uniq@4.5.0
├─ lodash@4.17.15
├─ loose-envify@1.4.0
├─ loud-rejection@1.6.0
├─ make-dir@2.1.0
├─ mamacro@0.0.3
├─ map-age-cleaner@0.1.3
├─ map-obj@1.0.1
├─ map-visit@1.0.0
├─ mdn-data@2.0.4
├─ mem@4.3.0
├─ memory-fs@0.4.1
├─ meow@3.7.0
├─ merge-stream@2.0.0
├─ miller-rabin@4.0.1
├─ mime-db@1.43.0
├─ mime-types@2.1.26
├─ mimic-fn@2.1.0
├─ mini-css-extract-plugin@0.8.2
├─ minimalistic-assert@1.0.1
├─ minimalistic-crypto-utils@1.0.1
├─ minimatch@3.0.4
├─ minimist@1.2.0
├─ minipass-collect@1.0.2
├─ minipass-flush@1.0.5
├─ minipass-pipeline@1.2.2
├─ minipass@3.1.1
├─ minizlib@1.3.3
├─ mississippi@3.0.0
├─ mixin-deep@1.3.2
├─ mkdirp@0.5.1
├─ ms@2.1.2
├─ nan@2.14.0
├─ nanomatch@1.2.13
├─ needle@2.3.2
├─ nice-try@1.0.5
├─ node-gyp@3.8.0
├─ node-libs-browser@2.2.1
├─ node-pre-gyp@0.14.0
├─ node-releases@1.1.47
├─ node-sass@4.13.1
├─ nopt@3.0.6
├─ normalize-package-data@2.5.0
├─ normalize-range@0.1.2
├─ normalize-url@1.9.1
├─ npm-bundled@1.1.1
├─ npm-packlist@1.4.8
├─ npm-run-path@2.0.2
├─ npmlog@4.1.2
├─ nth-check@1.0.2
├─ num2fraction@1.2.2
├─ oauth-sign@0.9.0
├─ object-assign@4.1.1
├─ object-copy@0.1.0
├─ object-inspect@1.7.0
├─ object-keys@1.1.1
├─ object.getownpropertydescriptors@2.1.0
├─ object.values@1.1.1
├─ optimize-css-assets-webpack-plugin@5.0.3
├─ os-browserify@0.3.0
├─ os-homedir@1.0.2
├─ os-locale@3.1.0
├─ os-tmpdir@1.0.2
├─ osenv@0.1.5
├─ p-defer@1.0.0
├─ p-finally@1.0.0
├─ p-is-promise@2.1.0
├─ p-limit@2.2.2
├─ p-locate@3.0.0
├─ p-map@3.0.0
├─ p-try@2.2.0
├─ pako@1.0.11
├─ parallel-transform@1.2.0
├─ parent-module@1.0.1
├─ parse-json@4.0.0
├─ parse-passwd@1.0.0
├─ pascalcase@0.1.1
├─ path-browserify@0.0.1
├─ path-complete-extname@1.0.0
├─ path-dirname@1.0.2
├─ path-exists@3.0.0
├─ path-key@2.0.1
├─ path-parse@1.0.6
├─ path-type@4.0.0
├─ performance-now@2.1.0
├─ pinkie@2.0.4
├─ pnp-webpack-plugin@1.6.0
├─ posix-character-classes@0.1.1
├─ postcss-attribute-case-insensitive@4.0.2
├─ postcss-calc@7.0.1
├─ postcss-color-functional-notation@2.0.1
├─ postcss-color-gray@5.0.0
├─ postcss-color-hex-alpha@5.0.3
├─ postcss-color-mod-function@3.0.3
├─ postcss-color-rebeccapurple@4.0.1
├─ postcss-colormin@4.0.3
├─ postcss-convert-values@4.0.1
├─ postcss-custom-media@7.0.8
├─ postcss-custom-properties@8.0.11
├─ postcss-custom-selectors@5.1.2
├─ postcss-dir-pseudo-class@5.0.0
├─ postcss-discard-comments@4.0.2
├─ postcss-discard-duplicates@4.0.2
├─ postcss-discard-empty@4.0.1
├─ postcss-discard-overridden@4.0.1
├─ postcss-double-position-gradients@1.0.0
├─ postcss-env-function@2.0.2
├─ postcss-flexbugs-fixes@4.2.0
├─ postcss-focus-visible@4.0.0
├─ postcss-focus-within@3.0.0
├─ postcss-font-variant@4.0.0
├─ postcss-gap-properties@2.0.0
├─ postcss-image-set-function@3.0.1
├─ postcss-import@12.0.1
├─ postcss-initial@3.0.2
├─ postcss-lab-function@2.0.1
├─ postcss-load-config@2.1.0
├─ postcss-loader@3.0.0
├─ postcss-logical@3.0.0
├─ postcss-media-minmax@4.0.0
├─ postcss-merge-longhand@4.0.11
├─ postcss-merge-rules@4.0.3
├─ postcss-minify-font-values@4.0.2
├─ postcss-minify-gradients@4.0.2
├─ postcss-minify-params@4.0.2
├─ postcss-minify-selectors@4.0.2
├─ postcss-modules-extract-imports@2.0.0
├─ postcss-modules-local-by-default@3.0.2
├─ postcss-modules-scope@2.1.1
├─ postcss-modules-values@3.0.0
├─ postcss-nesting@7.0.1
├─ postcss-normalize-charset@4.0.1
├─ postcss-normalize-display-values@4.0.2
├─ postcss-normalize-positions@4.0.2
├─ postcss-normalize-repeat-style@4.0.2
├─ postcss-normalize-string@4.0.2
├─ postcss-normalize-timing-functions@4.0.2
├─ postcss-normalize-unicode@4.0.1
├─ postcss-normalize-url@4.0.1
├─ postcss-normalize-whitespace@4.0.2
├─ postcss-ordered-values@4.1.2
├─ postcss-overflow-shorthand@2.0.0
├─ postcss-page-break@2.0.0
├─ postcss-place@4.0.1
├─ postcss-preset-env@6.7.0
├─ postcss-pseudo-class-any-link@6.0.0
├─ postcss-reduce-initial@4.0.3
├─ postcss-reduce-transforms@4.0.2
├─ postcss-replace-overflow-wrap@3.0.0
├─ postcss-safe-parser@4.0.1
├─ postcss-selector-matches@4.0.0
├─ postcss-selector-not@4.0.0
├─ postcss-svgo@4.0.2
├─ postcss-unique-selectors@4.0.1
├─ prepend-http@1.0.4
├─ private@0.1.8
├─ process-nextick-args@2.0.1
├─ process@0.11.10
├─ prr@1.0.1
├─ pseudomap@1.0.2
├─ psl@1.7.0
├─ public-encrypt@4.0.3
├─ pumpify@1.5.1
├─ punycode@1.4.1
├─ q@1.5.1
├─ qs@6.5.2
├─ query-string@4.3.4
├─ querystring-es3@0.2.1
├─ querystring@0.2.0
├─ randomfill@1.0.4
├─ rc@1.2.8
├─ read-cache@1.0.0
├─ read-pkg@1.1.0
├─ readdirp@2.2.1
├─ redent@1.0.0
├─ regenerate-unicode-properties@8.1.0
├─ regenerator-runtime@0.13.3
├─ regenerator-transform@0.14.1
├─ regexpu-core@4.6.0
├─ regjsgen@0.5.1
├─ regjsparser@0.6.2
├─ remove-trailing-separator@1.1.0
├─ repeat-element@1.1.3
├─ repeating@2.0.1
├─ request@2.88.0
├─ require-main-filename@2.0.0
├─ resolve-cwd@2.0.0
├─ resolve-dir@1.0.1
├─ resolve-url@0.2.1
├─ resolve@1.15.1
├─ ret@0.1.15
├─ rgb-regex@1.0.1
├─ rgba-regex@1.0.0
├─ rimraf@2.7.1
├─ run-queue@1.0.3
├─ safer-buffer@2.1.2
├─ sass-graph@2.2.4
├─ sass-loader@7.3.1
├─ sax@1.2.4
├─ scss-tokenizer@0.2.3
├─ semver@5.7.1
├─ set-value@2.0.1
├─ setimmediate@1.0.5
├─ shallow-clone@3.0.1
├─ shebang-command@1.2.0
├─ shebang-regex@1.0.0
├─ simple-swizzle@0.2.2
├─ snapdragon-node@2.1.1
├─ snapdragon-util@3.0.1
├─ sort-keys@1.1.2
├─ source-list-map@2.0.1
├─ source-map-resolve@0.5.3
├─ source-map-support@0.5.16
├─ source-map-url@0.4.0
├─ spark-md5@3.0.0
├─ spdx-correct@3.1.0
├─ spdx-exceptions@2.2.0
├─ split-string@3.1.0
├─ sprintf-js@1.0.3
├─ sshpk@1.16.1
├─ ssri@7.1.0
├─ stable@0.1.8
├─ static-extend@0.1.2
├─ stdout-stream@1.4.1
├─ stream-browserify@2.0.2
├─ stream-each@1.2.3
├─ stream-http@2.8.3
├─ strict-uri-encode@1.1.0
├─ string_decoder@1.1.1
├─ string.prototype.trimleft@2.1.1
├─ string.prototype.trimright@2.1.1
├─ strip-bom@2.0.0
├─ strip-eof@1.0.0
├─ strip-indent@1.0.1
├─ strip-json-comments@2.0.1
├─ style-loader@1.1.3
├─ stylehacks@4.0.3
├─ supports-color@6.1.0
├─ svgo@1.3.2
├─ tar@2.2.2
├─ terser-webpack-plugin@2.3.4
├─ terser@4.6.3
├─ through2@2.0.5
├─ timers-browserify@2.0.11
├─ timsort@0.3.0
├─ to-arraybuffer@1.0.1
├─ to-fast-properties@2.0.0
├─ to-object-path@0.3.0
├─ to-regex-range@2.1.1
├─ tough-cookie@2.4.3
├─ trim-newlines@1.0.0
├─ true-case-path@1.0.3
├─ ts-pnp@1.1.5
├─ tslib@1.10.0
├─ tty-browserify@0.0.0
├─ tunnel-agent@0.6.0
├─ turbolinks@5.2.0
├─ tweetnacl@0.14.5
├─ typedarray@0.0.6
├─ unicode-canonical-property-names-ecmascript@1.0.4
├─ unicode-match-property-ecmascript@1.0.4
├─ unicode-match-property-value-ecmascript@1.1.0
├─ unicode-property-aliases-ecmascript@1.0.5
├─ union-value@1.0.1
├─ unique-slug@2.0.2
├─ unquote@1.1.1
├─ unset-value@1.0.0
├─ upath@1.2.0
├─ uri-js@4.2.2
├─ urix@0.1.0
├─ url@0.11.0
├─ use@3.1.1
├─ util-deprecate@1.0.2
├─ util.promisify@1.0.1
├─ util@0.11.1
├─ uuid@3.4.0
├─ v8-compile-cache@2.0.3
├─ validate-npm-package-license@3.0.4
├─ vendors@1.0.4
├─ verror@1.10.0
├─ vm-browserify@1.1.2
├─ watchpack@1.6.0
├─ webpack-assets-manifest@3.1.1
├─ webpack-cli@3.3.10
├─ webpack@4.41.5
├─ which-module@2.0.0
├─ which@1.3.1
├─ wide-align@1.1.3
├─ worker-farm@1.7.0
├─ wrap-ansi@5.1.0
├─ xtend@4.0.2
├─ yallist@3.1.1
├─ yaml@1.7.2
├─ yargs-parser@13.1.1
└─ yargs@13.2.4
✨  Done in 49.66s.
Installing dev server for live reloading
         run  yarn add --dev webpack-dev-server from "."
yarn add v1.19.1
[1/4] 🔍  Resolving packages...
[2/4] 🚚  Fetching packages...
[3/4] 🔗  Linking dependencies...
warning "webpack-dev-server >webpack-dev-middleware@3.7.2" has unmet peer dependency "webpack@^4.0.0".
warning " >webpack-dev-server@3.10.3" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0".[4/4] 🔨  Building fresh packages...
success Saved lockfile.
success Saved 100 new dependencies.
info Direct dependencies
└─ webpack-dev-server@3.10.3
info All dependencies
├─ @types/events@3.0.0
├─ @types/glob@7.1.1
├─ @types/minimatch@3.0.3
├─ @types/node@13.7.0
├─ accepts@1.3.7
├─ ansi-colors@3.2.4
├─ ansi-html@0.0.7
├─ array-flatten@1.1.1
├─ array-union@1.0.2
├─ array-uniq@1.0.3
├─ async-limiter@1.0.1
├─ async@2.6.3
├─ batch@0.6.1
├─ body-parser@1.19.0
├─ bonjour@3.5.0
├─ buffer-indexof@1.1.1
├─ cliui@4.1.0
├─ compressible@2.0.18
├─ compression@1.7.4
├─ connect-history-api-fallback@1.6.0
├─ content-disposition@0.5.3
├─ cookie-signature@1.0.6
├─ cookie@0.4.0
├─ deep-equal@1.1.1
├─ default-gateway@4.2.0
├─ del@4.1.1
├─ destroy@1.0.4
├─ detect-node@2.0.4
├─ dns-equal@1.0.0
├─ dns-packet@1.3.1
├─ dns-txt@2.0.2
├─ ee-first@1.1.1
├─ eventemitter3@4.0.0
├─ eventsource@1.0.7
├─ express@4.17.1
├─ faye-websocket@0.10.0
├─ finalhandler@1.1.2
├─ follow-redirects@1.10.0
├─ forwarded@0.1.2
├─ globby@6.1.0
├─ handle-thing@2.0.0
├─ hpack.js@2.1.6
├─ html-entities@1.2.1
├─ http-deceiver@1.2.7
├─ http-parser-js@0.4.10
├─ http-proxy-middleware@0.19.1
├─ http-proxy@1.18.0
├─ internal-ip@4.3.0
├─ ip-regex@2.1.0
├─ ip@1.1.5
├─ ipaddr.js@1.9.1
├─ is-absolute-url@3.0.3
├─ is-arguments@1.0.4
├─ is-path-cwd@2.2.0
├─ is-path-in-cwd@2.1.0
├─ is-path-inside@2.1.0
├─ json3@3.3.3
├─ killable@1.0.1
├─ loglevel@1.6.6
├─ media-typer@0.3.0
├─ merge-descriptors@1.0.1
├─ methods@1.1.2
├─ mime@2.4.4
├─ multicast-dns-service-types@1.1.0
├─ multicast-dns@6.2.3
├─ negotiator@0.6.2
├─ node-forge@0.9.0
├─ object-is@1.0.2
├─ obuf@1.1.2
├─ on-headers@1.0.2
├─ opn@5.5.0
├─ original@1.0.2
├─ p-retry@3.0.1
├─ path-is-inside@1.0.2
├─ path-to-regexp@0.1.7
├─ portfinder@1.0.25
├─ proxy-addr@2.0.5
├─ querystringify@2.1.1
├─ raw-body@2.4.0
├─ regexp.prototype.flags@1.3.0
├─ retry@0.12.0
├─ select-hose@2.0.0
├─ selfsigned@1.10.7
├─ serve-index@1.9.1
├─ serve-static@1.14.1
├─ sockjs-client@1.4.0
├─ sockjs@0.3.19
├─ spdy-transport@3.0.0
├─ spdy@4.0.1
├─ thunky@1.1.0
├─ type-is@1.6.18
├─ unpipe@1.0.0
├─ utils-merge@1.0.1
├─ wbuf@1.7.3
├─ webpack-dev-middleware@3.7.2
├─ webpack-dev-server@3.10.3
├─ websocket-extensions@0.1.3
├─ ws@6.2.1
├─ yargs-parser@11.1.1
└─ yargs@12.0.5
✨  Done in 14.68s.
Webpacker successfully installed 🎉 🍰

ModuleNotFoundError: No module named 'mysql.connector'; 'mysql' is not a package🤔

$
0
0

はじめに

Pythonを書き始めた頃に出会ったエラーが初学者の方の参考になると思い、記事にしました。

ModuleNotFoundError: No module named 'mysql.connector'; 'mysql' is not a package

mysql.png

Python3プログラム経由でMySQLに接続しようとした時、掲題の問題に出くわしました。
まず最初に、そのプログラムを実行する前にmysql-connector-pythonをインストールしていたことは確実でした。

pip3 install mysql-connector-python

(For readability, added line feed to each row)
Requirement already satisfied: mysql-connector-python in /opt/pypy3.6-v7.1.1-osx64/site-packages (8.0.17)
Requirement already satisfied: protobuf>=3.0.0 in /opt/pypy3.6-v7.1.1-osx64/site-packages (from mysql-connector-python) (3.9.1)
Requirement already satisfied: six>=1.9 in /opt/pypy3.6-v7.1.1-osx64/site-packages (from protobuf>=3.0.0->mysql-connector-python) (1.12.0)
Requirement already satisfied: setuptools in /opt/pypy3.6-v7.1.1-osx64/site-packages/setuptools-40.8.0-py3.6.egg (from protobuf>=3.0.0->mysql-connector-python) (40.8.0)

そのプログラム mysql.pyは以下の通りでした:

import mysql.connector

if __name__ == '__main__':
    con = mysql.connector.connect(
        user='remote',
        password='password',
        host='0.0.0.0',
        database='mydb'
    )
    cur = con.cursor()
    cur.execute('select * from stock;')
    for row in cur.fetchall():
        print(row[0], row[1])
    cur.close()
    con.close()

そして、このプログラムをpypy3で実行しました。

pypy3 mysql.py

Traceback (most recent call last):
  File "mysql.py", line 1, in <module>
    import mysql.connector
  File "/Users/resotto/develop/sandbox/mysql/mysql.py", line 1, in <module>
    import mysql.connector
ModuleNotFoundError: No module named 'mysql.connector'; 'mysql' is not a package

この問題の原因は、このpython3プログラムのファイル名 mysql.pyでした。

この問題を解決するために、私は次の二点を理解する必要がありました:

  • import宣言が使われた時、Pythonは現在のディレクトリから指定の package/module を探索する
  • .pyファイルは、それがPythonモジュールであることを意味する

connectorモジュールは mysqlパッケージの中にあり、そしてまた、私は自分の書いたpython3プログラムを mysql.pyと命名しました。

つまり、mysql-connector-python moduleではなく、自分の書いた mysqlモジュールをインポートしていました。
だから上記のエラーは次のメッセージを伝えていました:

'mysql' is not a package

確かに、 'mysql' は 私が書いたモジュールでした。
従って、そのプログラムのファイル名を mysql_temp.pyに変更すると、上手くいきました。

pypy3 mysql_temp.py
1 eraser
2 banana
3 apple
4 orange
5 ballpoint-pen

以上です!ご一読ありがとうございました。

Laravel5.5〜認証&CSRFディレクティブでコード短縮

$
0
0

はじめに

今回はLaravel5.5〜で導入された認証&CSRFディレクティブを使うことによって
コードを短縮できるといった内容について書きます。(一部 5.6〜)

この記事ではModel,View,Controllerの処理については一切触れません。
既に会員登録機能(ログイン/ログアウト)は実装済みということを想定しています。

参考: https://readouble.com/laravel/5.6/ja/csrf.html
  : https://readouble.com/laravel/5.6/ja/blade.html

目次

  1. @auth@endauth
  2. @guest@endguest
  3. @csrf

1.@auth@endauth

以前のバージョンの記述方法と今回紹介するディレクティブをそれぞれ比較していきます。

blade.php
#~5.4@if(Auth::check())#ログイン状態であるかをを判定{{--ログイン状態の時表示したい内容をここに書く--}}@endif
blade.php
#5.5~@auth{{--ログイン状態の時表示したい内容をここに書く--}}@endauth

ご覧の通り、@auth/@endauthを記述するだけでAuthファサードを書く必要がなくなります。

2.@guest@endguest

同じようにどんどん書いていきます。

blade.php
#~5.4@unless(Auth::check()){{--非ログイン状態の時表示したい内容をここに書く--}}@endunless
blade.php
#5.5~@guest{{--非ログイン状態の時表示したい内容をここに書く--}}@endguest

3.@csrf

@csrfは上で紹介したものと違い、バージョン5.6〜導入されたので注意してください。

blade.php
#~5.5
{{ csrf_field() }}

#5.6~
@csrf

#上記はどちらも
<inputtype="hidden"name="_token"value="<?phpechocsrf_token();?>">を生成します

さいごに

よく使うディレクティブ3つについてまとめました。他にも導入されたディレクティブがあるかもしれませんのでまた確認して見ようと思います。今回はこれで


Rails Tutorilaで躓いた所の対処法

$
0
0

はじめに

OS: windows 10
問題と解決法だけ記載します。
現在、第4章をやっている最中なので随時更新します。

第4章

リスト4-7
rails tを実行したら以下のエラーが出てきた。

Could not find gem 'guard (= 2.13.0) x64-mingw32' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.

解決策

Gemfileに記載されているgemを最新に書き換えてアップデートする。
gemのバージョンについてはこちらを参考にした。

参考文献

bundle install すると Could not find xxx in any of the sources と怒られる場合の対処法

【Progate】Ruby on Rails環境構築でrails serverが立ち上がらないときの解決法

$
0
0

Progateのこちらの記事を参考にRuby on Rails5の環境構築をしたら
詰まったのでその備忘録を残しておきます

前提

windows8
Ruby 2.5.1
Rails 5.2.4.1

発生した問題

Progateのこちらの記事でRuby on Railsの環境構築中
Railsのインストールも完了し最後に
rails s
でサーバーを立ち上げようとしたところ

Usage:rails new APP_PATH [options]
Options:[--skip-namespace], [--no-skip-namespace]            # Skip namespace (aff
ects only isolated applications)
~

というオプションみたいなのが出てくるだけで立ち上がらない。

試しにブラウザで
localhost:3000
にアクセスしようとしたが、エラーが出る。

解決方法

この質問の回答を試したところ解決しました。

・rails newでbinフォルダ等が作成されない

フォルダ生成の段階で問題があったようで
rails new フォルダ名
ではなく、
rails new フォルダ名 --skip-git
としたあとに
cd フォルダ名
rails s
を実行したところ、無事サーバーが立ち上がりブラウザでアクセスもできました。

解決に至った経緯と原因

はじめは"rails s できない"みたいな検索ワードで調べていました。
するとbinがどうこういってる記事が多く見つかって
bundle exec rake rails:update:bin
などなどやってみましたが、うまくいかず、、、

そこで改めて生成したフォルダを見てみるとbinフォルダがそもそも存在しないことに気づき、
フォルダの生成の段階が上手くいってなかったんだと分かりました。
どうやらgitがインストールされてないことが原因で、rails newコマンドでサーバー立ち上げに必要なフォルダが生成されてなかったようです。

【実践】SpringBootチュートリアル

$
0
0

はじめに

SpringBootを触ってみたい!
ということで、参考サイトを見ながらチュートリアルをやってみます。

参考サイト

MicroStone Spring Boot 2実践入門:簡単なWEBアプリを一から作成チュートリアル

開発環境

依存ライブラリの指定

以下のとおり指定する。(チュートリアルとは若干違う、Validationは不要。)]

  • Spring Boot DevTools
  • Sping Web
  • MyBatis Framework
  • H2 Database
  • Thymeleaf

トラブルシューティング

ログ関連

サーバー起動時にエラーが出たため、pom.xmlに追記対応。
詳細はリンク先参照。
https://tutorialmore.com/questions-1433585.htm

<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.11</version></dependency>

SQLファイル

元ファイルのままではSYNTAXエラー。

CREATETABLEIFNOTEXISTSitem(idbigint(20)NOTNULLAUTO_INCREMENT,namevarchar(255),pricereal,vendorvarchar(255),PRIMARYKEY(id))ENGINE=InnoDBDEFAULTCHARSET=utf8;

「ENGINE=InnoDB DEFAULT CHARSET=utf8」を削除して通るようにはなりました。

うまく動かない

写経で間違えたのか、コピペしつつ動作を目指しましたがイマイチなので、合わせて公開されているGitからもコピー・・・。
https://github.com/lebo-itgo/springbootsample
最終的にうまく動かず、すっかり飽きてしまいました。

おわりに

公式以外にもチュートリアルの類はよくありますが、ある程度前提知識がないと環境がうまく作れなかったりエラーに対処できず、なかなか困ってしまいます。
やはり、公式チュートリアルや、初心者向けの書籍あたりから入った方が、私の場合は確実だなぁと思いました。

【Python】リスト(配列)内要素の操作【追加・削除】

$
0
0

はじめに

リストを扱う上で重要な追加と削除の方法をまとめました。
基本的に以下のようなコードでコードと出力結果を記載します。

ex.py
code='コード'print(code)# code(出力結果)

リスト(配列)に要素を追加するappend, extend, insert

Pythonでlist型のリスト(配列)に要素を追加したり別のリストを結合したりするには、リストのメソッドappend(), extend(), insert()を使う。そのほか、+演算子やスライスで位置を指定して代入する方法もある。

・末尾に要素を追加: append()
・末尾に別のリストやタプルを結合(連結): extend(), +演算子
・指定位置に要素を追加(挿入): insert()
・指定位置に別のリストやタプルを追加(挿入): スライスを使う

・append()・・・末尾(最後)に要素を追加できる。

append().py
l=[0,1,2]print(l)# [0, 1, 2]
l.append(100)print(l)# [0, 1, 2, 100]
l.append('new')print(l)# [0, 1, 2, 100, 'new']
l.append([3,4,5])print(l)# [0, 1, 2, 100, 'new', [3, 4, 5]]

・extend()・・・末尾(最後)に別のリストやタプルを結合できる。

extend().py
l=[0,1,2]l.extend([100,101,102])print(l)# [0, 1, 2, 100, 101, 102]
l.extend((-1,-2,-3))print(l)# [0, 1, 2, 100, 101, 102, -1, -2, -3]
#append()と違って一文字ずつ格納される
l.extend('new')print(l)# [0, 1, 2, 100, 101, 102, -1, -2, -3, 'n', 'e', 'w']
#extend()メソッドではなく+=でも可。
l+=[5,6,7]print(l)# [0, 1, 2, 100, 101, 102, -1, -2, -3, 'n', 'e', 'w', 5, 6, 7]

・insert()・・・指定した位置に要素を追加(挿入)できる。第一引数に位置、第二引数に挿入する要素を指定する。先頭(最初)は0。負の値の場合、-1が末尾(最後)の一つ前となる。

insert().py
l=[0,1,2]l.insert(0,100)print(l)# [100, 0, 1, 2]
l.insert(-1,200)print(l)# [100, 0, 1, 200, 2]
l.insert(0,[-1,-2,-3])print(l)# [[-1, -2, -3], 100, 0, 1, 200, 2]

・スライスで範囲を指定して別のリストやタプルを代入すると、すべての要素が追加(挿入)される。

insert().py
l=[0,1,2]l[1:1]=[100,200,300]print(l)# [0, 100, 200, 300, 1, 2]
l[1:2]=[100,200,300]print(l)# [0, 100, 200, 300, 2]

リスト(配列)の要素を削除するclear, pop, remove, del

Pythonでlist型のリスト(配列)の要素を削除するには、リストのメソッドclaer(), pop(), remove()を使う。そのほか、インデックスやスライスで位置・範囲を指定してdel文で削除する方法もある。

・すべての要素を削除: clear()
・指定した位置の要素を削除し、値を取得: pop()
・指定した値と同じ要素を検索し、最初の要素を削除: remove()
・インデックス・スライスで位置・範囲を指定して削除: del

・clear()・・・全ての要素を削除する

clear().py
l=[0,1,2,3,4,5,6,7,8,9]l.clear()print(l)# []

・pop()・・・リストのメソッドpop()で、指定した位置の要素を削除し、その要素の値を取得できる。

pop().py
l=[0,1,2,3,4,5,6,7,8,9]print(l.pop(3))# 4
print(l.pop(-2))# 8
#引数を省略して位置を指定しない場合は、末尾(最後)の要素を削除する
print(l.pop())# 9

・remove()・・・リストのメソッドremove()で、指定した値と同じ要素を検索し、最初の要素を削除できる。

remove().py
l=['Alice','Bob','Charlie','Bob','Dave']l.remove('Alice')print(l)# ['Bob', 'Charlie', 'Bob', 'Dave']

・del・・・削除したい要素をインデックスで指定する。先頭(最初)は0で、末尾(最後)は-1。

del.py
l=[0,1,2,3,4,5,6,7,8,9]dell[6]print(l)# [1, 2, 3, 4, 5, 6, 8]
dell[-1]print(l)# [1, 2, 3, 4, 5, 6, 7, 8]
#スライスで範囲を指定すると、複数の要素を一括で削除できる
dell[2:5]print(l)# [0, 1, 5, 6, 7, 8, 9]

最後に

他にも何か方法が解法があれば教えてもらえると嬉しいです。

cloud9でbundle installで再構築出来ず、gemfile.lockを削除とMysqlなのにPostgresqlインストールしたら解決した話。

$
0
0

EC2のインスタンスを、停止すべきところを間違って終了押してしまい、後の祭り。。
cloud9で再構築使用とgit cloneしたが、再構築しようとしたらいろいろハマったので忘備録として。

You must use Bundler 2 or greater with this lockfile.

gemfile.lockを削除して、Bundler2系をインストール出来るようにします。

bundle install
Your Ruby version is 2.6.3, but your Gemfile specified 2.5.3

またもエラー分が、今度はインストールするrubyバージョンが、君が使用しているバージョンとは違うよーとの事なので、直接修正。

bundle install

またエラー。。

An error occurred while installing pg (1.2.2), and Bundler cannot continue.
Make sure that `gem install pg -v '1.2.2' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  pg

エラー分にある通り、

$gem install pg -v '1.2.2'

しましたが、エラーは変わらず。。

Mysqlを使ってましたが、どうやらPostgresqlがインストールされていないことが原因とのことらしく、
こちらの記事を参考にPostgresqlがインストールしました。
https://qiita.com/oke-py/items/75333cf564480d062006

sudo yum install postgresql postgresql-server postgresql-devel postgresql-contrib

インストールが終わり、無事budle出来ました。

Viewing all 21635 articles
Browse latest View live