Programming from 30

自分の備忘録が、誰かの為になれば・・

”Rails Developers Meetup 2018 Day 4”にいってきました!!【雰囲気と感想】

初めてRails Developers Meetupに行ってきたので、行こうか行くまいかを悩んでる方向けに簡単に雰囲気と感想を書きます!

Rails Developers Meetup とは

第一線で活躍する開発者・導入企業から、RubyRailsに関する 発想・アプローチ・成功体験・失敗体験を学ぶ、非営利技術カンファレンスです。
参考:

railsdm.github.io

初心者だと「Meetupって知り合いがいないからなあ」「行ってもわからない」などあって若干敷居が高い感じがします。

なぜ初心者の僕が行ったのか?

僕自身もRailsチュートリアルくらいしかやったことがなくRubyも絶賛勉強中!知り合いも数人・・・きっとぼっちになる。何を話しているかわからないだろう!!と思っていました。

  • ん?でもこれって裏を返すと、全て参加する理由になるのでは?!
    • 勉強中ならどう勉強して良いか聞いてみては?
    • 知り合いがいないなら増やして、楽しい情報をゲット
    • 1つくらいは理解できる。きっと面白い話もある

と思い、思い切って参加してみる事にしました! ただ、申し込みぺージを見るとキャンセル待ち!?かなり人気です!ただこのキャプチャは最近のもので、僕が申し込んだのは、ボランティア枠が9人だったのでチャンスと思って申し込みました。

f:id:tsubasa0105:20181209105332p:plain
参加申し込みページ

スタッフとして参加したのは後述しますが大正解でした!!

  • 当日の流れですが
    • 9:00 会場受付に集合
    • 9:00 - 10:00 会場準備
    • 10:00 - 11:00 自由もしくは受付近辺で待機
    • 11:00 - 18:00 1人30分11:00 - 18:00までの1枠を担当。それ以外は自由
    • 18:00頃から懇談会準備
    • 22:30 懇談会後片付けして終了

初心者向けの内容

皆さん素晴らしいお話をされていたのですが、僕の知識と理解が足りていない為、「いろいろ大変な事もあるのかあ」と難しい事が多かったですが、わからない用語を調べたりと勉強になる面も多かったです。
その中でも、初心者向けの内容として
【プログラミング初心者に教えるときは「身近な比喩」が重要なのだ!】 という題で話をされたブロガーの吉田 慶章さんのお話しです!kakkuさんと呼ばれていて、今回は新人にプログラミングを教える時のティップスを話されていました。登壇後も周りでは「わかりやすくてただ楽しかった」といった意見が多く、プログラミングをわからない人でも理解できます。

kakakakakku.hatenablog.com
また、【エンジニア視点で語る、人生のX軸の広げ方】というテーマで話されたストリートアカデミー株式会社 北川 徹さん。
自身の生い立ちから、いかに横の関係を広げる事で仕事もプライベートも充実させていくかといった内容を話されていて、プログランミングの話はゼロ!最後にツッコミがありましたが、とても楽しい内容でした。
なので、初心者の方でもとっつきやすい話はいくつかあります!
ぼっちにならないか心配の方に関しては、スタッフで参加していれば、人と話し自己紹介するタイミングしかないので、自然とぼっちにはなりません!勉強中ですとお話しすると、励ましの言葉やできるようになったら弊社を受けてみてね!などありがたい言葉をかけてくださる方ばかり!
なんと言っても、twitterでフォローしている方がどういった方で、どういう事を考えているのかを知る事ができたのが収穫でした!
初めてRuby/Rails コミッター 松田さんに会い、お話を聞きました!主にRubyconfとRubyKaigiの違いや、今後のRubyKaigiの方向性を話されていて、会場全員が話にのめり込んでるいたのが印象的でした!

f:id:tsubasa0105:20181209115555j:plain
松田さんの登壇

といった形でメリットばかりのRailsDMでした!

  • メリット
    • スタッフとして参加する事で、ぼっち回避し人間関係が広がる
    • 採用担当の方の話が生で聴ける
    • 現場の雰囲気がわかる
    • 顔を覚えてもらえる
    • 敷居なんて最初からない

次回もスタッフとして参加したいと思います!ちなみに話した方で初心者の方はいらっしゃいませんでしたが、Rubyistの方皆さんから優しくして頂き、モチベーションが更に上がりました!勉強頑張ります!

【Ruby】bundle install と bundle updateの際に出るエラー解消!!

なぜかわからないけど、以下のエラーが出るようになりました😅インストールはできているけど、いつか大きなバグに繋がるので解決しておきました!

$ bundle install 
Ignoring bindex-0.5.0 because its extensions are not built.  Try: gem pristine bindex --version 0.5.0
Ignoring byebug-10.0.0 because its extensions are not built.  Try: gem pristine byebug --version 10.0.0
Ignoring byebug-9.0.6 because its extensions are not built.  Try: gem pristine byebug --version 9.0.6
Ignoring ffi-1.9.23 because its extensions are not built.  Try: gem pristine ffi --version 1.9.23
Ignoring nio4r-2.2.0 because its extensions are not built.  Try: gem pristine nio4r --version 2.2.0
Ignoring nokogiri-1.8.2 because its extensions are not built.  Try: gem pristine nokogiri --version 1.8.2
Ignoring puma-3.11.3 because its extensions are not built.  Try: gem pristine puma --version 3.11.3
Ignoring puma-3.9.1 because its extensions are not built.  Try: gem pristine puma --version 3.9.1
Ignoring sqlite3-1.3.13 because its extensions are not built.  Try: gem pristine sqlite3 --version 1.3.13
Ignoring websocket-driver-0.6.5 because its extensions are not built.  Try: gem pristine websocket-driver --version 0.6.5
(省略)
Using rails 5.2.1
Using tilt 2.0.8
Using sinatra 2.0.4
Bundle complete! 3 Gemfile dependencies, 49 gems now installed.
Bundled gems are installed into `./vendor/bundle`

上記のエラーで検索をかけると結構同じ症状に悩まされる方が多いようです。

Ignoring gems because its extensions are not built [duplicate]

rails test で nokogiri のエラーが発生するときの対処

ruby関係のコマンドを入力すると常にエラー?警告?が出る

他にも多数解決策が挙げられているが、私の症状を解消するものはなく、メンターの駒形さんに相談!「rbenvrubyの再インストール。ダメならクリーンインストール!」というアドバイスを頂き実行!

まずはrbenvruby_buildの入っている~/.rbenvを削除

rm -rf ~/.rbenv

次にrbenvruby_buildの再インストール

# rbenvをgitからクローン
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
# rbenvげのパスの設定
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
exec $SHELL -l
# rbenvが入っているか確認
rbenv --version
# ruby_buildのインストール
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
# rubyのインストールするリストを確認
rbenv install --list 2.5.1をインストール
rbenv install 2.5.1
# rubyのバージョン確認
ruby -v
# 2.5.1を使用する
rbenv global 2.5.1
# rbenvのrubyを使っているか確認
which ruby -> ok!!!

bundlerもインストール

gem install bundler
# 確認
bundler -v
# ~/.rbenv/versions/2.x.y/bin/ 以下に置いてあるコマンド群を ~/.rbenv/shims/以下に置いて使えるようにする

rbenv rehash

#インストールパスを指定
 bundle install --path vendor/bundle

最後のコマンドを叩くと再度エラー発生

Retrying fetcher due to error (2/4): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for https://rubygems.org/.
There is a chance you are experiencing a man-in-the-middle attack, but most likely your system doesn't have the CA certificates needed for verification. For information about OpenSSL certificates, see http://bit.ly/ruby-ssl. To connect without using SSL, edit your Gemfile sources and change 'https' to 'http'.
Retrying fetcher due to error (3/4): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for https://rubygems.org/.
There is a chance you are experiencing a man-in-the-middle attack, but most likely your system doesn't have the CA certificates needed for verification. For information about OpenSSL certificates, see http://bit.ly/ruby-ssl. To connect without using SSL, edit your Gemfile sources and change 'https' to 'http'.
Retrying fetcher due to error (4/4): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for https://rubygems.org/.
There is a chance you are experiencing a man-in-the-middle attack, but most likely your system doesn't have the CA certificates needed for verification. For information about OpenSSL certificates, see http://bit.ly/ruby-ssl. To connect without using SSL, edit your Gemfile sources and change 'https' to 'http'.
Could not verify the SSL certificate for https://rubygems.org/.
There is a chance you are experiencing a man-in-the-middle attack, but most likely your system doesn't have the CA certificates needed for verification. For information
about OpenSSL certificates, see http://bit.ly/ruby-ssl. To connect without using SSL, edit your Gemfile sources and change 'https' to 'http'

このエラーはbundle installの実行時にhttps:// rubygems.org/.に対してhttps接続したんだけど、SSL証明書がきちんと確認できてませんよというときに発生する。このときに確認した手順としては、 1,OpenSSLがきちんと入っているか? 2,証明書が有効なものになっているのか? の二点。詳しい手順は以下に記載します。

参考:rails の bundle install が 「Could not verify the SSL certificate for https://rubygems.org/.」で失敗するとき こちらの方に助けて頂きました!

その後bundle install --path vendor/bundleを叩く!

Fetching gem metadata from https://rubygems.org/..........
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Fetching rake 12.3.1
Installing rake 12.3.1
(中略)
Bundle complete! 3 Gemfile dependencies, 49 gems now installed.
Bundled gems are installed into `./vendor/bundle`
Post-install message from yard:
--------------------------------------------------------------------------------
As of YARD v0.9.2:

RubyGems "--document=yri,yard" hooks are now supported. You can auto-configure
YARD to automatically build the yri index for installed gems by typing:

    $ yard config --gem-install-yri

See `yard config --help` for more information on RubyGems install hooks.

You can also add the following to your .gemspec to have YARD document your gem
on install:

    spec.metadata["yard.run"] = "yri" # use "yard" to build full HTML docs.

--------------------------------------------------------------------------------

できました!

結構ここまで来るのにかなり時間を費やしてしまいました!最後の選択肢のクリーンインストールまでいかなくて良かったです。原因としてはOS Mojaveをインストールした事からの権限異常の確率が高いそう。OSインストールのタイミングは考えたいものです。
今後は関連していそうなものを再インストールを選択肢としていきます!駒形さんには毎度感謝しかございません!ありがとうございます!

初心者が【ゼロからわかる Ruby 超入門】をやり終えて・・

本日11月22日発売のゼロからわかる Ruby 超入門 gihyo.jp

やり終えての感想をこれからRubyを学ぶ初心者の方へ!

《私のスペック》

  • FjordBootCamp受講生 最近Rubyの学習開始
  • 文系初心者 通常の人より理解が低め
  • Ruby入門サイトを学習
  • 🍒本 7章くらいまで

《この本を学習した経緯》

🍒本の7章くらいまでいくも私のレベルでは難しく、一旦ストップ😱

自身の基礎レベルの低さに気づき、メンターの駒形さんに相談

ゼロからわかる Ruby 超入門を勧めていただく!

やり終えた!

《 まず始めに感じた事をドンッと箇条書き!》

①見やすいデザインと図解で理解が捗る
②練習問題が多いので、インプットからアプトプットまでできる
③エラーが起きた時の対応が優しくわかりやすく書いてある
④ドキュメントの読み方の説明がある
⑤理解のためにあえて簡単な例で教えてから、実用的な使い方まで教えてくれる
⑥コードの解説はこれでもか!というくらい初心者の事を考え解説
⑦イラストがなんともかわいらしい
⑧使いこなす為の発展した知識も得られる

結構あります!

《ぼやっとからイメージを掴む》

Rubyを簡単に学習し、ぼやっとした状態で参考書に目を通してみると結構難しい。まずは図解をしてから頭に入れる学習方法を取っている私にとっては、分厚い技術書はかなりの曲者!!だからドキュメントをなかなか解読できないのかも・・・
ただ、Ruby超入門は文字も大きく絵が多い!更に、難しそうなメソッドやクラス、WEBアプリの仕組みあたりはわかりやすい図解が入っています!頭の中で絵が浮かぶというのは、「こういう事かあ」というくらい懇切丁寧な説明付き!!
コードの説明においては、こんなところもわからないのか!というところがわからないのが初心者🤔で、通常は省かれるであろうコードが処理される流れを最後まで説明してくれる。自分の頭がぼやっとしている点から、イメージが湧いて線で繋がる。そういう事か!!が増えると楽しくなる😋
また各章の終わりに練習問題が結構ついていて、インプットだけでは終わらず、自身の理解度もチェックできる!手頃な練習問題をウェブ上で探しても、レベルに合ったものがないので、アウトプットをその場で段階的にできるのは自信に繋がる!

《超入門であるということ》

表紙の若葉マークが示している通り始まったばかり。これからいかに技術を発展させるかは自分次第。メンターの駒形さんからは手当たり次第Ruby本を読みなさいとアドバイスを頂いているので、これから自己投資を惜しまず技術書を買い漁ります!そしてWelcome back to 🍒本!!頑張ります!難しい本で勉強をされてきた諸先輩方に追いつく気持ちで突き進みます💪

《結びに》

簡単にしか感想を書けませんでしたが、今からRubyを学ぶフィヨルドインターン生又は、これからプログラミングを勉強する方にはRuby超入門をお勧めします!技術書はその人のレベル知らないとお勧めしづらいですが、特に私みたいな基礎のない初心者へ。
またTwitterに「当時の自分に渡してあげられれば...と悶絶するくらい素晴らしい本」 pupupopo88.hatenablog.com と書かれている方の記事も是非参考に。
この本を読んで良かった事は、初心者の私が今欲しい説明をドンピシャのタイミングで受け取る事ができた事。これに尽きます。献本の段階から本書を貸して頂いたメンターの駒形さん、著者の五十嵐さん、松岡さん(面識はございませんが勝手に)に感謝申し上げます!

引き続き勉強を進めます!

Ruby hashクラス 【 hash[hoge] += 数値 】の謎

hashの勉強をしていて、ん????なんだこれ??見た事あるけど、いまいち頭に入ってこない😩!!となったので、手を動かして理解まで進めてみた!
よくわからなかったのはこんなコード!

hash = Hash.new(0)

array = "Mississippi".chars

array.each do |j|
  hash[j] += 1
end

p hash

#=> {"M"=>1, "i"=>4, "s"=>4, "p"=>2}

こういったコードを見た時、戻り値の表示が腑に落ちず、なぜこのように返ってくるのかとても疑問でした。
問題は

hash[j]  += 1

の部分!array.each で"Mississippi"の一字ずつ変数jに入れ、hash[j] += 1の処理をする・・・ん?わからない・・。どうしてhashの形で合計されて出力されるのか。
初心者だからか、sum += 1なら見慣れているけど、hash[j] += 1ということは
hash[j] = hash[j] + 1という事。最初の"M"を入れるとhash[M] = hash[M] + 1になる。この結果が{"M" => 1}となる事が見慣れてないせいか、理解に苦しんだ。+= 数字をする事で、なぜvalueが1になるのか。sは"Mississippi"の中に4回も現れ、結果として"s" => 4と出力されているが、hash[:s] => 1 = hash[s] + 1を繰り返して、加算されている。どうせならhash[j] +=> 1こんな感じにしてくれると、記号でしっくりくる。でも、やっぱりわからないので、コンソールで色々といじってみたらなんとなく理解できた!

# まずはhash.new(0)でデフォルト値を設定!しないと計算ができない。
h = Hash.new(0)
# 今のところ当然中身は何もなし
p h     #=>  {}
h.keys    #=> []
h.values   #=> []
# hのkeyをsに設定するとデフォルトの0がvalueとして入る
h[:s]   #=> 0 

# ここでh[:s]に + 1をしてみる
h[:s] +=  1    =>  1
# ↑増えました!!という事は
h[:s] += 1     =>  2
h[:s] += 1     =>  3
h[:s] += 1     =>  4
# ↑ちゃんと1ずつ増えます!
ここでp hをすると
p h
=>   {:s  =>   4}
となりました!👍

コードと出力の結果の間を細かく確かめながらいくと、どう処理が行われて結果として出力されているのかがわかりました!違和感のあるコードは分解していこうと肝に命じて一件落着😄

ブロックの失敗😅【Ruby】

最近課題をやっていると頻繁にブロックを使う!ただ幾分理解足らずで、ミスばかりなので過ちを備忘録として・・・

<ブロック>とは

Rubyのコードで書かれた処理のかたまりで、メソッドに引数として値を渡す

[1,2,3,4,5,6,7].each do |i|
  puts i
end

or

3.times do |i|
   x = i * 5
   puts x
end

こんな感じで書ける。ブロックは基本do ~ endの中に行いたい処理を書き、引数として値を渡している。因みに{.......}をdo ~ endの代わりに使う事もでき、基本的には1行で完結するコードに関しては{.......}を使い、複数行にわたるコードはdo ~ endを使用!
ただ参考書やwebサイトを見て、簡単なコードを書くだけだった僕はいざコードを各段階でミスばかり!

# ブロックの中で、合計を取る!
['hoge.rb','fuga.rb','baz.rb'].each do |f|
   st = File::Stat.new(f)
   b = st.blocks
   t = b.inject{|sum,n| sum + n}
   put t
 end

オブジェクトのクラスが違うのと、謎のコードで値を取れるわけもなく、長い事ハマりました。またブロック内外部で、同じ変数を使ってしまって、前の変数の値を書き換えてしまったり。

t = 23

[1,2,3,4,5].each do |i|
   t = i *3
   puts t
 end

puts t
=> 15

てんでだめですね!
ある程度自由に記述できるのがブロックではあるけど、わかんない事を書きすぎて書いている自分も理解できなくなって切るので金輪際気を付けます!
またdo ~ end{......}では結合度も違い、エラーの原因になってしまいそうなので、気をつけたい!ブロックをdo…endで書くか{…}で書くかにより挙動が変わる例
他にもyieldprocとかもあるので、理解に達したらブログ書きます!

最近、習慣にしたい事。

今、通っているFjordBootCampでは様々な課題があって、Rubyの扱っていく中での実装手順メモ!!

どうしたらその機能を実装できるか!といきなり何かの課題をつくろうとしても作れません!

まず実装したい機能がライブラリにないかRubyドキュメントをチェック! 大体の機能は組み込みライブラリや標準ライブラリを探せば大体やりたい事が見つかる。ただ初心者の僕には読みづらさがあったり、例を探してみると英語のちょっと難しめのコードがあったり、エラーで表示されない事がある! ※現在、有志でドキュメントを作っている

図解で頭に入れる学習が好きな僕としては、Rubyの構造がわかるような図解がトップページにあったりすると捗ると試みるも、まだ理解していない事を図解できず・・・が、そんなの甘えですし、ただ読む量が足りていないだけと、知識の未定着が主な原因!頑張ります!

もし、ドキュメントから実装したいライブラリがあったり、irbもしくはpryでどう動くのか、どんな値や形式で返ってくるのかを確かめて動いたら実装! 慣れない僕はそのままQiitaや個人ブログを漁り始め、真似て打ち込みながら実行しているが、やはりドキュメントやオフィシャルサイト公式から理解し実装していく事が、Rubyを理解する近道という事なので、もっとRubyの本を読み、コードを書いて場数を踏みます!

なるべく個人ブログは参考程度に、まずはドキュメント!ドキュメントを制するものはRubyを制すと信じ、Rubyを楽しみます★

Rubyのアクセサメソッドについて

学習したはずのアクセサメソッド。

class Car
  attr_accessor :name ,:price

  def initialize(name,price)
    @name = name
    @price = price
  end
end

car = Car.new('Prius',250_000)
car.name
=> 'Prius'
car.price
=> 250_000

以上のコードを見て、バカな私は

def name
  @name = name
end

のように定義してないじゃないか!!!!!!!!!!
何で使えるんだ?!の様に変な思考に入り、混迷を極めてしまった。もしかしたらmoduleクラスのnameメソッドを使っているのかと調べてドキュメントを見ても、見当違いの事が書いてあった。悩んで解決せず、メンターの駒形さんに聞くと、「アクセサメソッドにはセッターとゲッターがあって、nameメソッドを定義していると一緒の事になる」と説明を頂き、クリアになると共に、cherry本でやったではないかと、自分のばかさにホトホト呆れるほかありませんでした。 もしかしたら同じ失敗をして時間を無駄にしようとしている人、そして自分の備忘録の為に書きました。もう忘れません! 因みにattr_accessorattr_readerattr_writerを一緒にまとめたもので、

class Car
  attr_reader :name ,:price

  # 同義
  # def name
  #      @name
  #end
  # def price
  #      @price
  #end

  attr_writer :name,:price
   
   #同義
   #def name=(value)
   #  @name = (value)
   #end
   #def  price=(value)
   #   @price = (value)
   #  end

  def initialize(name,price)
    @name = name
    @price = price
  end
end

car = Car.new('Prius',250_000)
car.name
=> 'Prius'
car.price
=> 250_000
car.name = 'Crown'   # イコールの両サイドにスペース!
=> 'Crown'

と書く事ができ、通常同義の部分はdef initializeなどの下から定義するのですが、比較の為attr の後に記述しました。 何かあればご指摘いただけると幸いです!