年末が近づき、来年の運勢が気になる時期になりました。占いが好きな私は、「自分で占いアプリを作ったらどうなるだろう?」と思い立ち、PythonとAIを活用して挑戦してみることにしました。

この記事では、ChatGPTやClaudeといったAIツールを活用しながら、占いアプリを開発した過程をご紹介します。

0.易経占いを選んだ経緯

占いアプリを作ろうと考えたとき、「どの占いを題材にするか?」が最初の課題でした。そこで、奥深い歴史を持ち、幅広い解釈が可能な易経占いを選びました。易経は、中国の古典の中でも最も古い書物の一つであり、その哲学的な背景や象徴的なシステムは、現代でも多くの人々に愛されています。また、64卦という明確な構造を持つため、デジタル化してアプリに落とし込むのにも適していると感じました。

さらに、易経占いは単なる運勢の占いに留まらず、人生の指針や行動のヒントを得るための深い洞察を提供します。その奥深さに惹かれ、今回のプロジェクトで採用しました。

易経占いとは?
**易経(Yi Jing)**は、中国の古典であり、世界最古の占い体系の一つです。易経占いでは、**陰(― ―)と陽(―)**の組み合わせで構成された64の「卦(け)」を用いて、自然や人生の法則を解き明かします。

易経の基本的な仕組み
卦(か)
易経は64卦で構成され、それぞれが6本の線(爻:こう)で表されます。この線は陰(断線)または陽(実線)のどちらかで構成され、自然現象や人生の状況を象徴します。

占いの方法
コインや竹棒などを用いてランダムに卦を生成し、その卦を易経の解釈に基づいて読み解きます。結果は、現在の状況や未来の可能性を示唆するものとされています。

哲学的背景
易経は単なる占いではなく、陰陽思想や五行思想など、中国哲学の基本に基づいており、調和と変化を重んじる教えが含まれています。

易経占いの魅力
普遍的な知恵
自然界や人間関係、人生のあらゆる場面で適用できる洞察を提供します。

多様な解釈
64卦の組み合わせは無限の可能性を生み出し、占う人の状況に合わせた柔軟な解釈が可能です。

シンプルな構造
陰陽の組み合わせというシンプルな仕組みでありながら、非常に奥深い内容を持つため、デジタル化にも適しています。

以上が易経占いについての簡単な説明となります。

今回のプロジェクトでは、この易経占いのシステムをアプリに落とし込むため、64卦のデータを正確に整備し、AIを活用して卦の解釈を生成する仕組みを作りました。易経占いの魅力を生かしつつ、現代的な技術と融合させることで、ユーザーに新しい体験を提供することを目指しました。

1.初期実装:ChatGPTを活用したプロトタイプ開発

プロジェクトの初期段階では、素早く動くものを作ることが求められます。この段階で頼りになったのがChatGPTです。ChatGPTは、具体的なコード例や簡易的なアルゴリズムを提案してくれるため、以下のようなプロトタイプを短時間で構築することができました。

スクリーンショット 2024-12-01 112525.png 41.65 KB
スクリーンショット 2024-12-01 112936.png 70.13 KB

ChatGPTの得意分野(個人的見解)

素早いプロトタイピング: 初期段階で必要なコード例を提供し、手を動かすまでの時間を短縮。
試行錯誤のサポート: 具体的な実装アイデアを次々に提案してくれる。

2.課題解決と設計の進化:Claudeを活用したモジュール設計

プロトタイプが完成し、機能を拡張するフェーズでは、コードの整理やモジュール化が重要になります。この段階で役立ったのがClaudeです。Claudeは、複数のファイルやコード全体を入力することで、それらを解析し、効率的なモジュール設計や依存関係の整理を提案してくれました。

Claudeで得られたモジュール設計の例
image.png 21.17 KB


Claudeの得意分野(個人的見解)

大規模なコードの解析: プロジェクト全体を俯瞰し、適切なモジュール分割や改善ポイントを提案。
依存関係の整理: モジュール間の役割を明確化し、効率的な設計を支援。

3.Claude活用のポイント

Claudeは、複数のコードファイルを一度に入力し、それらを俯瞰的に解析する能力に長けています。具体的には、以下のような場面で役立ちました。

・コード全体の整理と俯瞰的な分析
Claudeにプロジェクト全体のコードを渡すと、依存関係や冗長な部分を迅速に特定してくれました。例えば、GUI部分とビジネスロジックが密接に結びついている箇所や、重複している関数を指摘し、分離・統合の提案を提示してくれました。

・モジュール化の提案
Claudeは各機能の責務を再定義し、どの部分を独立したモジュールに分けるべきかを具体的にアドバイスしてくれました。たとえば、以下のようなモジュール分割が提案されました:

    GUIコンポーネント(gui/):ユーザーインターフェースを管理。
    ビジネスロジック(services/):占いロジックやAIによる解釈を担当。
    データ管理(data/):静的なデータや設定値を保持。
    共通ユーティリティ(utils/):テーマ管理や汎用関数を集約。

・依存関係の整理
Claudeは「このコードは、このモジュールに依存している」という関係をわかりやすく可視化し、依存性の低い設計を提案しました。これにより、モジュール同士が過度に結びつかず、変更が容易な構造を構築できました。

4.64卦データの修正作業

プロジェクト初期の段階で、64卦のデータセットはAIから取り出した既存のデータをそのまま利用していました。しかし、確認作業を進める中で、陰陽の組み合わせに誤りがあることが判明。このままでは正確な占い結果が得られないため、専門書を参照しながらデータを修正。この修正作業によって、64卦のデータが正確に反映されるようになり、占い結果の信頼性が向上しました。

5.OPENAIの APIを活用した解釈生成のプロセス

以下の手順で、占い結果に基づく解釈文を生成しました。

1)占いで得られた卦データをGPT-4 APIに送信
ユーザーが「占う」ボタンを押すと、生成された卦(例: "乾")の名前がAPIに渡されます。

*一部抜粋
image.png 69.77 KB

2)GPT-4 APIから解釈文を取得
GPT-4は送信された卦データに基づき、意味やアドバイスを含む解釈文をリアルタイムで生成します。

3)ユーザーインターフェースに解釈文を表示
取得した解釈文をアプリのGUIに表示し、ユーザーに提供します。


占い結果の表示
image.png 61.03 KB

image.png 126.5 KB

まとめ
今回のプロジェクトでは、ChatGPTを活用してプロトタイプを作成し、Claudeによるモジュール設計の提案を参考に進めることで、効率的に占いアプリを開発することができました。また、GPT-4 APIを利用して占い結果の解釈をリアルタイムで生成し、ユーザーに提供する仕組みを構築しました。

占いという伝統的な文化とAI技術を組み合わせることで、伝統を尊重しながら新しい形の表現を試みました。このプロセスで得た学びを、今後の開発にも活かしていきたいと考えています。