タロットリーディングのアプリを作成(したのはGemini)

自分専用のタロットリーディングアプリがほしい 以前、ゲーム作家の米光一成氏の講座に参加したとき、タロットカードのウェブアプリケーションをつくってくれたエンジニアの人がいた。そのときの講座内容は、米光先生作のカード(大アルカナのみ22枚)を手本に、受講生それぞれが自分なりのテーマでタロットカードをつくるというもの。そこで各自が作成したカードも、画像つきでひけるようにしてくれたのだ。講座が終わってからもけっこう使っていたのだが、リンク切れになってしまった。 自分用に、シンプルなタロットリーディングのウェブアプリケーションがほしい。ただカードを1枚開いて、キーワードを表示してくれるだけでいい。すきな枚数、重複なしでカードが尽きるまで並べたい。 こういう動きのあるウェブアプリケーションもGeminiに聞きながらつくれるかもしれない。尋ねてみると「ボタンを押したらなにか動作が起こるしくみ」を構築するには、このサイトをつくるために使ったHugoとは違い、動的なものをつくるためのプログラミング言語を選ばなくてはいけないようだ。方法はいくつもあるみたいだけど、動的なしくみを動かせて、つくった後でファイルの中身を見て勉強するのもしやすそうなPythonでつくることにした。 動きの設計 つくりかたはよくわからないが、手順や動きを言葉で説明するのは得意だ。というわけで、動作の要件を伝えた。 準備 大アルカナ小アルカナあわせて78枚のタロットカードの画像(裏は柄、表がそれぞれの絵のカード/重複なし/カードそれぞれに意味のテキストデータが付随している)を用意する。 実際の動き 画面上に「大アルカナ小アルカナあわせて78枚」もしくは「大アルカナのみ22枚」のカードの山(デッキという)が現れる。いずれかを画面上でクリックして選ぶ。次の画面へ。 画面上に「シャッフル」ボタンが現れる。ボタンをクリックすると、画面上で象徴的な画面(動かなくてよい。心理的にシャッフルしたと納得できるような画像)が表示される。その画像をクリックして次に進む。 画面上に「カードを引く」ボタンが現れる。ボタンをクリックすると、選んだデッキからカードが1枚表示され(ランダム)、カードの下に、カードに紐づいた意味が表示される。そのさらに下に「もう一枚カードを引く」ボタンと「終わる」ボタンが表示される。 同じ画面上で「もう一枚カードを引く」ボタンをクリックすると、1枚目に出たカードの下にもう1枚カードが表示され(ランダム/重複なし)、カードの下に、カードに紐づいた意味が表示される。そのさらに下に「もう一枚カードを引く」ボタンと「終わる」ボタンが表示される。 「終わる」を押すまで、選んだデッキ内のカードの枚数(78枚、もしくは22枚)が尽きるまで、カードがランダム/重複なしで表示される。 追加の条件 正位置のみ採用、逆位置はなし。 代表的な意味(キーワード)のみ記載する(Geminiが拾ってくれた)。 カードの画像はウィキメディア・コモンズから、すでにパブリックドメインになっているパメラ・コールマン・スミスのライダー=ウェイト版を使用する(これは結局、手動でDL)。 複数のPC、iPhoneから使えるようにしたい。 ダークモードでもライトモードでも見えるようにしたい。 「実際の動き」のうち「開いたカードはそのままに、残りのデッキから別のカードを開く」という部分はGeminiによると「履歴管理」という操作になるようだ。カード全体からどれを抜いたかを記憶して、残りから選ぶ、ということだね。そういう言い方をするのか。 どうやって、なにでつくる? Geminiによると、ウェブアプリケーションをつくるとき、通常は「裏側の処理(Pythonなど)」と「画面の見た目(HTML/CSS/JavaScriptなど)」を別々につくる必要があるとのこと(なるほど、動かすためのルールの部分をPythonでつくるのかな?)。 切り分けると、次のようになるらしい。 Pythonがやること=裏側の処理:「78枚のカードからランダムに1枚選ぶ」「過去に引いたカードを記憶しておく」といった、頭脳にあたる計算やルールの処理。 HTML/CSSがやること=画面の見た目:「選ばれたカードの文字を画面の真ん中に、白い四角の枠線をつけて表示する」といった、目に見えるデザインの処理。 でもこれを一からつくるのは初心者にはハードルが高い。それはそうだね。そこで、「Streamlit」という「Pythonライブラリ」を採用した(のだってさ、Geminiがね)。 ……なるほ、ど? あれ? Streamlitは「Pythonでウェブアプリケーションを構築できるフレームワーク」という説明をどこかで見たのだけど、ライブラリとフレームワークってどう違うんだろう。 ライブラリ:特定の便利な機能が詰まった、使い回せる部品の詰め合わせ(道具箱)。ゼロからプログラムを書くと大変な処理(「ランダムにカードを選ぶ」「画面にボタンを表示する」など)を、ほかのプログラマがすでに作成してパッケージ化してくれている。 フレームワーク:アプリケーションの土台や骨組み、開発全体のルール(テンプレート、設計図)。 Streamlitは「ライブラリ」に分類されてはいるが、画面全体の動きを制御してくれるので、「フレームワークに近い性質を持ったライブラリ」といえるらしい。 Streamlitを使うことで「画面の見た目」から「裏側の判定処理」まで、すべてPythonだけで一括で記述できる。Pythonのコードを上から下へ実行するだけで裏側で勝手にウェブ画面を構築する「レール」を用意してくれているので、作成者がウェブのしくみ(HTMLやサーバーの通信など)を意識せずにアプリケーションを完成させることができる。 うん。なんとなくわかった(としよう)。 PythonとStreamlitをインストール Mac miniにPythonは入っていたから、Streamlitをインストールした。途中で「メールアドレスいれてよ」っていってくるけど無視していい(ターミナルで勧誘するのやめてよ)。 Geminiの作業は早い。ためしに3枚くらいのカードでささっと動作を確認し、おかしな挙動を修正して(するのはGemini)、「大アルカナだけ」「小アルカナも追加」と段階的にカードを増やしてテスト。うーん、すごい。なんて簡単にできるんだ。部品をつくってくれた人ありがとう。 最後にカード裏面画像と全カード表面の画像を用意して、番号をつけ直してimagesフォルダにまとめる。ダークモード・ライトモードをきりかえると文字が消えてしまうところがあったり、表示された画像が枠とずれていたりセンタリングにならなかったり、小さな問題を修正してもらい、完成! どこからでも使えるよう、サーバーにデータを置く 自分のMac miniというローカル環境で動きは確認できたけれど、まだほかのPCやiPhoneでは動かない。どこからでも動かせるようにしたいなら、動的なしくみを動かせるサーバーにデータを置かないといけないようだ。ふむ。「サーバーにデータを置く(公開する)」ことをデプロイ(Deploy:展開する)というのだな。 サイトを公開するときに使った「Cloudflare Pages」は基本的には静的なデータしか扱えないみたいなので、今回は「Streamlit Community Cloud」にアカウントをつくった。 そして、GitHub(このサイトを公開するためにも使っている)のリポジトリに、タロットリーディングアプリケーションのデータをプッシュ。これをStreamlit Community Cloudと連携し、アプリをデプロイした。 サーバーに公開したとはいえ、リポジトリ自体は非公開だからアプリ自体も非公開。サインインした自分だけが使えるものになった。 ほしいものはつくることができた、けれど おお! 恐るべきはやさでできあがった。動きも軽くていい感じだ。「カードを1枚ひきたい」「余計な解釈はなしで、絵とキーワードだけほしい」「追加ですきなだけカードをひきたい(この次どうなる?とかこれに対処するには?とか自分で決める)」という、要望に応えてくれる。 正直に言えば「自分でつくった」という感じはあんまりない。Pythonライブラリは便利だが、これに頼っているだけでは、自分ではよくわかっていないままかもしれない。動くことはわかったから、書類の中身を見て勉強することにしたい。 ただ、そもそも「どういう動きをさせるか」、その条件なんかもあらかじめきちんと意図して組み立てができていないと、こんなにスムーズには完成しないみたい。 そもそも、普通はこういったアプリケーションの開発は、しくみを考える人と、製品として動くものをつくる人と、外観をきれいにする人は別なのかもしれない(よく知らないのだが)。零細企業のかなしさで、なんでも自分でやろうとしてしまうけれど。 とりあえず、次は自分のオリジナルタロットのアプリケーションをつくってみようと思う。

June 30, 2026 · akio

自然とはなんじゃろな

まあまあの田舎で育ったので、家の周辺はもちろん緑で覆われていた。山、田んぼ、畑、草むら、庭、生垣、庭木、花壇。 でも、それを「自然」と思ったことはあまりない。 自然が豊かでいいですね。そう誰かが言うときの「自然」てなんだろう。緑ならいいのか? 植林された山、手入れされた田んぼに畑、庭の諸々はもちろん草むらだってそれなりに手が入っている。長年にわたり人間が住み暮らした村落なのだから当然だ。 「手つかずの自然」という言い方があるので、これらは「手がついた自然」なのかもしれない。しかし、そもそも「自然」とは「人の手が加わっていないもの」なのだとしたら、人の目に見えるところに、少なくとも普通の「まあまあ田舎」くらいのところには、そういうものはないのではないか? 初めて飛行機に乗ったときに、雲の上を見て「わあ、ここには人がいない」と思った。どこにでも人間の痕跡がある(ありそう)な地上とは違って。でも、そこには水蒸気と塵以外には、なにもないんだな。 空の上に、人の知らない自然があれば。 そういう想像をしてみる。

June 29, 2026 · akio

ツールの使いわけ

考えていることの置き場所にするために、Hugoでこのブログを構築した。 この数年は、日々のメモをCosense(旧Scrapbox…こっちの名前のほうがわかりやすかった)の非公開プロジェクトでとっている。ブラウザでどのパソコンからもiPhoneからも書き込めるし、たくさんページがあっても重くない。記事同士でリンクを貼ったり(張ったり?)タグをつけたりしなくても、コトバで探せて検索しやすい。内容は主に、日録とか、占いやカードリーディングの結果とか、書いてる記事のメモとかだ。ブラウザで検索した内容を書き写したりURLを張ったりすることもある。Evernoteも使っていたけど、あれってあんまり開いて後から見たりしなかった。 でもCosenseにはフォルダという考え方がないから、ページがすごく増えてきて、ちょっとどうしようかなあという感じだった。 それで、Obsidianだ。Macbook AirとiPhoneにいれていたけれど、あんまりうまく使えてなかった。どっちかというと、クローズドで管理したい内容を書く(小話とか)ためにしか使っていなかった。Cosenseから、そして以前momonoteに書いたものや、もっと前のテキストデータとかを、だんだん整理していこうと思っている。 いろんな人の、ツールの使い方を見るのがおもしろい。まとまったものにしようという人が多いと思うけれど、わたしはただ、自分の書いたものを捨てられない貧乏性なだけだけど。

June 28, 2026 · akio

技術のまえに言葉が難しい

「Hugo」というのは、「Go言語で書かれた静的サイトジェネレーター」なのだそうである。初心者なので、こういう言い回しをされるとちょっと困る。 つまり、 Hugo:「Go言語」で書かれた、「静的サイトジェネレーター」という、コマンドラインインターフェース(文字列で入力された指示を受け取るしくみ)で動くアプリケーション であると。 「Go言語」はGoogleが開発したプログラミング言語で、人間にとってはシンプル(人間にとって。文法が少なく、書き方がある程度きまっていて、例外ルールが少ない)で、高速(コンピュータにとって。大量の書類を素早く処理できる)であることが特徴とのこと。 「コマンドライン」というのも、CLI(コマンド〈指示〉+ライン〈文字列〉+インターフェイス〈それを人に対して表示して、コンピュータに動作させるためのしくみ〉)をのものを指すこともある、というので曲者だ。 難しいな、専門用語。操作するのときにはなんとなくわかっていても、作業ログをとろうとしたときに「なにをなにでどうしたんだっけ?」となることがある。 言葉の意味や定義でひっかかってしまうのは、自分で取材記事を書くときに気をつけてきたせいもある。自分でよく理解しないまま、相手が「こう言ってたから」と書いてしまうと、やっぱり読み手には伝わってしまう(相手がその分野に詳しい人だったり、きちんと読む人だったりしたらなおさら)。よく上司に「自分でよくわからないまま書いただろう」と指摘された。だから、最終的には「コマンドラインで操作する」と書くのだとしても、「なにをなにでどうしたか」は頭の中で分解できていないといけないと思ってやっている。

June 27, 2026 · akio

いい日も悪い日もあるよ

6/25は出張の予定だった。でも、行けなかった。地震で、新幹線が止まってしまったから。 ホームで待っていても発車の気配はない。何時に出る? ていうかまだ乗る新幹線は到着してもいない。前の便がずっと停車している。だめだ、これは、たぶんうごかないやつだ。 タッチの差。あのとき、自分の乗る予定のじゃなかったけど飛び乗っておけば。始発で行く予定にしておけば。前日から行っておけば。 失敗した、と考えることをやめられない。可能性はゼロではなかったのだから、予想はできたはずだと思ってしまう。 でも、地震とか台風とか、私にはどうにもできないことだ。自然のことだから、なにか起きることはある。どうにもできないことまで自分の責任だと思いはじめたら、もうなにもできない。 自分の力ではどうにもならないことまで背負わない。 できることはした。メールで連絡して、まずそちらは無事かどうか、問題はないか、時間はずらしても大丈夫かを聞いた。今日は時間がずれるともう対応できないというので、電話して、改めて調整してくれるように頼み、すぐに必要な項目だけメールでコメントと写真を用意してもらいたいとお願いした。 急激に疲れたので、オアゾのスタバでちょっといい方のラテを飲んだ。そして会社に戻ってから、フォローのためにメールでもリスケとコメント・写真の依頼をしておいた。 できることはした。した、よね? した、だろ。

June 26, 2026 · akio

大事な言葉を書いておく

ずっと、頭の中にあるフレーズを書いておこう。大事な言葉だ。 I’m not yours. You are not mine. これは、どこかで読んで知ったものじゃない。いつの間にか、自分の中にあった。十数年も前から、いろんな手帳に書いてある。 結局、自分がどういうふうに“ここ”にいるのか。それを支えているのはこのことなのだと思う。 家族も、友達も、会社も、親密な関係を築くに至った誰かも、どの人も私を所有していないし、私も誰も所有しない。

June 25, 2026 · akio

紙のメモ、デジタルのメモ

物理的な、ノートやメモ帳、手帳の類がすきだ。使いこなしているという意味ではなく、断片を記録するための「もの」として、集めて手元に置いている。 デジタルのメモツール、メモアプリもすきだ。できれば挙動は軽く、複数台のMacでもiPhoneでもシームレスに書き込めるもの。 以前はmomonoteというのを使っていたけれど、更新されなくなり、iPhoneで使えなくなった。エクスポートはあまり使い勝手がよくなかったけれど、とにかく動きが軽く、タグや画像添付にも対応していて見た目もよかったから残念。編集、保存のボタンがあったので、いきなり上書きしてしまったりすることがないのもよかった。 Google keepもいいけど、これはメモを開くともう編集画面になってどんどん上書きされてしまう。Macの純正メモもそうか。とにかく書いておくにはよくても、「ぜんぶをこれで」とはならない。一呼吸、というちょっとしたことだけど、好みが出るところのような気がする。 note(.comのほう)には手帳の民とかデジタルメモツールの民がいっぱいいる。Instagramとかにもいる。特に革の手帳やバインダーの派閥の人は一大勢力で、手書きのおしゃれな文字、装飾、イラストがすごい。何個も所有していて使い分けとか。 いいね、とは思うのだが、あんなふうにしたいとか思うともうそれがプレッシャーだ。誰かに見せるのではない、自分がメモを残せたらそれでいいんだけども。 2年前からNOLTYの手帳を使いはじめた。小さめの、ポケットカジュアル4というタイプ。手帳は、月ごとに、月間・週間・メモがセットになっているタイプがいい。月間だけ前に集まってるタイプは使わない。ビニルのカバーだけど、軽いし汚れないしちょうどいい。カードとか挟めるスリットもあるし。 とはいえ、スケジュール管理はGoogleカレンダーだし、読書のメモはGoogle Keepだ。手帳に書くのは予定でもその日の仕事でもなく、なにか考えたこととか感情とか文句とか、毎月の自分の財産の状況とか、おいしかったものとか、そのくらい。 狭いスペースにちまちま、しかもささっと書こうとすると、どうしても字が汚くなって読めない。 きれいな字を書こうと思って最近やっているのは、一筆箋に万年筆とかで何か書くということ。その日あったこととか、ただのひとりごととか、頭の中で母に向かって喋っていることとか。 誰かに渡すものではないが、下書きでもない。そうすると、ちょっといい用紙のせいか手帳より意識的に書くし、長すぎないから、最後まできれいな字を保てる(気がする)。これを二つに折って週間のメモページに貼る。落ち着いて紙に向かえば、わたしだってきれいに書けるのだよ。

June 25, 2026 · akio

便利さをとるのか、学びをとるのか

iPhoneじゃなくて普通にブラウザ上でもGitHubの中で更新できるんだな。それはそうか。iPhoneアプリだけってことはないか。うーん。 基本は「履歴保持済みの倉庫」だけど、ここで作業もしたいだろ、てそりゃ思うよね。 この記事はChromeのGitHubで書いた。便利だ。 便利はいいけれど、常に「便利なんだから黙ってそれを使っておけばいい」とは思わない。なぜだろう? そんなこと考えない人もいるんだろうけど、なんだか少し引っかかってしまう。ちょっとバックヤードをのぞいただけで、自分になにかすごいことができるわけではないことは知っている。でも、「この後ろってどうなってんのかな?」と思うし、その作業を知らないところで誰かあるいは何かがかわりにやってくれているならそれを知りたい。 勉強だって、思っているけど、……いや、単なる趣味かな。

June 24, 2026 · akio

達成感とは大事なものだ

ローカルで確認しながらつくったウェブサイトを、GitHubのリポジトリとCloudflare Pagesを接続して公開までできた。 途中でGeminiが言ってる画面にならなくて接続先をまちがってたりしたけども、なんとかできたー! 最後に、hugo.tomlの中のURLを修正したら、個別のページもちゃんと開けるように。 おお、達成感。 今はウェブ上にいろいろプラットホームが整えられて、アカウントをつくれば簡単に写真も文章も載せられる。でも、いちいち「トップページに画像をつけると見られやすいですよ!」「人気のタグをつけると検索で見つけられやすいですよ!」とか言ってきて、もういいのやめてよ、ってなってしまう。うんざり。 それに、誰かがゼロからつくったものに乗っかるだけなのも、なんだか嫌だなと思うようになっていた。 ……まあ、とはいえGeminiに聞きながらだし、静的サイトジェネレーターとかGitHubとかをつかっているのでまったくゼロからではないが。 こんなシステムをつくった人たちはすごいよね。アイデアもすごいし、実現したのもすごい。だからせめて、わたしも手を動かして、「どこが合ってる/間違ってる」「簡単そうに見えてそんなことない」といったことを体感したいと思ったのだ。 体感て大事だよね。体感するからこその達成感。 それから、Gemini(生成AI)の出力した内容をを「いちいちチェックする」ということもちゃんとやろうと思った。 おしゃべりの文字面だけだとそれらしい感じで納得させられてしまうけれど、実作業がともなうと、途端に「あなたの言ったとおりにならないよ?」ってことがいっぱいあると気がつく。もちろん自分が入力間違えたり違うファイルに書きこんでたりする場合もあるが、AIが間違っていることもけっこうある。スクリーンショットを見せたりエラーメッセージを示したりして「あなたが想定したようになってない。実際はこうなってるよ?」とつっこんだら、Geminiが「ああ、わたしの勘違いでした!」とか言ってくる。相談しながら進めていく感じ。 「AIにやらせておけばいい」「人間より間違いが少ない」なんてことは言えないんだな、と“わかる”。 どうしても書きたいことがあるわけではないが、誰にも邪魔されずに書ける場所をつくることができたかな。 っていうのを真夜中に書いて更新したつもりだけど、反映されない! なんでだ。と思ったらもしかして、日付か? えっ、真夜中はまだ前日のカウントなの? 明日に続く。 時間の設定ってどうなってるんだっけ? トップページが寂しいからなにか増やしたい。 iPhoneから更新するの、どうやる? 一日に2つ以上の記事はつくれないの? 個別記事の中に別の記事のリンクを貼るにはどうする?

June 24, 2026 · akio

さらなるテスト、iPhoneから

なんと、GitHubは作業場じゃないのに、iPhoneのGitHubアプリでは記事の作成ができるのだってさ。便利だねえ。 ⁠hugo.tomlにtimeZone = "Asia/Tokyo"を入れて日本時間の設定をした(日本の時間で、日付が変わったら次の日!)。 GitHubのiPhoneアプリから投稿するために、iPhoneのショートカットアプリで投稿のためのテンプレートの設定をした。 個別の記事の中に自分のサイトの別記事へのリンクを貼るときはrelrefというショートコードを使うとのこと。過去記事はこちらみたいな感じ。 ■ 大事なことがひとつ! iPhoneで更新した内容はMac miniもMacBook Airも知らないから、帰ったときに必ずプルすること!

June 24, 2026 · akio