データサイエ「ソ」ティストは語る

データサイエンティストではない、パチもんのデータサイエ「ソ」ティストのブログ

RStudioを日本語化してビルドする……道筋

もしかしたら、Rを使いこなす多くの人には不要なのかもしれないけど、それでもGoogleのRStudioの第2検索ワードは「日本語」なので、日本語化にはニーズがあるのだろう。

ということで、どこをどういじれば日本語化ができそうなのか探り、実際にビルドしてみた。なお、以下大量のエラーをC++もQtもMakeも何も体系的にわかってない人間がその場その場で調べて解決しているけど、もしかしたらもっとオシャレな解決策があるのかもしれない。

環境

普段はWindows 7CentOS 6.5を使っているのだけど、どちらも、RStudioをビルドする環境を整えるのが激しく面倒(WindowsMinGW周り、CentOSはQtが古い)だったので、結局、VirtualBox上にUbuntu 14.04をインストールし、そちらで作業を行っている。

ソースの入手

RStudioのダウンロードページのいちばん下から、その都度の最新のソースを持ってくる。

ビルド環境を整える

RStudioのソースには、ビルドに必要なパッケージ類を自動でインストールするスクリプトが用意されている。$SRC_DIR/dependencies以下のOSごとのスクリプトを実行すると、大抵のパッケージ類がインストールされる。あとは、R自体を別途インストールするくらい。

メッセージの日本語化のためのファイル探索

ビルド作業にかかる前に、そもそもの目的である日本語化をしたい。ただ、(デフォルトでは英語で表示される)メッセージが、実際にソースのどこに書かれているかを探す必要がある。

まぁ、単純に英語のメッセージでgrepしてみて探すしかない。きちんとドキュメンテーションされていて、どこに多言語化関係のリソースがあるかわかっていれば別だけど、少なくともRStudioはそうなっていないので、grepで調べた結果、$SRC_DIR/src/gwt/src/org/rstudio/studio/client/workbench/commands/Commands.cmd.xmlにとりあえずいくつかのメッセージが書いてあることがわかった。残念ながら、Qtの標準的(?)な仕組みである*.tsファイルには分離されていないようだ。ファイル自体は普通のXMLなので、適当なエディタで開いて、まずは1つ2つほどメッセージを日本語化。

f:id:data_sciesotist:20140430002000j:plain

全部いじってからビルドできないと悲惨なので、まずはこれでビルドを試してみる。

ビルド用ディレクトリを作成し、cmakeを実行する

$SRC_DIR以下にbuildという名前のディレクトリを作成し、そこに移動する。そして、下記のコマンドを実行する。

 cmake .. -DRSTUDIO_TARGET=Desktop -DCMAKE_BUILD=Release

たぶん、ここまでの記述の通りであれば問題ないはずだけど、何か不足などのエラーが出れば、解決してください。

ビルドの実行

INSTALLファイルには「sudo make install」でOK、なんて書いてあるけど、思った以上にエラーが出まくって大変。どうやってリリース版はコンパイルしているんだろうか。それとも、gccやその他のライブラリのバージョンではエラーにならないんだろうか。

$SRC_DIRの場所に日本語やその他特殊文字を含んではいけない

ビルド中にmoc: Cannot open options file specified with @とかいうエラーが出るので調べてみたら、アルファベット以外を受け付けないらしい。たまたま、「デスクトップ」にファイルを置いて作業していたのでハマってしまった。

$SRC_DIR/src/cpp/core/http/Util.cppでエラー

ファイルで'uint8_t’ was not declared in this scopeとか言われるので調べてみたら、以下の1行を追加する必要があるらしい。

 #include <stdint.h>

$SRC_DIR/src/cpp/session/CMakeFiles/rsession.dir/SessionModuleContext.cppでエラー

error: conversion from ‘long unsigned int’ to ‘const json_spirit::Value_impl<json_spirit::Config_map<std::basic_string<char> > >’ is ambiguous

とか出て、相当ハマって調べたら(もうリンクも1つに絞れないくらい)、どうもboostのuint64_tの定義と標準の定義がぶつかるらしく、boost::uint64_tとしなければいけなかった。……ちなみに、そもそもuint64_tが何かはわかっていない。64bitの整数?

$SRC_DIR/src/cpp/session/modules/SessionGit.cppでエラー

同上。uint64_tboost::uint64_tに書き換える。2箇所。

$SRC_DIR/src/cpp/session/modules/SessionSVN.cppでエラー

同上。uint64_tboost::uint64_tに書き換える。2箇所。

ビルド完了!そして……

ここまでやって、ようやくビルドが完了した。cmakeの途中でなんかエラーが出ていただが、cmake自体が止まらず動いていたので気にしない。

で、やっとできあがったRStudioを起動してみると……日本語化されていた!

f:id:data_sciesotist:20140430002024j:plain

ということで、とりあえず道筋は付けられたけど、そもそも全メッセージが最初に挙げたファイルに含まれているのか、ということと、今のやり方だと日本語化してしまうと英語には戻せない(切り替えられない)ので、根本的には開発元に言語ファイルを分離してください、と頼むしかないだろうか。

ビルドしたものの配布までは、現段階では考えてないので、興味がある方はやってみてね。