Hyurakuのエンジニア日誌

SE出身Webエンジニアのブログ

Effective Rubyの備忘録その2 #29

EFFECTIVE Rubyの備忘録その2

扱っているオブジェクトはNilかもしれないことに注意する

本編ではBasicObjectやダッチタイピングについての言及があるがここでは割愛する。

  • オブジェクト呼び出しときに注意しなければいけないのは対象のオブジェクトがnilだった時である。

NoMethodError: undefined method `zero?' for nil:NilClass
  • 次のようなケースはnil?メソッドによってエラーを回避できる。

person.save if person
person.save if !nil?
  • nil自体を別のオブジェクトに変換するメソッドがある。

    次のメソッドによってnil引数によるエラーを回避できる。

one = nil
one.to_s
> ""
one.to_i
> 0
one.to_a
> []
one.to_h
> {}
one.to_f
> 0.0
  • Arrayのcompactメソッドはarrayのnil要素を取り除く。

    たとえば個人の選択科目のテスト平均点を求めるときに次のような使う。
    (受けていない科目の点数はnilになるので省く必要がある)

score_list = [select_A, select_B,select_C].compact
average_score =score_list.inject{ |sum, el| sum + el }.to_f / score_list.size

Effective Rubyの備忘録その1 #28

最近先輩のエンジニアに勧められて読み始めたEffective Rubyの内容を備忘録がてらまとめてみた。

Effective Ruby

Effective Ruby

項目1 Rubyは何を真(true)と考えているか正確に理解しよう

  • Rubyでは、falsenil以外すべての値が真である

    もちろん0も真である。

> p 'true' if 0
'true'
  • falsenilを区別するときはnil?メソッドを使おう

    ちなみにfalseであるかを確認するときは、左の被演算子falseにする==演算子を使う方法もある。

if false == x

end

左にfalseを配置する理由は次のとおりである。
- イミュータブル(作成後にその状態を変えることのできない状態)な定数は当地演算子の左側で使うべきというルールに基づいている。
- 右側に配置した場合、比較の基準を変えてしまう場合がある。

false == x
=> FalseClass==メソッド呼び出し
x == false
=> Object==メソッド

class Sample
  def == (other)
    true
  end
end
false == Sample.new
> false
Sample.new == false
> true

リーダブルコードの備忘録その1 #27

リーダブルコードの一章と二章を備忘録がてらまとめてみた。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

0. 前提

優れたコードとは 他の人が短い時間で理解できるコードである。

他の人とは、他人だけではなく 一年後や明日、もしかしたら1時間後の自分も含める。

1. 明確な単語を選ぶ

  • あいまいな単語ではなく、明確な単語を選ぶ

    たとえば次の関数があるとする。

def getPage()

getだけでも意味は通じているが、より意味を明確にするには fetch download memorizeという単語を選ぶべし。

他にも次の変数にも同じことがいえる。

int size()

sizeだけではどのような数量を表しているかわからない。
この場合はlength amount weightという単語を選ぶべし。

  • tmpやretvalなどの汎用的な名前は避ける

    • 戻り値の変数にretvalを使うのを避ける
    • tmptmp_filetmp_dataと意味をつけると読みやすくなる
    • 特にループイテレータijのほかにもよい名前がある

      Before

      python for i in ClassRoom: for j in Students:

      After

      python for classroom_i in ClassRoom: for student_i in Students:

  • 抽象的な名前ではなく、具体的な名前をつける

    TCP/IPポートをサーバがリッスンできるが確認するメソッドを作る。

    Before

    ruby def ServerCanStart()

    After

    ruby def CanListenOnPort()

  • 名前に情報を追加する

    開始時間や経過時間といった時間が関係する偏するなら、秒(second,s)やミリ秒(millisecond,ms)をつける。

    Before

    ruby startAt = Time.now

    After

    ruby startAt_s = Time.now

  • 名前の長さを決める

  • 名前のフォーマットで情報を伝える

    キャメルケースやスネークケースといったフォーマットで伝える。

昔はbrew installできたけど、今はできないバージョンのパッケージをinstallする方法 #26

昔つかっていたバージョンのパッケージをbrew installしてもできなかった場合にやってみてほしい方法を紹介する。

参照サイト

今回はpython3.5をインストールしてみる。

1. brew search pythonでインストールできるPythonのバージョンを探す

現時点(2018/11/19)ではデフォルトでpython3系、そして2系がインストールできる。

2. brew info pythonでインストールできるPythonのバージョンを調べる

python3.7がインストールできる。

$brew info  python
python: stable 3.7.0 (bottled), HEAD
--< 省略 >--

3. brew search python@3.5を実行する

するとpython3.5に関連したPull Request(close済)が表示される。

``` Closed pull requests:

python@3.5 3.5.2 (new formula) (https://github.com/Homebrew/homebrew-core/pull/10239) --< 省略 >-- ```

4. 該当するPull Requestのページを開く。

今回は(https://github.com/Homebrew/homebrew-core/pull/10239)を開く。

5. Files changedをクリックしたあと、View Filesをクリックする。

6. RawをクリックしてURLをコピーする。

7. コピーしたURLをbrew installの後につける。

今回ならは次のとおり。 brew install https://raw.githubusercontent.com/davidparsson/homebrew-core/f56cdfa66c802cdfcd33991864d7b6c91d80fe98/Formula/python%403.5.rb

これでpython3.5がインストールできる。 ほかのバージョンのパッケージも上記のとおりに実行すると、インストールできる。

Solrの始めの一歩にお勧めしたい動画 #25

Solrを使う必要があったので、とりあえず手を動かして学べる教材を探したところ YouTubeにおもしろい動画Run Your Own Search Engine With Apache Solrを見つけた。 今回は本動画を紹介したい。


[Part 1/2] Run Your Own Search Engine With Apache Solr

Solr is the popular, blazing-fast, open source enterprise search platform built on Apache Lucene™

訳するとSolrはApache Lucene™上に構築された人気が高く、驚くほど高速なオープンソースエンタープライズ検索プラットフォームです。とのこと。

この教材を使ってよかったと思えたのは次の3点。

  1. 教材は無料 動画教材の中には有料のものがあるが、この動画は無料である(ただ広告が再生前にあるのはつらい)。 また実際し使用するコードはGitHubに上がっている。

  2. 環境構築が楽 この動画ではSolrのパッケージをインストールするのではなく、dockerを使用している。 Solrをそのままインストールするときはjavaが必要だが、今回はdockerを使えればよいので 簡単に構築できる。

  3. わかりやすい この動画ではnodejsを使ってSolrの操作方法を紹介している。具体的はサーバの立ち上げからデータの追加、検索まで紹介している。

rbenv rehashが気になったのでgithubで調べてみた #24

1. きっかけ

これまでrails4.2.0を使って学習していたが、 最近テキストを見ながらrails 5.0.0をインストールした際に 次のコマンドを実行するように記載されていた。

rbenv rehash

しかし、どうしてこのコマンドを使わなればいけなかったかの記載がなかったので 調べてみることにした。

2. rbenv rehash

いろいろとWebサイトを見てみたところ、やはり一次ソースを調べるのが早いのかなと思い githubのrbenvのページで調べてみた。 思ったとおり、rbenv rehashについて解説があった。以下解説文を引用する。

Installs shims for all Ruby executables known to rbenv
(i.e., ~/.rbenv/versions/*/bin/*).
Run this command after you install a new version of Ruby, or
install a gem that provides commands.
$ rbenv rehash

次はshimsを調べてみる。

3. shims

同じページ内にshimsの解説を発見 さっそく解説を読んでみる。

--<中略>--
Shims are lightweight executables that simply pass your command along to rbenv.
--<中略>--

次の2つのことがわかった。 - shimsはコマンドをrbenvに渡すだけの軽量実行ファイル。 - rbenv rehashはshimsをインストールしている。

駆け出しエンジニアが知っておきたい12の技術要素 #23

本日は12 Things Every Junior Developer Should Learnに記載されていた、エンジニアを始める人が知っておきたい12の技術要素を紹介したい。

1. リレーショナルデータベースがどのように機能するか

2. 一般的なHTTPの流れ

3. 1つの言語のデバッグの仕方(1つ覚えると、ほかの言語にも対応できる)

4. コマンドラインの使い方

5. コードの見つけ方(IDEやエディタ、grepを駆使しよう)

6. 正規表現の基礎(コードをgrepで見つけるときに役に立つ)

7. 検索エンジンgoogleやyahoo)を駆使した解決方法

8. Gitの操作方法

9. 特に質問してもらえないと思ったら質問しよう

10. タイムゾーンがどのように機能するか

11. Unicodeutf-8がどのように機能するか

12. キャッシュ(CPU、メモリ、ディスク、HTTP)がどのように機能するか