GitHub Copilotでラピッド開発

GitHub CopilotがGPT4oベースになって高速化&賢くなったというのでお試ししてみた。

PythonでFlaskアプリの基本形を開発してみる。

Visual Studio Codeだとプラグインを入れてコード補完やインライン・チャットベースでの支援が受けられて、シームレスに開発プロセスにAIを導入出来る。
今回はインラインのチャットで雛形を作ってみる(適当なpyファイル作って、エディタでCtrl+iするとコパイと簡単に話してすぐにコード反映出来る)

プロンプト

sqlalchemyのAccountモデルを作って、モデルは主キーid、文字列型usernameとpassword、日時型のcreatedとupdatedを持つ

createdはレコードが作成された時間を設定するようにして

すべてのカラムはnotnullにして

こうなった

お願いするたびimportが湧いたけど少し修正で行ける感じ

次はコントローラ側

プロンプト

Flaskでログイン画面を作って
sqlalchemyでmysqlに接続して、Accountモデルのusernameが変数usernameに、passwordが変数passwordに一致するか確認する処理を追加
AccountのpasswordはMD5処理されている

やっぱり多少修正すれば使えるね

プロンプト一行で10行以上のコードが出来上がって、直して欲しいところを追加で入れていけば基本形完成。 素人だと生成されたコードの意味がわからずエラー起こしたりするし、エラー処理とかは無いから程よくCopilotにお願いするか、手書きで追加するかは必要だけど、定型処理を毎度書くかどっかからコピペするとかよりは効率良い。

リファクタ機能があるから、そっちでお願いすると多少きれいにしてくれる。

モデルのコードをリファクタしてもらうと

重複importを綺麗にしてくれた

コントローラ側も綺麗にしてもらおう

結構になったね。
 DB接続を使うところでベタ書きだったDB接続情報がグローバルに持っていかれて全体で使い回せる構成、更に環境変数から取ろうとして、それでも無ければベタ値になってる、サーバレスとかで使いやすい形。 ベタ値は開発環境用とかで使ったり。 初心者コードがべスプラに近づいてる。
 更にMD5弱いからbcrypt使うようにしてくれて、セッションもクローズしてくれてる。
 けど、try中にreturnがあるからこのときはクローズしない? と思ったら、中でreturnしてもfinallyは実行されるっていう、今更の気付き、Copilot恐ろしい子! 今まで、DB処理部分だけtryでくくってDBに関する処理だけキャッチして、残りは次って書いてたよ・・・

ちなみに、テストコード作ってとかもしてくれる。
逆に既存コードを説明してってのもしてくれるので、引き継ぎとかされてない謎コードメンテのときとかに結構お役立ち。

対象にもよるけど最低でも2~3割早くなる、簡易ツールとかなら倍単位で早くなる感じ。 テストコードでパターンを書くとかいう手間が省けるので、テストするまでもないかなぁみたいなところも数秒でテストコード出来てクオリティアップできそう。

(23)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

NEC IXルータで新しいAndroid(IKEv2)からのリモートアクセスVPNを受ける(不完全→一応成功)

 新しいAndroid OSはVPNの方法としてL2TPなどが削除されてIKEv2/IPSecじゃないと繋がらない。
 しかし、自宅のNEC IXルータではIKEv2/IPSecでのリモートアクセスに関する情報が見当たらないので一旦諦めて、WiFi APとして使ってたTP-LinkルータにOpen VPNサーバ機能あったから、IXからOpenVPNトラフィックをTP-Linkに通して通信なんて言う事をしていたけど、やっぱりルータもスマホも標準機能で済ませたいので、自宅のNEC IX2235ルータで設定に挑戦した。

続きを読む

(941)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

Python – pywin32でOutlook整理

outlookのメールボックスがゴミだらけになってるけど標準の検索やフィルタ機能で削除するのは結構痒いところに手が届かなかったりするのでPython利用で削除してみた。

まず、outlookを制御する場合、Win32 COMを経由して制御することになり、Windows版Pythonインストール時に入れられるpywin32ライブラリでコレが出来る。

import win32com

pywin32にはWindowsの色々にアクセス出来るけど今回はCOMだけなのでコレで。

outlookにアクセスする基本形は

outlookがアプリケーションアクセス用で、ネットでさらったコードだとDispatchを使ってたけど、今回は処理をする時にイベント処理が必要なのでWithEventsを使ってる。 mapiはメールボックスとかの各種情報にアクセスするネームスペース。

この辺までは大体既存の情報検索とMSのドキュメントですんなり行ったんだけど、completeの所がちょいと手間取った。 AdvancedSearchしてすぐにsearchにアクセスしても、その先はoutlookなので実態じゃなくてoutlookのインスタンスで検索が終わってないと0件だったり、件数があっても処理してる間にどんどん増えていったりするので、検索が完了するまで待機する必要がある(AdvancedSearchは結果を返してるわけじゃなく、AdvancedSearchを開始してソコへの繋ぎを即座に返している)
 で、MSのVBA Learnとかを見るとAdvancedSearchが完了するとAdvancedSearchCompleteイベントが発生するよ、って言うのはあったけど、その時のハンドラをPythonからアクセスするのがイマイチ良くわからず、VBAサンプルだとApplication_AdvancedSearchCompleteとか書いてたけど、どうやってアクセスするんだろと。 で、色々なCOMアクセスのサンプルとかを漁っていった結果、多分こうじゃないかな?と色々な名称を書いていった結果・・・

コレが正解だった、global使ってるのは格好悪いけどハンドラインスタンスにアクセスする方法が良くわからずだったのでコレで妥協。 importの下でcomplete = Falseでcompleteを定義してグローバルアクセスしてる。

ネーミングルールがわかればまぁ後は簡単ですね、Onイベント名と言うメソッドを持ったハンドラー用クラスを作ってWithEventsの第二引数に入れてやればOKと言う簡単な答えだった。 でも、ネット探してもAdvancedSearchComplete使ってるコードがなかったんで案外手間取った、そんなわけでここにナレッジとして記載。

なお、大抵連続処理してるとOLEエラーとか色々な例外が出て途中で止まるので叩く部分は例外処理してリトライとか付けないと放置で大量削除とかは出来ない。

(121)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

avif2png ー AVIF形式画像をPNG形式に変換するアプリ Windows版

最近増えてきたAVIF形式を従来のPNGに変換するWindowsツールです。 インストール不要、完全フリー、広告無しです。

DL

最低限の機能だけ実装してあるので以下の通り確認して下さい。

ZIPファイルの中にavif2png.exeがあります、変換したいファイルをドラッグして実行すると自動で変換します。

対応するファイルはAVIFファイルを含むZipアーカイブと、直接のAVIFファイルで複数のファイルの一括処理に対応します。

変換後のファイル名は元のファイル名の最後に.pngが付いたPNG画像です。 ※既存のファイルは有無を言わさず上書きされます

機能要望、バグレポートなどはコメント欄からどうぞ。 興味のある広告を踏む支援や、Amazonギフトのカンパ歓迎します。 コメント欄は自動表示では無いのでギフトコードなど投げ込んで貰ってもOKです。

(747)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

Windows環境でVENVなPythonを実行するバッチ

Windows環境でvenvを使ったPythonプログラムを直接起動したかったのでバッチを記述。

Pythonプロジェクトディレクトリベースだと・・・

activateはcallで実行する。 普通に実行するとactivateが終わる(venvを抜ける)まで次に遷移しないので。 callすれば次のpythonコマンドはvenv内で実行される。

(1092)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

Python3での並列処理実装について

 最近は専らPythonがマイブーム、シンプルで書きやすく、色々な環境で動かせて、パワー不足ならCythonを使ったり他言語でモジュール化して組み合わせたりと簡単に出来ます。 最近ではPCパワーがあるので余程ヘビーなことじゃなければPythonオンリーでこなせるし、ちょっとした事なら並列化対応も出来ます。 で、今回は並列実装の話を書いておきます。

続きを読む

(504)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

Windows10で「バッテリ切れの動作」を「何もしない」に変更する方法

 Windows10でバッテリ動作時にバッテリ切れになると自動でスリープか休止状態かシャットダウンになっちゃう動作。 電源設定上ではバッテリ切れレベルは3%までしか下げられず、バッテリ動作時には「何もしない」が選べないんだけど、Lenovo ThinkPadのVantageでバッテリのリセット時にもこれが動いちゃって上手くリセットできなくなっていた。

続きを読む

(1213)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ