Shoyan blog

Dockerでlocaleを設定する

Dockerでlocaleを設定したいときがある。
例えばマルチバイトを扱うときだ。
localeを設定していないイメージで処理を行うと ArgumentError: invalid byte sequence in US-ASCII のようなエラーが発生することがある。
Dockerでlocaleを設定する場合は、以下のようにDockerfileに定義する。

1
2
3
4
RUN locale-gen ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:en
ENV LC_ALL ja_JP.UTF-8

タイムゾーンも変えたい場合は以下も追記しておく。

1
RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

コンテナに入ってlocaleを表示すると以下のようになった。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
root@e893a5fa3eea:/# locale
LANG=ja_JP.UTF-8
LANGUAGE=ja_JP:en
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=ja_JP.UTF-8

Rails 4.2.7.1 に更新した後に [DEPRECATION] Last_comment Is Deprecated. が発生した

Railsを4.2.7.1にアップデートをしてrspecを実行すると、以下のエラーが発生するようになった。

1
2
3
4
5
6
7
8
9
10
$ bundle exec rspec spec
[DEPRECATION] `last_comment` is deprecated.  Please use `last_description` instead.
[DEPRECATION] `last_comment` is deprecated.  Please use `last_description` instead.
[DEPRECATION] `last_comment` is deprecated.  Please use `last_description` instead.
[DEPRECATION] `last_comment` is deprecated.  Please use `last_description` instead.
[DEPRECATION] `last_comment` is deprecated.  Please use `last_description` instead.
......................................................................................................

Finished in 2.33 seconds (files took 8.78 seconds to load)
102 examples, 0 failures

grepしてみたところ、rspecで使用していた。

1
2
3
$ hw last_comment vendor/bundle
vendor/bundle/ruby/2.2.0/gems/rspec-core-3.2.2/lib/rspec/core/rake_task.rb
84:        desc "Run RSpec code examples" unless ::Rake.application.last_comment

rspecをアップデートしたら出なくなった。

1
2
3
4
5
6
7
$ bundle update rspec-rails

$ bundle exec rspec spec
......................................................................................................

Finished in 2.33 seconds (files took 8.85 seconds to load)
102 examples, 0 failures

iPhone6の画面が真っ暗で反応しなくなった

iPhone6の画面が真っ暗になり操作できなくなった。
画面は真っ暗だが、Siriが反応するので電源は入っている模様。

電源ケーブルを挿してみたが症状は変わらず。
電源ボタンを押しても反応がない。

修理となるとショップまで足を運ぶのが面倒くさいし、色々とクリアしないといけない問題が浮かんでくる。
まずは、家から出るのが1つめの難関だ。
高い確率で上の子がついてくるとダダをこね、下の子は泣くだろう。それを見た妻からは怪訝な顔をされる。
なんとか家を出れたとしても、近くのショップの駐車場が空いていないかもしれないし、駐車できたとしても待ち時間があるかもしれない。以前、近くのドコモショップにいったら1時間くらい待ち時間がかかりますと言われたことがある。
また、ショップ店員に見せても要領の得ない回答をされて、無駄に時間がかかってしまう可能性もありそうだ。
そういうことを考えるとショップに行くのがとても億劫になる。

自分でなんとかできないだろうかと自宅のPCでググった。そして、iPhoneを強制再起動する方法を見つけた。
やりかたは、電源ボタンとホームボタンを10秒以上長押しする。
するとアップルのリンゴマークが表示されるので、そのまま待っていると再起動する。
見事、このやり方で復活した。

iPhoneが操作不能になった場合、以下のことを試してみるとよい。

  • 電源ボタンで電源を切って再起動
  • 電源コードを挿す
  • 強制再起動する
  • どうしようもないのでショップに相談する

ホットペッパーグルメでお店を予約した

高校時代の友人と10年ぶりに会うことになった。店の手配は自分が引き受けたのだが、ぐだぐだしているうちに当日まであと1日となってしまった。

いくつかのサイトを見てみて、ホットペッパーグルメがよさそうだったのでお店を探してみる。店舗数が多く、よさそうなお店を短時間で見つけることができた。場所、お店のジャンル、そして予約日を指定して検索できるので便利だ。とくに予約日の指定は予約時点になってお店が空いていないということがなくなるのでよいと思った。

また、サイトから直接申し込めるのがいい。電話での申込みだと店の時間帯を気にする必要があったり、なかなか電話が繋がらなかったりすることがあるがネットだとそういうことを気にせず予約できるのがよい。

アカウントを作成するとポイントが貯まるとのことなのでアカウントを作成して、予約を申し込んだ。申し込みは完了したが、まだ予約は確定ではないらしい。

まだ予約は成立しておりません。
リクエスト内容で受付可能かどうか、
翌営業日中(来店希望日前日にリクエストした場合は、当日中)に
お店から電話かメールで連絡が入りますのでお待ちください。

お店から連絡がくるとのこと。

申込みから6時間後に店からメールが届いた。
なんと予約が受け付けられないとのこと。

お店からのメッセージ欄があり、19時台が混み合っており空席が無い状況で、最短で20:20頃からしか予約ができないとのこと。それでよい場合は電話にて連絡をしてくれと書いてあった。

うーむ、残念だ。余裕を持って予約しておけばこのようなことはあまりないと思うが、今回は前日の予約のため仕方ない。

店舗を探してみると、即予約ができるお店もあった。即予約とは文字取り、申込み時点で予約が確定する。即予約で申込み、これで席を確保することができた。これで安心してお店へ行ける。

ポイントが貰えるし、次回からもお店の予約にはホットペッパーグルメを使おうと思う。

CIでPHPのLINTを自動化する

私のチームではCIで自動的にLINTをする仕組みを構築しています。
この仕組みにより、レガシーコードでテストコードがない環境でもシンタックスエラーの混入を防ぐことができます。

中身はシンプルで以下のスクリプトを作成して、CIプラットホームで実行するようにします。

php-lint.sh

1
2
3
4
5
6
7
8
#!/bin/sh

RESULT=`find . -type f -name "*.php" -exec php -l {} \; 2>&1 | grep "PHP Parse error"`

if [ "$RESULT" != "" ];then
    echo "$RESULT"
    exit 1
fi

例えば、Droneでチェックする場合は以下のように設定します。

.drone.yml

1
2
script:
  - ./php-lint.sh