問題
環境
- ruby の docker image:
2.7-slim-buster
(DockerHub の公式のもの) -
docker-compose
使ってる
事象
ruby 環境を docker で立ち上げて
irb, pry から 日本語入力しようとしたらできない。(日本語を受け付けない)
最初に結果
docker-compose.yml
web:
image: ruby:
environment:
...
LANG: C.UTF-8 # これを追加する
...
これで日本語入力ができるようになりました。
詳細
0. ググる
こちら にたどり着く。
なるほど、OSによって対処が異なるのか。
1. 使用しているOSの確認
こちら を参考に使っている docker image のOSを確認した。
どうやら起動している ruby コンテナのOSは Debian
らしい。
では、Debian
の locale (ロケール) の設定の方法が簡単には見つからず…。
2. locale とは
言語_国.文字コード
3. locale コマンド
Linux には locale
コマンドがあるとのこと。
fyi: https://www.atmarkit.co.jp/ait/articles/1812/06/news038.html
# コンテナのコンソール開く
$ docker-compose exec web bash
# 利用可能なロケール名を表示する
root@hogehoge# locale -a
C
C.UTF-8
POSIX
4. コンテナのENVに言語を設定
先程のサイトによると
C,POSIX システム標準な英語
utf8(ja_JP.UTF-8) 日本語UTF-8
とのことなので、日本語入力が使えそうなのは C.UTF-8
!
これを docker-compose.yml
でENVに設定してみる。↓
docker-compose.yml
# 上部のコードの再掲
services:
web:
image: hoge
environment:
...
LANG: C.UTF-8 # これを追加する
...
5. いざ
日本語を入力してみる。↓
# コンテナのコンソール開く
$ docker-compose exec web bash
# ENVが設定されているか一応確認しておく
root@hogehoge# echo $LANG
C.UTF-8
# irb 開いて日本語入力してみる
root@hogehoge# irb
irb(main):001:0> あああ
Traceback (most recent call last):
4: from /usr/local/bin/irb:23:in `<main>'
3: from /usr/local/bin/irb:23:in `load'
2: from /usr/local/lib/ruby/gems/2.7.0/gems/irb-1.2.1/exe/irb:11:in `<top (required)>'
1: from (irb):1
NameError (undefined local variable or method `あああ' for main:Object)
入力できるようになりました。
最後に
いろいろと間違っているかもしれません。
その際はご指摘いただけますと幸いです。