Ruby入門アウトプット

10/1からwebアプリの自社サービス開発企業に入社しました。

使用言語はrubyで、実際のソースコードを見たところ自分の力不足を痛感したので、Ruby入門(チェリー本)を学習することに決めました。
本日から何回かにかけて、知識をアウトプットしていきます。

・変数名・メソッド名は、スネークケース

・ダブルコーテーションは、改行文字、式展開が可能。改行文字などの機能を打ち消すには、バックスラッシュをつける。ダブルクオートを使う必然性がないなら、シングルコーテーションを使った方が良い。

・1_000_000_000 は、 1000000000と同じ。

・false, nil以外は、true

・後置if

・returnを使わなくても、最後の結果が返される。途中で値を返したいときは、明示的にreturn をつかう

・引数のないメソッドは、()を省略できる。

・%q!文字列!は、'文字列'と同じ。!は、両端が対応していれば、なんでもOK

・%q!!文字列!!は、”文字列”

・ヒアドキュメント <<識別詞 文字列識別詞  文字列の改行はそのまま出力される。

・フォーマット文字列:sprintf('%0.3f +%0.3f', 1.2, 0.48)これは、小数点以下三桁にして計算を行うということ。

・[a,b,c].join これはabc

・0b:2進数   0:8進数   0x:16進数

・2e-3:2 * 10^-3

・条件式は、判定が途中で完了すると、それ以降は処理されない。
    nil || false || 2 || 3 この場合、2でtrueが確定するので、3は処理されない。

・user = nil || tanaka || suzuki これはtanakaになる

・user.valid? && 処理  user.validがfalseなら処理は実行されない。

・user.valid? || 処理  user.validがtrueなら処理は実行されない。

・and or not は、&& || ! と同じ意味だが、処理の優先順位が低いため、結果が同じになるとは限らないので、注意が必要。

・処理 unless 条件 条件がfalseなら処理が実行される。

・case文
case 変数
when '~~~'
    処理
else
    処理
end 

when '~~', '~~'と書くと、~~または~~

message = 
    case 文
のようにすると、mesageに値を代入できる。

then を使うと、一行で書くことができる。
case ~
when ~ then 処理

・式 ? 真の時の処理 : 偽の時の処理

・真偽値を返すメソッドは、最後に?をつける。

・!で終わるメソッドは、取扱注意!
    upcase これは元の文字列は、変更されない。
 upcase!    こちらは、元の文字列ごと大文字に変化される。

・self  自身

・__FILE__  現在のファイル名

・__LINE__  現在の行番号

・__ENCODING__  現在のスクリプトエンコーディング

・変数.object_id  変数の参照先

・gemライブラリを使うときは、require 'ライブラリ名'と書く。
 ライブラリ名の拡張子は省略可(loadの場合は省略できない。)

・puts :改行を付して、変数の中身や戻り値を返す。

・print:改行を付さない

・p:改行を付す

・print, p は配列を形式で出力

 

テスト

・クラス名にはTestをつける

・ファイル名はスネークケース。クラスメイト同じにする。

・assert_equal 期待する値 テスト対象の値や式

Rspecは、gemのインストールが必要

 

配列

・a = [1,2,3]
    a[4] = 10
    aは[1,2,3,nil,10]

・a, b = [1,2]
    これはa=1, b=2と同じ

・c,d = [4]
    これはc=4, d=nil

・a.delete_if do |n|
        n.odd?
    end
    aから奇数を消す。

・処理が一行なら、一行にまとめることができる。

numbers.each{|n| sum += n}

・mapメソッド
 numbers = [1,2,3,4,5]
    new_numbers = numbers.map{|n| n*10}
    new_numbersは[10,20,30,40,50]

・selectメソッド
    numbers.select{|n| n.even?}
    nが偶数のもののみ取り出す。

rejectメソッド
    selecrtメソッドの逆

・findメソッド
 最初に該当したものを返す。

・injectメソッド
    numbers.inject(0){|result, n| result + n}
    ()内はresultの初期値。result + nの結果がresultに代入される。

・&と:
.map{|s| s.upcase}と[].map(&:upcase)は同じ

・0..5  0以上5以下
・0...5 0以上5未満

・splat展開
 [*1..5]これは[1,2,3,4,5]

・(1..10).step(2){|n| numbers << n}  numbersという配列に、一つ飛ばしに格納する[1,3,5,7,9]

・数字.to_s(16) 16進数に変換

・'0'.rjust(5, '_') これは、____5

9-26アウトプット

 

1.Docker
docker search キーワード:イメージの検索。-f "stars=50"のようにオプションをつけると条件を指定できる。
docker pull タグ名:イメージを利用する時に自動でダウンロードされるが、手動で行うこともできる。
docker image ls:ローカルのイメージ一覧
docker image inspect イメージ:イメージの詳細
docker image rm イメージ:イメージの削除
docker container prune -f:コンテナの削除。コンテナが存在するとイメージを消せない。
docker image prune -f:名前のないイメージの削除。-aオプションをつけると、使われていないイメージを削除。

イメージの作成手順(例:python)
docker container run --name base -it -p 8080:80 python bash:名前がbaseのコンテナを起動。コンテナにシェルでログイン。
pip install flask==1.1.1:flaskのインストール
docker container cp ホストのファイル base:コピー先の絶対パス:ファイルのアップロード
ctrl Cでサーバーを止め、exitでコンテナを停止。
docker container commit コンテナ名 イメージ名:コンテナをイメージ化
docker image history:コンテナの変更履歴。
コンテナは2回目以降、差分を適用していくイメージ。

Dockerfileの中身について
  From :ベースとなるイメージ。(Pythonなど)
  Label:表示情報。(開発者など)
  RUN :実行コマンド
  COPY:ファイルをコピーして配置
  ENV:環境変数のデフォルト値。
  CMD:コンテナ起動時の実行コマンド。[〜,〜,〜,〜]のように配列で書くのが一般的

docker iamge build -t イメージ名 Dockerのファイルパス

 

2.Ruby on Rails チュートリアル
 rails db:migrate:reset   drop,create,migrateを一気にする。
   モデル.create     DBに保存し、永続化
   モデル.build        関連するモデルを生成する時に使う。現在は、newでも同じだが、慣習的に使われている。 

Ruby on Rails チュートリアル

 

9-25アウトプット

 

1.Docker
コンテナ:OSレベルでパッケージングしたもの。
Docker:コンテナを使いやすくするためのソフトウェア。

・コマンド
docker container run イメージ名:コンテナ作成
docker container run -p 8080:80 nginx:ホスト(8080)へのアクセスをコンテナ(80)へ流す。
docker container run --name コンテナ名 -d -p 8080:80 nginx:バージョン:--nameでコンテナ名を指定。またコンテナ毎に異なるバージョンを指定できる。
docker container ls:起動中コンテナ一覧
docker container stop コンテナ名:コンテナの停止
docker container inspect コンテナ名:コンテナの詳細
docker container rm コンテナ名:コンテナの破棄
docker container prune -f rm コンテナ名:confirmなしで削除
コンテナはイメージから作成し立ち上げた後、止めるのであれば削除しまたイメージから作成するのが良いとのこと。そのため、起動の際に
--rmオプションをつけると、停止させた際に自動で削除をしてくれるのでおすすめ。また、-dオプションを使うと、バックグラウンドで起動してくれる。
バックグラウンドのコンテナに入るには、
docker container attach コンテナ名
を実行。つけ忘れたときは、ctrl + PQでバックグラウンド実行にすることが可。
docker container exec コンテナ名 コマンド:実行中コンテナで、コマンド実行。ログなどをファイルに書き込もうとすると、ホストに書き込みがされてしまう。
docker container exec コンテナ名 sh -c "コマンド":コンテナのファイルに対して操作できたりする。

docker container logs:コンテナのログを出力。-fオプションをつけるとリアルタイムで出力される。
docker container stats --no-stream:使用率などの統計情報出力。--no-streamをつけると、結果がすぐに出力される。

 

2.Ruby on Rails チュートリアル
 attr_accessor:javaなどで言う、getter, setterにアクセスするイメージ。
 update_attribute:validateされない。
    update_attributes:validateされる。複数カラムの更新が可能。updateみたいなイメージ。
    update_columns:validateされない。updated_atを更新しない。

    hidden_field_tag  :値を受け取るときは、params[:カラム名]
 form.hidden_field:値を受け取るときは、params[:モデル名][:カラム名]

Ruby on Rails チュートリアル

 

4.読書
 アウトプット大全
    ・長期記憶:脳に重要な情報と思わせるために、知識を使う(2〜3回)ことにより可能
 ・インプットは脳内世界を変え、アウトプットは現実世界を変える。
    ・定着の目安は、5分で人に説明ができること。
 ・インプット4、アウトプット6からはじめ、理想はインプット3、アウトプット7
 ・成長には、「短所克服」「長所伸展」がある。上級者は前者、初心者は後者の方が良い。
 ・アウトプットしているときの「なぜ」は必ず調べる。そうすることで、人に質問する時に深い質問ができるようになる。

 

4.win-win
交渉は勝負ではない。
公的な成功は、効果的な人間関係を築くこと。深く聞くことが大事。
自分のwinを伝える勇気と相手にwinを与える思いやり。これができないなら、取引をしないことで関係を維持させる。
幸せの量は一定ではなく、作り出すことができる。
信頼口座を増やす!(思いやりや約束事を守るなど) 

5.理解に徹し、理解される
人は話すことに快楽を覚える。心を開くことができれば、課題に対して自己解決ができる。
聞くためには、「相手を理解したい」という気持ちが大切。その上で共感による傾聴をする。(キーワードを繰り返す。自分の言葉で言い換える。相手の感情を自分の言葉で表す。)

6.シナジーを創り出す
相手との相違点をぶつけ合うことで、より優れたものが出来上がる。
そのためにも、育ってきた環境などが違うのだから、お互い違って当たり前という認識を持つ。むしろ、複数の考えが合わさることで大きな成果を得られる。
能力以上の結果はでない。結果に急ぐな。結果が欲しければ、自分を高めよ。

7.刃を研ぐ
1~6の習慣を常に実践する。1日一歩ずつ成長することで、素晴らしい人間となれる。
肉体、精神、知性、繋がりをバランスよく鍛えていく。

8.内面の声を発見する
自分とは何者か。。。

 

9-24アウトプット

本日からアウトプットのために、ブログを書きます。
日々学習していたのですが、アウトプットを全くせず、知識が定着してるのか疑問だったからです。
アウトプットの内容は、詳細にするととんでもない量になるので、ざっくり書き出しています。
使用している教材やサイトは、リンクを貼っているので是非ご覧ください。

書籍はほんとにコスパがいいと思います。
人に直接教わると、何十倍もお金がかかるからです。
先月までプログラミングスクールに通っていました。費用は63万です。
それに比べて書籍は数千円で購入し、知識を得られます。自己投資のためにお金を惜しむなとはよく聞きますが、本当にその通りだと思います。今後もガンガン投資して、知識をインプット、アウトプットしていきます!

前置きが長くなりましたので、早速いきましょう!!

1.Docker
・ネットワーク作成コマンド
 docker network create ネットワーク名

・ネットワーク一覧
    docker network ls
 bridge, host, noneはdefaultで用意されているネットワーク

・ネットワーク削除
 docker network rm ネットワーク名

・データ永続化
 - Bind
  コンテナとホストを同期する。パスを指定する必要がある。
    - Volume
  ストレージ領域を作り、コンテナにマウント(名前管理)。外部ストレージを使うことができる。

 

2.Ruby on Rails チュートリアル
 _url :絶対パス。メールにリンクを貼る時には、こちらを使用。
 _path:相対パス

Ruby on Rails チュートリアル

 

3.JavaScript
    querySelector('セレクタ名'):セレクタ名に一致するタグを取ってくる。複数ある場合は、一番最初の要素。
 querySelectorAll('セレクタ名'):セレクタ名に一致するタグを取ってくる。複数ある場合は、全て取得。forEachで取り出して扱う。
 getElementById('ID名'):ID名が一致する要素を取得。
    getElementsByClassName('クラス名'):クラス名が一致する要素を取得。forEachメソッドが使えない。for文で取り出す。
    親.appendChild(追加要素):親要素内の末尾に要素を追加する。
    親.insertBefore(追加要素, 要素名):要素名の前に追加要素を挿入する。

 

4.読書
 前提:問題は、自分が問題と思う故に、問題である。
 see -> do -> get:物を捉える。行動する。結果を得る。つまり、見方を変えることで、得られる結果が変わる。

 1.主体的
  関心の輪:変えられない。
  影響の輪:自分の行動で変えられる。ここに集中すること。次第に影響の輪が大きくなる。
  ある事象に対して、可能性を見出すか否かには、個々人の選択の自由がある。主語を「I」にし、自分の行動に責任を持つこと。

 2.終わりを思い描く
  自分が大切にする原則を決めること。価値観の明確化を行うことが、今後の行動を左右する。
  イメージ(知的想像)→生きる(物的想像)
  つまり、自分で人生の脚本を行い、未来へと自分を導いていく。いわゆるリーダーシップ。自分を導くリーダーシップの先に、人をマネジメントする能力が備わってくる。

 3.最優先事項を優先する。
  緊急ではないが重要なことをする。
  自分の役割を書き出す→役割毎の目標を書き出す(緊急ではないが重要なことだとbetter)→それを達成するための行動をスケジュールに書き込む。

  時間管理や目先の結果に囚われないことが大切。全ての予定が完了しなくても、人生において大事なことを行っているので問題ではない。

  delegation(委ねる)が大切:手段は問わず、結果を重視。仕事などを依頼するときは以下を大切にする。
  1:望む結果  2:ガイドライン  3:リソース 4:評価の説明責任(進捗報告など)  5:評価の結果