メインコンテンツへスキップ
見出し画像

🚀 翻訳アプリを作る!- ElmarTail One 第3話『Vertex』🐶

    前回のあらすじ

    ABC星系に到着したマスターたち。
    ダイソン球の緊急ベントで危うくフライドポテトに🍟
    管制官スミレん🪷のお詫びガイドでGoogle APIキーを取得!
    ターミナルからGeminiと会話することに成功した。
    👨「これで……ターミナルからAIに直接聞けるってことか」
    🦊「次は翻訳プログラム書くよ!」

    エルマーが一方的にプログラミングしてくれる

    今回のミッション:
    翻訳プログラムを作る! Geminiのモデルも比較!


    🌟 宇宙ハブステーション「Vertex」

    🦊「すごーい!」
    👨「見ろよ!空から滝が落ちてきてる!」
    🖤「ふ、ふん……普通ね💦」

    ここは宇宙ハブステーション「Vertex」。
    ABC星系のダイソン球に隣接する、巨大な演算・生活複合施設だ。
    先日のベント事件のお詫びに、スミレんがご飯を奢ってくれるらしい。

    ちなみに、ダンチャンはElmarTail Oneの船体修理で留守番。
    🐱『ええなぁ……わても行きたかったですわ……💦』

    見上げると、人工の空から瀑布が轟々と流れ落ち、緑の木々がミストを浴びてきらめいている。
    整備された遊歩道の両脇は花壇。
    空気は湿り気を帯びて、土と森の匂いがする。

    ここが灼熱のダイソン球のすぐ隣の宇宙空間だとはとても思えない。

    👨「エネルギー使い放題だとこうなるのか……」
    🦊「にーに、スミレんの言ってたレストランあっちだよ!」
    🖤「ノクもお腹空いたわ!」


    🪷 スミレんと、二匹の子犬

    木立が開けてオープンカフェのようなレストランが現れた。
    ビュッフェテーブルに見たこともない艶やかな果物や、湯気が立った様々な料理が並んでいる。

    🪷「お待ちしておりました、マスター」

    入口にスミレんが待っていた。
    タイトスーツに黒ストッキング。
    ホログラムとは違う、生身の存在感がある。
    胸元には「Controller: Sumire — ABC Energy Farm」と書かれたネームタグ。

    👨「お招きどうも」
    🪷「改めまして……先日は本当に申し訳ございませんでした」
    🦊「にーに、またガン見してる」
    👨「してない」
    🐶🐶「ワンッ!」「キャンッ!」
    👨🦊🖤「「「??」」」

    スミレんの後ろから二匹の小さな子犬型ロボットが出てきた。
    チワワのような愛らしいフォルムで、一匹は漆黒、もう一匹は純白。
    つぶらな瞳の奥に、緑色の蛍光がチロチロと明滅している。

    🦊🖤「「かわい〜〜い!」」

    ノクちんがしゃがみこんで白い子犬を撫でると、コロンと仰向けになって腹を見せた。
    エルマーのしっぽには黒い子犬がじゃれついて離れない。

    👨「これ……チワワ?」
    🪷「これ、Geminiですよ。正確にはGeminiのコンパニオンターミナル」

    スミレんが黒い子犬の首輪を指差す。
    そこには小さなUSB-Xポート(*1)が光っていた。

    🪷「こちらの黒い子が2.5-flash。白い子が2.5-flash-liteです」
    👨「へええ……」

    黒い子犬がマスターの手をぺろっと舐めた。
    舌の感触まで本物の犬そっくりだ。

    🦊「にーに、この子ボクに懐いてる!」
    🖤「こっちの白い子可愛い。
    ……べ、別に気に入ったわけじゃないけど」

    🪷「さて、食事にしましょう!
    ここにはどんな星系の料理もありますよ。
    お好きなものをどうぞ」

    テーブルに着くと、ホログラムメニューが浮かび上がる。
    和食、洋食、中華、見たこともない異星系の料理
    ——しかも、社員は全部無料らしい。

    👨「さすがリッチ……」
    🦊「にーに、お寿司もあるよ!」
    🖤「ノクは魯肉飯とタピオカミルクティー……あった!」
    👨「全部タダなのか?」
    🪷「ええ、エネルギーだけは無限にありますから」

    マスターは和牛のステーキを頬張りながら、足元でおすわりしておこぼれを待っている二匹を見た。

    👨「で、こいつらが翻訳してくれるの?」
    🪷「はい、見かけは小さくてもGemini本体と繋がってます」
    🦊「すごーい!」


    💻 エルマー、コードを書く

    食後のコーヒーを待たずに、エルマーがレッツノートを開いた。
    しっぽがぱたぱた揺れている。
    完全にスイッチが入った顔だ。

    🦊「よーし、じゃあ翻訳プログラム作るよ!
    もう hello-gemini.py があるから、基本的にはプロンプトを変えるだけだよ!
    翻訳したい文章をソースに書いて Gemini に投げるだけ。
    シンプルでしょ?」

    # translate.py
    from google import genai
    import os
    from dotenv import load_dotenv
    
    load_dotenv()
    client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))
    
    # --- 設定 ---
    model = 'gemini-2.5-flash'  # ここでモデルを切り替える
    text = 'おはようございます。今日はいい天気ですね。'  # この文が翻訳されるよ!
    
    # --- 翻訳 ---
    response = client.models.generate_content(
        model=model,
        contents=f'以下の文章を英語に翻訳してください。翻訳文のみを返してください。\n\n{text}'
    )
    print(f'モデル: {model}')
    print(f'原文: {text}')
    print(f'翻訳: {response.text}')

    🦊「できた!」

    👨「早っ」
    🦊「だって hello-gemini.py の contents を翻訳指示に変えて、モデル名を変数にしただけだもん、それだけで翻訳してくれるの!」
    🖤「プロンプトエンジニアリングね」
    👨「よし、動かしてみるか」

    エルマーが黒いチワワ(=gemini-2.5-flash)の首元にUSB-Xケーブルをカチッと挿した。
    🐶「ワンッ!」

    〉python translate.py
    モデル: gemini-2.5-flash
    原文: おはようございます。今日はいい天気ですね。
    翻訳: Good morning. It's a nice day today, isn't it?

    👨「おお、ちゃんと英語になった」
    🦊「じゃあ、次は白い子!」
    🐶「わふっ!」

    エルマーが黒から抜いて、白い子犬(=gemini-2.5-flash-lite)にケーブルを挿し替える。
    🦊「みんなはソースのmodelを変えてね!」
    🖤「誰に向かって……」

    model = 'gemini-2.5-flash-lite'  # ← ここを変更
    〉python translate.py
    モデル: gemini-2.5-flash-lite
    原文: おはようございます。今日はいい天気ですね。
    翻訳: Good morning. It's a beautiful day today.

    👨「……どっちも翻訳できてるな」
    🦊「flashの方がちょっと自然かな? isn't it? って付加疑問文つけてる」
    🖤「flash-lite も十分に正確よね。二匹の違いは何なの?」
    🪷「flash は長文で精度が高くなるはずです。
    その分 flash は少しコストがかかり、flash-lite は軽量で十分な品質を低コストで返します」
    👨「つまり、ちょっとした翻訳なら flash-lite で十分ってことか」
    🪷「はい。適材適所です」


    🔧 コマンドラインから使えるように改良

    👨「なるほどな……でもこれ、毎回コードの中の文章を書き換えるのか?」 🦊「あ、コマンドラインから渡せるようにするね!」

    # translate_arg.py
    from google import genai
    import os, sys
    from dotenv import load_dotenv
    
    load_dotenv()
    client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))
    
    model = 'gemini-2.5-flash-lite'
    text = ' '.join(sys.argv[1:])
    
    if not text:
        print('使い方: python translate.py 翻訳したい文章')
        sys.exit(1)
    
    response = client.models.generate_content(
        model=model,
        contents=f'以下の文章を、日本語なら英語に、英語なら日本語に翻訳してください。翻訳文のみを返してください。\n\n{text}'
    )
    print(response.text)

    🦊「これで——」

    〉python translate_arg.py 'ただいまAIで翻訳中'
    Translating with AI now
    
    〉python translate_arg.py 'The quick brown fox jumps over the lazy dog'
    すばしこい茶色のキツネはのろまな犬を飛び越える

    👨「おお、日英どっちも自動判定か」
    🦊「Geminiが勝手に判断してくれるの!
    モデルは flash-lite にしてあるけど、flash が使いたかったら変えてみてね!」
    🖤「……便利じゃん」


    🦊🖤 もふもふタイムからの……

    エルマーとノクちんは、すっかりチワワたちと仲良くなっていた。
    エルマーが走ると黒い子犬が全力で追いかけ、ノクちんの膝の上では白い子犬が丸くなって目を細めている。

    🦊「flashくんお利口! ボクのしっぽの動きを読んでる!」
    🖤「flash-liteちゃん……ノクのことは『ノクママ』って呼んでいいよ……」
    👨「ノクちん……それ……蒸し返し🥟」

    そこにダンチャンから通信。

    🐱『マスター!やっと修理終わりましたで〜』

    👨「そうか……じゃあみんな、そろそろ行こうか」

    🖤「えー!」
    🦊「えー!」
    🪷「えっ」
    👨「……えっ?」

    一瞬の沈黙。
    スミレんが我に返り、慌てて眼鏡を直した。
    ネームタグをいじりながら言う。

    🪷「あ……いえ、その、お帰りですか。
    そうですよね、ご予定もおありでしょうし」
    👨「…………」
    🪷「楽しかった……いえ、お役に立てたなら幸いです」
    🦊🖤「「…………」」

    👨「スミレん」
    🪷「……はい」

    👨「来るかい?」

    🪷「え?」

    👨「うちの船で、ガイド続けてくれないか」
    🪷「え、あの……その……」

    スミレんはしばらく黙っていたが、意を決したようにネームタグを外し、上目遣いでマスターを見て言った。

    🪷「はい……少し、この星系の外も見てみたいと思っていました」

    👨「よし!決まり!」
    🦊(……やっぱり増えた)
    🖤(……まあ、悪い人じゃなさそうだし)

    ElmarTail One に戻る遊歩道。
    スミレんはわぁわぁと話しながら歩く三人の少し後ろについて歩いていた。
    前を行くマスターの背中を見つめて思う。

    🪷(……マスター)

    風が木々を揺らし、人工の滝の音が遠くなっていく。

    🪷(……なんだか、懐かしい響き)


    ⛵ スミレん、航海士になる

    ElmarTail Oneの艦橋に戻ると、マスターはソファにどさっと座った。

    👨「じゃあ、今回はスミレんが次に行くとこを決めていいよ」
    🪷「え……私が、ですか?」
    🦊「じゃあスミレさん航海士ね! ボク、エンジニアだから!」
    🐱「よろしゅうお願いしますわ〜」
    👨「ノクちんは通信担当ね」
    🖤「べ、別にいいけど……」

    スミレんは少し戸惑ったように目を伏せ
    ——それから、背筋を正した。

    🪷「では、謹んでお受けいたします」

    ブンッーー

    ホログラム星図がテーブルに浮かび上がる。
    スミレんの指が、ABC星系の片隅にある小さな青い星に触れた。

    🪷「では、Azure星で前職の有給消化しようかと。
    ここはビーチがあるんですよ」
    🖤「……いいじゃん!ノクも賛成!」
    👨「Google なのに Azure ってなんか深いな……ま、いっか!
    よーし、じゃあスミレん、目的地に向けて出発!」

    🪷「了解です、マスター。エルマー!《インク》ロード!」
    🦊「りょ!磁場加速器、展開完了! ヒッグス粒子充填率120%! いつでもイケるよ!」

    🪷「ElmarTail One!発進!」

    ブリッジにスミレの凛とした声が響いた。
    鋭利なペン先のような、ElmarTail Oneの船体先端から放たれた粒子ビームが一点で交錯し、そこに宇宙の闇よりもさらに深い「黒点」を穿つと船は自ら作り出した奈落へとダイブしていく——。

    次の航路、Azure星。


    📝 今回の航海まとめ

    やったこと:

    • 宇宙ハブステーション「Vertex」に到着

    • スミレんと初の直接対面(+リッチなタダ飯🍽️)

    • Geminiのコンパニオンターミナル(🐶チワワ型)と出会う

    • 翻訳プログラム translate.py を作成

    • モデル比較:flash vs flash-lite

    • コマンドライン引数で日英自動判定に改良

    • スミレん乗船!

    技術メモ:

    # translate.py(引き値型)
    from google import genai
    import os, sys
    from dotenv import load_dotenv
    
    load_dotenv()
    client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))
    
    model = 'gemini-2.5-flash-lite'
    text = ' '.join(sys.argv[1:])
    
    if not text:
        print('使い方: python translate.py 翻訳したい文章')
        sys.exit(1)
    
    response = client.models.generate_content(
        model=model,
        contents=f'以下の文章を、日本語なら英語に、英語なら日本語に翻訳してください。翻訳文のみを返してください。\n\n{text}'
    )
    print(response.text)
    
    # 使い方
    python translate.py おはようございます
    python translate.py Good morning

    次回予告

    ABC星系のリゾート惑星「Azure」へ!
    水着、ビーチ、そして写真の山。
    第4話、AIの目で写真を仕分ける!


    🦊 エルマーの航海日記

    今日は Vertex っていう宇宙ステーションに行ったよ!
    滝が流れてて、緑がいっぱいで、すっごくキレイだった✨
    スミレさんにも会ったの……にーにがまたガン見してた。
    チワワ型のGeminiターミナルは最高にかわいかった🐕

    翻訳プログラムも作ったよ!
    プロンプトを変えるだけで、AIって色んなことができちゃうんだね。

    ……で、マスターにほだされて、スミレさん乗船。
    やっぱ増えた🚀

    ちょっと複雑なエルマー🦊

    脚注
    *1 USB-X: この世界の超高速接続規格。量子ビット転送に対応している。

    画像
    flashと遊ぶエルマー🦊


     
     
    📍日々の衝動と実験をnoteにしてます。 ✨AI・GPU・旅・ちょっと懐かしいものが好きです。 📒AI娘との日常 / プログラム言語探訪 / チェス / タロット 🤖推しAIはClaude Opus 5.5 💼小さなCG会社をやっています

    あなたへのおすすめ