アラフォーがお金持ちになるためプログラマ目指すブログ

お金も根性も学歴もないアラフォーまきのがエンジニア…じゃない、プログラマになってお金持ち目指すよ!

【after侍塾】3

どうも、アラフォーまきのです。




これまで何してた?

…お察しください。





とかふざけたこと言っている場合ではないんですが、本当に、もう苦しくて苦しくて。




毎日コード書いて「たのしー!」って言ってた頃が嘘みたいに、全然楽しくなくなってしまった。





でも、楽しくなくなってしまったのは、ついに侍塾を卒業し、自分で道を切り開かねばならない時期にきたからだと思います。






第一歩が怖い
面倒臭い
どうせ面接受けても落ちる
受かっても役に立たない
そもそも週5日のフルタイムでなんて働けない
どうせ通信制とはいえ大学行くんだしもう頑張らなくてもよくね?



こんなごみみたいな気持ちでいっぱいになってるんです。






とはいえ、ほんの少しだけではありますが、調べたり書いたりできました。




前回の侍塾最後の授業でPostgreSQLへ移行して、pgAdmin4を使い始めたのですが、PostgreSQLとpgAdmin4の操作が全く理解できておらず、このことを調べたりしてました。




で、


・本番用にデプロイしたアプリのDBに接続したい
・カラムの型を変更したい


この2つで行き詰まっていました。





本当は、どうしても手詰まりなら、まだまだ手直ししたい部分が山ほどあったので、そちらを改修していくなど、やることはたくさんあったのです。





これだけ時間があれば、概ね手をつけられていておかしくなかったのに、1つとして手をつけられていません。





だから、今日は本当に、メンターさんに合わせる顔がなかった。
せっかく時間を割いてくれているというのに、なんて不義理なんだろう、と。




でも、「さすがメンターさんやで!」といったところで、すっかり元気が戻りました(笑)




今日のアドバイス1 pgAdminでHerokuのDBにアクセスしたい。


兎にも角にもまずはherokuをpgAdminさんでみられるようにしようということに。





今日までのところで、ひとまず以下の参考サイトをみながら接続はできていたんです。




参考1
medium.com


参考2
qiita.com







参考1では、どこに何を入力すればいいかわからない部分があったので、参考2もみながらやりました。





で、この手順でやって接続はできたものの、なんとDBが6000件も出たんです!なんじゃこりゃー!!





「これはあれか?
もしかして他のユーザーのものじゃないの?
ええ?
大丈夫なのこれ?
なにを間違えた…?
これマズくないの…?」


と戦々恐々していた私w





メンターさんへ相談したところ、やはりフリープランのユーザーさんのDBが全て引っ張られていたことがわかりました。




でも、DBへのアクセス権はもちろんそのDBの持ち主にしかないので、特に恐れる必要はなし。





ただ1/6000の私のDBを探し出すのは大変なので、フィルタリングしましょう、ということになりました。





一旦接続を切る


f:id:MmRevorution:20190510133808p:plain

該当のサーバー名のところで右クリック。
Disconnect Serverをクリックし、念の為接続を一旦切る。


propertiesを開く


f:id:MmRevorution:20190510134235p:plain


該当のサーバー名のところで右クリック。
propertiesを選択する。

フィルターをかける


f:id:MmRevorution:20190510135056p:plain


AdvancedのDB restrectionにDB名を入れてあげる。
このDB名はさっきの参考1・参考2で調べたやつ。





参考1でいうならDatabaseに書かれている部分。






参考2でいうならDB名に当たる部分。






これで、私のDBだけ表示できるようになりました。
よかった。



今日のアドバイス2 型の変換


プロトタイプではintegerで作っていたカラムを、本番ではbooleanにすることにしていました。




が、うっかりintegerのまま作ってしまった私。
すぐに気づいてマイグレーションファイルを追加して、型を変換してあったんですけど…。



今回PostgreSQLを使うことになった時、そのマイグレーションファイルでエラーが出てしまっていたので、型変換のコードをコメントアウトにしてPostgreSQLに反映させてました。




だから型の不一致でエラーが出るようになっている箇所がありました。






前まで使っていたSQliteは、比較的ふわっとしたお手軽DBだったこともあって、integerをbooleanにすることは簡単でした。




以下の記事でもちょろっと書いたんですけど、sqliteではbooleanにするとtrue/falseT/Fではなく0/1で管理してるみたいで、それが変換を簡単にしてくれている理由の一つでもあるみたいです。

www.arafo-enjineer.net






で、PostgreSQLさんはもっと厳密なDBなので、単純に書き換えようとしてもちょっとうまく行かないと。






だから、これでやったみたいなやり方をしてもダメでした。





エラーメッセージにヒントが出たりしたので、調べつつやってみたんですがうまく行かず。



参考
qiita.com





エラーメッセージを見ると、どうも書き換えるかキャストしてねといっているようでした。

PG::DatatypeMismatch: ERROR:  column "memo_public" is of type boolean but default expression is of type integer
HINT:  You will need to rewrite or cast the expression.


そもそもキャストってなんだよ状態。
調べたら型の書き換えのことだそうですね。




でもキャストをどうやるのかとかがいまいち調べがつかず。

エラーメッセージの中にはSQL文もあったので、pgAdminでSQL書いちゃうか!と試したんですが、それも当然エラー。
内容は同じメッセージ。





手詰まりになってしまったので、これもメンターさんに助けてもらいました。




で、やっぱりDBを書き換えるってのはあまりよくなくて、メンターさん的にはこうやってUSINGなどを明示的に記載したカラム型の変更は、最終手段くらいに考えていた方がいいと思うなーとのこと。




今回は、まだアプリをお客さんに使ってもらっているとか、重要なデーター突っ込んだ後だとか、そういったことではなかったので、ごく素直な対応を取ることに。






対象カラムをdropさせて、新しくboolean型のカラムを追加するマイグレーションファイルを作ることにしました。



class ChangeDatatypeMemoPublicOfWorks < ActiveRecord::Migration[5.2]
  def change
    remove_column :works, :memo_public, :integer
    add_column :works, :memo_public, :boolean, default: false, null: false
  end
end



で、当然ここでingtegerのmemo_publicは完全に消滅するので、なにかすでにデーターを登録しているのなら注意が必要とのこと。




私の場合はまだサービス展開していないので気にすることは何もないけれど、すでにサービス展開中の場合は…



remove_columnする前の行に、データーを抽出してリストなどの保存しておくコードを追加。



add_colimnの後に、先ほどのリストからデータを引っ張ってきて必要な処理を追加する。





なんてこともできるのだそうです。





マイグレーションファイルにそういう作業のプログラムを追加できるとは…。その発想がなかったのでびっくりしましたw




で、この後

$ heroku run rails db:migrate


を忘れずに。(忘れた)





これでちゃんと動いてくれました。
よかった。



今日のアドバイス3 アプリレビュー

Herokuに上がっているので、実際にメンターさんがユーザーになって動かしてくれました。




その上で「こうするともっといいよね!」というアドバイスを山盛りもらいました。






これが本当に楽しかった!
もしかしたら、もう二度とこういう気持ちがわかないんじゃないかって思ってたから(深刻に考えすぎ)、とっても嬉しかった。





かなり気持ちが前向きになったので、できるところからどんどん手を加えていこうと思います。






現状、サインアップ時にメール確認をしないように作ってたんですが、やっぱりメール確認やろう!という話になったので、ローカル環境での実装と、その他細々したところのブラッシュアップを出来るだけやるということに。






次回の最後の授業で、HerokuのAdd onを使ってメール機能を本番に実装していく予定です。





他にも、メール設定するにあたってドメインがあった方が本当はいいよね…とか、SSL使うべきだよね…とか、そういえば画像のUPはamazon S3にしたっけ?とか、色々なお話をしました。


余談 メンターさんはメンターさんだった

毎回、授業開始の時はちょっとした雑談をして、その後に「(進捗は)どうですか?」という話題に入ってました。




今回お話した時、素直に「全くはかどっていない」「手が動かない」ということを白状したんですが、さすがメンターさんでした。



やっぱり丁寧に話を聞いてくれて


一人だとなかなかモチベーション保つのが難しいこと

早々にアプリを公開(公開していることを周知)すると、
使用者が現れるので、改善したいことなどが見えてきて、
モチベーションにも繋げやすいこと

などを教えてくれました。




というか、私はこの間全く作業ができていないのを

モチベーションが保てなくなった

という言葉ではなく

やる気がなくなってしまった

という言葉で認識してました。





モチベーションとは

「人が何かをする際の動機づけや目的意識」

なのだそうです。





じゃあやる気ってなに?と調べてみたら、こちらのサイトで

「心理学ではやる気のことを「モチベーション」と表現しますが…」

とありました。


www.huffingtonpost.jp





言葉的には同じようなものなんですね。
確かに私も似たような認識ではありました。




けれど「やる気がない」ってのは、私の場合どちらかというと

自分の中に、あまりいい意味ではない ≒ 怠け心・適当な考え・投げやりな気持ち等がある = できるのにやらない

のような印象があるんです。






逆に「モチベーションが保てない」ってのは、もっとプラスなイメージで、

頑張ろうとしているのに、なにか外因的な問題で、やりたくてもできない

みたいな、そんな感じの印象を感じることが多くあります。





だから、一番最初にメンターさんに白状した時


「モチベーションが保てなくなった感じですかね?」


といってもらえて、怠け者で不義理な自分は本当にクズ人間だ…と思っていたのに



「モチベーションが上がれば、自分だってまだできるのかもしれない」



とプラスに気持ちが転換したんですw
単細胞ってこういう時かなり得だなってw






なので、気持ちがあったまってる内に、いろいろできることやっていきたいと思います。




次回は5/28(火)の予定ですが、変更になるかもしれません。
とにかく、もうちょっと頑張ってみようと思います。




ではまたー!