hotoolong's blog

RailsやVim、業務で気になったことを綴ってます

GoogleMapsの地図表示がおかしくなる。

はじめの数秒は地図が表示されるが、その後すぐに地図が表示されなくなる現象が度々起きている。画面は以下のような状態になってしまう。

f:id:hotoolong:20180814012548p:plain

HTTPステータスが400が大量に出ているのでなんだろうかとおもってGoogleさんに確認してみたのですが、返事がなく。。

何がおかしいのかわからないのですが、google.co.jpのドメインで地図を確認してると見れなかったのですが、ドメインgoogle.comに変更すると見えてました。 そこでgoogle.co.jpのCookieを削除してみると表示されるようになりました。一体何が悪かったのやら、、 困った人がいましたらCookieを削除して見てください。

MacのDockerもVersion 18.06.0-ceになってdocker buildが改善

github.com

7/18に先行してリリースされていたDockerの18.06.0-ceですが、 for Macにも対応されました。

今回の改善でかなりbuild速度が改善されているということで今後もDockerがコンテナ技術を引っ張っていきそうですね。

dockerjp.connpass.com

Docker Meetup Tokyo #24 (DockerCon 2018報告会) に参加してきたのですが、

www.slideshare.net

ここにまとめてくださっています。 簡単にまとめると

  • docker buildの速度が大幅に改善されている
  • 並列化された
  • キャッシュが使えるようになった
  • BuildKit を使うことでいろいろ多機能になったのと今後の拡張性が展開される予定

今後はリリースタイミングは半年ペースに落ち着くのですが、目が離せない技術ですね。

orderで特定の文字列順に並び替える

数字順で昇順、降順で並び替えるのはよくありますが、 カラムに文字列を設定してしまっていると、並び替えたくなったときにすこし不便ですね。 そんなときにはfieldを使うとうまく並び替えれます。

select 
  id, 
  name
from items
order by field(items.size, 'XL', 'LL', 'L', 'M', 'S', 'SS', 'XS')

なようなことができます。

Railsで使う場合もscopeに登録しておくと便利そうです。

scope :order_size, -> { order("field(items.size, 'XL', 'LL', 'L', 'M', 'S', 'SS', 'XS')") }

G Suite の最新便利機能 がかなり便利そう

cloudonair.withgoogle.com G Suiteを使うことで社内ミーティングの調整が楽になったり、 簡易チャットですばやく打ち合わせできたり、 動画の音声をCloud Searchを使って検索できるのはかなりの効率化ができそうで未来を感じますね。

WWDCがあったけどこのタイミングで新しいMacBookProが発表されたよ

www.apple.com

サプライズ!?なのかこのタイミングで新しいMacBookProが発表になりましたね。 私としてはスペックが上がって嬉しいところではあるものの価格とキーボードが気になるところです。

私のほしいスペックで見積もり見てみたのですが、税別で27万5800円なので、30万近くになってしまいます。 f:id:hotoolong:20180713114408p:plain

高い買い物になるので、なかなか悩みどころですね。

13inchで32G詰めると嬉しいところなんですがね。。

Railsのmigrationでchange_columnを利用する

change_column

Railsのmigrationでカラムの情報を変更したい場合によく使うchange_columnですが、

change_column(table_name, column_name, type, options = {})

と変更したいtypeを設定してoptionsを設定すればいいので、add_columnなどとインターフェイスが変わらず設定できます。

change_column_null

NULLのtrue/falseを切り替えたいだけの場合は change_column_nullが便利ですね。

change_column_null(:users, :nickname, false)

の用に設定できます。

change_column_comment

カラムに設定するコメントのみを変更する場合はchange_column_commentですね。 nilを入れることで設定しているコメントを削除することもできます。

change_column_comment(:users, :id, 'comment')
change_column_comment(:users, :nickname, nil)

change_column_default

最後にカラムのデフォルト値を変更するchange_column_defaultなのですが、 このメソッドは引数にHashで:from と :to で設定することで可逆的な設定がすることができます。

change_column_default(:posts, :state, from: nil, to: "draft")

これは便利ですね。 テストで作ったけど戻したい等の場合はとても役に立ちます。

mysqldumpでテーブルを対象、対象外にする

mysqldumpを定期的にするのですが、 対象外にしたいテーブルが複数でてきたときの対応方法をメモしておきます。

ダンプファイルと取るときには直接テーブル名を選択すればいいケースもあります。 以下のコマンドですと一番上を選択してデータベースを指定して登録したいテーブル名を後ろに列挙するといいですね。

shell> mysqldump [options] db_name [tbl_name ...]
shell> mysqldump [options] --databases db_name ...
shell> mysqldump [options] --all-databases

MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.5.4 mysqldump — データベースバックアッププログラム

オプションはいろいろあるので見てもらうとして、対象外にしたい場合は--ignore-tableをつければ良さそうです。

ただ複数テーブル対象外にしたい場合は少し厄介で、--ignore-table=db_name.table_name をたくさん作らないといけなくなります。

shellで書くとすると以下みたいにつくります。

  db_host=hogehoge_host
  db_name=hogehoge_db
  db_user=hogehoge_user

  ignore_tables=("tests" "users" "accounts")
  ignore_option_str=""
  for tab in $ignore_tables[@]; do
    ignore_option_str=$ignore_option_str" --ignore-table=$db_name.$tab"
  done
  mysqldump --single-transaction $ignore_option_str -h $db_host -u $db_user -p $db_name

対象のテーブル名の方が少ない場合はテーブル名を列挙して取るのが早そうなので、ケースによって判断して取得するのがいいですかね。