第81回 Ruby関西 勉強会に参加しました。
以下、メモです。
Fiber の使いどころ
- RubyKaigi 2018 で AirBnB で宿をとっていて枠がちょっと余っているという宣伝
- RubyKaigi 2017 での発表資料
- Process - Thread - Fiber
- 昔の Perl のスレッドはバッドノウハウが必要だったのが Ruby を選んだ理由のひとつ
- m_seki さんは「Fiber より Thread を使うべき」と言っていたのに疑問を感じた
- 他言語も含めて Generator などの導入が進んでいる
- 昔の発表資料からフィボナッチ数列の実装例色々
-
Enumerator.new
を使うとEnumerator::Yielder#<<
が Fiber を隠蔽してくれる -
each_cons
やlazy
などのEnumerable
の便利メソッドが使える
-
- Agent での Fiber の利用例
- ゲームのキャラクターごとに Fiber
- 状態遷移を
Fiber.yield
で隠蔽できる
- IO での Fiber の利用
- m_seki さんの発表はこの例
- ネットワーク IO に Fiber は向かない
- この点は同意
- GitHub での実事例の調査結果
- 練習用の実装がほとんど
- 使ってそうなプロジェクト調査
- Concurrent Ruby は JRuby などで問題があるので使ってない
- Fluentd などは使っていなかった
- 使っているプロジェクト
- em-synchrony
- ネットワーク IO が主な用途
- em-synchrony
- 思考実験
- あえて Fiber ネットワーク IO で有効な状況を想像
- HTTP サーバーで Fiber を利用
- クライアントが非常に低速 (モバイル回線など)
- とはいえ、普通は nginx と組み合わせるので問題ない
- ほか事例
- 2013 年の amagasakirb
- Parslet で電卓を実装
- LLVMTransformer, LLVMBuilder
- パーサ側のブロック呼び出しのネストと builder 側のブロック呼び出しのネストを組み合わせた
ブログを Octopress から Jekyll+AMP に移行した話
ブログを Octopress 2 + GitHub Pages から Jekyll 3 + AMP + Netlify に移行した話というタイトルで発表しました。
スライドはいつも通り Rabbit Slide Show (RubyGems), SlideShare, Speaker Deck にあげています。(ソースは github にあげています。)
Build Awesome Command-Line Applications in Ruby2 の紹介
- Build Awesome Command-Line Applications in Ruby2 という本の紹介
- 会場アンケート
- 初めての人 → 割と多い
- Ruby 使ってない人 → 少し
- CLI を作ったことない人 → いない?
- CLI の作成をはやくする話
- GUI
- 利点: 初めての人には良い
- 欠点: キーボードショートカットとか自動化とか
- Java 以降 CLI が古臭く感じられるようになってきた
- Ruby / Rails の人は驚くべきことにコマンドラインをよく使っている
- CLI は進化している
- git のようなサブコマンド
- thor (ソー)
- rake と似た文法
- GLI
- (https://github.com/davetron5000/gli によると Git-Like Interface Command Line Parser らしい)
Rails3.8 から 5.1 にバージョンアップした話
- 自己紹介
- 対象アプリ: model数:43, controller数:42, mysql, minitest
- Gemfile は増えたり cancan が cancancan になるなどはあったがあまり苦労はしなかった
-
docx_templater
がお気に入り - 一気にあげたが test group だけ先にあげた方がよかったかも
-
-
rails app:update
orrails new
-
rails new
を採用して全部上書き
-
- 変更点あれこれ
- bundle install で gem のバージョンが古くなった
- バージョン確認が大事
- turbolinks になった
- application なんとかを上書きし直し
- secret_token.rb が secret.yml になった
- routes の prefix が変わった
- 入れ子にしたときのが変わった
- inflections.rb が上書き
- before 系の callback で
return false
からthrow :abort
に変更 -
belongs_to
のoptional: true
-
has_many :through
の前にthrough
の引数のをhas_many
する必要あり -
.without
という scope が active support の同名メソッドと衝突した -
.minutes
が Float から Integer になった? -
.order
に Symbol を渡した時の SQL が変わった -
attr_accessible
から strong paremeter - なくなったメソッドとか
- minitest のフォルダ構成が変わった
- テストの順番がランダムになった
- assigns がなくなったので
rails-controller-testing
gem を追加 - おまけ
- bootstrap 2 系から 4 系にした方が倍ぐらい時間がかかった
- まとめ
- テスト大事
- まめにバージョンアップ
-
did_you_mean
ありがとう! - メインが1か月、デザインで2か月
- 質疑応答
- 最初の方はメモとれず
- テストで
params:
の変更は大変?- ある程度スクリプトを書いたが手で変換した
- synvert とか rubocop で自動変換できそう
- E2E のテスト
- 一人プロジェクトなので全ページみた
- 質問者の方も E2E のテストの自動化はコストがかかるので、人手でやっている
Rails で SNS を立ち上げるには
- 前半
- 一度作ったものをスクラッチから作り直した
- モピルン
- 友達リクエストなし
- 直接あったことがないと繋がれない
- アイデンティティが大事
- 組織の名刺だと
- 自分ブランドの構築
- 自分名刺
- なりすましをなくす
- QR コードなど
- システムで感動を与える
- システム構成
- 複数台構成が動くのを確認して最小構成で動かしている
- Azure だと停止しているとほぼ課金されない
- 後半
- 実装の話
- Rails の構成
- Rails 5.0.2
- Ruby 2.3.3
- Puma 3.8.2
- Nginx 1.12.2
- puma の unix socket へ proxy
- gem
- devise, omniauth
- ネイティブアプリの認証で omniauth が使えなくなったので
fb_graph2
,google-id-token
,amazon-ecs
- azure-push
- gretel
- fog-azure-rm
- remotipart を fork して使っている
- こんなことがありました
- 謎のサーバーエラー
- データベースのコネクションの問題で rails がタイムアウトしていた
- 絵文字が入力されるとエラー
- メールの URL がローカルホスト
- 謎のサーバーエラー
- タイムアウト問題
- データベース用のロードバランサー (MaxScale の手前) を経由するとコネクションがリークしていた
- rails とロードバランサー間が切れていた
- database.yml に wait_timeout: 1500 (秒) を設定する (デフォルトは無制限)
- timeout: 5000 (ミリ秒) とは別物
- ロードバランサーのタイムアウト値を上記より大きくする (Azure では無制限にはできない)
- 絵文字問題
- U+1F4A6 などでエラー
- データベースの文字コードを utf8mb4 にする
- alter で変更した
- database.yml に encoding: utf8mb4 を設定する
- 注意: インデックスとして使うフィールドは utf8mb4 にしない方がいい
- インデックスのサイズが大きくなって問題がおきる
- メール本文の URL 問題
- https://127.0.0.1/… のようになってしまう
- 前提:
ActionMailer::Base.default_url_options = { host: request.host, protocol: request.ssl? ? 'https' : 'http', port: request.port *
- Azure が生存のリクエストを送り続けていて、そのリクエストで上書きされていた
- 質疑応答
- http://api.rubyonrails.org/v5.1/classes/ActionMailer/Base.html の Generating URLs のように個別に
host:
を使うのが正当な解決法っぽい - なぜ MariaDB?
- PostgreSQL は選びたくなかった
- クラスターが組みやすかった
- Azure の MySQL のプレビュー段階のものだと台数を減らせるので GA になったら切り替えたい
- スレーブが落ちた時の切り替えで問題はおきない?
- ロードバランサー, MaxScale が優秀なので乱暴に MariaDB を落としたりしても、多少遅くなる程度で、問題が起きたことはない
- http://api.rubyonrails.org/v5.1/classes/ActionMailer/Base.html の Generating URLs のように個別に
- 紹介
- ログイン後の画面も含めて紹介
- イベントとかで他の参加者のうち、繋がってない人は名前が見えない
- ものとも繋がれる
- ポーケン
- ポーケンより前からあった
- ポーケンはポーケンがないとダメだった
- 当時は個人プロジェクトだったので、大きく展開はできず
- イベントコード
- 有効期限がある
- GPS 連動して制限する機能は予定している
- 法人ベースもある
- Your home の他に Office home
- 法人に連絡先や Meet ログがたまる
- マネタイズは法人版を売っていく
- アポイントメントシステムとして機能をしぼっていきたい
- QR コードも有効期限をつけている
Ruby初級者向けレッスン 65 回 ーブロックー
いつも通りの感じでした。
クロージング
- 関西Ruby開発
- REx - Ruby Examination
- Ruby|REx eラーニングサービスはじめました
- 次回 5/12 本町予定 (会場調整中)
Disqus Comments