MYmemo

思い立ってやってみるけど、長続きしない。せめて記録しておく。

termuxで株価を取得する方法をChatGPTとGeminiに検討してもらったが…

以前、株価取引履歴を記録していくツール作りについて記事にしました。

mymemo8.hatenablog.com

その後もチビチビと改良を続けています。

で、次に欲しい機能は何か?

そりゃ、現在の株価と過去売買した履歴を比較したくなります。

なので現在の株価を表示できるようにしたい!に取り組んで見ました。



GPT先生に加えてbard先生

以前記事にした通り、世はgoogle先生(ググる=googleで検索する、はもう死語?)からGPT先生の時代。

mymemo8.hatenablog.com

そしてこの度GPT先生に加え、googleのbard先生(改めGemini先生?)にも教えを請うことにしました。2人に聞くことでより最適な解を導けないかと思った次第でございます。

ちなみにGemini先生 or bard先生どちらと呼べば良いか?について筆者はよくわかっておりません。ブラウザからgoogleが提供する対話機能を使わせてもらっているのですが、等の本人に聞きますと以下のようなやり取りになります。

私:「あなたはまだbardですか?」

??:「はい、私はまだBardです。Google AIによって開発された大規模言語モデルです。 ...」

私:「Geminiではないのですか?」

??:「私はBardとGeminiの両方の機能を備えています。Geminiは、Google AIが開発した新しいマルチモーダル生成AIモデルです。テキスト、画像、音声、動画などの様々なデータを入力として、テキストや画像を生成することができます。Bardは、Geminiの機能に加えて、質問応答や文書生成などのタスクを実行することができます。つまり、私はGeminiのすべての機能に加えて、Bardの機能も使用することができます。...」


こんな感じ。あなたは何者?の問いには「bardです」と応えるのですが、対話インターフェース上はGeminiと表示されている.... どういうこと?

「bard改めGemini!」みたいな記事がいっぱい出てますがこの記事においては当の本人がbardだと言い張っているので、bardとすることにします。

IT業界の雄に薫陶を受けてメキメキ頭角を表してきている超優秀人材の教えを請わない手はない。

Pythonで株価を取得する方法は?

まずは、どんな手段があるか聞いてみました。

GPT先生

yfinanceとかpandas_datareaderを使うのが一般的ですね。YahooファイナンスAPIを使う手もあります。



bard先生

YahooファイナンスAPIを使う、Alpha Vantage APIを使う、その他のAPIを使う、スクレイピングなどでしょうね。

ま、だいたい同じ提案ですな。選択肢の中ではyfinanceライブラリを使う手が一番手軽そうだと感じました。では導入方法は??

GPT先生 & bard先生

pip install yfinanceを実行すべし!

そりゃそうだ。


利用環境

いつもと変わりませんがすべてスマホ完結です

mymemo8.hatenablog.com




yfinanceがインストールできない...

しかしそうは問屋がおろさないもので、pip install yfinanceはエラーになってしまう。以下実際のやりとりをかなり脚色しておりますこと御理解の上でお読みください。


:「エラーになるけど?」
GPT先生:「aptのupdateとかupgradeとかしてる?」


:「もちろんやってる」
bard先生:「pandas入ってる?依存関係あるよ?pip install pandasだよ。」


:「入ってないんだが、pip install pandasも通らないんだけど、どうすればいい?」
:「あ、言い忘れてたんだが、今使っている環境はtermux何だけど、関係ある?」
GPT先生:「termuxにpandasいれるならpkg install python-pandasじゃね?」


:「おぉ、pandasは入ったわ。しかし、依然としてyfinanceはインストールできないんだけど、どうしたらいい?」
bard先生:「依存関係ありそうなのはlibxml2、libxslt、clang、libxml2-dev、libxslt-devとかかな。片っ端からインストールしてみてよ。」


:「アカンな、そもそもどれも最新やわ。lxml関連でエラー出てんだけど?」
GPT先生:「pkg install lxmlは?」


:「それ実行すると、termuxが固まってしまい、その後再起動してしまうんだが...」

...この後、両先生方との対話上で解決策を見いだせませんでした。多分私の聞き方が悪いんだと思うんですけど、libxml2、libxslt、clang、libxml2-dev、libxslt-devなどをインストールして対処せよ、の堂々巡りから抜け出せず仕舞い。


アカンわ、お手上げだ。ネット検索でも有効そうな記事に行き着かないし...

まて...

pandasインストールに成功したあのおまじないをつけてlxmlをインストールしたら?

まさかね、そんな訳ないよね?

pkg install python-lxml  
pip install yfinance

:「ウソやん、インストールできた」
先生方:「おめでとうございま〜す」
:「.....。」



GPT先生とbard先生、どっちが良かった?

使ったことある方、無い方ともにわかっていただけると思いますが、両先生方のAnswerは決して前述の如く軽いノリではありませんので、悪しからず。
私が勝手に面白おかしく書いていることを差し引いて読んでいただくようお願いいたします。

両先生共に、どの問いにも懇切丁寧に全力で答えてくれます。手抜きはしません。

が、個人的にはGPT先生の方が良かったかな、って感想です。

今回のやり取りにおいては、両先生とも大体同じような内容で答えてくれてましてそこに優劣は感じ取れませんでした。(というか、私のレベルが低すぎて、回答内容の差を吟味できないというのが正しい)

GPT先生の方がいいなと思った理由は以下2点です。

  1. GPT先生は即答に近い。bard先生は結構考え込んだ後に回答が返ってくる感じで、スピーディーに会話してる感が無い。
  2. GPT先生の方がキャッチボールしてる感がある。bard先生は時折シナリオチャットボットチックな回答が返ってくるときがあった。


特に2点目には科学的根拠全くなし。あくまで今回のケースに限って話半分に聞いていただければと思います。

bard先生に関してはこの記事を執筆してる間にもバージョンアップした的な記事が出てたりしてるので、もっかい話題変えて比べてみたら、見方が変わるかもしれません。

何はともあれ、無事yfinanceを使って株価を取得できそうなので、ありがたく活用させていただきます。

ChatGPTに聞いて解決すること、しないこと(人間の退化が止まらない?)

久しぶりにExcel VBAにふれる機会がありました。

ちょっとした作業を自動化しようかな?と思ったのがきっかけだったのですが、書き始めると、for文すら構文を思い出せない体たらく...悲しい。

そういえば、ChatGPTを活用したことなかったし、一回トライしてみようか?これからはGoogle先生ではなくてAI先生に教えを請う時代だろうしね。



GPT3.5に聞いてみた

時代はもう半歩(0.5)ほど進んで4.0なのだが、手元で軽く使えるのが3.5だったので今回の先生はGPT3.5です。

4.0はもっと凄いんだろう...。

まずは躓いたfor文の書き方を聞きます。

VBAでFor文の書き方を教えてください

GPTVBAのFor文の基本的な構文は...
GPT:例えば...


このくらい朝飯前だよな。
ご丁寧にサンプルコードまで示してくれる。


ではコレはどうだろう?

超恥ずかしいことに、ガチで何が悪いのか気づかなかった。

Dim target_range As Range
Set target_rang = ThisWorkbook.Sheets("table_key").Range("B2:B26")

For Each cell In target_range
     Dim aa As Variant
     aa = cell.Offset(0, 1).Value
     MsgBox "test"
Next cell  

エラーが味気なさ過ぎて、皆目検討つかず…
(何行目でエラー、とか言ってくれたら私でもわかるんやけど…)

このスクリプト自体のをチャットに貼り付けて、エラーはどこですか?と聞くと

GPT: 定義されているのがtarget_rangeなのに対してsetで使おうとしているのがtarget_rangだからスペルミス、target_rangeに修正することを提案します。

初歩的過ぎて恥ずかしいが…素晴らしい!ドンピシャだ。AIの将来性を感じずにはいられない。

調子にのってこんなことを聞いてみた…


: Pythonでnumpyを使いたい
GPT:これを実行してください
pip install numpy

: エラーになりました
GPT : エラーの内容や詳細を教えていただけますか?
: ※エラーメッセージをコピペ
GPT : ※対処方法を提示

: ダメですな。turmuxでnumpyを使えるようにしたいのですが?
GPT : termuxの場合は以下を実行する必要があります、
pkg install numpy

: すげ~うまく行ったわ!


注意 : 実際のやり取りはもっと長いです。今回わかりやすくするために大分内容を省きました。実際同じ質問をGPTにしていただくと、全く異なる内容のコメントが返ってくるはずです。

やり取りを通じて感じたのは、より良い回答を引き出す為には、前提条件、現状説明、欲しい回答の方向性などを明確に伝えるのがコツ。

これは人との対話とも同じですね。本当にヒトに近づきつつある。




全智全能のいう訳では無いが…

: いつ頃まで勉強していましたか?
GPT : 私は2022年1月までのデータで訓練されています。その後の情報や変更には対応していません。


コレも人間と同じで、訓練期間外に起きた事情は関知しない。当たり前ですな。

得意分野はやはりプログラミングとか、情報処理系なんでしょう。Webには情報が溢れてるから学習コンテンツには事欠かないからな〜。一般教養、言語といった類も凄いんだろう。

逆にいうと、それ以外はトレーニングしないとダメなんだろう。

それはそうと、対話能力は凄いと感じます。

多くの企業が問い合わせ窓口の省人化策として入れてるチャットボットとは雲泥の差。アレは使い物にならん...。 「AIが解決します!」となってますが、私の経験上役に立ったた試しがなく、結局問い合わせ窓口に電話して超長く待たされる流れになる...。 なにせシナリオボットは問いに対して用意されたシナリオからしか回答の選択肢を持たない。そのシナリオは大抵の場合少なすぎるので、一瞬で袋小路にハマる。

しかし、今最先端の大規模言語モデルは結構まともな会話が成り立つ。チャットボットなんか簡単に取って代わられるだろう(コストによるか?)




雑感

小さい頃、文字(漢字とか英単語とか)を習得するためにノートとペンで修練を積みました。

しかしながら、大人になった今、割と簡単な漢字が書けなくなってきました。

書くよりキーボード打ち込んだ方が早いんだもん。ムズい漢字も勝手に変換してくれるし。


更にはキーボード打たなくとも音声でテキスト入力なんかできるようになってきた。WEB会議なんか、対話内容が勝手に文字起こしされて字幕スーパーみたく表示される有り様。テクノロジーの進化はすげーわ。


でGPTみたいなものまで登場した。「これはヒトが考えること」に取って代わられてしまう未来があるんだろうか?って想像を膨らませる方も多いと思います。私も思います。


が、現状レベルであれば喜ばしいことだとも思うのです。

世の中人手不足が叫ばれます。色んな分野で習熟された方々が引退していく中、そのような方に聞けば一発で解決できたようなことが、難しくなってきます。習熟者は減り、残存の習熟者の前には案件が列を成すので、なかなか私の番が回ってこない。問い合わせ窓口に電話してもなかなか繋がらなくなったのもコレが一因…だったりして(ちがうかな…)

そんなところにGPTみたいなものが1台いて、習熟者のノウハウを学習し続けて蓄積していく。こんな仕組みの出現が望まれてるんじゃ?


とりあえず自分が簡単に退化しないように勉強続けないとな。

以上です。



Pixel6aの後継機はPixcel8aでいいのか?

2年ごとにスマホを買い替える。これが私の贅沢です。SIMフリーで毎回毎回引き継ぎとか面倒では?と嫁が眉を顰めるのですが、私はこの作業が楽しかったりする。。

おおよそ2年ほど前、「Pixcel4aの後継機を検討する」記事を書きました。結果手元にはPixcel6aがあります。

Pixcelシリーズの偶数a付きを連続して使ってきました。2年経過が見えてきた今、次の偶数a付き(=Pixcel8a)の話題が聞こえて来ています。

順当にいくなら私の次世代機は8aであるべき、なのですが本当にそれで良いのだろうか?

もう一回おさらい

もう一度過去に使ってきたスマホのスペック比較です。大体2年に1回ペースで機種を変更してきました。

機種 Pixel6a Pixel 4a moto G6 SAMURAI REI
価格 54,000 42,900 忘れた 忘れた
外部ディスプレイ X X X X
ジェスチャー X X X
カメラ起動 X
指紋認証 画面上 背面 前面 前面
画面size 6.1 5.8 5.7 5.2
解像度 2340x1080 2160x1080 1920x1080
高さmm 152 144 154 146
幅mm 71.8 69.4 72.3 71.5
厚さmm 8.9 8.2 8.3 7.2
重量g 178 143 163 136
電池mA 3,140 3,000 2,800
メモリ 6GB 3GB 2GB
strage 128 128GB 32GB 32GB
プロセッサ TensorM2 730G* SDM450 MT6753
clocspeed 2.8GHz 2.2GHz 1.8GHz 1.3HHz
カメラ万画素 1200 1220 1200 1300

※クロックスピードはコアによって差異があるようで、コア全数そのスピードでは無いかも。



Pixel6aの不満

買い替えるなら今不満なところは解消したいですよね。具体的には以下です。

デカイ(実は、むしろ小型?)

前述の表を見ていただくとわかっていただけるかと思いますが、替えるたびに大型化してきています。6aを検討したとき、4aより大きくしたいと思う旨を書きましたが、実際は4aくらいがちょうどよかったな、と思う今日このごろ。私は小柄な方で、手も小さい。4aのサイズでギリギリ片手操作できてた感じだったのですが、6aはちょっとキツイ。誤って落としてしまうことも何度かありました。実用性を考えると4aくらいのサイズにしたほうが良いかと考えるようになりました。


後述しますが、昨今はどのメーカも大型化する傾向にあるらしく、実は6.1インチでも2024年現在では小さい方らしい。



重い(実は普通くらい?)

大型化とセットで重い。さらに後述する発熱を回避するため厚めのケースに収めてるんで、合計すると200gくらいになる。ただ、買った当初は片手操作がしんどかったのですが、慣れなのか、筋力ついたのか?最近はあまり気にならなくてなった。軽くなるに越したことはないけれども、最悪同レベルくらいで我慢できるかな。



超熱い(発熱)

6aを買った時に一番公開したのがコレ。焼けるように熱い。Pixelとググると「熱い」ってキーワードが多数出てくるはずです。最近はコレも慣れ?とファームアップによる改善?で当初ほど気にはならなくなったのですが、次世代機は果たして?



usb映像出力できない

AndroidOSを開発するグーグルが開発する端末なのに何故か搭載されないUSB Alternate Mode。Pixel6a発売前時点でさえいくつかのメーカーは既に搭載していたこの機能は今現在のPixelでも何故か搭載されない。8aで搭載されるのは望み薄に思える。せっかく持ち運びディスプレイ買ったのに…


ディスプレイ指紋は……

コレも当初は全然駄目だった。Pixel6aの指紋認証は発売当時の先端をいくディスプレイ上に指を載せる認識方式。当時はスマホの背面や側面に認識専用センサーをつけるのが主流だったので、この機能が搭載されると知ったときはロマンを感じました。しかしいざ使ってみると、全然私の指を受けすけない…しゃーないパスワード打つか、みたいな使えない機能に。
前述発熱問題もあって、ちょっと厚めの保護シートを貼ってる、っても精度落としてる理由だと思いますが、この機能は不具合も多かったらしく、ファームアップで大分改善した気がします。さらにいつの間か、「画面保護シートモード」なるモードを選択できるようになってました。これをONにしているときは確かに認識に失敗しなくなりますが、これって要はある程度の誤差に目をつむるってというか、他人の指の認証許可率上げるってヤツでは…?セキュリティ的にどうなの?って思っちゃったり。


以上を踏まえて次を考えてみたいと思います。


Pixel 8aの予想スペックは?

ベースはPixel8となる、等既にリーク情報多数あり。概ね以下のようになるのでは?

機種 Pixel8a予想 Pixel6a Pixel 4a
価格 62,700 54,000 42,900
外部ディスプレイ X X X
ジェスチャー X X X
カメラ起動
指紋認証 画面上 画面上 背面
画面size 6.1 6.1 5.8
解像度 2340x1080 2340x1080 2160x1080
リフレッシュ 90Hz 60Hz 60Hz
高さmm 152 152 144
幅mm 72.6 71.8 69.4
厚さmm 8.9 8.9 8.2
重量g 187 178 143
電池mA 3,140 3,000
メモリ 6GB 3GB
strage 128 128GB
プロセッサ TensorG3 TensorM2 730G*
cquコア数 9 8 8
cpuアーキテクチャ arm64-v8a arm64-v8a
最大クロック 2.9GHz 2.8GHz 2.2GHz
カメラ万画素 1200 1220



対抗馬はないのか??

調べてると気になるのはPixel8の低評価が目立つこと。やっぱり熱いとか、ね。なんかワクワクしないんだよね〜。どうしようか、買い替えを見送るか?

他メーカーでワクワクするようなものはあるのだろうか?と調べて驚きました。デカイし、重いやつばかりじゃないですか?いつの間にこんな大型化路線に?めぼしいメーカーの比較的新しいスマホの大きさと重さは以下の通り。


メーカー 機種 size 重量 発売
OPPO Reno10Pro5G 6.7inch 185g 23年10月
OPPO Reno9A 6.4inch 183g 23年06月
Xiaomi Xiaomi 13T Pro 6.7inch 200g 23年12月
Xiaomi Redmi 12 5g 6.8inch 200g 23年10月
Nothing phone2 6.7inch 201g 23年07月
Sony Xperia 5 V 6.1inch 182g 23年10月
Sony Xperia 1 V 6.5inch 185g 23年06月
Sony Xperia 10 V 6.1inch 159g 23年07月
Motorola moto g53j 6.5inch 183g 23年06月
Motorola motog52j5g 6.8inch 203g 22年06月
Samsung A54 5G 6.4inch 201g 23年03月
Samsung A28 5G 5.8inch 168g 22年10月
ASUS Zenphone10 5.9inch 172g 23年10月


6inch超えは今じゃ普通なんですね。この中でいうと…

  • OPPOはデカイ…
  • Xiaomiはデカイし重い…
  • Nothingもデカイし重い
  • SonyXperiaのサイズ感はアリか?
  • Motorolaもデカイな…
  • Samsungは手頃なラインナップがあるか?
  • ASUSのZenphoneシリーズはいイイ感じか?


と超個人的な選択肢としてはSonySamsungASUSの3つ。このうちSamsungは過去使ったことがあるメーカー。個人的には可もなく不可もなくな記憶があるので、今回はちょっと除外させていただきます。

ということで、SonyASUSを対抗馬候補として考えていこうかと思います。Pixel8a発売までまだ時間があるのでこれから熟考して年内の買い替えを目指したいな〜、なんて思います。

ChromebookからTermuxにsshで接続する

Termuxを使ってプログラム組んでます。スマホでパパっとできるのでスキマ時間にちょうどいいです。手軽な反面難点もいくつか。最大の難点は何と言っても画面が小さい!私のスマホはPixcel6aです。6インチちょっと。ちょっと長い構文になると2行3行になってしまって読みづらい…。

となると、やはりPCの大きい画面使いたい。でもいちいちデータ転送すると同期取るの面倒。

なので、今回はChromebookからsshを使ってtermuxを操作してみました。

利用端末

私にはこれしかない。


Termux側の設定

まずopensshをインストールします。

$ pkg install openssh

sshサーバーの起動はsshd。コマンドを叩いても何も起きてないように見えるけれども、その後idと入力するとユーザー名の確認ができる。

$ sshd  
$ id  
uid=xxxxx(u0_xxxxx) gid=xxxxx(u0_xxxxx) ...

uidのところの()のなかのu0_...となっているところがログインidになります。あとログインパスワードも設定しておきます。下記のようにパスワードは2回打たされます。

$ passwd
New password  
Retype new password
New password was successfully set.

sshでtermuxに接続する

sshサーバーが起動されている状態でChromebookのターミナルからログインしてみます。と以下Chromebook側のターミナルです。今回ChromebookAndroidは同じルータ配下でWiFi接続されてます。

ログインにはAndroid側のIPアドレスが必要なので事前にifconfig等で調べておきましょう。ログインidとパスワードは前述の通り。idの後ろにipアドレスをつけることをお忘れなく。

$ ssh -p 8022 u0_xxxxx@192.168.0.24
u0_xxxxx's password:

上手くいけば、termuxを操作するときと同じようにターミナル操作できるはず。


sshを止めるには?

これでsshサーバーを止められます。外部からのログインはできなくなります。

pkill sshd  

やっぱり画面が大きいと、パソコン作業ってはかどりますね。

(Part2) Termux + Python Flask + sqliteで株取引記録ツールを作ってみた

ヤバいですね。前回記事からだいぶ時間が空いてしまった。前回記事時点から改良を加えたんで、それを記事にします。

mymemo8.hatenablog.com

アプリ概要おさらい

  • 使用端末:Pixel6a
  • Termuxでpython, Flaskを使用したWebアプリを制作する
  • アプリ上では過去の取引レコードを一覧表示し、キーワードで表示を絞ることができる。また、レコードを追加できる。
  • レコードはSqlite3を使ってデータベース化
  • editorはTermuxにインストールしたEmacs
  • CSSにはフレームワークのmilligramを使用
  • レコード検索を簡単にしたいのでjavascriptライブラリのlist.jsを使用


CSSをUIkitに変更

当初milligramを使いました。使いやすいし、きれいに整うのでとても良いのですが、この紫基調のデザインが個人的にしっくり来なくて…


他に軽く使えるフレームワークを検索したらUIkitに行き着きました。

getuikit.com

milligramより若干記述が面倒くさいですが私好みの色基調に整うし、カードコンポーネントなどの作成が容易なのでいいかな、と思いました。


銘柄ごとの詳細ページを追加

トップページの取引履歴表のなかの銘柄を触ると、その銘柄のみの取引履歴を見れるようにしました。銘柄名のページをレンダリングするようにし、sqlに格納されている取引履歴のうち、その銘柄名のみに絞ってselectされるようにしてます。

加えて、取引数を計算して、現在の保有株数を表示できるようにしました。ホントはスクレイピングで株価くらい取れればいいんですけど、それは次の開発要素とします。



取引の成果は?

初めてなので、安定して配当出してそうな銘柄を買ってみました。取りあえずコカ・コーラは前述画像のように2株買ってみました。

この半年位の間に買ったのは以下の銘柄です。それぞれ1株ないし2株くらいです。

Code Name 購入数
KO コカ・コーラ 2
NEE ネクステラ・エナジー 1
DOW ダウケミカル 1
PFE ファイザー 1
CSCO シスコ・システムズ 2
KHC クラフト・ハインツ 2
VZ ベライゾン・コミュニケーションズ 2
TSM 台湾セミコンダクター 1
SBUX スターバックス 1
SFL エスエフエル 2
INTC インテル 1

で、運用してみた結果、若干のマイナスで推移中。NEEが爆発的に下がったのが全体を引っ張ってしまった…。76ドルくらいで購入したあと、みるみるうちに46ドルくらいになり、ビビって手放してしまった。その後60ドル超までみるみるうちに回復。癪なので買い戻してしまった。これが今のところ最大損失(円換算すると大したことないけれども、やっぱり損失は嫌です。)

このNEEだけは得体知らないが、配当狙いのみで買ってしまった銘柄。前述の損失出したあと、再生可能エネルギーを中核事業にしてる企業だと、ググって知った。それくらいの信念しかないのに買っちゃったから、大きな変化におののいて手放しちゃったんだ。

他の銘柄研究はこれからやります。NEE以外は、ま、ボチボチでんなって感じ。何かオススメの銘柄があれば教えてください。半年くらい運用して、なんとなく雰囲気つかめてきたのて、もう少し投資額を上げて行こうかな。

Termuxでgitとgithubを使う

Termuxで書いたコードをgithubにpushするまでの一連の流れを勉強がてらメモしたので、記事にもしてみました。Termuxで、と題してはみたものの、Termuxだからといって特別なことはほぼ無い、と思います。


環境条件

私用のスマホPixcel6aにTermuxをインストールしています(Termuxへのgitのインストールは以下のみ。Termuxではsudoも不要です。インストール時のメモはこちら。

mymemo8.hatenablog.com

apt install git

あとpush先のgithub側の設定もお忘れなく。



Termux特有?エラー回避

これがTermuxのみで発生する内容なのか分からないのですが、もし以下のようなメッセージで次に進まない場合は....

fatal: detected dubious ownership in repository  


これを試してみてください。 projectまでの部分はリポジトリのパスなので、もちろんご自身の環境条件下でのパスを指定してください。ここで留意点なのですが、リポジトリまでのパスを例え誤入力してもエラーになりません。コマンドがエラーにならないのに再度引っかかる場合はパスの部分で誤打がないか確認してください。

git config --global --add safe.directory /storage/emulated/0/project



一連の流れを順にやってみる

例えば以下のような作業フォルダがあったとします。「project」というフォルダ内に3つファイルが入っているだけの単純なものです。

project
├── main.py  
├── sub.py
└── readme.md

まずはprojectフォルダをリポジトリにするためにgit initを実行する。

$ git init  
Initialized empty Git repository in /project/.git/

うまく行っていれば、.gitができているハズ

project
├── main.py  
├── sub.py
├── readme.md
└── .git

これでとりあえずリポジトリができたことになる。続いて、ブランチも作ってみる。 ブランチ名は別にmainじゃなくても良い。git branchだけを実行するとブランチ一覧が表示される。

$ git branch -M main
$ git branch  
* main


ついでにgithubへのpushの準備もしておく。username/projectのところは適宜変更ください。

$ git remote add origin https://github.com/username/project.git


上記の中で、originはリモートリポジトリ名称で、別になんでもいい。この状態ではまだ何もaddしていないのでgit statusを実行すると。以下のようになるハズ。

$ git status  

On branch main  

No commits yet    

Untracked files:  
 main.py
 sub.py
 readme.py



すべてのファイルがUntracked filesに位置づけられている。ではまず、readme.mdのみをaddしてみます。

$ git add readme.md  
$ git status

On branch main

No commits yet

Changes to be committed:
 new file:   readme.md

Untracked files:
 main.py
 sub.py


Changes to be committedのところに新規ファイルとしてreadme.mdが移動してきているのがわかります。普通はやらないとは思いますが、一旦readmeだけでコミットしてみます。

git commit -m "First commit"                 
[main (root-commit) 6c0e5a4] First commit
 1 file changed, 3 insertions(+)
 create mode 100644 readme.md


この状態でステータスを見てみましょう。

$ git status
On branch master

Untracked files:
 main.py
 sub.py


readme.mdが消えました。コミット済のファイル一覧はgit showで確認できる。

$ git show --name-only
commit d9ab44ca591cc729edbe62c2045cdfa651c04ac5 (HEAD -> main)  
Author: username
 <xxxxxxxxx@yahoo.co.jp>
Date:   Sat Sep 30 12:10:00 2023 +0900

First commit

readme.md


最後にgithubリポジトリに押し込んでみます。ユーザー名称とパスワードは事前に確認しておくこと。

$ git push -u origin main                    
Username for 'https://github.com': username
Password for 'https://username@github.com':
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 249 bytes | 31.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/username/project.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.



Statusを確認するとこんな感じになると思います。githubリポジトリとローカルのリポジトリup to dateだそうです。

$ git status
On branch main
Your branch is up to date with 'origin/main'.

Untracked files:
 main.py
 sub.py

nothing added to commit but untracked files present (use "git add" to track)


さすがにコミットされているのがreadmeだけだとあまりにもさみしいので、main.pyもプッシュまで持っていきましよう。まずはaddします。

$ git add main.py
$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
 new file:   main.py

Untracked files:
 sub.py


コミットします。

$ git commit -m "2nd commit"
[main dd81e33] upload main
 1 file changed, 39 insertions(+)
 create mode 100644 main.py


んで、プッシュします。

$ git push -u origin main
Username for 'https://github.com': username
Password for 'https://username@github.com':
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 690 bytes | 345.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/username/project.git
   6c0e5a4..dd81e33  main -> main
branch 'main' set up to track 'origin/main'.

TermuxでPython fletは動かせるか?

同じような話題ばかりで恐縮ですが、これまた、やってみた記事。

前回もFlaskつかってツールを作ってみました的なことを書きましたが、そもそもやりたいことというのは、

mymemo8.hatenablog.com

しかし、これが中々手頃な手段がありません。ちゃんとしたものを作りたければ、ちゃんとしたPCにちゃんとした環境を整えないといけませんよね。

そもそも手持ちのChromebookにはAndroid Studioはインストール不可、

mymemo8.hatenablog.com

この時点でWebアプリくらいしか作れないハズ。ということで前回記事でFlask構築に取り組んだんですけど、これを作り込もうとするとFlaskのフレームワークの仕組みとPython、HTML、javascriptそれぞれそれなりに知っておく必要がありますよね。個々はそんなに難易度は高くなくても、チリも積もれば馬鹿にはできない障害になります。

もっと単純に完結できないだろうか?

そんな時fletというものを見つけました。




fletとは?

私が語らずとも記事はたくさんある。私がこれに惹かれたのは

  • 単一コード(Python)でGUIアプリが作れる
  • Javascriptを書かなくても動的なコンテンツが作れる(かな?)

Flet enables developers to easily build realtime web, mobile and desktop apps in Python. No frontend experience required.

flet.dev

これがTermuxで動かせたら最高じゃぁないですか!たぶん込み入った処理はできないんだと思いますけど、込み入ったことをやろうとも思ってませんし。私がやりたいことくらいは十分実現してくれるのでは?

中味はWebアプリらしいから、Termux上でも動くだろう。



Termux上で動かしてみた

最後にポートを指定しないとだめですが、localhost上で、とりあえずHellow Worldには成功。

import flet as ft
def main(page: ft.Page):
    t = ft.Text(value="Hello, world!", color="green")
    page.controls.append(t)
    page.update()
ft.app(target=main,view=ft.WEB_BROWSER,port=5000)