Laravel の tinker で日本語が入力出来ない

Laraveltinker で日本語が入力出来ない時にやったこと

1. 環境

$ uname -a
Linux ela2020.dev.vm 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

$ php -v
PHP 7.3.7 (cli) (built: Jul  3 2019 11:30:22) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies
    with Xdebug v2.7.2, Copyright (c) 2002-2019, by Derick Rethans

$ php artisan tinker --version
Laravel Framework 5.8.32

2. 現状確認

今の libedit がどうなっているか確認する。

$ yum info -q libedit.x86_64
Installed Packages
Name        : libedit
Arch        : x86_64
Version     : 3.0
Release     : 12.20121213cvs.el7
Size        : 239 k
Repo        : installed
From repo   : anaconda
Summary     : The NetBSD Editline library
URL         : http://www.thrysoee.dk/editline/
License     : BSD
Description : Libedit is an autotool- and libtoolized port of the NetBSD Editline library.
            : It provides generic line editing, history, and tokenization functions, similar
            : to those found in GNU Readline.

$ ldd `which php` | grep libedit
        libedit.so.0 => /lib64/libedit.so.0 (0x00007f8ac072b000)

$ file /lib64/libedit.so.0
/lib64/libedit.so.0: symbolic link to `libedit.so.0.0.42'

3. インストール

libedit の最新版の入手はこちらから

# cd /usr/local/src/
# wget https://www.thrysoee.dk/editline/libedit-20191211-3.1.tar.gz
# tar zxvf libedit-20191211-3.1.tar.gz
# cd libedit-20191211-3.1/
# ./configure
...(snip)...
configure: error: libncurses, libcurses, or libtermcap is required!

ncurses-devel で入ってなかったようなのでインストール

# yum install ncurses-devel

あらためて

# ./configure
# make
# make install
# ll /usr/local/lib | grep libedit
-rw-r--r-- 1 root root 1298766 12月 17 21:42 libedit.a
-rwxr-xr-x 1 root root     928 12月 17 21:42 libedit.la
lrwxrwxrwx 1 root root      17 12月 17 21:42 libedit.so -> libedit.so.0.0.62
lrwxrwxrwx 1 root root      17 12月 17 21:42 libedit.so.0 -> libedit.so.0.0.62
-rwxr-xr-x 1 root root  755480 12月 17 21:42 libedit.so.0.0.62

4. シンボリックリンク張り替え

シンボリックリンクを手動で張り直す

まずは、現在の状態を確認しておく。

# cd /lib64/
# ll | grep libedit
lrwxrwxrwx.  1 root root       17  3月  1  2019 libedit.so.0 -> libedit.so.0.0.42
-rwxr-xr-x.  1 root root   235064  6月 10  2014 libedit.so.0.0.42

先ほどインストールした libedit.so.0.0.62 へのシンボリックリンクとなるように切り替える。

# unlink libedit.so.0
# ln -s /usr/local/lib/libedit.so.0 libedit.so.0
# ll | grep libedit
lrwxrwxrwx   1 root root       27 12月 17 21:48 libedit.so.0 -> /usr/local/lib/libedit.so.0
-rwxr-xr-x.  1 root root   235064  6月 10  2014 libedit.so.0.0.42

5. 確認

php -a で確認

$ php -a
Interactive shell

php > echo 'あいう';
あいう

tinker で確認

$ php artisan tinker
Psy Shell v0.9.9 (PHP 7.3.7 — cli) by Justin Hileman
>>> echo 'あいう';
あいう⏎