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でも同じだが、慣習的に使われている。
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[:モデル名][:カラム名]
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:相対パス。
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:評価の結果