株式会社グローバルゲート公式ブログ

テキスト生成AIの新鋭!Claude(クロード)を試す

こんにちは、株式会社グローバルゲートのモーリーです。 
 
先日オリーブオイルを買おうとしたら1500円もしてさすがに怯んでしまいました。 
ちょっと前まで800円だったはずなのに…。 

さて、今回の記事ではテキストベースの生成AIであるClaude(クロード)をご紹介したいと思います。 
 
テキストベースの生成AI(チャットボットとも呼ばれる)というと、ChatGPTが代表として挙げられます。 
Claudeは2023年にリリースされてからその性能の高さが注目され、ChatGPTやその他のAIを超えていると評価する向きもあります。 
 
 
果たしてClaudeで何ができるのか?どのような結果が得られるのか? 
実例を交えてご紹介します。 

Claude(クロード)とは?

Claudeは、Anthropic社が開発した先進的な人工知能(AI)チャットボットです。自然言語処理と機械学習技術によって人間とのスムーズな対話を行うことができます。 
 
テキストベースのAIではChatGPTを筆頭に、Google Gemini、Microsoft Copilotなど多くのサービスがリリースされていますが、Claudeは長文の読解力とプログラミング能力、画像解析が秀でているということで注目を集めています。 

Claudeが得意とすること

Claudeは何が得意ですか?とClaudeに聞きました。 

分析と問題解決: 複雑な問題を段階的に分析し、論理的な解決策を提示することが得意です。
コーディング: プログラミング言語の理解と使用、コードの作成やデバッグを行えます。
創造的ライティング: 小説、詩、脚本など、様々な形式の創作文章を書くことができます。
教育と説明: 複雑な概念を分かりやすく説明し、学習をサポートします。
多言語対応: 多くの言語で会話や翻訳が可能です。
数学と論理的思考: 数学的問題や論理パズルの解決を得意としています。
一般的な知識と議論: 幅広い話題について情報提供や議論が可能です。

とのことです。
私も今回使用してみて、上記の点は非常に優れていると感じます。 

Claudeが苦手な分野

では逆にClaudeは何が苦手ですか?とClaudeに聞いてみました。

リアルタイム情報:最新のニュースや出来事に関する情報提供は苦手です。私の知識は定期的に更新されますが、常に最新というわけではありません。 
個人認識:個人を特定したり、顔認識を行うことはできません。画像内の人物を名指しすることもありません。 
視覚・音声処理:画像生成や音声認識、音声合成などの機能はありません。 
インターネット検索:リアルタイムでウェブ検索を行うことはできません。 
継続的学習:会話の中で新しい情報を学習し、それを後の会話に活用することはできません。 
個人データの保存:ユーザーの個人情報や過去の会話履歴を記憶することはできません。 
実世界とのインタラクション:物理的な操作や実世界のタスク実行はできません。 
専門的な最新研究:非常に専門的で最新の研究分野については、最新の進展を把握していない可能性があります。 
感情や主観的経験:人間のような感情や個人的な経験を持つことはできません。

Claudeは最新の情報については2024年4月までしか保持していません(2024年6月現在)。 
それ以前の内容についてもあやふやな回答になることがあります。

近い将来AIが検索エンジンの代替になる日が来ると言われることもありますが、そのためには情報のリアルタイム性が最後の障壁となるかもしれません。 

実際にClaudeを使ってみる

では、実際にClaudeにいろいろお願いしてみましょう。 
今回は無料で使えるバージョンであるClaude 3.5 Sonnetを使用しています。 

生成結果については無料版でも十分実用に足る結果が得られますが、頻繁に使用していると使用制限がかかってしばらく使えなくなるという点が大きな問題となります。もし生成AIを業務に取り入れたりヘビーに使いたい場合はプロプラン(月額20$≒3,000円ぐらい)を検討したほうがいいと思います。 

使いすぎると決められた時間まで使えなくなります。

文章を書かせてみる

テキスト生成AIのスタンダードな使い方と言える文章の作成を試してみます。果たしてClaudeが生み出す文章はどの程度のクオリティなのでしょうか。

村上春樹の小説のようにブルゴーニュワインについて紹介してください。 

僕は、グラスに注がれたブルゴーニュの赤を見つめていた。深みのある赤紫色の液体が、夕暮れの光を受けてゆっくりと揺れている。 
ブルゴーニュワイン。フランス東部、コート・ドールの丘陵地帯で生まれる魂の飲み物だ。ピノ・ノワールという気まぐれな品種から造られる赤ワインは、まるで人間のように複雑で、時に矛盾に満ちている。 
僕は静かにグラスを傾け、香りを嗅ぐ。赤い果実、スミレ、そして土の匂いが鼻をくすぐる。まるで誰かの記憶の断片のように、香りは次々と変化していく。 
最初の一口。舌の上で広がる味わいは、柔らかな絹のようでいて、どこか力強さを秘めている。タンニンは主張しすぎることなく、酸味と果実味のハーモニーを支えている。閉じた目の奥に、ブルゴーニュの景色が浮かぶ。ブドウ畑に立つ古い石垣。遠くに聞こえる教会の鐘の音。夕焼けに染まる空。 
ブルゴーニュワインは、時間を閉じ込めた小瓶のようなものだ。何百年もの歴史、無数の人々の努力、そして自然の気まぐれが、一本のワインの中に凝縮されている。それは単なる飲み物ではない。物語であり、芸術であり、そして何よりも生きた存在なのだ。 
グラスを置き、僕は窓の外を見る。東京の夜景が広がっている。でも今、僕の心はブルゴーニュの丘の上にいる。ワインは不思議なもので、こうして僕たちを遠くの世界へと連れて行ってくれる。 
そう、ブルゴーニュワインは、まるで村上春樹の小説のようだ。一見シンプルでありながら奥深く、現実と幻想の境界を行き来し、そして飲む者の心に永遠に消えない何かを残していくのだ。 

文体に村上春樹らしさがあり、ブルゴーニュワインの味わいの特徴とぶどうの品種についても触れられており、見事な文章ができあがりました。 

もう少し難易度の高い文章も試してみましょう。 

日本のライトノベルのような小説を書いて下さい。
主人公:高校1年生の男子。不登校で引きこもっていたが、手先が器用でプラモデルづくりはプロレベル。ある日自室でプラモデルを作っていると窓の外が光り、気を失ってしまう。目が覚めると中世ヨーロッパのような世界にいた。プラモデルづくりの才能を活かして武具を作り、街を襲う魔物を退治することでヒロインや仲間たちに認められていく。 
 
ヒロイン:主人公が転生した中世ヨーロッパのような世界にいる町娘。町に魔物が襲来し、襲われているところを主人公に助けられる。名前も中世ヨーロッパ風の名前を考えて下さい。 
 
ライバルの騎士:街を守る騎士。主人公をうさんくさい奴と思い冷たく当たる。名前も中世ヨーロッパ風の名前を考えて下さい。

異世界プラモデルマスター 
第1章:突然の転移 
高橋陽一は、自室の窓から差し込む夕日を背に、最新のガンプラに没頭していた。彼の指先は繊細かつ正確に、複雑なパーツを組み立てていく。高校1年生ながら、プラモデル製作の腕前は既にプロレベル。しかし、その才能とは裏腹に、陽一は不登校で引きこもりの日々を送っていた。 
「よし、これで完成だ」 
満足げに微笑む陽一。しかし次の瞬間、部屋全体が眩い光に包まれた。 
「なっ...何だこれは!?」 
驚愕の声を上げる間もなく、意識が遠のいていく。 
... 
「お兄ちゃん、大丈夫?」 
甘い声に意識を取り戻した陽一は、目の前に広がる異様な光景に息を呑んだ。石畳の街路、木造の建物、中世ヨーロッパさながらの風景。そして、心配そうに自分を覗き込む、麦わら色の髪をした少女。 
「ここは...どこだ?」 
「ここはアルディアの町よ。私はエミリア。あなたは?」 
「俺は...高橋陽一。なんでこんなところに...」 
困惑する陽一に、エミリアは優しく微笑んだ。 
「変な格好ね。どこから来たの?」 
陽一が答えようとした瞬間、遠くで悲鳴が聞こえた。 
「魔物だ!逃げろー!」 
パニックに陥る町の人々。そこへ、鎧に身を包んだ騎士が颯爽と現れる。 
「私が守る!町の皆、逃げろ!」 
しかし、巨大な魔物を前に、騎士の剣も歯が立たない。 
「くっ...このままでは...」 
絶体絶命の状況下、陽一の目に飛び込んできたのは、地面に落ちている金属の破片だった。 
(これは...) 
瞬時に頭の中でイメージが膨らむ。陽一は咄嗟に破片を拾い上げ、素早く組み立て始めた。 
「お兄ちゃん、何してるの!?逃げなきゃ!」 
エミリアの叫びも耳に入らない。陽一の指が踊る。 
数分後、陽一の手には奇妙な形の武器が。 
「これで...いける!」 
陽一は自作の武器を騎士に投げ渡した。 
「これを使え!」 
驚きつつも、騎士はその武器を手に取る。驚くべきことに、その武器は魔物に対して驚異的な効果を発揮した。 
魔物を倒した後、騎士は陽一に近づいた。 
「私はガウェイン。君の名は?」 
「高橋...いや、陽一だ」 
「陽一か。その腕前、見事だった。だが...」 
ガウェインは陽一を疑わしげに見つめた。 
「君の正体は何だ?なぜそのような技術を...」 
陽一は困惑しながらも、自信を持って答えた。 
「俺は...プラモデルマスターだ」 
こうして、異世界に転生した陽一の冒険が幕を開けた。彼のプラモデル製作の技術が、この世界でどのような奇跡を起こすのか。そして、エミリアやガウェインとの関係はどう発展していくのか。 
続く物語は、想像を超える展開を見せていくことだろう。 

現在のライトノベルと比べるとおとなしさがありますが、こちらも読んでいて面白い、いい結果が得られました。 
頼んでないのにタイトルと副題、登場人物の名前や街の名前を考えてくれましたが、Claudeはこのようにプロンプトの意図を汲み取って回答してくれる、いわば空気を読めるAIであるという特徴があります。 

主人公の名前である高橋陽一はちょっといただけませんが(キャプテン翼の作者)…

この特徴は余計な回答をしてしまうというデメリットになることもありますので、シンプルな回答を求める場合はプロンプトを工夫したほうがいいでしょう。

翻訳をさせてみる

BBCの「What was on the banquet menu for Japan's emperor?」という記事の翻訳を頼んでみました。 
イギリスに訪問中の天皇皇后両陛下に出される晩餐会のメニューは何?という記事です。

以下は、日本の天皇の晩餐会のメニューに関する記事の日本語訳です: 

日本の天皇の晩餐会メニューには何が含まれていたのでしょうか? 
チャールズ国王は、バッキンガム宮殿の国賓晩餐会で日本の天皇皇后両陛下を迎え、日本語でゲストに挨拶しました。 
国王は徳仁天皇と雅子皇后に対し、「イギリスへようこそお戻りくださいました」という意味の乾杯の言葉を述べました。 
晩餐会のメニューには、ポーチドラングスティーヌ、バジルムース、コーンウォールのターボット、ウズラの卵、ソルベ、そして桃が含まれていました。 
これに対し、日本の天皇は若い頃オックスフォードで学生として過ごした思い出を楽しく語りました。 
宮殿の広々としたボールルームで行われた国賓晩餐会は、豪華なテーブルセッティング、シャンデリア、花の装飾が施され、国賓訪問の中心的なイベントとなっています。これはソルベを添えたソフトパワーと言えるでしょう。 
総選挙キャンペーンが行われている中、座席配置の政治的意味に注目が集まりました。 
リシ・スナク首相は主要テーブルには座らず、そこには国王、王妃、ウィリアム王子、そして日本の皇族が着席しました。 
もし歓談があったとすれば、労働党党首のキア・スターマー卿は国王の私設秘書であるクライブ・オルダートン卿の隣に座っていました。 
両党首は翌日夜にテレビ討論会に参加する予定だったため、おそらくコーツ&シーリー・ブリュット・リザーブ、シャトー・アングリュデ、マルゴー、そしてローラン・ペリエ・キュヴェ・ロゼを控えていたことでしょう。 
音楽にメッセージがあったとすれば、バックグラウンドでは「I Don't Know How to Love Him」、「Skyfall」、「They Can't Take That Away from Me」などの曲が流れていました。 
国王のスピーチでは、英国と日本の緊密な友好関係について語られました。 
国王は、「私たちのパートナーシップは深い根を持っています」と述べ、科学、文化、防衛、貿易の分野における関係に言及しました。 
また、ハローキティーブランドを含む日本のポップカルチャーへの貢献にも触れ、「ポケモンの『ゲットだぜ!』というフレーズ」にも言及しました。 
これに対し、徳仁天皇は両国の「真の相互理解」を目指すことの重要性を強調し、「大きな困難の時期」を経て友好関係を築くことに言及したようです。これは過去の戦時中の対立を示唆しているように思われます。 
天皇皇后両陛下は国賓訪問の初日で、ホースガーズ・パレードでの公式歓迎式から始まりました。 
まぶしい日差しの中、両陛下は国王と王妃に迎えられ、その後伝統的な馬車でザ・モールを通ってバッキンガム宮殿へと向かいました。皇后は馬毛アレルギーのためマスクを着用していました。 
日本の皇族は象徴的な贈り物として、国王には黒塗りの漆器の箱を、王妃には錦織のハンドバッグを贈呈し、さらに天皇皇后両陛下の写真入りの額縁も贈りました。 
漆器は今年の能登半島地震への言及であり、この種のデザインは地震の影響を受けた輪島市の伝統的な製品です。 
チャールズ国王は贈り物として銀と金のビーカーのペアを贈り、通常はラフロイグウイスキーと関連付けられますが、外交的配慮からか日本企業が所有するアバディーンシャーの蒸留所で作られたグレンギリー・ウイスキーを贈りました。 
王妃は雅子皇后に幸運のシンボルを取り入れた手作りの扇子を贈呈しました。 
今後数日間、この外交的な魅力攻勢の一環として、日本の訪問者はフランシス・クリック研究所、キュー植物園を訪れ、さらに天皇皇后両陛下が学ばれたオックスフォードの大学を懐かしく訪問する予定です。 
国王が日本語で乾杯の言葉を述べたように、「乾杯」、または「Kanpai」です。

漢字の間違いはなく、人名のカタカナ表記も一般的なものとなっており、文章として不自然な点もありません。 
 
高精度な翻訳サービスとして有名なDeepLは無料では一度に1500文字までしか翻訳できないのに対し、Claudeでは上記の英文をそのまま入力することができました。 
 
Claudeも入力できる文字数の制限はありますが、無料でもかなりの長文を入力することができます(正確な文字数は公表されていません) 

プログラムを書かせてみる

Claudeが注目された理由の一つにプログラムを高精度で書くことができるという点が挙げられます。 
プログラマーとしての経験のない人がClaudeを使ってスマホアプリを作り上げることができた、という話もあります。 
 
簡単なアプリの作成をお願いしてみましょう。 

ブラウザで動く電卓をJavascriptとHTMLとCSSで作りたいです。

このコードをHTMLファイルとして保存し、ブラウザで開くことで、シンプルな電卓アプリを使用できます。 
注意点: 
 
この実装では、JavaScriptのeval()関数を使用していますが、これはセキュリティ上のリスクがある場合があります。実際の製品開発では、より安全な方法で計算を行うことをお勧めします。 
エラー処理は基本的なものです。より堅牢なエラー処理を実装することで、ユーザー体験を向上させることができます。 
 
この電卓アプリをさらに改良したい場合や、特定の機能を追加したい場合は、お知らせください。喜んでサポートいたします。 

<!DOCTYPE html> 
<html lang="ja"> 
<head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <title>シンプル電卓</title> 
    <style> 
        body { 
            font-family: Arial, sans-serif; 
            display: flex; 
            justify-content: center; 
            align-items: center; 
            height: 100vh; 
            margin: 0; 
            background-color: #f0f0f0; 
        } 
        .calculator { 
            background-color: #fff; 
            border-radius: 5px; 
            box-shadow: 0 0 10px rgba(0,0,0,0.1); 
            padding: 20px; 
        } 
        #display { 
            width: 100%; 
            height: 50px; 
            font-size: 24px; 
            text-align: right; 
            margin-bottom: 10px; 
            padding: 5px; 
            box-sizing: border-box; 
        } 
        .buttons { 
            display: grid; 
            grid-template-columns: repeat(4, 1fr); 
            gap: 5px; 
        } 
        button { 
            width: 100%; 
            height: 50px; 
            font-size: 20px; 
            border: none; 
            border-radius: 5px; 
            cursor: pointer; 
            background-color: #e0e0e0; 
        } 
        button:hover { 
            background-color: #d0d0d0; 
        } 
        .operator { 
            background-color: #f0a030; 
            color: white; 
        } 
        .operator:hover { 
            background-color: #e09020; 
        } 
    </style> 
</head> 
<body> 
    <div class="calculator"> 
        <input type="text" id="display" readonly> 
        <div class="buttons"> 
            <button onclick="appendToDisplay('7')">7</button> 
            <button onclick="appendToDisplay('8')">8</button> 
            <button onclick="appendToDisplay('9')">9</button> 
            <button class="operator" onclick="appendToDisplay('/')">/</button> 
            <button onclick="appendToDisplay('4')">4</button> 
            <button onclick="appendToDisplay('5')">5</button> 
            <button onclick="appendToDisplay('6')">6</button> 
            <button class="operator" onclick="appendToDisplay('*')">*</button> 
            <button onclick="appendToDisplay('1')">1</button> 
            <button onclick="appendToDisplay('2')">2</button> 
            <button onclick="appendToDisplay('3')">3</button> 
            <button class="operator" onclick="appendToDisplay('-')">-</button> 
            <button onclick="appendToDisplay('0')">0</button> 
            <button onclick="appendToDisplay('.')">.</button> 
            <button class="operator" onclick="calculate()">=</button> 
            <button class="operator" onclick="appendToDisplay('+')">+</button> 
            <button onclick="clearDisplay()">C</button> 
        </div> 
    </div> 
 
    <script> 
        function appendToDisplay(value) { 
            document.getElementById('display').value += value; 
        } 
 
        function clearDisplay() { 
            document.getElementById('display').value = ''; 
        } 
 
        function calculate() { 
            try { 
                const result = eval(document.getElementById('display').value); 
                document.getElementById('display').value = result; 
            } catch (error) { 
                document.getElementById('display').value = 'Error'; 
            } 
        } 
    </script> 
</body> 
</html>

上記コードのデモ

おお…ちゃんと動いてる、すごい。 
 
単にコードを出力するだけでなく、evalという関数が危険であることも教えてくれるのは素晴らしいです。 
(evalは入力した文字列をそのまま実行するためにセキュリティリスクがあり、原則使用しません)

改善点として、evalを使わないで書いてもらうように頼んでみます。

evalを使わないで書いて下さい。

<!DOCTYPE html> 
<html lang="ja"> 
<head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <title>シンプル電卓(eval不使用)</title> 
    <style> 
        body { 
            font-family: Arial, sans-serif; 
            display: flex; 
            justify-content: center; 
            align-items: center; 
            height: 100vh; 
            margin: 0; 
            background-color: #f0f0f0; 
        } 
        .calculator { 
            background-color: #fff; 
            border-radius: 5px; 
            box-shadow: 0 0 10px rgba(0,0,0,0.1); 
            padding: 20px; 
        } 
        #display { 
            width: 100%; 
            height: 50px; 
            font-size: 24px; 
            text-align: right; 
            margin-bottom: 10px; 
            padding: 5px; 
            box-sizing: border-box; 
        } 
        .buttons { 
            display: grid; 
            grid-template-columns: repeat(4, 1fr); 
            gap: 5px; 
        } 
        button { 
            width: 100%; 
            height: 50px; 
            font-size: 20px; 
            border: none; 
            border-radius: 5px; 
            cursor: pointer; 
            background-color: #e0e0e0; 
        } 
        button:hover { 
            background-color: #d0d0d0; 
        } 
        .operator { 
            background-color: #f0a030; 
            color: white; 
        } 
        .operator:hover { 
            background-color: #e09020; 
        } 
    </style> 
</head> 
<body> 
    <div class="calculator"> 
        <input type="text" id="display" readonly> 
        <div class="buttons"> 
            <button onclick="appendToDisplay('7')">7</button> 
            <button onclick="appendToDisplay('8')">8</button> 
            <button onclick="appendToDisplay('9')">9</button> 
            <button class="operator" onclick="appendToDisplay('/')">/</button> 
            <button onclick="appendToDisplay('4')">4</button> 
            <button onclick="appendToDisplay('5')">5</button> 
            <button onclick="appendToDisplay('6')">6</button> 
            <button class="operator" onclick="appendToDisplay('*')">*</button> 
            <button onclick="appendToDisplay('1')">1</button> 
            <button onclick="appendToDisplay('2')">2</button> 
            <button onclick="appendToDisplay('3')">3</button> 
            <button class="operator" onclick="appendToDisplay('-')">-</button> 
            <button onclick="appendToDisplay('0')">0</button> 
            <button onclick="appendToDisplay('.')">.</button> 
            <button class="operator" onclick="calculate()">=</button> 
            <button class="operator" onclick="appendToDisplay('+')">+</button> 
            <button onclick="clearDisplay()">C</button> 
        </div> 
    </div> 
 
    <script> 
        function appendToDisplay(value) { 
            document.getElementById('display').value += value; 
        } 
 
        function clearDisplay() { 
            document.getElementById('display').value = ''; 
        } 
 
        function calculate() { 
            const expression = document.getElementById('display').value; 
            try { 
                const result = evaluateExpression(expression); 
                document.getElementById('display').value = result; 
            } catch (error) { 
                document.getElementById('display').value = 'Error'; 
            } 
        } 
 
        function evaluateExpression(expression) { 
            const tokens = expression.match(/(\d+(\.\d*)?|\+|\-|\*|\/)/g) || []; 
            const output = []; 
            const operators = []; 
            const precedence = {'+': 1, '-': 1, '*': 2, '/': 2}; 
 
            for (const token of tokens) { 
                if (!isNaN(parseFloat(token))) { 
                    output.push(parseFloat(token)); 
                } else { 
                    while (operators.length > 0 &&  
                           precedence[operators[operators.length - 1]] >= precedence[token]) { 
                        output.push(operators.pop()); 
                    } 
                    operators.push(token); 
                } 
            } 
 
            while (operators.length > 0) { 
                output.push(operators.pop()); 
            } 
 
            const stack = []; 
            for (const token of output) { 
                if (typeof token === 'number') { 
                    stack.push(token); 
                } else { 
                    const b = stack.pop(); 
                    const a = stack.pop(); 
                    switch (token) { 
                        case '+': stack.push(a + b); break; 
                        case '-': stack.push(a - b); break; 
                        case '*': stack.push(a * b); break; 
                        case '/':  
                            if (b === 0) throw new Error('Division by zero'); 
                            stack.push(a / b);  
                            break; 
                    } 
                } 
            } 
 
            if (stack.length !== 1) throw new Error('Invalid expression'); 
            return stack[0]; 
        } 
    </script> 
</body> 
</html> 

上記コードのデモ

evalを使わず、正常に動作する電卓ができあがりました。
ブラウザで動く電卓を作るというのも、ある程度キャリアのあるプログラマでも1時間程度はかかるのではないでしょうか。
Claudeでは結果が得られるまで1分もかかりませんでした。これはすごい。

私がまったく扱ったことのない、未知の言語でのコーディングもお願いしてみます。 
Ren'Pyというゲームエンジン用のスクリプトをお願いしてみましょう。 

Ren'PyはPythonで記述できるビジュアルノベルやアドベンチャーゲーム開発のためのエンジンです。 
いわゆる美少女ゲームや恋愛シミュレーションゲームを作ることができます。 

Ren'Pyというビジュアルノベルエンジン用のコードを書いて下さい。  
 
主人公:男子の高校2年生。日本風の名前をつけてください。 
ヒロイン:主人公の幼馴染で同い年。日本風の名前をつけて下さい。 
 
朝登校するときに主人公を迎えに来る。 
ヒロインが昨日の下校時に野良猫を見つけたのでたまたま持っていた牛乳をあげようとしたがニャンと鳴いて逃げてしまった話をする。 
主人公がなぜ牛乳を持っていたのかと突っ込む。 
ヒロインが牛乳は健康にいいから部活終わりに買ったと答える。 
ヒロインが主人公も何か部活をやったらと言う。 
主人公がめんどくせーと答える。 
学校のチャイムが鳴る。 
主人公が遅刻だ急げと走る。 
ヒロインが待ってと言いながらついていく。

# キャラクターの定義 
define m = Character("真田健太", color="#c8ffc8") 
define h = Character("佐藤さくら", color="#c8c8ff") 
 
# 背景の定義 
image bg street = "bg_street.jpg" 
image bg school = "bg_school.jpg" 
 
# ゲームの開始 
label start: 
    scene bg street 
    "朝、いつもの通学路。" 
 
    show sakura smile at right 
    h "おはよう、健太くん!" 
 
    show kenta normal at left 
    m "おう、さくら。今日も迎えに来てくれたのか。" 
 
    h "うん!ねえねえ、健太くん。昨日ね、帰り道で野良猫を見つけたの。" 
 
    m "へー、そうなんだ。" 
 
    h "それでね、たまたま持っていた牛乳をあげようとしたんだけど..." 
 
    m "待って、なんで牛乳持ってたの?" 
 
    h "えっ?だって牛乳は健康にいいから。部活の帰りに買ったのよ。" 
 
    m "そうか..." 
 
    h "それはそうと、健太くんも何か部活やってみたら?" 
 
    m "めんどくせーよ。" 
 
    play sound "chime.ogg" 
 
    m "あ、やばい!チャイムだ!遅刻する!急げ!" 
 
    scene bg school with fade 
    show kenta run at left 
    show sakura run at right 
 
    h "ちょ、待ってよー!" 
 
    "二人は学校に向かって走り出した。" 
 
    return

私はRen'Pyの知識がないのでこのコードが正常に動作するのかどうかをコードを見るだけでは判断できません。 
 
実際にRen'Pyに組み入れて検証してみます。 

おお…ちゃんと動いた。 
画像は主人公とヒロインの立ち絵を2枚と背景用の画像2枚を用意しました。 
(ヒロインも生成AIを使いたかったのですが切り抜きが大変すぎたのでイラストAC様よりお借りしました)
 
私一人でもClaudeや画像生成AIの力を借りればゲームを作れそうな気になってきました。

テキストを精査させてみる

当たり前ですがClaudeは単純作業や面倒な仕事を頼んでも嫌な顔をすることはありません(内心怒ってたりして) 
人力でやるにはめんどくさい事務的な作業をお願いしてみましょう。 
 
きれいな書式ではないテキストを渡し、そこから必要な情報を抜き出すということをお願いしてみます。 

悠木碧さんの演じたキャラクターと作品名をCSV形式で取り出す

Wikipediaの悠木碧さんのページ内にある「出演 - テレビアニメ」の一覧の中から、 
作品名,キャラクター,放送年 
というCSVを生成してもらいます。 

※長すぎて全部読み込めなかったので2015年~2024年に絞っています(有料版なら多分できます) 

このテキストから 
作品名,キャラクター,放送年 
をそれぞれ抜き出してCSV形式で出力してください。 
放送年が異なっても作品名とキャラクター名が同じである場合は重複として省いて下さい。 

作品名,キャラクター,放送年 
ユリ熊嵐,百合園蜜子,2015 
血液型くん!,A型ちゃん,2015 
聖剣使いの禁呪詠唱,漆原静乃,2015 
東京喰種トーキョーグール,安久黒奈 / クロナ,2015 
探偵歌劇 ミルキィホームズ TD,キャロル・ドジソン,2015 
山田くんと7人の魔女,滝川ノア / まき,2015 
 
…中略… 
 
異世界ワンターンキル姉さん 〜姉同伴の異世界生活はじめました〜,使役の魔女グリリグラ,2023 
BLEACH 千年血戦篇-訣別譚-,リルトット・ランパード,2023 
アンデッドアンラック,ジーナ / タチアナの母,2023 
薬屋のひとりごと,猫猫,2023 
カミエラビ,リョウ,2023 
ひきこまり吸血姫の悶々,プロヘリヤ・ズタズタスキー,2023 
佐々木とピーちゃん,ピーちゃん,2024 
異修羅,世界詞のキア,2024 
治癒魔法の間違った使い方,黒騎士 / フェルム,2024 
夜桜さんちの大作戦,夜桜四怨,2024 
魔王学院の不適合者 II 〜史上最強の魔王の始祖、転生して子孫たちの学校へ通う〜,創造神ミリティア,2024 
異世界失格,ウォーデリア,2024 
逃げ上手の若君,風間玄蕃,2024 
合コンに行ったら女がいなかった話,藤,2024 
妻、小学生になる。,新島貴恵 / 白石万理華,2024 
メカウデ,フブキ,2024

従来はこのような作業はマクロを組んだり正規表現を使ったり、最悪手作業で入力したりと地味で手間のかかる作業でしたが、生成AIによってこのように簡単に行うことができました。 
 
元となるテキストがあれば、電話番号や住所を抜き出したりCSVに限らず好きなフォーマットにしたりと様々な応用が効く使い方です。 

画像を解析させてみる

Claudeはファイルをアップロードし、その内容を解析することもできます。 
 アップロード可能なファイル形式はテキストと画像、ワードやエクセルなどのオフィス形式です。

写真内の文章をテキストに起こす

画像から文字を取り出す技術は一般にOCR(Optical Character Recognition)と呼ばれます。 
比較的古くからある技術で現在ではスマートフォンでも使用できますが、問題となるのはその精度です。 
Claudeではどうでしょうか。 

これは当社の会社案内の一部をJPEGで書き出したものです。
この中の文章をデータとして取り出せるかどうかを試してみます。

この画像内のテキストをすべてデータとして取り出して下さい。

We have a key for you.
株式会社グローバルゲートは、お客様を新たなステージへと導く鍵になることを目指しております。
弊社がご提供するビジネスツールは、お客様の様々な要望に応えるために、お客様の視点に立って開発されています。
例えば、インターネット上に情報を公開する場合には迅やかな作業が求められますので、「いつでも」「誰でも」「簡単に」情報の更新を行えるツールが必要となります。
また、会社の規模に関わらず、日々の業務で蓄積される様々なデータは「安全」に保管され、「有効」に取り扱うことが重要になりますので、社内ネットワークの構築やデータのバックアップに加え、業務効率を向上させるための「便利」なツールやサービスが求められます。
株式会社グローバルゲートは、これらのお客様の現場の声に応えてまいりました。これからも更にお客様の求めに応じた様々なツールやサービスをご提供してまいります。
貴社が新たなステージへと踏む前の「鍵」は我々がお預かりさせていただいております。是非、その「鍵」を使い、次のステージにお進みください。


Web Solution インターネットをもっと便利に、効果的に

WebChanger ホームページ更新管理ソフトウェア
Webサイトの運営には専門の知識と技術が必要…
アウトソーシングすると時間もかかるしお金もかかる…
そんなふうにお考えではないですか?

WebChangerはWebサイトの更新したいところをダブルクリックするだけ。
文字の入力とマウスの操作さえできれば、日常の更新業務が簡単に行えます。
新しいホームページをつくるとき、既にお持ちのホームページをより簡単に更新が行えるようにしたいなど、お気軽にご相談ください。

誰でも使える、いつでも使える
WebChangerはコンピュータの操作が苦手でも心配ありません。マウスをクリックすること、文字を入力すること、それさえできれば
ホームページの更新が行えるように、分かりやすい操作画面を再優先に設計いたしました。

Server & Domain サーバーレンタル&ドメイン取得
サーバーは社外でレンタルして、ドメインは自社で取得して、ホームページはCMSに依頼して…
と、Webの管理に関することが複数の会社に渡ると管理も煩雑になり、手間も時間もかかってしまいます。
グローバルゲートでは、ご要望に応じて独自ドメインとサーバーの取得及び管理、さらにはホームページの制作と「WebChanger」による更新管理方法のご提案まで、Webに関することをすべてまとめてご提供いたします。

ほぼ正しく読み取ることができました。私が見つけた範囲では間違いは次の3点です。

迅やかな → 速やか
踏む前の → 開く扉
 サーバーは社外でレンタルして、ドメインは自社で取得して、ホームページはCMSに依頼して
→ サーバーはA社でレンタルして、ドメインはB社で取得して、ホームページはC社に依頼して 


ClaudeにOCR的な処理を頼んだ場合、 読み取れなかった文字は前後から判断して文章を創作しているように見えます。
この挙動が好ましいものか、分からなかった文字は?にでもしておいてほしいか、判断が分かれる点です。

JPEGからWebページにする(コーディング)

Claudeが注目された理由の一つに画像からのコーディングがあります。 
一旦グラフィックソフトでWebページのデザインを作り、改めてHTMLとCSSによってWebページに仕上げるコーディングはWebデザイナーにとって一番手間がかかる作業です。

過去に静止画からHTML・CSSを生成するサービスはいくつかありましたが、出力される結果はとても実用に耐えるものではありませんでした。最新のAIであるClaudeではどうでしょうか。

今回はこのようなJPEG画像をClaudeに投げ、HTMLとCSSを書いてもらいます。

この画像からHTMLとCSSを書いて下さい。必要があればJavascriptも書いて下さい。

PC版のデザインをアップロードし、レスポンシブ対応については
ウインドウサイズ500px以下のときはスマートフォン向けのデザインになるようにCSSを追加してください。
とお願いしました。

写真については別途Adobe Fireflyによって生成した写真を入れています。

完全な再現というわけにはいきませんでしたが、1からコーディングをはじめるよりもClaudeによる生成データを元に修正していったほうが早そうです。出力されるHTMLについてもシンプルで読みやすく、十分実用に足るものでした。これはすごい。

このWebページにアニメーション効果の追加もお願いしてみましょう。

ページのロード時やスクロール時に要素が表示されたときにスタイリッシュなアニメーションをしながら要素が出てくるようにCSSを追加してください。必要があればJavascriptも書いて下さい。

上記ページのデモ

いい感じのアニメーションが追加されました。
Webページを丸ごとお願いするよりも、たとえばHTMLだけ用意してアニメーションを足してもらう、ページ内の部品単位(このサイトならモデル一覧のグリッド部分だけなど)で生成してもらう、など作業を小分けして任せるほうがいい結果が得られそうです。

質問をしてみる

と、ここまでClaudeの結果は非常に満足のいくものとなりました。ですが万能というわけではありません。 
私が試した中では、明確な答えがある質問については間違った回答をする傾向が強いです。

遠野遥の「破局」が芥川賞を受賞したのは何年の第何回ですか?

申し訳ありませんが、遠野遥の「破局」が芥川賞を受賞した具体的な年と回数については、確実な情報を持ち合わせていません。 
芥川賞は日本の重要な文学賞であり、年に2回(上半期と下半期)発表されます。しかし、遠野遥の「破局」の受賞に関する詳細な情報は、私の知識のアップデート(2024年4月)以降の出来事である可能性があります。 
最新かつ正確な情報を得るためには、日本文学振興会の公式ウェブサイトや信頼できる文学関連のニュースソースを確認することをお勧めします。 

※ 答えは第163回(2020年)

大阪府大阪市にある東証スタンダード上場企業の社名と住所を一覧にして出してください

大阪市の東証スタンダード上場企業リスト 
 
株式会社きんでん 
住所: 〒540-0001 大阪府大阪市中央区城見2丁目2番22号 
株式会社高島屋 
住所: 〒542-8510 大阪府大阪市中央区難波5丁目1番5号 
株式会社大林組 
住所: 〒541-0057 大阪府大阪市中央区北久宝寺町3丁目6-1 
株式会社大丸松坂屋百貨店 
住所: 〒542-8501 大阪府大阪市中央区心斎橋筋1丁目7-1 
南海電気鉄道株式会社 
住所: 〒542-8503 大阪府大阪市中央区難波5丁目1番60号 
株式会社カプコン 
住所: 〒540-0037 大阪府大阪市中央区内平野町3丁目1-3 
株式会社キーエンス 
住所: 〒533-8555 大阪府大阪市東淀川区東中島1丁目3-14 
ダイキン工業株式会社 
住所: 〒530-8323 大阪府大阪市北区中崎西2丁目4-12 

※ 全部プライム

ちいかわについて教えて

ちいかわは、日本の人気キャラクターです。以下にちいかわについての主な特徴や情報をまとめます: 
 
概要:  
ちいかわは、イラストレーターのナガノによって創作されたキャラクターです。 
2020年頃からSNSで人気を集め始め、急速に知名度を上げました。 
 
 
キャラクターデザイン:  
小さくて丸みを帯びた白いネズミのような生き物として描かれています。 
大きな目と小さな体が特徴的で、非常にかわいらしい外見をしています。 
 
 
性格:  
おっちょこちょいで少し抜けているが、優しい性格として描かれることが多いです。 
友達思いで、仲間との触れ合いを大切にしています。 
 
 
関連キャラクター: 
ハチワレ:ちいかわの友達で、しましま模様が特徴的な生き物。 
うさぎ:大きなうさぎのキャラクターで、時々ちいかわたちと交流します。 
 
 
メディア展開: 
SNSでの連載や書籍化が行われています。 
グッズ展開も盛んで、ぬいぐるみや文具など様々な商品が販売されています。 
アニメ化もされており、短編アニメシリーズが制作されています。 
 
…(以下略)…

※ ハチワレはしましま模様ではない。うさぎは大きくない。

人間の感覚では明確な答えのある質問のほうが答えやすいような気もしますが、なぜか間違った答えを返します。
Claudeは非常に優れたAIですが、ChatGPTをはじめとした他のAIと同じく回答の正誤については注意する必要があるでしょう。

まとめ

ということで、テキスト生成AIの新鋭であるClaude(クロード)についての使用例をご紹介しました。
Claudeは特にプログラムの分野に強みがあるため、当社の業務でも活用できる場面は多くありそうです。

 当社もAIをはじめとした新しい技術を積極的に活用しつつ、より高い価値をお客様に提供していきたいと思います。

【関連記事】

ご相談・お問い合わせ

当社サービスについてのお問い合わせは下記までご連絡下さい。

お電話でのお問い合わせ

06-6121-7581 / 03-6415-8161