[Rails] Action Cableの実装方法


JQueryは古いテクノロジーとはいえ、さくっと動くものを作るときは異常に簡単です。
古いテクノロジーは悪ではなく適材適所で使っていくのが大事だと思っています。

まずは、最初からあるapp/assets/javascripts/cable.jsを該当layoutで読み込みます。

全部のViewでApp.cableを呼ぶ必要はないのでcontent_forでActionCableとの通信をとるViewだけJSを走らせるようにします。

JSでは、App.cableにイベントを登録していきます。 引数のchannelにはクラス名、引数を渡すとparamsに入ってサーバ側で処理できます。this.performを使ってクラス内のメソッドを呼ぶことができます。development環境では別プロセスで動作確認ができないのでsetTimeoutを用いてテストしています。

HTML部分は下記のような感じ。

で最後になりますが、ActionCableを継承したクラスです。subscribedがconnectionとともに走ります。 stream_for MODELでモデルに関係したチャネルが接続されます。 そして、broadcast_to(MODEL, object)でそのモデルへの接続を確率したチャネルにプッシュすることができます。

これでダイナミックにDOMを操作できるようになりました。


[Rails] Device利用時のconnection.rb(Action Cable)


Railsガイドで説明されているconnection.rbはcookieを利用しているもので、deviseを利用する場合は、request.envに設定されているwardenのものを取ってくる必要がある。 もしくはsessionの中を漁る感じ、request.envの方が綺麗に書けるのでこちらを採用した。 (Essentially, the both are cookie tho..)

参考: https://stackoverflow.com/questions/38470463/rails-devise-action-cable


AWS Ruby SDKでCost Exploreの情報を取得する方法


aws-sdk version3での話です。

1. aws-sdkのCost Exploreのモジュールを読み込む

2. IAMユーザに請求情報のアクセス権を与える

上部のナビバーのアカウントをクリックして、請求情報のアクセスのeditをクリックしてIAMアクセスのアクティブ化をチェックして保存。

3. IAMユーザに必要なロールを設定して追加する

下記のロールを作成し(今回はGEtCostAndUsageのみ)、該当ユーザでロールを追加する

4. REPLでテスト

Rails cでコンソールを呼び出しテスト。各キーは設定済みとする。

初期化。us-east-1でのみ提供されている

BlendedCostとUnblendedCostの差がわかりづらい。Unblendedの方が割引などを除いた実際の数値に近いという理解で良いのか。

ドキュメントを読み試行錯誤の結果、タグに紐づいたコストを引くことができた。

注意

Cost ExploreのAPIリクエストにはお金がかかりそう。。


vim-session プラグインを使ってtabごとsessionを保存する方法


tmuxで指定したwindow/paneから始める方法 [再起動も安心]を説明したが、Vimのセッション情報もタブを含めてRestoreしたい。 最初は全て自動で保存しようとしたが、必要に応じて自分でセッションを保存した方が実用的。ブラウザのタブのように、使わないタブが残ってしまい必要のないタブが溜まっていってしまう。

vimはデフォルトでセッションの管理が可能だが、細かいところまで残すにはvim-sessionを使った方が良い。

.vimrc

SaveSessionとタイプするのが面倒なのでノーマルモードで\ssでSaveSessionを呼び出す。

例えば、セッションをProject毎に保存する場合は、引数のセッション名にプロジェクト名を指定することでプロジェクトごとのセッションの作成が可能。

.vim/sessions/<session name>.vimに保存されるのでこれをvimの引数として呼び出せばよい。

実際は、tmuxの起動スクリプトに書いておけば良い。


[Cloud IDE] Codenvy ファーストインプレッション


redhatが買収したCodenvyです。Eclipse Cheを利用したIDEでEcliseユーザに馴染み深いものになっているのではないでしょうか。

一言でまとめるなら、”2018年だったらCodenvy使うよね”という感じです。程よくインフラが抽象化されていて開発環境を提供するという目的に則していると思います。

スクショで見ていきます。

Socialボタンによるサインアップ・ログインを完備

Email/passだけではなく、githubログインなどがあるのは良いですね。

今回はgithubログインを選択。ユーザデータ、sshキー、レポジトリへのアクセスが取られます。githubを利用した開発フローならば後で必要になると思うので許可します。

プロフィールを設定してサインアップ終了

3GのRAMが無料で使える!

太っ腹ですね。

Workspace毎にVMが立ち上がる

Cloud9などのサービスだと開発するサーバを意識して作らないといけませんが、workspaceという名前になっていてサーバ側を意識しない環境になっています。

ワークスペースの設置でどの開発環境で行うか選べる。

Herokuみたいに環境をぽちぽち選べる。これはすごい。Railsもありました。

選べるstack。

Dockerによる開発環境提供

作成するとdockerのイメージが立ち上がる。30秒ぐらいで立ち上がります。

開発環境はUbuntu

4Gストレージ付き

10分使用しないと停止設定

おそらくこれが課金ポイントでしょう。10分なんてロジックを考えてたり、同僚とdiscussionしてたら過ぎてしまいますしね。それ毎に30秒待つの苦しい。

Projectを作って開始

残念なのはRailsのプロジェクトがない。。Eclipse開発系多めという印象でしょうか。

まとめ

  • クレジットカードを入れることなく始められる
  • 3GRAMまで無料で利用できる(2018年8月時点)
  • 環境設定を一からやる必要のないStackという概念
  • インフラ(サーバー)を意識しない設計
  • Eclipse好きな人には良さそう

[Cloud IDE] Koding ファーストインプレッション


Koding – Modern Dev Environment Delivered

Cloud9との比較で引用されるKodingです。彼らのポジションとしてはCloud IDEでないと言っていますが、ユーザの主はそれで流入しているのではないでしょうか。

Koding is not an Online IDE. … Koding provisions development environments, makes them accessible locally.

from koding blog

“チーム開発を主体とした開発環境を提供する”ことを目標にしている。スタックを自分で作るなど、面倒な部分があります。

スクショで見ていきましょう。

ユーザ登録にクレジットカードが必要

このステップはAWSを使うときにも必要ですが、Amazonほど大きくない会社にいきなりクレジットカードを預けるのは少し心配な気がします。あまり、中身を見ないでdeveloper soloを選択しました。(これが原因かあとでチームで新しいアカウントを作成してもスタックを選ばないと進めない状況になりました。。)

emailとチーム名を入力

ユーザ・パスワードを入力

クレジットカード情報を入力

チームのサブドメインを作成

Stack(接続するサーバー)を作る必要がある

Dveloper soloを選択したのが理由かわかりませんが(あとでチームも作成しましたが同じでした),スタックを選ぶところから始まります。 AWS, Vagrant, Google Cloud Platform, Digital Ocean, Azure, Marathon, softlayerが2018年8月時点で選べるようです。つまり、開発者が開発するサーバを決めなければなりません。

AWSのAPIキーを入力し、Credentialを作成

AWSのstackを利用するにはAPIキーが必要

AWSを触ったかとがある人ならIAMでユーザを作って始めればいいとわかりますが、初心者には大変かもしれません。

stackを作成

Ace Editorを利用したコーディング

Cloud9と同じAce Editorのエディタを利用しているようです。 設定はCloud9の方が細かく設定できそうです。

まとめ

  • UIがCool&可愛いので好感がもてる
  • クレジットカードを最初に入れるのはハードルが高い
  • 一人で開発するにはあまり利点がなさそう。逆にチームでの機能が充実している?(試してません)
  • Stack(Server)は自分で設定するのである程度インフラの知識が必要
  • 一人でAWSをStackに使うならCloud9の方が良さそう

[Cloud IDE] AWS Cloud9ファーストインプレッション


Cloud9

一番有名どころのCloud IDEです。 AWSに買収されてAWSのファミリーとしてCloud9を利用することができます。
今から登録するとAWSに統合されたCloud9にリダイレクトされますが、買収前のCloud9も依然として利用することができます。(会社の一人の開発者も前のCloud9を利用中です)

一言でまとめると”EC2インスタンスについたIDEの皮”だと思います。

EC2を利用していた人にはとっつきやすいですが、設定時にAWSワードがでてくるので知らない人は勉強する必要があります。将来的に知っておいて損はないのでここから始めるのも手だと思います。これがAmazonが買収した意図かもしれません。

スクショでみていきましょう。

Tokyoリージョンは選べない

3ステップの環境設定

セカンドステップでAWS用語のec2やt2.microなどがでてくる。プログラムを書くという目的のためにインフラを知る必要があるのかどうかは疑問だ。逆に知っている人はサクサクいける。t2.microの1Gメモリじゃアプリ乗ってもスワップしまくって作業にならないとか。



初期起動は2,3分ぐらいかかる

ec2インスタンスだしそのぐらいかかるよね。

デフォルトでEC2インスタンスに直接sshは不可

普通のt2.microインスタンスです。セキュリティグループであるサブネットのsshしかデフォルトオープンしてない。そして、keyが設定されてないのでCloud9のインスタンスの直接サーバ化には、インスタンス自体のsshサーバの設定を変更して、sshをパブリックにオープンする必要がありそう。


美しいUIと多岐にわたる設定

ACE editor。オープンソースのAceエディタにはドキュメントがあまりなくここまで綺麗にするには独自のノウハウor凄まじい時間をかけてアダプトしたのか(戦々恐々)。Ace editorのテーマはサポートされていてそれにあうUIも良い感じ。これを使いこなすのはまた別途勉強が必要。プラグイン機構がなさげなのが残念。

再開時に30秒ほどかかる

30分利用しない(デフォルトが30分。変更可能)とEC2インスタンスが停止し、課金が止まる。したがって、停止から再開に30-40秒ほどかかる。

まとめ

  • ブラウザ一つで開発が進められる。
  • UIは美しく、もっさり感もあまりない。しかし、IDEの設定が沢山ある。
  • 停止から再開に30-40秒ほどかかるので少し待つ必要がある
  • Tokyoリージョンで使えない。しかし、シンガポールでも遅延は気にならない。
  • 下記のような良心的な価格設定から始められる。 大規模なRailsアプリなどは1Gじゃ足りないので他のインスタンスを使う必要あり。価格帯は教育用途には合っているように思う。


[AWS][Ruby] EC2インスタンスなどのリソースにtagを追加する方法


AWSのRuby SDK version3での話。

Gemfileに下記を追加して、

create_tag methodを呼べば良い。Resouceで各リソースのID系を入れればうまくやってくれそう。


[Rails] Bitwise Operator(ビット演算)を用いた曜日の管理


Cronのように曜日を指定してジョブを発動するスケジューラを作成していて、外部にこれを保持するテーブルを作るのはセンスがないし、mondayからsundayのカラムを作るのも無駄に感じたので、ビットを使って曜日を表現し、これを用いて曜日の判別をしようと思いました。 Railsでビット演算を用いたチェックボックスのフラグ管理をしてみたを多いに参考にさせていただきました。

具体的には下記のように表現します。

  • 月曜日 0b1
  • 火曜日 0b10
  • 水曜日 0b100
  • 木曜日 0b1000
  • 金曜日 0b10000
  • 土曜日 0b100000
  • 日曜日 0b1000000

1100101の場合、月曜日、水曜日、土曜日、日曜日が選択されている状態です。 1バイト以下の7bitで表現できるのでメモリにもストレージにも優しいですね。

Migrationファイルを作り、DBカラムwday作成。

View/Controllerは下記のようになりDBには整数で保存されます。

これを使う時に、&し判定します。 0でない場合は、曜日フラグが立っているということです。  僕の遠い昔のアセンブリ言語の記憶が正しければbitのAND計算は鬼早いはずです。

DBに対しては、月曜日にフラグがたってるRowを取り出すには、

ビットフラグの管理はアプリケーション側にその管理を要求するのしっかりドキュメントしておく必要がありますので、忘れずにコメントを書いておきましょう。


Scroll to top