20201224_アウトプット(ウィザード形式の実装)

アプトプット画像

今日行ったこと 3時間15分

  • ウィザード形式の実装
    👉アプリ自体はできた。しかし、form_withに上手く変更できず。メンターさんにチャットで質問して終了。



新しい発見

form_withに変更したいが上手くいっていない状況について

【実装の状況】

・カリキュラム通りに一通り終わった。(ミニアプリ出来た。)
・しかし、form_forって非推奨だと以前学んだのでform_withに変えたかった。
(1)VSコードにおいてform_forform_withに置き換え(該当8箇所全て)
(2)こちらのサイトをみてmodel:の表記が必要だと思い、以下のようにform_with直後の部分にmodel:追加。
(3)同じように、renderの部分についてもキーにあたる部分がmodel:になるよう変更。

<%= form_with(model:@user, url: user_registration_path) do |f| %>
  <%= render "devise/shared/error_messages", model: @user %>

の3つについて行った。


【エラーの状況】

・Web上は次ボタンを押しても画面遷移しないだけであってエラーは出ていない。
・ターミナル上にエラーが起きている。


【エラーから行ったこと】

・セッションに持たせている内容がパラムスに入っているか確認したかったので、binding.pryを使って、コントローラーに入れた。

そうすると、Sessionの中身は運ばれているけれど、上手く遷移されない(保存されないまま次のページいけず)
わからなかった😣


ウィザード形式に関して、新しく知ったこと

  • buildメソッドはモデルのアソシエーションを組む時、データを保存したくない場合に使うことを知った。しかし、アソシエーションのパターンによって、メソッド名が変わることも知った。

Railsモデルの関連付けでbuildを使う時のメソッド名 · GitHub

  • ActiveRecordStoreというgemを使ってセッションデータだけ別に保存できる方法もあることを知った。

qiita.com

  • ウィザード形式にしたい時は、各ページごとにモデル・テーブルを作る必要があることを理解。理由としては、ページ遷移ごとに(そのテーブルごとに)バリデーションをかけたいため。

  • 今回「ユーザーテーブル」に「住所テーブル」が紐づくようにマイグレーションファイルで参照設定をしている。ウィザード形式は最後に保存がなされるので、途中経過として参照している「user_id」が空になってしまう。対処法として、Userモデルに対して、optional: true設定をする。そのことによって一時的に外部キーがnilであってもDBに保存できるようになると理解。

  • devise管理下にusersコントローラーを作成し、ウィザード機能を実装していくことを理解。

感想

  • 寝不足気味💦PHPの本を読みながら今日はもう寝よう😪

  • コントローラーの記述内容について理解が浅いと感じた。(sessionを配列やハッシュを使ってデータを保存している部分がわかるようでわかっていない)今回エラーが解決できていないのもそこの理解がわかっていないからだと思った。😣

  • README最初に書き換えれば良かった。最初のミニアプリで失敗学べたから良かった。

  • インタビューについて身近なテックキャンプの仲間に募集したところ、良いよといってくれる方が想像以上にいて嬉しかった。(ありがとうございます!)

覚書

ミニアプリ(目的:知識の引き出しを増やす)
  • コメント機能の実装

  • ウィザード形式の実装 👉12/23 70%

  • SNS認証によるログイン機能の実装

  • 複雑な検索機能の実装

  • タグ付機能の実装

  • パンくず機能の実装

  • クレジットカード決済機能(ユーザーに紐付け)

  • エラーメッセージの日本語化(チャットアプリに追加実装)

  • プレビュー機能の実装・複数枚の画像投稿の実装



優先順位

(1)ミニアプリの作成(実装方法の理解)・個人アプリのためのインタビュー・DB設計等
👉12月29日(火)締め切り

(2)個人アプリの作成。
👉1月11日(月)締め切り(基本実装)

(3)(1)で学んだことを「フリマアプリ」あるいは「個人アプリ」に反映。
👉1月17日(日)締め切り

追加:(1)(2)(3)と同時並行で、PHPについても学ぶ。



身に付ける力(直近)


身に付ける力(ゆくゆく・覚書)

  • 環境構築

  • 環境変数などのOS知識

  • バージョン対応力

  • データベースをインポートする力・エクスポートする

  • GitHubActions×OpenAPIGenerator(APICilent)

20201223_アウトプット(環境変数・ウィザード形式)

アプトプット画像

今日行ったこと 4時間10分

  • sudo gem install railsの無限ループエラー 👉解決✨(1時間)

  • カジュアル面談 👉楽しかった☺️

  • ウィザード形式の実装 👉60%進んだ(3時間10分)



新しい発見

sudo gem install railsの無限ループエラー

  • 結果、原因は環境変数に設定しているeval "$(rbenv init -)"Rubyの環境構築をするもの)がPAYJPと同じ行内にあった💦(PAYJPの環境変数を設定した時に、ずらしちゃったみたい😭)

  • PAYJPの後ろに続いてしまっていたeval "$(rbenv init -)"を改行してきちんと訂正した後、パスを通したら直った。

which rubyで確認すると以下のようになる。

変更前(誤) 変更後(正)
/usr/bin/ruby /Users/〇〇/.rbenv/shims/ruby



カジュアル面談

本当にありがとうございました🙇‍♀️

新しく学んだ言葉

リンクは分かりやすかったページです。



ウィザード形式の実装

カジュアル面談の後、「GitHub」についてもっと使えるようになろうと感じたため、アプリをGitHubを使ってアップすることにした。(練習あるのみ)

GitHubで忘れていたこと・新しく学んだこと
  • rails newでアプリケーションの生成をした後、GitHubに反映させるにはAdd Existing Repositoryだった。(ここを間違えてしまい2回作り直した😱)

  • いらないリポジトリを削除するにはsettingの下の方に、削除ボタンがあると理解。

  • プルリクはしていたものの、イシューと連携したことがなかったため、実践。

qiita.com

  • Milestoneでイシューのプルリクエストの進捗が見られるようになった。✨

  • Closes #n<紐付けたいIssueの番号>で、マージした後に、イシューが同時に閉じる。(感動した✨😍)



.gitignoreについて
  • rails newをした時に、.gitignore(イグノア)は自動生成される。(外部に見せたくない部分はここのファイルに書く)

  • ここに入れなくてはならない(外部に漏らしてはいけない)ファイルは、デフォルトで入っている。

  • しいて言えば、作られなくていい.DS_Storeを生成されないようにするといいと学んだ。

  • わかりやすい記事 qiita.com 👉.gitignoreの記述とはVSコード内に書くことを指す、キャッシュの削除とはすでに出来てしまった不要な.DS_Storeを消すことを指すと理解。

(補足)

DS_Storeファイルはディレクトリに関する情報ファイル Macのシステムが各ディレクトリに勝手に生成するファインダーファイルで、ファイルやフォルダを開いた際の位置や大きさや、背景色、カスタムアイコンなどの情報を記憶しているメタデータの不可視なファイル

感想

  • 今日はずっと楽しみにしていたカジュアル面談があった。(本当にありがとうございました)

  • リードエンジニアさんが最初はサポートしてくれることや、個人のスラックで呟くと助けてくれる人が多いこと、固定観念に囚われることなく「こうするとどうなるか」と考える雰囲気、チャレンジしてみたい気持ちを応援してくれる雰囲気、実際に聞いてみて、安心した部分が多かった。

  • また1日のスケジュールを実際に聞いてイメージできたことが大きかった。(今の会社生活から想像つかなかったため)

  • 応募する☺️。そのために今ひたすら出来ることをやろう。GitHub・デプロイは慣れるまでミニアプリで練習しよう。

  • あとは今日できなかったけどDDDもちゃんとみよう。PHPも勉強しよう。みているポイントは本質の部分を考えよう。(計画見直そうと思う✨)

  • ケンタッキーのアプリをダウンロードした。チキンマイル面白い(笑)雪降っていたり鶏動いていたり可愛い!メニューも押すとすぐ開く(使いやすい)画像がいっぱいあってみやすい。右側に数書いてあるの予測できる。下のボタンが感覚でいじれるから分かりやすい(迷わなかった)カーネルカメラなんだろうって思ったら面白いスタンプがいっぱいあった(笑) 👉総じてかっこいい!!😣✨頑張る!!

覚書

ミニアプリ(目的:知識の引き出しを増やす)
  • コメント機能の実装

  • ウィザード形式の実装 👉12/23 60%

  • SNS認証によるログイン機能の実装

  • 複雑な検索機能の実装

  • タグ付機能の実装

  • パンくず機能の実装

  • クレジットカード決済機能(ユーザーに紐付け)

  • エラーメッセージの日本語化(チャットアプリに追加実装)

  • プレビュー機能の実装・複数枚の画像投稿の実装



優先順位

(1)ミニアプリの作成(実装方法の理解)・個人アプリのためのインタビュー・DB設計等
👉12月29日(火)締め切り

(2)個人アプリの作成。
👉1月11日(月)締め切り(基本実装)

(3)(1)で学んだことを「フリマアプリ」あるいは「個人アプリ」に反映。
👉1月17日(日)締め切り

追加:(1)(2)(3)と同時並行で、PHPについても学ぶ。



身に付ける力(直近)


身に付ける力(ゆくゆく・覚書)

  • 環境構築

  • 環境変数などのOS知識

  • バージョン対応力

  • データベースをインポートする力・エクスポートする

  • GitHubActions×OpenAPIGenerator(APICilent)

20201222_アウトプット(EC2①初期設定)

アプトプット画像

今日行ったこと 2時間20分

  • AWSのEC2の初期設定について理解を整理
    👉流れを理解できた。

  • ミニアプリ作ろうとしたところsudo gem install railsの無限ループエラー
    👉ぐぐるもわからず。明日に持ち越し。



新しい発見

AWSのEC2の初期設定はどういう流れなの?

(1)EC2インスタンス仮想マシン)を作る📦
(2)Elastic (エラスティック)IPアドレスAWSから割り振ってもらう
(3)(1)と(2)を紐付ける🎀
(4)ポートの開放をする(ネットワークからパソコンにお邪魔するときに通るドアを増やすよ)
(5)出来上がったEC2にログインする
(6)出来上がったサーバーを整える

の流れで行うよ!

それぞれの詳細を見てみよう

(1)EC2インスタンス仮想マシン)を作る📦

ここで確認・行うこととしては

  1. リージョン(データの保存場所)は”パシフィックアジア(東京)”で合ってる?

  2. AMI(Amazon Machine Image)という「サーバーのデータを丸ごと保存したデータ内容」はどれにする?(今回はAmazon Linux AMI2

  3. CPUやメモリのスペックどれにする?(今回は無料枠のためt2.micro

で作成する✨(2つ目以降のEC2インスタンスは有料なので注意)

作成後、「キーペア」と呼ばれるEC2インスタンスにログインする時の秘密鍵を生成して、ダウンロードしておく。後に(5)のステップで使うよ。



(2)Elastic (エラスティック)IPアドレスAWSから割り振ってもらう

  • EC2インスタンスを作成した時に、パブリックIPと呼ばれるIPアドレスが自動で割り振られるものの、そのままだとサーバーを再起動するたびに設定ファイルを書き換えないといけないので面倒だよ。
    👉Elastic (エラスティック)IPアドレスと呼ばれる、固定の「パブリックIPアドレス」を設定する。

  • AWSに「割り当て」をしてもらい、Elastic IPアドレスの完成✨



(3)(1)と(2)を紐付ける🎀



(4)ポートの開放をする(ネットワークからパソコンにお邪魔するときに通るドアを増やすよ)

  • ポートとは、ネットワークからパソコンにお邪魔するときに通るドアのこと。

  • EC2インスタンス生成時にはssh(暗号や認証技術を利用して安全にリモートサーバーと通信できる方法)のみ、ポートが設定されている。

  • HTTPも通れるドアを作りたいので、「ポートの開放」を行う。

セキュリティグループの設定>インバウンドのルール>ルールの追加

タイプ プロトコル ポート範囲 送信元
HTTP TCP 80 カスタム/0.0.0.0/0
HTTP TCP 80 カスタム::/0


ここで感じた疑問 👉送信元が違うだけで一緒みたいだけど上記2つの違いはなんだろう?
  • /0.0.0.0/0IPv4で、::/0IPv6という違いがある。

  • IPはインターネットプロトコルの略で、通信方法のお約束ごと「第4版」と「第6版」という意味なんだと理解。

  • IPv4は従来のお約束ごとで、最大約43億台のコンピュータが接続OKだったけれど、「それじゃ足りないんじゃない?」となった。

  • 後から出てきたIPv6は約340澗(かん)台の接続がOK。(事実上、無限)

  • IPv6は、IoT家電やYoutube,gmail,Facebookなどに使われていることを知った。



(5)出来上がったEC2にログインする

  • 今回は、簡易化のためec2-userを使って実装した。

1. .sshというディレクトリを作成(mkdirmake directory)

% cd ~
% mkdir ~/.ssh

2. (1)で作ったキーペアを上記ディレクトリに移動させる(mvmove)

% mv Downloads/キーペア名.pem .ssh/
% cd .ssh/
% ls 
# pemファイルが存在するか確認しとく

3. 保存したキーペアは所有者のみ読み書き可能なモードにする(chmodchange modeで、600とはパーミッションと呼ばれるアクセス権のこと)

% chmod 600 キーペア名.pem

(豆知識)何も設定しなければ644となり、次の"4."のコマンドでログインする際、「権限緩いんじゃない?」とエラーが出る。

4. ssh -iでログインするよ。(このコマンドは後々よく使うので控えておくとgood)

% ssh -i キーペア名.pem ec2-user@割当てたElastic IP



(6)出来上がったサーバーを整える

最後に出来立てほやほやのEC2インスタンスを整えるよ。

ここから使っていくyumコマンドとは?

Linuxにおけるソフトウェア管理の仕組みで、MacOSにとってのhomebrewと同じ役割を果たす。
yumコマンドを使って、yumの管理下にあるプログラムのバージョンを管理したり、一括でアップデートしたりするよ。

1. このサーバに元々あるプログラムをアップデート(EC2内で実行)
# パッケージのアップデート
[ec2-user@ip-111-11-11-111 ~]$ sudo yum -y update
# その他環境構築に必要なパッケージを諸々インストール
[ec2-user@ip-111-11-11-111 ~]$ sudo yum  -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel ImageMagick ImageMagick-devel openssl-devel libcurl libcurl-devel curl

(補足)ここで使われている-yオプションは、予め”「yes」で!”という役割の意味があるよ(yes以外の誤入力を防ぐため)

2. JavaScriptを動かすための準備

サーバーサイドで動くJavaScriptのパッケージである「Node.js」をインストールする。

[ec2-user@ip-111-11-11-111 ~]$ sudo curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash -
[ec2-user@ip-111-11-11-111 ~]$ sudo yum -y install nodejs


3. Railsのバージョンが6.0以降のアプリケーションを動かすための準備

パッケージマネージャーであるYarn(Railsに搭載されているJavaScriptのパッケージを管理する)をインストールする。

[ec2-user@ip-111-11-11-111 ~]$ sudo yum -y install wget
[ec2-user@ip-111-11-11-111 ~]$ sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
[ec2-user@ip-111-11-11-111 ~]$ sudo yum -y install yarn


4. rbenvとruby-buildをインストール

Rubyのバージョンを管理する際に組み合わせて使うツールだよ。

# ①gitからrbenvをクローン(インストール)
[ec2-user@ip-111-11-11-111 ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv 

# ②パスを通す(どのディレクトリからも呼び出せるようにする)
[ec2-user@ip-111-11-11-111 ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile 

# ③rbenvを呼び出すための記述
[ec2-user@ip-111-11-11-111 ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

# ④.bash_profileの読み込み
[ec2-user@ip-111-11-11-111 ~]$ source .bash_profile

# ⑤gitからruby-buildをクローン(インストール)
[ec2-user@ip-111-11-11-111 ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

# ⑥rehashを行う(使用しているRubyのバージョンでgemのコマンドを使えるようにする)
[ec2-user@ip-111-11-11-111 ~]$ rbenv rehash 

.bash_profileとは?


5. Rubyをインストール(rbenvとruby-build終わってから!)

ここでポイントなのは「自身のアプリで使っているRubyのバージョン」でインストールする事!

# Ruby 2.6.5のバージョンをインストール(時間かかるコマンドだよ)
[ec2-user@ip-111-11-11-111 ~]$ rbenv install 2.6.5

# EC2インスタンス内で使用するRubyのバージョンを決める
[ec2-user@ip-111-11-11-111 ~]$ rbenv global 2.6.5

# rehashを行う
[ec2-user@ip-111-11-11-111 ~]$ rbenv rehash  

# Rubyのバージョンを確認
[ec2-user@ip-111-11-11-111 ~]$ ruby -v 



その他
  • which railsなどwhichコマンドによって、それがサーバー内のどこに格納できている確認できることを知った。

  • sudo gem install railsの無限ループエラーは出てきたキータの記事が古かったのと、whichで確認したらRailsRubyの格納先が異なるわけではなかったため、明日また調べてみよう。

  • AWSにまつわる表記や読み方が勉強になった。

dev.classmethod.jp

  • (5)の3にあった権限設定にはいろいろあることを知った。

qiita.com

  • 同じように権限設定について、それぞれの意味がわかりやすい。

web.tbgu.ac.jp

  • EC2インスタンス生成にまつわる単語の意味が平易な言葉で書かれていてわかりやすかった。

qiita.com

  • 今回は「ec2-user」で行ったけれど、新しいユーザーアカウントを追加するにはどうするんだろう?と調べたところ、以下の通りに進めればできそう☺️

aws.amazon.com

感想

  • 最近、プログラミングをシンプルに「楽しいなー」と思ってできている事が幸せ。(一時期は、理解が遅い自分に対して、焦りや虚しさを感じて「義務感」に感じることもあったため)

  • 今日はコードを書くのは進まなかったけど、今後も必須知識であろうAWS言語化(理解)をできたのでよかった。

  • 昔、たまたま動画で見たひろゆきさんの「詰まったら寝る」で解決できた事があったので、今回も寝て脳をすっきりさせようと思う。



これから理解したいこと(覚書用)

約4ヶ月半振り返り

4ヶ月半ふりかえり

約4ヶ月半振り返りについて


8月1日からプログラミング学習を始めて、4ヶ月と20日が経過しました。(142日間)

現在の状況としては

  • 最終課題の必須実装が完了(アプリ説明文は未)

  • 追加実装の一部であったAWSのS3とEC2の実装が完了(これはずっとやりたくてワクワクしていたので先に実装した)

  • 2/5を最後にメンターさんに聞けなくなる

という状況です。


ここまでの振り返りと、現在の恵まれた環境で出来るだけ知識・技術を吸収するための優先順位を考えたいと思います!

  1. 学習時間の振り返り

  2. 最終課題の振り返り

  3. これからの優先順位

大きく3つの順番でお話していきます。


(1)学習時間の振り返り

142日間で取り組んだ内容・時間は、以下の通りです。(12月20日(日)時点)

学んだ内容 時間
HTML 26時間15分
CSS 66時間10分
Ruby 46時間10分
GitHub 3時間00分
Heroku 6時間00分
JavaScript 44時間30分
Ruby on Rails 898時間15分
SQL 8時間15分
セキュリティ対策 7時間00分
予備知識 5時間20分
AWS 25時間15分
合計 1136時間10分


プログラミング学習を出来なかった日


142日間のうち、プログラミング学習が出来なかった日は合計8日間ありました。

出来なかった日に何をしていたか振り返ると、

  • なぜプログラマーになりたいのか等の将来像や、日頃の考えについて言語化

  • 学習の振り返り・計画立て

  • 履歴書の作成

  • 眠すぎて寝てしまった

という理由でした。


現在は「とりあえず15分プログラミング学習をする」という目標でやっています。
目標が小さいと取り掛かりやすいのと、やり始めると意外と時間が経って集中しているためです。
反対に「○時間やる!」と設定していた時もありましたが、
プログラミング学習がだんだん義務のように思えて楽しめなくなったので自分に合わずやめました。
たまに眠すぎて寝てしまうことも許容して、これからも続けていきたいと思います。


勉強時間を記録していて良かったと感じたこと


客観的にどれくらいどこの学習に時間をかけているのか把握できたので、データで自分を励ますことが出来ました。
具体的に言うとJavaScriptの学習を始めた頃、Railsとの繋がりが本当に訳わからなくって落ち込んだのですが、 記録を見たら勉強時間が全然違うので「JavaScriptもちゃんと向き合えば大丈夫、わかるようになる」とデータのおかげで出来ない自分を受け入れることが出来ました。
(受け入れたら、理解が進んだ気がします✨)
また記録していたため「あともう少しやろう」ともモチベーションにもつながっています。


(2)最終課題振り返り

cherry-2020.hatenablog.com

この時の振り返りからの差分で考えたいと思います!

3ヶ月半時点で取り入れたかった知識と、そこから前進したこと

  • 環境変数などのOSの知識
    >>AWSやPAYJPのおかげで少し深まった(ほんの少しだけ)

  • 環境構築、バージョンに対応できる力
    >>未

  • GitHub(イシューを作成したり、ブランチを作って、コミット・プルリクエスト・マージ・プルしたりすることは理解。GitHubを使って他のアプリケーションと連携させることや、コードを公開している人ものを自分に取り入れたり、きっと便利な機能が色々ありそうだけどわからない)
    >>嬉しかったのが「Faker」のGitHubから自分で取り入れたいコードを引っ張ってこれたこと!そして出たエラーについてイシューで良い評価をもらっているところから解決策を見出せたこと。最終課題に入る前と比べると、READMEに書いてある様子(コマンドをうって環境構築するのかな、イシューではみんなで発生した問題共有とその解決法載せているのかな等、目がちょっと慣れた)

  • Herokuなどのデプロイ方法(1回しかやっていなくて口で説明できない)
    >>ログインしたり、マスターに反映させてからデプロイしていくことを理解出来た。あとマイグレーションファイルを変更した時は、Heokuをつけてmigrateなど。

  • README(取扱説明書なので、わかりやすく相手に伝えるには大事だと思うが書き方が理解しきれていない)
    >>全く理解できなかったところから「README」を通して誰に何を伝えたいのかを書くと知れたことが大きかった。

  • リファクタリング(引き出しが少ないため、全体の構造をみてこことここをくっ付ければもっとスマートになるなというレベルに達していない)
    >>ルボコップを知れたのは大きかった。リファクタリング力はまだまだ足りていない。

  • データベースをインポートする力・エクスポートする
    >>未

  • Docker(これは面白そうだからやってみたい)
    >>未


最終課題で新しく学んだこと

  • PAYJPの実装(トークンと秘密・公開鍵を活用して実装する流れを知れた)

  • ActiveHash(今後変わらないであろう都道府県や、発送日数などをデータベースを作らずにデータを取ってこられる実装方法を知れた)

  • フォームオブジェクト(attr_accessorでカラムをキーとして、ひとつのフォームから各データベースに保存する実装を知れた)


最終課題で手こずったこと(自分の知識がまだまだ浅いと感じたところ)

  • DB設計
    >>いざ、テーブルや構図に落とし込むのが難しい!!!と実感。

  • if文(条件分岐を実装するためのビュー・コントローラー)
    >>「ログイン中だったらこうする」「出品者だったらこうする」というようなif文のネストの実装が下手くそだと気づいた。またリファクタリングの観点から「if文のネストは見辛いかな?」と実装と、可読性で悩んだところでもあった。ビューにおけるif文だけでなく、コントローラーにおいてURLを直接入力しても表示されないよう、工夫するのが難しかった。(ビフォーアクション・他のコントローラーをインスタンス変数に定義するタイミング・リダイレクトtoでもまた条件分岐・・・😅笑)

  • ストロングパラメーター(パラムス)
    >>トークン全然運ばせてくれなかった!!しかし、このおかげで、permitmergeの理解が深まったり、フォームオブジェクトとの関連性、コントローラーにおけるPAYJPのプライベートメソッドの定義方法の理解が深まった。

  • ネスト
    >>「商品ありきの関連性の時にはネストする」などルーティングでネストしないといけない時とそうでない時の違いを知れた。(全部関連している?!と思ってしまっていた)

  • リファレンス
    >>マイグレーションファイルに記載するリファレンスキーがかなり重要な役割をしていると感じた。具体的にいうと、「参照」するので、リファレンスさせたいのであれば、それより先に参照先のテーブルを作らないといけないとか、ビューやコントローラーにおいて他のテーブルであっても呼び出せるのはリファレンス設定のおかげなど。


以上です!

カリキュラム通りにコマンドを打ったりコードを書いたりするのではなく、どうやったら実装できるかヒントだけで考えながら書くコードはめちゃくちゃ楽しかったです。

また、プログラミング学習のコツも掴めてきました。
(1)とりあえず手を動かしてコードをかく、コマンド打つ
(2)(新しい概念の時は)ツリー図とマインドマップを組み合わせたような形で紙に書き出して、どういう構造しているんだろうと繋がりをみる(ちょっとでもわからない単語出てきたらぐぐる
(3)ブログでアウトプット
という方法です。
細かい部分は覚えていなくてもこういう繋がりだったと理解につながっている気がします!



(3)これからの優先順位

まずは、この機会に追加実装の中身をざっと確認しました☺️


追加実装の内容(各ミニアプリあり)

  • コメント機能の実装

  • ウィザード形式の実装

  • SNS認証によるログイン機能の実装

  • 複雑な検索機能の実装

  • タグ付機能の実装

  • パンくず機能の実装

  • クレジットカード決済機能(ユーザーに紐付け)

  • エラーメッセージの日本語化(チャットアプリに追加実装)

  • プレビュー機能の実装・複数枚の画像投稿の実装

どれもめっちゃ楽しそうです〜😂笑 (知識の引き出しにしたいものばかり)



そこから決めた優先順位

(1)一通りミニアプリを作って実装方法を理解する(個人アプリのためのインタビュー・DB設計等を並行)
👉12月29日(火)締め切り

(2)個人アプリを作る。
👉1月11日(月)締め切り(基本実装)

(3)(1)で学んだことを「フリマアプリ」あるいは「個人アプリ」に反映させる。
👉1月17日(日)締め切り


注:(3)については、(2)を進めた結果、カリキュラムにない(やったことない実装)を取り入れたい場合、そちら優先でもOKにする。

以上です。


ブログで宣言することによって、やらざる得ない環境を作って進めます💪


読んでくれてありがとうございました!

20201220_アウトプット(AWSのEC2の実装・ユーザーインタビュー案の作成)

アプトプット画像

今日行ったこと 10時間45分

  • AWSのEC2の実装(9時間45分)
    ・Nginx(エンジン・エックス)のインストール、設定
    Capistrano(キャピストラーノ)による自動デプロイ化
    👉無事に自動デプロイ化まで完了✨


* オリジナルアプリのための、ユーザーインタービュー案の作成(1時間)
👉大枠は出来た。



新しい発見

AWSのEC2について

  • ざっくりの流れをアウトプットすると、
    (1)EC2初期設定をする(初回のみ)
    (2)本番環境にデータベースを用意する(MariaDB
    (3)GitHubのクローンを作成してEC2サーバーと連携させる
    (4)アプリケーションサーバーを設定する(unicorn
    (5)Swapファイルによるメモリ容量の拡張
    (6)(GitHubにアップロードできない情報について)環境変数に設定
    (7)Webサーバーの導入(Nginx)
    (8)デプロイの自動化(Capistrano
    を行った。

  • HeorkuとAWS(EC2)のどちらか一つと思っていたけれど、現在の状況としては、Herokuによるデプロイも消していないので、同じアプリケーション(データベースは異なる)が別のサーバー上に存在していることを理解。

  • デプロイ後、購入機能の確認をしたらToken can't be blankというエラーがでた。 👉EC2内にPAYJPに関する秘密鍵と公開鍵を環境変数に設定し忘れていたためエラーが発生していたことを理解。

  • pumaの時と同じようなrails scontrol + Cに代わるコマンドがわからず。exitunicornから抜け、ssh -i 〇〇.pem 〇〇user@ElasticIPでサーバーに接続し、必要に応じてcd /var/www/アプリ名に移動することを理解。

わかりやすかったリンク

公開鍵と秘密鍵の流れがわかりやすかった。 qiita.com

rsa -b 4096って何?(強度の鍵だった) www.ibm.com

ユーザーインタビュー案について

今、こちらを元に作っている(体系的にまとめられていてわかりやすい)

product-development.io

ユーザーインタビューから行おうと思った理由は、

  • ニーズや課題があってのアプリのため。(それをどうやったら解決できるかの気持ちを大事にしたいため。)

  • 自分で仮説はあるものの、その仮説に対する他の人の客観的な視点・考えも取り入れたかったため。

  • 将来、課題やニーズに寄り添って解決策を提案できるようになりたくてプログラマーを目指しているので、その第一歩として実践していこうと考えたため。

年末休みを利用して、アプリ開発を進めたいと思っているので、あまり多くの方にインタビューは出来ないかも知れないが、誰にも聞かないで作るよりも良いアプリが作れると思うので進めていく。

仮説(大枠のみ)
  • (小さなことでもいいので)良い習慣が未来を作るのでは。(”すごい人”というのは、良い習慣の積み重ねによって形成されているのではないか。)

  • なので人生より良くしたい、幸せになりたいと思っている人こそ、他力本願ではなく、1日でも早く自分にとって良い習慣を作れれば、それが最短距離なのではないか。

  • 良い習慣を記録できるアプリケーションを作ることによって、可視化につながり、モチベーションを保つことにも繋がるのでは。(その一助になるのではないか。)

👉習慣を記録(カウント)できるアプリケーションを作りたい。

その仮説に対して、「ユーザーはその課題を本当に抱えているか」聞き出せるようにいくつか質問を考えていた。
(客観的に作るのが難しい・・ついつい自分よりになってしまう)



感想

  • クラウドでサーバー構築」という知識から「大体こんな流れで実装を進める」ところまで理解出来たのが嬉しかった。知識が広がるのは楽しい。

  • しかし、ブログでアウトプットしようとするとかなり時間がかかってしまう(その分頭には定着するけれど)明日仕事なのでもう寝よう💦もうちょっと自分の言葉で流れを話せるようにしたい。

  • メンターさんに聞けるうちに追加実装を進めたいと思いつつ、今日はオリジナルアプリの作成のための案も考えていた。そしたら、夜、銭神さんフォローの通知に気づいた(;ω;)♪タイミングにもびっくり!&嬉しかったです。(本当にありがとうございます!!!)



これから理解したいこと(覚書用)

20201219_アウトプット(AWSのEC2の実装)

アプトプット画像

今日行ったこと 3時間30分

  • AWSのサーバーを利用して、デプロイするためにEC2の実装
    👉EC2の初期設定・データベースの設定・EC2のRailsを起動(手動デプロイ)のところまで完了。



新しい発見

  • Gitからアプリケーションをクローン
  • EC2インスタンス内に配置
  • Unicornを起動する
    上記3つについて進めた。
    詳細について、言語化できるほど落とし込めていないので、続きを明日終わらせてから理解を深めていく。

    感想

  • URLがlocalhost:3000ではなく、Elastic IP アドレスも含めて表示できた時、すごく嬉しかった😍

  • sshのコマンドに対して目が慣れない💦

  • なんとなくAWSのEC2を実装する流れの雰囲気はわかったものの、「なぜ」こうなるのか説明できる部分まで理解できていない。明日はそこを落とし込めるように進めたい!



これから理解したいこと(覚書用)

  • Formオブジェクト(モデルの存在しないデータを更新)


  • エラー解決

  • カラムの追加方法、ロールバック

  • 環境変数(OSの知識)

  • 環境構築、バージョン対応

  • GitHub(他のアプリケーションと連携・自分に取り入れること)APICilent

  • Herokuのデプロイ方法 👉11/15・16学習 50%進む

  • README(DB設計だけでなく、全体について取扱説明書としてどんな風に書くと良いのか)

  • リファクタリング

  • データベースをインポート、エクスポート

  • Docker

  • gimei(Gem)

  • GitHubActions×OpenAPIGenerator(APICilent)

20201218_アウトプット(AWSのS3実装)

アプトプット画像

今日行ったこと 4時間

  • S3の実装(デプロイにHerokuを使っているので、画像を消えないようにするため) 👉実装できた!!!



新しい発見

qiita.com



感想

  • 昨日は勉強時間が確保できなかったので、朝集中できてよかった。

  • そして、ユーザー作り直したらS3へ保存できた😍。仮説があたって嬉しい。

  • メンターさんに確認してもらい「コード等は合っている」ことが分かり、「ユーザー作り直しなのかも(システム障害でリージョン等上手く反映しなかったのかな?)」という仮説を立てることができたので感謝。

  • あとキータでも書いたけど、AWSの設定を他にしていなかったからラッキーだった。(AWS使い込んだ後の、ルートユーザー削除は痛手だと思うため。)

これから理解したいこと(覚書用)

  • Formオブジェクト(モデルの存在しないデータを更新)


  • エラー解決

  • カラムの追加方法、ロールバック

  • 環境変数(OSの知識)

  • 環境構築、バージョン対応

  • GitHub(他のアプリケーションと連携・自分に取り入れること)APICilent

  • Herokuのデプロイ方法 👉11/15・16学習 50%進む

  • README(DB設計だけでなく、全体について取扱説明書としてどんな風に書くと良いのか)

  • リファクタリング

  • データベースをインポート、エクスポート

  • Docker

  • gimei(Gem)

  • GitHubActions×OpenAPIGenerator(APICilent)