20200702のRubyに関する記事は13件です。

created_atで与えられる日時を整形する

 
sqlで生成されるcreated_atを整形するのに悩んだため、その実装方法のメモ

sqlファイル

テーブルを作成する。

table.sql
create table todos
(
  id integer PRIMARY key,
  body text,
  created_at
);

rbファイル

active recordを用いて、先ほど作成したtodosテーブルをオブジェクトに結びつける。

tlist.rb
class Todos < ActiveRecord::Base
  validates :body, presence: true
end

 

オブジェクトをインスタンス変数に格納する。

tlist.rb
get '/' do
  @todos = Todos.all
  erb :index
end

erbファイル

時刻を表示してみる。

index.erb
  <div class="user_box">
    <p class="user_name">しゅうと</p>
    <ul>
      <% @todos.where(users_userName: "しゅうと").each do |todo|%>
      <li data-id = "<%= todo.id%>" data-token = "<%= Rack::Csrf.csrf_token(env)%>">
          <div class="one">
            <%= Rack::Utils.escape_html(todo.body)%>
          </div>
          <div class="time">
            <%= todo.created_at%>
            <span class="delete">[x]</span>
          </div>
      </li>
      <% end%>
    </ul>
  </div>

 

実行したところ、不要な部分があるので整形したい。
スクリーンショット 2020-07-02 22.21.28.png

調べたところ、strftimeメソッドで整形できる模様。
メソッドを適用して実行。

index.erb
  <div class="user_box">
    <p class="user_name">しゅうと</p>
    <ul>
      <% @todos.where(users_userName: "しゅうと").each do |todo|%>
      <li data-id = "<%= todo.id%>" data-token = "<%= Rack::Csrf.csrf_token(env)%>">
          <div class="one">
            <%= Rack::Utils.escape_html(todo.body)%>
          </div>
          <div class="time">
            <%= todo.created_at.strftime("%Y/%m/%d %H:%M:%S")%>
            <span class="delete">[x]</span>
          </div>
      </li>
      <% end%>
    </ul>
  </div>

 

文字列だと怒られました。

スクリーンショット 2020-07-02 22.22.14.png

文字列以外に変換する必要があるみたいなので、date型に変換してみる。

index.erb
  <div class="user_box">
    <p class="user_name">しゅうと</p>
    <ul>
      <% @todos.where(users_userName: "しゅうと").each do |todo|%>
      <li data-id = "<%= todo.id%>" data-token = "<%= Rack::Csrf.csrf_token(env)%>">
          <div class="one">
            <%= Rack::Utils.escape_html(todo.body)%>
          </div>
          <div class="time">
            <%= todo.created_at.to_date.strftime("%Y/%m/%d %H:%M:%S")%>
            <span class="delete">[x]</span>
          </div>
      </li>
      <% end%>
    </ul>
  </div>

 

日付は合っているが、時刻がおかしい。
スクリーンショット 2020-07-02 22.23.14.png

time型に変換して実行してみる。

index.erb
  <div class="user_box">
    <p class="user_name">しゅうと</p>
    <ul>
      <% @todos.where(users_userName: "しゅうと").each do |todo|%>
      <li data-id = "<%= todo.id%>" data-token = "<%= Rack::Csrf.csrf_token(env)%>">
          <div class="one">
            <%= Rack::Utils.escape_html(todo.body)%>
          </div>
          <div class="time">
            <%= todo.created_at.to_time.strftime("%Y/%m/%d %H:%M:%S")%>
            <span class="delete">[x]</span>
          </div>
      </li>
      <% end%>
    </ul>
  </div>

 

きちんと表示されました。
スクリーンショット 2020-07-02 22.23.43.png

どんな形式で与えられているのか、エラーに直面した際には調べる必要性がありますね。

なおこのアプリケーションの原型はドットインストールのsinatra入門を参考にしています。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Ruby理解度チェック】何が起きているか説明できますか? &&とandの違い

面白い質問があったのでテスト形式でシェア

現象

def ampersand_return
  puts "foo" && return
  puts "bar"
end

def and_return
  puts "foo" and return
  puts "bar"
end

> ampersand_return
=> nil

> and_return
foo
bar
=> nil

何が起きているか説明できますか?

回答

原則として、&&andの違いはその優先順位にある

&& returnの方

&&が先に演算され、以下と同値になる

puts ("foo" && return)

"foo"はtruthyなので、右辺のreturnが処理され、メソッドは何も出力せずreturnする。

and returnの方

puts "foo"が先に演算され、以下と同値になる

(puts "foo") and return

putsnilを返すのでandの右辺は処理されず、"foo""bar"両方が出力されメソッドは正常終了する。

終わりに

andの例のようにmethod callが優先される演算子に関しては、ドキュメントには明記されていない?よう
このStack Overflow Answerによるとand, or, if, unless, until, while, rescueがこの挙動をするらしい

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Ruby理解度チェック】何が起きているか説明できますか? &&とand

面白い質問があったのでテスト形式でシェア

現象

def ampersand_return
  puts "foo" && return
  puts "bar"
end

def and_return
  puts "foo" and return
  puts "bar"
end

> ampersand_return
=> nil

> and_return
foo
bar
=> nil

何が起きているか説明できますか?

回答

原則として、&&andの違いはその優先順位にある

&& returnの方

&&が先に演算され、以下と同値になる

puts ("foo" && return)

"foo"はtruthyなので、右辺のreturnが処理され、メソッドは何も出力せずreturnする。

and returnの方

puts "foo"が先に演算され、以下と同値になる

(puts "foo") and return

putsnilを返すのでandの右辺は処理されず、"foo""bar"両方が出力されメソッドは正常終了する。

終わりに

andの例のようにmethod callが優先される演算子に関しては、ドキュメントには明記されていない?よう
このStack Overflow Answerによるとand, or, if, unless, until, while, rescueがこの挙動をするらしい

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】hamlコード早見表

Github公式 Haml-rails
チュートリアル HamlTutorial

導入

Gemfile
# 以下を追加し`bundle install`
gem "haml-rails", "~> 2.0"

# Rails4の場合
gem "haml-rails", "~> 1.0.0"
# Rails3の場合
gem "haml-rails", "~> 0.4.0"

html.erbをhtml.hamlに変換
$ rails generate haml:application_layout convert
全てのerbファイルを変換する場合
$ rails haml:erb2haml

HTMLコード

erb
<div>blue</div>
<div class="sky">blue</div>
<div class="sky">blue</div>
<div class="sky" id="line">blue</div>
haml
%div blue
%div.sky blue
.sky blue
.sky#line blue

Rubyコード

erb
<% if user_signed_in? %>
  <%= hoge %>
<% else %>
  <%= skyblue %>
<% end %>
haml
- if user_signed_in?
  = hoge
- else
  = skyblue

ネスト

erb
<div class="header-nav">
  <nav>
    <ul class="nav-list">
      <% if current_user %>
        <li class="list-item"><%= content %></li>
        <li class="list-item" id="sky"><%= link_to "blue" %></li>
      <% else %>
        <li class="list-item"><%= content %></li>
        <li class="list-item" id="sky"><%= link_to "blue" %></li>
      <% end %>
    </ul>
  </nav>
</div>
haml
.header-nav
  %nav
    %ul.nav-list
      - if current_user
        %li.list-item= content
        %li.list-item#sky= link_to "blue"
      - else
        %li.list-item= content
        %li.list-item#sky= link_to "blue"
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Railsでproduction環境運用する際にしたほうがいい設定

ブラウザ上のエラー表示をdevelopmentとproduction環境で同じにする

まずdevelopment環境でERRORが発生するとブラウザに詳細情報が表示されます。
8c1d32d1432226f625cab33c2ed1fcc7.png
しかし、production環境だと何かしらのERRORが発生したとしても「We’re sorry, but something went wrong.」と表示されてしまいます。
picture_pc_f8886f63bd354c264487153ad2c5c567.png
そこでproduction環境でもブラウザに詳細情報を表示させるには
config.consider_all_requests_local = falsetrueにしてあげれば良い。

config/environments/production.rb
config.consider_all_requests_local = true
参考文献

Railsドキュメント

本番環境でDBをresetする

Rails5以降のproduction環境では、db:dropやdb:resetなどのDBを破壊する系のコマンド実行を防止する機能が追加された。
そのためproduction環境でbundle exec rake db:migrate:reset RAILS_ENV=productionなどをしてもエラーを発生してしまう。

対処法

環境変数にDISABLE_DATABASE_ENVIRONMENT_CHECK=1を指定してあげれば良い。

$ bundle exec rake db:migrate:reset RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1
参考文献

Rails5のproductionでrake db:dropはできない、普通には

知っておくべきRailsのconfig/enviroments配下の設定

下記サイト一通り目を通すことでproduction環境で詰まった際に解決の糸口が分かるかも?
Railsのconfig/enviroments配下を読んでみる

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

備忘録 会計freeeAPI叩いた時ハマったこと

GETでクエリ指定する場合は、ちゃんとuri.request_uriでhttp通信しようね

これに尽きます、会計freeeのAPI仕様とかじゃなくただ単に自分の凡ミスだった。

rubyで叩いた

OAuth(オーオース)2.0でACCESS_TOKENは取得済み。
こんな感じでパラメーターをセットして

BASE_URL = 'https://api.freee.co.jp'
MY_COMPANY_ID = '*********'
USE_ACCESS_TOKEN_HEADER = {
  "accept" => "application/json",
  "Authorization"=> "Bearer *************************"
}

以下のように取引先の詳細を取得するAPIを叩いたところ
(分かりやすくかなり単純なメソッドにしてます)

def get_torihiki_id(name)
   uri = URI.parse(BASE_URL + '/api/1/partners')
   uri.query = URI.encode_www_form({"company_id" => MY_COMPANY_ID ,'keyword'=> name})
   http = Net::HTTP.new(uri.host, uri.port)
   http.use_ssl = true
   headers = USE_ACCESS_TOKEN_HEADER
   response = http.get(uri.path, headers)
   res_hash = JSON.parse(response.body)
   res_hash
end

puts get_torihiki_id('hoge株式会社')

このようなレスポンスになった。

{"status_code"=>400, "errors"=>[{"type"=>"validation", "messages"=>["company_id が指定されていません。"]}]}

company_id指定してるのになぁ〜
なんでだろうなー
かなり考え込んでしまいました。

原因

この一文

response = http.get(uri.path, headers)

uri.pathのみでhttp通信を行なっていた。
クエリ設定してるのに使ってないじゃん、、、
正しくは

response = http.get(uri.request_uri, headers)

GETでurlにパラメーター埋め込む時は、ちゃんと使わないとですね、、、

日々精進

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

備忘録 会計freeeAPI叩いた時に詰まったこと

GETでクエリ指定する場合は、ちゃんとuri.request_uriでhttp通信しようね

これに尽きます、会計freeeのAPI仕様とかじゃなくただ単に自分の凡ミスだった。

rubyで叩いた

OAuth(オーオース)2.0でACCESS_TOKENは取得済み。
こんな感じでパラメーターをセットして

BASE_URL = 'https://api.freee.co.jp'
MY_COMPANY_ID = '*********'
USE_ACCESS_TOKEN_HEADER = {
  "accept" => "application/json",
  "Authorization"=> "Bearer *************************"
}

以下のように取引先の詳細を取得するAPIを叩いたところ
(分かりやすくかなり単純なメソッドにしてます)

def get_torihiki_id(name)
   uri = URI.parse(BASE_URL + '/api/1/partners')
   uri.query = URI.encode_www_form({"company_id" => MY_COMPANY_ID ,'keyword'=> name})
   http = Net::HTTP.new(uri.host, uri.port)
   http.use_ssl = true
   headers = USE_ACCESS_TOKEN_HEADER
   response = http.get(uri.path, headers)
   res_hash = JSON.parse(response.body)
   res_hash
end

puts get_torihiki_id('hoge株式会社')

このようなレスポンスになった。

{"status_code"=>400, "errors"=>[{"type"=>"validation", "messages"=>["company_id が指定されていません。"]}]}

company_id指定してるのになぁ〜
なんでだろうなー
かなり考え込んでしまいました。

原因

この一文

response = http.get(uri.path, headers)

uri.pathのみでhttp通信を行なっていた。
クエリ設定してるのに使ってないじゃん、、、
正しくは

response = http.get(uri.request_uri, headers)

GETでurlにパラメーター埋め込む時は、ちゃんと使わないとですね、、、

日々精進

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

稼ぎたいなら食わず嫌いしない。上に立つ人こそ色々と試そう。

今時のリーダーは、率先して色々と試し、失敗し、部下を成功の最短ルートで動かすものだ。
これはIT業界に限ったことではない。

フリーランスで年収を上げるのも、専門技術の高さより、幅広い技術の方が年収を上げやすい。
また、副業で稼ぐにも、幅広い技術がいい。

私は旅行代理店のシステム開発で副業していたことがあるが、その時は、PHPとRubyだった。
フリーランスのメインの仕事では、Javaだった。

副業、クラウドソーシングでは、PHPばっかである。
ただ、フリーランスの仕事では、PHPはかなり減った。

PHPの将来性を検索すれば、残るという意見も無くなるという意見もあるが、
それは、副業で考えるか、フリーランスの仕事で考えるか、で変わってくる。

結局、自分で試して、自分で考えるしかない。
この試すという手間を検索して、人の意見を聞いて終わりにしないということである。

Ruby が出たばかりのころ、Perl と Python が消えると騒がれた。
私は全部試して、業務でも使用した。
Ruby の急成長は予想できなかったが、Perl が消える予想は当たった。
当時、Perl の将来性を検索したら、使用している企業が多いから、消えることはないという意見が多かった。

私が消えると言っているのは、稼げないという意味である。

Rust は良い言語だが、PHP はダメだ。 みたいなのは、思い込みである。
PHPの方が楽だし、稼げる。
言いたいことは、状況によるから決めつけるなということ。
そして、自分で試して、情報に流されないということ。

今時、開発言語の選定はかなり難しい。
検索して判断せずに、是非、試してから判断して欲しい。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

文字列から指定の文字以降を削除する

str = "A30-60_10000"

後ろを消す

str.sub(/_.*/, "")

結果↓

=> "A30-60"

前を消す

str.sub(/.*_/, "")

結果↓

"10000"

参考
https://qiita.com/flmil/items/8cbfbf49844ddef79000

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Webpacker::Manifest::MissingEntryError in Devise::Sessions#newというエラーが出た時の解決法

開発環境

・Rails 6.0.3.1
・Ruby 2.6.6

エラー時の状況

$ rails s

コマンドを実行してlocalost3000にアクセスすると、

【エラー内容】


Webpacker::Manifest::MissingEntryError in Devise::Sessions#new
Showing /Users/XXXX_XXXX/Desktop/XXX_XXX_XXX/app/views/layouts/application.html.erb where line #9 raised:

Webpacker can't find application in /Users/XXXX_XXXX/Desktop/XXX_XXX_XXX/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
   unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker's config/webpacker.yml file.
4. Your webpack configuration is not creating a manifest.
Your manifest contains:

というエラーが出た。

該当部分は

application.html.erb
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>

と書いてある。

解決方法

$ bundle exec rails webpacker:install

を実行したらエラーが解決できた。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ruby インスタンスメソッドについて

インスタンスメソッドについての曖昧な知識の補完として書きます。
間違いなどありましたら、コメントいただけますと幸いです。

インスタンスメソッド

・クラス構文内でメソッドを定義するとインスタンスメソッドになる。
・そのクラスのインスタンスに対して呼び出せる。

class Car
# インスタンスメソッドを定義する(ここではnameメソッド)
  def name
    "yellow cab"
  end
end
# クラス名.newでインスタンスを作成して変数taxiに代入
taxi = Car.new
# インスタンスメソッドを呼び出す
taxi.name #=> "yellow cab"

まとめ

・インスタンスメソッドはクラス内で定義する。
・インスタンスを作成してから、インスタンスメソッドを呼び出す。
・インスタンスメソッドは、「インスタンス.メソッド」で呼び出せる。

参考にしたリンクや書籍

・メソッドとクラスメソッドとインスタンスメソッドが曖昧だった
https://qiita.com/right1121/items/c74d350bab32113d4f3d
・【Ruby】クラスとかインスタンスについて改めて学習してみた
https://qiita.com/ksk_diffeasy/items/734b4961e9e6c7480d33
・「プロを目指す人のためのRuby入門」 伊藤淳一[著]
https://ruby-book.jnito.com/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

もしもピカチュウが100まで数えたら

ゴミ箱に入っていたのをサルベージしました。
ピが2個続いている場所をよく聞けばピカピピカピカ=11にも対応できるのがコツ(?)
もしもピカチュウが「カピ」と鳴くことがあれば、もうこれは成立しない。

 (0..100).each{|i| p i;p i.to_s(2).rjust( (i.to_s(2).size % 2) + i.to_s(2).size ,"0");puts i.to_s(2).rjust( (i.to_s(2).size % 2) + i.to_s(2).size ,"0").scan(/.{1,#{2}}/).map{|a| a.gsub(/.*/,{"00" =>"ピィカァ" ,"01" => "ピカチュウ" ,"10" => "ピカピ","11" => "ピカピカ"})}.join("") }
irb(main):001:0> (0..100).each{|i| p i;p i.to_s(2).rjust( (i.to_s(2).size % 2) + i.to_s(2).size ,"0");puts i.to_s(2).rjust( (i.to_s(2).size % 2) + i.to_s(2).size ,"0").scan(/.{1,#{2}}/).map{|a| a.gsub(/.*/,{"00" =>"ピィカァ" ,"01" => "ピカ チュウ" ,"10" => "ピカピ","11" => "ピカピカ"})}.join("") }
0
"00"
ピィカァ
1
"01"
ピカチュウ
2
"10"
ピカピ
3
"11"
ピカピカ
4
"0100"
ピカチュウピィカァ
5
"0101"
ピカチュウピカチュウ
6
"0110"
ピカチュウピカピ
7
"0111"
ピカチュウピカピカ
8
"1000"
ピカピピィカァ
9
"1001"
ピカピピカチュウ
10
"1010"
ピカピピカピ
11
"1011"
ピカピピカピカ
12
"1100"
ピカピカピィカァ
13
"1101"
ピカピカピカチュウ
14
"1110"
ピカピカピカピ
15
"1111"
ピカピカピカピカ
16
"010000"
ピカチュウピィカァピィカァ
17
"010001"
ピカチュウピィカァピカチュウ
18
"010010"
ピカチュウピィカァピカピ
19
"010011"
ピカチュウピィカァピカピカ
20
"010100"
ピカチュウピカチュウピィカァ
21
"010101"
ピカチュウピカチュウピカチュウ
22
"010110"
ピカチュウピカチュウピカピ
23
"010111"
ピカチュウピカチュウピカピカ
24
"011000"
ピカチュウピカピピィカァ
25
"011001"
ピカチュウピカピピカチュウ
26
"011010"
ピカチュウピカピピカピ
27
"011011"
ピカチュウピカピピカピカ
28
"011100"
ピカチュウピカピカピィカァ
29
"011101"
ピカチュウピカピカピカチュウ
30
"011110"
ピカチュウピカピカピカピ
31
"011111"
ピカチュウピカピカピカピカ
32
"100000"
ピカピピィカァピィカァ
33
"100001"
ピカピピィカァピカチュウ
34
"100010"
ピカピピィカァピカピ
35
"100011"
ピカピピィカァピカピカ
36
"100100"
ピカピピカチュウピィカァ
37
"100101"
ピカピピカチュウピカチュウ
38
"100110"
ピカピピカチュウピカピ
39
"100111"
ピカピピカチュウピカピカ
40
"101000"
ピカピピカピピィカァ
41
"101001"
ピカピピカピピカチュウ
42
"101010"
ピカピピカピピカピ
43
"101011"
ピカピピカピピカピカ
44
"101100"
ピカピピカピカピィカァ
45
"101101"
ピカピピカピカピカチュウ
46
"101110"
ピカピピカピカピカピ
47
"101111"
ピカピピカピカピカピカ
48
"110000"
ピカピカピィカァピィカァ
49
"110001"
ピカピカピィカァピカチュウ
50
"110010"
ピカピカピィカァピカピ
51
"110011"
ピカピカピィカァピカピカ
52
"110100"
ピカピカピカチュウピィカァ
53
"110101"
ピカピカピカチュウピカチュウ
54
"110110"
ピカピカピカチュウピカピ
55
"110111"
ピカピカピカチュウピカピカ
56
"111000"
ピカピカピカピピィカァ
57
"111001"
ピカピカピカピピカチュウ
58
"111010"
ピカピカピカピピカピ
59
"111011"
ピカピカピカピピカピカ
60
"111100"
ピカピカピカピカピィカァ
61
"111101"
ピカピカピカピカピカチュウ
62
"111110"
ピカピカピカピカピカピ
63
"111111"
ピカピカピカピカピカピカ
64
"01000000"
ピカチュウピィカァピィカァピィカァ
65
"01000001"
ピカチュウピィカァピィカァピカチュウ
66
"01000010"
ピカチュウピィカァピィカァピカピ
67
"01000011"
ピカチュウピィカァピィカァピカピカ
68
"01000100"
ピカチュウピィカァピカチュウピィカァ
69
"01000101"
ピカチュウピィカァピカチュウピカチュウ
70
"01000110"
ピカチュウピィカァピカチュウピカピ
71
"01000111"
ピカチュウピィカァピカチュウピカピカ
72
"01001000"
ピカチュウピィカァピカピピィカァ
73
"01001001"
ピカチュウピィカァピカピピカチュウ
74
"01001010"
ピカチュウピィカァピカピピカピ
75
"01001011"
ピカチュウピィカァピカピピカピカ
76
"01001100"
ピカチュウピィカァピカピカピィカァ
77
"01001101"
ピカチュウピィカァピカピカピカチュウ
78
"01001110"
ピカチュウピィカァピカピカピカピ
79
"01001111"
ピカチュウピィカァピカピカピカピカ
80
"01010000"
ピカチュウピカチュウピィカァピィカァ
81
"01010001"
ピカチュウピカチュウピィカァピカチュウ
82
"01010010"
ピカチュウピカチュウピィカァピカピ
83
"01010011"
ピカチュウピカチュウピィカァピカピカ
84
"01010100"
ピカチュウピカチュウピカチュウピィカァ
85
"01010101"
ピカチュウピカチュウピカチュウピカチュウ
86
"01010110"
ピカチュウピカチュウピカチュウピカピ
87
"01010111"
ピカチュウピカチュウピカチュウピカピカ
88
"01011000"
ピカチュウピカチュウピカピピィカァ
89
"01011001"
ピカチュウピカチュウピカピピカチュウ
90
"01011010"
ピカチュウピカチュウピカピピカピ
91
"01011011"
ピカチュウピカチュウピカピピカピカ
92
"01011100"
ピカチュウピカチュウピカピカピィカァ
93
"01011101"
ピカチュウピカチュウピカピカピカチュウ
94
"01011110"
ピカチュウピカチュウピカピカピカピ
95
"01011111"
ピカチュウピカチュウピカピカピカピカ
96
"01100000"
ピカチュウピカピピィカァピィカァ
97
"01100001"
ピカチュウピカピピィカァピカチュウ
98
"01100010"
ピカチュウピカピピィカァピカピ
99
"01100011"
ピカチュウピカピピィカァピカピカ
100
"01100100"
ピカチュウピカピピカチュウピィカァ
=> 0..100

ピカピカピカチュウは13

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Rubyを2行でセグフォらせる

流行ってると聞いたのでRubyでもやってみました

require 'fiddle'
Fiddle::Pointer[0].ptr

ワンライナー

ruby -r fiddle -e 'Fiddle::Pointer[0].ptr'

なんでこれでセグフォるのかはあんまり理解していません…。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む