これからPythonやソフトウェアを作る過程を体系的に学びたい方向けの本を書きました
こんにちは。すうちです。
2024年になり1週間経ちました。皆様今年もよろしくお願い致します。
私事ですが、昨年末(ぎりぎり)に長年目標にしていた本を出版しました。
Kindle Unlimited会員の方は、無料で読めます。
今回は、本を書くに至った経緯とその概要に触れた話です。
ーーー
本を書いた経緯と自身の振り返り
IT業界に足を踏み入れた頃の自分を振り返ると、右も左もわからず勉強したり教わったこともなかなか理解できず、もがいていた日々を思い出します。
最初は仕事で思った結果が出ず「自分はエンジニアに向いてない」と感じたことは数え切れません。
IT技術の難しいところは、プログラムを覚えただけでは直接結果に結びつかないことだと個人的に思います。
プログラム以外にそれに付随する技術だったり、動作環境(パソコンやマイコン、サーバなど)も様々あり、さらに開発に利用するライブラリやツール、テストやデバッグに関する知識など多岐に渡る理解が求められます。
いま思えば昔の私は、目の前の物事(点)だけを意識して、その位置づけや個々のつながりまで理解してなかったと思います。
そんな私が少しだけ自信を持って仕事に取り組めるようになったのは3年を過ぎた頃でした。ある時、それまで断片的だった知識がつながって自分の中で消化でき、目の前でやっている事に楽しさを見出せた感覚がありました。
その頃に経験した点と点がつながる感覚を、あるテーマをもとに技術の背景やつながりも含めて体系的に書きたいと思ったのが、本書のきっかけです。
本のコンセプト
本書は、プログラム言語のPythonを使った開発過程を疑似体験できる構成になっています。
Pythonは本やネットを含めて多くの情報がありますが、プログラムの基礎や文法が分かっても、いざ自分が作りたいモノを作ろうとした場合は、また一段ハードルがあがります。
それは実際プログラム以外に作りたいモノに付随する技術の勉強が必要だったり、開発環境の構築やツールの使い方を学んだり、その過程で準備するさまざまな要素が含まれるからです。
そうなると、何から手をつけたら良いか途方にくれることもあるかもしれません(実際、新人の頃の私はそうでした…)。
本書では「PythonのGUIで動画・静止画編集ソフトを作る」お題に対して、Pythonの環境構築や文法、ライブラリの使い方をはじめ、仕様検討や設計、実装とテストまで一連の開発の流れを書いています。
本文は、はじめての方にも読みやすいように、できるだけ難しい用語は使わず、関連する技術のつながりや実際にプログラムを作るとき頭で考えたことをできるだけ言語化しました。
対象読者は、プログラム初心者の方やPythonの基礎を学んで次のステップに進みたい方を想定しています。
noteとの違い
主に加筆・修正した内容
本の内容は、2022にnoteに投稿した「PythonでGUIを作りたい Tkinterで作る画像編集ソフト」の話が元になっています(その他、今までnoteに投稿した一部の技術記事も…)。
しかし、当時は時間的な制約で表面的な話だけ書くにとどまった部分も多かったため、本書の目的に沿って大幅に加筆・修正しました。
追加した大枠は、noteでは書ききれなかった間の空白や結果に至る背景です。
たとえば、「なぜソフトウェア設計で内部構造を考えるのか?」「クラスのメソッドはどう割り当てるのか?」「どうして動画は並列処理が必要なのか?」「なぜ画像編集にPillowではなくNumpyを使うのか?」などです。
また、noteではテストの話は割愛しましたが、pytestやテストプログラムを使った単体・結合テストや処理時間を計測する性能テストの例を今回追加しています。
本書は技術書になりますが、断片的な情報の羅列ではなく、一連のソフトウェア開発の流れをストーリとしてイメージして頂ける構成を意識しました。
コードの見直し
ソースコードも大幅に見直しました。
note投稿時は(これも個人的な時間の制約で)中途半端な状態で終わっていたので、当初やりたかったことを全て盛り込みました。
例として、MVC(Model View Controller)モデルのModelクラスを継承して動画と静止画の実装を派生クラスに分けたり、動画の倍速再生は、Pythonの処理時間の制約で実質2倍速も難しい状況でしたが、FullHD 30fpsであれば3倍速程度まで行けるように実装を見直しました。
これらの試行錯誤した過程や具体的な実装(対策)も書いています。
また、ソースコードはレイアウトの都合で基本的に画像で取り込みました。コード全体や中身の詳細は、別途GitHubからダウンロードしたものを参照頂く前提で書いています(書籍本文にリンクあり)。
最後に
2022年にnoteに投稿した連載を終えて、本の構想を考えはじめたのが1年前です。そう考えると書籍化までかなり時間がかかってしまいました。
実際やってみた感想は、想像よりも5倍くらい大変でした…笑
個人的に試行錯誤した話は、また別の機会に書きたいと思います。
今回はじめて本を書いたこともあり、どこまで理想に近づけたかはわからない部分もありますが、(自分の中では)イメージに近い所まで何とか仕上げられたかなと思っています。
また、今回書籍化を実現できたのは、noteに自分のやりたいことを宣言したり、前述の投稿があってやり遂げることができました。その機会を与えてくれたnoteに感謝しています。
これから、Pythonやソフトウェアの開発過程を学びたい方に、本書が何かしら参考になれば幸いです。
最後まで読んで頂き、ありがとうございました。
PythonでGUIを作りたい
仕様検討から実装まではじめての動画・静止画編集ソフト