記憶の外付けHDD

切実に頭にUSBのコネクターがほしいです。なるべくtype-cでお願いしたいです。(忘れないように、プログラミング学習で学んだことを投稿してます)

2019/10/10_チェリー本(3日目)

はじめに

台風19号で家がぶっ壊れた時に避難する準備をしてたら、こんな時間に…
しかし、読書はちょっとだけちゃんとしました。

読んだ本

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで Software Design plus | 伊藤 淳一 | コンピュータ・IT | Kindleストア | Amazon

本編

読んだページ数

  • 第2章(P45〜P56)

新しく知ったこと

配列を連結して、1つの文字列にする

["","","19",""].join
#=>"台風19号"

文字列を繰り返し表示する

mo = '' * 8
puts "#{mo}のうち"
#=> "すもももももももものうち"
# 「も」が8回繰り返し表示される

&&と||の優先順位(論理演算子

  • &&||の優先順位は、&&が高い
  • A || B && Cは以下の式と同じように解釈される
    A || ( B && C ) ※&&が優先的に処理される

参考

  • 同じ意味を持つ演算子andorを使うと…
    ※【前提】andorの優先順位は、同じ
    • A || B && Cは以下のように解釈される
    • (A || B) && C ※優先順位が同じだから、左側から優先的に処理される

あとがき

全444ページで、1日10ページ進めるとしたら、読み終わる日は…

require "date"

Date.today + (444 - 56)/10 

#=> 2019-11-18

11月18日でした!

以上

2019/10/09_チェリー本(2日目)

はじめに

今日も30分この本を読みました。

読んだ本

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで Software Design plus | 伊藤 淳一 | コンピュータ・IT | Kindleストア | Amazon

本編

読んだページ数

  • 第2章(P27〜P45)

新しく知ったこと

数列でカンマ区切りをしたいとき

  • 数列には_を含めることができる
  • 100万円は100_000_000と書くことができる。

(初見だったら、きっと何表現しているのかわからないと思いました...)


累乗(べき乗)

  • **で計算できる
    • 例)3 ** 3 = 9

真偽(trueか?falseか?)

  • Rubyでは以下のようなルールで真偽が決まる
  • 偽:falseまたはnil
  • 真:それ意外

nilも偽になること、すっかり忘れそうだったので…)


%記法で文字列を作る

  • シングルクオートで囲みたいとき→%q
  • ダブルクオートで囲みたいとき→%Q
  • 区切り文字は任意の記号でOK
  • !でも?でも{}でもOK
# 例(シングルクオート)
%q!こんにちは!
# ↑`こんにちは`になる

# 例(ダブルクオート)
%Q{こんにちは}
# ↑”こんにちは”になる
  • %! !で囲んでもダブルクオートになる

(Qqクオートの頭文字?)


ヒアドキュメント(行指向文字列リテラル

  • 文字列に改行を含めたい場合は、ヒアドキュメントを使うと、スッキリ書くことができる
  • ヒアドキュメントは<<識別子 識別子
  • ヒアドキュメント内では式展開が使える
# 例
# 識別子として「text」を使用
message = <<text
これは



キュ



です。
text

puts message
#=> これは
# ヒ
# ア
# ド
# キュ
# メ
# ン
# ト
# です。

リテラル(litetal)は「(形)文字の」と言う意味らしいです…)

以上

2019/10/08_チェリー本(1日目)

はじめに

最近、個人開発をしており、そもそもRubyの知識がないなと思い知らされました。
なので、今日から毎日少しずつこの本読んで、知らなかったことを記録していきたいと思います。
(1日30分目安)

読む本

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで Software Design plus | 伊藤 淳一 | コンピュータ・IT | Kindleストア | Amazon

本編

読んだページ数

  • 第1章(終了)
  • 第2章(〜P27まで)

新しく知ったこと

ローカル変数

  • 入門書の序盤によく出てくる変数は「ローカル変数」と言われる
#例
age = 100056
name = "デーモン小暮"
role = " 閣下"

(ローカル変数って名前、知りませんでした…)

文字列のダブルクオートとシングルクオートの違い

機能 ダブルクオート"" シングルクオート''
式展開#{}
バックスラッシュ記法 (改行文字\nなど)

(とりあえず、""使っておけば間違いないってことっすかね…)

参考

あとがき

序盤の基礎な項目での知らないことって、こまごました知らなくても平気そうな知識に偏るなと思いました。
明日からは、もうちょうスピード上げて進めたいと思います!

2019/09/28_アールべンブ(Rubyのバージョン切り替え)

はじめに

Rubyのversion2.5で作ったアプリを立ち上げようとしたところ、rbenvのバージョン切り替えってどうやるんだ...?
となったので、切り替え方法記録します。

方法

現在のバージョン等を確認

  • まず、現在適用されているバージョンと、インストール済みのバージョンを確認
  • 特定のプロジェクトで適用しているバージョンを確認するときは、そのディレクトリまで移動する
  • ↓↓確認方法↓↓
rbenv versions

 =>結果
 system
  2.5.1 
 * 2.6.3 (set by /Users/○○○/■■■/△△△/.ruby-version)
  • *がついているのが、現在適用しているバージョン
  • そのほかが、システムにインストール済みで、切り替え可能なバージョン

バージョン切り替え

バージョンの切り替えには、以下の2種類があります。

  1. global
  2. local

global

  • PC全体的に使うRubyのバージョン(グローバルバージョン)を設定
  • ↓↓(例)2.5.1 に切り替えたいとき↓↓
rbenv glabal 2.5.1

local

  • ローカルのアプリケーション(プロジェクト)ごとに適用しているバージョンを設定
  • ↓↓(例)2.5.1 に切り替えたいとき↓↓ 注)まず、対象のプロジェクトのディレクトリに移動した状態で…
rbenv local 2.5.1

その他

  • rbenv rehash新しいバージョンをインストールした後に実行する
  • 【重要】rbenvは「アールビーエンブ」と読む。(筆者は30分前まで「アールべンブ」と読んでました…)
  • Rubyのバージョン(環境:environment)を管理するから「rbenv

参考

2019/09/25_数学、32点(簡単なpostgresqlとsql文)

はじめに

今日も個人開発をしました。

この個人開発で、自分に課していることがあります。

SQL文を打つ!!(SQLクライアントを使わない)

※ 先週、yokohama.rbさんに参加したとき、SQLはできて当たり前」というありがたい話を聞いたので…

ってことで、今日はテーブルの中身をターミナルだけで確認するまでを書きます!
(DBはpostgresqlを使用してます。)

postgresqlの使い方

とりあえず、中学校の中間試験のテスト結果をtest_resultというデータベースに、科目ごとのテーブルを作成している。という例で説明します。

1)データベース一覧を表示

データベース一覧をターミナルで以下のように記載

psql -l

2)データベースの選択

一覧からデータベースを選択する。 ここでは、データベースtest_resultを選択します。

psql test_result

test_result=#と表示される

3)データベース内のテーブル一覧を表示する

データベースtest_result内のテーブル一覧を表示

\dt

4)テーブルを選択する

テーブルのカラムや設定を確認する。 ここでは、mathsテーブルを選択します。

\d maths

SQL

さきほどに引き続き、中間テストの結果データベースの例を使います。

前提

test_result=#のようになっていないと、SQL文を入力できないっぽいです。
つまり、最低限、2)データベースの選択までやらないとダメ。

テーブル全体の全レコードを表示

全カラムの全レコードを表示するとき

select * from maths;

解説

  • select カラム名で取得するカラムを指定
    • 全カラムは*と書く
  • from テーブル名で取得元のテーブル名を指定
    • 今回はmathsテーブルを選択
  • 文末に;を書く

カラム名→テーブル名という記載順、なんだか不思議ですよね。)

カラムを指定してレコードを取得

mathsテーブルから、nameカラムの全レコードを取得するとき

select name from maths

解説

  • 1つ前とだいたい同じ。
    • 違うのは、nameカラムを指定したこと。
  • 文末に;を書く。(大切なので2回目)

カラムを指定して、特定のレコードを取り出す。

select score from maths where name = 'ddaawwaa';

=> 32

解説

(私、ddaawwaが中学生のとき、数学で32点を取ったのは、実話です。)

参考

PostgreSQL入門 (全16回) - プログラミングならドットインストール

あとがき

以上

2019/09/23_木刀、腰にサースデー(Rubyで「月曜日~日曜日」を表示)

はじめに

最近は、個人開発をしています。
RubyでHTTP通信をして、外部APIを使う構想なんですが、全然やったことなくって、 かなり行き詰まっておりました。
(なんとなくできるようになったので、後日書きたいと思ってます。)

今日は、別件で覚えたことを書きます。

Dateクラスを使って、日本語の曜日を表示する(Ruby)

Dateクラスを使って表示できる曜日の中に日本語の表記(月曜日、火曜日、…)は、ないらしいです。

せめて火曜日木曜日だけでも日本語表記にしなければ!と思っているので、そういう例題を設定してみました笑
(理由は「チューズデー」と「サースデー」のスペルがあいまいなまま、義務教育を終えてしまったためです…)

例題

今日の曜日を出力してください。
なお、「火曜日」と「木曜日」だけ日本語とし、それ意外の曜日は、英語表記とする。

回答例

require "date"

# 日本語の曜日を出力するメソッド
def show_japanese(number)
  puts %w(日 月 火 水 木 金 土)[number] + '曜日'
end

# 英語の曜日を出力するメソッド
def show_english
  puts Date.today.strftime('%A')
end

# 日本語用の曜日番号を出力
day_number = Date.today.wday


if day_number == 2 || day_number == 4
  show_japanese(day_number)
else
  show_english
end

解説

  • dateクラスは、Rubyの標準ライブラリですが、あらかじめ組み込まれていないので、requireで呼び出します。

  • メソッドshow_japaneseで日本語の曜日を生成&表示させます。

    • %w(〜)配列を作成します。
      (つまり["日","月","火","水","木","金","土"]ができる)
    • 配列の呼び出し番号は、day_number変数を使って設定。(説明は↓)
  • 変数day_numberは、配列から本日の曜日を呼び出すために定義しております。

    • Date.todayで本日の情報をDateオブジェクトで取得。
    • wdayは曜日に応じた番号を返すメソッド。(日曜日が「0」、月曜日が「1」…)
  • メソッドshow_englishで英語表記の曜日を出力する。

    • Date.todayは既出。
    • strftimeメソッドで、今日のDateオブジェクトの表記を編集し、曜日だけ表示。
  • 条件分岐(if)で曜日に応じた表記を設定。

参考

あとがき

「木刀腰にサースデー」は、テレビ(たしか「うたばん」)で磯野貴理子さんが言ってて、覚えました。
当時、お腹がよじれるほど笑ったんで、まだ覚えてました笑

2019/09/18_9月になってもガリガリ君(ruby_digメソッド)

今日もrubyの知らないメソッドと出会ったので、記録します。

digメソッド

  • HashクラスとArrayクラスの両方があるため、それぞれ説明します。
  • 深くネストされたハッシュや配列から値を掘り出すメソッドです。
    • dig=「掘る」ってことを想像すると覚えやすいっすね。

Hashクラス

  • ネストしたハッシュからを取り出すメソッド
  • 引数には、キーを指定する。
    • カンマ(,)で区切ることで、いくつもキーを指定できる

階層化されているものを想像すると、いつもガリガリ君を思い出しちゃいまして…
CSSpadding,border,marginガリガリ君で覚えました。)

garigari_boy = { ice: {shaved_ice: {stick: "当たり"}}}

garigari_boy.dig(:ice, :shaved_ice, :stick)
# => "当たり"


# 参考:指定されていないキーを書くと、`nil`が返ってきます。
h.dig(:ice, :shaved_ice, :chocolate)
# => nil

Arrayクラス

  • さきほどのハッシュと同じように、配列でもdigメソッドを使えます。
  • ハッシュと違って、引数には配列内の要素番号を指定します。

また、ガリガリ君使います

sweets = [["アイス", ["あずきバー", "ガリガリ君"]]]

sweets.dig(0, 1, 1)
# => "ガリガリ君"

# 参考:要素にない番号を書くと、`nil`が返ってきます。
sweets.dig(1, 2, 3)
# => nil
  • 解説
    • 最初の引数「0」:1番外側の[]内、0番目の要素["アイス", ["あずきバー", "ガリガリ君"]]を指定
    • 2番目の引数「1」:外から2番目の[]内、1番目の要素["あずきバー", "ガリガリ君"]を指定
    • 3番目の引数「1」:1番内側の[]内、1番目の要素[ガリガリ君"]を指定
      → ガリガリ君が呼び出される

応用

  • ハッシュと配列が混同しているオブジェクトに対してもdigが使えます。

#その1
g = { foo: [10, 11, 12] }
g.dig(:foo, 1)              
# => 11

#その2
[42, {foo: :bar}].dig(1, :foo) 
# => :bar

参考