![見出し画像](https://assets.st-note.com/production/uploads/images/173089972/rectangle_large_type_2_adf31641e4e1be0a5d0b4294ff3d615d.png?width=1200)
Get, Fetch & Retrieve
はじめに
G も用語選定に苦戦しました。Granularity (粒度) とか Gracefully (「行儀よく終了させる」といったときの「行儀よく」) とか個別には思い浮かぶのですが、G 同士で対比させられるよい例が思いつきませんでした。
そんなとき、たまたまリファクタリングとともに生きるラジオ (通称:リファラジ) の3周目(*)の聴取を開始したのですが、そこで関数名の話題になったときに get と fetch とでニュアンスが違うよねということを話していたのをパクりにインスパイアされ、ついでにデータベースの文脈でよく使われる retrieve も加えて考察していくことにしました。
(*) リファラジはまず YouTube、次に Spotify と二度聴く習慣になっていたのですが、ここに Voicy での配信も加わったということで、初回から3周目の聴取を並行し始めたところです。
Get
Get は基礎的な単語であり、幅広い意味を持ちますが、その原義はなんでしょうか?
中英語 (Middle English; ME)
まずは中英語の gete(n) に遡れますが、ここは特に違和感ありませんね。
古ノルド語 (Old Norse; ON)
基礎的な単語ですが、いわゆる本来語ではなく古ノルド語 geta (to obtain, beget, guess) 由来ということです。すっかり英語に溶け込んでいて、借用語の雰囲気は全然感じませんね。
(古ノルド語を見分ける目など持ち合わせていないくせに偉そうなことを言うなというご批判は甘んじて受けます)
しかし、この時点から多義的であり、原義を絞ることは難しそうです。なお、Etymonline によると geta は to obtain, reach; to be able to; to beget; to learn; to be pleased with とさらに多くの意味が示されています。何かを得ることにはブレはなさそうですが、その対象は物品・場所・能力・生命・知識・感情といった幅広いものだと考えられます。
ゲルマン祖語 (Proto-Germanic; Gmc)
古ノルド語からは素直にゲルマン祖語 *ʒetan に遡れるようです。しかし、古ノルド語以外のゲルマン語においては、この語(根)は単独では使われず、古英語の beġietan (beget), forġietan (forget) のように複合語の構成要素として現れているとのこと。なぜ古ノルド語では例外的に geta 単独で使われるようになったのか、逆になぜ他のゲルマン語において同様の発達を遂げなかったのかはわかりませんが、英語においてはそこを古ノルド語が埋めたというのもおもしろいです。
印欧祖語 (Indo-European; IE)
さらに遡ると印欧語根の *ghe(n)d- (to seize, take) に至ります。何かを摑む・得るということで、やはり本質的には大きな意味の変化はなさそうです。ただし、どこまで行っても汎用的であり、あまり具体的に絞り込まれたイメージを得ることは難しそうです。
Fetch
Fetch は get に比べて汎用性は低そうですが、その原義はなんでしょうか?
中英語 (Middle English; ME)
Etymonline によると中英語 fecchen に遡れるようですが、KDEE にはその記述はありませんでした。
古英語 (Old English; OE)
古英語においては feċċ(e)an に遡れますが、これは fetian, fatian の異形のようです。Wikitionary によると他にも fæċċan という異形もあったようで、ややこしいのですが、through が 516 通りの異綴りを持つという話を考えると、それほどではないのかもしれません。
いずれにせよ、何かを得ることには変わらないのですが、どちらかというと取得する、つまり、能動的に取りに行く・取って来ることを含意しているようです。
ゲルマン祖語 (Proto-Germanic; Gmc)
さらに遡るとゲルマン祖語の *fatōjan (to grasp) が現れます。やはり、単に手に入ったということではなく、能動的に摑み取ったというニュアンスがありそうです。
印欧祖語 (Indo-European; IE)
そして、この fat の部分は印欧語根の *ped- (foot) 由来とのこと。摑むのに手ではなく足なのですね。ということは単に手を伸ばして摑むのではなく、歩いて行って摑み取って来るということをイメージしたほうがよさそうです。何かを取りに行って戻ってくるイメージですね。
Retrieve
データベース界隈ではよく使われる印象がある retrieve ですが、原義はなんでしょうか?
中英語 (Middle English; ME)
まずは中英語の retreve(n) に遡れますが、これは元々猟犬が見失った獲物を見つけてくることを意味していたようです。
古英語 (Old English; OE)
中英語の retreve(n) は古英語語幹の retroev- に由来するようですが、これは retrover からの派生とされています。そして、re- + trover であり、再び見つけることを意味しています。
古フランス語 (Old French; OF)
KDEE には記述がありませんが、Etymonline によると古フランス語の retreuver (find again, recover, meet again, recognize; 現代フランス語の retrouver) に由来するとのこと。これは re- + treuver であり、KDEE の記述同様、再び見つけるということを意味しています。つまり、一度見失ったものを見つけるということになりそうです。
印欧祖語 (Indo-European; IE)
Etymonline ではさらに印欧語根の *trep- (to turn) にまで遡れる可能性を示唆しています。ここから見えてくるものは、一度見失ったものを探しに行って戻ってくるイメージでしょうか。
ゴールデンレトリーバー
猟犬が獲物を取ってくるイメージから連想されるものとしてゴールデンレトリーバーがありますが、この retriever はまさに retrieve するものということで、見失った獲物を探して持ち帰って来る猟犬をイメージすると、手元にないデータをデータベースに照会して引き出してくるということと重なって見えてくるように思えます。
まとめ
Get: 汎用的な「得る」であり、何にでも使える(が、具体的なイメージには乏しい)
Fetch: 能動的な「取得」であり、取りに行くイメージが強い(ので、ローカルではなくサーバにデータを取りに行くのに合う)
Retrieve: 一度失われたものの「再獲得」であり、探して見つけて戻ってくるイメージが強い(ので、データベースを検索して、必要なデータを取って来るのに合う)
おまけ~2重目的語による違い~
明に get, fetch, retrieve を取り上げて論じていたわけではありませんが、hellog #4975 において2重目的語を取る動詞として get, fetch が、そして取らない動詞として retrieve が列挙の中に含まれていました。こんなところにも違いがあるのですね。意識していませんでした。
この記事における参考文献・サイト
#英語 #English #フランス語 #French #ラテン語 #Latin #印欧祖語 #IndoEuropean #語源 #Etymology #技術用語 #TechnicalTerm #英語史 #HistoryOfEnglish #hel #hel活 #綴字変化 #古ノルド語 #OldNorse