Growi+PostfixをDockerで構築
背景
久々にWikiを構築する機会があったので、お気に入りのGrowiを使用して構築することにした。
手軽に使用できるSMTPサーバがないため、メールサーバ込みで構築する必要がある。
運用面を考えて全てコンテナで構築したいが、公式のdocker-composeではメールサーバまでカバーしていない。
また、最小限の認証機能付きDocker imageも見つからない。
上記の理由から自分で構築したが、意外と試行錯誤したため共有。
構築手順
growi-docker-composeのダウンロード
公式のGithubから、docker-composeをダウンロード。
$ git clone https://github.com/weseek/growi-docker-compose.git growi
Postfixの構築
$ cd growi $ mkdir postfix $ mkdir postfix/conf
postfix/Dockerfileの作成。Alpine Linuxで作成する。
FROM alpine:latest RUN apk add --update --no-cache postfix cyrus-sasl bash ADD conf/main.cf /etc/postfix/main.cf ADD conf/smtpd.conf /usr/lib/sasl2/smtpd.conf ADD entrypoint.sh /entrypoint.sh CMD /entrypoint.sh
postfix/conf/main.cfの作成。
mynetworks = 127.0.0.0/8
maillog_file = /dev/stdout
myhostname = # This will be overwritten in entrypoint.sh
smtp_relay_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
postfix/conf/smtpd.confの作成。今回は、sasldbプラグインを利用し、ファイルでパスワードを作成する。(参考サイト)
mech_listの行は、多分PLAIN LOGINだけで大丈夫。
pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM
postfix/entrypointの作成。
#!/bin/bash # SASL Settings if [ ! -f /etc/sasl2/sasldb2 ]; then mkdir /etc/sasl2 echo $smtp_pw | saslpasswd2 -p -c -f /etc/sasl2/sasldb2 -u $ mail_domain $smtp_user chown postfix:postfix /etc/sasl2/sasldb2 fi # Execute newaliases postconf -e myhostname=$mail_domain newaliases # Start postfix postfix start-fg
docker-compose.ymlの編集
以下の通り編集。
version: '3'
services:
app:
build:
context: .
dockerfile: ./Dockerfile
ports:
- 3000:3000 # localhost only by default
links:
- mongo:mongo
- elasticsearch:elasticsearch
depends_on:
- mongo
- elasticsearch
environment:
- MONGO_URI=mongodb://mongo:27017/growi
- ELASTICSEARCH_URI=http://elasticsearch:9200/growi
- PASSWORD_SEED=changeme
- FILE_UPLOAD=mongodb # activate this line if you use MongoDB GridFS rather than AWS
- MATHJAX=1 # activate this line if you want to use MathJax
entrypoint: "dockerize
-wait tcp://mongo:27017
-wait tcp://elasticsearch:9200
-timeout 60s
/docker-entrypoint.sh"
command: ["yarn migrate && node -r dotenv-flow/config --expose_gc dist/server/app.js"]
restart: unless-stopped
volumes:
- growi_data:/data
mongo:
image: mongo:4.4
restart: unless-stopped
volumes:
- mongo_configdb:/data/configdb
- mongo_db:/data/db
elasticsearch:
build:
context: ./elasticsearch
dockerfile: ./Dockerfile
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms256m -Xmx256m" # increase amount if you have enough memory
- LOG4J_FORMAT_MSG_NO_LOOKUPS=true # CVE-2021-44228 mitigation for Elasticsearch <= 6.8.20/7.16.0
ulimits:
memlock:
soft: -1
hard: -1
restart: unless-stopped
volumes:
- es_data:/usr/share/elasticsearch/data
- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
postfix:
build:
context: ./postfix
dockerfile: ./Dockerfile
environment:
- mail_domain=server.example.com
- smtp_user=test
- smtp_pw=testpass
ports:
- 127.0.0.1:25:25
restart: unless-stopped
volumes:
growi_data:
mongo_configdb:
mongo_db:
es_data:
構築・テスト
コンテナ構築
$ docker-compose build
$ docker-compose up -d
ブラウザからアクセス。http://localhost:3000
管理者アカウント作成。
設定 > アプリ設定 > メール設定から、以下を設定する。
- Fromアドレス: 任意(ドメインは、$mail_domainのサーバ名を抜いたものにする。)
- 送信方法: SMTP
- ホスト: postfix
- ポート: 25
- ユーザ: test
- パスワード: testpw
SASLのデバッグ方法
Growiのメールテストがうまく動かない場合は、以下のようにデバッグする。
@Postfixコンテナ
docker-compose logs -f postfixでpostfixのログを監視。
@Growiコンテナ
apt update && apt install telnetでtelnetをインストール。
telnet postfix 25でpostfixコンテナに接続。
以下のような感じで、認証が通るか確認。
220 server.example.com ESMTP Postfix EHLO client.example.com # 入力する 250-server.example.com 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-AUTH DIGEST-MD5 PLAIN CRAM-MD5 250 8BITMIME AUTH PLAIN dGVzdAB0ZXN0AHRlc3RwYXNz # 入力する。 235 Authentication successful
AUTH PLAINの後の文字は、"{認証ユーザ名}¥0{認証ユーザ名}¥0{認証パスワード}"をbase64エンコードした文字。
¥0はNULL文字。
test/testpassの場合は、dGVzdAB0ZXN0AHRlc3RwYXNzとなる。
認証が通らない場合には、postfixコンテナ側のlogを見ながらググる。
Mac OS 11で、Vimコンパイル時にclientserver機能が有効化されない
概要
- vim-tex利用のために、clientserver機能を有効化したVimをインストールを試みていた
- Homebrewではclientserver機能を有効化できないため、ソースからコンパイルの必要がある
- Mac OS 11.1でコンパイルを試みたところ、Huge versionをインストールしているにも関わらずclientserver機能が有効化されない
- コンパイル時にX11ライブラリのヘッダを見つけられないことが原因のため、読み込めるようにコンパイルオプションを変更し解決
詳細
問題
clientserver機能を有効化したVimのコンパイルを試みた。
下記のビルドスクリプトを作成し実行したところ、コンパイルは正常に完了するが、clientserver機能が有効化されなかった。
#!/bin/sh vim_repo_dir=vim if [ ! -e $vim_repo_dir ]; then git clone https://github.com/vim/vim.git fi cd $vim_repo_dir git pull make distclean ./configure \ --with-features=huge \ --disable-darwin \ --enable-python3interp \ --enable-luainterp \ --enable-gui \ make sudo make install
コンパイルされたVimの詳細は、以下の通り。
HugeバージョンのVimでは、clientserver機能がサポートされることになっている。(参考: https://vim-jp.org/vimdoc-ja/various.html#+feature-list)
user@host% vim --version [/opt/vim] VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Jan 17 2021 16:49:41) macOS version w/o darwin feat. - x86_64 Included patches: 1-2366 Compiled by user@host Huge version without GUI. Features included (+) or not (-): +acl -farsi +mouse_sgr +tag_binary +arabic +file_in_path -mouse_sysmouse -tag_old_static +autocmd +find_in_path +mouse_urxvt -tag_any_white +autochdir +float +mouse_xterm -tcl -autoservername +folding +multi_byte +termguicolors -balloon_eval -footer +multi_lang +terminal +balloon_eval_term +fork() -mzscheme +terminfo -browse +gettext +netbeans_intg +termresponse ++builtin_terms -hangul_input +num64 +textobjects +byte_offset +iconv +packages +textprop +channel +insert_expand +path_extra +timers +cindent +ipv6 -perl +title -clientserver +job +persistent_undo -toolbar -clipboard +jumplist +popupwin +user_commands +cmdline_compl +keymap +postscript +vartabs +cmdline_hist +lambda +printer +vertsplit +cmdline_info +langmap +profile +virtualedit +comments +libcall -python +visual +conceal +linebreak +python3 +visualextra +cryptv +lispindent +quickfix +viminfo -cscope +listcmds +reltime +vreplace +cursorbind +localmap +rightleft +wildignore +cursorshape -lua -ruby +wildmenu +dialog_con +menu +scrollbind +windows +diff +mksession +signs +writebackup +digraphs +modify_fname +smartindent -X11 -dnd +mouse -sound -xfontset -ebcdic -mouseshape +spell -xim +emacs_tags +mouse_dec +startuptime -xpm +eval -mouse_gpm +statusline -xsmp +ex_extra -mouse_jsbterm -sun_workshop -xterm_clipboard +extra_search +mouse_netterm +syntax -xterm_save system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" 2nd user vimrc file: "~/.vim/vimrc" user exrc file: "$HOME/.exrc" defaults file: "$VIMRUNTIME/defaults.vim" fall-back for $VIM: "/usr/local/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DMACOS_X -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 Linking: gcc -L/usr/local/lib -o vim -lm -lncurses -liconv -lintl -L/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/config-3.7m-darwin -lpython3.7m -framework CoreFoundation
デバッグ
とりあえずコンパイル時のログを確認する。
Vimのコンパイルログは、vim/src/auto/config.logで確認できる。
確認していくと、怪しい行を発見した。
646 conftest.c:32:10: fatal error: 'X11/Xlib.h' file not found 647 #include <X11/Xlib.h> 648 ^~~~~~~~~~~~ 649 1 error generated.
上記ログは、X11に関するヘッダーファイルが読み込めていないことを示している。
また前述のVimのバージョン情報を確認すると、X11機能が有効化されていなかった。
UnixにてVimのclientserver機能はX11によって実現されている。
したがってX11機能が有効化されていないと、clientserver機能も有効化されない。
ヘッダファイルが見つかっていないことが原因のようなので、ヘッダファイルの場所を確認する。
$ find / -name "Xlib.h" | grep Xlib.h /opt/X11/include/X11/Xlib.h /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers/X11/Xlib.h /System/Volumes/Data/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers/X11/Xlib.h /System/Volumes/Data/opt/X11/include/X11/Xlib.h
vim/src/auto/configureを参照し、コンパイル時の設定を確認する。
X11で検索すると、ヘッダーファイル参照に使用するためのパスのリストを発見した。
8273 # Standard set of common directories for X headers. 8274 # Check X11 before X11Rn because it is often a symlink to the current release. 8275 ac_x_header_dirs=' 8276 /usr/X11/include 8277 /usr/X11R7/include 8278 /usr/X11R6/include 8279 /usr/X11R5/include 8280 /usr/X11R4/include 8281 8282 /usr/include/X11 8283 /usr/include/X11R7 8284 /usr/include/X11R6 8285 /usr/include/X11R5 8286 /usr/include/X11R4 8287 8288 /usr/local/X11/include 8289 /usr/local/X11R7/include 8290 /usr/local/X11R6/include 8291 /usr/local/X11R5/include 8292 /usr/local/X11R4/include 8293 8294 /usr/local/include/X11 8295 /usr/local/include/X11R7 8296 /usr/local/include/X11R6 8297 /usr/local/include/X11R5 8298 /usr/local/include/X11R4 8299 8300 /usr/X386/include 8301 /usr/x386/include 8302 /usr/XFree86/include/X11 8303 8304 /usr/include 8305 /usr/local/include 8306 /usr/unsupported/include 8307 /usr/athena/include 8308 /usr/local/x11r5/include 8309 /usr/lpp/Xamples/include 8310 8311 /usr/openwin/include 8312 /usr/openwin/share/include'
先ほど確認したヘッダーファイルが存在するディレクトリのパスがリストに含まれていないことが確認できる。
解決策
コンパイル時にX11/Xlib.hが含まれるディレクトリを参照可能にすれば良い。
diff --git a/src/auto/configure b/src/auto/configure index bbfaafcad..6cfa04138 100755 --- a/src/auto/configure +++ b/src/auto/configure @@ -8308,6 +8308,8 @@ ac_x_header_dirs=' /usr/local/x11r5/include /usr/lpp/Xamples/include +/opt/X11/include + /usr/openwin/include /usr/openwin/share/include'
コンパイルしてみると、X11もclientserver機能も有効化されていることが確認できる。
user@host% vim --version [/opt/vim] VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Jan 17 2021 17:25:52) macOS version w/o darwin feat. - x86_64 Included patches: 1-2366 Compiled by user@host Huge version with X11-Athena GUI. Features included (+) or not (-): +acl -farsi +mouse_sgr +tag_binary +arabic +file_in_path -mouse_sysmouse -tag_old_static +autocmd +find_in_path +mouse_urxvt -tag_any_white +autochdir +float +mouse_xterm -tcl -autoservername +folding +multi_byte +termguicolors +balloon_eval -footer +multi_lang +terminal +balloon_eval_term +fork() -mzscheme +terminfo +browse +gettext +netbeans_intg +termresponse ++builtin_terms -hangul_input +num64 +textobjects +byte_offset +iconv +packages +textprop +channel +insert_expand +path_extra +timers +cindent +ipv6 -perl +title +clientserver +job +persistent_undo +toolbar +clipboard +jumplist +popupwin +user_commands +cmdline_compl +keymap +postscript +vartabs +cmdline_hist +lambda +printer +vertsplit +cmdline_info +langmap +profile +virtualedit +comments +libcall -python +visual +conceal +linebreak +python3 +visualextra +cryptv +lispindent +quickfix +viminfo -cscope +listcmds +reltime +vreplace +cursorbind +localmap +rightleft +wildignore +cursorshape -lua -ruby +wildmenu +dialog_con_gui +menu +scrollbind +windows +diff +mksession +signs +writebackup +digraphs +modify_fname +smartindent +X11 -dnd +mouse -sound +xfontset -ebcdic +mouseshape +spell +xim +emacs_tags +mouse_dec +startuptime +xpm +eval -mouse_gpm +statusline +xsmp_interact +ex_extra -mouse_jsbterm -sun_workshop +xterm_clipboard +extra_search +mouse_netterm +syntax -xterm_save system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" 2nd user vimrc file: "~/.vim/vimrc" user exrc file: "$HOME/.exrc" system gvimrc file: "$VIM/gvimrc" user gvimrc file: "$HOME/.gvimrc" 2nd user gvimrc file: "~/.vim/gvimrc" defaults file: "$VIMRUNTIME/defaults.vim" system menu file: "$VIMRUNTIME/menu.vim" fall-back for $VIM: "/usr/local/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_ATHENA -DMACOS_X -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -I/opt/X11/include Linking: gcc -L/opt/X11/lib -L/usr/local/lib -o vim -lXaw -lXmu -lXext -lXpm -lXt -lX11 -lSM -lICE -lm -lncurses -liconv -lintl -L/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/config-3.7m-darwin -lpython3.7m -framework CoreFoundation
VimでTeXを書こう! on Mac
概要
論文執筆にあたり、vimでTeXを書く環境を整えたいと思った。
これまではMakefileを書いておいて、PDFを確認したくなったらmakeを実行していた。
これでも悪くはないのだが、やっぱりリアルタイムプレビューとかが欲しい。
というわけでやってみた。
環境
- Mac OS 10.14.6
- Skim 1.5.2
- Vim 8.1
- XQuartz 2.7.11
- e-pTeX 3.14159265-p3.8.2-190131-2.6 (utf8.euc) (TeX Live 2019)
- latexmk 4.63b
手順
1. MacTeXのインストール
MacTeXはTeXに必要な諸々のソフトウェアをまとめてインストールしてくれるもの。
以下からダウンロードしてインストール。
2. latexmkの準備
latexmkはTeXからPDFまでの変換に必要な一連の処理を行ってくれるperlスクリプト。
MacTeXをインストールすると付いてくるので、別でインストールする必要はない。
vimのTeX用pluginの中でこれを使用してコンパイルを行う。
設定ファイルとして、カレントディレクトリ or ホームディレクトリに.latexmkrcという設定ファイルを作成する必要がある。
設定例を以下に示す。
#!/usr/bin/env perl
$latex = 'platex -synctex=1 -halt-on-error';
$latex_silent = 'platex -synctex=1 -halt-on-error -interaction=batchmode';
$biber = 'biber -u -U --output_safechars';
$bibtex = 'pbibtex';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex %O -o %D %S';
$pdf_mode = 3; # Use dvipdf
$pvc_view_file_via_temporary = 0; # Do not create backup file
$max_repeat = 5;
$preview_continuous_mode = 1;
if ($^O eq 'darwin') {
$pdf_previewer = 'open -ga Skim';
} elsif ($^O eq 'linux') {
$pdf_previewer = 'evince';
}
設定内容の説明は省略するので、公式等を参照して欲しい。(URL: https://ctan.org/pkg/latexmk)
3. Vimのインストール
PDF Viewerと連携するためにclientserverという拡張をenableにする必要があるので、homebrew等のパッケージ管理ソフトではなくソースからコンパイルする。
clientserver機能付きでビルドできるようにシェルスクリプトを用意した。
以下のshellscriptを実行すると、/usr/local/binにインストールされる。
#!/bin/sh vim_repo_dir=vim if [ ! -e $vim_repo_dir ]; then git clone https://github.com/vim/vim.git fi cd $vim_repo_dir git pull make distclean ./configure \ --with-features=huge \ --disable-darwin \ --enable-python3interp \ --enable-luainterp \ --enable-gui \ make sudo make install
vim --versionを実行すると、有効になっている拡張機能が確認できる。
clientserverに+マークが付いていれば大丈夫。
VIM - Vi IMproved 8.1 (2018 May 18, compiled Aug 7 2019 13:37:24)
macOS version w/o darwin feat.
Included patches: 1-1824
Compiled by kkoiro@john
Huge version with X11-Athena GUI. Features included (+) or not (-):
+acl -farsi -mouse_sysmouse -tag_any_white
+arabic +file_in_path +mouse_urxvt -tcl
+autocmd +find_in_path +mouse_xterm +termguicolors
+autochdir +float +multi_byte +terminal
-autoservername +folding +multi_lang +terminfo
+balloon_eval -footer -mzscheme +termresponse
+balloon_eval_term +fork() +netbeans_intg +textobjects
+browse -gettext +num64 +textprop
++builtin_terms -hangul_input +packages +timers
+byte_offset +iconv +path_extra +title
+channel +insert_expand -perl +toolbar
+cindent +job +persistent_undo +user_commands
+clientserver +jumplist +postscript +vartabs
+clipboard +keymap +printer +vertsplit
+cmdline_compl +lambda +profile +virtualedit
+cmdline_hist +langmap -python +visual
+cmdline_info +libcall +python3 +visualextra
+comments +linebreak +quickfix +viminfo
+conceal +lispindent +reltime +vreplace
+cryptv +listcmds +rightleft +wildignore
-cscope +localmap -ruby +wildmenu
+cursorbind -lua +scrollbind +windows
+cursorshape +menu +signs +writebackup
+dialog_con_gui +mksession +smartindent +X11
+diff +modify_fname -sound +xfontset
+digraphs +mouse +spell +xim
-dnd +mouseshape +startuptime +xpm
-ebcdic +mouse_dec +statusline +xsmp_interact
+emacs_tags -mouse_gpm -sun_workshop +xterm_clipboard
+eval -mouse_jsbterm +syntax -xterm_save
+ex_extra +mouse_netterm +tag_binary
+extra_search +mouse_sgr -tag_old_static
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
2nd user vimrc file: "~/.vim/vimrc"
user exrc file: "$HOME/.exrc"
system gvimrc file: "$VIM/gvimrc"
user gvimrc file: "$HOME/.gvimrc"
2nd user gvimrc file: "~/.vim/gvimrc"
defaults file: "$VIMRUNTIME/defaults.vim"
system menu file: "$VIMRUNTIME/menu.vim"
fall-back for $VIM: "/usr/local/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_ATHENA -DMACOS_X -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -I/usr/X11/include
Linking: gcc -L/usr/X11/lib -L/usr/local/lib -o vim -lXaw -lXmu -lXext -lXpm -lXt -lX11 -lSM -lICE -lm -lncurses -liconv -L/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/config-3.7m-darwin -lpython3.7m -framework CoreFoundation
4. XQuartzのインストール
vimのclientserver機能を使用するにはX Window Systemが必要らしい。
Mac OSではX Quartzというソフトウェアをインストールすることで使用できる。
5. vimtexの導入
vimtexはvimでTeXを書きやすくしてくれる素晴らしいプラグイン。
以下のレポジトリからダウンロードして追加。
github.com
自分はdein.vim(URL)https://github.com/Shougo/dein.vimを利用しているので、dein_lazy.tomlに以下を追記した。
[[plugins]]
repo = 'lervag/vimtex'
on_ft = 'tex'
hook_add = '''
let g:vimtex_compiler_latexmk_engines = {'_': '-pdfdvi'}
let g:vimtex_view_method= 'skim'
let g:vimtex_quickfix_latexlog = {'default': 0}
'''
hook_source = '''
if empty(v:servername) && exists('*remote_startserver')
call remote_startserver('VIM')
endif
'''
以下、解説。
- vimtex_compiler_latexmk_engines
latexmkでPDFをコンパイルする。-pdfdviはオプション。 - vimtex_view_method
PDF Viewerを指定。skim(後述)を指定している。 - vimtex_quickfix_latexlog
latexのwarningに関する設定。'default': 0を指定すると、latexのwarningを全て無視する。 - call remote_startserver
vimtexを読み込むときにVIMという名前でコマンドサーバを起動する。
詳しい設定は、vimで:help vimtexを参照すること。
6. Skimのインストール
MacのPDF Viewerで有名なものらしい。(知らなかった)
SyncTeX機能を搭載しており、vimサーバとやりとりをして相互に連携可能なためこれを使う。
インストールは以下のリンクから。
インストールしたら、Preferenceを開き、SyncタブのPDF-TeX Sync support項目を以下のように設定。
- Preset: Custom
- Command: /usr/local/bin/vim
- Arguments: --remote-silent +"%line" "%file"
Argumentの詳細についてはvimの公式に説明があるので参照すること。(URL: https://vim-jp.org/vimdoc-ja/remote.html)
ここまでで必要な環境構築は終了。
使い方
vimtexでは\llでコンパイルモード開始、その後ファイルを編集し保存すると自動でコンパイルしてPDF Viewerに反映してくれる。
\lvを押すと、PDF Viewerでカーソル行に移動しハイライト、PDF ViewerからはCommand+Shift+クリックでvimのカーソルを移動してくれる。
感想
vimとskimをマルチウインドウで並べると、作業も捗るしとてもかっこいい!
MacのApple Musicで椎名林檎がローマ字表示される
今までケチケチとYoutubeで音楽を聞いていたのだが、最近Apple Musicに加入した。 きっかけは、落ち込んでいた時に偶然見つけたサンボマスターに励まされ、色々聞きたいと思ったのだがyoutubeには一部楽曲しか登録されていなかったためだ。 音楽は本当にいい。人生を変える。こんなに手軽に様々な音楽を聞ける時代に生まれて感謝である。
それはそうと、今回のテーマは椎名林檎がローマ字表記されることである。 しばらくApple Musicを使用していると、ある問題に気がついた。それは椎名林檎をライブラリに追加する時だったのだが、椎名林檎が"Sheena Ringo"とローマ字?表記されてしまうのだ。これのみでなく、楽曲までローマ字表記になってしまう。 色々と調べてみると、一部他のアーティストでも同じような現象が起こることがあるらしい。曲名を元に歌詞検索してきて、表示してくれるアプリを使用している私にとってこれは重大である。
この問題は、Apple Musicがシステムの言語設定を参照してユーザの使用言語を認識し、それに応じて楽曲情報を提供していることに起因するらしい。 確かに私はシステムの言語設定を英語にしている。その方が、ランチャーでアプリ検索するときに便利なのだ。本当はただのカッコつけである。 それはともかく、このような問題が発生するときは、一々システムの言語設定を変え、Apple Musicを開き、iTunesにシステムの言語を認識させ、音楽をダウンロードし、また元に戻すという非常に面倒な作業が発生する。 ここでシステムの言語設定を日本語に固定すればいいのではないかと思う人がいるだろうが、そうすると洋楽がカタカナで表示されるという非常にダサい感じになっている。Appleは本当に早く何とかして欲しい。
ここから本記事の本題である。
iTunesを言語指定して開く
ターミナルからiTunesを起動すると、言語設定を引数に渡して起動可能である。日本語設定で起動するときは以下のコマンドでオープンする。
$ open -n -a iTunes --args -AppleLanguages ‘(“ja-JP”)’ # 英語設定のときは'ja-JP'を'en-US'に変更言語設定をiTunesに認識させる
iTunesを開いたときに一番上のメニューバーに表示されるAccount -> View my accountとクリックする。
以上のたった2ステップでこの問題を回避することができる。 今までローマ字やカタカナで一度ダウンロードしてしまった楽曲は、一度ライブラリから削除し再度ダウンロードする必要があるため少々面倒だが、今後は任意の言語で情報を取得することができるだろう。ぜひ試して欲しい。
(2018/12/7追記) Automationというアプリケーションを使用すると、上記のコマンドをアプリケーションとして登録可能らしい。そうするとLauncherからも起動可能になる。詳細は別記事に譲る。
tarで固めがらリモートに送信する
PCのクリーンインストール時など、大きいフォルダを一回限りリモートのサーバーに退避させたい時があります。その様な時に、tarで圧縮しながら送ると有効だと思ったので方法を書き記しておきます。コマンドは以下の通りです。
tar zcvf - directory/ | ssh user@remote_server "cat > directory.tgz"
tarでファイル名の代わりにハイフンを指定することで、出力先として標準出力を選択できます。それをパイプでリモートのサーバーに渡しています。リモートのサーバーでは、sshの第3引数にコマンドを指定することでlogin後にコマンドを実行できることを利用し、catを経由してファイルとして保存しています。