ポリモーフィズムについて

ざっくり言うと、呼び出す側のオブジェクトによって実行される同名メソッドの振る舞いが変わること。 文字だけでは理解が困難だと思うので、例をあげます。

class Human
  attr_reader :language
    
  def initialize(language)
      @language = language
  end

  def language_name
    puts "My language is #{@language}"
  end
end

# Humanを継承したクラス
class Japanese < Human
  def language_name
    puts "私の話す言語は #{@language} です。"
  end
end

human = Human.new('English')
japanese = Japanese.new('日本語')
human.language_name
japanese.language_name

実行結果は

My language is English 私の話す言語は 日本語 です。

同じメソッドを呼び出しているけれども、レシーバーによって実行結果が異なることを確認できました!

参考

http://masa.o.oo7.jp/ruby/ruby2.htm#chap5

メモの魔力

僕の解釈込みで記述

メモの目的

記録ではなく、知的生産(事実からの気づきをアイデア化)

  • イデアを生み出せるようになる
  • 情報感度が上がる(素通りしなくなる)
  • 傾聴能力の向上
  • 話の構造を把握できるようになる(今どの部分の話している?が理解できる)
  • 言語化能力の向上

メモはノートを使う

  • 見開き半分は事実を描き、他半分は抽象化と転用を半々で記述する

ペンは四色ボールペンを使う

自己を知ることの大切さ

リーダブルコードまとめ

リーダブルコードまとめ

変数名

  • 上限下限を表す時はmax, minなどを使用
  • 範囲であればfirst, lastを使用

コードの形態

  • 同じような処理を行っている部分はシルエットが同じようになるようにする
  • 意味のある順番を選んでそれを守る
  • 空行を使ってコードを意味のあるまとまりに分割する
  • 列を整列する

コメント

  • コードからすぐにわかることをコメントに書かない
  • コードをみて疑問に思うこと、気をつけることをコメントにする
  • 具体的かつ適切な言葉を選ぶ

制御フローについて

  • 口語で読み下せるように条件を記述する(ex.もし18以上なら)
  • 変化する値を左に、安定した値を右に書く
  • 制御フロー変数を使わずに書く。

巨大な式を分割する

  • 条件分岐の条件が一目でわかるように説明変数を用意する

rubyのversionが切り替わらなくて小一時間悩んだ話

題名の通りruby 2.6.5をrbenv経由でinstallし、rbenv global 2.6.5をしたところpathはあっているはずなのに切り替わらない。。。

 

原因はなんだ。。。と考え色々ためしたところ、User/ゆーざー名/.ruby-versionが原因だった。

 

rm .ruby-versionで解決。

 

Reactの基本学習

仕事でreactを使用する事になったので、インフラの勉強と並行してこちらも手をつける。

 

基本構文

import React from "react";

class App extends React.Component {
ここにJSを書く
constructorを書く(stateの処理)
methodを定義する。
render() {
return(

jsx部分を記述する。

    );

  }
}

 

どうやらjsとjsx(htmlと同じような感じで記述する)を同時に記述できるような感じっぽい。

 

jsで動きをつけるためのイベントとstateについて

 

イベントはクリックとかで、記述した処理を着火させる。

ex)

<button onClick={() => {処理}}>

 

stateはイベントで着火させたものの処理を書く。

ex)

下準備としてstateを準備する。

constructor(props) {
super(props);

this.state = {name: "hogehoge" }
}

以上で準備完了。

<h1> こんにちは、{ this.state.name } さん。</h1>

<button onClick={() => {console.log({name: "こんにちはhogehoge"})}}>hogehoge</button>

 

流れとしては、下準備して、表示させる部分を書いて、変更の記述をする流れ。

 

忘れてた事

constructor()について
rubyでいうinitializeみたいな感じ。

インスタンスを生成するときに実行される。
引数を指定する事で、それをconstructorの中で使用できる。

参考:progate

deviseの導入について

インフラの勉強と並行して、現在は自分だけで使用している業務効率化アプリを職場の人も使えるように改善をしようと思う。

仕様については割愛するが、ユーザー毎に管理したい情報がありユーザ登録が必要になるので、deviseを使用して導入する。

 

deviseの使用方法

1gem 'devise'をbundle install
2.bundle exec rails g devise:install
これで設定を記述するconfig/initializers/devese.rbと言語設定のlocalesファイルがインストールされる。

以下が出力される。

===============================================================================

Some setup you must do manually if you haven't yet:

1. Ensure you have defined default url options in your environments files. Here
is an example of default_url_options appropriate for a development environment
in config/environments/development.rb:

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

In production, :host should be set to the actual host of your application.

2. Ensure you have defined root_url to *something* in your config/routes.rb.
For example:

root to: "home#index"

3. Ensure you have flash messages in app/views/layouts/application.html.erb.
For example:

<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>

4. You can copy Devise views (for customization) to your app by running:

rails g devise:views

===============================================================================

 

今回userモデルを作成する目的はuser毎に情報を管理することなので、メーラーやパスワード再設定は導入しない。
ということで、ここからやることは、rootingの設定とflashの設定、modelを作成、viewを作成する。

3.bundle exec rails g devise user

これでroutesの設定とモデル、migration fileが作成される。
作成されたmigrationファイルから必要なもののコメントを外し、rails db:migrateする。

 

4bundle exec rails g devise:views

これでdeviseのviewファイルを一括コピーする.

5viewをslim変換し、日本語化対応する

gem 'devise-i18n'
gem 'devise-i18n-views'
gem 'devise-bootstrap-views'

以上のgemをbundleする。

bundle exec rails generate devise:views:bootstrap_templates

コマンドを叩きviewをbootstrap対応させる。

for file in app/views/devise/**/*.erb; do erb2slim $file ${file%erb}slim && rm $file; done

コマンドを叩き、erbファイルを、slim変換し重複を除去する。

 

次に日本語化対応をする。
$ rails generate devise:views:locale ja
でconfig/localesにdevice.views.ja.ymlが作成される。

その後、config/application.rbに

config.i18n.default_locale = :ja

を追記し、サーバー再起動後、確認すると日本語化されている。
しかし完全な日本語化はされないので、devise専用のjaファイルだけでなくアプリ全体に使用できるファイルを入れておく。

curl -s https://raw.githubusercontent.com/svenfuchs/rails-i18n/master/rails/locale/ja.yml -o config/locales/ja.yml

これでconfig/locales/ja.ymlがインストールされる。

 

ざっくりこんな感じで日本語化対応でlogin機能が作れるんでは?と思う。

 

rubymineショートカット
command+f ファイル内検索

参考:

github.com

 

qiita.com

suin.io

morizyun.github.io

素人サーバー構築10(自分のアプリデプロイの流れ)

なんとなく流れとAWSの基礎の使用方法がわかってきたので、実際に自分のアプリのデプロイを考えてみる。

 

自分のrailsアプリデプロイの流れ(計画)

VPCの作成、サブネットの作成、internet gete wayの作成、ルートテーブルの作成、セキュリティグループの作成。

2EC2を作成、EIPをEC2と紐付ける。

3EC2上で設定とRuby環境構築を行う。

4gitとの連携、SSH認証を行い、git clone

5 UnicornとNginxを導入、設定する。

6 route53で独自ドメインIPアドレスを紐づける

 

現状抱える問題点
capistranoがかなり複雑。
今回のdeployで使用するかどうか。。

今回の簡易なものには、あまり必要ないかもしれないが、もう少し理解を深めたい。

これを使えば、コマンド一つでデプロイ、更新に対応してくれるとのことで、実務には必須なのでは?と考えられるため。

ただ。。。難しいwww
めちゃめちゃハマりそうだ。。。

 

大切な豆知識

リクエストから実際のレスポンスまでの流れ

以前も書いたけど復習がてら。
1HTTPリクエス
2webサーバからAPサーバーにいく
3APサーバーとアプリは直接通信不可なので、Rackサーバーが翻訳しアプリと通信
4レスポンスがかえる。

Unicornとは?

APサーバーの一種。
アプリ本体を格納するためのもの。

Nginxとは? 

webサーバーの一種。

参考:

www.udemy.com

 

この記事の著者の方のデプロイの記事は五部作なのですが、かなり参考にさせていただきました。

qiita.com