パソコンは趣味や仕事で欠かせない存在ですが、単純作業に追われて時間を浪費していると感じたことはありませんか?
「自動化」といえばPythonが有名ですが、「せっかくPythonを学んだのに、具体的なツール作成方法がわからない」という方は案外多いはず。
でもご安心ください。本ブログを読めば、学んだ知識を生かして自分に役立つツールを作れるようになります。
もちろん、これからPythonを始めようとする方にとっても参考になる内容となっていますので、Pythonを使って便利なツールを作りたいと思っている方は、是非本ブログを活用してください。
はじめに
本ブログの目的と概要
本ブログの目的は、趣味や仕事で日々行っているパソコン上の単純作業を、効率化/自動化するためのツール作成をサポートすることです。
もう少し詳しく解説すると、Pythonの基本的な文法はある程度理解しているものの、自作ツールの作り方がいまいち分からない方や、日常の作業効率化/自動化するためにPythonの勉強を始めようとしている方に向けて、自作ツール作成に関する具体的な手順と事例を学んでいただき、実践的なスキルを身に付けていただくことを目指しています。
本ブログで使用するツールの動作環境
本ブログで作成するツールは、開発環境と実行環境をUSBにインストールし、任意のWindows11 PCに挿して使用したり、あるいはUSBの内容をまるごとPCにコピーして使用する運用スタイルを想定しています。
必要なライブラリや開発ツールは自作ツールの内容によって異なるため、必要なタイミングで随時紹介しますが、全てに共通するのは以下の内容です。
動作するOS | Windows11 |
---|---|
開発言語 | Python 3.12.x |
開発ツール | Visual Studio Code (通称 VSCode) |
読者に期待するスキルセット
本ブログに掲載している内容は、以下のスキルセットを持っていることを想定しています。プログラミングの経験は不要ですが、基本的なPythonの文法を知っていて、パソコンが一通り操作できることが必要です。
- 基本的なWindowsパソコンの操作ができる
- メモ帳やテキストエディタを用いてテキストファイルが作成できる
- バッチファイルについて浅く理解している
- コマンドプロンプトから簡単なコマンドを実行できる
- Pythonの文法に関する基礎知識がある(変数、データ型、基本的な制御構文など)
Pythonのプログラムはコマンドプロンプトから実行することが一般的であるため、本ブログで公開するツールにおいてもコマンドプロンプトからの実行を前提としています。
また、ツールをエクスプローラーからダブルクリックで実行したり、低時刻に自動実行させるために、テキストエディタの操作やバッチファイルの知識が必要となります。
「自作ツールで欠かせないPythonの基礎知識をざっくり解説」の記事で基本的な文法を紹介しています。もしPython文法に不安のある方は、おさらいの意味を含めてさっと目を通していただければと思います。
なぜPythonが効率化/自動化に適しているのか
Pythonはそのシンプルな文法と便利なライブラリが数多く用意されており、効率化/自動化に適したプログラミング言語です。
- シンプルで読みやすい文法
Pythonはコードが直感的で読みやすく、初心者でも学びやすい言語です。 - 豊富なライブラリ
データ処理や自動化に役立つライブラリ(例:Pandas、Openpyxl、PyAutoGUIなど)が充実しており、効率的に開発が進められます。 - クロスプラットフォーム
Windows、Mac、Linuxなど、多様な環境で動作するため、企業の様々なITインフラに対応可能です。
ツール開発/実行環境
WinPythonのインストール
Pythonを使ってツールの作成や実行を行うために、Python開発環境を整える必要があります。
Pythonの開発環境にはいくつかの種類がありますが、本ブログではWinPythonを使用します。
WinPythonは、Windows環境に最適化されたポータブルな開発・実行環境であり、次の特徴があります。
- 圧縮ファイルを解凍するだけでPythonの開発・実行環境が構築できる
- Windowsや既存のアプリに影響を及ぼさない
- USBにコピーして他のPC上で動作させることができる
- フォルダ丸ごとコピーするだけで環境の複製やバックアップがおこなえる
- Pythonの複数バージョンを共存することが可能で、かつ同時に利用できる
WpnPythonの具体的なインストール方法と使い方は次の記事をご覧ください。
VSCodeのインストール方法と使い方
WinPython で作成した開発・実行環境に VSCodeをインストールします。詳細は次の記事をご覧ください。
更に詳しい使い方については@ITの「第1回 Visual Studio Codeでデバッグをするための基礎知識」が参考になります。
ツールの作り方
ツールの自作は、自分のニーズにぴったり合ったものを作れるだけでなく、プログラミングスキルを向上させる絶好の機会でもあります。ここでは、ツールを作るための基本的なステップを紹介します。
作りたいものを明確にする
まずは何を作りたいのかを明確にしましょう。これはツールの目的や機能を具体的にするための重要なステップです。次のような質問を自分に投げかけてみてください
- 何を解決したいのか?
- どのような機能が必要か?
- 誰が使うのか?
例:
「複数のCSVファイルを一つにまとめるツールを作りたい。」
仕様を決める
次に、ツールの仕様を具体的に決めます。仕様とは、ツールが持つべき機能や動作の詳細です。これには以下が含まれます。
- 入力と出力の形式
- 必須機能とオプション機能
- インターフェースのデザイン(CLI、GUI、Webアプリなどの画面デザイン)
<参考例>
入力形式:複数のCSVファイル
出力形式:結合された一つのCSVファイル
必須機能:2ファイル目以降のヘッダは破棄する
マウスのドラッグ&ドロップでファイル選択できる
オプション機能:
「2ファイル目以降のヘッダは破棄しない」スイッチを付ける
文字コードをUTF-8から Shift-JIS に変換できる
画面デザイン:
画面項目ごとの役割や動作をまとめた一覧表を作成する方法も効果的です。
実現方法を検討する
仕様が決まったら、それをどのように実現するかを考えます。ここでは、使用するライブラリやツールを選定します。また、必要に応じて実現可能性や技術的な課題、解決策も検討します。
<参考例>
使用ライブラリ:Tkinter(GUI作成用)、pandas(CSVの読み込み/書き出し)
技術的課題 :巨大なCSVを結合する場合、メモリに収まらない。
課題への対策 :結合対象のCSVが巨大な場合は仕方ないが、CSVの結合はメモリで行わず、
1ファイルづつ読み込んで出力ファイルにAppendすることで対応する。
プログラムの構成を考える
次に、プログラム全体の構成を考えます。
- 全体をいくつのモジュールに分けるのか
- 各モジュールの従属関係(どのモジュールがどのモジュールを呼ぶか)はどうするのか
- 各モジュールにはどのような処理を行わせるのか
- 各モジュールにはどのような名前を付けるのか
例えば、次のような図を書くと具体的なイメージがつかみやすくなります。
Pythonはモジュールごとにファイルを分けることが多いので、モジュール=ファイルとして考えておきましょう。
個々の処理手順を考える
最後に、各機能の具体的な処理手順を考えます。
GUIを持つツールの場合は、画面の操作ごとに実行する処理を考えていきます。処理手順を図式化する方法としてフローチャートが有名ですが、単純に処理ごとに箱を書いていくだけでも構いません。
修正しやすい自作ツール作成ポイント
処理手順を単純に上から下へと並べていってもプログラムは作成できますが、やりたい処理が増えるほどプログラムが複雑になり、プログラムの修正や再利用が難しくなります。
そこで、この章では後々の修正や機能追加、再利用を考慮したプログラム作成のポイントを解説します。
本ブログで紹介する自作ツールは、これらのポイントを考慮して作成しています。ソースコードを読み解く上での参考にして頂ければと思います。
画面と処理の分離
自作ツールを含む一般的なアプリケーションは、利用者が画面を操作することで、その操作に応じた処理が実行され、結果を画面やファイルに出力します。
この一連の流れを1つの長いプログラムとして作成することも可能ですが、プログラムが複雑に絡み合って理解が難しくなると同時に、画面や処理に手を加えたり、別ツールに一部流用することが困難になります。
この対策には、プログラムを適切な単位(例えば機能ごと)に分割して作成することが有効であり、画面と処理を分けるというアプローチがよく行われます。
本ブログで紹介するツールは、原則的に画面と処理を分けて個別に作成することを推奨し、また実践しています。
画面と処理の連携
画面と処理を分けて個別に作成した場合、両者を連携させて1つのツールに仕上げる必要があります。画面と処理の連携にはいろいろな方法がありますが、本ブログでは単純に画面操作ごとに必要なクラスやメソッドを呼び出す方法を採用します。
部品化と再利用
例えば、「複数のCSVファイルを読み込んで1つのCSVファイルに結合する」自作ツールと、「EXCELファイルを読み込んでCSVファイルに変換する」自作ツールを考えた場合、「CSVを出力する」という機能は流用できそうです。
流用できそうな機能を思いついたら、流用しやすいように部品化します。ここでいう部品化とは、クラス化や関数化という意味です。
関数化する場合、第一引数は出力ファイル名、第二引数はCSVを格納したDataFrame、第三引数は文字コード・・・という具合に流用を意識した関数の仕様を考え、その通りの関数を作成します。
最初は難しいかも知れませんが、共通化を意識してプログラムを作成していくことで、だんだんコツが飲み込めてくると思います。
共通化は自分の資産を増やし、後々の自作ツールの生産性をアップしたり、機能追加や変更などのメンテナンスに非常に役立つので、是非心がけてプログラムを作成してください。
本ブログで使っているGUIライブラリ
本ブログで紹介する自作ツールは、次のライブラリを使っています。ライブラリの概要や使い方については個別の記事があるので、そちらをご覧ください。
用途 | ライブラリ名 | 関連記事 |
---|---|---|
UI作成 | Tkinter | Tkinterによる画面作成のポイントをサンプル付きで紹介 |
UI作成 | CustomTkinter | CustomTkinterによる画面作成のポイントをサンプル付きで紹介 |
自作ツール向けに簡単な画面がサクッと作れる自作ライブラリを「【CustomTkinter】テキスト記述でGUIを簡単作成するライブラリを紹介!」の記事で紹介しています。テキストボックスやコンボボックスなどのウィジェットをテキストファイルに記述するだけの手軽さなので、興味のある方はご覧ください。
自作ツールに欠かせないPythonライブラリの基礎知識
カテゴリ | 概要 | 記事へのURL |
---|---|---|
ファイル/フォルダ | ファイル/フォルダのパス分解、結合 | ファイルパス/フォルダパス操作 |
ファイル/フォルダ | 指定フォルダからファイル一覧取得 | ファイル名一覧の取得 |
ファイル/フォルダ | フォルダコピー、移動、削除 | フォルダ操作 |
データベース | SQLiteへの接続、検索、更新、削除 | SQLite基礎 |
データベース | SQLite のメタデータ取得方法 | SQLite応用 |
データベース | pandasからのSQLite の利用 | SQLite実用 |
スクレイピング | スクレイピングが簡単になる自作クラスの紹介 | 便利なスクレイピング自作クラス |
可視化 | Matplotlibの使い方 | グラフ作成のポイント |
可視化 | グラフ描画が簡単になる自作クラスの紹介 | 便利なグラフ描画自作クラス |
本ブログで紹介する自作ツール一覧
本ブログで公開を予定している自作ツールの一覧です。優先順位と難易度を考慮して、随時作成していきます。
ツール | 概要 | ユースケース | 優先順位 |
---|---|---|---|
プログラム・ランチャー | メニュー一覧から任意のプログラムを起動 | 自作ツールを簡単に呼び出して使えるようにしたい場合 | 1 |
スクレイピングツール | ウェブから自動的にデータを収集 | 定期的にウェブデータを収集・更新したい場合 | 1 |
データ可視化ツール | データをグラフで可視化 | データ分析結果を視覚的に示したい場合 | 1 |
CSV結合ツール | 複数のCSVファイルを1つのCSVファイルに結合 | データ統合・分析のために複数のCSVをまとめたい場合 | 2 |
CSV分割ツール | 大きなCSVファイルを複数の小さいCSVファイルに分割 | 大容量データを扱いやすくするために分割したい場合 | 5 |
フォルダZip圧縮ツール | フォルダを丸ごとZip圧縮(AES暗号化対応) | フォルダを丸ごとZip圧縮したい場合 | 5 |
Parquet⇔CSV相互変換ツール | ParquetとCSVのフォルダ一括相互変換 | フォルダ内ファイルをParquetとCSVの間で相互変換したい場合 | |
複数のCSVを1つのブックにまとめる | 複数のCSVファイルを1つのExcelブックにまとめる | 複数のCSVデータを一つのExcelブックで管理したい場合 | 2 |
複数のCSVを1つのシートにまとめる | 複数のCSVファイルを1つのExcelシートに統合 | データ統合・分析のためにCSVを1つのシートで管理したい場合 | 2 |
Excelの各シートをCSVに変換 | Excelファイルの各シートを個別のCSVファイルに変換 | 大量のExcelデータを個別に処理したい場合 | 5 |
YouTubeダウンロードツール | YouTube動画をダウンロード | オフラインでYouTube動画を視聴したい場合 | 2 |
画像背景切り抜きツール | 画像から背景を自動的に切り抜く | 商品画像やプロフィール写真の背景を削除したい場合 | 2 |
CSV仕分けツール | CSVデータを特定の条件で分類して別ファイルに仕分け | 条件に基づいてデータを整理・仕分けしたい場合 | 3 |
画像色合い調整ツール | 画像の色合いを自動的に調整 | 画像の見栄えを改善するために色合いを調整したい場合 | 3 |
メール自動送信ツール | 指定の条件でメールを自動送信 | 定期連絡や通知を自動化したい場合 | 4 |
PDF結合ツール | 複数のPDFを結合する | PDFを分割し、回転したり不要なページを削除したい場合 | 4 |
PDF分割ツール | 1つのPDFをページ単位に分割する | 複数のPDFを1つのPDFに結合したい場合 | 4 |
フォルダコピーツール | フォルダとその中身をコピー | データバックアップやフォルダ構造を複製したい場合 | 6 |
ファイル名の一括変更ツール | 複数のファイル名を一括で変更 | 大量のファイル名を効率的に変更したい場合 | 6 |
動画⇔画像変換ツール | 動画→画像+音声を抽出、画像+音声⇒動画を作成 | 動画を画像+音声に分解、画像処理後に動画に戻したい場合 | 6 |
動画音声入れ替えツール | 動画の音声を、別の音声で入れ替えする | 質の良い動画と音声を組み合わせたり、BGMを置き換えたい場合 | 6 |
動画切り出し・結合ツール | 動画の指定範囲の切り出し、複数動画の結合を行う | 動画の一部を切り出し、1つの動画にまとめたい場合 | 6 |
動画の超解像化ツール | 解像度が低い動画をAIによって高解像度化する | 古いビデオカメラの動画の画質を向上させたい場合 | 6 |
コード変換ツール | 文字コード、改行コードの変換 | 文字コードや改行コードを指定したものに変換したい場合 | 7 |
OCRツール | 画像やPDFからテキストを抽出 | 紙資料やスキャンデータをテキスト化したい場合 | 7 |
まとめ
本ブログの目的は、Pythonを使った実用ツールを自作できるようにサポートすることです。
ただし、基本的なWindowsの操作ができて、コマンドプロンプトの概要とPythonの基本文法について、ある程度の知識がある方を対象にしています。
本記事ではそのための最初の一歩として、次の内容を取り上げました。
- 自作ツール開発・実行環境の作り方
- 自作ツールの作り方
- 修正しやすい自作ツール作成ポイント
- 本ブログで紹介する自作ツール一覧
自作ツールは作成次第、自作ツール一覧に記事のリンクを張っていきます。
また、各記事で紹介する自作ツールは、読者のプログラミングの勉強材料となること、読者自身の用途に合わせたカスタマイズがしやすいことを心がけ、プログラムの読みやすさに重点を置きながら、ある程度使えるレベルのものをソースコードと簡単な解説付きで公開し行く予定です。
もし本ブログが参考になると思われたなら、ブックマークに登録していただければ幸いです。
コメント