satococoa's blog

Web や iOS アプリを作るエンジニアの日記です

Rails 5.1 で rails test と rails test:system の RAILS_ENV に関する挙動の違いメモ

RAILS_ENV が指定されている場合 rails test コマンドと rails test:system コマンドの挙動が違う。 おそらくそれぞれ rails command として実装されているか、rake タスクとして実装されているかによる違い。

  • rails test で実行 → RAILS_ENV が test に上書きされて実行される
  • rails test:system で実行 → RAILS_ENV に指定された環境で実行される
    • rails test:db も同様

docker-compose.yml で RAILS_ENV=development としていたコンテナでシステムテストを実行して気づいた。 今はテスト実行のコマンドを rails test test/* とすることで回避している。 (ちなみに rails testシステムテストを実行しないのは rails の意図した動作である。)

これは rails の意図した動作なのか、それとも意図していない動作なので rails/rails を直すべきなのか、またはコンテナに RAILS_ENV を指定しないべきなのか判断がつかなかったけれども、あとで忘れるといけないのでメモだけ残す。

Firebase Unity SDK を .NET 4.6 で使おうとしたら Task でハマった

@see https://groups.google.com/d/msg/firebase-talk/2w1Lk62VIcg/1ysauzl9CwAJ

2017-10-27 追記

コード中で async/await 使わない場合は (ContinueWith でコールバック書いた場合は) 以下の対応をしなくても、普通に使えた。 合わせて Firebase SDK 4.2.1 にアップデートしているのでそちらの影響かも。。不確かでアレですが、メモとして残しておきます。

追記終わり

どうも System.Threading.Tasks.Task が古い .NET では提供されていないため、Firebase Unity SDK 側が同梱してくれていて、それ関連でうまくいってなかった。

最初に出てたのはこんなエラー。

The type 'Task' exists in both 'Unity.Tasks, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' and 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' [Assembly-CSharp]

で、上記 URL の指示に従って Unity 上で作業

  • Assets/Parse/Unity.Tasks を削除
  • Assets/Parse/dotNet45/Unity.Tasks を選択してインスペクタから以下のように設定して有効化

f:id:satococoa:20171025160009p:plain

これで動いた。

第22回 RubyMotion もくもく会に参加した

rubymotionjp.connpass.com

東京開催は約1年と8ヶ月ぶり?となる RubyMotion もくもく会に参加しました。 今回は @youchan さん主催の元、ユビレジさんのオフィスを使わせていただく形でリスタートしてます。

僕は最近はほとんどクライアント側のコードに触れておらず、Web と API ばかり開発しています。 ということで今回はすっかり古くなってしまった知識をアップデートするとともに、RubyKaigi での @lrz さんの発表 の動画を見てました。

ここ2年くらいの間に変わったことなどを箇条書きで。

  • 料金プランが変わり、無料版 (starter) や Professional 版 が出ています。 Download | RubyMotion
    • Starter の制限としては iOSAndroid の最新の安定版しかサポートされていなかったり、スプラッシュスクリーンがカスタマイズできなかったり、、という程度です。
  • 対応プラットフォームが増えています。 iOS, Android, OSX, watchOS, tvOS に対応しています。

久しぶりだったので以前自分が書いた チュートリアル記事 を参考に簡単なテーブルビューにデータを表示するだけのアプリを作ってみましたが、特にハマりどころもなく普通に動きました。

iPhone 6 が出て AutoLayout & Storyboard がほぼ事実上必須 (しかも結構大変) となったあたりで、「どうせ Xcode 開くし長い時間 Xcode で作業するならそのまま ObjC / Swift で書けばいいかー」と思ってしばらく RubyMotion から離れていたのですが、iOS9 で UIStackView が来たおかげで Storyboard でごにょごにょ頑張る部分がだいぶ楽になったのではーと思っています。

そうすると相対的にロジックの実装に集中出来る時間も増えるわけで、また RubyMotion を見直してみてもいいかな、と思いました。

pplog の Push通知 (Apple Push Notification Service) の証明書を更新した

年に一回やらないと Push 通知が送れなくなっちゃうあれですね。

新しく生成してみたら期限が1年と1ヶ月になってました。 f:id:satococoa:20160124154646p:plain

この手の証明書の生成はポチポチブラウザでやってもいいのですが、最近は fastlane シリーズの pem gem を使っています。 pem と一発打つだけで自動的にキーペア、Certificate Request を作って要求し、生成された証明書をダウンロードして pem ファイルまで作ってくれる便利なコマンドです。出来上がった pem ファイルだけをサーバに上げれば Push 通知が送れます。(ちなみに development 環境の証明書を作りたい場合は pem --development と打つ)

あとは PR 出して終わり。 f:id:satococoa:20160124155511p:plain

Nice Cert.

やさしい AJAX on Rails という資料を作りました

最近 SPA (Single Page Application) についての議論が盛んで、Angular とか React とか Flux とか Mithril とかの名前をよく聞くようになりました。

でも必ずしも全ての Web アプリにおいて SPA は必須ではありません。

むしろ枯れた jQueryRailsremote: true の仕組みを正しく使うだけで十分なケースも多数あると思います。 (特に iOS, Android のネイティブ開発者が身近にいる環境では SPA で開発するのとネイティブで実装するのとでは後者の方がコストが低いこともありますし。)

ということで、「じゃあ RailsAjax ってどうやって実装するんだっけか?」というところをまとめた資料を公開します。 中級者以上の方にとっては特に目新しい情報は無いと思いますが、経験の浅い方の自己学習や研修などでよろしければお役立ていただけると幸いです。

サンプルコードはここ: https://github.com/satococoa/easy-js-on-rails

WWDC 2015に参加しています

運良くWWDC 2015のチケットを手に入れることができたのでサンフランシスコまで来ています。

f:id:satococoa:20150609074435j:plain

Keynote

WWDCと言えばKeynoteですね。10:00開始なのですが会場には前日の夕方くらいからもう並び始めている人がいました。 僕は時差ボケのせいで眠気がひどかったのでのんびり7:30くらいに会場着でした。あまり遅くなるとメインの会場には入れずに別室でストリーミングを見ることになるという話も聞いていたのでちょっと覚悟していたのですが、幸いちゃんとステージが見られる席に座ることができました。

f:id:satococoa:20150608093657j:plain

予想通りApple Watchでネイティブのアプリがちゃんと開発できるようになりましたね。watchのセンサーとかTapTicエンジンとかを使えるので本来Apple Watchで作りたいと思っていたアイディアがいろいろ実現できそうです。

また従来はiPhone側で処理を実行していたためにiPhoneとの間で通信が走らざるを得ない仕組みになっていて、正直Apple WatchのAppを積極的に利用することはほとんどありませんでした。

実際「Apple Watchどうですか?」みたいに人に聞かれたときは大抵「時計として便利です。あと通知とグランスは結構使います。」みたいに答えていました。watchOS 2からはアプリも活用できるようになるかもしれません。

iOSOSXに関してはそんなに驚きはなかったものの、Swift 2.0とオープンソース化の発表でだいぶ沸きましたね。 ところでApple Musicはなんであんなに長くしゃべってたのでしょうね。開発者に見せてもどうしようもない内容だとは思うのですが。。

セッション

大体の内容はKeynoteの直後にあるPlatforms State of the Unionでカバーされているんですね。もうWebにもアップされているのでざっと今回のWWDCの全体像をつかみたい人はそこから眺めるといいかもしれません。 https://developer.apple.com/videos/wwdc/2015/?id=102

もうすでにかなりの数のセッションの動画がUPされているようで、単純に発表内容を追いたいだけの場合は現地に来なくても十分情報が得られるんですね。

主にセッションはwatchOS関連、開発ツール関連(XcodeとかStoryboard絡みとか)、iOSの新機能の順番の優先順位で受講しています。 特にStoryboard関連がかなり進化している印象で、Storyboard ReferenceとかStack Viewなんかは今すぐ使いたいですね。

生活面

英会話が得意じゃないので正直、結構苦労しています。セッションはスライドもあるし、単語は大抵わかるものばかりだから大体理解できるのですが、突然誰かに話しかけられたりお店やレストランで注文したりっていうところでまごついてしまいます。。 これは本格的に日本に帰ったら英会話を鍛える方法を考えないといけないなぁと思いました。

宿泊先はありがたいことに同僚の家に泊めてもらっているためかなり費用が浮いています。会場からBART+徒歩で1時間程度のところなので、ちょっとした通勤気分も味わえて、「アメリカで暮らすのってこういう感じなんだなぁ」という体験ができています。

治安面が悪いから気をつけるようにとあちこちで言われていたのでかなりびびっていたのですが、実際こちらに来てみると親切で丁寧な人が多い印象を受けています。今の所怖い目には合っていないのでこのまま無事に帰国できるようにしたいです。

大体ぼっち行動なのでご飯なんかは気の向くままに適当にフラフラ行っているのですが、同僚に教えてもらったTu Lanが今のところ一番美味しかったです。

f:id:satococoa:20150609121215j:plain

治安が悪いと言われているテンダーロインの近くなのでちょっと怖いですが、もう一回くらい食べに行きたい感じ。

Growing Rails Applications in Practiceを読んだ

pragprog.com

読み終わったのはもう先月ですが、学ぶことが多い本だったので紹介しときます。 @1syoさんと@miyohideさんとやってる読書会の前回の課題図書でした。

どんな本?

まずは目次を見てみると良いと思います。 心に残った章だけちょっと抜粋すると、以下のような内容が書いてあります。

  • Beautiful controllers: コントローラのAPIを共通化して、コードを減らす方法
  • User interactions without a database: Formオブジェクトとか作って、コントローラからコードを減らそう
  • Dealing with fat models: fat model を回避するには / FormオブジェクトととかServiceオブジェクトはこんな風に作るといいよ
  • Taming stylesheets: BEMを "実践的に" 取り入れて、CSSも設計しよう
  • Building applications to last: 長くメンテするつもりのアプリはこんなこと気をつけて

誰のための本?

上述の箇条書きですが、ある程度以上の規模のアプリケーションをrailsで作ってるとみんな直面する問題ばかりだと思います。 これらの問題に関心がある方は是非一読していただきたいと思います。

BEMの項については以前紹介した(Web制作者のためのCSS設計の教科書を読んだ - satococoa's blogWeb制作者のためのCSS設計の教科書 モダンWeb開発に欠かせない「修正しやすいCSS」の設計手法 を読んでおくとさらに理解が深まって良いと思います。"Web制作者のためのCSS設計の教科書"の方でBEM(やそれ以外のフレームワーク)の考え方を理解し、実践的な使い方を"Growing Rails Applications in Practice"で知る感じです。

うちの会社でも読書会をやろうかなぁと検討しています。