はじめに
この記事は「フィヨルドブートキャンプ Part 2 Advent Calendar 2024」16日目の記事です。
Part 1もあります。
自己紹介
僕はフィヨルドブートキャンプでメンターをやっている伊藤淳一です。
プログラミング歴は20年のベテランプログラマです。
フィヨルドブートキャンプでは日々、生徒さんにプログラミングを教えています。
これからプログラミングを学ぼうとしている方はぜひ、フィヨルドブートキャンプで僕と一緒に勉強していきましょう!😄
bootcamp.fjord.jp
この記事で紹介すること
ところで、みなさんは変数名やメソッド名を考えるのは得意ですか?
ぱっと英語の変数名やメソッド名が出てきますか?
多くの人は「うっ、苦手です……」と答えるのではないでしょうか?
かく言う僕も苦手です😅
というか、時間がかかります。
コードを書く時間は経験とともに速くなるけど、いい名前を考える時間だけはなかなか速くなりません。
プログラミングで一番長い時間悩むのが「いい名前を考える時間」かもしれない。
— Junichi Ito (伊藤淳一) (@jnchito) 2020年7月9日
ロジックを考えたりコードを書いたりする時間はスキルの向上とともにどんどん速くなってくるけど、適切な名前(クラス名、メソッド名、変数名etc)を考えるスピードはコードを書くスピードほど速くならないんだよねえ。
とはいえ、自分の中で「こういうふうにやるといいかも」というアプローチがあるので、このエントリではそれを紹介してみます。
【もくじ】
やりません🙅♂️→自動翻訳ツールを使う、ChatGPTに聞く、ネーミング辞書サイトを利用する
最初に紹介するのは「この方法は使いません(お勧めしません)」というアプローチです。
英語が苦手な人ってきっと、以下のようなツールを頻繁に使ってるんじゃないでしょうか?
たとえば自動翻訳ツール。
たとえばChatGPT。
たとえばネーミング辞書サイト(codic)。
ですが、僕は滅多にこういった方法は使いません。
たまに参考にするときはありますが、こういうサイトで見つけた英単語も「本当にこれでいいのか?」と疑ってかかります。
というのも、日本語→英語って必ずしも1対1で紐付くとは限らないからです。
たとえば「時計」という日本語を英語にする場合、文脈によって"watch"なのか"clock"なのかが変わります。
「彼は部屋の時計を見た」であれば "clock"(壁掛け時計や置き時計)でしょうし、「彼女は素敵な時計を付けている」であれば"watch"(腕時計)になります。
そう、文脈。
文脈が大事なんです。
なので、僕は「単語 to 単語 (JP to EN)」の単純な翻訳ではなく、なるべく文脈を加味した上でどういう単語を使うべきかを考えるようにしています。
そうでないと、room.replace_watch
というような的外れなメソッド名を付けてしまうかもしれません。
じゃあ、文脈的に正しい英語はどうやって探せばいいの?と思いますよね。
以下でその疑問に答えていきます。
英語版Wikipediaを参考にする
たとえばボウリングのスコア計算プログラムを作成する場合、ボウリングに関する変数名やメソッド名を考えないといけません。
こういう場合、英語でボウリングのルールを説明しているページを見て、その中で使われているどの単語がどういう目的で使われているのかをチェックします。
英語版Wikipediaなんかはそういった用途に打ってつけです。
en.wikipedia.org
たとえば以下のスコア表の赤い枠はフレーム(frame)と呼びますが、緑色の枠はなんと呼べばいいでしょうか?
英語版Wikipediaからそれらしき説明文を抜粋してみます。
Traditional scoring
In traditional scoring,[36][37] one point is scored for each pin that is knocked over, and when fewer than all ten pins are knocked down in two rolls in a frame (an open frame), the frame is scored with the total number of pins knocked down. However, when all ten pins are knocked down with either the first or second rolls of a frame (a mark), bonus pins are awarded as follows:
(自動翻訳)
Ten-pin bowling - Wikipedia
伝統的なスコアリング
伝統的なスコアリングでは、倒したピン1本につき1点が加算されます。また、1フレームで2投以内に10本すべてのピンを倒せなかった場合(オープンフレーム)、そのフレームの得点は倒したピンの合計数となります。しかし、1フレームで1投目または2投目で10本すべてのピンを倒した場合(マーク)、以下のようにボーナスポイントが加算されます。
"in two rolls in a frame"や"the first or second rolls of a frame"という記述が見えるので、どうやら緑色の枠は"roll" (first roll, second roll) と呼べば良さそうだ、ということがわかりますね。
公式リファレンスやREADMEを参考にする
たとえばRubyを使って特定のディレクトリにあるファイル名の一覧を取得しなければならないとします。
こういう用途ではDir.entries
メソッドが使えますが、引数と戻り値の変数名は何にすればいいでしょうか?
# fooとbarにどういう名前を付ければいいか? foo = "./sample" bar = Dir.entries(foo)
もちろん自力で考えるのもいいのですが、その前に公式リファレンス(英語版)をチェックしてみましょう。
entries(dirname, encoding: 'UTF-8') → array
https://docs.ruby-lang.org/en/3.3/Dir.html#method-c-entries
Returns an array of the entry names in the directory at dirpath; sets the given encoding onto each returned entry name:
どうやら第1引数はdirname
と呼んでいるようです。
また、戻り値については"Returns an array of the entry names"という説明があります。
これらの情報を合わせると、以下のような命名にすると良さそうです。
dirname = "./sample" entry_names = Dir.entries(dirname)
公式リファレンスだけでなく、READMEファイルについても同じアプローチが使えます。
ライブラリを利用する場合はそのライブラリのREADMEを読んで、サンプルコードや説明文から使えそうな名前を探してみましょう。
シソーラスや英英辞典を使う
訳語が全然思いつかない日本語を英語にしたいときは、僕も自動翻訳ツールを利用することがあります。
そこで提示された単語が「あ、そうそう、これだよね!」と確信の持てるものだったときはいいんですが、「えっ、これ、本当に合ってるのかな?」と不安になるケースもあります。
自動翻訳ツールが提示した単語にしっくりこない場合はシソーラス(類語辞典)を使ってみましょう。
よく似た意味の単語がいくつか表示されるので、「あ、こっちの方が馴染みがあってわかりやすいんじゃない?」という単語が見つかるかもしれません。
たとえば以下は"recognize"という単語をシソーラスで調べたときの結果です(注:"recognize"を選んだことに深い意味はありません)。
https://www.thesaurus.com/browse/recognize
また、その単語を英英辞典で調べるのも有効です。
というのも、英和辞典だと「recognize = 見覚えがある、思い出す」のように対応する日本語を教えてくれるだけなのに対し、英英辞典だとニュアンスを含めて丁寧にその単語の意味を説明してくれることが多いからです。
たとえば以下は英英辞典に載っている"recognize"の説明です。
recognize verb (KNOW)
to know someone or something because you have seen or heard him or her or experienced it before:(筆者訳)
https://dictionary.cambridge.org/dictionary/english/recognize
recognize 動詞 (KNOW)
以前、誰かに会ったり誰かのことを聞いたり、何かを経験したりしたために、その誰かやその何かを知っていること
どうでしょう?英英辞典の説明には、単に「見覚えがある」「思い出す」と訳される以上の情報量があると思いませんか?
たとえば、この説明を読む限り、"recognize"は「見覚えがある」だけでなく「聞き覚えがある」という意味でも使えそうですよね。
なので、「本当にこれでいいの?」と思った単語は英英辞典を参照して、本当にニュアンス(≒英語ネイティブの視点から見たときの意味)が合っているのかどうか確認してみるといいでしょう。
画像検索を使う
「シソーラスや英英辞典なんて敷居が高い!英語の意味を調べるのにさらに英語を読むなんて苦痛で仕方がない!」という人は、画像検索を使うのも一手です。
たとえば、あなたはキッチンで使う「コンロ」という変数名を使いたくなったとします。
翻訳ツールを使うと"stove"と表示されました。
「えっ、ストーブ?ストーブって、こういうやつじゃないの!?」って思いませんか?
そこで"stove"で画像検索をしてみましょう。
するとこんな結果になりました。
へえ〜、どうやら合ってるみたいですね!
・・・と、こんなふうに画像検索を使って、英単語の使われ方やニュアンスを確認することもできます。
同僚に相談する
業務で使うややこしい用語は、あまり日本人に馴染みのない英語で表現せざるを得ないこともあります。
いったん命名したものの、「なんかしっくりこない」とか「こんな名前だとみんな理解できないんじゃないか」と思ったときは、「ねえねえ、○○するメソッドの名前を△△にしてみたんだけど、これどう思う?」と、同僚(英語に詳しそうな人ならなお良し)に相談してみましょう。
もし、同僚も「うーん、それはちょっとわかりにくいなあ」と首をかしげるようなら、同僚と一緒にもっといい名前を検討しましょう。
あえてローマ字を使う
ビジネスドメイン(特定の業界)で使われる専門用語は英語に訳しにくいものが多いです。
たとえば「給水装置認証登録番号」という変数名を定義しなければいけなくなったら、あなたはどうしますか?
「codicで調べるかなー」ですって?じゃあ、やってみましょうか。
なるほど、給水装置認証登録番号=water_supply_equipment_authorization_registration_number
か。よし!・・・ってなりますか?
日本国内で開発・運用するシステムであれば、業界の専門用語は直訳調の意味不明な英語よりもそのままローマ字にした方がわかりやすいケースもあります。
なので、僕だったら「給水装置認証登録番号」は、
water_supply_equipment_authorization_registration_number
ではなく、
kyusui_sochi_ninsho_toroku_bango
と名付けますね。
機械的に何が何でも変数名やメソッド名は英語にしないといけない、という固定概念は捨てましょう。
もし、どうしても、どうしても英語にしないといけない、という場合は、codicや自動翻訳ツールを頼りにするのではなく、英語で書かれた公式の文献(たとえば英語版の取扱説明書や技術仕様書等)を探す方が、正しい訳語にたどり着けるはずです。
もしくは:「給水装置認証登録番号」を日本語のまま変数名にする!?
ちなみにプログラミング言語によっては日本語の変数名やメソッド名が使えるものもあります。
僕が普段よく使っているRubyもそうです。
ですので、思い切って日本語を使ってみる、というのもアリかもしれません。
給水装置認証登録番号 = "ABC-123456-789"
僕は過去に実際にやってみたことがあります(といってもほんの数回だけですが)。
ただし、突然こんなコードが登場すると開発メンバーがビックリするので、事前にチーム内で合意を取っておきましょう。
日常的な取り組みとして:OSやツールの言語設定を英語にする
変数名やメソッド名を英語で名付けるときは、当然英語の語彙力がたくさんあった方が有利です。
ではどうすれば語彙力を増やすことができるでしょうか?
単語帳を買って毎日勉強する?英会話学校に通う?
いえいえ、もっと簡単でまったくコストのかからない方法があります。
それはOSやツールの言語設定を英語にする、という方法です。
こうすると日常的にパソコンを使いながら、システムでよく使われる英単語を自然に学習することができます。
日常的に英語に触れる機会が増えますし、知らない単語が混じってても「こういう意味かな?」推測しやすいので、自然と語彙が増えていきます。
たとえば以下はディスプレイの設定を変更したときに表示される確認ダイアログの表示例です。
confirm, revert, previousといった単語はプログラミングの世界でもよく登場しますよね。
「手前のディスプレイ設定」を英語にしようとするとき、人によっては「手前=before?」と考えるかもしれませんが、こういうケースではbeforeではなく、previousを使った方がいい、ということもわかります(そもそもbeforeは副詞または前置詞で、previousは形容詞なので、品詞として互換性がありません)。
我々プログラマが必要としているのはIT技術関連の英語であって、日常会話で使う英語ではないので、OSの英語表示はそのへんで売ってる単語帳を買ってくるよりもはるかに効率良く「IT技術でよく使われる英語」を学習できます。
さあ、今すぐOSの言語設定を英語に変更しましょう!
VS Codeの日本語化パックはアンインストール!
XやFacebookといったSNSも言語設定を英語に変更!
もちろん僕も昔からOSやツール類の言語設定はずっと英語にしています。
過去に何度かツイートしてますが、英語が苦手でもっと英語ができるようになりたい!という人にオススメなのが「OSやSNSの言語表示を英語にする」という方法です。
— Junichi Ito (伊藤淳一) (@jnchito) 2020年7月14日
日常的に英語に触れる機会が増えるし、知らない単語が混じってても「こういう意味かな?」推測しやすいので、自然と語彙が増えるはず〜。 pic.twitter.com/lAUYZvAYkD
まれに変なトラブルに遭遇することがあるので注意!!
ただし、たま〜に言語設定が英語だとうまく動かないツールがあったりするので注意してください。
たとえば確定申告のときとかに使う「QRコード付証明書等作成システム」はOSが英語表示だとエラーが出て画面が表示されません。
確定申告の準備で「QRコード付証明書等作成システム」にアクセスしたら、画面が真っ白で先に進めず。おかしいなと思って調べたら、なにやら"en-us.js"というリソースが見つからないというエラーが出てた。どうやらOSが英語表示だとダメみたい。日本語表示に切り替えたら動きました。 #mac #safari pic.twitter.com/PaHGG9PSCY
— Junichi Ito (伊藤淳一) (@jnchito) 2023年2月23日
READMEやAPIドキュメントは英語のまま読もう
加えて、日常的な取り組み・心がけとして、READMEやAPIドキュメントはなるべく英語のまま読む、ということもお勧めしたいです。
「わっ、英語だ!自動翻訳、自動翻訳!!」ということを毎回繰り返していると、なかなか英語力や語彙力は向上しません。
あえて英語のまま読むことで、自然と英語力が向上していきます。
自動翻訳を使うにしても、無条件に全文をツールに放り込むのではなく、わからないところだけをピックアップして自動翻訳するのがいいと思います。
英文は苦手!英語なんて絶対読めない!って思う人も多いかもしれませんが、READMEファイルやAPIドキュメントで使われる英単語って意外と同じようなものしか出てこないんですよ。
なので、英字新聞を読んだりするのに比べるとずっとラクですし(←僕は一時期、英字新聞を読んでました)、READMEやAPIドキュメントでよく使われる英単語はそのまま変数名やメソッド名に流用できるものも多いです。
自動翻訳を使えば一瞬で英文の意味がわかるかもしれませんが、その一方で英語の語彙力はまったく向上しません。
自力でREADMEやAPIドキュメントを読んだ方が、英語の語彙力が向上し、将来変数名やメソッド名を考える時間を短縮できるはずです。
ぜひ、READMEやAPIドキュメントを英文のまま読む習慣を身につけてください!
まとめ
というわけで、この記事では僕が英語の変数名やメソッド名を考えるときのアプローチや日々の取込み・心がけについて書いてみました。
どれも即座に効果が出る銀の弾丸とは言えませんが、自動翻訳に頼ってばかりだと英語力は向上しないですし、文脈的になんかおかしい的外れな変数名やメソッド名を付けがちになってしまいます(知らない間にroom.replace_watch
みたいなメソッド名を付けてるかも!?)。
ここで紹介したような方法を使って、コツコツと英語力を向上させていきましょう!💪
というわけで、明日の「フィヨルドブートキャンプ Advent Calendar 2024」もお楽しみに!!
adventar.org
adventar.org
bootcamp.fjord.jp
あわせて読みたい
変数名やメソッド名を考えるときは、単純に単語を組み合わせるだけでなく、その品詞についても意識した方が良いです。
品詞に関する考え方は以下の記事に詳しく書いているので、こちらもぜひチェックしてみてください。
qiita.com