こんにちは、中野です。
2019年11月30日にmark MEIZANで開催された鹿児島Ruby会議01に参加してきました。
鹿児島での地域Ruby会議の開催は初めてで、「プログラミング言語Rubyを通して越境する」をテーマに、2つの招待講演と12の一般講演と盛りだくさんの内容でした。
当日は90名もの参加者で、会議のセッションそのものも素晴らしい内容ばかりで、その後に同じ会場で行われた懇親会まで楽しく参加させていただきました。
発表内容をメモしていましたので、それをもとに簡単にセッションの内容を紹介していきます。
Ruby 3 の型解析に向けた計画(仮)
クックパッドで働くフルタイムRubyコミッタである遠藤 侑介さんによる発表。
- Ruby3に静的型解析が入る
- 型記述言語: ruby-signature
- 型推論: 型プロファイラ
- 型検査: Sorbet, Steep, RDL
- Rubyの開発コミュニティ
- Ruby Core Team
- アクティブな開発者たちを漠然と指す謎ワード
- Ruby開発では開発者を「コミッタ」と呼ぶ
- アクティブな開発者は10〜30人程度
- 年1回、クリスマスごろリリース
- 次はRuby2.7
- 新機能提案の最終決定権は、まつもとゆきひろさん(Matz)が持つ
- Ruby Core Team
- Ruby2.7の新機能
- パターンマッチ
- 関数型プログラミング言語でよくあるやつ
- 「記号処理」向きの言語機能
- SKIコンビネータ計算
- パターンにマッチさせるプログラムを書くときにパターンマッチはとても便利
- キーワード引数の分離
- Ruby 2において、キーワード引数は普通の引数の一部
- 一番最後にあるハッシュオブジェクト
- Ruby 3では、普通の引数とキーワード引数は別物
- Ruby 2とは非互換
- Ruby 2において、キーワード引数は普通の引数の一部
- 移譲の新記法(...)
- 引数を、そのまま別メソッドを呼び出す場合に便利
- numbered parameter
- 入らない機能
- pipeline operator( |> )
- メソッド取出演算子(methodメソッド)
- パターンマッチ
bruby
田中 貴章さんによるbashをRubyに変換するツールを作ってみたというお話。
- Rubyの特徴
- 国産
- スクリプト言語
- 記述の自由度の高い言語
- じゃあ自由度の低い言語って何?
- bash(シェルスクリプト)
- brubyをつくってみよう
- bashをRubyに変換するツール
- 2週間でできる! スクリプト言語の作り方 を参考に
- スクリプトをToken分割して構文木をつくる
- BNF
- 結論
- 2週間じゃ無理
ruby-jp
Masataka Kuwabaraさんによる「ruby-jp」というSlackワークスペースのお話。
- Ruby界隈の大統一Slackワークスペースがほしい
- ruby-jp
- Slack上の日本のRubyコミュニティ
- 250ぐらいのパブリックチャンネル
- 伝えたいこと
- ruby-jp に入って!!
- ruby-jpってどんなところ
- いろんな質問が飛び交っている
- どんどん情報が入ってくる
- Rubyの新機能談義
- リリース情報、脆弱性情報
- Railsでのハマリポイント
- たくさんのチャンネル
- Ruby関連以外でも、たくさんチャンネルがある
- ↓からjoinしてもらえたら嬉しいです
ruby-vipsを利用した画像処理Tips
ミヤハラタカシさんによるlibvipsを用いた画像解析のお話。
- libvipsとは
- Cで書かれた画像処理ライブラリ
- Python, Rubyとかのラッパーも
- 処理時間が短く、メモリ使用量も少ない
- ImageMagick, OpenCVなどより
- gem install ruby-vips
- kakari
Haconiwaが越えたあの夏〜3年間を振り返る
近藤うちおさんによる「mruby x コンテナ」の実装であるHaconiwaというソフトウェアのお話。
内容
- Haconiwa
- mruby x コンテナ
- FastContainer
- リクエスト毎にコンテナを起動、一定期間で停止するアーキテクチャ
- GMOペパボのマネージドクラウド
- CRIU(checkpoint/restore)
- メモリダンプをとってそこから起動
- Haconiwaは、次世代コンテナの実験場としても
- USDT
- eBPF
RubyのOSSコードリーディング(仮題)
時田 理さんによる、OSSのコードリーディングに取り組んだお話
- コールドリーディング
- 要するに、コードを読む
- 読むことによって、ソフトウェアの知見を深める
- はじめたきっかけ
- どうやって動いているんだろうと思う瞬間から
- やり方
- こうしなければというのはない
- スコープを決める
- 複数人で読む
- おすすめツール
- GitHub
- ブラウザで読める
- メソッドの定義箇所に飛べる
- GitHub
- どのように読んだか
- Rack
- エントリポイントから読む(bin/rackup)
- 困ったら「binding.irb」
- 困ったらdocs.ruby-lang.org
- Rack
- OSSを読むようになって変わったこと
- コードを読む時間が増えた
- ドキュメントを読む習慣が加速
- Railsアプリケーションの裏側が理解できた
福岡の方から参りました Fukuoka.rb です
ODA Hirohitoさんによる、Fukuoka.rbについての取り組み。
- Fukuoka.rbで何をやったのか?
- 毎週開催するようにした
- なぜ毎週
- RubyKaigi 2018が思いのほか楽しかった
- 自分の勉強時間の確保
- Fukuoka.rbがどう変わったのか?
- 会場提供してくれる会社が増えた
- 参加者が増えた
- まとめ
- やりたくなったら勝手にやってみたらいい
- 勝手にやったら同調してくれる人たちが現れる
かごっま弁のDeep LearningをRubyできばっ
田中 健太郎さんによる、RubyでDeep Learningのお話。
- Deep Learning入門
- RubyでDeep Learningやるには
- Red Chainer
- TensorFlow.rb
- MXNet.rb
- menoh-ruby
- PyCallというgemをつかってPythonライブラリを使うことも可能
- 推論と学習
- 推論
- MLP
- 学習
- 誤差を小さくするように
- 勾配降下法
- 誤差を小さくするように
- 推論
- RubyでDeep Learningやるには
- 学習をRed Chainerでやってみる
- Chainer Tutorialがオススメ
- GPUを使った処理も可能
How to make a gem with Rust
神速さんによる、RubyからRustを呼び出すお話。
- Rubyの弱点
- 遅い
- 型がない
- 実行時エラーがでやすい
- Rust
- 早い
- 型、メモリ安全、スレッド安全
- 分かりやすいエラーを備えたコンパイラ
- メインはRailsで部分的にRustというのをやってみた
- 拡張ライブラリ
- 処理の一部がC言語で書かれているもの
- bundle gem --ext
- Rustでgemを作るときの課題
- stableだと動かない
- 参考資料が少ない
あまり知られていないRubyの便利機能
西山 和広さんによる、Rubyの便利機能の紹介。
- String#undump
- Hash#transform_*
- Hash#to_h {|k, v| ... }
- warn with uplevel
- warn 'message', uplevel: 1
- abort(message)
- rand(range)
- String.new
- String#gsub(pattern, hash)
- Regexp.union
- String#*_with?
- start_with?
- end_with?
- String#prepend, delete_prefix, delete_suffix, chomp, chop
- String#delete, tr
"regional” wasn’t going to be mean “provincial”
角谷 信太郎さんによる、地域Ruby会議についてのお話。
- 地域Ruby会議
- 鹿児島は81個目
- RubyKaigi
- 2006年から
- 地域Ruby会議
- 2008年から
- 今年、地域Ruby会議は8回
- REGIONAL wasn't going to be mean PROVINCIAL
- RubyConfではできないことをどんどんやってくれ!!
- ”ある地域でやる"というのは”田舎でやっているやる”なんかじゃない
Rubyで作るネット回線の自動速度測定ツール
わたくし中野による、Rubyで速度測定ツールを作った話。
こちらは、いつか別の記事で投稿するので割愛。
Location-based API with Ruby
ダビさん/ヨヨさんによる、位置情報をRubyで実装する方法、RailsからPostGISを利用する方法のお話。
- pikamon という位置情報を用いた何かを作っている
- Rails6から、マルチDBがデフォルトで利用できるようなった
- ActiveRecord
- database.ymlでデータベースを指定する
- connects_to database: { writing: , reading: } にてリード/ライトのDBを分離することが可能
- ActiveRecord
- PostGISの機能
- ST_DWithin
- あるポイントから、別のポイントが指定した距離にあるかの判断
- ST_Distance
- あるポイントから、別のポイントまでの距離を返す
- ST_DWithin
Rails Girlsのお話や、初めての方向けのコミュニティについてなどお話
江森 真由美さんによる、Rails Girlsについて、コミュニティについてのお話。
- Rails Girls Tokyoの第3回、第4回のOrgnaizer
- エモリハウス家主
- RubyKaigiにあわせてゲストハウスを借り切って女性だけで使う
- Rails Girls
- 2010年11月 Helsinki, Finlandで初開催
- 世界中で580回以上開催されている
- テクノロジーを理解し、アイデアを形にできる技術を身につけるコミュニティ
- 国内のRails Girls
- 57回
- 2020年は3ヶ所を予定
- 九州のRails Girls
- 福岡、北九州、福岡の3回開催
- 女性コミュニティの意義と課題
- 男性ばかりのコミュニティだと参加しづらいと思う女性のコミュニティ参加へのきっかけ
- 初めてのコミュニティの位置づけのため、技術的なレベルは高いとはいえない
- Affirmative Action
- 日本語で積極的格差是正措置
- 弱者集団の不利な現状を、歴史的経緯や社会環境を考慮した上で是正するための改善措置のこと
- Rails Girlsと地域Rubyコミュニティの関係
- コーチは、地域Rubyコミュニティの方々にサポートしていただいている
- 参加者のその後の学習の場としての地域Rubyコミュニティ
- Rubyコミュニティ
- みんなが違和感を感じることなく、Rubyを楽しめる場所
- Matz is nice, so we are nice.
- RubyKaigi 2020
- 2020年4月9日〜11日、長野県松本市で開催
最後に
今回、初めての地域Ruby会議の参加で、いきなりの登壇でしたが、登壇者/参加者の皆さんのRubyというプログラミング言語を楽しんで活用されている様子や、優しくて熱いRubyコミュニティに触れることができました。
来年、鹿児島Ruby会議02が開催されるかもということで、また次回を楽しみしています。
運営スタッフの皆様、登壇された皆様、参加された皆様、ありがとうございました!!