【ITニュース解説】OSD600 - Lab1
2025年09月13日に「Dev.to」が公開したITニュース「OSD600 - Lab1」について初心者にもわかりやすく解説しています。
ITニュース概要
OSD600コースで、Gitリポジトリを解析しLLM向けテキストを生成するツールを開発中。コードレビューを通じ、他者の設計理解の難しさや、自分のコードへの指摘を経験した。未完成でも共有し、共に改善するオープンソース精神と、反復開発の重要性、ソフトウェア設計の学びを得た。
ITニュース解説
OSD600コースの課題として「Repository Context Packager」というコマンドラインツールの開発プロジェクトが進められている。このツールは、コンピューター上でコードを管理するGitリポジトリの中身を分析し、その内容を大規模言語モデル(LLM)という人工知能が理解しやすいようなテキストファイルとして出力する。これにより、AIがコードをより効率的に学習し、理解できるようになることが期待されている。
プロジェクトの一環として、お互いのコードをレビューし合う機会があった。この経験は、システムエンジニアを目指す上で非常に貴重な学びの場となった。コードレビューとは、他の開発者が書いたコードを読み、改善点や潜在的な問題を指摘し、より良いコードに導く活動のことである。
コードレビューの方法には、大きく分けて「非同期」と「同期」の二つのアプローチがある。非同期レビューとは、各自が都合の良い時間にコードを読み、コメントを残したり、改善案を提案したりする方法である。今回のプロジェクトでは、学生それぞれのスケジュールが異なるため、非同期のアプローチが非常に有効であった。自分のペースでじっくりとコードを読み解き、考えをまとめる時間があるため、深い洞察が得やすい。一方で、同期レビューは、開発者たちが一堂に会してリアルタイムで議論する方法を指す。このプロジェクトでも、同期的な話し合いが実現し、コードに関する疑問点をすぐに解決したり、今後の開発方針について活発に意見交換したりすることで、プロジェクトが大きく前進した場面もあった。非同期でのじっくりとした考察と、同期での即時的なコミュニケーションの両方が、開発を進める上で重要であると理解できた。
他者のコードをレビューする経験も、多くの発見をもたらした。特に挑戦的だったのは、自分が使っているプログラミング言語とは全く異なる言語で書かれたコードを理解することであった。プログラミング言語が変わると、文法やコードの構造、設計思想なども大きく異なるため、最初は慣れるまでに時間を要した。しかし、この経験を通じて、同じ課題に対しても開発者ごとに多様な解決アプローチがあることを知り、視野が広がった。他者のアプリケーションを実際に動かしてみて、その実装方法を「遊びながら」探ることは、新しい技術や考え方に触れる楽しい機会でもあった。
自身のコードがレビューされる経験も、大きな学びをもたらした。開発中のコードは未完成な部分が多く、完璧とは言えない状態であるため、当初は他者に深く掘り下げられることに少し抵抗を感じた。しかし、これはオープンソース開発の本質である「コラボレーション」「共有」「共に改善する」という精神を理解する良い機会となった。コードレビューは、未完成な部分を指摘し、成長を促すための建設的なプロセスであり、決して個人の能力を判断するものではないと認識することで、安心してレビューを受け入れられるようになった。
実際にレビューを通じていくつかの重要な課題が浮上した。特に目立ったのは、Gitリポジトリの情報を正確に取得することと、リポジトリの構造を適切に表示することに関する問題である。Git情報取得については、ディレクトリ全体を対象とする場合は正しく機能したが、単一のファイルを指定した場合には処理が失敗するという課題が見つかった。また、リポジトリの構造表示に関しても、期待通りに階層構造が表現されず、単にファイル名やディレクトリ名が羅列されるだけ、という問題が頻繁に発生した。これらの課題は、偶然にも自身のプロジェクトでも直面していた問題であったため、他者のコードがどのようにこれらの部分を実装しているかを知ることで、解決への新たな視点を得ることができた。
さらに、細かなバグもいくつか指摘された。例えば、コマンドラインオプションの一つである--includeのショートフラグである-iが認識されないという問題があった。これは機能としては些細な点だが、ツールを使う人にとっての利便性(ユーザビリティ)に関わる重要な改善点である。もう一つは、リポジトリ内のディレクトリを再帰的に探索するtraverseDirという関数が、node_modulesや.gitといったシステム関連のフォルダや、隠しディレクトリを適切にスキップしていなかったという問題である。これらのフォルダは通常、解析の対象外であり、不要な探索を行うことで、大規模なリポジトリの場合に処理速度が著しく低下する可能性がある。不要なディレクトリを早期にスキップするチェックを追加することで、ツールのパフォーマンス向上が期待できる。
自身のコードに寄せられたこれらの課題は、モジュールを一つずつ段階的に追加していく開発アプローチをとっていたため、一部の機能がまだ完全に動作しない、あるいは他のモジュールとの連携が不十分であることに起因していた。この経験から、完璧な状態になってから変更をプッシュするのではなく、開発の途中で小さな改善を積み重ねていくことの重要性を再認識した。また、プロジェクトのREADMEファイルにツールのインストール手順を記載し忘れていたことも判明し、他者が自分のツールを使おうとした際に、まず何から始めれば良いか分からず、不便を感じさせてしまう点に気づかされた。
現在、指摘された課題の修正作業を進めている段階である。未完成な部分や一貫性のない状態のコードをテストしてくれた人たちには、申し訳ない気持ちも抱きつつ、この経験を通じて大きな学びを得ている。
この一連のテストとレビューのプロセスを通じて、特に「ソフトウェア設計」の奥深さと重要性を強く実感した。以前の課題では、作成すべきクラスやモジュールが明確に指示されていたが、今回はすべてを自分で考え、設計する必要があった。これは非常に挑戦的な作業であったが、その分、自力で設計を構築していく達成感は非常に大きかった。もちろん、途中で多くの助言や指導を求めたが、初めての試みで完璧な結果を出すことは難しい。しかし、この経験は将来、より良い設計ができるようになるための基盤となるだろう。
また、「反復的な開発(Iterative development)」の重要性も痛感した。これは、少しずつ改善を重ねながら開発を進めていく手法であり、小さな変更を頻繁に行うことで、他の開発者がプロジェクトに貢献しやすくなる。振り返ってみると、初期に行ったいくつかの選択が最善の方法ではなかったかもしれないが、これらの経験が、プロジェクトをより管理しやすく、多くの人と協力しながら開発を進められるようにするための、貴重な教訓となっていることは間違いない。