前置きが長くなる。
そもそもぼくは、スマホをもってない。意地になっている。どこまでスマホなしでやれるか?社会実験とうそぶいて。いまのところ、最近一番苦労しているのは、外食で注文のできない店がだんだん増えてきたということだ(対処方法は、その店に行かない、ということだ)。
そんなぼくが、なぜ、スマホアプリ作成をかじってみようと思ったか?
それは囲碁のKatagoについて調べているうちに、スマホアプリ「Baduk AI 」の存在を知ったからだ( Android用囲碁AIアプリ『Baduk AI』: 囲碁棋士のコアなお話 )。でも、そもそも、囲碁の対局アプリはWEB版、PCダウンロード版で、コンピューター対局、あるいは第3者との対局をするツールは充分ある。わざわざなんでスマホ?
そんなぼくがはまったのは、「Baduk AI 」は、要するに、外部WEBサーバー(GTP / Analysis Server)を利用したものということで、それと対抗してなんとか「直接スマホに書いてできないか?」と魔がさしたからだ。
だが、作業は難航。ぼくにとって、スマホアプリ開発をゼロかがら始めることになることに加え、すすめていくいうちに、今PC版のKatagoのVer1.14.0をVer1.8.1におとさないといけないこととなり、途中で1からやりなおし。ひきつづきの問題は、エラーをなくすと、機能が働かなくなる(おそらく、思考エンジンがよびだせなくなる)こと。そのため、一気ではなく、あえて最小機能から少しずつ機能を増やしていくという方法に変更することになり、また途中で1からやりなおし。それでも、結局、ある機能を追加(おそらく思考エンジンよびだし)しようとすると、何回やっても、エラーをなくすと、その機能が働かなくなる「堂々めぐり」は解消せず。
そのときのぼくとChatGPTのやり取りは以下のとおり。
ぼく:今回、はじめてのスマホアプリつくり挑戦。いままでになく、ChatGPTがつくるコードにエラーが多く続き、堂々巡りの様相を呈していると感じてます(PCアプリとくらべて)。そもそも、もともとスマホアプリは間口がPCアプリに比べて狭いのか?それともChatGPTが、PCアプリにくらべてスマホアプリが苦手なのか?
ChatGPT: 正直に言うと――どっちもあります。
(A) スマホ開発そのものが“間口が狭い”のは事実だし、(B) 私(GPT-5 Thinking)がPCアプリよりモバイルで外す確率が高くなりがちなのも事実です。理由を分解します。
環境が多層
端末差・エミュ差:PCは1環境ですが、Androidはメーカー・OS・ABIで微妙に違う。ビルドは通っても、JNIシグネチャ不一致/ABI不一致/soが見つからないで落ちるのが典型。
サンドボックス & 権限:ファイルI/Oの通るパスが限定され、APIレベルで挙動も変わる。
JNI/NDKの落とし穴:C++例外はそのままプロセス落ち。エラー文字列で返す設計にしておかないと“原因が見えないクラッシュ”になります。
なぜ私がモバイルで外しやすいのか?
その場でビルド・実機検証ができない:ログや画面で確認しながら小さく直す、ができず、推測が混ざる→ミスマッチが連鎖しやすい。
バージョン差:AGP/Gradle/NDK/CMakeの“組み合わせ依存”が強い。一般論の設定が、あなたの環境のピンポイントにはまらないことがある。
長いファイル差分:複数ファイルを同時に大きく差し替えると、1箇所の齟齬が他に波及しやすい。
なので「PCアプリよりスマホの方が難しい」のも、「私がモバイルで外しやすい」のも、どちらも現実的な背景があります。今回の“堂々巡り感”はその合わせ技です。
*
今回の、「電卓インベーダーをスマホアプリ用につくる」はKatagoアンドロイド用アプリ作成失敗のリベンジである。
「電卓インベーダー」(約50年前、ぼくが小学生のころ、まだ本物のインベーダーが出る前に流行った!)の復刻に関するHP:
https://kakakumag.com/houseware/?id=11983
実は、1年ほどまえ、Pythonでプロトタイプはできていた。

電卓の0~9の数字はないが、左下の+と-で数字を出現させる仕様
このHPと、今あるpythonプログラム。2つの情報をChatGPTに送る。するとKatagoアプリと比較ならないほど楽に、最初のアプリ作成に成功したのだった。
簡単な説明。まずは、アンドロイド作成を1から始めた身としては、幼稚な話からスタート。
最初の準備として必要なダウンロードは主に3つ:
(1)AndroidStudio:そこの場所はダウンロードすると自動でC:\Program Files\Android\Android Studio に
(AndroidStudioはVisualStudioCodeと似て、そこでプログラムを起動したりバグをみたりするが、それより広い機能をいろいろ持っている)。
(2)flutterSDK(=flutter): C:\src\flutter\bin ⇒ ここにダウンロードしたflutterSDK(=flutter)を置いた & 環境設定必要(PATHとおした)
(3)Android Studio内の SDK Manager(その中にflutterプラグインがあるが、それだけでなく、いろいろツール含む)をAndroid Studioからダウンロード。その場所は既定で C:\Users\koji3\AppData\Local\Android\Sdk →Flutter は自動で見つけます(特別な環境変数設定は不要:もうPATHとおしてあるので)。
次に、すぐ走る最小実装(Flutter)の方法は例えば下の2つ
① Android Studio → file→new→new flutter project:PATHをとおして、作成(フォルダの場所はどこでもいい)
② コマンドプロンプトにて
cd C:\Users\koji3
flutter create dentaku_invader
cd dentaku_invader(ここに、フォルダがつくられる:他でもいいが簡便)
*ChatGPTは②方式を案内
いずれも、ただ、フォルダ一つがつくられるだけでなく、その中に<flutter一式>(複数ファイル)が自動で一気に作成される。
*参考 C:\Users\koji3\AndroidStudioProjects\KataGoJNI¥appなど (KatagoではKotlin,, C++) ⇒ ひとつづつファイルてづくりだった
そのdentaku_invader内に自動で作成された中のlib/main.dart に、ChatGPTが作成したプログラムをそのままコピペ。その量、320行!ぼくはPythonは多少はわかるが、dartは全く知らない=自分では絶対かけない!
AndroidStudioでこのdentaku_invaderを選び、(Syncない)Run

操作仕様(“電卓入力で狙う”版) 下部に電卓風テンキー(7 8 9 / 4 5 6 / 1 2 3 / 0 ・ + = C)。 数字キー(0–9):照準数字を直接指定(AIMのショートカット)。 +(プラス):FIRE(弾を1発消費して発射)。 =(イコール):連射(同じ数字が続くときの“FIRE連打”を1タップで実行・オプション)。 ・(小数点):元祖のAIM風に0→9を1つ進める(好みでON/OFF)。 C:ラウンド再開(ポーズ中のリセット相当)。※「±ではなく“電卓の数字入力で狙う”」=数字を押すだけで狙いが即座にその数字になるのでテンポが上がります。
ゲームルール(本家踏襲 + 明示) • 1ラウンド=16体のインベーダー。 • 弾30発制限。弾ゼロでゲームオーバー。カシオ • 右→左へ数字が流れる。左端に到達でライフ−1(3本)。 • 撃破した数字の合計が10の倍数になる瞬間、次の出現がUFO(n)=300点。カシオ • スコア、残弾、残ライフ、経過時間をHUD表示。
*
今回の、「電卓インベーダーをスマホアプリ用につくる」はKatagoアプリの作成失敗に対するリベンジ。もちろん、まだアプリ登録するような洗練さはない(そこまでやる気もない)。だが、あっさりプロトタイプが動いたところからすると、ChatGPTがスマホアプリ開発が苦手、というより、「Katagoをアンドロイドアプリ内だけでうごかすことそのもののハードルの高さ」がKatagoアプリの作成失敗の原因と思われた(例えばKatagoファイル構造の複雑さも関係?)。
そして、これ、アンドロイドアプリ(flutter使用)量産を可能にしたかも。
