-
深すぎるネストはバグの温床!ガード節でシンプルにする条件分岐の書き方
この記事は、読みやすいコードを書くための実践ガイドシリーズの一つです。前回の記事「その名前、未来の自分を苦しめますよ?読みやすいコードを書くための命名規則入門」も併せてお読みいただくと、より理解が深まります。 こんにちは。今回は、コードの... -
その名前、未来の自分を苦しめますよ?読みやすいコードを書くための命名規則入門
この記事は、読みやすいコードを書くための実践ガイドシリーズの一つです。コードの品質を向上させるための基本的なテクニックを紹介していきます。 こんにちは。ソフトウェア開発において、私たちはコードを書く時間よりも、他人の(あるいは過去の自分の... -
PythonのsmtplibでEメールを送信する方法(Gmail対応版)
この記事では、Pythonの標準ライブラリであるsmtplibモジュールを使い、GmailなどのSMTPサーバー経由でEメールを送信するスクリプトの作成方法を解説します。スパムとして判定されないよう、適切にフォーマットされたメールを作成するemailモジュールも併... -
Pythonでアラーム音付きのシンプルなカウントダウンタイマーを作成する
この記事では、Pythonのtimeモジュールとsubprocessモジュールを使い、指定した秒数をカウントダウンし、終了時にアラーム音を鳴らすコマンドラインタイマーの作成方法を解説します。 1. プロジェクトの概要と準備 このスクリプトは、以下の2つの主要な機... -
Pythonのsubprocessモジュールで外部プログラムを実行する方法
この記事では、Pythonの標準ライブラリであるsubprocessモジュールを使い、Pythonスクリプトから外部のアプリケーション(電卓やメモ帳など)やコマンドを実行する方法について解説します。 subprocess.Popenによる非同期なプログラムの起動 subprocess.Po... -
Pythonのthreadingモジュールによるマルチスレッド処理入門
この記事では、Pythonのthreadingモジュールを使い、プログラム内で複数の処理を同時に(並行して)実行するためのマルチスレッド処理の基本について解説します。 シングルスレッドの問題点 通常のPythonプログラムは、書かれた順に一行ずつ処理を実行する... -
Pythonのdatetimeモジュール入門:日付と時間の操作
この記事では、Pythonで日付と時刻を扱うための標準ライブラリdatetimeモジュールの基本的な使い方を解説します。現在時刻の取得、特定の日時の表現、時間差の計算、そして日付と文字列の相互変換について説明します。 datetimeオブジェクト datetimeモジ... -
Pythonでコマンドラインストップウォッチを作成する
この記事では、Pythonのtimeモジュールを使い、ラップタイムも計測できるシンプルなコマンドラインベースのストップウォッチプログラムを作成する方法を解説します。 1. プログラムの設計 このストップウォッチは以下のロジックで動作します。 プログラム... -
Pythonのtimeモジュール入門:時間計測とプログラムの一時停止
この記事では、Pythonの標準ライブラリであるtimeモジュールを使い、プログラムの実行時間を計測したり、処理を一時的に停止させたりする基本的な方法について解説します。 time.time()関数:エポック秒の取得 time.time()関数は、エポックと呼ばれる基準... -
Pythonでコマンドライン天気予報ツールを作成する
この記事では、Pythonを使って、指定した地名の3日間の天気予報を取得し表示する簡単なコマンドラインツールを作成する方法を解説します。requestsモジュールで気象情報APIにアクセスし、返されたJSONデータを解析します。 1. 準備:必要なモジュールとAPI... -
PythonのjsonモジュールによるJSONデータの操作
JSON(JavaScript Object Notation)は、ウェブAPIや設定ファイルなどで広く使われる、軽量なデータ交換フォーマットです。Pythonの標準ライブラリであるjsonモジュールは、Pythonのデータ構造(辞書やリスト)とJSON形式の文字列を相互に変換するためのシ... -
Pythonで複数のCSVファイルからヘッダー行を削除するスクリプト
この記事では、特定のフォルダ内にあるすべてのCSVファイルから、先頭のヘッダー行を自動的に削除し、その結果を新しいファイルとして別のフォルダに保存するPythonスクリプトの作成方法を解説します。 1. プロジェクトの概要と準備 このスクリプトの目的... -
PythonのcsvモジュールによるCSVファイルの読み書き
Pythonの標準ライブラリであるcsvモジュールは、CSV(Comma Separated Values)形式のファイルを読み書きするためのシンプルで強力な機能を提供します。この記事では、その基本的な使い方を解説します。 CSVファイルの読み込み CSVファイルを読み込むには... -
【C++】オーバーロード入門 | 関数と演算子を多重定義する方法
はじめに C++では、同じスコープ内に、同じ名前の関数や演算子を複数定義することができます。これを**オーバーロード(多重定義)**と呼びます。コンパイラは、渡された引数の型や個数(シグネチャ)を元に、どのバージョンを呼び出すべきかを自動的に判... -
【C++】テンプレート (template) 入門 | 汎用的な関数とクラスの作り方
はじめに C++のテンプレート (template) は、型をパラメータ化することで、汎用的なコードを書くための非常に強力な機能です。単に関数やクラスを汎用化するだけでなく、可変長の引数を扱ったり、特定の型に対して特別な処理を定義したりと、C++の表現力を... -
【C++】constexprとは?コンパイル時定数を使いこなす方法
はじめに C++で、配列のサイズやテンプレートの引数を指定する際、その値はコンパイル時に確定している必要があります。従来は、const修飾子を付けた定数などがこの役割を担っていましたが、より複雑な計算結果をコンパイル時定数として扱いたい、という要... -
【C++】ラムダ式の使い方を徹底解説(キャプチャ、ジェネリックラムダ)
はじめに C++でstd::sortやstd::find_ifのような標準アルゴリズムを使う際、条件を指定するためだけに関数を別途定義するのは面倒な場合があります。 C++11で導入されたラムダ式は、このような「その場で使い捨ての簡単な関数が欲しい」という要求に応える... -
【C++20】コルーチン入門 | 処理を中断・再開できる関数の作り方
はじめに C++の通常の関数は、一度呼び出されたら、returnするまで処理を中断できません。しかし、非同期処理や、データを少しずつ生成するジェネレータのような機能では、「処理の途中で一旦中断し、呼び出し元に制御を戻し、後でまた続きから再開する」... -
【C++】プリプロセッサ指令 (#include, #define, #if 等) の使い方を徹底解説
はじめに C++のソースコードが、コンパイラによって機械語に翻訳される前には、「プリプロセス(前処理)」というステップが存在します。プリプロセッサは、このステップで動作し、# で始まる特別な**ディレクティブ(指令)**に従って、ソースコードのテ... -
【C++】名前空間 (namespace) の使い方を徹底解説(スコープ、エイリアス、using)
はじめに C++で大規模なプログラムを開発したり、複数の外部ライブラリを組み合わせて使ったりすると、異なる場所で定義された関数や変数が、偶然同じ名前を持ってしまうことがあります。これを「名前の衝突(競合)」と呼び、コンパイルエラーや意図しな... -
【C++】属性 ([[noreturn]], [[deprecated]]など) の使い方を解説
はじめに C++11以降、属性 [[...]] という統一的な構文が導入されました。属性は、コードの様々な要素(関数、クラス、変数など)に付加情報を与え、コンパイラの最適化を助けたり、特定のコードの使われ方について警告を出させたりするためのものです。 ... -
【C++】エラーハンドリングの3つの主要な方法(戻り値・例外・グローバル変数)
はじめに C++で堅牢なプログラムを作成するには、エラーハンドリングが不可欠です。ファイルが見つからない、ネットワークに接続できない、不正な入力が行われた、といったエラーは日常的に発生します。これらのエラーを放置すると、プログラムはクラッシ... -
【C++】標準例外クラスの使い方 | out_of_range 等のエラーを使い分ける
はじめに C++でエラーが発生した際、単に throw "エラーメッセージ"; のように文字列を投げるのではなく、標準ライブラリ <stdexcept> などで定義されている標準例外クラスを使うのが良い習慣です。 これらのクラスは std::exception を基底クラスと... -
【C++】noexcept の使い方 | 例外を送出しないことを明示する
はじめに C++の関数は、潜在的に例外を投げる可能性があります。しかし、ゲッター関数やムーブコンストラクタのように、「この関数は絶対に例外を送出しない」と分かっているものも多くあります。 C++11で導入された**noexcept指定子は、関数宣言の後ろに... -
【C++】std::error_code と system_error | OSレベルのエラーを扱う方法
はじめに C++で、ファイルが存在しない、ネットワークがダウンしている、アクセス権がない、といったOSが原因のエラーを処理する場合、単なる int のエラーコードを返すだけでは、エラーの原因が何であるかが分かりにくくなります。 C++11では、このような... -
【C++】std::exception_ptrで例外を保存・再送出する方法
はじめに C++の例外処理では、catchブロックで例外を捕捉すると、その場で処理するのが基本です。しかし、特にマルチスレッドプログラミングなどでは、「ワーカースレッドで発生した例外を、メインスレッドに伝えて、そこで処理させたい」という場面があり... -
【C++17】std::optional の使い方 | 値が存在しない可能性を表現する方法
はじめに C++で、関数が処理に成功した場合は値を返し、失敗した場合は「値がない」ことを示したい、という場面は頻繁にあります。従来は、-1のような特別な値(番兵)を返したり、ポインタでnullptrを返したり、boolの成否フラグを別途返したり、といった... -
【C++23】std::expected の使い方 | 正常値とエラー値を返す新しい方法
はじめに C++で、成功すれば結果を、失敗すればエラー情報を返したい関数を設計する際、従来はエラーコードを別途引数で受け取る、std::optionalを使う、例外を投げる、などの方法がありました。 C++23では、この「成功または失敗」を表現するための、より... -
Pythonのpython-docxでWord文書を読み書きする方法
この記事では、PythonでMicrosoft Wordファイル(.docx)を操作するためのライブラリpython-docxについて解説します。このライブラリを使えば、Word文書のテキスト読み込み、新規作成、段落や見出し、画像の追加、さらにはスタイルの適用といった作業を自... -
Pythonでフォルダ内の全PDFを一つのファイルに結合するスクリプト
この記事では、PythonのPyPDF2とpathlibライブラリを使い、特定のフォルダ内にあるすべてのPDFファイルをアルファベット順に一つのPDFファイルへと自動で結合する、実用的なスクリプトの作成方法を解説します。 1. 準備:PyPDF2のインストール このスクリ...