初心者がエイリアスの設定でつまづいた話

問題

こちらの記事に従ってエイリアスを設定。しかし、登録したエイリアスをターミナルで実行すると command not foundと表示されてしまった。

環境

  • Mac Mojave 10.14.3
  • Atom 1.29.0
  • PlatformIO IDE Terminal 2.9.1

エイリアスの仕組み

1.エイリアスとは?

ターミナルに入力するコマンドを簡略化することができる。

EX) rails s と入力しなければいけないところを rs と省略できる。

2. エイリアスを設定する手順

1. ~/.bashrcエイリアスを設定

vi ~/.bashrc
alias rs='rails s'
alias mss='mysql.server.start'
:
:

2. ~/.bash_profile から .bashrc を読み込ませる。

vi ~/.bash_profile
source ~/.bashrc

.bash_profile はターミナル起動時に毎回読み込まれる。

.bashrc はターミナル起動時には読み込まれない。

なので、毎回読み込まれる.bash_profile.bashrcsource するように書くことで、ターミナル起動時にエイリアスを利用できるようにしている。

3. .bash_profileを読み込む

source ~/.bash_profile

結果

上に書いた「2−2 ~/.bash_profile から .bashrc を読み込ませる」の部分で間違えていた。

vi ~/.bash_profile とすべきところを、 vi ~/.bash_procfile("c"が余分)と書いてしまって新しいファイルが作成されていた。

学んだこと

最初はAtomのPlatformIO IDE Terminalに問題があるのか?と考えていた。

調べていくうちに、このターミナルはMacBashと同じものだとわかってBashの設定自体に問題があるのかもと思い始めた。

そこでパスが通っていない?、パスを通すってなんだっけ?とか設定ファイルの書き方に問題があるか?と見ていくうちにファイル名の打ち間違いに気づいた。

詰まってしまった時に、実現したいことと何が障害になっているかの仮説を立ててみる。それを紙に書いてひとつずつ検証していくことが大事なのかなと思った。

一つの仮説にこだわりすぎると、全体が見えなくなってしまう。書き間違い気をつけよう。笑

参考にした記事

【初心者向け】エイリアスの設定方法 - Qiita

bash - How to use conda in atom terminal without typing in source ~/.bashrc? - Stack Overflow

What Exactly is Your Shell PATH? – Jalen Davenport – Medium

bash - Where to find the .bashrc file on Mac OS X Snow Leopard and Lion? - Super User

190523 ログイン機能

作りたいもの

190509 アプリの完成イメージ - エンジニアになりたい日記

190517 日記アプリの要件を再考 - エンジニアになりたい日記

本日やること

  • ログイン機能の実装
  • AtomRails-snipetsのインストール

結果

  • <%= %> などERBのタグが入力しやすくなった。

  • URI欄からセッションの作成・削除(ログイン・ログアウト)はできるようになった。

  • ログイン後、Bootstrapで作成したドロップダウンメニューが作動しない。jqueryの読み込みに問題ありかも?
  • と思ったが、いまはViewは作成する必要ないので置いておこう・

Image from Gyazo

追加で必要だと思った機能

  • ユーザが自分の名前を編集・更新する機能
  • 退会機能

190521 ユーザ登録機能

作りたいもの

190509 アプリの完成イメージ - エンジニアになりたい日記

190517 日記アプリの要件を再考 - エンジニアになりたい日記

本日やったこと

1. エイリアスの設定

エイリアスを設定したが、コマンドを入力すると command not found になってしまう。

Atomplatformio-atom-ide-terminal というプラグインでターミナルを起動している。

以下のようにファイルに設定をしている。

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
alias be='bundle exec'
alias mk='touch'
alias rs='rails s'
alias rc='rails c'
alias bi='bundle install'
alias mss='mysql.server start
source ~/.bashrc

ターミナルを起動し、source ~/.bashrc を実行するとエイリアスが使えるようになる。

ターミナル起動時に bash_procfile が読み込まれていないということなのかな??

ここまで調べてメンターに質問をした。

2. ユーザ登録機能の作成

本日の進捗s。基本的にTechAcademyの教科書をそのまま書いている。ViewはModelとControllerを書いた後、まとめて書く予定。

diff --git a/Gemfile b/Gemfile
index 8653cbc..8187c1e 100644
--- a/Gemfile
+++ b/Gemfile
@@ -27,7 +27,7 @@ gem 'jbuilder', '~> 2.5'
 # Use Redis adapter to run Action Cable in production
 # gem 'redis', '~> 4.0'
 # Use ActiveModel has_secure_password
-# gem 'bcrypt', '~> 3.1.7'
+gem 'bcrypt', '~> 3.1.7'
 
 # Use ActiveStorage variant
 # gem 'mini_magick', '~> 4.8'
diff --git a/Gemfile.lock b/Gemfile.lock
index a14fee4..346d842 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -47,6 +47,7 @@ GEM
     archive-zip (0.12.0)
       io-like (~> 0.3.0)
     arel (9.0.0)
+    bcrypt (3.1.12)
     bindex (0.7.0)
     bootsnap (1.4.3)
       msgpack (~> 1.0)
@@ -206,6 +207,7 @@ PLATFORMS
   ruby
 
 DEPENDENCIES
+  bcrypt (~> 3.1.7)
   bootsnap (>= 1.1.0)
   byebug
   capybara (>= 2.15)
diff --git a/app/views/layouts/_error_messages.html.erb b/app/views/layouts/_error_messages.html.erb
index 03f9f05..86ccfda 100644
--- a/app/views/layouts/_error_messages.html.erb
+++ b/app/views/layouts/_error_messages.html.erb
@@ -1,4 +1,4 @@
-<% if model.error.any? %>
+<% if model.errors.any? %>
   <div class="alert alert-warning">
     <ul>
       <% model.errors.full_messages.each do |message| %>
diff --git a/app/views/layouts/_navbar.html.erb b/app/views/layouts/_navbar.html.erb
index 28105d0..1bd74a9 100644
--- a/app/views/layouts/_navbar.html.erb
+++ b/app/views/layouts/_navbar.html.erb
@@ -12,7 +12,7 @@
       </div>
       <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
         <ul class="nav navbar-nav navbar-right">
-          <li><a href="#">Signup</a></li>
+          <li><%= link_to 'Signup', signup_path %></li>
           <li><a href="#">Login</a></li>
         </ul>
       </div>
diff --git a/app/views/toppages/index.html.erb b/app/views/toppages/index.html.erb
index 9fae057..9942b6a 100644
--- a/app/views/toppages/index.html.erb
+++ b/app/views/toppages/index.html.erb
@@ -1,5 +1,6 @@
 <div class="center jumbotron">
   <div class="text-center">
     <h1>Welcome to Cocologue</h1>
+    <%= link_to 'Sign up now!', signup_path, class: 'btn btn-lg btn-primary' %>
   </div>
 </div>
diff --git a/config/routes.rb b/config/routes.rb
index e6ca0bd..eb0fb0f 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,5 +1,10 @@
 Rails.application.routes.draw do
-  get 'toppages/index'
+  get 'users/show'
+  get 'users/new'
+  get 'users/create'
   # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
   root to: 'toppages#index'
+
+  get 'signup', to: 'users#new'
+  resources :users, only: [:show, :new, :create]
 end

190517 日記アプリの要件を再考

今日やること

  • 要件をもう一度考えて文章にする

    闇雲にUserモデル作り始めたけれど、モデルとモデルの関係を整理していなくて、どうすればよいか分からなくなってしまったため。

日記アプリの要件

  • ユーザ登録機能
  • ログイン/ログアウト機能
    • ユーザは自分のリソースのみを閲覧できる
  • 日記一覧機能
    • 年月を選択して閲覧できる
  • 日記投稿機能
    • 日付・本文・気分・症状・活動量・起床時間・就寝時間
    • 必ずしも全てを埋める必要はない。
  • 日記編集機能
  • よかったこと投稿機能
    • よかったことの投稿機能
  • よかったこと一覧機能
  • 症状登録機能
    • よく現れる症状を登録し、ダイアリーに記録する
  • 症状一覧機能
  • 生活記録機能
    • Togglと連携し、1日の時間の使い方を1週間単位で可視化
    • 起床時間・就寝時間・気分・食欲・症状・活動量・歩行距離
  • 体調グラフ機能
    • 月単位の気分・症状・活動量の推移をグラフにし、可視化
    • 歩行距離をiphoneから取得して、反映させる。healthcare apiを使用してなんとかする。

Model

Model Column Data type リソース内容
User name :string ユーザ名
email :string メールアドレス
password_digest :string パスワード
Model Column Data type リソース内容
Diary created_at :datetime 投稿日時
updated_at :datetime 編集日時
content :string 日記本文
woke_up_at :datetime 起床時間(24時間)
slept_at :datetime 就寝時間(24時間)
activity :integer 活動量(5段階)
mood :integer 気分(5段階)
appetite :integer 食欲(5段階)
walking_distance :integer 歩行距離(km)
user_id :integer ユーザID(外部キー)
Model Column Data type リソース内容
Symptom name :string 症状名
user_id :integer ユーザID(外部キー)
Model Column Data type リソース内容
Memory content :string よかったこと
user_id :integer ユーザID(外部キー)
created_at :datetime 投稿日時

リソースの分割

  • ユーザーリソース
    • ユーザ1人に対応するリソース。ユーザが書いた日記や症状、よかったことが入っている。
  • ダイアリーリソース
    • ユーザが作成した日記。投稿日時・更新日時・起床/就寝時間、日記などが入っている。1ユーザが複数のダイアリーをもつ。
  • 症状リソース
    • ユーザが抱える症状。ユーザに紐づいている。
  • 生活記録リソース
    • ユーザの生活リズムを週単位で表現するリソース。ダイアリーリソースの情報も一部転用されている。
  • 体調グラフリソース
    • ユーザの体調の推移を月単位で表現するリソース。ダイアリーで入力された情報を元にグラフを作成して表示する。

参考:『Webを支える技術』

Routing

これをすべて考えたら、コーディングに移れるはず。

190516 Userモデルの作成

本日やること

  • エイアリアスの設定
  • ユーザ登録機能をつくる

エイリアスの設定

こちらの記事を参考に設定

qiita.com

コマンド入力が楽になりました。

Userモデルの作成

ユーザは自分の書いたダイアリーのみ閲覧可能にするので、ルーティングは :show, :new, :createのみにする。

Rails.application.routes.draw do
  root to: 'toppages#index'

  get 'signup', to: 'users#new'
  resources :users, only: [:show, :new, :create]
end

わからないこと

ルーティングをどのように設定すれば良いか。

ユーザがログインした後に日記の一覧を表示したい。

f:id:xsatsukix:20190509162650p:plain
ユーザログイン後、日記一覧ページに遷移させたい。

その際にURLをどう書けば良いか?

→いろんなサービスのURLを見てみる?

190509 アプリの完成イメージ

本日やったこと。

- 完成イメージをざっと説明。 (完了)
- Model作成、Railsコンソールで操作してみる。→次回へ持ち越し

ページ一覧

  • トップページ(アプリの説明)

  • 新規登録/ログインページ

  • ダイアリー一覧ページ(ログイン後のトップ)

  • ダイアリー新規登録ページ

  • 症状登録ページ

  • 症状一覧ページ

  • 体調グラフページ

完成イメージ

f:id:xsatsukix:20190509172840p:plain:w300
ダイアリー一覧ページ
f:id:xsatsukix:20190509172835p:plain:w300
ダイアリー新規投稿ページ
f:id:xsatsukix:20190509174215p:plain:w300
症状登録ページ
f:id:xsatsukix:20190509172830p:plain:w300
症状一覧ページ
f:id:xsatsukix:20190509172819p:plain:w300
体調・生活記録ページ

気づいたこと

ダイアリー、症状の編集ページが必要。