コードレビューしていく中で、コードのレビューというよりは英語のレビューをしている時があって、日本人が特に間違えやすいと思われるポイントをいくつかまとめておきたいと思います。
下記はrubyのコードをサンプルにしています。特にrubyはコードを英文として読めるように書けるというのをこだわっているのでより英語表現を意識した書き方をしたいですね。
自動詞と他動詞
日本語の自動詞と他動詞は、"を"をつけるかどうかの問題で動詞の問題ではないので、日本人は自動詞や他動詞の意識が低いようです。英語では使い方をしっかりしないと意味のわからないメソッドが完成します。
# 自動詞
@user.run_to(@shop) # 走る
# 他動詞
@user.run(@shop) # 経営する
動詞->目的語の語順
日本語の語順が目的語+動詞(xxをyyする)なので目的語を先に書く人が多いです。基本は動詞を先に書くよう意識しましょう。
# bad
@user.attributes_update(params[:user])
# good
@user.update_attributes(params[:user])
「~している」は「~ing」だけじゃない
日本語で「~している」という表現は広い意味があります。~ingが表すのはその瞬間に動作している場合です。「run(走る)」などの動作動詞ではなく状態動詞の「持っている(have)」や、完了形の「(ずっと)ログインしている(have logged in)」も日本語で「~している」と書くので注意が必要です。
- その瞬間「~している」: ing形
- 期間中ずっと「~している」: 完了形
- 状態としての「~している」: 現在形
引数を動詞や前置詞の目的語として使う
英語の基本は5文型(SV、SVC、SVO、SVOO、SVOC)です。インスタンスのメソッドであれば動詞が基本となるので、それに合わせて引数は目的語として使うのに相性がいいです。また、前置詞を伴って前置詞の目的語としても使います。
# 引数が動詞の目的語
@user.invite(@friend)
# 引数が前置詞の目的語
@user.go_to(@shop)
疑問形(後ろに?をつける)メソッドにbe動詞は入れない
注意: ruby以外のケースは補足を確認してください
日本語の疑問文は最後に「か?」を入れるだけので、英語のような主語と動詞が入れ替わる文法に慣れていません。
# bad
@user.is_admin?
としてしまうと、The user is admin?と言っているようで英語的ではありません。Is the user admin?が正しい疑問形です。
# good
@user.admin?
の方が英語的ですし、スマートですね。
補足
Ruby以外の言語はif文は疑問形ではなく肯定文として考えるのがいいと思います。その場合はisを伴う方が正しいです。
# If the user is admin, then ~
if user.is_admin
受動態、進行形の疑問形メソッドもbe動詞は入れない
同じルールで疑問形のメソッドにおいて受動態、進行形のbe動詞も入れません。
# Is the user running?
@user.running?
# Is the user changed?
@user.changed?
aとtheの使い分け
メソッドにaやtheが入ることはあまりないですが、コメントやspecの説明に文章を入れる際には正式な文章を書くことになります。aやtheは学校では「ある」とか「それ」とかおまけ的な習い方をする事が多いのでaやtheの忘れ、用途間違いが非常に多いようです。
オブジェクト指向言語においてインスタンスを生成したらそれは基本的に数えられる可算名詞です。何かしら冠詞をつけましょう。基本原則は下記だと思ってください。
- aはなんでもいい1つのもの
- theは特定できるそれ
以下のものはtheを使って説明します。
# ID指定で取得したインスタンス
user = User.find(id)
# 定義した特定のメソッド
my_method()
# 特定のPath
redirect_to "/users"
ここにaを使ってしまうと、なんでもいいからあるインスタンスの事を指していたり、なんでもいいからあるPathにリダイレクトしなさいだのといった説明になってしまいます。特定のIDを持つインスタンス、URLを持つものはちゃんとtheを使って表現しましょう。
三単現のs
三単現のsも日本語にない概念なので無視して書く人が非常に多いです。逆にしっかりしていると非常にクリアな文章に見えます。
it "returns with status 200"
of多用問題
日本語でも「の」を多用する問題がありますが、英語でもそのままofで繋げて非常にぶつぶつ切れた読みにくい文章になるケースがあります。"名詞+名詞"や"名詞's 名詞"の形式に置き換えるだけでぐっと自然になります。
- a user of admin -> an admin user
- items of the user -> the user's items
時間にはat、日付にはon
前置詞の表現が時間と日付で違います。at the time, on the dayとなります。時間のatはその瞬間の 地点 を表すのに対して、日付のonはすこし平らな 台の上 に乗っているイメージになります。
# 作成日時を保存
user.created_at # Time
# 作成日を保存
post.created_on # Date
registという単語は存在しない
日本人には(?)なぜかregistという単語が存在すると思っている人が多いですが、そんな単語は存在していません。意外と間違いだと気づいていない人が多いのでリストアップしておきました。
最後に
随時追加していきたいのでみなさんからの英語Tipsも教えてもらえると幸いです。