ポリモーフィズムについて
ざっくり言うと、呼び出す側のオブジェクトによって実行される同名メソッドの振る舞いが変わること。 文字だけでは理解が困難だと思うので、例をあげます。
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 私の話す言語は 日本語 です。
同じメソッドを呼び出しているけれども、レシーバーによって実行結果が異なることを確認できました!
参考
リーダブルコードまとめ
リーダブルコードまとめ
変数名
- 上限下限を表す時はmax, minなどを使用
- 範囲であればfirst, lastを使用
コードの形態
- 同じような処理を行っている部分はシルエットが同じようになるようにする
- 意味のある順番を選んでそれを守る
- 空行を使ってコードを意味のあるまとまりに分割する
- 列を整列する
コメント
- コードからすぐにわかることをコメントに書かない
- コードをみて疑問に思うこと、気をつけることをコメントにする
- 具体的かつ適切な言葉を選ぶ
制御フローについて
- 口語で読み下せるように条件を記述する(ex.もし18以上なら)
- 変化する値を左に、安定した値を右に書く
- 制御フロー変数を使わずに書く。
巨大な式を分割する
- 条件分岐の条件が一目でわかるように説明変数を用意する
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 ファイル内検索
参考:
素人サーバー構築10(自分のアプリデプロイの流れ)
なんとなく流れとAWSの基礎の使用方法がわかってきたので、実際に自分のアプリのデプロイを考えてみる。
自分のrailsアプリデプロイの流れ(計画)
1VPCの作成、サブネットの作成、internet gete wayの作成、ルートテーブルの作成、セキュリティグループの作成。
2EC2を作成、EIPをEC2と紐付ける。
3EC2上で設定とRuby環境構築を行う。
4gitとの連携、SSH認証を行い、git clone
5 UnicornとNginxを導入、設定する。
現状抱える問題点
capistranoがかなり複雑。
今回のdeployで使用するかどうか。。
今回の簡易なものには、あまり必要ないかもしれないが、もう少し理解を深めたい。
これを使えば、コマンド一つでデプロイ、更新に対応してくれるとのことで、実務には必須なのでは?と考えられるため。
ただ。。。難しいwww
めちゃめちゃハマりそうだ。。。
大切な豆知識
リクエストから実際のレスポンスまでの流れ
以前も書いたけど復習がてら。
1HTTPリクエスト
2webサーバからAPサーバーにいく
3APサーバーとアプリは直接通信不可なので、Rackサーバーが翻訳しアプリと通信
4レスポンスがかえる。
Unicornとは?
APサーバーの一種。
アプリ本体を格納するためのもの。
Nginxとは?
webサーバーの一種。
参考:
この記事の著者の方のデプロイの記事は五部作なのですが、かなり参考にさせていただきました。