オフショア開発における国際化機能の活用による開発効率および品質向上対策について

いわゆるフルスタックと呼ばれるWebアプリケーションフレームワークには国際化(i18n)や地域化(L10N)という機能が付いていて、一般的にはグローバル展開するようなWebサービス等でユーザの言語設定に合わせて表示する言語を切り替えるというような使われ方をします。

今回はこの機能(以下国際化という表現を使います)を使ってオフショア開発で品質や開発効率を上げるための方法についてお話ししようと思います。

フィリピンでのオフショア開発を通じて、いわゆる言葉の壁というものを感じているというのがそもそもの動機としてありました。弊社では日本のクライアント様が大半のため、クライアント様とのコミュニケーションには日本語を用います。当然開発するWebサイトやアプリも日本語オンリーというものが多いです。

一方で社内では基本的に英語を用います。そのため開発時には日本語を英語に翻訳や通訳をするという必要性が出てきます。開発者からの問い合わせも例えば、「このHTMLや画像に書いてある文言の意味を教えてください」とか「エラーメッセージにはどのような文言を表示すればよいか」といったものが多かったりします。

ブリッジSEという役割はそのためにあるのですが、とは言うもののある程度の規模の開発になると開発者の数も増え、同じような質問を受けることもままあったりします。開発者はよくWebブラウザ上の画面をGoogle翻訳して理解に努めたりしているのですが、語彙があまりにも特殊な場合は翻訳が正確でなかったり、翻訳に一手間かかるという事情もあったりしますのであまりいい方法ではないように感じています。また、これはシステムの規模や要件の複雑さにもよるかもしれませんが、システム内で用いられる語彙は用途が限定されていることが望ましいと思っていまして、それをGoogle翻訳に一任してしまうともしかしたら誤解を生み出すことになるかもしれません。

そこで国際化の機能を使って、クライアント様やブリッジSEの画面には日本語を表示し、開発者の画面には英語表示するようにすれば、開発者は文言やエラーメッセージの内容を正しく理解できるようになり、本来やるべき機能の開発に集中することができるようになります。

先日とあるプロジェクトでこの国際化の機能を導入したところ、開発者からは思いのほか好評でしたので、まずはそのスクリーンショットをお見せしようと思います。

こちらがブラウザの言語を英語にした場合で

eng

こちらが日本語の場合です。

jpn

画面上の文言だけでなく、アラートやエラーメッセージなども言語設定に合わせて可変にしています。

弊社ではCakePHPというWebフレームワークを主に使用していますので、これをベースにご説明しようと思いますが、これは他のフレームワークにも応用が利くかと思います。

まず全てのHTML上の文言、アラートのメッセージ、バリデーションエラーメッセージをpoファイルに記述していきます。

CakePHPではapp/Localeというディレクトリに各言語ファイルが格納されることになっており、英語と日本語のファイルは以下のファイルに記述します。

app/Locale/eng/LC_MESSAGES/default.po
app/Locale/jpn/LC_MESSAGES/default.po

以下のようにmsgidとmsgstrを対で書いていきます。msgidには一意かつ任意の文字列、msgstrには実際に出力される文字列を記入します。英語と日本語のmsgidが一致する必要があることにご注意ください。

msgid "title_is_required"
msgstr "Title is required"

msgid "title_is_required"
msgstr "タイトルは必須です。"

使い方としてはModelにあるバリデーションメッセージに以下のようにmessageの部分にmsgidを指定します。

model

HTMLテンプレートのctpファイル内では以下のように__(‘article_title’)のような形で使います。

ctp

また、国際化を行うにあたってもう一つ重要な点としてボタンなどのUI部品になるべく画像を使わないというが挙げられます。

これまでボタンなどのUI部品には画像を使うことが一般的だったかと思いますが、最近はフラットデザインの普及によりUI部品に過度な装飾が求められなくなってきていることと、CSS3を使うことで画像を使わなくても見た目の良いUI部品を作ることができるようになってきたということもあり、画像の利用頻度は以前と比べると減ってきているように感じます。

画像の代わりにCSSを使うことで、ボタン上に表示される文言をテキストとしてHTML上に配置することができるようになりますので、Webフレームワークの国際化機能をこれらのUI部品にも適用することができるようになります。

ボタンは画面遷移や処理を実行するための重要な部品の一つですので、このボタンの振る舞いを正しく理解することが品質を左右することになります。

今後オフショア開発をご検討される際はこれらの点をご留意されると、お互いにより良い形で開発が進められるようになるのではないかと思います。

参考:

Wikipedia 国際化と地域化:https://ja.wikipedia.org/wiki/%E5%9B%BD%E9%9A%9B%E5%8C%96%E3%81%A8%E5%9C%B0%E5%9F%9F%E5%8C%96

CakePHP 国際化と地域化:http://book.cakephp.org/2.0/ja/core-libraries/internationalization-and-localization.html

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中