自分の場合、Pythonはテキスト処理が優秀なのでよく使っています。
遅いですが、Perlよりかは書きやすいし、すぐ作れてしまうので重宝します。
(遅くてもCythonを使えば何とか速くはなります)
なので、当サイトのPythonはテキスト処理がメインになります。
前置きはこの辺にして、
まず、色々とPythonを使ってプログラムを書く前に汎用的なプログラムを作成していきます。
最初はどのような汎用性を持ったものなのかは分かってはいないのですが、
コードを書き続けるにつれて「これ欲しいな」と思うモジュールが一つや二つあると思います。
そのような中で自分が最も使う汎用プログラムを紹介します。
最初なのでプロジェクトの作成からやっていきます。
プロジェクトの作成
では、プロジェクトを新しく作っていきます!
一番初めの記事「Python | はじめに」でVSCodeをインストールしてPythonが使える状態にしてもらったと思うので、そこから始めます。
まず、ワークスペースであるフォルダを作成しましょう。
何処でもいいので、「CodeAnalyzer」というフォルダを新規作成します。
このフォルダ名なのは、最終的にGrep検索やC/C++などのコードを解析するツールを作るつもりなのでこれにしました。
下の画像の左上の「ファイル(F)」から「フォルダーを開く…」をクリックして先ほど作成したフォルダ「CodeAnalyzer」を選んでください。
以下の画像で「CODEANALYZER」というフォルダを今開いていることが確認できると思います。
フォルダを反映出来たら次はワークスペースファイルを作成します。
以下の画像の「ファイル(F)」から「名前を付けてワークスペースを保存…」をクリックします。
名前は「code_analyzer_workspace.code-workspace」にでもして下さい。
ワークスペースファイルを作成できたら、次はパッケージを作成します。
Pythonの場合、「ライブラリ」、「パッケージ」、「モジュール」と規模に合わせてファイル群の呼び方が変わります。
基本的に個々のファイルを「モジュール」としているので、その上のパッケージを作成するということです。
名前は、「pgming_package」としてフォルダを作成してください。
これで準備は完了です!
ソースコード
パッケージを作成した後に、モジュールを作成します。
筆者の場合は、C/C++の名残があるのでstdafx.hに代わる「fwdef.py」なるものを作っています。
これは「Forward Define(前方宣言)」のコードが書かれているものです。
これは全てのモジュールが読み込むコアの役目を持っています。
正直みんなどういう風に作っているのかいまいち分かっていません。。。
まあ、Pythonはササっとツールを作ることに使われるので大規模なシステムの運用はしない感じがします。(経験がないだけかもしれません)
色々とインポートしていますが、後で必要になるものなのでfwdef.pyで取り込んでいます。
また、冒頭にsubprocessについてのコードを書いていますが、これはバグを矯正するものなのでsubprocessをインポートするならこれが必須になります。(今でもまだバグはあります)
fwdef.pyでは関数ネイキッドデコレータという関数の詳細を表示するデバッグ用のデコレータを実装しています。
最初に必要になるものというのはこのくらいでしょうか。。
次に今回の目玉である汎用プログラムを追加します。
以下のように「fwmodule_general.py」として作成してください。
fwmodule_general.pyでは、カウンタクラスが実装されています。
インスタンスを生成してからcountメソッドを呼び出すごとにカウントして、それ自体はその都度結果を返すようにはしていますが、まとめて結果を得られるようにresultメソッドもあります。
足し算から平方根まで様々なカウント方法ができます。
また、冒頭に色々とコードを書いていますが、これはVSCodeにおけるカレントディレクトリを可変制御するために、少々複雑な感じになっています。
要するに、“何処からでも読み込めますし実行できますよ”ということです。
読み込む対象は、release.pyとfwdef.pyなのですが、
このrelease.pyはexe化するためのフラグ管理を担っています。
リリースするときはこれをTrueにするのですが、今はデバッグモードでやっているのでFalseのままで問題ありません。
以下がコードです↓
# exe化フラグ
flag = False
# リリース用のインポートを行わなければパスが定まらずexeが正常に起動しない。
# デバッグ用は読み込み元プログラムでも読み込み先プログラムでも実行可能なルートパス可変制御を施している。
pipインストール
ここで待ってください。
このままでは実行してもライブラリがないと言ってエラーを吐いてしまいます。
from tqdm.autonotebook import tqdm # Jupyter Notebook 対応
の行でtqdmが元々ないので読み込めていません。
なので、pipを使ってPythonのライブラリをインストールします。
コマンドプロンプトで以下のコマンドでtqdmをインストールしてください。
pip install tqdm
できない場合は、そもそも環境変数にPythonへのパスが通っていないので追加してからPCを再起動すればできます。
コントロールパネル > システムとセキュリティ > システム
で「システムの詳細設定」をクリック。
すると以下の画面が出るので「環境変数」をクリック。
以下の画面でPathを選択して「編集」をクリックします。
その中で以下のように二つのパスがあると思いますので、
それがあるかどうかを確認して、なかったら追加してください。
デバッグ実行
では、実行してみましょう!
fwmodule_general.pyが画面上に出ていることを確認して上のメニューバーにある「実行(R)」から「デバッグの開始(F5)」をクリックして、以下の「Python File」をクリックすればデバッグが実行されます。
以下のようにターミナルで実行結果が出ていれば成功です。
そのまま「Enter」を押して終了するか上の「□」をクリックするか「Shift + F5」キーで終了できます。
また、以下のようにfwdef.pyでも実行できるので試してみて下さい。
デコレートした関数の詳細が表示されます。
構成ファイル
前述のようにいちいち「Python File」を選んで実行するのは億劫なので、構成ファイルを作成して「F5」キーですぐ実行という形にしてみましょう。
そのために、「launch.json」というファイルを作成することになります。
これは以下の手順で自動で作成できます。
1.上のメニューバーにある「実行(R)」から「構成の追加…」をクリック
2.「Python File」をクリック
3.以下の画像のように「.vscode」フォルダ内に「launch.json」が作成されます
このまま先ほどのようにfwmodule_general.pyを画面に出して「F5」キーを押すとすぐ実行できるようになります。
お疲れさまでした。
まとめ
Pythonの文法とか手取り足取り教えますよ~というものではありませんが、
かなり実践に特化したことをこれからもご紹介していきます。
リファクタリングとか設計自体素人かもしれませんが、手ごろなツールを作る上でお役に立てればなと思います。
次回はコンソール向けのプログレスモジュールを紹介します。