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
個人的な勝負服。レースのときに必ず着ます...がそろそろ痛みが激しくなってきた。

『RubyでつくるRuby ゼロから学び直すプログラミング言語入門』を読み終わった

f:id:miyohide:20171107215659j:plain

RubyでつくるRuby ゼロから学び直すプログラミング言語入門』を読み終わりました。

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門

本書は、@tatsuosakurai さんが主催しているオンライン読書会で題材となった本。コードが出てきたら写経をしつつ、あれこれとみんなで意見を言いながら読んでいたので時間はかかりましたが、しっかりと中身を理解して読了することができました。みんなで読み進めると脱落しづらくなるので良いですね。

昔、『ふつうのコンパイラをつくろう 言語処理系をつくりながら学ぶコンパイルと実行環境の仕組み』を読もうとしてそのページ数(600ページあまり)に挫折したのですが、『RubyでつくるRuby』は130ページあまり。このコンパクトさも魅力です。

これをきっかけに『ふつうのコンパイラをつくろう』も読めちゃうのでは?とちょっと思ったり。

概要

「はじめに」を読むと、本書は

Rubyの中で特に重要な言語機能だけを抽出した言語MinRubyを使ってMinRubyのインタプリタを作ります。

とのことで、これだけを読むとなんだか難しそうですが、1章から3章ぐらいまでは「変数とは?」とか「if文とは?」みたいなことから書いてあって非常に丁寧に書かれています。

4章の電卓の実装から徐々に難易度が上る感じですが、ときどき出てくる挿絵キャラクターの可愛さに癒やされながら読み進めることができました。

f:id:miyohide:20171107215742j:plain
私のお気に入りキャラクタであるミドリロボ(と勝手に名付けている)。実はこの子、本書を読み進めるにつれて劇的な変化が...

これから

インタプリタを作成することが130ページあまりの書籍で実装できた理由の一つに、第4章から出てくるライブラリ「minruby」があります。本書では「minruby」の内部実装については一切触れていませんでしたが、1ファイル170行で実装ですし実装を読んでみようかと思っています。

RubyWorld Conference 2017で喋ってきた

はじめに

2017年11月1日、2日で開催されたRubyWorld Conference 2017にて「組込みハードウェアモジュールへのmrubyアプリケーション適用試行」というタイトルで喋ってきました。

内容は、ESP-WROOM-32を使ってmrubyアプリを動かすというもの。「業務ですか?」と聞かれたのですが、日本OSS推進フォーラムアプリケーション部会で話題に上がったものを個人的に進めていたもので、基本は個人的趣味です。業務ではこういうことをしないので、ノウハウが全然なかったり時間が取れなかったりと悪戦苦闘しましたが、無事発表にまでたどり着けることができました。

資料は後日、RubyWorld Conferenceのサイトから公開されると思います。

動機

昨年RaspberryPiを使ってmrubyアプリを動かしたことを発表したのですが、PaspberryPiはCRubyが動くのでmrubyを使う必要性があまりなく、その点を多くの人に突っ込まれました。その点は分かっていたのですが、如何せんより小型なハードウェアに関しては全然ノウハウがないため、何から手を付けたら良いのか分からずどうしようかなと思っていました。

そんななか、日本OSS推進フォーラムアプリケーション部会でESP-WROOM-32の存在を知り、おもったよりも簡単そうだったので思い切ってチャレンジしてみることにしました。

苦労した点

発表の中では全然触れませんでしたが、苦労した点としては、

  • センサーのハンダ付け
    • え?そんなところ?って感じですが、そういうところからも苦労するんです。
    • だいたい一つのセンサーで1個はハンダ付けを失敗しています。部品が安くてよかった...
    • ハンダ付けは、中学生時代の授業でちょっとやったぐらいの経験値だったので、まぁしょうがないです。
  • C APIを使ったセンサーデータの取得
    • 久しぶりにC言語を触りました。コンパイルエラーがなかなか取れませんでした(^^ゞ
    • もっと取れなかったのはメモリリークで、よくアプリが落ちました。

です。もうすこし経験値を積まないとなかなか難しい分野だと思います。

RubyWorld Conferenceという場

RubyWorld Conferenceは毎年島根県松江市で開催されるRubyのカンファレンスです。ここ数年は11月に開催されています。島根県松江市の支援のもと開催されているため他のRubyのカンファレンスとは趣が違い、県知事や市長の挨拶があったり、発表内容もよりビジネス向けの内容だったりと面白いです。

f:id:miyohide:20171102092417j:plain
橋にずらっと並べられた幟

今年のRubyWorld Conferenceは『mrubyと教育がテーマなのかな?』と思い、『ちょっと自分には関係ないかな?』って思ったのですが、フタを開けるとすべてが面白く、そのたびに気付きを得られました。

個人的メモ

全部ではないですが、個人的メモです。

東京30K秋大会を走ってきた

毎年10月に開催されている東京30K秋大会に今年も参加し30kmを走ってきました。

f:id:miyohide:20171007223625j:plain

自身の結果

タイムは2:38:15。自己ベストでした。昨日の夜から雨が降り続き、レース中は小雨から曇りになったとは言え、足元が悪い中自己ベストを出せたのは出来過ぎ。ただ、ラスト5kmはかなりしんどかったので、今月末に走る横浜マラソンに対しては若干不安を覚える結果となりました。

5kmごとのラップタイムは次の通り。

距離 ラップ 備考
0km - 5km 26:27 ちょっと早い感じ
5km - 10km 28:27 途中でトイレに入る
10km - 15km 26:41 たまたま近くにいたペースメーカーについていく。風が強く吹いていた
15km - 20km 25:01 風向きが変わったので、ペースを上げて元々のペースメーカーに追いつくようにする
20km - 25km 25:38 22km地点でペースメーカーに追いつく。
25km - 30km 26:01 何とかペースを維持したままゴール

ペース上げ下げが激しいですが、よくもってくれました。

大会の特徴

この大会の特徴は、細かいペース設定ごとにペースメーカーが付いて2分間間隔でのウェーブスタート制という点。その日の体調に合わせてスタート位置を変えられるので、自己確認の場としてかなりいい大会です。

そのためか、参加者もかなり多い大会です。特にトイレの数は全然足りないので、早め早めの行動を心がけたほうが良いと思います。