Gemに依存Gem情報を書くときはGemfileじゃなくて.gemspecに書くこと!

ちょっとハマったので備忘録です。

タイトルの通り、Gemを作るとき依存関係のGemの情報を書くときはGemfileじゃなくて.gemspecに書くようです。 詳しくは

gemライブラリの依存はGemfileではなくgemspecに記述する理由 - Qiita

こちらに詳しく載っていますが、私の場合、何回か試してもダメでした。 最終的には使えるようになったのですが以下のことを試しました。

  • そもそも依存gem云々の前に作成されたgemファイルも一緒にリポジトリにあげていました。 その結果、bundle installしたら、こんなエラーが出ました。
$ bundle install
Ignoring io-console-0.4.6 because its extensions are not built.  Try: gem pristine io-console --version 0.4.6
Ignoring json-2.0.2 because its extensions are not built.  Try: gem pristine json --version 2.0.2
Ignoring mysql-2.9.1 because its extensions are not built.  Try: gem pristine mysql --version 2.9.1
Ignoring psych-2.1.0 because its extensions are not built.  Try: gem pristine psych --version 2.1.0
Fetching https://github.com/xiao1203/stock_fundamental_scraper.git
You have one or more invalid gemspecs that need to be fixed.
The gemspec at
/usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/stock_fundamental_scraper-a2e8bc06c189/stock_fundamental_scraper.gemspec
is not valid. Please fix this gemspec.
The validation error was 'stock_fundamental_scraper-1.0.0 contains itself (stock_fundamental_scraper-1.0.0.gem), check your files list'

ここに書いてあるように gem pristine json --version 2.0.2 を試してstock_fundamental_scraper-1.0.0リポジトリから削除しました。

  • gem依存で怒られる 本題ですね。 こんなのが出ました。 ※野良Gemをrails アプリケーションに組み込むため、
    rails側のGemfileにgem 'stock_fundamental_scraper', github: 'xiao1203/stock_fundamental_scraper'を追加して、
    rails sを実行しました。
$ rails s
Ignoring io-console-0.4.6 because its extensions are not built.  Try: gem pristine io-console --version 0.4.6
/usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/stock_fundamental_scraper-140f22be3000/lib/stock_fundamental_scraper/scraper.rb:1:in `require': cannot load such file -- mechanize (LoadError)

こんな感じに怒られました。

source 'https://rubygems.org'

# Specify your gem's dependencies in stock_fundamental_scraper.gemspec
gemspec
# gem 'mechanize'
# gem 'nokogiri'
# gem 'pry' 

gemspecにはこのように記載

lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'stock_fundamental_scraper/version'

Gem::Specification.new do |spec|
  spec.name          = "stock_fundamental_scraper"
  spec.version       = StockFundamentalScraper::VERSION
  
  省略

  spec.add_development_dependency "bundler", "~> 1.13"
  spec.add_development_dependency "rake", "~> 10.0"
  spec.add_development_dependency "rspec", "~> 3.0"
  spec.add_runtime_dependency 'mechanize'
  spec.add_runtime_dependency 'nokogiri'
end

再度実行。

$ rails s
/usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/stock_fundamental_scraper-140f22be3000/lib/stock_fundamental_scraper/scraper.rb:1:in `require': cannot load such file -- mechanize (LoadError)

変わんねーじゃん。。

  • bundle installがうまくいってないのかな、と思い、
/usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/

にいるgemを直接削除して、再度bundle install、リトライ

$ rails s
/usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/stock_fundamental_scraper-140f22be3000/lib/stock_fundamental_scraper/scraper.rb:1:in `require': cannot load such file -- mechanize (LoadError)
    from /usr/local/var/rbenv/versio

心折れるわ〜

  • gemを物理削除するんじゃなく、uninstallのほうが良いかも
$ gem uninstall stock_fundamental_scraper

でもう一度リトライ

$ rails s
/usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/stock_fundamental_scraper-140f22be3000/lib/stock_fundamental_scraper/scraper.rb:1:in `require': cannot load such file -- mechanize (LoadError)

……(怒)

  • updateはどうだ?
$ bundle update stock_fundamental_scraper

リトライ

$ rails s
=> Booting Puma
=> Rails 5.0.1 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.8.2 (ruby 2.3.1-p112), codename: Sassy Salamander
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop

よしきたーー

と、まあ、Try & Errorの結果をダラダラ書きました。

やっぱ、gemを修正した後に再読み込みするときは削除してbundle installではなく、ちゃんとbundle updateしないといけないってことですかね?

日本で一番簡単にビットコインが買える取引所 coincheck bitcoin

macOS Sierraでrails5を使おうとしたらmysqlでエラーになった。

こんな感じ

省略...

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5/ext/mysql2
/usr/local/var/rbenv/versions/2.3.1/bin/ruby -r ./siteconf20170321-38342-1u8g6eb.rb extconf.rb

省略...

-----
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
-----
Setting libpath to /usr/local/Cellar/mysql/5.7.17/lib
-----
creating Makefile

current directory: /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5/ext/mysql2
make "DESTDIR=" clean

current directory: /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5/ext/mysql2
make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5 for inspection.
Results logged to
/usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-16/2.3.0-static/mysql2-0.4.5/gem_make.out

An error occurred while installing mysql2 (0.4.5), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.4.5'` succeeds before bundling.
         run  bundle exec spring binstub --all
Could not find gem 'mysql2 (< 0.5, >= 0.3.18)' in any of the gem sources listed in your Gemfile or available on this machine.
Run `bundle install` to install missing gems.

なんだかよくわからんがmysql2のビルドに失敗している、と。

とりあえず、

$ gem install mysql2 -v '0.4.5'

を実行。

Building native extensions.  This could take a while...
ERROR:  Error installing mysql2:
    ERROR: Failed to build gem native extension.

    current directory: /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5/ext/mysql2
/usr/local/var/rbenv/versions/2.3.1/bin/ruby -r ./siteconf20170321-55696-zu02ml.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for rb_thread_blocking_region()... no
checking for rb_wait_for_single_fd()... yes
checking for rb_hash_dup()... yes
checking for rb_intern3()... yes
checking for rb_big_cmp()... yes
-----
Using mysql_config at /usr/local/bin/mysql_config
-----
checking for mysql.h... yes
checking for SSL_MODE_DISABLED in mysql.h... yes
checking for SSL_MODE_PREFERRED in mysql.h... yes
checking for SSL_MODE_REQUIRED in mysql.h... yes
checking for SSL_MODE_VERIFY_CA in mysql.h... yes
checking for SSL_MODE_VERIFY_IDENTITY in mysql.h... yes
checking for errmsg.h... yes
checking for mysqld_error.h... yes
-----
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
-----
Setting libpath to /usr/local/Cellar/mysql/5.7.17/lib
-----
creating Makefile

current directory: /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5/ext/mysql2
make "DESTDIR=" clean

current directory: /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5/ext/mysql2
make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5 for inspection.
Results logged to /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-16/2.3.0-static/mysql2-0.4.5/gem_make.out

はい。やっぱダメでしたね。

エラーの内容を見たら

checking for rb_thread_blocking_region()... no

とのこと。 色々ググったら

nekonenene.hatenablog.com

こちらの解決策1と解決策3 を実行したらうまくいきました。

ははぁ、、、

日本で一番簡単にビットコインが買える取引所 coincheck bitcoin

自動売買システムを作ろう!その0

タイトルの通りです。
株、FX(ビットコイン)を自動売買システムを少しずつ作ろうと思います。

実は昔、株ロボFXの自動売買にチャレンジしたことがあるので、全くの初めてってわけではありません。
※なぜ、自動売買システムを作っていながら、今も馬車馬のように働いているか、、察してください。
ロードマップはこんな感じを想定しています。
※とりあえず、RubyRuby on Railsで作ろうとしています。

ステップ1

各株情報サイトより、データをスクレイピングするgemの作成(Yahooファイナンスは除外。理由)

github.com 2017/3/19 現在では未完成
f:id:xiao-turquoise:20170319221906g:plain
※多分、rubygemには公開しないと思います。

ステップ2

このgemを使い、RailsAPI通信を行うサイトを作成。
あまりスクレイピング先に負荷をかけないように、リアルタイムの変動が小さい情報についてはRedis等を使い、スクレイピングしなくて済むような形にしたいです。
レンタルサーバーなどは使わず、自宅の余っているMac miniでやる予定。。。できるかな?出来なかったらHeroku使います。。

ステップ3

このAPIを使ったrubyスクリプトで自動売買を実施

見たいな感じです。

もし応援してくれる人いらっしぃましたら、下のバナーからcoincheckのアカウント作成をしていただくと
励みになります。

日本で一番簡単にビットコインが買える取引所 coincheck bitcoin

『すぐそばにある「貧困」』を読んで

 1回目は貧困問題に関連した本にしました。 本書は認定NPO法人 もやいの理事長である大西 連氏によって書かれています。
構成としては著者自身の体験に基づく、いくつかの短編回想録(一部、登場人物名等の変更あり)とコラムとして、現在の日本における「生活保護」の現状が具体的なデータと共に示されています。
文章としては非常に読みやすく、読書経験の浅い人間でも苦もなく読み進めることができます。

回想録にはお決まりの「ホームレス」から「家出少年」「メンヘラ(語弊がありますが、あえて使います)」「元暴力団員」が登場し、彼らの窮状や保護申請、そしてその顛末などが書かれています。
申請が通って生活基盤ができた人もいる一方、申請には成功したものの必ずしも幸せにはなっていない、といったケースもあるようで、生活困窮者支援の難しさを考えさせられます。
また、保護申請の中で行政の福祉課の人たちも登場し、彼らの水際作戦にも考えさせられるものがあります。
生活保護をザルのように通していたら問題あるのかな?でも「お金は天下の回りもの」というし、生活保護費の75%は国が負担、かつ、もし25%の負担で財政に負荷の大きな影響があるようなら翌年の地方交付税で多少の考慮はされるはずだから、そんなにマイナスはないと思うんだけどな。。。
少なくともお金のないホームレスが駅前に溢れている、なんて状態よりははるかにマシなはず。
多分、この問題の一番は感情面なんでしょうね。
この辺は後日、ちゃんと調査したいと思います。

行政のセミナーなどで現状報告会とかやってくれないかな・・
あと、この辺りの話を是非ケースワーカーさんにも聞きたい。。
どうやったらそういう人たちと知り合いになれるんだろうか。。
やっぱ生活保護者になるしかないか??(本末転倒)

みたいな感じで、一発目の書評でした。

日本で一番簡単にビットコインが買える取引所 coincheck bitcoin

すぐそばにある「貧困」

すぐそばにある「貧困」

積ん読解消に向けて!

http://2.bp.blogspot.com/-5bzoU9MW5eI/VbnRa8fJ3JI/AAAAAAAAwKo/hCf0MxHu1zo/s400/book_hondana_syodana.png

このブログの目的

昔から本を買って、最初のほうのページだけ読んで、放置する、っていうのをよくやってしまっています。
Kindleを使うようになってからその傾向に拍車がかかりました。。。
また最近、年のせいか、読んだ内容がなかなか頭に入らない。。
学習系の本や教育系のブログではよく書いてありますが、ある年齢を超えたら、インプットよりアウトプットが重要とのこと。
本を読んで、その内容をアウトプットする、となると、やっぱ書評かな、と。
別に偉そうなこと書こうとは思っていません。
ぶっちゃけ、自分のためのチラ裏ブログのつもりです。

興味あること

  • 会計/経理
  • 人口知能
  • 投資
  • 経営
  • 英語
  • 貧困問題
  • Ruby
  • Ruby on Rails
  • Elixir

なので、このあたりの本を読んでいこうと思います。

特に当方、サーバーサイドのRailsエンジニアでスマホアプリも多少はいけます。
webサービスを使って貧困問題を解決したい!!