Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Commitment

2025年09月20日に「Dev.to」が公開したITニュース「Commitment」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

オープンソースプロジェクトへ初貢献。リポジトリに、最近更新されたファイルを表示する新機能を追加した。Gitでコードを取得し、Pythonでファイル更新日時をチェックする機能を実装。エラー処理やドキュメント更新も行い、実践的な開発の流れを体験した。

出典: Commitment | Dev.to公開日:

ITニュース解説

ニュース記事は、筆者がオープンソースの世界へ一歩踏み出し、その経験を共有したものだ。オープンソースとは、ソフトウェアの設計図にあたるソースコードが一般に公開されており、誰でも自由に利用、修正、再配布できるソフトウェアのことを指す。多くの開発者が協力してソフトウェアを改良していく文化が根付いている。筆者は「share-my-repo」という友人のリポジトリに新機能を追加することで、オープンソースへの具体的な貢献を果たした。これは、巨大なプロジェクトだけでなく、身近なところからもオープンソース活動を始められる良い例と言える。

開発を始めるにあたり、筆者はまず新しく追加したい機能の要望(Issue)をリポジトリに投稿した。ソフトウェア開発では、機能追加やバグ修正の提案をIssueとして管理することが一般的だ。次に、具体的な実装方法を調べるため、Stack Overflowなどの開発者向け情報サイトを積極的に活用した。これらのサイトは、プログラミングの疑問を解決したり、技術的な課題のヒントを得たりする上で非常に役立つ。実装方針が固まったら、リポジトリのコードに変更を加える準備として、Gitというバージョン管理システムを利用した。具体的には、まず「フォーク」という操作で、元のリポジトリのコピーを自分のアカウントに作成する。次に、そのコピーを「クローン」して、自分のパソコン上に開発環境を構築した。そして、既存のコードに影響を与えないよう、「ブランチ」と呼ばれる開発用の枝分かれを作成し、そのブランチ上で作業を進めた。この一連の作業は、オープンソースへの貢献やチーム開発において非常に重要なステップとなる。

今回の機能追加は、ユーザーがコマンドラインインターフェース、略してCLI(Command Line Interface)から操作できるようにするものだった。CLIは、テキスト入力によってコンピューターを操作する方法で、プログラマーにとっては非常に馴染み深い。筆者はcli.pyというファイルに、--recentまたは-rという新しい「フラグ」(オプション)を追加した。このフラグは、コマンドを実行する際に、特定の動作を指示するための目印のようなものだ。例えば、git log --onelineと入力すると、--onelineフラグによってログの表示形式が変わる。今回追加されたフラグも同様に、ファイルの一覧表示において「最近更新されたファイルだけを表示する」という新しい機能を発動させる役割を担う。既存のCLI引数の仕組みを理解すれば、この部分の実装は比較的シンプルに進められる。

この機能の核となるのは、どのファイルが「最近更新された」ものかを判断するロジックだ。筆者はfile_processor.pyというファイルに、is_recent(file, days=7)というヘルパー関数を作成した。この関数は、指定されたファイルが7日以内に更新されたかどうかをチェックする。Pythonのos.stat()関数は、ファイルに関する様々な情報(サイズ、作成日時、更新日時など)を取得するために使われる。特にst_mtimeという属性は、ファイルの最終更新時刻をタイムスタンプという数値形式で保持している。このタイムスタンプと、time.time()で取得できる現在のタイムスタンプを比較し、その差分を日数に変換する。もしその差分が7日以内であれば、そのファイルは「最近更新されたファイル」として認識される。このような時間の比較処理は、ファイルシステムの操作において頻繁に用いられる基本的なテクニックだ。

ソフトウェア開発では、常に予期せぬ状況、いわゆる「エッジケース」に備える必要がある。例えば、指定されたファイルが存在しない場合や、対象となるリポジトリが空っぽの場合などだ。筆者はこれらのエッジケースに対処するため、適切なエラー処理を実装した。ファイルが存在しない場合は、try...except FileNotFoundErrorという構文を使って、エラーが発生してもプログラムがクラッシュせずに、その状況を適切にハンドリングできるようにした。これは、特定の処理でエラーが発生する可能性がある場合に、そのエラーを捕まえて別の処理を実行させるための標準的な方法だ。また、空のリポジトリに対してこの機能が実行された場合は、エラーを起こすことなく、単に空のリストを返すように設計した。このように、あらゆる可能性を考慮し、堅牢なプログラムを作成することが、信頼性の高いソフトウェアを作る上で不可欠だ。

新機能が実装されたら、それをユーザーに分かりやすい形で提示する必要がある。筆者はformatter.pyというファイルで、出力形式を整形し、新しいセクション「## Recent Changes」を追加した。このセクションでは、最近更新されたファイルがリスト形式で表示され、それぞれが何日前に更新されたかという情報も付加される。これにより、ユーザーは一目でどのファイルが最近変更されたのかを把握できる。例として、「src/main.py (modified 2 days ago)」のように表示される。また、新しい機能を追加した際には、その使い方をユーザーに伝えるためのドキュメントも非常に重要となる。そのため、筆者はリポジトリのREADME.mdファイルも更新した。README.mdは、プロジェクトの概要や使い方、設定方法などをまとめた説明書のようなもので、新しいフラグの利用方法や具体例を記載することで、他の開発者がこの新機能を簡単に活用できるように配慮した。

今回の経験を通して、筆者はオープンソースへの貢献という具体的な一歩を踏み出した。これは単にコードを書くだけでなく、課題の発見、解決策の調査、Gitを使ったバージョン管理、そして他の開発者との協力といった、システムエンジニアにとって非常に重要な一連のプロセスを学ぶ機会となった。Stack Overflowのようなリソースの活用や、コードリーディング、そして問題解決への取り組みは、成長に不可欠な要素である。新機能の追加、エッジケースへの対応、そしてドキュメントの更新までの一連の作業は、一見小さな貢献に見えるかもしれないが、ソフトウェア開発の全体像を理解し、実践的なスキルを身につける上で計り知れない価値がある。このような地道な積み重ねが、将来のシステムエンジニアとしての基礎を築き、より複雑な問題解決へとつながっていくのだ。

関連コンテンツ

関連IT用語

【ITニュース解説】Commitment | いっしー@Webエンジニア