RubyWorld Conference 2018に行ってきた&Ruby Prize最終ノミネート者として表彰された

毎年恒例のRubyWorld Conference 2018に行ってきた。

今年も発表者募集に応募したのですが、採択されず。そのことについて若干いじられたりもして正直悔しい。来年はなにか発表できるように頑張りたい。

発表について

今年も多岐にわたる発表。Ruby = Railsっていう考えが多い中、本当に色々な所で使われているんだなあと。mrubyについては昨年までいろいろと取り組んでいたんだけれども、今年になって中断しているのでなんとかしたいなぁ。特にngx_mrubyについてはどこかで実戦投入したい。

ショートプレゼン

協賛企業の特典であるショートプレゼンも実施した。自社のRubyに対するこれまでの取り組みとこれからの取組みについて。発表後、NaClの井上社長から「迫力があってよかった」というお言葉をいただき、ちょっと嬉しかった。

Ruby Prize

Ruby Prizeの最終ノミネート者としてRubyWorld Conference 2018で表彰された。Rubyist Magazineに対する取り組みを評価していただいたとのことで、嬉しい。

f:id:miyohide:20181101234122j:plain

色んな人から「おめでとう」と声をかけていただき、やってきてよかったなと。RubyWorld Conferenceの場でも「記事書きますよ」と言っていただき、効果は抜群であった。

まだまだRubyist Magazineに対してはやりたいことがたくさんあるので、まだまだ続けていきたい。

Rails 5からbelongs_to associationを書くと親はデフォルト必須になった

はじめに

Rails 5(Rails 5.1?)からbelongs_to associationを書くと親が必須になっていました。これに今日はドハマリした...

具体的には、

class Post < ApplicationRecord
  belongs_to :article
end

というmodelがあったとして、rails consoleなどでPostインスタンスsaveしようとするとvalidationエラーが出ます。

> Post.new.save!
   (0.1ms)  begin transaction
   (0.1ms)  rollback transaction
Traceback (most recent call last):
        1: from (irb):3
ActiveRecord::RecordInvalid (Validation failed: Article must exist)
>

経緯

Rails 5.0から5.1にアプリをあげてテストを流していたときに大量にテストが落ちたことがきっかけです。解決に至ったのは、次のブログ。

48n.jp

回避

上記のブログにあるように、belongs_tooptional: trueをつければOKです。ソース全体を書くと

class Post < ApplicationRecord
  belongs_to :article, optional: true
end

と言った感じになります。

実際にrails consoleで確かめてみます。

> Post.new.save!
   (0.1ms)  begin transaction
  Post Create (0.5ms)  INSERT INTO "posts" ("created_at", "updated_at") VALUES (?, ?)  [["created_at", "2018-09-25 11:29:33.968321"], ["updated_at", "2018-09-25 11:29:33.968321"]]
   (1.3ms)  commit transaction
=> true
>

無事、生成できました。

Web App for Containers + PostgreSQLでコンテナ対応したRailsアプリを作ってみた

概要

Microsoftが提供しているパブリッククラウドサービス「Azure」の「Web App for Containers」を使ってRailsアプリを動かしてみました。Railsアプリと言っても、scaffoldで自動生成させたもので非常に単純なものです。Azureが提供しているPostgreSQLも合わせて使ってみたいと思い、ちょっとやってみました。

元ネタ

元ネタは「Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう! 」というSlideShare上にあったスライド。これをもとにRDBMSPostgreSQLに変更しただけです。

ハマったところ

  • Web App for ContainersがPortalにない
    • Web App on Linuxであった。
    • 言語設定が日本語版だからかもしれない。
  • Azure DB for PostgreSQLファイアウォールの設定に何を設定していいかがわからない
    • スライドでは、すべてのIPレンジを許可しているけど、さすがにそれはどうかなと
    • よくよく見てみたら、Web App for Containersの送信元はプロパティから見ることができるのでそこで制限すればできる。
  • PostgreSQLへの接続用環境変数設定漏れ
    • 環境変数の設定が漏れていて、ずっと「could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 」が表示されて困った困った。
    • ホスト、ユーザ名、パスワードを環境変数として設定すればOK。

結果

development環境としてまずは動かすことができました。

ソースは以下においてあります。

github.com

production環境で動かすためには、

をすればできそうですが、やってません。今後の課題ということで。

今後は

今後は、

  • Production環境で動かすこと
  • Application Insightsを試してみる

ことがもっぱらの目標です。いつになるか分かりませんが、ゆっくりとやっていきます。

Ruby Business Users Conference 2018に参加してきた

今年も開催されたRuby Business Users Conference 2018に参加してきました。

Ruby Business Users Conference 2018

Ruby Business Users ConferenceはRubyを活用しているビジネス事例が紹介される場として、Rubyアソシエーションが毎年2月頃に開催している場です。

今回は、

  • Matzの基調講演
  • 金川 祐太郎さんが「モバイル決済アプリ開発における動的・静的型付け言語の比較と考察」と題してPixiv Pay開発を通して感じたRuby/Rails開発の考察
    • 2ヶ月ほどでサービスリリースのスピード感がすごい。
    • Rubyではリファクタリングで名前変更するのが難しい。JavaだとIDEで一発変換。RubyMine頑張って欲しいとのこと。
  • 高宮 知弘さんが「コミュニケーションデザインRubyRubyで繋がる~」と題してWeb接客システムON SKYの紹介
    • チャットシステムはコミュニケーションの最初のステップとしてハードルが低い。
    • 完璧を目指すのではなく、最初のフィルタリングとしてのWeb接客システム。だが、効果は高い。
  • 角 幸一郎さんが「Rubyを使ったシステム開発における様々なコードレビュー」と題してコードレビューの広がりとその観点・取り組みについて
    • ここ数年でコードレビューがかなり浸透してきた感じ。開発のスピードが上がってレビューの頻度も増えてきた。
    • Pull Requestがコードレビュー手段として一気に台頭。
    • どの観点でレビューをするかをキチンと決めておくこと。
      • 個人的には、いわゆるインデントとかは機械で自動フォーマットしたい。
  • Tomoya Kawanishiさんが「Ruby on Rails プロジェクトでの他言語エコシステムとの共存方法」と題してエネチェンジ社におけるWebサービスの設計について
    • 将来の変更とサービス対応を見越してどのようにシステムを組んでいくか。ひとつが疎結合
      • 料金計算ロジックのライブラリ化やVueJSの取り込み方針など
  • 深谷 篤生さんが「esa.ioの育て方」と題してesa.ioにおけるシステム設計について
    • まさしく要望を受けてからの対応完了までのスピードが段違い。
    • コンテナ化とかマイクロサービス化など、言葉では知っているものが非常に自然に取り込まれている感じ。

という内容。どの発表も各社、各人のサービスの考えや設計を詳細に語っていただき、大変勉強になりました。

今年は基調講演が40分枠、その他の講演が20分枠。20分枠だと発表内容をかなり絞り込む必要があり、もっと話を聞きたいという思いが残りました。懇親会でフォローできればよかったのですが、ちょっと今回は参加できず。こういう場はスライドを見るだけではなく講演者と話をして理解が深まるものと思っていますので、ちょっと無理してでも参加すればよかったかな。

第56回愛媛マラソンを走ってきました

第56回愛媛マラソンを走ってきました。

f:id:miyohide:20180204145609j:plain

タイムは、グロスタイムで3:59:41、ネットタイムで3:55:42。自己ベストより7分ほど遅く、サブ4達成とは言えちょっと残念なレースとなりました。

気候としては最悪に近い状況。今季最強寒波が西日本を襲う中、普段は温暖な愛媛県もかなり冷え込み、スタート時点で気温1.5度、最高でも3度に届かず、常時5メートル程度の風が吹くというコンディション。寒いのが苦手な自分にとって悪条件が揃いましたが、それでもやるのがマラソンです。

そのため普段は半袖Tシャツにアームウォーマーという格好で走っていますが、この日に限っては寒さ対策で長袖シャツの下にアームウォーマーをつけるという感じで走りました。それでもちょっと寒い感じで、止まったら低体温症が待っていると半分恐怖を感じながら走りました。

5キロごとの結果は、以下の通り。例によって前半飛ばしすぎです。トイレに駆け込んだのをリカバリーしようとしたのが駄目だったのかなぁ。

距離 ラップタイム 備考
スタート〜5km 27:39 スタート地点の混雑は1kmすぎたあたりで抜けることができた。
5km〜10km 28:40 途中でトイレに駆け込む。
10km〜15km 26:17 順調に走れる。ちょっと早い感じ。
15km〜20km 26:06 ちょっと早い感じ。止まらない感じ。
20km〜25km 26:15 ちょっと早い感じ。止まらない感じ。
25km〜30km 26:38 ようやくいい感じに走れる。これからの坂が怖い。
30km〜35km 30:01 34キロ過ぎに急にハムストリングスに違和感。ちょっと歩く。
35km〜40km 32:46 走ったりジョグしたり。平田の坂を降りた後から徐々にスピードを上げる。
40km〜ゴール 11:20 声援とペースメーカーを見つけて元気が出る。

とりあえず、今シーズンはこれでおしまいです。これからどうやって次のシーズンまでトレーニングをつもうか色々と思案中です。が、全然整理できないでいます。何したらいいかよく分かっていない。まずは決められたペースを守って走るってことかなぁ。

第37回つくばマラソンを走ってきた

第37回つくばマラソン(42.195km)を走ってきました。

タイムは、3時間48分29秒(ネットタイム)。去年出した自己ベスト3時間52分15秒(ネットタイム)を約4分ほど更新する好成績。我ながら出来過ぎの結果です。

f:id:miyohide:20171126132722j:plain

5キロごとのラップタイムは、

距離 ラップタイム 感想
スタート - 5km 31:04 スタート時の混雑。あとちょっと右脇腹に痛みを感じていた。
5km - 10km 27:02 右脇腹の痛みも徐々に引いてきた
10km - 15km 27:26 目標とする5:30/kmのペースに慣れだす
15km - 20km 27:15 4時間のペースメーカーとともに走る。ちょっとだけおしゃべりして楽しむ。
20km - 25km 26:38 途中でテンション高めのランナーと出会う。なんだか元気が出た
25km - 30km 27:03 正念場。ちょっと痛みが出てくるが気のせいということにする。
30km - 35km 26:07 名物のおしるこは今年もスルー。ちょっともったいない。
35km - 40km 26:29 ここまで来たら後は耐える。
40km - ゴール 11:44 1キロが長い...ゴールって本当にあるのか?と思うほど。

という結果。前半抑えて後半勝負が上手く行った形です。こういうレースをずっとしたかった。

今回も多くのボランティアさんに助けてもらいました。いつもありがとうございます。

f:id:miyohide:20171126070259j:plain
朝早くから集合するボランティアさん達。ありがとうございます。

f:id:miyohide:20171126071044j:plain
ゆるキャラに励まされる

f:id:miyohide:20171125200000j:plain
個人的な勝負服。レースのときに必ず着ます...がそろそろ痛みが激しくなってきた。