初心者からのエンジニア日記

2020年6月末~TECH::CAMPにて本格的にプログラミング学習を開始。 販売職/店長を経て、駆け出しエンジニアの道へ一歩踏み出しました! 様々なアウトプットをしていきたいと思います! HTML/CSS,Ruby,Ruby on Rails,Java Script,jQuery,Haml/Scss,GitHub...

【Ruby】正規表現

本日は正規表現についてまとめました!

 

 

正規表現とは

文字列に特定の文字が含まれているかを確認する事や、

特定の文字を取り除く等の操作を行うための技術のこと。

例えば「入力された電話番号のハイフンを取り除く」や

「パスワードに英数字○文字以上」の制約を設定する時に使います。

 

特徴

・文字列の一部分を置換

 例えば、電話番号のハイフンをから文字に置換することで

 異なるフォーマットの文字列を同一フォーマットに変換できる!

・文字列が制約を満たしているか調べる

 ユーザ登録の際に設定するパスワードにおいて8文字以上という

 制約をつけたい時にも正規表現を用いて実装できる!

・文字列の一部分を抽出する

 入力されたメールアドレスからドメイン部分のみ抽出したい時等に使用!

 

正規表現を実現する2つのメソッド

・subメソッド

 文字列の指定した部分を別の文字列に置き換える。

 第一引数に置き換えたい文字列、

 第二引数に変換後の文字列を指定。

 操作したい文字列は「/」で囲む。

 ※JSでは同じ機能を持つメソッドしてreplaceメソッドがある。

・matchメソッド

 引数に指定した文字列がレシーバの文字列に含まれているか否かを

 チェックするためのメソッド。

 含まれている→指定した文字列がMatchDataオブジェクトの

        返り値として得られる。 #<MatchData "〇〇">

 含まれていない→返り値としてnilが得られる。

 

MatchDataオブジェクト

マッチした文字列等はMatchDataオブジェクトで返される。

MatchDataオブジェクトから文字列等を取り出す時、

配列からデータを取り出す時と同様に取り出せる。

irb(main):001:0> str = "Hello, World"
=> "Hello, World"

irb(main):002:0> md = str.match(/Hello/)
=> #<MatchData "Hello">

irb(main):003:0> md[0]
=> "Hello"

 

 

電話番号のハイフンを取り除く

特定の文字列を取り除く、つまり「特定の文字をから文字に置換する」

という考え方。

subメソッドでは最初のハイフンしか置換されないので。

gsubメソッドを使う。

irb(main):001:0> tel = '090-1234-5678'
=> "090-1234-5678"

irb(main):002:0> tel.sub(/-/,'')
=> "0901234-5678"
# 最初のハイフンしか置換されない

irb(main):003:0> tel.gsub(/-/,'')
=> "09012345678"

※gsubのgはグローバルマッチの「g

 文字列内で指定した文字が複数含まれている場合、

 「その全てを置換する」という意味になる。

 

 

パスワードに英数字8文字以上という制約を設定

irb(main):001:0> pass = 'Hoge1234'
=> "Hoge1234"

irb(main):002:0> pass.match(/[a-z\d]{8,}/i)
=> #<MatchData "Hoge1234">

[a-z]‥‥‥角カッコに囲まれた文字のいずれか1個にマッチ

\d‥‥‥数字にマッチ

{ n,  m }‥‥‥直前の文字が少なくともn回、多くてもm回出現するものにマッチ

i‥‥‥大文字・小文字を区別しない検索

 

実践的な利用例

pass = 'Hoge1234'
if pass.match(/[a-z\d]{8,}/i)
  //パスワード設定の処理
else
   puts 'パスワードの形式が間違っています。'
end

 

 

メールアドレスからドメイン部分のみ抽出

irb(main):001:0> mail = 'hoge@hoge.com'
=> "hoge@hoge.com"

irb(main):002:0> mail.match(/@.+/)
=> #<MatchData "@hoge.com">

.  ‥‥‥どの1文字にもマッチ

+‥‥‥直前の文字の1回以上の繰り返しにマッチ

 

.+」は何かしらの文字が1回以上繰り返すものにマッチする

@.+」で「@から始まり何かしらの文字が1回以上繰り返すものにマッチ」

という意味になる。

よってメールアドレスからドメイン部分のみを抽出できる。

 

メールアドレスにバリデーションをかける時の記述例

validates :email, uniqueness: {case_sensitive: false}, format: {with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i , message:"メールアドレスを正しく入力してください"}

 

【Heroku】git push がrejectされる時の対処法

% git push heroku master

が通らない時の対処法

 

 

①プルする

% git pull

②リモートの変更をマージ

% git fetch
% git merge origin/master

③リモートの変更後、自分の変更を持ってくる

% git fetch
% git rebase origin/master

 

 

 

ちなみに以下は他の場面で役立ったコマンドです.。

 

heroku(本番環境)でのマイグレーション

% heroku run rails db:migrate

 

 

 

 

 

 

参考記事

https://www.softel.co.jp/blogs/tech/archives/3569

 

【Rails】Heroku 本番環境での環境設定

Herokuの無料版は一定時間で画像が消えていくため、

画像を保存するためのストレージが必要です。

以前S3を使用していたので、今回はそれを使い回す事にしました!

 

ローカル環境設定をサクサク進みそういえば本番環境は?となった時、

Herokuめちゃくちゃ簡単に設定できちゃう事に気付いてしまった・・・

 

手順

①herokuのサイトを開き、ログインする

②本番環境の環境設定をしたいダッシュボードを選択

③Settingを選択

④Config Varsの右側にあるReveal Config Varsをクリック

f:id:ym_programming:20200827235020p:plain

⑤KEYに「AWS_ACCESS_KEY_ID」、VALUEに該当のIDを記入→Addで追加

⑥「AWS_SECRET_ACCESS_KEY」も同様にAddで追加

 

これで終わり!

本番環境で反映されていれば、

本番環境での投稿画像がS3に反映されるはずです!

 

ちなみにうまくKEYが入っていない時に

画面自体表示されないエラーが出たのですが、

ターミナルで

% heroku run rails c

を実行するとエラーを吐き出してくれました。

 

 

TECH CAMP短期コースを受講して

TECHCAMPは、右も左もわからない人に

1本の道標を描いてくれる場所

 

 

 

こんにちは!

本日は

「TECH CAMP短期コース」

を約2ヶ月間受講した率直な感想を書いていこうと思います!

 

 

私は2020年6月末からの受講期で、ちょうどコロナ感染が拡大してきた頃です。

教室利用は週2回に制限され、技術的な質問は全てオンラインでした。

 

チーム開発がスタートするまでは教室利用なしで十分に学べましたが、

やはりチーム開発がスタートするとコミュニケーションが大切になってきます。

※※※私たちの受講期で最終課題のチーム開発は終了

週2回だけでも教室利用が出来たこと、

チーム開発に携われたことはとても大きな経験となりました。

今後チーム開発がなくなるのは、とても残念に思います。

 

 

TECH CAMPのいいところ

①仲間がいること

個人学習中もチームでアウトプットをしたり、共に学べる仲間がいます。

焦りや励みが自分の力になります。

当たり前ですが、どこまでやり切れるかは自分次第です。

 

②わからないことは質問できる

多くのメンター(技術面のサポーター)が所属しており、

オンラインで質問ができます。

学習中、何度も助けていただきました。

質問の際にはプログラミング学習の仕方や質問の仕方、

それによって自分の理解できていない部分をどう掘り下げていくのかも

教えていただきました。

 

 

TECH CAMPで苦労したところ

①メンターの技術力に差がある

学習内容が応用編になってくると、質問にうまく答えられない方もいます。

私はまだ駆け出しではありますが、

学習をしているとそれも仕方ないという事もよくわかる一方で、

やはり高いお金を払っている以上、技術力の高さは求めてしまいます。

 

②メンターから間違った答えをもらう事もある

別のメンターのアドバイス通りにやっていると結局実装できず、

他のメンターに再度質問すると「それは違いますね」と言われた事があります。

その気付きもまた一つの学習ではありますが・・・泣

 

 

TECH CAMP受講前におすすめすること

Progateかドットインストールをある程度勉強することをおすすめします。

正直なところカリキュラムの説明文を読んだだけでは分からなかっただろうな・・・

と思った事があります。

しかし、決してTECHCAMPのカリキュラムが良くないということではなく、

知識量を増やすために様々なサービスを利用して知識の幅を広げていくのが

大切だということです。

カリキュラム修了後、プログラミング言語の復習も兼ねて

またドットインストールをやってみようと思っています。

 

 

 

 

TECHCAMPの広告で

独学の限界を感じたら!」と言うキャッチコピーを耳にします。

独学の限界とは、

・学習を続けていくメンタル

・技術的な問題に直面した時の打開策が見つからない

主にこの2点だと感じます。

 

再度言いますが、

結局のところ自分でどこまでやり切るかです。

毎日約10時間の学習を2ヶ月ほど続けTECHCAMPを卒業しても

まだスタート地点に立ったに過ぎません。

 

これからはこの経験を活かしつつ

エンジニアとしての技術力をどこまで高められるか・・・

常に自分との戦いです。

私は「土日も休まず学習したこの2ヶ月間が今後もずっと続くかもしれない

と考えても苦痛ではありません。

それだけの覚悟を持ってやっています。

・・・

なんて偉そうに言いましたが、まだまだ自分の理解不足にガッカリする毎日です。

 

自分を奮い立たせながら、これからも学習がんばっていきます。

 

結論!!!!

TECHCAMPに感謝です!!!

(オチなし!)

 

【GitHub】画像ファイルをpushしてしまった場合の対処法

画像をGitHub管理下から外したい場合、

ターミナルで以下のコマンドを実行することでファイルを削除できます。

 

% git rm --cached -r ディレクトリ名

例:% git rm --cached -r public/uploads

 

本来でしたら.gitignoreに「public/uploads/*」の記述をしておけば

画像ファイルは無視されるようになるのですが、

記述以前のアップロードはGitHubに反映されてしまいます。

 

ちなみにpush前に画像の存在に気づいた場合

GitHubDesktopで該当の画像を2本指クリックし

Discard Changes...」を選択後「Discard Changes」をクリックすると

修正中の内容を1つずつ取り消せます。

 

「changed files」の部分を2本指クリックすると「Discard All Changes...

を選択することもできますが、目的のファイル以外を消さないように

お気をつけください・・・。

 

【Rails】localhostが起動しない時の解決法

度々起こるlocalhostが起動しないエラーの対処法について

 

今回発生したエラー

...address already in use - bind(2) for "000.0.0.1" port 3000...

localhostのポートが既に使われている・・・!?

 

 

手順

①ポート3000番のプロセス確認

% lsof -i:3000

プロセスが2つ・・・

COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME

ruby    44140  username   19u  IPv4 0xd79f7cb039492335      0t0  TCP localhost:hbci (LISTEN)

ruby    44140  username   20u  IPv6 0xd79f7cb02bc38b45      0t0  TCP localhost:hbci (LISTEN)

 

②killコマンドで実行中のプロセスを削除

kill -9 44140

 

rails sコマンドでサーバー接続

 

 

以上!

 

【Rails】レンダリング時のビュー崩れを一瞬で解決!

バリデーションを設定し、

画像と名前が空の状態で投稿ができないようにした。

 

posts_controller.rb

def create
  @post = Post.create(post_params)
  if @post.save
    redirect_to "/", notice: "投稿を保存しました"
  else
    flash.now[:alert] = "画像と名前を入力してください"
    render :new
  end

 

しかしrenderメソッドで部分テンプレートを呼び出すと

ビュー崩れが起こる。

 

原因

検証ツールで確認すると、

部分テンプレート呼び出し後に問題の起こったclassが

field_with_errorsというクラス名のdivタグで囲まれていた。

 

 解決策①

ビュー崩れを起こすCSSファイルに以下の記述を追加する。

.field_with_errors {
  display: contents;
}

 

解決策②

field_with_errorsクラスが自動挿入されないように以下を記述する。

config/application.rb

module SampleApp
  class Application &lt; Rails::Application
          # 省略
    config.action_view.field_error_proc = Proc.new { |html_tag, instance| html_tag }
  end
end

サーバーを再起動するとビュー崩れがなくなる。

 

解説

バリデーションエラーを表示させる際にエラーが起こったのは、Railsが元より

エラーメッセージを含むフィールドを

自動的にfield_with_errorsクラスを持つdivタグで囲むためです。

 

 

以上!

少しでも参考になれば幸いです!

 

 

参考URL

https://yukimasablog.com/rails-field-with-errors