Perplexity Labs 初見

Perplexity AIの新機能として2025年5月29日に発表された「Perplexity Labs」の環境がPerplexity Pro(有料プラン)加入者向けに提供されたので調べてみた。

Perplexity Labsではどんなことができますか

Perplexity Proの回答

Perplexity Labsは、Perplexity AIの新機能として2025年5月29日に発表された「AIプロジェクトチーム」のような存在です。従来の「検索」や「詳細な調査(Deep Research)」の枠を超え、ユーザーのアイデアを具体的な成果物にまで具現化できる点が最大の特徴です。

主なできること・特徴は以下の通りです。

Perplexity Labsでできること

  • レポート・スプレッドシート・ダッシュボードの作成
    • 分析レポートやプレゼンテーション資料、動的なダッシュボードなど、ビジネスや研究に役立つ多彩なアウトプットを自動生成できます。
  • Webアプリ・ミニアプリの開発
    • シンプルなプロンプトだけで、インタラクティブなWebアプリやゲーム(例:パズルゲームやRPG)を自動で開発できます。プログラミング知識がなくても、アイデアを形にできます。
  • コードの自動生成・実行
    • PythonやHTML/CSS/JavaScriptなど、さまざまな言語でコードを自動で記述・実行し、データ処理やグラフ作成、アプリ開発を支援します。
  • グラフ・画像の自動生成
    • 分析結果を可視化するグラフや画像も自動で作成できます。
  • 自律ワークフローによるプロジェクト遂行
    • ユーザーの指示に基づき、AIが10分以上かけて自律的にWeb検索・データ収集・分析・成果物作成を一貫して行います。
  • アセット管理
    • 生成されたファイル(グラフ、画像、コード、ドキュメントなど)は「Assets」タブで一元管理でき、簡単にプレビュー・ダウンロードが可能です。
  • 多様なタスクの自動化
    • これまで数日かかっていた複雑な調査や調整作業も、Labsを使えば短時間で完了します。

利用イメージ

  • 「NBAプレーオフの結果を予測するモデルを作成して」と指示するだけで、必要なデータ収集・分析・モデル構築・レポート作成まで一気通貫で実施
  • 「パズルゲームを作りたい」と伝えるだけで、スコアシステムやレベルアップ機能付きのゲームが完成
  • 「マーケティングレポートを作成して」と頼むと、調査・データ整理・図表作成・レポート生成まで自動で行われる

まとめ

Perplexity Labsは、ユーザーの「やりたいこと」を普通の言葉で伝えるだけで、まるで優秀なプロジェクトチームが働いてくれるように、レポート・スプレッドシート・ダッシュボード・Webアプリ・ゲームなど、多様な成果物を短時間で作成できるAIワークスペースです。
現在はPerplexity Pro(有料プラン)加入者向けに提供されています。

PDF、Word、Excel、PowerPointの形式のファイルを出力できますか

Perplexity Proの回答

Perplexity(およびPerplexity Labs)では、以下のようにPDF・Word・Excel・PowerPoint形式のファイル出力が可能かどうか、現時点の機能をまとめます。

各ファイル形式の出力サポート状況

ファイル形式出力(生成・ダウンロード)可否備考
PDF可能Perplexityの回答やレポートをPDF形式でダウンロードできる機能あり。Perplexity Pageとして共有も可能。
Word(.docx)一部可能スレッドや回答をWord形式でエクスポートできる場合がある。ただし、公式サイトや一部ユーザー体験では「Word形式でダウンロード」ボタンがあるとの報告も。ただ、公式情報では「構造化テキストをコピーしてWordに貼り付け」と案内される場合もあり。
Excel(.xls)一部可能表形式の回答はExcelやGoogleスプレッドシートに貼り付けて利用できる。一部ユーザー体験では「表をxls形式でエクスポート」できるとの報告も。ただし、公式サイトや主要なガイドでは「コピーして貼り付け」が推奨されている。
PowerPoint(.pptx)直接は不可Perplexity自体はPowerPoint形式での直接出力はサポートしていない。構造化されたテキストや構成データをPowerPointに貼り付けて利用する必要がある。ただし、他社サービス(例:Felo Agent)ではPPT出力が可能。

補足

  • PDF出力
    • Perplexityの回答やDeep Research結果は、ワンクリックでPDFとしてダウンロードできる。
  • Word/Excel出力
    • 公式には「コピーして貼り付け」がメインだが、一部ユーザー体験ではWordやExcel形式でエクスポートできる場合もある。
    • 表やレポートをコピーして、WordやExcelに貼り付けて利用するのが一般的。
  • PowerPoint出力
    • Perplexityでは直接は不可。構成データをPowerPointに手動で貼り付ける必要がある。
    • ただし、Perplexity Labsではレポートやダッシュボードの生成が可能で、将来的に拡張される可能性もある。

まとめ

  • PDF:直接ダウンロード可能
  • Word:一部環境で直接エクスポート可能、基本的にはコピーして貼り付け
  • Excel:表はコピーして貼り付け、一部でxlsエクスポートも可能
  • PowerPoint:直接出力不可。手動で貼り付けが必要

Perplexity Labsの進化により、今後さらに柔軟なファイル出力が追加される可能性もあります。

他にどのような形式のファイルを出力できますか

Perplexity Proの回答

PerplexityおよびPerplexity Labsでは、主に以下のファイル形式が生成・ダウンロード可能です。

出力できる主なファイル形式

  • CSVファイル
    • 表データやスプレッドシート形式のデータをCSVファイルとしてダウンロードできます。Perplexity Labsの「Assets」タブから簡単に取得可能です。
  • Markdown(.md)ファイル
    • ドキュメントやレポートの構成データをMarkdown形式で出力することも可能です。
  • テキスト(.txt)ファイル
    • プレーンテキスト形式で内容をダウンロードできます。
  • コードファイル
    • PythonやHTML/CSS/JavaScriptなど、生成したコードをテキストファイルとして保存・ダウンロードできます。
  • 画像ファイル
    • 生成されたグラフやチャート、AIが作成した画像を画像ファイル(例:PNG、JPEG)としてダウンロード可能です。
  • PDF出力
    • Perplexityの一部機能(例:Pages機能)では、レポートやまとめ記事をPDF形式でダウンロードできる場合があります。
  • Word/Excel/PowerPoint
    • 直接のエクスポートは一部制限がありますが、WordやExcel、PowerPoint用の構成データ(CSVやMarkdown等)は生成できます。
  • その他
    • アップロード機能ではPDFやTXTファイルの読み込みがサポートされていますが、出力については上記の形式が中心です。

まとめ

Perplexity Labsでは、CSV、Markdown、テキスト、コードファイル、画像ファイル(PNG/JPEG等)を直接ダウンロードできます。PDFやWord、Excel、PowerPointについては一部制限がありますが、構成データを生成し、必要に応じて手動で変換することも可能です。

(補足)
Perplexity Proの画面右上には「・・・」マークがあり、それをクリックすると下記のメニューが現れる。ここから下図のファイル形式で出力できるようである。

Perplexity Labsの使い方を具体的に教えてください

Perplexity Proの回答

Perplexity Labsの具体的な使い方は、以下の手順で進めることができます。

1. Perplexity Labsへのアクセス

  1. Perplexity AI公式サイト(https://www.perplexity.ai)にアクセスし、ログインします。
    • アカウント作成・ログインは必須ではありませんが、Labs機能はProプラン加入者向けです。
  2. 画面左側や上部のナビゲーションから「Labs」または「Perplexity Labs」を選択します。
    • または、直接「https://www.perplexity.ai/labs」へアクセスします。

2. プロジェクトの作成

  1. 「New Project」や「新規プロジェクト」ボタンをクリックします。
  2. プロジェクト名や目的を入力します。
    • 例:「マーケティングレポート作成」「ミニアプリ開発」など。

3. プロンプトの入力とタスク設定

  1. メインの入力欄(「Ask anything…」など)に、やりたいことを自然言語で入力します。
    • 例:「NBAプレーオフの結果を予測するモデルを作成して」「パズルゲームを作りたい」「市場分析チャートを自動生成して」。
  2. 必要に応じて、タスクや目的をさらに詳細に設定できます。
    • 例:「グラフを自動挿入して」「リンク付きデータを活用して」など。

4. AIによるタスクの自動実行

  1. 「Start」や「実行」ボタンを押すと、AIが自律的にタスクを進めます。
    • ここでAIは、Web検索・データ収集・分析・グラフ作成・コード生成などを行います。
  2. 通常10分以上かけて、複雑なプロジェクトを自動で遂行します。
    • Deep Researchよりも長い時間がかかりますが、より高度な成果物が自動生成されます。

5. 成果物の確認とダウンロード

  1. 「Assets」タブで、生成されたレポート・スプレッドシート・グラフ・画像・コードなどを確認できます。
  2. 各ファイルをプレビューし、必要に応じてダウンロードできます。
    • 例:CSV、Markdown、テキスト、画像(PNG/JPEG)、コードファイルなど。
  3. 「App」タブでは、作成したミニアプリを直接操作できます。
    • 例:ダッシュボード、スライドショー、シンプルなWebアプリなど。

6. プロジェクトの管理と共有

  1. プロジェクトは保存され、後から再編集や再実行が可能です。
  2. 成果物は外部に共有することもできます。

まとめ

Perplexity Labsは「やりたいこと」を自然言語で伝えるだけで、AIが自動的に調査・分析・成果物作成を行い、レポートやスプレッドシート、ダッシュボード、ミニアプリなど多様な成果物を生成できる先進的なワークスペースです。

補足

  • 言語モデルの選択
    • Labsの一部機能では、右下のセレクトボックスから任意のLLM(例:Llama 3、Mixtralなど)を選択できます。
      (補足)
      本記事作成時点ではこの機能は確認できない
  • 高度な機能
    • プロジェクトごとにAIが自律的にブラウジング・コード実行・グラフ生成などを行い、10分以上かけて複雑なタスクを遂行します。

この手順で、Perplexity Labsを活用できます。

活用例紹介

ここでは、本ブログの別記事でも少し扱ったことがある下記2テーマについてプロジェクトを作成した例を簡単に紹介する

 1. クロスワードパズル生成
 2. アニメ番組放送スケジュール一覧表作成

事例1:クロスワードパズル生成

下記の(電球のような)アイコンを選択し、作成したいプロジェクトの内容を入力して実行させた

Perplexity Labsの回答

カタカナクロスワードパズル生成プログラムの作成方法

はじめに

クロスワードパズルは言葉の知識と論理的思考を組み合わせた古典的なパズルとして、幅広い年齢層に親しまれています。特に日本語のカタカナを使ったクロスワードパズルは、その視覚的な特徴と構造がシンプルなため、多くの人に親しまれています。本記事では、マスの大きさとジャンルを入力することで、カタカナのクロスワードパズルを自動生成するプログラムの作成方法について解説します。

クロスワードパズルの基本ルール

黒マスのルール

クロスワードパズルの基本ルールを理解することが重要です:

  1. 黒マスをタテやヨコにつなげない(日本語クロスワードの場合)
  2. 黒マスでマス目を分断させない(すべての白マスはつながっている必要がある)
  3. 四隅に黒マスを配置しないことが一般的(ただしこれは慣例的なルール)

言葉のルール

日本語クロスワードには以下のような言葉に関するルールがあります:

  1. 拗音と促音(小さな「ヤユヨ・ツ・アイウエオ」など)は大きな文字に統一する
  2. 言葉は名詞のみ使用する(固有名詞も可)
  3. 同じ言葉を2回以上使用しない

クロスワードパズル生成のアルゴリズム

クロスワードパズル生成の基本的なアルゴリズムは以下のステップから成ります:

  1. 単語リストの準備(ジャンル別のカタカナ単語データベース)
  2. グリッドの初期化(マスの大きさに応じた空のグリッド)
  3. 単語の配置(交差する位置を計算)
  4. 配置の最適化(より多くの単語を効率的に配置)
  5. 番号の振り当て(「Z」の順または「逆N」の順)
  6. ヒント(カギ)の作成

単語の交差を見つけるアルゴリズム

単語同士が交差するポイントを見つけることがクロスワード生成の鍵となります:

pythondef find_intersections(word1, word2):
    """2つの単語の交差点を見つける"""
    intersections = []
    for i, char1 in enumerate(word1):
        for j, char2 in enumerate(word2):
            if char1 == char2:
                intersections.append((i, j))
    return intersections

この関数を使って、単語同士の交差点を見つけ、効率的に単語を配置していきます。

プログラム実装

カタカナ単語データベースの構築

クロスワードパズル生成の最初のステップはカタカナ単語データベースの構築です:

python# カタカナ単語のサンプルデータベース(ジャンル別)
katakana_words_db = {
    "動物": ["ネコ", "イヌ", "ウマ", "ブタ", "ウシ", "トラ", "ライオン", "ゾウ", "キリン", "パンダ"],
    "食べ物": ["パン", "ケーキ", "カレー", "ラーメン", "ハンバーガー", "ピザ", "アイス", "チョコ", "コーヒー"],
    "乗り物": ["クルマ", "デンシャ", "ヒコウキ", "バス", "フネ", "バイク", "タクシー"],
    "国名": ["アメリカ", "フランス", "ドイツ", "イタリア", "スペイン", "カナダ", "ブラジル", "インド"],
    "スポーツ": ["サッカー", "テニス", "バスケ", "ゴルフ", "スキー", "ボクシング", "マラソン"]
}

このようにジャンル別に単語を分類しておくことで、ユーザーが指定したジャンルに合わせてパズルを生成できます。

クロスワードグリッドの生成

グリッドの生成と単語の配置は次のように実装できます:

pythondef create_empty_grid(size):
    """空のグリッドを作成"""
    return [['■' for _ in range(size)] for _ in range(size)]

def place_word(grid, word, row, col, direction):
    """単語をグリッドに配置"""
    if direction == 'horizontal':
        for i, char in enumerate(word):
            grid[row][col + i] = char
    elif direction == 'vertical':
        for i, char in enumerate(word):
            grid[row + i][col] = char

これらの関数を使って、クロスワードのグリッドを構築していきます。

より高度なアルゴリズムの実装

より洗練されたクロスワードパズルを生成するために、以下のようなクラスを実装できます:

pythonclass KatakanaCrosswordGenerator:
def __init__(self):
self.word_db = {...} # 単語データベース
self.clue_db = {...} # ヒントデータベース

def generate_puzzle(self, size, genre):
# 複数回試行してより良いパズルを生成
best_grid = None
best_word_info = None

for attempt in range(10):
grid = self.create_empty_grid(size)
# 単語配置のロジック
# ...

return best_grid, best_word_info

このようなクラスを使うことで、パズルの質を向上させることができます。

Webアプリケーションの実装

HTML/CSS/JavaScriptの構成

Webアプリケーションとして実装する場合、以下のような構成になります:

  1. HTML: パズルのUI構造を定義
  2. CSS: グリッドのスタイルやレイアウトを定義
  3. JavaScript: パズル生成のロジックと対話機能を実装

クロスワードUI実装のポイント

クロスワードパズルのWebインターフェースには以下の要素が必要です:

  1. グリッド表示部分(マス目の表示)
  2. 設定パネル(サイズ、ジャンルの選択)
  3. ヒント表示部分(タテのカギ、ヨコのカギ)
  4. 操作ボタン(パズル生成、解答表示など)

JavaScriptを使ってインタラクティブな要素を追加することで、ユーザーがマス目に文字を入力したり、解答を確認したりできます

モバイル対応の考慮

スマートフォンやタブレットでも快適に使用できるようにするため、レスポンシブデザインを取り入れることが重要です。特に小さな画面でもマス目が見やすいように、適切なサイズ調整が必要です。

拡張機能と今後の展望

拡張機能の可能性

このプログラムには以下のような拡張機能を追加できます:

  1. ヒントの難易度調整機能
  2. パズルの難易度レベル設定
  3. ユーザー独自の単語リスト追加機能
  4. パズルの保存・共有機能
  5. プリント出力機能

AI技術の活用

最新のAI技術を活用することで、より高度な機能も実現可能です:

  1. 単語の自動カタカナ変換(英単語からカタカナへの変換など)
  2. より自然で興味深いヒントの自動生成
  3. ユーザーの好みに合わせたパーソナライズされたパズル生成

まとめ

マスの大きさとジャンルを入力すると日本語のカタカナクロスワードパズルを生成するプログラムの作成方法について解説しました。クロスワード生成のアルゴリズムを理解し、適切なデータ構造とロジックを実装することで、楽しく教育的なパズルアプリケーションを作成できます。

本記事で紹介した技術を活用して、ぜひオリジナルのクロスワードパズル生成プログラムを作ってみてください。教育目的や娯楽として、また語彙力向上のツールとしても価値のあるアプリケーションになるでしょう。

(補足)
Perplexity Labsの回答には下図の通り、「ラボ」のタブのほかに、「アプリ」や「アセット」などのタブがあり、それらをクリックすると別画面が現れる。それぞれのタブで表示される内容は下記の通りである。

各種タブ

タブ「アプリ」

タブ「アセット

タブ「タスク」

(中略)

タブ「ソース」

(補足)
「アセット」の「Python」コードの一例を示す。

# より高度なクロスワード生成アルゴリズム
import random
import copy

class KatakanaCrosswordGenerator:
    def __init__(self):
        # より豊富なカタカナ単語データベース
        self.word_db = {
            “動物”: [
                “ネコ”, “イヌ”, “ウマ”, “ブタ”, “ウシ”, “トラ”, “ライオン”, “ゾウ”, “キリン”, “パンダ”,
                “サル”, “ヒツジ”, “ヤギ”, “シカ”, “クマ”, “ウサギ”, “ハムスター”, “リス”, “カバ”, “シマウマ”
            ],
            “食べ物”: [
                “パン”, “ケーキ”, “カレー”, “ラーメン”, “ハンバーガー”, “ピザ”, “アイス”, “チョコ”, “コーヒー”, “ティー”,
                “サラダ”, “ステーキ”, “スープ”, “パスタ”, “オムレツ”, “サンドイッチ”, “ドーナツ”, “クッキー”, “プリン”, “ヨーグルト”
            ],
            “乗り物”: [
                “クルマ”, “デンシャ”, “ヒコウキ”, “バス”, “フネ”, “バイク”, “タクシー”, “トラック”, “シンカンセン”,
                “ヘリコプター”, “フェリー”, “ジテンシャ”, “スクーター”, “ロケット”, “キュウキュウシャ”
            ],
            “国名”: [
                “ニホン”, “アメリカ”, “フランス”, “ドイツ”, “イタリア”, “スペイン”, “カナダ”, “ブラジル”, “インド”, “チャイナ”,
                “オーストラリア”, “ロシア”, “イギリス”, “メキシコ”, “エジプト”, “タイ”, “ケニア”, “ペルー”
            ],
            “スポーツ”: [
                “サッカー”, “テニス”, “バスケ”, “ゴルフ”, “スキー”, “ボクシング”, “マラソン”, “スイミング”,
                “バレーボール”, “ヤキュウ”, “アメフト”, “ホッケー”, “バドミントン”, “スケート”, “ジョギング”
            ]
        }
       
        # 各単語のヒントデータベース
        self.clue_db = {
            # 動物のヒント
            “ネコ”: “ニャーと鳴く小さなペット”,
            “イヌ”: “人間の最良の友と呼ばれる動物”,
            “ウマ”: “競馬で走る大型の動物”,
            “ライオン”: “百獣の王と呼ばれる肉食動物”,
            “ゾウ”: “長い鼻を持つ大型の動物”,
            “パンダ”: “白と黒の毛色で竹を食べる動物”,
            “トラ”: “縞模様のある大型の肉食動物”,
            “キリン”: “首が長い動物”,
           
            # 食べ物のヒント
            “パン”: “小麦粉から作る主食”,
            “ケーキ”: “誕生日に食べる甘いもの”,
            “カレー”: “スパイシーな煮込み料理”,
            “ラーメン”: “中華麺を使った日本の国民食”,
            “ピザ”: “イタリア発祥の円形の料理”,
            “アイス”: “冷たくて甘いデザート”,
           
            # 乗り物のヒント
            “クルマ”: “道路を走る4輪の乗り物”,
            “デンシャ”: “線路を走る公共交通機関”,
            “ヒコウキ”: “空を飛ぶ乗り物”,
            “バス”: “大勢の人を運ぶ大型車両”,
            “バイク”: “2輪の乗り物”,
            “タクシー”: “お金を払って乗る車”,
        }
   
    def get_words_by_genre(self, genre, size):
        “””指定されたジャンルと最大サイズに合う単語を取得“””
        if genre in self.word_db:
            words = [word for word in self.word_db[genre] if 2 <= len(word) <= size]
        else:
            # 全ジャンルから取得
            all_words = []
            for word_list in self.word_db.values():
                all_words.extend(word_list)
            words = [word for word in all_words if 2 <= len(word) <= size]
       
        return words
   
    def create_empty_grid(self, size):
        “””空のグリッドを作成”””
        return [[‘■’ for _ in range(size)] for _ in range(size)]
   
    def can_place_word(self, grid, word, row, col, direction):
        “””単語をグリッドに配置できるかチェック”””
        size = len(grid)
       
        if direction == ‘horizontal’:
            if col + len(word) > size:
                return False
            for i, char in enumerate(word):
                current = grid[row][col + i]
                if current != ‘■’ and current != char:
                    return False
        elif direction == ‘vertical’:
            if row + len(word) > size:
                return False
            for i, char in enumerate(word):
                current = grid[row + i][col]
                if current != ‘■’ and current != char:
                    return False
       
        return True
   
    def place_word(self, grid, word, row, col, direction):
        “””単語をグリッドに配置”””
        if direction == ‘horizontal’:
            for i, char in enumerate(word):
                grid[row][col + i] = char
        elif direction == ‘vertical’:
            for i, char in enumerate(word):
                grid[row + i][col] = char
   
    def find_intersections(self, word1, word2):
        “””2つの単語の交差点を見つける“””
        intersections = []
        for i, char1 in enumerate(word1):
            for j, char2 in enumerate(word2):
                if char1 == char2:
                    intersections.append((i, j))
        return intersections
   
    def generate_puzzle(self, size, genre):
        “””クロスワードパズルを生成”””
        words = self.get_words_by_genre(genre, size)
        
        if len(words) < 2:
            return None, None
       
        # 複数回試行してより良いパズルを生成
        best_grid = None
        best_word_info = None
        max_words_placed = 0
       
        for attempt in range(10):  # 10回試行
            grid = self.create_empty_grid(size)
            word_info = {}
            used_words = set()
           
            # 最初の単語を中央に配置
            first_word = random.choice(words)
            center = size // 2
            start_col = max(0, center – len(first_word) // 2)
           
            self.place_word(grid, first_word, center, start_col, ‘horizontal’)
            word_info[1] = {
                ‘word’: first_word,
                ‘row’: center,
                ‘col’: start_col,
                ‘direction’: ‘horizontal’,
                ‘clue’: self.clue_db.get(first_word, f”ジャンル: {genre}”)
            }
            used_words.add(first_word)
           
            # 追加の単語を配置
            words_placed = 1
            attempts_per_word = 0
           
            while words_placed < 5 and attempts_per_word < 50:  # 最大5単語、50回試行
                attempts_per_word += 1
                word = random.choice([w for w in words if w not in used_words])
               
                # 既存の単語との交差点を探す
                placed = False
                for existing_id, existing_info in word_info.items():
                    existing_word = existing_info[‘word’]
                    intersections = self.find_intersections(existing_word, word)
                   
                    for ex_pos, word_pos in intersections:
                        if existing_info[‘direction’] == ‘horizontal’:
                            # 既存が横なら、新しい単語は縦
                            new_row = existing_info[‘row’] – word_pos
                            new_col = existing_info[‘col’] + ex_pos
                            new_direction = ‘vertical’
                        else:
                            # 既存が縦なら、新しい単語は横
                            new_row = existing_info[‘row’] + ex_pos
                            new_col = existing_info[‘col’] – word_pos
                            new_direction = ‘horizontal’
                       
                        if (0 <= new_row < size and 0 <= new_col < size and
                            self.can_place_word(grid, word, new_row, new_col, new_direction)):
                           
                            self.place_word(grid, word, new_row, new_col, new_direction)
                            words_placed += 1
                            word_info[words_placed] = {
                                ‘word’: word,
                                ‘row’: new_row,
                                ‘col’: new_col,
                                ‘direction’: new_direction,
                                ‘clue’: self.clue_db.get(word, f”ジャンル: {genre}”)
                            }
                            used_words.add(word)
                            placed = True
                            attempts_per_word = 0
                            break
                    
                    if placed:
                        break
           
            if words_placed > max_words_placed:
                max_words_placed = words_placed
                best_grid = copy.deepcopy(grid)
                best_word_info = copy.deepcopy(word_info)
       
        return best_grid, best_word_info
   
    def grid_to_string(self, grid):
        “””グリッドを文字列として表示”””
        result = “”
        for row in grid:
            result += ‘ ‘.join(row) + ‘\n’
        return result

# テスト実行
generator = KatakanaCrosswordGenerator()

print(“=== 高度なカタカナクロスワードパズル生成システム ===\n”)

# 複数のテストケース
test_cases = [
    (6, “動物”),
    (7, “食べ物”),
    (8, “乗り物”),
    (6, “スポーツ”)
]

for size, genre in test_cases:
    print(f”サイズ: {size}x{size}, ジャンル: {genre}”)
    grid, word_info = generator.generate_puzzle(size, genre)
   
    if grid and word_info:
        print(generator.grid_to_string(grid))
        print(“使用された単語とヒント:”)
        for word_id, info in word_info.items():
            direction_jp = “横” if info[‘direction’] == ‘horizontal’ else “縦”
            print(f”  {word_id}. {direction_jp} ({info[‘row’]+1}, {info[‘col’]+1}): {info[‘word’]} – {info[‘clue’]}”)
        print(“=” * 50)
    else:
        print(“適切なパズルを生成できませんでした。”)
        print(“=” * 50)

(補足)
今回生成したクロスワードパズルで4つのカタカナ単語が配置された例を紹介する。「新しいパズル生成」をクリックするごとに新しいパズルが生成される。

・これまでいくつかのAIにクロスワードパズルの自動生成について質問しプログラム生成の依頼を行った。Web調査は行われたが、具体的なアルゴリズム生成やユーザーインターフェース生成の段階では、評価できるレベルの結果が得られなかった。今回は、やっとまともな成果物ができ、一定の進歩がみられた。
(ただし、他のAIを試したのはかなり前のことであり、現在、他のAIがどの程度進歩しているかは未確認である)

・日本語(カタカナ)のクロスワードパズルというテーマは、AIの能力を測る上で有効なテーマではないかと思う。クロスワードパズルの基本的な機能を実現した後は、「より良いパズルの生成」、「見た目にバランスの取れた(不規則な)黒マスの配置」などをどのようなアルゴリズムで実現できるか、人にとって違和感のないものを作れるか、人が楽しめるものを作れるかなどが次の課題となる。

・カタカナ単語の数を増やせば、もう少し多くのカタカナ単語を配置してくれるのかもしれないが未検証。
 (今回生成したプログラムでは、最大4つのカタカナ単語が配置された)
・タブ「アプリ」の画面では、実際に動くユーザーインターフェースで、その機能を実際に試すことができる。
・タブ「タスク」により、行われた調査や検討の内容を確認することができ、修正内容などを検討しやすい。
・タブ「アセット」では、生成物を確認することができ、Alがどのような前提条件でプログラムを生成したのか、どのようなデータに基づいて実行されたのかなどを知ることができる。タブ「アセット」は、現在の生成物の課題・改良点、追加指示を検討する上で有効である。

事例2:アニメ番組放送スケジュール一覧表作成

下記の関連記事でもこのテーマを取り上げた。今回は、「更新」ボタンを押すことによって現在時刻を取得し現在時刻を考慮した一覧表を作成するアプリの生成を依頼した。

Perplexity Labsの回答

関西地方アニメ番組スケジュール表示プログラムの開発

関西地方で視聴可能な地上波・BS放送・ABEMAおよびPrime Videoで配信される2025年春アニメ番組と、前クールから継続している冬アニメ番組のスケジュール管理システムを開発しました。本プログラムは、現在時刻以降に放送・配信される番組を効率的に表示し、リアルタイムでの番組確認を可能にします。

2025年春アニメの概況

新作アニメ作品の特徴

2025年春クールでは、人気作品の続編が多数ラインナップされており、特に関西地方での放送が注目されています。主要な新作には「阿波連さんははかれない season2」「炎炎ノ消防隊 参ノ章」「WIND BREAKER Season 2」などがあり、これらはMBS毎日放送を中心とした関西の地上波局で放送されます。

MBS毎日放送では金曜深夜の「スーパーアニメイズム TURBO」枠で「WIND BREAKER Season 2」が放送されるほか、「炎炎ノ消防隊 参ノ章」も金曜深夜枠で継続放送されます。これらの作品は関西地方のアニメファンにとって重要なコンテンツとなっています。

BS放送での展開

BS11では2025年4月クールに全42作品のアニメ関連番組を放送予定で、「ANIME+」枠を中心とした充実したラインナップを提供します。特に「黒執事 -緑の魔女編-」「スライム倒して300年、知らないうちにレベルMAXになってました ~そのに~」などの人気作品が土曜深夜枠で放送されます。

BSフジの「アニメギルド」枠では「鬼人幻燈抄」「この恋で鼻血を止めて」などの作品が火曜から金曜の深夜時間帯で展開されます。これらのBS放送は関西地方でも同時視聴が可能で、地上波と合わせて視聴選択肢を広げています。

継続番組の状況

冬クールからの継続作品

2024年冬クールから継続している主要作品として「薬屋のひとりごと 第2期」が挙げられます。この作品は読売テレビで毎週金曜23時から「FRIDAY ANIME NIGHT」枠で全国同時放送されており、関西地方でも視聴可能です。

「薬屋のひとりごと」第2期は2025年4月4日から第2クールの放送が開始され、連続2クール構成で展開されています。この作品は各種配信プラットフォームでも放送終了後より順次配信されており、多様な視聴方法を提供しています。

その他の継続作品として「Aランクパーティを離脱した俺は、元教え子たちと迷宮深部を目指す。」「ニートくノ一となぜか同棲はじめました」「魔神創造伝ワタル」などがあり、これらは前クールから引き続き放送・配信されています。

配信サービスでの展開

ABEMAでの配信状況

ABEMAでは2025年春クールに全66作品の無料放送・無料配信を実施しており、独占配信3作品、最速配信21作品を含む充実したラインナップを提供しています。特に「白豚貴族ですが前世の記憶が生えたのでひよこな弟育てます」は地上波1クール先行での独占配信となっています。

「機動戦士Gundam GQuuuuuuX」「ウィッチウォッチ」「アポカリプスホテル」などの注目作品がABEMAで配信され、関西地方の視聴者も無料でアクセス可能です。これらの配信は地上波放送と同時または先行配信として提供されています。

Prime Videoでの展開

Amazon Prime Videoでは「最強の王様、二度目の人生は何をする?」「ボールパークでつかまえて!」「謎解きはディナーのあとで」などの作品が配信予定です。Prime Videoは特に独占配信コンテンツに力を入れており、関西地方の視聴者にも多様な選択肢を提供しています。

開発されたスケジュール表示システム

システムの機能概要

開発されたWebアプリケーションは、関西地方で視聴可能なアニメ番組の包括的なスケジュール管理を実現しています。システムは以下の主要機能を搭載しています:

  • 番組一覧表示: タイトル、放送局、開始時刻、終了時刻、話数、エピソードタイトルを含む詳細情報の表示
  • リアルタイム更新: 「更新」ボタンによる現在時刻以降の番組フィルタリング機能
  • 自動ソート: 開始時刻順での番組自動整列機能
  • 継続番組管理: 前クールで終了した番組の自動除外機能

対象放送局・配信サービス

システムは関西地方で視聴可能な以下の放送局・配信サービスをカバーしています:

地上波放送局

  • MBS毎日放送
  • 読売テレビ
  • テレビ大阪
  • 関西テレビ(一部番組)

BS放送局

  • BS11
  • BSフジ
  • BS日テレ(一部番組)

配信サービス

  • ABEMA
  • Prime Video

技術的特徴

システムは深夜放送特有の24時以降の時刻表記(25:30、26:00など)に対応し、現在時刻との正確な比較機能を実装しています。これにより、深夜アニメの放送時間を正確に管理し、視聴者にとって分かりやすい表示を実現しています。

また、レスポンシブデザインを採用することで、PCからスマートフォンまで様々なデバイスでの利用を可能にし、アニメファンの多様な視聴環境に対応しています。

まとめ

関西地方のアニメファンにとって、2025年春クールは魅力的な作品が豊富に揃っており、地上波・BS・配信サービスを通じて多様な視聴選択肢が提供されています。開発されたスケジュール表示システムは、これらの番組情報を効率的に管理し、現在時刻以降の放送予定を即座に確認できる実用的なツールとして機能します。

システムは継続番組と新規番組の両方を適切に管理し、ユーザーの要求仕様を満たした設計となっています。今後もアニメ業界の動向に合わせてデータの更新と機能の拡張を行うことで、関西地方のアニメファンにとって価値のあるツールとして発展していくことが期待されます。

(補足)
アプリの画面を下図(抜粋)に示す。「更新」ボタンをクリックすると、基準時刻や一覧表が更新された。

・当初、アニメ番組の情報収集に苦労していたようだが、「春アニメ」というキーワードで限定することで、より効率的に番組情報を収集することができたようである。放送局の公式APIが公開されていないとか、そもそも公式APIがないなど、放送局からの番組情報の収集が難しいようだが、より効率的に番組情報を収集できたのは、「春アニメ」というキーワードを含む記事を提供しているサイトが多いおかげである。
・一覧表が正しいかどうかは未検証である。
・プログラムが完成したというわけではないが、ユーザーインターフェースの改良や機能追加を試す、たたき台として有効な生成物ではないかと思う。

目次