【Rails】MySQLテーブルの文字コードを変更する

テーブルの文字コードをutf8mb4に変更するさいに調べていたが既存のテーブルについては新たにmigrationファイルを作って文字コードを変更するSQLを実行するのが必要そうだったが、調べるのに時間かかったのでメモしておく。

$ ./bin/rails g migration change_table_charset

db/migrate/xxxxxxxxxxx_change_table_charset.rb

class ChangeTableCharset < ActiveRecord::Migration[5.1]
  def change
    ActiveRecord::Base.connection.tables.each{|table|
      sql = "ALTER TABLE #{table} CONVERT TO CHARACTER SET utf8mb4"
      ActiveRecord::Base.connection.execute(sql)
    }
  end
end

全テーブルに対して、順次 alter table実行していく。こんなので本当によいのかは不明。けどできた。

ionic(cordova)iPhoneXでスプラッシュ画像が正しく表示されなかったときの対応

まず、スプラッシュ画像をセットする方法は2つあってxcodeのimages.xcassetsの以下のどちらかに正しいサイズの画像をセットすれば良いらしい。
1. LaunchImageに画像をセット
2. LaunchStoryboardに画像をセット

今回は1.の方でやったときの流れをメモしておく。

1. 画像を準備
1125 x 2436 と 2436 x 1125 の画像をそれぞれ準備して、resources/ios/splashに置く。

2. config.xmlの編集

config.xml

・・・
<splash src="resources/ios/splash/1125_2436.png" width="1125" height="2436"/>
<splash src="resources/ios/splash/2436_1125.png" width="2436" height="1125"/>
・・・

いちおうこれだけで上手く行く予定だったのが、上手くいかずに少しハマった。。スプラッシュの制御で、cordova-plugin-splashscreen というプラグインを使っているようだが、これのバージョンがデフォルトのままだとiPhoneXに対応されていないようで、githubから直接DLする必要があった。

$ ionic plugin rm cordova-plugin-splashscreen
$ ionic plugin add ionic plugin add https://github.com/apache/cordova-plugin-splashscreen.git#5.0.2

https://github.com/apache/cordova-plugin-splashscreen/commit/4ffaaa295202fb5adfcf5644c6226bdb31b283bb
こちらのコミットで対応いただけたらしく、5.0.2以上が必要ぽかった。

以上です

【mac】grepで半角カナを検索できずにハマった

以下のコマンドでいけると思ったのだが意図した動きにならずに色々調べるハメになったのでメモしておく。

$ grep '[ア-ン]' file
使われているロケール文字コードが正しいか?
$ locale
LANG="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_CTYPE="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_ALL=

問題なさそうだった

[ア-ン]の指定の仕方は正しいのか?

http://orange-factory.com/sample/utf8/code3-ef.html
こちらを見るとア=EFBDA7 ン=EFBE9Dの範囲でちゃんと連続しているので問題なさそう。

日本語が使えない?
$ grep [0-9] file

これだと意図した動きになる

$ grep [ア-ン] file

これでも意図した動きにならない

借りてるVPS(CentOS6)だと日本語でも意図した動きになる

mac

$ grep -V
grep (BSD grep) 2.5.1-FreeBSD

centos

$ grep -V
grep (GNU grep) 2.20

BSDGNUgrepの系統が違うぽい。
その後調べるとhomebrewでggrepというのが入れられぽい。

mac

$ brew install ggrep
$ ggrep -V
ggrep (GNU grep) 3.1

CentOSと同じGNU grepがインストールされた。

$ ggrep '[ア-ン]' file

検索できた!

BSD grepだと日本語の正規表現検索が上手くできないという解釈でよいのかな。。以上です

【iOS】AdHoc版アプリが起動しなくなったときに調べたこと

前提としてはずっとAdHoc版でデプロイゲートから配布していたアプリが突然起動しなくなったとのこと。
ipaの有効期限を見ても期限内だったのでちょっととまどったがその時に調べたことをメモしておく。

AdHoc版のipaからembedded.mobileprovisionを確認

発生日時が 2017/12/1 とする

Payload/xxxxx.app/embedded.mobileprovision(日付は適当)

CreationDate : 2017-01-01T00:00:00Z
ExpirationDate : 2018-01-01T23:59:59Z
TimeToLive : 365

これを見る限り有効期限はまだ問題なさそう。

ApplicationIdentifierPrefix : AAAAAAAAAA
DeveloperCertificates : AAAAA・・・AAAAA

ここからどの証明書でビルドされたかわかるらしい。DeveloperCertificatesにはPEM形式の文字列が書かれている。

Apple DeveloperのiOS Certificatesから該当の証明書をDLしてダブルクリックでキーチェーンに登録。
キーチェーンアクセスの証明書から、上のApplicationIdentifierPrefix(AAAAAAAAAA)が名前に入っている証明書を探す。
iPhone Distribution: xxxx(AAAAAAAAAA)」みたいなやつ。

今回これが複数入っていて、1つは有効期限が入れているものだった。
それを選択して、右クリックして書き出すを選択して、フォーマットをPEM形式を選択して保存する。
これの中身とDeveloperCertificatesを比較すると一致!

新しい証明書と古い証明書と両方入っていて、古い証明書を使ってビルドされたのが原因でした。以上です。

【mac】node.jsのバージョン管理(切り替え)について調べたことメモ

各バージョンのnode.jsをhomebrewでインストールして、bash_profileでPATHをちくちくいじって変更していた。が、npmやnpmでインストールしたソフトもバージョン固定でなく複数バージョン使えるようにしたかった。自分の環境ではnpmでインストールしたものが、/usr/local/bin/以下にインストールされてしまいうまくできなかった。なのでnodejsのバージョン切り替えツール?を試したのでそのときのメモ。

.bash_profileで切り替える
$ which node
/usr/local/opt/node@8/bin/node

$ which npm
/usr/local/bin/npm

.bash_profile

export PATH="/usr/local/opt/node@6/bin:$PATH"
# export PATH="/usr/local/opt/node@8/bin:$PATH"
# export PATH="/usr/local/opt/node@9/bin:$PATH"
nodebrewで切り替える

nodebrew使うと、同一マシンの中に複数バージョンのnode.jsをインストールして切り替えが可能。切り替え方法はコマンドで手動で切り替える形。

# nodebrewインストール
# 参考 https://github.com/hokaccha/nodebrew#install
$ curl -L git.io/nodebrew | perl - setup

# export PATH=$HOME/.nodebrew/current/bin:$PATH を ~/.bash_profileに追加
$ source ~/.bash_profile

# インストール可能なnode.jsのバージョン確認
$ nodebrew ls-all

# v6.13.1とv8.10.0 を入れる
$ nodebrew install-binary v6.13.1
$ nodebrew install-binary v8.10.0

# v6.13.1を有効にする
$ nodebrew use v6.13.1

# node.jsとnpmのPATHが~/.nodebrew/current/binになる
$ which node
~/.nodebrew/current/bin/node

$ which npm
~/.nodebrew/current/bin/npm

# 各バージョンごとにnpmでインストールしたものが保存される
$ ls -1 ~/.nodebrew/node
v6.13.1
v8.10.0
v9.8.0
ndenvで切り替える

ndenvも複数バージョンのnode.jsをインストールして切り替え可能。nodebrewと違って、ディレクトリ以下の.node-versionを見て勝手にどのバージョンか判定してくれるので手動での切り替えが不要。これもバージョン管理するとよいのかも。

# ndenvインストール
# 参考 https://qiita.com/noraworld/items/462689e108c10102d51f
$ git clone https://github.com/riywo/ndenv ~/.ndenv

# ~/.bash_profileに以下を追加
# export PATH="$HOME/.ndenv/bin:$PATH"                                                                                                                                                                                                        
# eval "$(ndenv init -)"                                                                                                                                                                                                                      
                                                                                                                                                                                                                                              
$ source ~/.bash_profile
$git clone https://github.com/riywo/node-build.git $(ndenv root)/plugins/node-build

# インストール可能なnode.jsのバージョン確認
$ ndenv install -l

# v6.13.1とv8.10.0 を入れる
$ ndenv install v6.13.1
$ ndenv install v8.10.0

# 対象のディレクトリに移動して、v6.13.1を有効にする
$ cd /path/to/project
$ ndenv local v6.13.1

# .node-versionに書き込まれる
$ cat .node-version
v6.13.1

$ which node
~/.ndenv/shims/node

$ which npm
.ndenv/shims/npm

# 各バージョンごとにnpmでインストールしたものが保存される
$ ls -1 ~/.ndenv/versions/
v6.13.1
v9.8.0

まだ、ちゃんと使ってないので不都合に出会ってないけどとりあえずやりたいことはできそう。以上です。

ionic(cordova)でiPhoneXでステータスバーの背景色が適用されなかった時の対応

タイトル通りですが、既存プロジェクトのアプリをiPhoneXに対応させたときの対応をメモ。やったことはざっくり以下

1. ionic本体を1.3.3から1.3.4へバージョンアップ
2. cordova-plugin-statusbarプラグインを2.1から2.4.1へバージョンアップ

1.については、コマンドライン操作でのやり方がわからなかったので、githubからソースを落としてきて、www/lib/ionic以下へコピーしただけ。変更点はCSSだった(たぶん)。
2.については、1度プラグインを削除して入れ直した。が、cordova-plugin-statusbarと指定していplugin addすると2.1がインストールされていしまうので、githubのレポジトリにバージョンを指定してい直接インストール。

$ ionic plugin rm cordova-plugin-statusbar
$ ionic plugin add https://github.com/apache/cordova-plugin-statusbar.git#2.4.1

ionicについては新規でプロジェクト作成すると最新のionicがDLされるはずなので問題ないとして、cordova-plugin-statusbarプラグインの方は入れ直さないとならないかも。というかそろそろionic1使ってることが問題かもしれないけど。修正続けてくれていて助かりました。以上です。

HTML・CSSコーディングを外注するときにチェックすべきだったと後悔したこと

たぶん基本的なことだと思うけど忘れがちな自分のためにメモしておく。

文字数を変えて確認すること

仕様的にちゃんと決まっていない場合もあるかもしれないけど決まってなければ決める必要がある。データを動的にしたときに気づいて別の人が直すとかだとけっこう時間かかることもあるのでチェックしておきたい。

画像サイズを変えて確認すること

文字数と同じだが画像サイズが固定でない場合は想定されるサイズの画像を用意してチェックしておきたい。

非表示になりうる項目をチェック

条件によって非表示になる項目があるならチェックしておきたい。ある要素を非表示にしたら別の要素のデザインが崩れたとかもたまにあるので。

画面サイズを変えて確認すること

特にスマホの場合、画面サイズがバラバラなのでchrome等のシュミレーターでチェックしておきたい。

実機で確認すること

最近ではJavaScriptもバリバリ書いて実現してるUIが納品されるが、機種やOSのバージョンによって動いたり動かなかったりあるので、iPhoneAndroidと各OSのバージョンくらいでは最低限チェックしておきたい。

サービス開発の序盤で細かいことを気にせず実装を進めて、テストやデバック時点で気づいたけどコーティングした人がいなくて。その辺りが不得意な人間が対応すると時間もかかるしもったいないので外注するときは注意したいと思った。社内でこういうまとめてやれたら1番いいのだけど。以上です。