こんにちは!ピクスタ開発部です。
RubyKaigiの3日間、とても早かったですね! 最終日の3日目も、開発部のメンバーが選りすぐりのセッションを紹介します。
Smalruby : The neat thing to connect Rubyists and Scratchers
"一人でも多くの青少年にプログラミングの喜びを知ってもらうこと"を理念に、Rubyプログラミング少年団を立ち上げたことと、そこで教えていることについての紹介でした。
Rubyプログラミング少年団ではScratchという、Webブラウザでマウス操作によってプログラムが書けるツールを使い教育を実施していました。 Scratchは世界各国の言語に翻訳されているので、母国語で操作することができ、プログラムを学ぶ敷居を下げています。 その他にもマウス操作をするため、構文ミスの心配もないため、子供達のやる気を阻害することが少なくなっています。 発表の中では、Scratchで作った作品の紹介もあり、子供がここまでのものを組めることに感動しました。
また、子供達がこの活動を通してプログラミング的思考を養えるとも話されていました。 プログラミング的思考の観点は大きく下記の3点です。
- どのような動きの組み合わせが必要か
- 一つ一つの動きに対応した記号を、どのように組み合わせたらいいか
- 記号の組み合わせをどのように改善していけば、より意図した活動に近くのか
大人になってプログラムを組む場合も上記の観点は非常に重要だと感じたため、子供のうちからこの考え方ができるようになるのは、とても羨ましくも思えました。
Scratchを一通り学んだ後の教材として、SmalRubyというScratchからAPIを通してRubyのコードを実行する言語の紹介もありました。 Scratchの見た目とRubyのシンタックスが似ていますし、質問の中でも「Scratchが手に馴染むと物足りなくなる子がいる」という話もあったので、Scratchを学び終えて次の一歩としては最適な言語であると思います。
現在Scratchでプログラミングを学んでいる子供達は2,000万人もいるので、ゆくゆくはRubyistになり、Ruby人口が増えると考えるとわくわくしますね!
Tamashii - Create Rails IoT applications more easily
IoT機器を操作する場合、だいたいC言語などの低レベルな言語を使うことになり、Webエンジニアによっては敷居が高く感じるかもしれません。 TamashiiはRailsアプリとIoT機器(Raspberry Pi)とWebSocketで接続しておき、Railsエンジニアが慣れ親しんだWebアプリケーションからIoT機器を操作できる、というフレームワークです。
まだ操作できる部品はブザー、SuicaなどのRFIDのカード、キーボード(ボタン)などに限られますが、操作できる部品は増えていくことでしょう! RailsからRedisのQueueにIoT機器へのリクエストをためておき、IoT機器からpopしてくる構成だそうです。 実際に大きなカンファレンスの入場許可とトラッキングで使った実績があるそうです。
Writing Lint for Ruby
ピクスタでも利用しているSideCIを開発しているMasataka Kuwabaraさんの発表で、RuboCop(Rubyの静的解析ツール)がどういう仕組みで動いており、どういうことができ、何ができないのか、ということを紹介していただきました。
RuboCopはAbstract Syntax Tree(AST, 抽象構文木)を用いてRubyを解析しており、ネストの深さや条件の複雑さを解析しています。 簡単な例と共にASTの解析部分をしていただき、私もRuboCopを改善したい時、Pull Requestが出せるのでは!?という気持ちになりました。
RuboCopは利用者も多く、たくさんの質問が挙がり、大変盛り上がりました!
Pattern Matching in Ruby
YUKI TORIIさんの発表『Pattern Matching in Ruby』のご紹介をしたいと思います。
プログラミングElixirを翻訳された際に出会ったパターンマッチングをRubyでやりたくなり、Rubyの拡張にチャレンジしたそうです。 6つほどのサンプルコードを使ってパターンマッチングのデモを見せてくれました。
=~
をマッチ用オペレーターとして
パターンは%記法を使って%p(…)
。- さらに
===
を使ってマッチ用オペレーターとするのはどうでしょう?と言うご提案。
===
ではなくcase文なのは、when condition then
は、if condition === value
の特殊形ということですよね。 - ハッシュのパターンマッチングの確認
- 配列の中のハッシュのパターンマッチングの確認
- Regexを使ったパターンマッチング
パターンマッチングの例では、さりげなく
Carp
に差し代わっていました。
%p({ name: /^C.*p/, version: version })
Elixirでは、=
は代入演算子ではなく、パターンマッチ演算子だそうです。 - オブジェクトクラスでのパターンマッチングの確認
拡張した差分については、この辺り?
お子さんの紹介から始まり、Rubyコミッタでもある旦那さんのko1さんのサポートで実装を終えたという家族愛の溢れるプレゼンテーションでした。
Bundler 2
Bundlerのcore teamの一員であるColby Swandale氏による、最近Bundlerに追加された機能、および次期メジャーリリースとなるBundler 2の紹介セッションでした。
Bundlerはgem管理のためのツールで、Rubyを書いている方であれば日常的に利用されているかと思います。 バージョン1.0.0がリリースされたのが2010年の8月で、以後継続的に開発が続けられており、2017年9月現在では1.16.0のリリースを控えています。 Swandale氏によれば、1.16系が1系の最後のバージョンになりそうとのことでした。
発表では、まずBundlerに直近1年で追加された機能がいくつか紹介されました。
個人的に印象的だったのが、plugin機構のサポートです。
これは、bundle foo
形式で実行できる新しいコマンドを追加したり、bundle install
をはじめとした既存コマンドへのフックを簡単に書くための仕組みです。
これを使うことで、Bundler本体に手を加えることなく機能を追加できるので、開発者が新しい機能を提案・実装することが以前よりも簡単になります。
次に、タイトルにもあるBundler 2の変更点が紹介されました。
個人的に気になっていたのが現在のバージョン1系との互換性についてです。
というのも、筆者は発表前にBundler 2ではGemfile
とGemfile.lock
がそれぞれgems.rb
とgems.locked
に変更される予定になっていることを知っていたからです。
こちらについては発表と質疑応答の両方で言及があり、まとめると「Bundler 2は既存のGemfile(.lock)
を解釈できるが、一度bundle install
すると1系には戻れない」ということのようでした。
Bundler 2では、この他にも細かな改善をはじめとした様々な変更点があります。 これらは下記のPRにまとまめられているので、興味のある方はチェックしてみてください。
おわりに
ピクスタの開発部では3日間を通して、RubyKaigiに参加することができなかった方でもイベントの内容が楽しめるように、実況ツイートをしてきました。 微力ではありますが、スポンサーになったことや、実況ツイートで、Rubyの取り組みに寄与できたのではないかと思います。
弊社では、Rubyへの貢献に興味があるかたを募集しています! recruit.pixta.co.jp